diff --git a/.env b/.env index 6a075b88..e7f036e0 100644 --- a/.env +++ b/.env @@ -52,10 +52,10 @@ SUPPORT_MAIL=support@lokal.lokal #MAILER_URL=null://localhost ###< symfony/swiftmailer-bundle ### - ###ODC Parameters### imprint=test dataPrivacy=test +superAdminRole=odc-super-admin ###Cron Parameters### CRON_TOKEN=tpyv5yDIV54ifahrVJmuJ40qExRdNa2344DFADFsdsfenN3rCMkQW8Br1o1W9JP9uUc1N @@ -74,4 +74,4 @@ demo_installation=prod #demo ###> LaF ### laF_version=2.0.0-dev -###< LaF ### \ No newline at end of file +###< LaF ### diff --git a/.env.sample b/.env.sample index 7bb5ef01..47469686 100644 --- a/.env.sample +++ b/.env.sample @@ -1,5 +1,4 @@ DATABASE_URL=mysql://:@:3306/ -DATABSE_SERVER= ###> symfony/framework-bundle ### APP_ENV=dev/prod @@ -7,12 +6,7 @@ APP_DEBUG=1/0 APP_SECRET= ###> symfony/swift_mailer ### -MAILER_HOST= -MAILER_PORT=587 -MAILER_PASSWORD= -MAILER_USERNAME= -MAILER_ENCRYPTION=tls -MAILER_TRANSPORT=smtp +MAILER_DSN=null://null ###ODC Parameters### imprint= diff --git a/README.md b/README.md index 9f06fd62..3bd38975 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,11 @@ __Open Source Datenschutzmanagement System__ Der Open Datenschutzcenter (ODC) ist ein Open Source Datenschutzmanagement-System für Unternehmen und Datenschutzbeauftragte. Der ODC wird kontinuierlich mit einer aktiven Community von Unternehmen, Datenschutzbeauftragten und Informationssicherheitsbeauftragten weiterentwickelt. Open Source bedeutet, dass der Quellcode der Software öffentlich zugänglich zur Verfügung steht. Unternehmen können den ODC auf einem eigenen Server betrieben, eigene Funktionen entwickeln und die Funktionalität erweitern. Die H2 Invent GmbH ist das Unternehmen hinter dem Open Datenschutzcenter und verwaltet das Repository, das Wiki und die Releases. H2 Invent entwickelt für Unternehmen neue ODC Funktionen um diesen den Anforderungen des Unternehmens anzupassen. +### Übersetzungen [![Crowdin](https://badges.crowdin.net/open-datenschutz-center/localized.svg)](https://crowdin.com/project/open-datenschutz-center) +Helfen Sie mit den Open Datenschutz Center noch besser zu machen. Wir suchen jederzeit neue Übersetungen in alle Sprachen. +Übersetzungen werden über Crowdin organisiert und können dort einfach und unkompliziert Übersetzt werden. +https://crowdin.com/project/open-datenschutz-center + # Funktionen Folgende Funktionen sind bereits im Open Datenschutzcenter integriert: * Datenschutzakademie für interne Datenschutzschulungen zum Nachweis der kontinuierlichen Datenschutzweitergildung der Beschäftigten. diff --git a/assets/css/style.css b/assets/css/style.css index f3dd7a05..28a81d48 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -153,7 +153,39 @@ a:focus { margin: 40px 0; } -/* --------------------------------------------------- +.team-select .nav-link { + background: none !important; +} + +.team-select .dropdown-item { + display: block !important; +} + +.team-select .dropdown-item[disabled] { + color: #666 !important; + background: none !important; + cursor: auto; +} + +.team-select { + padding-right: 1.5rem; +} + +.team-select:after { + content: ''; + position: absolute; + display: block; + width: 0; + height: 0; + border-right: .325rem solid transparent; + border-left: .325rem solid transparent; + border-top: .325rem solid #212529; + right: .75rem; + top: 50%; + transform: translateY(-50%); +} + +/* ----------------------- .navbar-nav .nav-item .nav-link:hover {---------------------------- SIDEBAR STYLE ----------------------------------------------------- */ @@ -170,7 +202,7 @@ a:focus { left: -250px; height: 100vh; z-index: 999; - background-image: url("/images/navigation.jpg"); + background-image: url("../../public/images/navigation.jpg"); background-repeat: no-repeat; background-size: cover; color: #000000; @@ -179,6 +211,17 @@ a:focus { box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.2); } +#sidebarCollapse { + border: transparent; + background: transparent; + outline: none; +} + +#sidebarCollapse span { + width: 1.75rem; + height: 1.75rem; +} + #sidebar.active { left: 0; } @@ -301,10 +344,6 @@ a.article:hover { #sidebar.active { margin-left: 0; } - - #sidebarCollapse span { - display: none; - } } /* --------------------------------------------------- @@ -322,7 +361,7 @@ a.article:hover { Add Reuqired Symbole to Forms ----------------------------------------------------- */ -label.required:after { +label:not(.form-check-label).required:after { content: " *"; } @@ -570,4 +609,5 @@ label.required:after { .thin::-webkit-scrollbar { width: 10px; -} \ No newline at end of file +} + diff --git a/assets/js/app.js b/assets/js/app.js index e3a3f2d5..1d338f4e 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -9,6 +9,7 @@ import $ from 'jquery'; import 'datatables.net-dt'; import 'summernote/dist/summernote-bs4'; import * as h2Button from 'h2-invent-apps'; +import {initFreeFields} from './freeField'; global.$ = global.jQuery = $; @@ -29,7 +30,6 @@ $(document).ready(function () { }, 3000); }, 500); - $('#dismiss, .overlay').on('click', function () { // hide sidebar $('#sidebar').removeClass('active'); @@ -46,12 +46,39 @@ $(document).ready(function () { $('a[aria-expanded=true]').attr('aria-expanded', 'false'); }); - $('#data-table').DataTable({ dom: 'Bfrtip', buttons: [ - 'csv', 'excel' + { + extend: 'csv', + exportOptions: { + columns: ':not(.hide-in-export)' + } + }, + { + extend: 'excel', + exportOptions: { + columns: ':not(.hide-in-export)' + } + } + ] + }); + $('.data-table').DataTable({ + dom: 'Bfrtip', + buttons: [ + { + extend: 'csv', + exportOptions: { + columns: ':not(.hide-in-export)' + } + }, + { + extend: 'excel', + exportOptions: { + columns: ':not(.hide-in-export)' + } + } ] }); @@ -88,6 +115,8 @@ $(document).ready(function () { $('.sendButton').addClass('disabled'); } }); + + initFreeFields(); }); $(document).on('click', '.loadContent', function (e) { diff --git a/assets/js/freeField.js b/assets/js/freeField.js new file mode 100644 index 00000000..9f006efb --- /dev/null +++ b/assets/js/freeField.js @@ -0,0 +1,37 @@ +import $ from "jquery"; +function addFormToCollection($collectionHolderClass) { + var $collectionHolder = $('.' + $collectionHolderClass); + var prototype = $collectionHolder.data('prototype'); + var index = $collectionHolder.data('index'); + var newForm = prototype; + newForm = newForm.replace(/__name__/g, index); + $collectionHolder.data('index', index + 1); + console.log('index', index); + let $newFormLi = $('
  • ') + .append(newForm) + $collectionHolder.append($newFormLi); + addTagFormDeleteLink($newFormLi); +} + +function addTagFormDeleteLink($tagFormLi) { + var $removeFormButton = $('
    X
    '); + $tagFormLi.append($removeFormButton); + $removeFormButton.on('click', function(e) { + $tagFormLi.remove(); + }); +} +function initFreeFields(){ + $('#add_item_link').off('click') + var $groupsCollectionHolder = $('ul.freeField'); + $groupsCollectionHolder.find('li').each(function() { + addTagFormDeleteLink($(this)); + }); + + $groupsCollectionHolder.data('index', $groupsCollectionHolder.find('input').length); + $('#add_item_link').on('click', function(e) { + + var $collectionHolderClass = $(e.currentTarget).data('collectionHolderClass'); + addFormToCollection($collectionHolderClass); + }) +}; +export {initFreeFields}; \ No newline at end of file diff --git a/composer.json b/composer.json index 68caeafe..81640b4d 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "type": "project", "license": "proprietary", "require": { - "php": "^7.4.25", + "php": "^8.1", "ext-ctype": "*", "ext-iconv": "*", "composer/package-versions-deprecated": "^1.10", @@ -10,67 +10,68 @@ "doctrine/doctrine-bundle": "^2.5", "doctrine/doctrine-migrations-bundle": "^3.2", "doctrine/orm": "^2.10", - "h2entwicklung/doctrine-encrypt-bundle": "^4.0", "knpuniversity/oauth2-client-bundle": "^2.5", - "laminas/laminas-code": "^3.4", + "laminas/laminas-code": "^4.5", "laminas/laminas-escaper": "^2.6", + "michaeldegroot/doctrine-encrypt-bundle": "^5.1", "nicoswd/php-gpg": "^1.7", "nucleos/dompdf-bundle": "^3.0", - "oneup/flysystem-bundle": "^3.4", + "oneup/flysystem-bundle": "^4.3", "phpdocumentor/reflection-docblock": "^5.3", - "phpoffice/phpword": "^0.17.0", + "phpoffice/phpword": "^1.0.0", "phpstan/phpdoc-parser": "^1.2", - "sensio/framework-extra-bundle": "^5.4", + "sensio/framework-extra-bundle": "^6.2", "stevenmaguire/oauth2-keycloak": "^2.2", "symfony/apache-pack": "^1.0", - "symfony/asset": "5.4.*", - "symfony/console": "5.4.*", - "symfony/dotenv": "5.4.*", - "symfony/expression-language": "5.4.*", + "symfony/asset": "6.2.*", + "symfony/console": "6.2.*", + "symfony/dotenv": "6.2.*", + "symfony/expression-language": "6.2.*", "symfony/flex": "^1.3.1", - "symfony/form": "5.4.*", - "symfony/framework-bundle": "5.4.*", - "symfony/http-client": "5.4.*", - "symfony/intl": "5.4.*", - "symfony/mailer": "5.4.*", + "symfony/form": "6.2.*", + "symfony/framework-bundle": "6.2.*", + "symfony/http-client": "6.2.*", + "symfony/intl": "6.2.*", + "symfony/mailer": "6.2.*", "symfony/monolog-bundle": "^3.1", - "symfony/process": "5.4.*", - "symfony/property-access": "5.4.*", - "symfony/property-info": "5.4.*", - "symfony/proxy-manager-bridge": "5.4.*", - "symfony/security-bundle": "5.4.*", - "symfony/serializer": "5.4.*", - "symfony/swiftmailer-bundle": "^3.4", - "symfony/templating": "5.4.*", - "symfony/translation": "5.4.*", - "symfony/twig-bundle": "5.4.*", - "symfony/validator": "5.4.*", - "symfony/web-link": "5.4.*", + "symfony/process": "6.2.*", + "symfony/property-access": "6.2.*", + "symfony/property-info": "6.2.*", + "symfony/proxy-manager-bridge": "6.2.*", + "symfony/runtime": "6.2.*", + "symfony/security-bundle": "6.2.*", + "symfony/serializer": "6.2.*", + "symfony/templating": "6.2.*", + "symfony/translation": "6.2.*", + "symfony/twig-bundle": "6.2.*", + "symfony/validator": "6.2.*", + "symfony/web-link": "6.2.*", "symfony/webpack-encore-bundle": "^1.7", - "symfony/yaml": "5.4.*", + "symfony/yaml": "6.2.*", "twig/cssinliner-extra": "^3.0", "twig/extra-bundle": "^2.12|^3.0", "twig/inky-extra": "^3.0", "twig/twig": "^2.0", - "vich/uploader-bundle": "^1.13" + "vich/uploader-bundle": "^1.13", + "ext-http": "*" }, "require-dev": { "phpunit/phpunit": "^9.5", - "symfony/browser-kit": "5.4.*", - "symfony/css-selector": "5.4.*", - "symfony/debug-bundle": "5.4.*", + "symfony/browser-kit": "6.2.*", + "symfony/css-selector": "6.2.*", + "symfony/debug-bundle": "6.2.*", "symfony/maker-bundle": "^1.38", - "symfony/phpunit-bridge": "^6.0", - "symfony/stopwatch": "5.4.*", - "symfony/web-profiler-bundle": "5.4.*", - "symfony/web-server-bundle": "4.4.*" + "symfony/phpunit-bridge": "^6.2", + "symfony/stopwatch": "6.2.*", + "symfony/web-profiler-bundle": "6.2.*" }, "config": { "preferred-install": { "*": "dist" }, "allow-plugins": { - "symfony/flex": true + "symfony/flex": true, + "symfony/runtime": true }, "sort-packages": true }, @@ -102,6 +103,14 @@ ], "post-update-cmd": [ "@auto-scripts" + ], + "db-create": "php bin/console doctrine:database:create --if-not-exists", + "db-drop": "php bin/console doctrine:database:drop --force --if-exists", + "db-migrate": "php bin/console doctrine:migrations:migrate -n", + "db-reset": [ + "@db-drop", + "@db-create", + "@db-migrate" ] }, "conflict": { @@ -110,7 +119,7 @@ "extra": { "symfony": { "allow-contrib": false, - "require": "5.4.*" + "require": "6.2.*" } } } diff --git a/composer.lock b/composer.lock index 434e3d6d..cddc821f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "de4495b37f8369a8e30d981ad74423c9", + "content-hash": "07c604ad9a9159a8a954eaad75d60ec3", "packages": [ { "name": "composer/package-versions-deprecated", - "version": "1.11.99.4", + "version": "1.11.99.5", "source": { "type": "git", "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "b174585d1fe49ceed21928a945138948cb394600" + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b174585d1fe49ceed21928a945138948cb394600", - "reference": "b174585d1fe49ceed21928a945138948cb394600", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", "shasum": "" }, "require": { @@ -61,7 +61,7 @@ "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", "support": { "issues": "https://github.com/composer/package-versions-deprecated/issues", - "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.4" + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" }, "funding": [ { @@ -77,34 +77,38 @@ "type": "tidelift" } ], - "time": "2021-09-13T08:41:34+00:00" + "time": "2022-01-17T14:14:24+00:00" }, { "name": "doctrine/annotations", - "version": "1.13.2", + "version": "1.14.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08" + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", "shasum": "" }, "require": { - "doctrine/lexer": "1.*", + "doctrine/lexer": "^1 || ^2", "ext-tokenizer": "*", "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "vimeo/psalm": "^4.10" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" }, "type": "library", "autoload": { @@ -147,22 +151,22 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.2" + "source": "https://github.com/doctrine/annotations/tree/1.14.3" }, - "time": "2021-08-05T19:00:23+00:00" + "time": "2023-02-01T09:20:38+00:00" }, { "name": "doctrine/cache", - "version": "2.1.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", "shasum": "" }, "require": { @@ -172,18 +176,12 @@ "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^8.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "predis/predis": "~1.0", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev", - "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" }, "type": "library", "autoload": { @@ -232,7 +230,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.1.1" + "source": "https://github.com/doctrine/cache/tree/2.2.0" }, "funding": [ { @@ -248,35 +246,38 @@ "type": "tidelift" } ], - "time": "2021-07-17T14:49:29+00:00" + "time": "2022-05-20T20:07:39+00:00" }, { "name": "doctrine/collections", - "version": "1.6.8", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af" + "reference": "db8cda536a034337f7dd63febecc713d4957f9ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/1958a744696c6bb3bb0d28db2611dc11610e78af", - "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af", + "url": "https://api.github.com/repos/doctrine/collections/zipball/db8cda536a034337f7dd63febecc713d4957f9ee", + "reference": "db8cda536a034337f7dd63febecc713d4957f9ee", "shasum": "" }, "require": { - "php": "^7.1.3 || ^8.0" + "doctrine/deprecations": "^1", + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5", - "vimeo/psalm": "^4.2.1" + "doctrine/coding-standard": "^10.0", + "ext-json": "*", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.22" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" + "Doctrine\\Common\\Collections\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -315,41 +316,56 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/1.6.8" + "source": "https://github.com/doctrine/collections/tree/2.1.2" }, - "time": "2021-08-10T18:51:53+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections", + "type": "tidelift" + } + ], + "time": "2022-12-27T23:41:38+00:00" }, { "name": "doctrine/common", - "version": "3.2.0", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "6d970a11479275300b5144e9373ce5feacfa9b91" + "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/6d970a11479275300b5144e9373ce5feacfa9b91", - "reference": "6d970a11479275300b5144e9373ce5feacfa9b91", + "url": "https://api.github.com/repos/doctrine/common/zipball/8b5e5650391f851ed58910b3e3d48a71062eeced", + "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced", "shasum": "" }, "require": { - "doctrine/persistence": "^2.0", + "doctrine/persistence": "^2.0 || ^3.0", "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0 || ^8.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", + "doctrine/coding-standard": "^9.0 || ^10.0", + "doctrine/collections": "^1", + "phpstan/phpstan": "^1.4.1", + "phpstan/phpstan-phpunit": "^1", "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", "squizlabs/php_codesniffer": "^3.0", - "symfony/phpunit-bridge": "^4.0.5", + "symfony/phpunit-bridge": "^6.1", "vimeo/psalm": "^4.4" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -391,7 +407,7 @@ ], "support": { "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.2.0" + "source": "https://github.com/doctrine/common/tree/3.4.3" }, "funding": [ { @@ -407,42 +423,43 @@ "type": "tidelift" } ], - "time": "2021-10-19T06:47:22+00:00" + "time": "2022-10-09T11:47:59+00:00" }, { "name": "doctrine/dbal", - "version": "3.2.0", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "5d54f63541d7bed1156cb5c9b79274ced61890e4" + "reference": "85b98cb23c8af471a67abfe14485da696bcabc2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/5d54f63541d7bed1156cb5c9b79274ced61890e4", - "reference": "5d54f63541d7bed1156cb5c9b79274ced61890e4", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/85b98cb23c8af471a67abfe14485da696bcabc2e", + "reference": "85b98cb23c8af471a67abfe14485da696bcabc2e", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.11.99", + "composer-runtime-api": "^2", "doctrine/cache": "^1.11|^2.0", - "doctrine/deprecations": "^0.5.3", - "doctrine/event-manager": "^1.0", - "php": "^7.3 || ^8.0", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2021.1", - "phpstan/phpstan": "1.2.0", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "9.5.10", - "psalm/plugin-phpunit": "0.16.1", - "squizlabs/php_codesniffer": "3.6.1", - "symfony/cache": "^5.2|^6.0", - "symfony/console": "^2.0.5|^3.0|^4.0|^5.0|^6.0", - "vimeo/psalm": "4.13.0" + "doctrine/coding-standard": "11.1.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2022.3", + "phpstan/phpstan": "1.9.14", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "9.6.3", + "psalm/plugin-phpunit": "0.18.4", + "squizlabs/php_codesniffer": "3.7.1", + "symfony/cache": "^5.4|^6.0", + "symfony/console": "^4.4|^5.4|^6.0", + "vimeo/psalm": "4.30.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -502,7 +519,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.2.0" + "source": "https://github.com/doctrine/dbal/tree/3.6.0" }, "funding": [ { @@ -518,29 +535,29 @@ "type": "tidelift" } ], - "time": "2021-11-26T21:00:12+00:00" + "time": "2023-02-07T22:52:03+00:00" }, { "name": "doctrine/deprecations", - "version": "v0.5.3", + "version": "v1.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314" + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", "shasum": "" }, "require": { "php": "^7.1|^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0|^7.0|^8.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0", - "psr/log": "^1.0" + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -559,61 +576,63 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v0.5.3" + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" }, - "time": "2021-03-21T12:59:47+00:00" + "time": "2022-05-02T15:47:09+00:00" }, { "name": "doctrine/doctrine-bundle", - "version": "2.5.2", + "version": "2.8.3", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "5b77477ba2981a00b423d1bb17084b87eb57a4a5" + "reference": "fd67ba64db3c806f626a33dcab15a4db0c77652e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/5b77477ba2981a00b423d1bb17084b87eb57a4a5", - "reference": "5b77477ba2981a00b423d1bb17084b87eb57a4a5", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/fd67ba64db3c806f626a33dcab15a4db0c77652e", + "reference": "fd67ba64db3c806f626a33dcab15a4db0c77652e", "shasum": "" }, "require": { - "doctrine/annotations": "^1", "doctrine/cache": "^1.11 || ^2.0", - "doctrine/dbal": "^2.13.1|^3.1", - "doctrine/persistence": "^2.2", + "doctrine/dbal": "^3.4.0", + "doctrine/persistence": "^2.2 || ^3", "doctrine/sql-formatter": "^1.0.1", - "php": "^7.1 || ^8.0", - "symfony/cache": "^4.3.3|^5.0|^6.0", - "symfony/config": "^4.4.3|^5.0|^6.0", - "symfony/console": "^3.4.30|^4.3.3|^5.0|^6.0", - "symfony/dependency-injection": "^4.3.3|^5.0|^6.0", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/doctrine-bridge": "^4.4.22|^5.2.7|^6.0", - "symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0|^6.0", - "symfony/service-contracts": "^1.1.1|^2.0|^3" + "php": "^7.4 || ^8.0", + "symfony/cache": "^5.4 || ^6.0", + "symfony/config": "^5.4 || ^6.0", + "symfony/console": "^5.4 || ^6.0", + "symfony/dependency-injection": "^5.4 || ^6.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/doctrine-bridge": "^5.4.19 || ^6.0.7", + "symfony/framework-bundle": "^5.4 || ^6.0", + "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" }, "conflict": { - "doctrine/orm": "<2.9", - "twig/twig": "<1.34|>=2.0,<2.4" + "doctrine/annotations": ">=3.0", + "doctrine/orm": "<2.11 || >=3.0", + "twig/twig": "<1.34 || >=2.0,<2.4" }, "require-dev": { + "doctrine/annotations": "^1 || ^2", "doctrine/coding-standard": "^9.0", - "doctrine/orm": "^2.9", + "doctrine/orm": "^2.11 || ^3.0", "friendsofphp/proxy-manager-lts": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.3 || ^10.0", - "psalm/plugin-phpunit": "^0.16.1", - "psalm/plugin-symfony": "^3", - "symfony/phpunit-bridge": "^5.2|^6.0", - "symfony/property-info": "^4.3.3|^5.0|^6.0", - "symfony/proxy-manager-bridge": "^3.4|^4.3.3|^5.0|^6.0", - "symfony/security-bundle": "^4.4|^5.0|^6.0", - "symfony/twig-bridge": "^3.4.30|^4.3.3|^5.0|^6.0", - "symfony/validator": "^3.4.30|^4.3.3|^5.0|^6.0", - "symfony/web-profiler-bundle": "^3.4.30|^4.3.3|^5.0|^6.0", - "symfony/yaml": "^3.4.30|^4.3.3|^5.0|^6.0", - "twig/twig": "^1.34|^2.12|^3.0", - "vimeo/psalm": "^4.7" + "phpunit/phpunit": "^9.5.26 || ^10.0", + "psalm/plugin-phpunit": "^0.18.4", + "psalm/plugin-symfony": "^4", + "psr/log": "^1.1.4 || ^2.0 || ^3.0", + "symfony/phpunit-bridge": "^6.1", + "symfony/property-info": "^5.4 || ^6.0", + "symfony/proxy-manager-bridge": "^5.4 || ^6.0", + "symfony/security-bundle": "^5.4 || ^6.0", + "symfony/twig-bridge": "^5.4 || ^6.0", + "symfony/validator": "^5.4 || ^6.0", + "symfony/web-profiler-bundle": "^5.4 || ^6.0", + "symfony/yaml": "^5.4 || ^6.0", + "twig/twig": "^1.34 || ^2.12 || ^3.0", + "vimeo/psalm": "^4.30" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -641,15 +660,15 @@ }, { "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "homepage": "https://symfony.com/contributors" }, { "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org/" + "homepage": "https://www.doctrine-project.org/" } ], "description": "Symfony DoctrineBundle", - "homepage": "http://www.doctrine-project.org", + "homepage": "https://www.doctrine-project.org", "keywords": [ "database", "dbal", @@ -658,7 +677,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.5.2" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.8.3" }, "funding": [ { @@ -674,20 +693,20 @@ "type": "tidelift" } ], - "time": "2021-12-01T10:13:31+00:00" + "time": "2023-02-03T09:32:42+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", - "version": "3.2.1", + "version": "3.2.2", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "c1b10bc1466e08bba82640e49c7bbcce0c9853c2" + "reference": "3393f411ba25ade21969c33f2053220044854d01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/c1b10bc1466e08bba82640e49c7bbcce0c9853c2", - "reference": "c1b10bc1466e08bba82640e49c7bbcce0c9853c2", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/3393f411ba25ade21969c33f2053220044854d01", + "reference": "3393f411ba25ade21969c33f2053220044854d01", "shasum": "" }, "require": { @@ -727,11 +746,11 @@ }, { "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org" + "homepage": "https://www.doctrine-project.org" }, { "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony DoctrineMigrationsBundle", @@ -743,7 +762,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", - "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.2.1" + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.2.2" }, "funding": [ { @@ -759,41 +778,38 @@ "type": "tidelift" } ], - "time": "2021-11-11T11:08:52+00:00" + "time": "2022-02-01T18:08:07+00:00" }, { "name": "doctrine/event-manager", - "version": "1.1.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "conflict": { - "doctrine/common": "<2.9@dev" + "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpunit/phpunit": "^7.0" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.28" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -837,7 +853,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.x" + "source": "https://github.com/doctrine/event-manager/tree/2.0.0" }, "funding": [ { @@ -853,32 +869,32 @@ "type": "tidelift" } ], - "time": "2020-05-29T18:28:51+00:00" + "time": "2022-10-12T20:59:15+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.4", + "version": "2.0.6", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "vimeo/psalm": "^4.10" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25" }, "type": "library", "autoload": { @@ -928,7 +944,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.4" + "source": "https://github.com/doctrine/inflector/tree/2.0.6" }, "funding": [ { @@ -944,33 +960,34 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:16:43+00:00" + "time": "2022-10-20T09:10:12+00:00" }, { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { @@ -997,7 +1014,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { @@ -1013,39 +1030,37 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.1", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1077,7 +1092,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.1" + "source": "https://github.com/doctrine/lexer/tree/2.1.0" }, "funding": [ { @@ -1093,49 +1108,51 @@ "type": "tidelift" } ], - "time": "2020-05-25T17:44:05+00:00" + "time": "2022-12-14T08:49:07+00:00" }, { "name": "doctrine/migrations", - "version": "3.3.2", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "b6e43bb5815f4dbb88c79a0fef1c669dfba52d58" + "reference": "e542ad8bcd606d7a18d0875babb8a6d963c9c059" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/b6e43bb5815f4dbb88c79a0fef1c669dfba52d58", - "reference": "b6e43bb5815f4dbb88c79a0fef1c669dfba52d58", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/e542ad8bcd606d7a18d0875babb8a6d963c9c059", + "reference": "e542ad8bcd606d7a18d0875babb8a6d963c9c059", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.8", - "doctrine/dbal": "^2.11 || ^3.0", - "doctrine/deprecations": "^0.5.3", - "doctrine/event-manager": "^1.0", - "friendsofphp/proxy-manager-lts": "^1.0", - "php": "^7.2 || ^8.0", + "composer-runtime-api": "^2", + "doctrine/dbal": "^3.5.1", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2.0", + "php": "^8.1", "psr/log": "^1.1.3 || ^2 || ^3", - "symfony/console": "^3.4 || ^4.4.16 || ^5.0 || ^6.0", - "symfony/stopwatch": "^3.4 || ^4.0 || ^5.0 || ^6.0" + "symfony/console": "^4.4.16 || ^5.4 || ^6.0", + "symfony/stopwatch": "^4.4 || ^5.4 || ^6.0", + "symfony/var-exporter": "^6.2" + }, + "conflict": { + "doctrine/orm": "<2.12" }, "require-dev": { - "doctrine/coding-standard": "^8.0", - "doctrine/orm": "^2.6", - "doctrine/persistence": "^1.3 || ^2.0", + "doctrine/coding-standard": "^9", + "doctrine/orm": "^2.13", + "doctrine/persistence": "^2 || ^3", "doctrine/sql-formatter": "^1.0", - "ergebnis/composer-normalize": "^2.9", "ext-pdo_sqlite": "*", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpstan/phpstan-symfony": "^0.12", - "phpunit/phpunit": "^8.5 || ^9.4", - "symfony/cache": "^3.4.26 || ~4.1.12 || ^4.2.7 || ^5.0 || ^6.0", - "symfony/process": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0" + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan-symfony": "^1.1", + "phpunit/phpunit": "^9.5.24", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "symfony/process": "^4.4 || ^5.4 || ^6.0", + "symfony/yaml": "^4.4 || ^5.4 || ^6.0" }, "suggest": { "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", @@ -1145,12 +1162,6 @@ "bin/doctrine-migrations" ], "type": "library", - "extra": { - "composer-normalize": { - "indent-size": 4, - "indent-style": "space" - } - }, "autoload": { "psr-4": { "Doctrine\\Migrations\\": "lib/Doctrine/Migrations" @@ -1183,7 +1194,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.3.2" + "source": "https://github.com/doctrine/migrations/tree/3.6.0" }, "funding": [ { @@ -1199,57 +1210,59 @@ "type": "tidelift" } ], - "time": "2021-11-12T09:03:27+00:00" + "time": "2023-02-15T18:49:46+00:00" }, { "name": "doctrine/orm", - "version": "2.10.3", + "version": "2.14.1", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "7b242753466508e1dd10f67c1baee95785f845c1" + "reference": "de7eee5ed7b1b35c99b118f26f210a8281e6db8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/7b242753466508e1dd10f67c1baee95785f845c1", - "reference": "7b242753466508e1dd10f67c1baee95785f845c1", + "url": "https://api.github.com/repos/doctrine/orm/zipball/de7eee5ed7b1b35c99b118f26f210a8281e6db8e", + "reference": "de7eee5ed7b1b35c99b118f26f210a8281e6db8e", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.8", + "composer-runtime-api": "^2", "doctrine/cache": "^1.12.1 || ^2.1.1", - "doctrine/collections": "^1.5", + "doctrine/collections": "^1.5 || ^2.0", "doctrine/common": "^3.0.3", - "doctrine/dbal": "^2.13.1 || ^3.1.1", - "doctrine/deprecations": "^0.5.3", - "doctrine/event-manager": "^1.1", + "doctrine/dbal": "^2.13.1 || ^3.2", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2", "doctrine/inflector": "^1.4 || ^2.0", "doctrine/instantiator": "^1.3", - "doctrine/lexer": "^1.0", - "doctrine/persistence": "^2.2", + "doctrine/lexer": "^1.2.3 || ^2", + "doctrine/persistence": "^2.4 || ^3", "ext-ctype": "*", - "ext-pdo": "*", - "php": "^7.1 ||^8.0", + "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^3.0 || ^4.0 || ^5.0 || ^6.0", + "symfony/console": "^4.2 || ^5.0 || ^6.0", "symfony/polyfill-php72": "^1.23", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "doctrine/annotations": "<1.13 || >= 2.0" + "doctrine/annotations": "<1.13 || >= 3.0" }, "require-dev": { - "doctrine/annotations": "^1.13", - "doctrine/coding-standard": "^9.0", + "doctrine/annotations": "^1.13 || ^2", + "doctrine/coding-standard": "^9.0.2 || ^11.0", "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "1.2.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", - "squizlabs/php_codesniffer": "3.6.1", - "symfony/cache": "^4.4 || ^5.2", + "phpstan/phpstan": "~1.4.10 || 1.9.8", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/log": "^1 || ^2 || ^3", + "squizlabs/php_codesniffer": "3.7.1", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2", "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "4.13.1" + "vimeo/psalm": "4.30.0 || 5.4.0" }, "suggest": { + "ext-dom": "Provides support for XSD validation for XML mapping files", "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0", "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" }, @@ -1296,50 +1309,47 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.10.3" + "source": "https://github.com/doctrine/orm/tree/2.14.1" }, - "time": "2021-12-03T12:27:05+00:00" + "time": "2023-01-16T18:36:59+00:00" }, { "name": "doctrine/persistence", - "version": "2.2.3", + "version": "3.1.4", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "5e7bdbbfe9811c06e1f745d1c166647d5c47d6ee" + "reference": "8bf8ab15960787f1a49d405f6eb8c787b4841119" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/5e7bdbbfe9811c06e1f745d1c166647d5c47d6ee", - "reference": "5e7bdbbfe9811c06e1f745d1c166647d5c47d6ee", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/8bf8ab15960787f1a49d405f6eb8c787b4841119", + "reference": "8bf8ab15960787f1a49d405f6eb8c787b4841119", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/collections": "^1.0", - "doctrine/deprecations": "^0.5.3", - "doctrine/event-manager": "^1.0", - "php": "^7.1 || ^8.0", - "psr/cache": "^1.0|^2.0|^3.0" + "doctrine/event-manager": "^1 || ^2", + "php": "^7.2 || ^8.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0" }, "conflict": { - "doctrine/common": "<2.10@dev" + "doctrine/common": "<2.10" }, "require-dev": { "composer/package-versions-deprecated": "^1.11", - "doctrine/coding-standard": "^6.0 || ^9.0", + "doctrine/coding-standard": "^11", "doctrine/common": "^3.0", - "phpstan/phpstan": "0.12.84", - "phpunit/phpunit": "^7.5.20 || ^8.0 || ^9.0", - "symfony/cache": "^4.4|^5.0", - "vimeo/psalm": "4.7.0" + "phpstan/phpstan": "1.9.4", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "vimeo/psalm": "4.30.0 || 5.3.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common", - "Doctrine\\Persistence\\": "lib/Doctrine/Persistence" + "Doctrine\\Persistence\\": "src/Persistence" } }, "notification-url": "https://packagist.org/downloads/", @@ -1373,7 +1383,7 @@ } ], "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", - "homepage": "https://doctrine-project.org/projects/persistence.html", + "homepage": "https://www.doctrine-project.org/projects/persistence.html", "keywords": [ "mapper", "object", @@ -1383,22 +1393,36 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/2.2.3" + "source": "https://github.com/doctrine/persistence/tree/3.1.4" }, - "time": "2021-10-25T19:59:10+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fpersistence", + "type": "tidelift" + } + ], + "time": "2023-02-03T11:13:07+00:00" }, { "name": "doctrine/sql-formatter", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "20c39c2de286a9d3262cc8ed282a4ae60e265894" + "reference": "25a06c7bf4c6b8218f47928654252863ffc890a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/20c39c2de286a9d3262cc8ed282a4ae60e265894", - "reference": "20c39c2de286a9d3262cc8ed282a4ae60e265894", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/25a06c7bf4c6b8218f47928654252863ffc890a5", + "reference": "25a06c7bf4c6b8218f47928654252863ffc890a5", "shasum": "" }, "require": { @@ -1424,7 +1448,7 @@ { "name": "Jeremy Dorn", "email": "jeremy@jeremydorn.com", - "homepage": "http://jeremydorn.com/" + "homepage": "https://jeremydorn.com/" } ], "description": "a PHP SQL highlighting library", @@ -1435,32 +1459,34 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.1.2" + "source": "https://github.com/doctrine/sql-formatter/tree/1.1.3" }, - "time": "2021-11-05T11:11:14+00:00" + "time": "2022-05-23T21:33:49+00:00" }, { "name": "dompdf/dompdf", - "version": "v1.1.1", + "version": "v1.2.2", "source": { "type": "git", "url": "https://github.com/dompdf/dompdf.git", - "reference": "de4aad040737a89fae2129cdeb0f79c45513128d" + "reference": "5031045d9640b38cfc14aac9667470df09c9e090" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/de4aad040737a89fae2129cdeb0f79c45513128d", - "reference": "de4aad040737a89fae2129cdeb0f79c45513128d", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/5031045d9640b38cfc14aac9667470df09c9e090", + "reference": "5031045d9640b38cfc14aac9667470df09c9e090", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "phenx/php-font-lib": "^0.5.2", - "phenx/php-svg-lib": "^0.3.3", + "phenx/php-font-lib": "^0.5.4", + "phenx/php-svg-lib": "^0.3.3 || ^0.4.0", "php": "^7.1 || ^8.0" }, "require-dev": { + "ext-json": "*", + "ext-zip": "*", "mockery/mockery": "^1.3", "phpunit/phpunit": "^7.5 || ^8 || ^9", "squizlabs/php_codesniffer": "^3.5" @@ -1502,33 +1528,32 @@ "homepage": "https://github.com/dompdf/dompdf", "support": { "issues": "https://github.com/dompdf/dompdf/issues", - "source": "https://github.com/dompdf/dompdf/tree/v1.1.1" + "source": "https://github.com/dompdf/dompdf/tree/v1.2.2" }, - "time": "2021-11-24T00:45:04+00:00" + "time": "2022-04-27T13:50:54+00:00" }, { "name": "egulias/email-validator", - "version": "3.1.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ee0db30118f661fb166bcffbf5d82032df484697" + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ee0db30118f661fb166bcffbf5d82032df484697", - "reference": "ee0db30118f661fb166bcffbf5d82032df484697", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff", "shasum": "" }, "require": { - "doctrine/lexer": "^1.2", - "php": ">=7.2", - "symfony/polyfill-intl-idn": "^1.15" + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^8.5.8|^9.3.3", - "vimeo/psalm": "^4" + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^4.30" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -1536,7 +1561,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -1564,7 +1589,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/3.1.2" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.1" }, "funding": [ { @@ -1572,7 +1597,7 @@ "type": "github" } ], - "time": "2021-10-11T09:18:27+00:00" + "time": "2023-01-14T14:17:03+00:00" }, { "name": "firebase/php-jwt", @@ -1623,16 +1648,16 @@ }, { "name": "friendsofphp/proxy-manager-lts", - "version": "v1.0.5", + "version": "v1.0.14", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", - "reference": "006aa5d32f887a4db4353b13b5b5095613e0611f" + "reference": "a527c9d9d5348e012bd24482d83a5cd643bcbc9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/006aa5d32f887a4db4353b13b5b5095613e0611f", - "reference": "006aa5d32f887a4db4353b13b5b5095613e0611f", + "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/a527c9d9d5348e012bd24482d83a5cd643bcbc9e", + "reference": "a527c9d9d5348e012bd24482d83a5cd643bcbc9e", "shasum": "" }, "require": { @@ -1649,7 +1674,7 @@ }, "require-dev": { "ext-phar": "*", - "symfony/phpunit-bridge": "^5.2|^6.0" + "symfony/phpunit-bridge": "^5.4|^6.0" }, "type": "library", "extra": { @@ -1671,7 +1696,7 @@ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.io/" + "homepage": "https://ocramius.github.io/" }, { "name": "Nicolas Grekas", @@ -1689,7 +1714,7 @@ ], "support": { "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues", - "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.5" + "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.14" }, "funding": [ { @@ -1701,26 +1726,26 @@ "type": "tidelift" } ], - "time": "2021-05-22T16:11:15+00:00" + "time": "2023-01-30T10:40:19+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.4.1", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79" + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79", - "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "guzzlehttp/psr7": "^1.9 || ^2.4", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1729,10 +1754,10 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -1742,17 +1767,21 @@ }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "7.4-dev" + "dev-master": "7.5-dev" } }, "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1809,7 +1838,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.1" + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" }, "funding": [ { @@ -1825,20 +1854,20 @@ "type": "tidelift" } ], - "time": "2021-12-06T18:43:05+00:00" + "time": "2022-08-28T15:39:27+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", "shasum": "" }, "require": { @@ -1854,12 +1883,12 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1893,7 +1922,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" + "source": "https://github.com/guzzle/promises/tree/1.5.2" }, "funding": [ { @@ -1909,20 +1938,20 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:56:57+00:00" + "time": "2022-08-28T14:55:35+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.1.0", + "version": "2.4.3", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" + "reference": "67c26b443f348a51926030c83481b85718457d3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", + "reference": "67c26b443f348a51926030c83481b85718457d3d", "shasum": "" }, "require": { @@ -1936,17 +1965,21 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.4-dev" } }, "autoload": { @@ -2008,7 +2041,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.1.0" + "source": "https://github.com/guzzle/psr7/tree/2.4.3" }, "funding": [ { @@ -2024,83 +2057,20 @@ "type": "tidelift" } ], - "time": "2021-10-06T17:43:30+00:00" - }, - { - "name": "h2entwicklung/doctrine-encrypt-bundle", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/h2Entwicklung/DoctrineEncryptBundle.git", - "reference": "1aeddb7bb22d0196dff5253f1b4367b5919bcc39" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/h2Entwicklung/DoctrineEncryptBundle/zipball/1aeddb7bb22d0196dff5253f1b4367b5919bcc39", - "reference": "1aeddb7bb22d0196dff5253f1b4367b5919bcc39", - "shasum": "" - }, - "require": { - "doctrine/orm": "^2.5", - "paragonie/halite": "^4.6", - "paragonie/sodium_compat": "^1.5", - "php": "^7.2", - "symfony/config": "^5.1", - "symfony/dependency-injection": "^5.1", - "symfony/http-kernel": "^5.1", - "symfony/property-access": "^5.1", - "symfony/yaml": "^5.1" - }, - "require-dev": { - "defuse/php-encryption": "^2.1", - "phpunit/phpunit": "^6.5" - }, - "suggest": { - "defuse/php-encryption": "Alternative for halite for use with older php-versions", - "ext-sodium": "Required to use halite encryption library." - }, - "type": "library", - "autoload": { - "psr-4": { - "Ambta\\DoctrineEncryptBundle\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "h2entwicklung", - "email": "info@h2-invent.com" - } - ], - "description": "Encrypted symfony entity's by verified and standardized libraries Works with Symfony >5.1. This Package replaces the abandoned GiveMeAllYourCats/DoctrineEncryptBundle which is not longer maintained", - "keywords": [ - "Defuse", - "decrypt", - "doctrine", - "encrypt", - "halite", - "symfony" - ], - "support": { - "source": "https://github.com/h2Entwicklung/DoctrineEncryptBundle/tree/4.0.6" - }, - "time": "2021-08-12T13:41:31+00:00" + "time": "2022-10-26T14:07:24+00:00" }, { "name": "jms/metadata", - "version": "2.6.1", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/schmittjoh/metadata.git", - "reference": "c3a3214354b5a765a19875f7b7c5ebcd94e462e5" + "reference": "7ca240dcac0c655eb15933ee55736ccd2ea0d7a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/c3a3214354b5a765a19875f7b7c5ebcd94e462e5", - "reference": "c3a3214354b5a765a19875f7b7c5ebcd94e462e5", + "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/7ca240dcac0c655eb15933ee55736ccd2ea0d7a6", + "reference": "7ca240dcac0c655eb15933ee55736ccd2ea0d7a6", "shasum": "" }, "require": { @@ -2111,7 +2081,7 @@ "doctrine/coding-standard": "^8.0", "mikey179/vfsstream": "^1.6.7", "phpunit/phpunit": "^8.5|^9.0", - "psr/container": "^1.0", + "psr/container": "^1.0|^2.0", "symfony/cache": "^3.1|^4.0|^5.0", "symfony/dependency-injection": "^3.1|^4.0|^5.0" }, @@ -2149,27 +2119,27 @@ ], "support": { "issues": "https://github.com/schmittjoh/metadata/issues", - "source": "https://github.com/schmittjoh/metadata/tree/2.6.1" + "source": "https://github.com/schmittjoh/metadata/tree/2.8.0" }, - "time": "2021-11-22T12:27:42+00:00" + "time": "2023-02-15T13:44:18+00:00" }, { "name": "knpuniversity/oauth2-client-bundle", - "version": "v2.9.0", + "version": "v2.13.1", "source": { "type": "git", "url": "https://github.com/knpuniversity/oauth2-client-bundle.git", - "reference": "2c925911cca6ed16b0695000bf927d405815dc36" + "reference": "f7fe73e98f193503b8aaf2e11f50a0d72539dc7c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/2c925911cca6ed16b0695000bf927d405815dc36", - "reference": "2c925911cca6ed16b0695000bf927d405815dc36", + "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/f7fe73e98f193503b8aaf2e11f50a0d72539dc7c", + "reference": "f7fe73e98f193503b8aaf2e11f50a0d72539dc7c", "shasum": "" }, "require": { "league/oauth2-client": "^2.0", - "php": ">=7.2.5", + "php": ">=7.4", "symfony/dependency-injection": "^4.4|^5.0|^6.0", "symfony/framework-bundle": "^4.4|^5.0|^6.0", "symfony/http-foundation": "^4.4|^5.0|^6.0", @@ -2209,54 +2179,41 @@ ], "support": { "issues": "https://github.com/knpuniversity/oauth2-client-bundle/issues", - "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.9.0" + "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.13.1" }, - "time": "2021-11-22T01:40:58+00:00" + "time": "2023-02-03T13:57:47+00:00" }, { "name": "laminas/laminas-code", - "version": "3.4.1", + "version": "4.8.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766" + "reference": "dd19fe8e07cc3f374308565667eecd4958c22106" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/1cb8f203389ab1482bf89c0e70a04849bacd7766", - "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/dd19fe8e07cc3f374308565667eecd4958c22106", + "reference": "dd19fe8e07cc3f374308565667eecd4958c22106", "shasum": "" }, "require": { - "laminas/laminas-eventmanager": "^2.6 || ^3.0", - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^7.1" - }, - "conflict": { - "phpspec/prophecy": "<1.9.0" - }, - "replace": { - "zendframework/zend-code": "self.version" + "php": "~8.1.0 || ~8.2.0" }, "require-dev": { - "doctrine/annotations": "^1.7", + "doctrine/annotations": "^1.13.3", "ext-phar": "*", - "laminas/laminas-coding-standard": "^1.0", - "laminas/laminas-stdlib": "^2.7 || ^3.0", - "phpunit/phpunit": "^7.5.16 || ^8.4" + "laminas/laminas-coding-standard": "^2.3.0", + "laminas/laminas-stdlib": "^3.6.1", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", + "vimeo/psalm": "^5.1.0" }, "suggest": { "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", "laminas/laminas-stdlib": "Laminas\\Stdlib component" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4.x-dev", - "dev-develop": "3.5.x-dev", - "dev-dev-4.0": "4.0.x-dev" - } - }, "autoload": { "psr-4": { "Laminas\\Code\\": "src/" @@ -2270,7 +2227,8 @@ "homepage": "https://laminas.dev", "keywords": [ "code", - "laminas" + "laminas", + "laminasframework" ], "support": { "chat": "https://laminas.dev/chat", @@ -2280,38 +2238,43 @@ "rss": "https://github.com/laminas/laminas-code/releases.atom", "source": "https://github.com/laminas/laminas-code" }, - "time": "2019-12-31T16:28:24+00:00" + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-12-08T02:08:23+00:00" }, { "name": "laminas/laminas-escaper", - "version": "2.8.0", + "version": "2.12.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "2d6dce99668b413610e9544183fa10392437f542" + "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/2d6dce99668b413610e9544183fa10392437f542", - "reference": "2d6dce99668b413610e9544183fa10392437f542", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490", + "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490", "shasum": "" }, "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^7.3 || ~8.0.0" + "ext-ctype": "*", + "ext-mbstring": "*", + "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0" }, - "replace": { - "zendframework/zend-escaper": "^2.6.1" + "conflict": { + "zendframework/zend-escaper": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.3.0", - "phpunit/phpunit": "^9.3", - "psalm/plugin-phpunit": "^0.12.2", - "vimeo/psalm": "^3.16" - }, - "suggest": { - "ext-iconv": "*", - "ext-mbstring": "*" + "infection/infection": "^0.26.6", + "laminas/laminas-coding-standard": "~2.4.0", + "maglnet/composer-require-checker": "^3.8.0", + "phpunit/phpunit": "^9.5.18", + "psalm/plugin-phpunit": "^0.17.0", + "vimeo/psalm": "^4.22.0" }, "type": "library", "autoload": { @@ -2343,257 +2306,126 @@ "type": "community_bridge" } ], - "time": "2021-06-26T14:26:08+00:00" + "time": "2022-10-10T10:11:09+00:00" }, { - "name": "laminas/laminas-eventmanager", - "version": "3.4.0", + "name": "league/flysystem", + "version": "3.12.3", "source": { "type": "git", - "url": "https://github.com/laminas/laminas-eventmanager.git", - "reference": "a93fd278c97b2d41ebbce5ba048a24e3e6f580ba" + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "81e87e74dd5213795c7846d65089712d2dda90ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/a93fd278c97b2d41ebbce5ba048a24e3e6f580ba", - "reference": "a93fd278c97b2d41ebbce5ba048a24e3e6f580ba", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/81e87e74dd5213795c7846d65089712d2dda90ce", + "reference": "81e87e74dd5213795c7846d65089712d2dda90ce", "shasum": "" }, "require": { - "php": "^7.3 || ~8.0.0 || ~8.1.0" + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" }, "conflict": { - "zendframework/zend-eventmanager": "*" + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" }, "require-dev": { - "container-interop/container-interop": "^1.1", - "laminas/laminas-coding-standard": "~2.2.1", - "laminas/laminas-stdlib": "^3.6", - "phpbench/phpbench": "^1.1", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5.5" - }, - "suggest": { - "container-interop/container-interop": "^1.1, to use the lazy listeners feature", - "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.1", + "aws/aws-sdk-php": "^3.220.0", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.14", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11", + "sabre/dav": "^4.3.1" }, "type": "library", "autoload": { "psr-4": { - "Laminas\\EventManager\\": "src/" + "League\\Flysystem\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "Trigger and listen to events within a PHP application", - "homepage": "https://laminas.dev", + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", "keywords": [ - "event", - "eventmanager", - "events", - "laminas" + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" ], "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-eventmanager/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-eventmanager/issues", - "rss": "https://github.com/laminas/laminas-eventmanager/releases.atom", - "source": "https://github.com/laminas/laminas-eventmanager" + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.12.3" }, "funding": [ { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" } ], - "time": "2021-09-07T22:35:32+00:00" + "time": "2023-02-18T15:32:41+00:00" }, { - "name": "laminas/laminas-zendframework-bridge", - "version": "1.4.0", + "name": "league/mime-type-detection", + "version": "1.11.0", "source": { "type": "git", - "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "bf180a382393e7db5c1e8d0f2ec0c4af9c724baf" + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/bf180a382393e7db5c1e8d0f2ec0c4af9c724baf", - "reference": "bf180a382393e7db5c1e8d0f2ec0c4af9c724baf", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", "shasum": "" }, "require": { - "php": "^7.3 || ~8.0.0 || ~8.1.0" + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "psalm/plugin-phpunit": "^0.15.1", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.6" + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" }, "type": "library", - "extra": { - "laminas": { - "module": "Laminas\\ZendFrameworkBridge" - } - }, "autoload": { - "files": [ - "src/autoload.php" - ], "psr-4": { - "Laminas\\ZendFrameworkBridge\\": "src//" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Alias legacy ZF class names to Laminas Project equivalents.", - "keywords": [ - "ZendFramework", - "autoloading", - "laminas", - "zf" - ], - "support": { - "forum": "https://discourse.laminas.dev/", - "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", - "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", - "source": "https://github.com/laminas/laminas-zendframework-bridge" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2021-09-03T17:53:30+00:00" - }, - { - "name": "league/flysystem", - "version": "1.1.8", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "c995bb0c23c58c9813d081f9523c9b7bb496698e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/c995bb0c23c58c9813d081f9523c9b7bb496698e", - "reference": "c995bb0c23c58c9813d081f9523c9b7bb496698e", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" - }, - "require-dev": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" - }, - "suggest": { - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frenky.net" - } - ], - "description": "Filesystem abstraction: Many filesystems, one API.", - "keywords": [ - "Cloud Files", - "WebDAV", - "abstraction", - "aws", - "cloud", - "copy.com", - "dropbox", - "file systems", - "files", - "filesystem", - "filesystems", - "ftp", - "rackspace", - "remote", - "s3", - "sftp", - "storage" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.8" - }, - "funding": [ - { - "url": "https://offset.earth/frankdejonge", - "type": "other" - } - ], - "time": "2021-11-28T21:50:23+00:00" - }, - { - "name": "league/mime-type-detection", - "version": "1.9.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/aa70e813a6ad3d1558fc927863d47309b4c23e69", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\MimeTypeDetection\\": "src" + "League\\MimeTypeDetection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2609,7 +2441,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.9.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" }, "funding": [ { @@ -2621,20 +2453,20 @@ "type": "tidelift" } ], - "time": "2021-11-21T11:48:40+00:00" + "time": "2022-04-17T13:12:02+00:00" }, { "name": "league/oauth2-client", - "version": "2.6.0", + "version": "2.6.1", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth2-client.git", - "reference": "badb01e62383430706433191b82506b6df24ad98" + "reference": "2334c249907190c132364f5dae0287ab8666aa19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/badb01e62383430706433191b82506b6df24ad98", - "reference": "badb01e62383430706433191b82506b6df24ad98", + "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/2334c249907190c132364f5dae0287ab8666aa19", + "reference": "2334c249907190c132364f5dae0287ab8666aa19", "shasum": "" }, "require": { @@ -2643,9 +2475,9 @@ "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { - "mockery/mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpunit/phpunit": "^5.7 || ^6.0 || ^9.3", + "mockery/mockery": "^1.3.5", + "php-parallel-lint/php-parallel-lint": "^1.3.1", + "phpunit/phpunit": "^5.7 || ^6.0 || ^9.5", "squizlabs/php_codesniffer": "^2.3 || ^3.0" }, "type": "library", @@ -2689,30 +2521,32 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth2-client/issues", - "source": "https://github.com/thephpleague/oauth2-client/tree/2.6.0" + "source": "https://github.com/thephpleague/oauth2-client/tree/2.6.1" }, - "time": "2020-10-28T02:03:40+00:00" + "time": "2021-12-22T16:42:49+00:00" }, { "name": "lorenzo/pinky", - "version": "1.0.5", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/lorenzo/pinky.git", - "reference": "2bc1a9d5696d6496df5d5682962929165a823e57" + "reference": "f890472e4a25f89591f176aa03d9588a9d3332a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lorenzo/pinky/zipball/2bc1a9d5696d6496df5d5682962929165a823e57", - "reference": "2bc1a9d5696d6496df5d5682962929165a823e57", + "url": "https://api.github.com/repos/lorenzo/pinky/zipball/f890472e4a25f89591f176aa03d9588a9d3332a7", + "reference": "f890472e4a25f89591f176aa03d9588a9d3332a7", "shasum": "" }, "require": { + "ext-dom": "*", + "ext-libxml": "*", "ext-xsl": "*", "php": ">=5.6.0" }, "require-dev": { - "phpunit/phpunit": "^5.7" + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.21 || ^9.5.10" }, "type": "library", "autoload": { @@ -2740,46 +2574,107 @@ ], "support": { "issues": "https://github.com/lorenzo/pinky/issues", - "source": "https://github.com/lorenzo/pinky/tree/1.0.5" + "source": "https://github.com/lorenzo/pinky/tree/1.0.9" + }, + "time": "2023-01-12T16:15:52+00:00" + }, + { + "name": "michaeldegroot/doctrine-encrypt-bundle", + "version": "v5.1.0", + "source": { + "type": "git", + "url": "https://github.com/absolute-quantum/DoctrineEncryptBundle.git", + "reference": "4146d881d009ac0c79a6caad833670041dcf6c8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/absolute-quantum/DoctrineEncryptBundle/zipball/4146d881d009ac0c79a6caad833670041dcf6c8f", + "reference": "4146d881d009ac0c79a6caad833670041dcf6c8f", + "shasum": "" + }, + "require": { + "doctrine/orm": "^2.5", + "paragonie/halite": "^4.6", + "paragonie/sodium_compat": "^1.5", + "php": "^8.0", + "symfony/config": "^4.1|^5.0|^6.0", + "symfony/dependency-injection": "^4.1|^5.0|^6.0", + "symfony/http-kernel": "^4.1|^5.0|^6.0", + "symfony/property-access": "^4.1|^5.0|^6.0", + "symfony/yaml": "^4.1|^5.0|^6.0" + }, + "require-dev": { + "defuse/php-encryption": "^2.1", + "phpunit/phpunit": "^8.0|^9.0" + }, + "suggest": { + "defuse/php-encryption": "Alternative for halite for use with older php-versions", + "ext-sodium": "Required to use halite encryption library." }, - "time": "2019-09-16T21:23:31+00:00" + "type": "library", + "autoload": { + "psr-4": { + "Ambta\\DoctrineEncryptBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Encrypted symfony entity's by verified and standardized libraries", + "keywords": [ + "Defuse", + "decrypt", + "doctrine", + "encrypt", + "halite", + "symfony" + ], + "support": { + "issues": "https://github.com/absolute-quantum/DoctrineEncryptBundle/issues", + "source": "https://github.com/absolute-quantum/DoctrineEncryptBundle/tree/v5.1.0" + }, + "time": "2022-02-08T07:45:55+00:00" }, { "name": "monolog/monolog", - "version": "2.3.5", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/9b5daeaffce5b926cac47923798bba91059e60e2", + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2", "shasum": "" }, "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + "psr/log-implementation": "3.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "aws/aws-sdk-php": "^3.0", "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7", - "graylog2/gelf-php": "^1.4.2", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.6.1", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5", - "predis/predis": "^1.1", - "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90@dev", - "swiftmailer/swiftmailer": "^5.3|^6.0" + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^9.5.26", + "predis/predis": "^1.1 || ^2", + "ruflin/elastica": "^7", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", @@ -2794,14 +2689,13 @@ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -2829,7 +2723,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.3.5" + "source": "https://github.com/Seldaek/monolog/tree/3.3.1" }, "funding": [ { @@ -2841,7 +2735,7 @@ "type": "tidelift" } ], - "time": "2021-10-01T21:08:31+00:00" + "time": "2023-02-06T13:46:10+00:00" }, { "name": "nicoswd/php-gpg", @@ -2866,12 +2760,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "nicoSWD\\GPG\\": "src" - }, "files": [ "src/globals.php" - ] + ], + "psr-4": { + "nicoSWD\\GPG\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2900,43 +2794,38 @@ }, { "name": "nucleos/dompdf-bundle", - "version": "3.1.1", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/nucleos/NucleosDompdfBundle.git", - "reference": "7b8b437c3a851382e0fe33a2b925a6c34efdb3a7" + "reference": "16b4d7c46a51b1aa4cf62c9198c45c2a7b6f2a58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nucleos/NucleosDompdfBundle/zipball/7b8b437c3a851382e0fe33a2b925a6c34efdb3a7", - "reference": "7b8b437c3a851382e0fe33a2b925a6c34efdb3a7", + "url": "https://api.github.com/repos/nucleos/NucleosDompdfBundle/zipball/16b4d7c46a51b1aa4cf62c9198c45c2a7b6f2a58", + "reference": "16b4d7c46a51b1aa4cf62c9198c45c2a7b6f2a58", "shasum": "" }, "require": { "dompdf/dompdf": "^0.7 || ^0.8 || ^1.0.0", - "php": "^7.3 || ^8.0", - "symfony/config": "^4.2 || ^5.0", - "symfony/dependency-injection": "^4.2 || ^5.0", - "symfony/event-dispatcher-contracts": "^1.1 || ^2.0", - "symfony/expression-language": "^4.2 || ^5.0", - "symfony/framework-bundle": "^4.2 || ^5.0", - "symfony/http-foundation": "^4.2 || ^5.0", - "symfony/http-kernel": "^4.2 || ^5.0" + "php": "^8.0", + "symfony/config": "^5.4 || ^6.0", + "symfony/dependency-injection": "^5.4 || ^6.0", + "symfony/event-dispatcher-contracts": "^1.1 || ^2.0 || ^3.0", + "symfony/expression-language": "^5.4 || ^6.0", + "symfony/framework-bundle": "^5.4 || ^6.0", + "symfony/http-foundation": "^5.4 || ^6.0", + "symfony/http-kernel": "^5.4 || ^6.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.3", "ergebnis/composer-normalize": "^2.0.1", - "symfony/browser-kit": "^4.4 || ^5.0" + "symfony/browser-kit": "^5.4 || ^6.0" }, "suggest": { "symfony/event-dispatcher": "If you need to modify the PDF rendering" }, "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, "autoload": { "psr-4": { "Nucleos\\DompdfBundle\\": "src/" @@ -2963,7 +2852,7 @@ ], "support": { "issues": "https://github.com/nucleos/NucleosDompdfBundle/issues", - "source": "https://github.com/nucleos/NucleosDompdfBundle/tree/3.1.1" + "source": "https://github.com/nucleos/NucleosDompdfBundle/tree/3.2.0" }, "funding": [ { @@ -2983,84 +2872,65 @@ "type": "other" } ], - "time": "2021-02-07T19:03:39+00:00" + "time": "2021-12-06T20:45:12+00:00" }, { "name": "oneup/flysystem-bundle", - "version": "3.7.1", + "version": "4.6.0", "source": { "type": "git", "url": "https://github.com/1up-lab/OneupFlysystemBundle.git", - "reference": "7c9483c1eb21d80ed487d87cdc2a9b359fb8e8f4" + "reference": "31375bb7219fb83f37c3fda5fe3668061a4072f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/1up-lab/OneupFlysystemBundle/zipball/7c9483c1eb21d80ed487d87cdc2a9b359fb8e8f4", - "reference": "7c9483c1eb21d80ed487d87cdc2a9b359fb8e8f4", + "url": "https://api.github.com/repos/1up-lab/OneupFlysystemBundle/zipball/31375bb7219fb83f37c3fda5fe3668061a4072f6", + "reference": "31375bb7219fb83f37c3fda5fe3668061a4072f6", "shasum": "" }, "require": { - "league/flysystem": "^1.0.26", - "php": ">=7.1", - "symfony/config": "^3.4 || ^4.0 || ^5.0", - "symfony/dependency-injection": "^3.4 || ^4.0 || ^5.0", - "symfony/http-kernel": "^3.4 || ^4.0 || ^5.0" + "league/flysystem": "^2.0 || ^3.0", + "php": "^8.0", + "symfony/config": "^4.4 || ^5.3 || ^6.0", + "symfony/dependency-injection": "^4.4 || ^5.3 || ^6.0", + "symfony/http-kernel": "^4.4 || ^5.3 || ^6.0" }, - "conflict": { - "async-aws/flysystem-s3": "<1.0" - }, - "require-dev": { - "async-aws/flysystem-s3": "^1.0", - "jenko/flysystem-gaufrette": "^1.0", - "league/flysystem-aws-s3-v2": "^1.0", - "league/flysystem-azure-blob-storage": "^0.1", - "league/flysystem-cached-adapter": "^1.0", - "league/flysystem-gridfs": "^1.0", - "league/flysystem-memory": "^1.0", - "league/flysystem-rackspace": "^1.0", - "league/flysystem-replicate-adapter": "^1.0", - "league/flysystem-sftp": "^1.0", - "league/flysystem-webdav": "^1.0", - "league/flysystem-ziparchive": "^1.0", - "litipk/flysystem-fallback-adapter": "^0.1", - "phpunit/phpunit": "^6.5 || ^7.5 || ^8.5", - "spatie/flysystem-dropbox": "^1.0", - "superbalist/flysystem-google-storage": "^4.0", - "symfony/asset": "^3.4 || ^4.0 || ^5.0", - "symfony/browser-kit": "^3.4 || ^4.0 || ^5.0", - "symfony/finder": "^3.4 || ^4.0 || ^5.0", - "symfony/templating": "^3.4 || ^4.0 || ^5.0", - "symfony/translation": "^3.4 || ^4.0 || ^5.0", - "symfony/yaml": "^3.4 || ^4.0 || ^5.0", - "twistor/flysystem-stream-wrapper": "^1.0" + "require-dev": { + "ext-simplexml": "*", + "friendsofphp/php-cs-fixer": "^2.16 || ^3.5", + "league/flysystem-async-aws-s3": "^2.0 || ^3.0", + "league/flysystem-aws-s3-v3": "^2.0 || ^3.0", + "league/flysystem-azure-blob-storage": "^3.0", + "league/flysystem-ftp": "^2.0 || ^3.0", + "league/flysystem-google-cloud-storage": "^2.0 || ^3.0", + "league/flysystem-memory": "^2.0 || ^3.0", + "league/flysystem-sftp-v3": "^2.0 || ^3.0", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9.5", + "royvoetman/flysystem-gitlab-storage": "^2.0 || ^3.0", + "symfony/asset": "^4.4 || ^5.3 || ^6.0", + "symfony/browser-kit": "^4.4 || ^5.3 || ^6.0", + "symfony/finder": "^4.4 || ^5.3 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.3 || ^6.0", + "symfony/phpunit-bridge": "^6.0", + "symfony/templating": "^4.4 || ^5.3 || ^6.0", + "symfony/translation": "^4.4 || ^5.3 || ^6.0", + "symfony/yaml": "^4.4 || ^5.3 || ^6.0" }, "suggest": { "ext-fileinfo": "Required for MimeType", "ext-ftp": "Required for FTP and SFTP", - "jenko/flysystem-gaufrette": "Allows you to use gaufrette adapter", - "league/flysystem-aws-s3-v2": "Use S3 storage with AWS SDK v2", + "league/flysystem-async-aws-s3": "Use flysystem S3 adapter from AsyncAws", "league/flysystem-aws-s3-v3": "Use S3 storage with AWS SDK v3", - "league/flysystem-azure-blob-storage": "Allows you to use Azure Blob Storage adapter", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-gridfs": "Allows you to use GridFS adapter", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-replicate-adapter": "Allows you to use the Replicate adapter from Flysystem", - "league/flysystem-sftp": "Allows SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "litipk/flysystem-fallback-adapter": "Allows you to use a fallback filesystem", - "spatie/flysystem-dropbox": "Use Dropbox storage", - "superbalist/flysystem-google-storage": "Allows you to use Google Cloud Storage buckets", - "twistor/flysystem-stream-wrapper": "Allows you to use stream wrapper" + "league/flysystem-google-cloud-storage": "Use Google Cloud Storage Adapter for Flysystem", + "league/flysystem-sftp-v3": "Allows SFTP server storage via phpseclib", + "royvoetman/flysystem-gitlab-storage": "Use Gitlab Storage filesystem for Flysystem" }, "type": "symfony-bundle", "autoload": { "psr-4": { - "Oneup\\FlysystemBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Oneup\\FlysystemBundle\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3090,22 +2960,22 @@ ], "support": { "issues": "https://github.com/1up-lab/OneupFlysystemBundle/issues", - "source": "https://github.com/1up-lab/OneupFlysystemBundle/tree/3.7.1" + "source": "https://github.com/1up-lab/OneupFlysystemBundle/tree/4.6.0" }, - "time": "2021-08-02T12:11:02+00:00" + "time": "2022-12-19T16:40:06+00:00" }, { "name": "paragonie/constant_time_encoding", - "version": "v2.4.0", + "version": "v2.6.3", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c" + "reference": "58c3f47f650c94ec05a151692652a868995d2938" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c", - "reference": "f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", + "reference": "58c3f47f650c94ec05a151692652a868995d2938", "shasum": "" }, "require": { @@ -3159,7 +3029,7 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2020-12-06T15:14:20+00:00" + "time": "2022-06-14T06:56:20+00:00" }, { "name": "paragonie/halite", @@ -3286,16 +3156,16 @@ }, { "name": "paragonie/sodium_compat", - "version": "v1.17.0", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "c59cac21abbcc0df06a3dd18076450ea4797b321" + "reference": "cb15e403ecbe6a6cc515f855c310eb6b1872a933" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/c59cac21abbcc0df06a3dd18076450ea4797b321", - "reference": "c59cac21abbcc0df06a3dd18076450ea4797b321", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/cb15e403ecbe6a6cc515f855c310eb6b1872a933", + "reference": "cb15e403ecbe6a6cc515f855c310eb6b1872a933", "shasum": "" }, "require": { @@ -3366,67 +3236,29 @@ ], "support": { "issues": "https://github.com/paragonie/sodium_compat/issues", - "source": "https://github.com/paragonie/sodium_compat/tree/v1.17.0" + "source": "https://github.com/paragonie/sodium_compat/tree/v1.19.0" }, - "time": "2021-08-10T02:43:50+00:00" - }, - { - "name": "pclzip/pclzip", - "version": "2.8.2", - "source": { - "type": "git", - "url": "https://github.com/ivanlanin/pclzip.git", - "reference": "19dd1de9d3f5fc4d7d70175b4c344dee329f45fd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ivanlanin/pclzip/zipball/19dd1de9d3f5fc4d7d70175b4c344dee329f45fd", - "reference": "19dd1de9d3f5fc4d7d70175b4c344dee329f45fd", - "shasum": "" - }, - "type": "library", - "autoload": { - "classmap": [ - "pclzip.lib.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1" - ], - "authors": [ - { - "name": "Vincent Blavet" - } - ], - "description": "A PHP library that offers compression and extraction functions for Zip formatted archives", - "homepage": "http://www.phpconcept.net/pclzip", - "keywords": [ - "php", - "zip" - ], - "support": { - "issues": "https://github.com/ivanlanin/pclzip/issues", - "source": "https://github.com/ivanlanin/pclzip/tree/master" - }, - "time": "2014-06-05T11:42:24+00:00" + "time": "2022-09-26T03:40:35+00:00" }, { "name": "phenx/php-font-lib", - "version": "0.5.2", + "version": "0.5.4", "source": { "type": "git", - "url": "https://github.com/PhenX/php-font-lib.git", - "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8" + "url": "https://github.com/dompdf/php-font-lib.git", + "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/ca6ad461f032145fff5971b5985e5af9e7fa88d8", - "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8", + "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/dd448ad1ce34c63d09baccd05415e361300c35b4", + "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4", "shasum": "" }, + "require": { + "ext-mbstring": "*" + }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5 || ^6 || ^7" + "symfony/phpunit-bridge": "^3 || ^4 || ^5" }, "type": "library", "autoload": { @@ -3447,31 +3279,32 @@ "description": "A library to read, parse, export and make subsets of different types of font files.", "homepage": "https://github.com/PhenX/php-font-lib", "support": { - "issues": "https://github.com/PhenX/php-font-lib/issues", - "source": "https://github.com/PhenX/php-font-lib/tree/0.5.2" + "issues": "https://github.com/dompdf/php-font-lib/issues", + "source": "https://github.com/dompdf/php-font-lib/tree/0.5.4" }, - "time": "2020-03-08T15:31:32+00:00" + "time": "2021-12-17T19:44:54+00:00" }, { "name": "phenx/php-svg-lib", - "version": "0.3.4", + "version": "0.4.1", "source": { "type": "git", - "url": "https://github.com/PhenX/php-svg-lib.git", - "reference": "f627771eb854aa7f45f80add0f23c6c4d67ea0f2" + "url": "https://github.com/dompdf/php-svg-lib.git", + "reference": "4498b5df7b08e8469f0f8279651ea5de9626ed02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/f627771eb854aa7f45f80add0f23c6c4d67ea0f2", - "reference": "f627771eb854aa7f45f80add0f23c6c4d67ea0f2", + "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/4498b5df7b08e8469f0f8279651ea5de9626ed02", + "reference": "4498b5df7b08e8469f0f8279651ea5de9626ed02", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0", - "sabberworm/php-css-parser": "^8.3" + "ext-mbstring": "*", + "php": "^7.1 || ^7.2 || ^7.3 || ^7.4 || ^8.0", + "sabberworm/php-css-parser": "^8.4" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5" }, "type": "library", "autoload": { @@ -3492,10 +3325,10 @@ "description": "A library to read, parse and export to PDF SVG files.", "homepage": "https://github.com/PhenX/php-svg-lib", "support": { - "issues": "https://github.com/PhenX/php-svg-lib/issues", - "source": "https://github.com/PhenX/php-svg-lib/tree/0.3.4" + "issues": "https://github.com/dompdf/php-svg-lib/issues", + "source": "https://github.com/dompdf/php-svg-lib/tree/0.4.1" }, - "time": "2021-10-18T02:13:32+00:00" + "time": "2022-03-07T12:52:04+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -3609,25 +3442,30 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.5.1", + "version": "1.6.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" + "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d", + "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -3653,101 +3491,42 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" - }, - "time": "2021-10-02T14:08:47+00:00" - }, - { - "name": "phpoffice/common", - "version": "0.2.9", - "source": { - "type": "git", - "url": "https://github.com/PHPOffice/Common.git", - "reference": "edb5d32b1e3400a35a5c91e2539ed6f6ce925e4d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/Common/zipball/edb5d32b1e3400a35a5c91e2539ed6f6ce925e4d", - "reference": "edb5d32b1e3400a35a5c91e2539ed6f6ce925e4d", - "shasum": "" - }, - "require": { - "pclzip/pclzip": "^2.8", - "php": ">=5.3.0" - }, - "require-dev": { - "phpdocumentor/phpdocumentor": "2.*", - "phploc/phploc": "2.*", - "phpmd/phpmd": "2.*", - "phpunit/phpunit": "^4.8.36 || ^7.0", - "sebastian/phpcpd": "2.*", - "squizlabs/php_codesniffer": "2.*" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2" }, - "type": "library", - "autoload": { - "psr-4": { - "PhpOffice\\Common\\": "src/Common/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL" - ], - "authors": [ - { - "name": "Mark Baker" - }, - { - "name": "Franck Lefevre", - "homepage": "http://rootslabs.net" - } - ], - "description": "PHPOffice Common", - "homepage": "http://phpoffice.github.io", - "keywords": [ - "common", - "component", - "office", - "php" - ], - "support": { - "issues": "https://github.com/PHPOffice/Common/issues", - "source": "https://github.com/PHPOffice/Common/tree/master" - }, - "time": "2018-07-13T14:12:34+00:00" + "time": "2022-10-14T12:47:21+00:00" }, { "name": "phpoffice/phpword", - "version": "0.17.0", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/PHPWord.git", - "reference": "b8346af548d399acd9e30fc76ab0c55c2fec03a5" + "reference": "8521612b39edeec9055d3688ad555342a40857dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/b8346af548d399acd9e30fc76ab0c55c2fec03a5", - "reference": "b8346af548d399acd9e30fc76ab0c55c2fec03a5", + "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/8521612b39edeec9055d3688ad555342a40857dd", + "reference": "8521612b39edeec9055d3688ad555342a40857dd", "shasum": "" }, "require": { + "ext-dom": "*", + "ext-json": "*", "ext-xml": "*", - "php": "^5.3.3 || ^7.0", - "phpoffice/common": "^0.2.9", - "zendframework/zend-escaper": "^2.2" + "laminas/laminas-escaper": ">=2.6", + "php": "^7.1|^8.0" }, "require-dev": { - "dompdf/dompdf": "0.8.*", + "dompdf/dompdf": "^2.0", "ext-gd": "*", + "ext-libxml": "*", "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^2.2", - "mpdf/mpdf": "5.7.4 || 6.* || 7.*", - "php-coveralls/php-coveralls": "1.1.0 || ^2.0", - "phploc/phploc": "2.* || 3.* || 4.*", - "phpmd/phpmd": "2.*", - "phpunit/phpunit": "^4.8.36 || ^7.0", - "squizlabs/php_codesniffer": "^2.9", - "tecnickcom/tcpdf": "6.*" + "mpdf/mpdf": "^8.1", + "php-coveralls/php-coveralls": "^2.5", + "phpmd/phpmd": "^2.13", + "phpunit/phpunit": ">=7.0", + "symfony/process": "^4.4", + "tecnickcom/tcpdf": "^6.5" }, "suggest": { "dompdf/dompdf": "Allows writing PDF", @@ -3759,7 +3538,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-develop": "0.18-dev" + "dev-develop": "0.19-dev" } }, "autoload": { @@ -3797,7 +3576,7 @@ } ], "description": "PHPWord - A pure PHP library for reading and writing word processing documents (OOXML, ODF, RTF, HTML, PDF)", - "homepage": "http://phpoffice.github.io", + "homepage": "https://phpword.readthedocs.io/", "keywords": [ "ISO IEC 29500", "OOXML", @@ -3825,22 +3604,22 @@ ], "support": { "issues": "https://github.com/PHPOffice/PHPWord/issues", - "source": "https://github.com/PHPOffice/PHPWord/tree/develop" + "source": "https://github.com/PHPOffice/PHPWord/tree/1.0.0" }, - "time": "2019-10-01T20:43:33+00:00" + "time": "2022-11-15T20:24:50+00:00" }, { "name": "phpseclib/phpseclib", - "version": "2.0.35", + "version": "2.0.41", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "4e16cf3f5f927a7d3f5317820af795c0366c0420" + "reference": "7e763c6f97ec1fcb37c46aa8ecfc20a2c71d9c1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/4e16cf3f5f927a7d3f5317820af795c0366c0420", - "reference": "4e16cf3f5f927a7d3f5317820af795c0366c0420", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7e763c6f97ec1fcb37c46aa8ecfc20a2c71d9c1b", + "reference": "7e763c6f97ec1fcb37c46aa8ecfc20a2c71d9c1b", "shasum": "" }, "require": { @@ -3855,7 +3634,8 @@ "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", - "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations.", + "ext-xml": "Install the XML extension to load XML formatted public keys." }, "type": "library", "autoload": { @@ -3920,7 +3700,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/2.0.35" + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.41" }, "funding": [ { @@ -3936,39 +3716,35 @@ "type": "tidelift" } ], - "time": "2021-11-28T23:30:39+00:00" + "time": "2022-12-23T16:44:18+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.2.0", + "version": "1.16.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "dbc093d7af60eff5cd575d2ed761b15ed40bd08e" + "reference": "e27e92d939e2e3636f0a1f0afaba59692c0bf571" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/dbc093d7af60eff5cd575d2ed761b15ed40bd08e", - "reference": "dbc093d7af60eff5cd575d2ed761b15ed40bd08e", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/e27e92d939e2e3636f0a1f0afaba59692c0bf571", + "reference": "e27e92d939e2e3636f0a1f0afaba59692c0bf571", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^7.2 || ^8.0" }, "require-dev": { "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.0", "phpunit/phpunit": "^9.5", "symfony/process": "^5.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { "psr-4": { "PHPStan\\PhpDocParser\\": [ @@ -3983,26 +3759,26 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.2.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.16.1" }, - "time": "2021-09-16T20:46:02+00:00" + "time": "2023-02-07T18:11:17+00:00" }, { "name": "psr/cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { @@ -4022,7 +3798,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for caching libraries", @@ -4032,28 +3808,33 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { "name": "psr/container", - "version": "1.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -4080,9 +3861,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", @@ -4296,25 +4077,28 @@ }, { "name": "psr/link", - "version": "1.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/link.git", - "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562" + "reference": "84b159194ecfd7eaa472280213976e96415433f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562", - "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562", + "url": "https://api.github.com/repos/php-fig/link/zipball/84b159194ecfd7eaa472280213976e96415433f7", + "reference": "84b159194ecfd7eaa472280213976e96415433f7", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" + }, + "suggest": { + "fig/link-util": "Provides some useful PSR-13 utilities" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4333,6 +4117,7 @@ } ], "description": "Common interfaces for HTTP links", + "homepage": "https://github.com/php-fig/link", "keywords": [ "http", "http-link", @@ -4342,36 +4127,36 @@ "rest" ], "support": { - "source": "https://github.com/php-fig/link/tree/master" + "source": "https://github.com/php-fig/link/tree/2.0.1" }, - "time": "2016-10-28T16:06:13+00:00" + "time": "2021-03-11T23:00:27+00:00" }, { "name": "psr/log", - "version": "1.1.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -4392,9 +4177,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/3.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:46:02+00:00" }, { "name": "ralouphie/getallheaders", @@ -4442,29 +4227,33 @@ }, { "name": "sabberworm/php-css-parser", - "version": "8.3.1", + "version": "8.4.0", "source": { "type": "git", "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", - "reference": "d217848e1396ef962fb1997cf3e2421acba7f796" + "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/d217848e1396ef962fb1997cf3e2421acba7f796", - "reference": "d217848e1396ef962fb1997cf3e2421acba7f796", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/e41d2140031d533348b2192a83f02d8dd8a71d30", + "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30", "shasum": "" }, "require": { - "php": ">=5.3.2" + "ext-iconv": "*", + "php": ">=5.6.20" }, "require-dev": { "codacy/coverage": "^1.4", - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^4.8.36" + }, + "suggest": { + "ext-mbstring": "for parsing UTF-8 CSS" }, "type": "library", "autoload": { - "psr-0": { - "Sabberworm\\CSS": "lib/" + "psr-4": { + "Sabberworm\\CSS\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4477,7 +4266,7 @@ } ], "description": "Parser for CSS Files written in PHP", - "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser", "keywords": [ "css", "parser", @@ -4485,31 +4274,31 @@ ], "support": { "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", - "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.3.1" + "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.4.0" }, - "time": "2020-06-01T09:10:00+00:00" + "time": "2021-12-11T13:40:54+00:00" }, { "name": "sensio/framework-extra-bundle", - "version": "v5.6.1", + "version": "v6.2.9", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "430d14c01836b77c28092883d195a43ce413ee32" + "reference": "dcfac94d6bdcf95c126e8ccac2104917c7c8f135" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/430d14c01836b77c28092883d195a43ce413ee32", - "reference": "430d14c01836b77c28092883d195a43ce413ee32", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/dcfac94d6bdcf95c126e8ccac2104917c7c8f135", + "reference": "dcfac94d6bdcf95c126e8ccac2104917c7c8f135", "shasum": "" }, "require": { "doctrine/annotations": "^1.0", "php": ">=7.2.5", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/framework-bundle": "^4.4|^5.0", - "symfony/http-kernel": "^4.4|^5.0" + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/framework-bundle": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0" }, "conflict": { "doctrine/doctrine-cache-bundle": "<1.3.1", @@ -4519,25 +4308,23 @@ "doctrine/dbal": "^2.10|^3.0", "doctrine/doctrine-bundle": "^1.11|^2.0", "doctrine/orm": "^2.5", - "nyholm/psr7": "^1.1", - "symfony/browser-kit": "^4.4|^5.0", - "symfony/doctrine-bridge": "^4.4|^5.0", - "symfony/dom-crawler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/monolog-bridge": "^4.0|^5.0", + "symfony/browser-kit": "^4.4|^5.0|^6.0", + "symfony/doctrine-bridge": "^4.4|^5.0|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/monolog-bridge": "^4.0|^5.0|^6.0", "symfony/monolog-bundle": "^3.2", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9", - "symfony/psr-http-message-bridge": "^1.1", - "symfony/security-bundle": "^4.4|^5.0", - "symfony/twig-bundle": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0", + "symfony/security-bundle": "^4.4|^5.0|^6.0", + "symfony/twig-bundle": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0", "twig/twig": "^1.34|^2.4|^3.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "5.6.x-dev" + "dev-master": "6.1.x-dev" } }, "autoload": { @@ -4565,9 +4352,10 @@ ], "support": { "issues": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/issues", - "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v5.6.1" + "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v6.2.9" }, - "time": "2020-08-25T19:10:18+00:00" + "abandoned": "Symfony", + "time": "2022-11-01T17:17:13+00:00" }, { "name": "stevenmaguire/oauth2-keycloak", @@ -4629,82 +4417,6 @@ }, "time": "2021-06-21T10:16:52+00:00" }, - { - "name": "swiftmailer/swiftmailer", - "version": "v6.3.0", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.0|^3.1", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.4" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - }, - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ], - "support": { - "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", - "type": "tidelift" - } - ], - "abandoned": "symfony/mailer", - "time": "2021-10-18T15:26:12+00:00" - }, { "name": "symfony/apache-pack", "version": "v1.0.1", @@ -4733,30 +4445,28 @@ }, { "name": "symfony/asset", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "49e355b57b4b6a5cef1d2dbc4e36cee49369cf7d" + "reference": "925ca9e357159b5ceeb3c4451362f0a183414162" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/49e355b57b4b6a5cef1d2dbc4e36cee49369cf7d", - "reference": "49e355b57b4b6a5cef1d2dbc4e36cee49369cf7d", + "url": "https://api.github.com/repos/symfony/asset/zipball/925ca9e357159b5ceeb3c4451362f0a183414162", + "reference": "925ca9e357159b5ceeb3c4451362f0a183414162", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "conflict": { - "symfony/http-foundation": "<5.3" + "symfony/http-foundation": "<5.4" }, "require-dev": { - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0" + "symfony/http-client": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0" }, "suggest": { "symfony/http-foundation": "" @@ -4787,7 +4497,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v5.4.0" + "source": "https://github.com/symfony/asset/tree/v6.2.5" }, "funding": [ { @@ -4803,62 +4513,61 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/cache", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "d97d6d7f46cb69968f094e329abd987d5ee17c79" + "reference": "cfe2d7c87d55b04cbde8fe3c137d9dd66e5d83f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/d97d6d7f46cb69968f094e329abd987d5ee17c79", - "reference": "d97d6d7f46cb69968f094e329abd987d5ee17c79", + "url": "https://api.github.com/repos/symfony/cache/zipball/cfe2d7c87d55b04cbde8fe3c137d9dd66e5d83f4", + "reference": "cfe2d7c87d55b04cbde8fe3c137d9dd66e5d83f4", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0", + "php": ">=8.1", + "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^1.1.7|^2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", + "symfony/cache-contracts": "^1.1.7|^2|^3", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/var-exporter": "^6.2" }, "conflict": { "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<4.4", - "symfony/http-kernel": "<4.4", - "symfony/var-dumper": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/var-dumper": "<5.4" }, "provide": { - "psr/cache-implementation": "1.0|2.0", - "psr/simple-cache-implementation": "1.0|2.0", - "symfony/cache-implementation": "1.0|2.0" + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/cache": "^1.6|^2.0", "doctrine/dbal": "^2.13.1|^3.0", "predis/predis": "^1.1", - "psr/simple-cache": "^1.0|^2.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Cache\\": "" }, + "classmap": [ + "Traits/ValueWrapper.php" + ], "exclude-from-classmap": [ "/Tests/" ] @@ -4877,14 +4586,14 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides an extended PSR-6, PSR-16 (and tags) implementation", + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", "homepage": "https://symfony.com", "keywords": [ "caching", "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v5.4.0" + "source": "https://github.com/symfony/cache/tree/v6.2.5" }, "funding": [ { @@ -4900,25 +4609,25 @@ "type": "tidelift" } ], - "time": "2021-11-23T18:51:45+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.5.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2" + "reference": "e8d1a5fc43534063204b74c080ebe36307d12271" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ac2e168102a2e06a2624f0379bde94cd5854ced2", - "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/e8d1a5fc43534063204b74c080ebe36307d12271", + "reference": "e8d1a5fc43534063204b74c080ebe36307d12271", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0|^3.0" + "php": ">=8.1", + "psr/cache": "^3.0" }, "suggest": { "symfony/cache-implementation": "" @@ -4926,7 +4635,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -4963,7 +4672,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.2.0" }, "funding": [ { @@ -4979,39 +4688,37 @@ "type": "tidelift" } ], - "time": "2021-08-17T14:20:01+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/config", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "e39cf688c80fd79ab0a6a2d05a9facac9b2d534b" + "reference": "f31b3c78a3650157188a240695e688d6a182aa91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/e39cf688c80fd79ab0a6a2d05a9facac9b2d534b", - "reference": "e39cf688c80fd79ab0a6a2d05a9facac9b2d534b", + "url": "https://api.github.com/repos/symfony/config/zipball/f31b3c78a3650157188a240695e688d6a182aa91", + "reference": "f31b3c78a3650157188a240695e688d6a182aa91", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22" + "symfony/filesystem": "^5.4|^6.0", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<4.4" + "symfony/finder": "<5.4" }, "require-dev": { - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -5042,7 +4749,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v5.4.0" + "source": "https://github.com/symfony/config/tree/v6.2.5" }, "funding": [ { @@ -5058,50 +4765,47 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2023-01-09T04:38:22+00:00" }, { "name": "symfony/console", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "ec3661faca1d110d6c307e124b44f99ac54179e3" + "reference": "3e294254f2191762c1d137aed4b94e966965e985" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ec3661faca1d110d6c307e124b44f99ac54179e3", - "reference": "ec3661faca1d110d6c307e124b44f99ac54179e3", + "url": "https://api.github.com/repos/symfony/console/zipball/3e294254f2191762c1d137aed4b94e966965e985", + "reference": "3e294254f2191762c1d137aed4b94e966965e985", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/string": "^5.4|^6.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -5141,7 +4845,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.0" + "source": "https://github.com/symfony/console/tree/v6.2.5" }, "funding": [ { @@ -5157,25 +4861,24 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:30:56+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "44b933f98bb4b5220d10bed9ce5662f8c2d13dcc" + "reference": "bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/44b933f98bb4b5220d10bed9ce5662f8c2d13dcc", - "reference": "44b933f98bb4b5220d10bed9ce5662f8c2d13dcc", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1", + "reference": "bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -5207,7 +4910,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.0" + "source": "https://github.com/symfony/css-selector/tree/v6.2.5" }, "funding": [ { @@ -5223,51 +4926,49 @@ "type": "tidelift" } ], - "time": "2021-09-09T08:06:01+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.4.0", + "version": "v6.2.6", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "69c398723857bb19fdea78496cedea0f756decab" + "reference": "2a6dd148589b9db59717db8b75f8d9fbb2ae714f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/69c398723857bb19fdea78496cedea0f756decab", - "reference": "69c398723857bb19fdea78496cedea0f756decab", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/2a6dd148589b9db59717db8b75f8d9fbb2ae714f", + "reference": "2a6dd148589b9db59717db8b75f8d9fbb2ae714f", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1.1", + "php": ">=8.1", + "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22", - "symfony/service-contracts": "^1.1.6|^2" + "symfony/service-contracts": "^1.1.6|^2.0|^3.0", + "symfony/var-exporter": "^6.2" }, "conflict": { "ext-psr": "<1.1|>=2", - "symfony/config": "<5.3", - "symfony/finder": "<4.4", - "symfony/proxy-manager-bridge": "<4.4", - "symfony/yaml": "<4.4" + "symfony/config": "<6.1", + "symfony/finder": "<5.4", + "symfony/proxy-manager-bridge": "<6.2", + "symfony/yaml": "<5.4" }, "provide": { - "psr/container-implementation": "1.0", - "symfony/service-implementation": "1.0|2.0" + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^5.3|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/config": "^6.1", + "symfony/expression-language": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "symfony/config": "", "symfony/expression-language": "For using expressions in service container configuration", "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", "symfony/yaml": "" }, "type": "library", @@ -5296,7 +4997,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v5.4.0" + "source": "https://github.com/symfony/dependency-injection/tree/v6.2.6" }, "funding": [ { @@ -5312,29 +5013,29 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:30:56+00:00" + "time": "2023-01-30T15:46:28+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -5363,7 +5064,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" }, "funding": [ { @@ -5379,71 +5080,70 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/doctrine-bridge", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "61efc93370e3c59364b354b7e160c092157d839c" + "reference": "3d42ae343f74a67991d9da7a42eb21e4d9c3d070" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/61efc93370e3c59364b354b7e160c092157d839c", - "reference": "61efc93370e3c59364b354b7e160c092157d839c", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/3d42ae343f74a67991d9da7a42eb21e4d9c3d070", + "reference": "3d42ae343f74a67991d9da7a42eb21e4d9c3d070", "shasum": "" }, "require": { - "doctrine/event-manager": "~1.0", - "doctrine/persistence": "^2", - "php": ">=7.2.5", + "doctrine/event-manager": "^1.2|^2", + "doctrine/persistence": "^2|^3", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2|^3" }, "conflict": { "doctrine/dbal": "<2.13.1", - "doctrine/orm": "<2.7.3", + "doctrine/lexer": "<1.1", + "doctrine/orm": "<2.7.4", "phpunit/phpunit": "<5.4.3", "symfony/cache": "<5.4", - "symfony/dependency-injection": "<4.4", - "symfony/form": "<5.1", - "symfony/http-kernel": "<5", - "symfony/messenger": "<4.4", - "symfony/property-info": "<5", - "symfony/security-bundle": "<5", - "symfony/security-core": "<5.3", - "symfony/validator": "<5.2" - }, - "require-dev": { - "composer/package-versions-deprecated": "^1.8", - "doctrine/annotations": "^1.10.4", - "doctrine/collections": "~1.0", + "symfony/dependency-injection": "<5.4", + "symfony/form": "<5.4", + "symfony/http-kernel": "<6.2", + "symfony/messenger": "<5.4", + "symfony/property-info": "<5.4", + "symfony/security-bundle": "<5.4", + "symfony/security-core": "<6.0", + "symfony/validator": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4|^2", + "doctrine/collections": "^1.0|^2.0", "doctrine/data-fixtures": "^1.1", "doctrine/dbal": "^2.13.1|^3.0", - "doctrine/orm": "^2.7.3", + "doctrine/orm": "^2.7.4", "psr/log": "^1|^2|^3", "symfony/cache": "^5.4|^6.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/doctrine-messenger": "^5.1|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/form": "^5.1.3|^6.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.0|^6.0", - "symfony/property-info": "^5.0|^6.0", - "symfony/proxy-manager-bridge": "^4.4|^5.0|^6.0", - "symfony/security-core": "^5.3|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^6.0", - "symfony/validator": "^5.2|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/doctrine-messenger": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/form": "^5.4.9|^6.0.9", + "symfony/http-kernel": "^6.2", + "symfony/messenger": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/proxy-manager-bridge": "^5.4|^6.0", + "symfony/security-core": "^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "suggest": { "doctrine/data-fixtures": "", @@ -5479,7 +5179,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v5.4.0" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.2.5" }, "funding": [ { @@ -5495,29 +5195,32 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:30:56+00:00" + "time": "2023-01-10T18:53:53+00:00" }, { "name": "symfony/dotenv", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "9bd173ff68fa90d39c59d91a42ae42b7f11713a0" + "reference": "1a24cb3ab1dbb8834a75c9d46e427e84baae29bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/9bd173ff68fa90d39c59d91a42ae42b7f11713a0", - "reference": "9bd173ff68fa90d39c59d91a42ae42b7f11713a0", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/1a24cb3ab1dbb8834a75c9d46e427e84baae29bc", + "reference": "1a24cb3ab1dbb8834a75c9d46e427e84baae29bc", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1" + }, + "conflict": { + "symfony/console": "<5.4", + "symfony/process": "<5.4" }, "require-dev": { - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0" + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -5550,7 +5253,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v5.4.0" + "source": "https://github.com/symfony/dotenv/tree/v6.2.5" }, "funding": [ { @@ -5566,31 +5269,31 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/error-handler", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "8433fa3145ac78df88b87a4a539118e950828126" + "reference": "0092696af0be8e6124b042fbe2890ca1788d7b28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/8433fa3145ac78df88b87a4a539118e950828126", - "reference": "8433fa3145ac78df88b87a4a539118e950828126", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/0092696af0be8e6124b042fbe2890ca1788d7b28", + "reference": "0092696af0be8e6124b042fbe2890ca1788d7b28", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "symfony/var-dumper": "^5.4|^6.0" }, "require-dev": { "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -5621,7 +5324,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.0" + "source": "https://github.com/symfony/error-handler/tree/v6.2.5" }, "funding": [ { @@ -5637,44 +5340,42 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:30:56+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb" + "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/27d39ae126352b9fa3be5e196ccf4617897be3eb", - "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", + "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" + "symfony/stopwatch": "^5.4|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -5706,7 +5407,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.5" }, "funding": [ { @@ -5722,24 +5423,24 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" + "reference": "0782b0b52a737a05b4383d0df35a474303cabdae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae", + "reference": "0782b0b52a737a05b4383d0df35a474303cabdae", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, "suggest": { @@ -5748,7 +5449,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -5785,7 +5486,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0" }, "funding": [ { @@ -5801,25 +5502,25 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/expression-language", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "aff6ee3cf4ac1f37f5c7dad3f89f439dbe0893f2" + "reference": "c61e4bbaff98b2e0b911612ef684f9b1dd3c7db4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/aff6ee3cf4ac1f37f5c7dad3f89f439dbe0893f2", - "reference": "aff6ee3cf4ac1f37f5c7dad3f89f439dbe0893f2", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/c61e4bbaff98b2e0b911612ef684f9b1dd3c7db4", + "reference": "c61e4bbaff98b2e0b911612ef684f9b1dd3c7db4", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/cache": "^4.4|^5.0|^6.0", + "php": ">=8.1", + "symfony/cache": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3" }, "type": "library", @@ -5848,7 +5549,7 @@ "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/expression-language/tree/v5.4.0" + "source": "https://github.com/symfony/expression-language/tree/v6.2.5" }, "funding": [ { @@ -5864,27 +5565,26 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { "name": "symfony/filesystem", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01" + "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/731f917dc31edcffec2c6a777f3698c33bea8f01", - "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e59e8a4006afd7f5654786a83b4fcb8da98f4593", + "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "~1.8" }, "type": "library", "autoload": { @@ -5912,7 +5612,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.0" + "source": "https://github.com/symfony/filesystem/tree/v6.2.5" }, "funding": [ { @@ -5928,26 +5628,27 @@ "type": "tidelift" } ], - "time": "2021-10-28T13:39:27+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { "name": "symfony/finder", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590" + "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d2f29dac98e96a98be467627bd49c2efb1bc2590", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590", + "url": "https://api.github.com/repos/symfony/finder/zipball/c90dc446976a612e3312a97a6ec0069ab0c2099c", + "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" }, "type": "library", "autoload": { @@ -5975,7 +5676,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.0" + "source": "https://github.com/symfony/finder/tree/v6.2.5" }, "funding": [ { @@ -5991,20 +5692,20 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { "name": "symfony/flex", - "version": "v1.17.6", + "version": "v1.19.5", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "7a79135e1dc66b30042b4d968ecba0908f9374bc" + "reference": "51077ed0f6dc2c94cd0b670167eee3747c31b2c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/7a79135e1dc66b30042b4d968ecba0908f9374bc", - "reference": "7a79135e1dc66b30042b4d968ecba0908f9374bc", + "url": "https://api.github.com/repos/symfony/flex/zipball/51077ed0f6dc2c94cd0b670167eee3747c31b2c1", + "reference": "51077ed0f6dc2c94cd0b670167eee3747c31b2c1", "shasum": "" }, "require": { @@ -6040,7 +5741,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v1.17.6" + "source": "https://github.com/symfony/flex/tree/v1.19.5" }, "funding": [ { @@ -6056,63 +5757,64 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:39:37+00:00" + "time": "2023-01-30T17:02:31+00:00" }, { "name": "symfony/form", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "0148f46628efa4c12803768efbdfcd6e0b9ceec3" + "reference": "5504c29b365c814132c087136935b50849411b09" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/0148f46628efa4c12803768efbdfcd6e0b9ceec3", - "reference": "0148f46628efa4c12803768efbdfcd6e0b9ceec3", + "url": "https://api.github.com/repos/symfony/form/zipball/5504c29b365c814132c087136935b50849411b09", + "reference": "5504c29b365c814132c087136935b50849411b09", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/options-resolver": "^5.1|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/options-resolver": "^5.4|^6.0", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-icu": "^1.21", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.23", - "symfony/property-access": "^5.0.8|^6.0", + "symfony/property-access": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3" }, "conflict": { "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<4.4", - "symfony/doctrine-bridge": "<4.4", - "symfony/error-handler": "<4.4.5", - "symfony/framework-bundle": "<4.4", - "symfony/http-kernel": "<4.4", - "symfony/translation": "<4.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/error-handler": "<5.4", + "symfony/framework-bundle": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/translation": "<5.4", "symfony/translation-contracts": "<1.1.7", - "symfony/twig-bridge": "<4.4" + "symfony/twig-bridge": "<5.4" }, "require-dev": { - "doctrine/collections": "~1.0", - "symfony/config": "^4.4|^5.0|^6.0", + "doctrine/collections": "^1.0|^2.0", + "symfony/config": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", - "symfony/security-csrf": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^6.0", - "symfony/validator": "^4.4.17|^5.1.9|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/html-sanitizer": "^6.1", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/security-core": "^6.2", + "symfony/security-csrf": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "suggest": { + "symfony/security-core": "For hashing users passwords.", "symfony/security-csrf": "For protecting forms against CSRF attacks.", "symfony/twig-bridge": "For templating with Twig.", "symfony/validator": "For form validation." @@ -6143,7 +5845,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v5.4.0" + "source": "https://github.com/symfony/form/tree/v6.2.5" }, "funding": [ { @@ -6159,105 +5861,103 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:30:56+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/framework-bundle", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "4e3b7215071f02e930b00f69741dfd4dab3c31e7" + "reference": "3f6ea83b11b24271bb86deb82f915fb08621b964" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/4e3b7215071f02e930b00f69741dfd4dab3c31e7", - "reference": "4e3b7215071f02e930b00f69741dfd4dab3c31e7", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/3f6ea83b11b24271bb86deb82f915fb08621b964", + "reference": "3f6ea83b11b24271bb86deb82f915fb08621b964", "shasum": "" }, "require": { + "composer-runtime-api": ">=2.1", "ext-xml": "*", - "php": ">=7.2.5", - "symfony/cache": "^5.2|^6.0", - "symfony/config": "^5.3|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", + "php": ">=8.1", + "symfony/cache": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/dependency-injection": "^6.2", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^4.4.1|^5.0.1|^6.0", - "symfony/event-dispatcher": "^5.1|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/http-kernel": "^5.4|^6.0", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-foundation": "^6.2", + "symfony/http-kernel": "^6.2.1", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22", - "symfony/routing": "^5.3|^6.0" + "symfony/routing": "^5.4|^6.0" }, "conflict": { "doctrine/annotations": "<1.13.1", - "doctrine/cache": "<1.11", "doctrine/persistence": "<1.3", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "phpunit/phpunit": "<5.4.3", - "symfony/asset": "<5.3", - "symfony/console": "<5.2.5", - "symfony/dom-crawler": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/form": "<5.2", - "symfony/http-client": "<4.4", - "symfony/lock": "<4.4", - "symfony/mailer": "<5.2", - "symfony/messenger": "<5.4", - "symfony/mime": "<4.4", - "symfony/property-access": "<5.3", - "symfony/property-info": "<4.4", - "symfony/security-csrf": "<5.3", - "symfony/serializer": "<5.2", - "symfony/service-contracts": ">=3.0", - "symfony/stopwatch": "<4.4", - "symfony/translation": "<5.3", - "symfony/twig-bridge": "<4.4", - "symfony/twig-bundle": "<4.4", - "symfony/validator": "<5.2", - "symfony/web-profiler-bundle": "<4.4", - "symfony/workflow": "<5.2" - }, - "require-dev": { - "doctrine/annotations": "^1.13.1", - "doctrine/cache": "^1.11|^2.0", - "doctrine/persistence": "^1.3|^2.0", - "paragonie/sodium_compat": "^1.8", + "symfony/asset": "<5.4", + "symfony/console": "<5.4", + "symfony/dom-crawler": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/lock": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/property-access": "<5.4", + "symfony/property-info": "<5.4", + "symfony/security-core": "<5.4", + "symfony/security-csrf": "<5.4", + "symfony/serializer": "<6.1", + "symfony/stopwatch": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/validator": "<5.4", + "symfony/web-profiler-bundle": "<5.4", + "symfony/workflow": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.13.1|^2", + "doctrine/persistence": "^1.3|^2|^3", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/asset": "^5.3|^6.0", + "symfony/asset": "^5.4|^6.0", "symfony/browser-kit": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dom-crawler": "^4.4.30|^5.3.7|^6.0", - "symfony/dotenv": "^5.1|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/form": "^5.2|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/mailer": "^5.2|^6.0", - "symfony/messenger": "^5.4|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/console": "^5.4.9|^6.0.9", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/dotenv": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/html-sanitizer": "^6.1", + "symfony/http-client": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/mailer": "^5.4|^6.0", + "symfony/messenger": "^6.2", + "symfony/mime": "^6.2", "symfony/notifier": "^5.4|^6.0", - "symfony/phpunit-bridge": "^5.3|^6.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/property-info": "^4.4|^5.0|^6.0", - "symfony/rate-limiter": "^5.2|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/rate-limiter": "^5.4|^6.0", "symfony/security-bundle": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/string": "^5.0|^6.0", - "symfony/translation": "^5.3|^6.0", - "symfony/twig-bundle": "^4.4|^5.0|^6.0", - "symfony/validator": "^5.2|^6.0", - "symfony/web-link": "^4.4|^5.0|^6.0", - "symfony/workflow": "^5.2|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0", + "symfony/semaphore": "^5.4|^6.0", + "symfony/serializer": "^6.1", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/string": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/twig-bundle": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0", + "symfony/web-link": "^5.4|^6.0", + "symfony/workflow": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0", "twig/twig": "^2.10|^3.0" }, "suggest": { @@ -6296,7 +5996,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v5.4.0" + "source": "https://github.com/symfony/framework-bundle/tree/v6.2.5" }, "funding": [ { @@ -6312,36 +6012,34 @@ "type": "tidelift" } ], - "time": "2021-11-29T16:01:17+00:00" + "time": "2023-01-11T11:53:46+00:00" }, { "name": "symfony/http-client", - "version": "v5.4.0", + "version": "v6.2.6", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "b3d99775f5372ff746035e98d6fa00182e832380" + "reference": "6efa9a7521ab7d031a82cf0a759484d1b02a6ad9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/b3d99775f5372ff746035e98d6fa00182e832380", - "reference": "b3d99775f5372ff746035e98d6fa00182e832380", + "url": "https://api.github.com/repos/symfony/http-client/zipball/6efa9a7521ab7d031a82cf0a759484d1b02a6ad9", + "reference": "6efa9a7521ab7d031a82cf0a759484d1b02a6ad9", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-client-contracts": "^2.4", - "symfony/polyfill-php73": "^1.11", - "symfony/polyfill-php80": "^1.16", + "symfony/http-client-contracts": "^3", "symfony/service-contracts": "^1.0|^2|^3" }, "provide": { "php-http/async-client-implementation": "*", "php-http/client-implementation": "*", "psr/http-client-implementation": "1.0", - "symfony/http-client-implementation": "2.4" + "symfony/http-client-implementation": "3.0" }, "require-dev": { "amphp/amp": "^2.5", @@ -6352,10 +6050,10 @@ "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4.13|^5.1.5|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0" + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -6383,7 +6081,7 @@ "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-client/tree/v5.4.0" + "source": "https://github.com/symfony/http-client/tree/v6.2.6" }, "funding": [ { @@ -6399,24 +6097,24 @@ "type": "tidelift" } ], - "time": "2021-11-23T15:26:31+00:00" + "time": "2023-01-30T15:46:28+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v2.5.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "ec82e57b5b714dbb69300d348bd840b345e24166" + "reference": "c5f587eb445224ddfeb05b5ee703476742d730bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ec82e57b5b714dbb69300d348bd840b345e24166", - "reference": "ec82e57b5b714dbb69300d348bd840b345e24166", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/c5f587eb445224ddfeb05b5ee703476742d730bf", + "reference": "c5f587eb445224ddfeb05b5ee703476742d730bf", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=8.1" }, "suggest": { "symfony/http-client-implementation": "" @@ -6424,7 +6122,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -6434,7 +6132,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\HttpClient\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6461,7 +6162,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.2.0" }, "funding": [ { @@ -6477,33 +6178,38 @@ "type": "tidelift" } ], - "time": "2021-11-03T09:24:47+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.0", + "version": "v6.2.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5ef86ac7927d2de08dc1e26eb91325f9ccbe6309" + "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5ef86ac7927d2de08dc1e26eb91325f9ccbe6309", - "reference": "5ef86ac7927d2de08dc1e26eb91325f9ccbe6309", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8dd1f502bc2b3371d05092aa233b064b03ce7ed", + "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "~1.1" + }, + "conflict": { + "symfony/cache": "<6.2" }, "require-dev": { "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0" + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" }, "suggest": { "symfony/mime": "To use the file extension guesser" @@ -6534,7 +6240,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.0" + "source": "https://github.com/symfony/http-foundation/tree/v6.2.6" }, "funding": [ { @@ -6550,68 +6256,67 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2023-01-30T15:46:28+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.0", + "version": "v6.2.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "e012f16688bcb151e965473a70d8ebaa8b1d15ea" + "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e012f16688bcb151e965473a70d8ebaa8b1d15ea", - "reference": "e012f16688bcb151e965473a70d8ebaa8b1d15ea", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7122db07b0d8dbf0de682267c84217573aee3ea7", + "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2", + "php": ">=8.1", + "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^5.0|^6.0", - "symfony/http-foundation": "^5.3.7|^6.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16" + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.0", - "symfony/config": "<5.0", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.3", - "symfony/doctrine-bridge": "<5.0", - "symfony/form": "<5.0", - "symfony/http-client": "<5.0", - "symfony/mailer": "<5.0", - "symfony/messenger": "<5.0", - "symfony/translation": "<5.0", - "symfony/twig-bridge": "<5.0", - "symfony/validator": "<5.0", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.2", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", "twig/twig": "<2.13" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/config": "^6.1", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^6.2", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -6646,7 +6351,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.4.0" + "source": "https://github.com/symfony/http-kernel/tree/v6.2.6" }, "funding": [ { @@ -6662,41 +6367,34 @@ "type": "tidelift" } ], - "time": "2021-11-29T16:56:53+00:00" + "time": "2023-02-01T08:32:25+00:00" }, { "name": "symfony/intl", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "01b11a038293916ad52aab9ac7bd6b4e711d1f3e" + "reference": "3e5671e7676723db90a1b3c0b8b27e00407d69d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/01b11a038293916ad52aab9ac7bd6b4e711d1f3e", - "reference": "01b11a038293916ad52aab9ac7bd6b4e711d1f3e", + "url": "https://api.github.com/repos/symfony/intl/zipball/3e5671e7676723db90a1b3c0b8b27e00407d69d5", + "reference": "3e5671e7676723db90a1b3c0b8b27e00407d69d5", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "require-dev": { - "symfony/filesystem": "^4.4|^5.0|^6.0" + "symfony/filesystem": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Intl\\": "" }, - "classmap": [ - "Resources/stubs" - ], - "files": [ - "Resources/functions.php" - ], "exclude-from-classmap": [ "/Tests/" ] @@ -6734,7 +6432,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v5.4.0" + "source": "https://github.com/symfony/intl/tree/v6.2.5" }, "funding": [ { @@ -6750,39 +6448,42 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2023-01-05T09:45:19+00:00" }, { "name": "symfony/mailer", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "2823212575ed3a6adfc5bc34ebb47b5395285048" + "reference": "29729ac0b4e5113f24c39c46746bd6afb79e0aaa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/2823212575ed3a6adfc5bc34ebb47b5395285048", - "reference": "2823212575ed3a6adfc5bc34ebb47b5395285048", + "url": "https://api.github.com/repos/symfony/mailer/zipball/29729ac0b4e5113f24c39c46746bd6afb79e0aaa", + "reference": "29729ac0b4e5113f24c39c46746bd6afb79e0aaa", "shasum": "" }, "require": { - "egulias/email-validator": "^2.1.10|^3", - "php": ">=7.2.5", + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.1", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/mime": "^5.2.6|^6.0", - "symfony/polyfill-php80": "^1.16", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^6.2", "symfony/service-contracts": "^1.1|^2|^3" }, "conflict": { - "symfony/http-kernel": "<4.4" + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" }, "require-dev": { + "symfony/console": "^5.4|^6.0", "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/messenger": "^4.4|^5.0|^6.0" + "symfony/messenger": "^6.2", + "symfony/twig-bridge": "^6.2" }, "type": "library", "autoload": { @@ -6810,7 +6511,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v5.4.0" + "source": "https://github.com/symfony/mailer/tree/v6.2.5" }, "funding": [ { @@ -6826,42 +6527,42 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-01-10T18:53:53+00:00" }, { "name": "symfony/mime", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "d4365000217b67c01acff407573906ff91bcfb34" + "reference": "4b7b349f67d15cd0639955c8179a76c89f6fd610" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d4365000217b67c01acff407573906ff91bcfb34", - "reference": "d4365000217b67c01acff407573906ff91bcfb34", + "url": "https://api.github.com/repos/symfony/mime/zipball/4b7b349f67d15cd0639955c8179a76c89f6fd610", + "reference": "4b7b349f67d15cd0639955c8179a76c89f6fd610", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4" + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.2" }, "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1", + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.1|^6.0", - "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/serializer": "^5.2|^6.0" + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^6.2" }, "type": "library", "autoload": { @@ -6893,7 +6594,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.0" + "source": "https://github.com/symfony/mime/tree/v6.2.5" }, "funding": [ { @@ -6909,42 +6610,41 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-01-10T18:53:53+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "6ce6f39536a718ec2ece37eae81c6899030fc571" + "reference": "7dedf89edf3baba78d4024e37d8b423e1ac3f079" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/6ce6f39536a718ec2ece37eae81c6899030fc571", - "reference": "6ce6f39536a718ec2ece37eae81c6899030fc571", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/7dedf89edf3baba78d4024e37d8b423e1ac3f079", + "reference": "7dedf89edf3baba78d4024e37d8b423e1ac3f079", "shasum": "" }, "require": { - "monolog/monolog": "^1.25.1|^2", - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^5.3|^6.0", - "symfony/polyfill-php80": "^1.16", + "monolog/monolog": "^1.25.1|^2|^3", + "php": ">=8.1", + "symfony/http-kernel": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3" }, "conflict": { - "symfony/console": "<4.4", - "symfony/http-foundation": "<5.3" + "symfony/console": "<5.4", + "symfony/http-foundation": "<5.4", + "symfony/security-core": "<6.0" }, "require-dev": { - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/mailer": "^4.4|^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/security-core": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "symfony/console": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/mailer": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/security-core": "^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "suggest": { "symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings.", @@ -6977,7 +6677,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v5.4.0" + "source": "https://github.com/symfony/monolog-bridge/tree/v6.2.5" }, "funding": [ { @@ -6993,24 +6693,24 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/monolog-bundle", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "fde12fc628162787a4e53877abadc30047fd868b" + "reference": "a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/fde12fc628162787a4e53877abadc30047fd868b", - "reference": "fde12fc628162787a4e53877abadc30047fd868b", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d", + "reference": "a41bbcdc1105603b6d73a7d9a43a3788f8e0fb7d", "shasum": "" }, "require": { - "monolog/monolog": "~1.22 || ~2.0", + "monolog/monolog": "^1.22 || ^2.0 || ^3.0", "php": ">=7.1.3", "symfony/config": "~4.4 || ^5.0 || ^6.0", "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", @@ -7058,7 +6758,7 @@ ], "support": { "issues": "https://github.com/symfony/monolog-bundle/issues", - "source": "https://github.com/symfony/monolog-bundle/tree/v3.7.1" + "source": "https://github.com/symfony/monolog-bundle/tree/v3.8.0" }, "funding": [ { @@ -7074,27 +6774,25 @@ "type": "tidelift" } ], - "time": "2021-11-05T10:34:29+00:00" + "time": "2022-05-10T14:24:36+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "b0fb78576487af19c500aaddb269fd36701d4847" + "reference": "e8324d44f5af99ec2ccec849934a242f64458f86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b0fb78576487af19c500aaddb269fd36701d4847", - "reference": "b0fb78576487af19c500aaddb269fd36701d4847", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/e8324d44f5af99ec2ccec849934a242f64458f86", + "reference": "e8324d44f5af99ec2ccec849934a242f64458f86", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3" }, "type": "library", "autoload": { @@ -7127,7 +6825,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.0" + "source": "https://github.com/symfony/options-resolver/tree/v6.2.5" }, "funding": [ { @@ -7143,32 +6841,31 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/password-hasher", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/password-hasher.git", - "reference": "60c4aba11e2ce4140a5a9cbc13733da4b8333e2d" + "reference": "56aabf1c3f579c109b573d45a00a272d6abdfc81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/60c4aba11e2ce4140a5a9cbc13733da4b8333e2d", - "reference": "60c4aba11e2ce4140a5a9cbc13733da4b8333e2d", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/56aabf1c3f579c109b573d45a00a272d6abdfc81", + "reference": "56aabf1c3f579c109b573d45a00a272d6abdfc81", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" + "php": ">=8.1" }, "conflict": { - "symfony/security-core": "<5.3" + "symfony/security-core": "<5.4" }, "require-dev": { - "symfony/console": "^5", - "symfony/security-core": "^5.3|^6.0" + "symfony/console": "^5.4|^6.0", + "symfony/security-core": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -7200,7 +6897,7 @@ "password" ], "support": { - "source": "https://github.com/symfony/password-hasher/tree/v5.4.0" + "source": "https://github.com/symfony/password-hasher/tree/v6.2.5" }, "funding": [ { @@ -7216,20 +6913,20 @@ "type": "tidelift" } ], - "time": "2021-10-30T15:55:55+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.1", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { @@ -7241,7 +6938,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7249,12 +6946,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7281,7 +6978,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -7297,20 +6994,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.23.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "4a80a521d6176870b6445cfb469c130f9cae1dda" + "reference": "a3d9148e2c363588e05abbdd4ee4f971f0a5330c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/4a80a521d6176870b6445cfb469c130f9cae1dda", - "reference": "4a80a521d6176870b6445cfb469c130f9cae1dda", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/a3d9148e2c363588e05abbdd4ee4f971f0a5330c", + "reference": "a3d9148e2c363588e05abbdd4ee4f971f0a5330c", "shasum": "" }, "require": { @@ -7322,7 +7019,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7368,7 +7065,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.27.0" }, "funding": [ { @@ -7384,20 +7081,20 @@ "type": "tidelift" } ], - "time": "2021-05-24T10:04:56+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.23.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", "shasum": "" }, "require": { @@ -7411,7 +7108,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7419,12 +7116,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7455,7 +7152,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" }, "funding": [ { @@ -7471,20 +7168,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -7496,7 +7193,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7504,12 +7201,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -7539,7 +7236,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -7555,185 +7252,35 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.1", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, "suggest": { "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T12:26:48+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T09:17:38+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7741,15 +7288,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, "files": [ "bootstrap.php" ], - "classmap": [ - "Resources/stubs" - ] + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7765,16 +7309,17 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "mbstring", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -7790,20 +7335,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.23.1", + "name": "symfony/polyfill-php72", + "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", "shasum": "" }, "require": { @@ -7812,7 +7357,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7820,25 +7365,18 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], - "classmap": [ - "Resources/stubs" - ] + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -7848,7 +7386,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -7857,7 +7395,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" }, "funding": [ { @@ -7873,20 +7411,20 @@ "type": "tidelift" } ], - "time": "2021-07-28T13:41:28+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.23.0", + "name": "symfony/polyfill-php80", + "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -7895,7 +7433,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7903,12 +7441,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -7918,6 +7456,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -7927,7 +7469,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -7936,7 +7478,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -7952,25 +7494,24 @@ "type": "tidelift" } ], - "time": "2021-05-21T13:25:03+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/process", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "5be20b3830f726e019162b26223110c8f47cf274" + "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5be20b3830f726e019162b26223110c8f47cf274", - "reference": "5be20b3830f726e019162b26223110c8f47cf274", + "url": "https://api.github.com/repos/symfony/process/zipball/9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", + "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -7998,7 +7539,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.0" + "source": "https://github.com/symfony/process/tree/v6.2.5" }, "funding": [ { @@ -8014,30 +7555,29 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/property-access", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "07db4e9d1f0bf4b8a0c60a25b2672f20ab8f3562" + "reference": "cfd63e46c8b8a97f05353fb9341bfa75a62184e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/07db4e9d1f0bf4b8a0c60a25b2672f20ab8f3562", - "reference": "07db4e9d1f0bf4b8a0c60a25b2672f20ab8f3562", + "url": "https://api.github.com/repos/symfony/property-access/zipball/cfd63e46c8b8a97f05353fb9341bfa75a62184e1", + "reference": "cfd63e46c8b8a97f05353fb9341bfa75a62184e1", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/property-info": "^5.2|^6.0" + "symfony/property-info": "^5.4|^6.0" }, "require-dev": { - "symfony/cache": "^4.4|^5.0|^6.0" + "symfony/cache": "^5.4|^6.0" }, "suggest": { "psr/cache-implementation": "To cache access methods." @@ -8079,7 +7619,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v5.4.0" + "source": "https://github.com/symfony/property-access/tree/v6.2.5" }, "funding": [ { @@ -8095,40 +7635,38 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/property-info", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "c21b4221522779537e9693d51536d8174579b1fd" + "reference": "267c798e87dc56dd0832c29cf9012ac983ed7194" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/c21b4221522779537e9693d51536d8174579b1fd", - "reference": "c21b4221522779537e9693d51536d8174579b1fd", + "url": "https://api.github.com/repos/symfony/property-info/zipball/267c798e87dc56dd0832c29cf9012ac983ed7194", + "reference": "267c798e87dc56dd0832c29cf9012ac983ed7194", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/string": "^5.1|^6.0" + "php": ">=8.1", + "symfony/string": "^5.4|^6.0" }, "conflict": { - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/dependency-injection": "<4.4" + "phpdocumentor/reflection-docblock": "<5.2", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/dependency-injection": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.10.4", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "doctrine/annotations": "^1.10.4|^2", + "phpdocumentor/reflection-docblock": "^5.2", "phpstan/phpdoc-parser": "^1.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" }, "suggest": { "phpdocumentor/reflection-docblock": "To use the PHPDoc", @@ -8170,7 +7708,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v5.4.0" + "source": "https://github.com/symfony/property-info/tree/v6.2.5" }, "funding": [ { @@ -8186,31 +7724,29 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { "name": "symfony/proxy-manager-bridge", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "91e5ddd5f7381f4a5524f10c8789c6d5d07f04e7" + "reference": "4fc4593d497e424209407512e951c8525f6c1d74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/91e5ddd5f7381f4a5524f10c8789c6d5d07f04e7", - "reference": "91e5ddd5f7381f4a5524f10c8789c6d5d07f04e7", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/4fc4593d497e424209407512e951c8525f6c1d74", + "reference": "4fc4593d497e424209407512e951c8525f6c1d74", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.8", "friendsofphp/proxy-manager-lts": "^1.0.2", - "php": ">=7.2.5", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/dependency-injection": "^6.2" }, "require-dev": { - "symfony/config": "^4.4|^5.0|^6.0" + "symfony/config": "^6.1" }, "type": "symfony-bridge", "autoload": { @@ -8238,7 +7774,7 @@ "description": "Provides integration for ProxyManager with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/proxy-manager-bridge/tree/v5.4.0" + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.2.5" }, "funding": [ { @@ -8254,41 +7790,39 @@ "type": "tidelift" } ], - "time": "2021-11-17T12:18:18+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/routing", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9eeae93c32ca86746e5d38f3679e9569981038b1" + "reference": "589bd742d5d03c192c8521911680fe88f61712fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9eeae93c32ca86746e5d38f3679e9569981038b1", - "reference": "9eeae93c32ca86746e5d38f3679e9569981038b1", + "url": "https://api.github.com/repos/symfony/routing/zipball/589bd742d5d03c192c8521911680fe88f61712fe", + "reference": "589bd742d5d03c192c8521911680fe88f61712fe", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "conflict": { "doctrine/annotations": "<1.12", - "symfony/config": "<5.3", - "symfony/dependency-injection": "<4.4", - "symfony/yaml": "<4.4" + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.12", + "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^5.3|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/config": "^6.2", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "symfony/config": "For using the all-in-one router or any loader", @@ -8328,7 +7862,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.0" + "source": "https://github.com/symfony/routing/tree/v6.2.5" }, "funding": [ { @@ -8344,70 +7878,44 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { - "name": "symfony/security-bundle", - "version": "v5.4.0", + "name": "symfony/runtime", + "version": "v6.2.5", "source": { "type": "git", - "url": "https://github.com/symfony/security-bundle.git", - "reference": "38d5e23c85932deb45289793f7b9a0a1b174071a" + "url": "https://github.com/symfony/runtime.git", + "reference": "bf27ed7b4317982b06f8cc37255b8a315d5a9686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/38d5e23c85932deb45289793f7b9a0a1b174071a", - "reference": "38d5e23c85932deb45289793f7b9a0a1b174071a", + "url": "https://api.github.com/repos/symfony/runtime/zipball/bf27ed7b4317982b06f8cc37255b8a315d5a9686", + "reference": "bf27ed7b4317982b06f8cc37255b8a315d5a9686", "shasum": "" }, "require": { - "ext-xml": "*", - "php": ">=7.2.5", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher": "^5.1|^6.0", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/http-kernel": "^5.3|^6.0", - "symfony/password-hasher": "^5.3|^6.0", - "symfony/polyfill-php80": "^1.16", - "symfony/security-core": "^5.4|^6.0", - "symfony/security-csrf": "^4.4|^5.0|^6.0", - "symfony/security-guard": "^5.3", - "symfony/security-http": "^5.4|^6.0" + "composer-plugin-api": "^1.0|^2.0", + "php": ">=8.1" }, "conflict": { - "symfony/browser-kit": "<4.4", - "symfony/console": "<4.4", - "symfony/framework-bundle": "<4.4", - "symfony/ldap": "<5.1", - "symfony/twig-bundle": "<4.4" + "symfony/dotenv": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.10.4", - "symfony/asset": "^4.4|^5.0|^6.0", - "symfony/browser-kit": "^4.4|^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/form": "^4.4|^5.0|^6.0", - "symfony/framework-bundle": "^5.3|^6.0", - "symfony/ldap": "^5.3|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/rate-limiter": "^5.2|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/twig-bridge": "^4.4|^5.0|^6.0", - "symfony/twig-bundle": "^4.4|^5.0|^6.0", - "symfony/validator": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0", - "twig/twig": "^2.13|^3.0.4" + "composer/composer": "^1.0.2|^2.0", + "symfony/console": "^5.4|^6.0", + "symfony/dotenv": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Component\\Runtime\\Internal\\ComposerPlugin" }, - "type": "symfony-bundle", "autoload": { "psr-4": { - "Symfony\\Bundle\\SecurityBundle\\": "" + "Symfony\\Component\\Runtime\\": "", + "Symfony\\Runtime\\Symfony\\Component\\": "Internal/" }, "exclude-from-classmap": [ "/Tests/" @@ -8419,18 +7927,18 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", + "description": "Enables decoupling PHP applications from global state", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/v5.4.0" + "source": "https://github.com/symfony/runtime/tree/v6.2.5" }, "funding": [ { @@ -8446,61 +7954,68 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { - "name": "symfony/security-core", - "version": "v5.4.0", + "name": "symfony/security-bundle", + "version": "v6.2.6", "source": { "type": "git", - "url": "https://github.com/symfony/security-core.git", - "reference": "cc961891c83fc87fd31361b85032db35ae9770e6" + "url": "https://github.com/symfony/security-bundle.git", + "reference": "f3feb140c13015adecbeb51d49e45256aaf8a140" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/cc961891c83fc87fd31361b85032db35ae9770e6", - "reference": "cc961891c83fc87fd31361b85032db35ae9770e6", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/f3feb140c13015adecbeb51d49e45256aaf8a140", + "reference": "f3feb140c13015adecbeb51d49e45256aaf8a140", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^1.1|^2|^3", - "symfony/password-hasher": "^5.3|^6.0", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1.6|^2|^3" + "composer-runtime-api": ">=2.1", + "ext-xml": "*", + "php": ">=8.1", + "symfony/config": "^6.1", + "symfony/dependency-injection": "^6.2", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^6.2", + "symfony/http-kernel": "^6.2", + "symfony/password-hasher": "^5.4|^6.0", + "symfony/security-core": "^6.2", + "symfony/security-csrf": "^5.4|^6.0", + "symfony/security-http": "^6.2.6" }, "conflict": { - "symfony/event-dispatcher": "<4.4", - "symfony/http-foundation": "<5.3", - "symfony/ldap": "<4.4", - "symfony/security-guard": "<4.4", - "symfony/validator": "<5.2" + "symfony/browser-kit": "<5.4", + "symfony/console": "<5.4", + "symfony/framework-bundle": "<5.4", + "symfony/ldap": "<5.4", + "symfony/twig-bundle": "<5.4" }, "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "psr/container": "^1.0|^2.0", - "psr/log": "^1|^2|^3", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/ldap": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/validator": "^5.2|^6.0" - }, - "suggest": { - "psr/container-implementation": "To instantiate the Security class", - "symfony/event-dispatcher": "", - "symfony/expression-language": "For using the expression voter", - "symfony/http-foundation": "", - "symfony/ldap": "For using LDAP integration", - "symfony/validator": "For using the user password constraint" + "doctrine/annotations": "^1.10.4|^2", + "symfony/asset": "^5.4|^6.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/framework-bundle": "^5.4|^6.0", + "symfony/ldap": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/rate-limiter": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/twig-bridge": "^5.4|^6.0", + "symfony/twig-bundle": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" }, - "type": "library", + "type": "symfony-bundle", "autoload": { "psr-4": { - "Symfony\\Component\\Security\\Core\\": "" + "Symfony\\Bundle\\SecurityBundle\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -8520,10 +8035,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Security Component - Core Library", + "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v5.4.0" + "source": "https://github.com/symfony/security-bundle/tree/v6.2.6" }, "funding": [ { @@ -8539,40 +8054,59 @@ "type": "tidelift" } ], - "time": "2021-11-23T19:07:08+00:00" + "time": "2023-01-30T15:46:28+00:00" }, { - "name": "symfony/security-csrf", - "version": "v5.4.0", + "name": "symfony/security-core", + "version": "v6.2.5", "source": { "type": "git", - "url": "https://github.com/symfony/security-csrf.git", - "reference": "a6bfeedc3fcaafd2eb9ce61f0eb6a95e0316a3e2" + "url": "https://github.com/symfony/security-core.git", + "reference": "3a26ddeda71fbbc6419578af526f4130cea3cc38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/a6bfeedc3fcaafd2eb9ce61f0eb6a95e0316a3e2", - "reference": "a6bfeedc3fcaafd2eb9ce61f0eb6a95e0316a3e2", + "url": "https://api.github.com/repos/symfony/security-core/zipball/3a26ddeda71fbbc6419578af526f4130cea3cc38", + "reference": "3a26ddeda71fbbc6419578af526f4130cea3cc38", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16", - "symfony/security-core": "^4.4|^5.0|^6.0" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^1.1|^2|^3", + "symfony/password-hasher": "^5.4|^6.0", + "symfony/service-contracts": "^1.1.6|^2|^3" }, "conflict": { - "symfony/http-foundation": "<5.3" + "symfony/event-dispatcher": "<5.4", + "symfony/http-foundation": "<5.4", + "symfony/ldap": "<5.4", + "symfony/security-guard": "<5.4", + "symfony/validator": "<5.4" }, "require-dev": { - "symfony/http-foundation": "^5.3|^6.0" + "psr/cache": "^1.0|^2.0|^3.0", + "psr/container": "^1.1|^2.0", + "psr/log": "^1|^2|^3", + "symfony/cache": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/ldap": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0" }, "suggest": { - "symfony/http-foundation": "For using the class SessionTokenStorage." + "psr/container-implementation": "To instantiate the Security class", + "symfony/event-dispatcher": "", + "symfony/expression-language": "For using the expression voter", + "symfony/http-foundation": "", + "symfony/ldap": "For using LDAP integration", + "symfony/validator": "For using the user password constraint" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Security\\Csrf\\": "" + "Symfony\\Component\\Security\\Core\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -8592,10 +8126,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Security Component - CSRF Library", + "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-csrf/tree/v5.4.0" + "source": "https://github.com/symfony/security-core/tree/v6.2.5" }, "funding": [ { @@ -8611,35 +8145,39 @@ "type": "tidelift" } ], - "time": "2021-11-23T19:07:08+00:00" + "time": "2023-01-24T13:16:10+00:00" }, { - "name": "symfony/security-guard", - "version": "v5.4.0", + "name": "symfony/security-csrf", + "version": "v6.2.5", "source": { "type": "git", - "url": "https://github.com/symfony/security-guard.git", - "reference": "5ebbe00731ce0773108116875083a82098ddddcf" + "url": "https://github.com/symfony/security-csrf.git", + "reference": "4abbe66efe965bec1dc0ea04b72c361971c4000d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-guard/zipball/5ebbe00731ce0773108116875083a82098ddddcf", - "reference": "5ebbe00731ce0773108116875083a82098ddddcf", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/4abbe66efe965bec1dc0ea04b72c361971c4000d", + "reference": "4abbe66efe965bec1dc0ea04b72c361971c4000d", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15", - "symfony/security-core": "^5.0", - "symfony/security-http": "^5.3" + "php": ">=8.1", + "symfony/security-core": "^5.4|^6.0" + }, + "conflict": { + "symfony/http-foundation": "<5.4" }, "require-dev": { - "psr/log": "^1|^2|^3" + "symfony/http-foundation": "^5.4|^6.0" + }, + "suggest": { + "symfony/http-foundation": "For using the class SessionTokenStorage." }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Security\\Guard\\": "" + "Symfony\\Component\\Security\\Csrf\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -8659,10 +8197,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Security Component - Guard", + "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-guard/tree/v5.4.0" + "source": "https://github.com/symfony/security-csrf/tree/v6.2.5" }, "funding": [ { @@ -8678,44 +8216,44 @@ "type": "tidelift" } ], - "time": "2021-11-23T19:07:08+00:00" + "time": "2023-01-20T18:25:26+00:00" }, { "name": "symfony/security-http", - "version": "v5.4.0", + "version": "v6.2.6", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "3fa1dcbde86f12454a78c69e9d1a6c3dca776ea4" + "reference": "77c95eada3e3f0bf3a50f89817a18819b357376e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/3fa1dcbde86f12454a78c69e9d1a6c3dca776ea4", - "reference": "3fa1dcbde86f12454a78c69e9d1a6c3dca776ea4", + "url": "https://api.github.com/repos/symfony/security-http/zipball/77c95eada3e3f0bf3a50f89817a18819b357376e", + "reference": "77c95eada3e3f0bf3a50f89817a18819b357376e", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/http-kernel": "^5.3|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^6.2", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/property-access": "^4.4|^5.0|^6.0", - "symfony/security-core": "^5.4|^6.0" + "symfony/property-access": "^5.4|^6.0", + "symfony/security-core": "~6.0.19|~6.1.11|^6.2.5" }, "conflict": { - "symfony/event-dispatcher": "<4.3", - "symfony/security-bundle": "<5.3", - "symfony/security-csrf": "<4.4" + "symfony/event-dispatcher": "<5.4.9|>=6,<6.0.9", + "symfony/security-bundle": "<5.4", + "symfony/security-csrf": "<5.4" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/rate-limiter": "^5.2|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/security-csrf": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0" + "symfony/cache": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/rate-limiter": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/security-csrf": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0" }, "suggest": { "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", @@ -8747,7 +8285,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v5.4.0" + "source": "https://github.com/symfony/security-http/tree/v6.2.6" }, "funding": [ { @@ -8763,56 +8301,55 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:50:27+00:00" + "time": "2023-01-30T15:46:28+00:00" }, { "name": "symfony/serializer", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "66942cf6bf412ca72c39353596f4d37ee0f9059b" + "reference": "dec3263bd7399f85cc54ea51a019e60b085759f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/66942cf6bf412ca72c39353596f4d37ee0f9059b", - "reference": "66942cf6bf412ca72c39353596f4d37ee0f9059b", + "url": "https://api.github.com/repos/symfony/serializer/zipball/dec3263bd7399f85cc54ea51a019e60b085759f0", + "reference": "dec3263bd7399f85cc54ea51a019e60b085759f0", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { "doctrine/annotations": "<1.12", "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/dependency-injection": "<4.4", + "phpdocumentor/type-resolver": "<1.4.0|>=1.7.0", + "symfony/dependency-injection": "<5.4", "symfony/property-access": "<5.4", - "symfony/property-info": "<5.3", - "symfony/yaml": "<4.4" + "symfony/property-info": "<5.4", + "symfony/uid": "<5.4", + "symfony/yaml": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.12", + "doctrine/annotations": "^1.12|^2", "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/form": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/cache": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.3|^6.0", - "symfony/uid": "^5.1|^6.0", - "symfony/validator": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0", - "symfony/var-exporter": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/property-info": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0", + "symfony/var-exporter": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "psr/cache-implementation": "For using the metadata cache.", @@ -8849,7 +8386,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v5.4.0" + "source": "https://github.com/symfony/serializer/tree/v6.2.5" }, "funding": [ { @@ -8865,26 +8402,25 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", + "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "php": ">=8.1", + "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -8895,7 +8431,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -8905,7 +8441,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8932,7 +8471,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" }, "funding": [ { @@ -8948,24 +8487,24 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe" + "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/208ef96122bfed82a8f3a61458a07113a08bdcfe", - "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/00b6ac156aacffc53487c930e0ab14587a6607f6", + "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/service-contracts": "^1|^2|^3" }, "type": "library", @@ -8994,7 +8533,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.0" + "source": "https://github.com/symfony/stopwatch/tree/v6.2.5" }, "funding": [ { @@ -9010,47 +8549,47 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-01-01T08:36:55+00:00" }, { "name": "symfony/string", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d" + "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", - "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", + "url": "https://api.github.com/repos/symfony/string/zipball/b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", + "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.0" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, "files": [ "Resources/functions.php" ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, "exclude-from-classmap": [ "/Tests/" ] @@ -9080,87 +8619,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-11-24T10:02:00+00:00" - }, - { - "name": "symfony/swiftmailer-bundle", - "version": "v3.5.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/swiftmailer-bundle.git", - "reference": "fa7d78cbdf0a16a4da126c465f25f6547ad69cf6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/fa7d78cbdf0a16a4da126c465f25f6547ad69cf6", - "reference": "fa7d78cbdf0a16a4da126c465f25f6547ad69cf6", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "swiftmailer/swiftmailer": "^6.1.3", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/http-kernel": "^4.4|^5.0" - }, - "conflict": { - "twig/twig": "<1.41|>=2.0,<2.10" - }, - "require-dev": { - "symfony/console": "^4.4|^5.0", - "symfony/framework-bundle": "^4.4|^5.0", - "symfony/phpunit-bridge": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Bundle\\SwiftmailerBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony SwiftmailerBundle", - "homepage": "http://symfony.com", - "support": { - "issues": "https://github.com/symfony/swiftmailer-bundle/issues", - "source": "https://github.com/symfony/swiftmailer-bundle/tree/v3.5.3" + "source": "https://github.com/symfony/string/tree/v6.2.5" }, "funding": [ { @@ -9176,24 +8635,24 @@ "type": "tidelift" } ], - "time": "2021-12-02T16:23:52+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/templating", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/templating.git", - "reference": "5951210f5628417a9a0b39ad10d6b0cd39746435" + "reference": "c40882ddc4beeffa166516bc9a179603da79784b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/templating/zipball/5951210f5628417a9a0b39ad10d6b0cd39746435", - "reference": "5951210f5628417a9a0b39ad10d6b0cd39746435", + "url": "https://api.github.com/repos/symfony/templating/zipball/c40882ddc4beeffa166516bc9a179603da79784b", + "reference": "c40882ddc4beeffa166516bc9a179603da79784b", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8" }, "require-dev": { @@ -9228,7 +8687,7 @@ "description": "Provides all the tools needed to build any kind of template system", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/templating/tree/v5.4.0" + "source": "https://github.com/symfony/templating/tree/v6.2.5" }, "funding": [ { @@ -9244,54 +8703,55 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/translation", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "6fe32b10e912a518805bc9eafc2a87145773cf13" + "reference": "60556925a703cfbc1581cde3b3f35b0bb0ea904c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/6fe32b10e912a518805bc9eafc2a87145773cf13", - "reference": "6fe32b10e912a518805bc9eafc2a87145773cf13", + "url": "https://api.github.com/repos/symfony/translation/zipball/60556925a703cfbc1581cde3b3f35b0bb0ea904c", + "reference": "60556925a703cfbc1581cde3b3f35b0bb0ea904c", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^2.3" + "symfony/translation-contracts": "^2.3|^3.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/console": "<5.3", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" }, "provide": { - "symfony/translation-implementation": "2.3" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { + "nikic/php-parser": "^4.13", "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0", "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/yaml": "^5.4|^6.0" }, "suggest": { + "nikic/php-parser": "To use PhpAstExtractor", "psr/log-implementation": "To use logging capability in translator", "symfony/config": "", "symfony/yaml": "" @@ -9325,7 +8785,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.0" + "source": "https://github.com/symfony/translation/tree/v6.2.5" }, "funding": [ { @@ -9341,24 +8801,24 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:30:56+00:00" + "time": "2023-01-05T07:00:27+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.5.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e" + "reference": "68cce71402305a015f8c1589bfada1280dc64fe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/68cce71402305a015f8c1589bfada1280dc64fe7", + "reference": "68cce71402305a015f8c1589bfada1280dc64fe7", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=8.1" }, "suggest": { "symfony/translation-implementation": "" @@ -9366,7 +8826,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -9376,7 +8836,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Translation\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9403,7 +8866,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.2.0" }, "funding": [ { @@ -9419,65 +8882,67 @@ "type": "tidelift" } ], - "time": "2021-08-17T14:20:01+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/twig-bridge", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "faed6ad85a2f8e675820422a74c4e0d5858a6821" + "reference": "c3ba1d52a74e583f13490eaa67b396d7feb7bab5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/faed6ad85a2f8e675820422a74c4e0d5858a6821", - "reference": "faed6ad85a2f8e675820422a74c4e0d5858a6821", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/c3ba1d52a74e583f13490eaa67b396d7feb7bab5", + "reference": "c3ba1d52a74e583f13490eaa67b396d7feb7bab5", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16", + "php": ">=8.1", "symfony/translation-contracts": "^1.1|^2|^3", "twig/twig": "^2.13|^3.0.4" }, "conflict": { "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/console": "<5.3", - "symfony/form": "<5.3", - "symfony/http-foundation": "<5.3", - "symfony/http-kernel": "<4.4", - "symfony/translation": "<5.2", - "symfony/workflow": "<5.2" - }, - "require-dev": { - "doctrine/annotations": "^1.12", - "egulias/email-validator": "^2.1.10|^3", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/asset": "^4.4|^5.0|^6.0", - "symfony/console": "^5.3|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/form": "^5.3|^6.0", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", - "symfony/mime": "^5.2|^6.0", + "symfony/console": "<5.4", + "symfony/form": "<6.1", + "symfony/http-foundation": "<5.4", + "symfony/http-kernel": "<6.2", + "symfony/mime": "<6.2", + "symfony/translation": "<5.4", + "symfony/workflow": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "egulias/email-validator": "^2.1.10|^3|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/form": "^6.1", + "symfony/html-sanitizer": "^6.1", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^6.2", + "symfony/intl": "^5.4|^6.0", + "symfony/mime": "^6.2", "symfony/polyfill-intl-icu": "~1.0", - "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", "symfony/security-acl": "^2.8|^3.0", - "symfony/security-core": "^4.4|^5.0|^6.0", - "symfony/security-csrf": "^4.4|^5.0|^6.0", - "symfony/security-http": "^4.4|^5.0|^6.0", - "symfony/serializer": "^5.2|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^5.2|^6.0", - "symfony/web-link": "^4.4|^5.0|^6.0", - "symfony/workflow": "^5.2|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0", + "symfony/security-core": "^5.4|^6.0", + "symfony/security-csrf": "^5.4|^6.0", + "symfony/security-http": "^5.4|^6.0", + "symfony/serializer": "^6.2", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/web-link": "^5.4|^6.0", + "symfony/workflow": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0", "twig/cssinliner-extra": "^2.12|^3", "twig/inky-extra": "^2.12|^3", "twig/markdown-extra": "^2.12|^3" @@ -9487,6 +8952,7 @@ "symfony/expression-language": "For using the ExpressionExtension", "symfony/finder": "", "symfony/form": "For using the FormExtension", + "symfony/html-sanitizer": "For using the HtmlSanitizerExtension", "symfony/http-kernel": "For using the HttpKernelExtension", "symfony/routing": "For using the RoutingExtension", "symfony/security-core": "For using the SecurityExtension", @@ -9524,7 +8990,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v5.4.0" + "source": "https://github.com/symfony/twig-bridge/tree/v6.2.5" }, "funding": [ { @@ -9540,52 +9006,48 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:30:56+00:00" + "time": "2023-01-10T18:53:53+00:00" }, { "name": "symfony/twig-bundle", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "de8634b8c604a42277c6cc7e4f0d1e9e30c5ec7f" + "reference": "6f3b623ca55c52862b387e1aaf1f0378e54a7a73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/de8634b8c604a42277c6cc7e4f0d1e9e30c5ec7f", - "reference": "de8634b8c604a42277c6cc7e4f0d1e9e30c5ec7f", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/6f3b623ca55c52862b387e1aaf1f0378e54a7a73", + "reference": "6f3b623ca55c52862b387e1aaf1f0378e54a7a73", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/twig-bridge": "^5.3|^6.0", + "composer-runtime-api": ">=2.1", + "php": ">=8.1", + "symfony/config": "^6.1", + "symfony/dependency-injection": "^6.1", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^6.2", + "symfony/twig-bridge": "^6.2", "twig/twig": "^2.13|^3.0.4" }, "conflict": { - "symfony/dependency-injection": "<5.3", - "symfony/framework-bundle": "<5.0", - "symfony/service-contracts": ">=3.0", - "symfony/translation": "<5.0" - }, - "require-dev": { - "doctrine/annotations": "^1.10.4", - "doctrine/cache": "^1.0|^2.0", - "symfony/asset": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/form": "^4.4|^5.0|^6.0", - "symfony/framework-bundle": "^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^5.0|^6.0", - "symfony/web-link": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/framework-bundle": "<5.4", + "symfony/translation": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.10.4|^2", + "symfony/asset": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/framework-bundle": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/web-link": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "type": "symfony-bundle", "autoload": { @@ -9613,7 +9075,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v5.4.0" + "source": "https://github.com/symfony/twig-bundle/tree/v6.2.5" }, "funding": [ { @@ -9629,63 +9091,59 @@ "type": "tidelift" } ], - "time": "2021-11-23T21:36:27+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/validator", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "68db3401621f75b285cf54ac83e3b89066e08f8d" + "reference": "0ebfbe384790e61147e3d7f4aa0afbd6190198c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/68db3401621f75b285cf54ac83e3b89066e08f8d", - "reference": "68db3401621f75b285cf54ac83e3b89066e08f8d", + "url": "https://api.github.com/repos/symfony/validator/zipball/0ebfbe384790e61147e3d7f4aa0afbd6190198c4", + "reference": "0ebfbe384790e61147e3d7f4aa0afbd6190198c4", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16", "symfony/translation-contracts": "^1.1|^2|^3" }, "conflict": { "doctrine/annotations": "<1.13", - "doctrine/cache": "<1.11", - "doctrine/lexer": "<1.0.2", + "doctrine/lexer": "<1.1", "phpunit/phpunit": "<5.4.3", - "symfony/dependency-injection": "<4.4", - "symfony/expression-language": "<5.1", - "symfony/http-kernel": "<4.4", - "symfony/intl": "<4.4", - "symfony/property-info": "<5.3", - "symfony/translation": "<4.4", - "symfony/yaml": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/expression-language": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/intl": "<5.4", + "symfony/property-info": "<5.4", + "symfony/translation": "<5.4", + "symfony/yaml": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.13", - "doctrine/cache": "^1.11|^2.0", - "egulias/email-validator": "^2.1.10|^3", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^5.1|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.0|^6.0", - "symfony/property-info": "^5.3|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" + "doctrine/annotations": "^1.13|^2", + "egulias/email-validator": "^2.1.10|^3|^4", + "symfony/cache": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "egulias/email-validator": "Strict (RFC compliant) email validation", @@ -9725,7 +9183,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v5.4.0" + "source": "https://github.com/symfony/validator/tree/v6.2.5" }, "funding": [ { @@ -9741,36 +9199,35 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:30:56+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "89ab66eaef230c9cd1992de2e9a1b26652b127b9" + "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/89ab66eaef230c9cd1992de2e9a1b26652b127b9", - "reference": "89ab66eaef230c9cd1992de2e9a1b26652b127b9", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/44b7b81749fd20c1bdf4946c041050e22bc8da27", + "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" + "symfony/console": "<5.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -9814,7 +9271,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.0" + "source": "https://github.com/symfony/var-dumper/tree/v6.2.5" }, "funding": [ { @@ -9830,28 +9287,27 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:30:56+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "d59446d6166b1643a8a3c30c2fa8e16e51cdbde7" + "reference": "108f9c6451eea8e04a7fb83bbacb5b812ef30e35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/d59446d6166b1643a8a3c30c2fa8e16e51cdbde7", - "reference": "d59446d6166b1643a8a3c30c2fa8e16e51cdbde7", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/108f9c6451eea8e04a7fb83bbacb5b812ef30e35", + "reference": "108f9c6451eea8e04a7fb83bbacb5b812ef30e35", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "require-dev": { - "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" + "symfony/var-dumper": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -9884,10 +9340,12 @@ "export", "hydrate", "instantiate", + "lazy loading", + "proxy", "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v5.4.0" + "source": "https://github.com/symfony/var-exporter/tree/v6.2.5" }, "funding": [ { @@ -9903,35 +9361,34 @@ "type": "tidelift" } ], - "time": "2021-11-22T10:44:13+00:00" + "time": "2023-01-13T08:35:57+00:00" }, { "name": "symfony/web-link", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/web-link.git", - "reference": "de535b46002214d976c5b092f33f46de5e0c1d05" + "reference": "b0d15d82f15f4301531cbef92e34cecaebb18dd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-link/zipball/de535b46002214d976c5b092f33f46de5e0c1d05", - "reference": "de535b46002214d976c5b092f33f46de5e0c1d05", + "url": "https://api.github.com/repos/symfony/web-link/zipball/b0d15d82f15f4301531cbef92e34cecaebb18dd5", + "reference": "b0d15d82f15f4301531cbef92e34cecaebb18dd5", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/link": "^1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "psr/link": "^1.1|^2.0" }, "conflict": { - "symfony/http-kernel": "<5.3" + "symfony/http-kernel": "<5.4" }, "provide": { - "psr/link-implementation": "1.0" + "psr/link-implementation": "1.0|2.0" }, "require-dev": { - "symfony/http-kernel": "^5.3|^6.0" + "symfony/http-kernel": "^5.4|^6.0" }, "suggest": { "symfony/http-kernel": "" @@ -9974,7 +9431,7 @@ "push" ], "support": { - "source": "https://github.com/symfony/web-link/tree/v5.4.0" + "source": "https://github.com/symfony/web-link/tree/v6.2.5" }, "funding": [ { @@ -9990,20 +9447,20 @@ "type": "tidelift" } ], - "time": "2021-07-21T12:43:48+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/webpack-encore-bundle", - "version": "v1.13.2", + "version": "v1.16.1", "source": { "type": "git", "url": "https://github.com/symfony/webpack-encore-bundle.git", - "reference": "509cad50878e838c879743225e0e921b3b64a3f2" + "reference": "1862d71e483769b40278548a30e756ce13ef9d4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/509cad50878e838c879743225e0e921b3b64a3f2", - "reference": "509cad50878e838c879743225e0e921b3b64a3f2", + "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/1862d71e483769b40278548a30e756ce13ef9d4c", + "reference": "1862d71e483769b40278548a30e756ce13ef9d4c", "shasum": "" }, "require": { @@ -10011,7 +9468,9 @@ "symfony/asset": "^4.4 || ^5.0 || ^6.0", "symfony/config": "^4.4 || ^5.0 || ^6.0", "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.25.0", "symfony/service-contracts": "^1.0 || ^2.0 || ^3.0" }, "require-dev": { @@ -10045,7 +9504,7 @@ "description": "Integration with your Symfony app & Webpack Encore!", "support": { "issues": "https://github.com/symfony/webpack-encore-bundle/issues", - "source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.13.2" + "source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.16.1" }, "funding": [ { @@ -10061,32 +9520,31 @@ "type": "tidelift" } ], - "time": "2021-12-02T19:45:55+00:00" + "time": "2023-01-18T19:37:55+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "034ccc0994f1ae3f7499fa5b1f2e75d5e7a94efc" + "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/034ccc0994f1ae3f7499fa5b1f2e75d5e7a94efc", - "reference": "034ccc0994f1ae3f7499fa5b1f2e75d5e7a94efc", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", + "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.3" + "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^5.3|^6.0" + "symfony/console": "^5.4|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -10120,7 +9578,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.0" + "source": "https://github.com/symfony/yaml/tree/v6.2.5" }, "funding": [ { @@ -10136,20 +9594,20 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2023-01-10T18:53:53+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.4", + "version": "2.2.6", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c" + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c", - "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", "shasum": "" }, "require": { @@ -10187,22 +9645,22 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" }, - "time": "2021-12-08T09:12:39+00:00" + "time": "2023-01-03T09:29:04+00:00" }, { "name": "twig/cssinliner-extra", - "version": "v3.3.4", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/twigphp/cssinliner-extra.git", - "reference": "a6065b23645282e1c81d847cf0c7f0211d22b682" + "reference": "381877765d17b0178322d68b818e0c67f9c93187" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/a6065b23645282e1c81d847cf0c7f0211d22b682", - "reference": "a6065b23645282e1c81d847cf0c7f0211d22b682", + "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/381877765d17b0178322d68b818e0c67f9c93187", + "reference": "381877765d17b0178322d68b818e0c67f9c93187", "shasum": "" }, "require": { @@ -10216,7 +9674,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.5-dev" } }, "autoload": { @@ -10247,7 +9705,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.3.4" + "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.5.1" }, "funding": [ { @@ -10259,29 +9717,30 @@ "type": "tidelift" } ], - "time": "2021-11-13T16:20:21+00:00" + "time": "2023-02-08T07:44:55+00:00" }, { "name": "twig/extra-bundle", - "version": "v3.3.4", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "1fe52d84aa22b7891c7717ef904b1551c8d70100" + "reference": "a961e553a624eebdbd423ad5ab931497ca6d87cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/1fe52d84aa22b7891c7717ef904b1551c8d70100", - "reference": "1fe52d84aa22b7891c7717ef904b1551c8d70100", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/a961e553a624eebdbd423ad5ab931497ca6d87cd", + "reference": "a961e553a624eebdbd423ad5ab931497ca6d87cd", "shasum": "" }, "require": { - "php": "^7.1.3|^8.0", + "php": ">=7.2.5", "symfony/framework-bundle": "^4.4|^5.0|^6.0", "symfony/twig-bundle": "^4.4|^5.0|^6.0", "twig/twig": "^2.7|^3.0" }, "require-dev": { + "league/commonmark": "^1.0|^2.0", "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0", "twig/cache-extra": "^3.0", "twig/cssinliner-extra": "^2.12|^3.0", @@ -10294,7 +9753,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.5-dev" } }, "autoload": { @@ -10325,7 +9784,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.3.4" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.5.1" }, "funding": [ { @@ -10337,20 +9796,20 @@ "type": "tidelift" } ], - "time": "2021-11-13T16:20:21+00:00" + "time": "2023-02-08T07:44:55+00:00" }, { "name": "twig/inky-extra", - "version": "v3.3.4", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/twigphp/inky-extra.git", - "reference": "6f81ada491569cfeb04fb43070f3a8908fc0f9ce" + "reference": "4efde499b99942a27e206898e55208a8692c16ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/inky-extra/zipball/6f81ada491569cfeb04fb43070f3a8908fc0f9ce", - "reference": "6f81ada491569cfeb04fb43070f3a8908fc0f9ce", + "url": "https://api.github.com/repos/twigphp/inky-extra/zipball/4efde499b99942a27e206898e55208a8692c16ca", + "reference": "4efde499b99942a27e206898e55208a8692c16ca", "shasum": "" }, "require": { @@ -10364,7 +9823,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.5-dev" } }, "autoload": { @@ -10396,7 +9855,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/inky-extra/tree/v3.3.4" + "source": "https://github.com/twigphp/inky-extra/tree/v3.5.1" }, "funding": [ { @@ -10408,26 +9867,27 @@ "type": "tidelift" } ], - "time": "2021-11-13T16:20:21+00:00" + "time": "2023-02-08T07:44:55+00:00" }, { "name": "twig/twig", - "version": "v2.14.8", + "version": "v2.15.4", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "06b450a2326aa879faa2061ff72fe1588b3ab043" + "reference": "3e059001d6d597dd50ea7c74dd2464b4adea48d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/06b450a2326aa879faa2061ff72fe1588b3ab043", - "reference": "06b450a2326aa879faa2061ff72fe1588b3ab043", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3e059001d6d597dd50ea7c74dd2464b4adea48d3", + "reference": "3e059001d6d597dd50ea7c74dd2464b4adea48d3", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=7.1.3", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3" + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.8" }, "require-dev": { "psr/container": "^1.0", @@ -10436,7 +9896,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.14-dev" + "dev-master": "2.15-dev" } }, "autoload": { @@ -10475,7 +9935,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v2.14.8" + "source": "https://github.com/twigphp/Twig/tree/v2.15.4" }, "funding": [ { @@ -10487,36 +9947,40 @@ "type": "tidelift" } ], - "time": "2021-11-25T13:38:06+00:00" + "time": "2022-12-27T12:26:20+00:00" }, { "name": "vich/uploader-bundle", - "version": "1.16.1", + "version": "1.21.1", "source": { "type": "git", "url": "https://github.com/dustin10/VichUploaderBundle.git", - "reference": "781dd64bf278e924971a35d38ef6c690e35de6e1" + "reference": "6b428642694cbfeb1be6e956ba59382d89ae1ee6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dustin10/VichUploaderBundle/zipball/781dd64bf278e924971a35d38ef6c690e35de6e1", - "reference": "781dd64bf278e924971a35d38ef6c690e35de6e1", + "url": "https://api.github.com/repos/dustin10/VichUploaderBundle/zipball/6b428642694cbfeb1be6e956ba59382d89ae1ee6", + "reference": "6b428642694cbfeb1be6e956ba59382d89ae1ee6", "shasum": "" }, "require": { + "doctrine/persistence": "^1.3 || ^2 || ^3", "ext-simplexml": "*", - "jms/metadata": "^2.4", + "jms/metadata": "^1.7 || ^2.4", "php": "^7.3 || ^8.0", - "symfony/config": "^4.4 || ^5.0", - "symfony/console": "^4.4 || ^5.0", - "symfony/dependency-injection": "^4.4 || ^5.0", - "symfony/event-dispatcher-contracts": "^1.1 || ^2.0", - "symfony/form": "^4.4 || ^5.0", - "symfony/http-foundation": "^4.4 || ^5.0", - "symfony/http-kernel": "^4.4 || ^5.0", - "symfony/mime": "^4.4 || ^5.0", - "symfony/property-access": "^4.4 || ^5.0", - "symfony/string": "^5.0" + "symfony/config": "^4.4 || ^5.0 || ^6.0", + "symfony/console": "^4.4 || ^5.0 || ^6.0", + "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", + "symfony/event-dispatcher-contracts": "^1.1 || ^2.0 || ^3.0", + "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0", + "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", + "symfony/mime": "^4.4 || ^5.0 || ^6.0", + "symfony/property-access": "^4.4 || ^5.0 || ^6.0", + "symfony/string": "^5.0 || ^6.0" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "league/flysystem": "<2.0" }, "require-dev": { "alcaeus/mongo-php-adapter": "^1.2", @@ -10524,27 +9988,27 @@ "doctrine/mongodb-odm": "^1.2 || ^2.0", "doctrine/orm": "^2.7", "ext-sqlite3": "*", - "knplabs/knp-gaufrette-bundle": "^0.7", - "league/flysystem-bundle": "^1.4", - "league/flysystem-memory": "^1.0", + "knplabs/knp-gaufrette-bundle": "dev-master", + "league/flysystem-bundle": "^2.0", + "league/flysystem-memory": "^2.0", "matthiasnoback/symfony-dependency-injection-test": "^4.1", - "mikey179/vfsstream": "^1.6", - "oneup/flysystem-bundle": "^3.3", + "mikey179/vfsstream": "^1.6.8", "phpunit/phpunit": "^9.5", - "symfony/asset": "^4.4 || ^5.0", - "symfony/browser-kit": "^4.4 || ^5.0", - "symfony/css-selector": "^4.4 || ^5.0", - "symfony/doctrine-bridge": "^4.4 || ^5.0", - "symfony/dom-crawler": "^4.4 || ^5.0", - "symfony/framework-bundle": "^4.4 || ^5.0", - "symfony/phpunit-bridge": "^5.2", - "symfony/security-csrf": "^4.4 || ^5.0", - "symfony/translation": "^4.4 || ^5.0", - "symfony/twig-bridge": "^4.4 || ^5.0", - "symfony/twig-bundle": "^4.4 || ^5.0", - "symfony/validator": "^4.4 || ^5.0", - "symfony/var-dumper": "^4.4 || ^5.0", - "symfony/yaml": "^4.4 || ^5.0" + "symfony/asset": "^4.4 || ^5.0 || ^6.0", + "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0", + "symfony/css-selector": "^4.4 || ^5.0 || ^6.0", + "symfony/doctrine-bridge": "^4.4 || ^5.0 || ^6.0", + "symfony/dom-crawler": "^4.4 || ^5.0 || ^6.0", + "symfony/form": "^4.4 || ^5.0 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", + "symfony/phpunit-bridge": "^6.0", + "symfony/security-csrf": "^4.4 || ^5.0 || ^6.0", + "symfony/translation": "^4.4 || ^5.0 || ^6.0", + "symfony/twig-bridge": "^4.4 || ^5.0 || ^6.0", + "symfony/twig-bundle": "^4.4 || ^5.0 || ^6.0", + "symfony/validator": "^4.4 || ^5.0 || ^6.0", + "symfony/var-dumper": "^4.4 || ^5.0 || ^6.0", + "symfony/yaml": "^4.4 || ^5.0 || ^6.0" }, "suggest": { "doctrine/doctrine-bundle": "For integration with Doctrine", @@ -10552,10 +10016,12 @@ "doctrine/orm": "For integration with Doctrine ORM", "doctrine/phpcr-odm": "For integration with Doctrine PHPCR", "knplabs/knp-gaufrette-bundle": "For integration with Gaufrette", + "league/flysystem-bundle": "For integration with Flysystem", "liip/imagine-bundle": "To generate image thumbnails", "ocramius/proxy-manager": "To use lazy services", "oneup/flysystem-bundle": "For integration with Flysystem", "symfony/asset": "To generate better links", + "symfony/form": "To handle uploads in forms", "symfony/yaml": "To use YAML mapping" }, "type": "symfony-bundle", @@ -10587,27 +10053,27 @@ ], "support": { "issues": "https://github.com/dustin10/VichUploaderBundle/issues", - "source": "https://github.com/dustin10/VichUploaderBundle/tree/1.16.1" + "source": "https://github.com/dustin10/VichUploaderBundle/tree/1.21.1" }, - "time": "2021-01-19T11:35:18+00:00" + "time": "2022-08-12T07:38:44+00:00" }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -10645,45 +10111,115 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" } ], "packages-dev": [ + { + "name": "masterminds/html5", + "version": "2.7.6", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "897eb517a343a2281f11bc5556d6548db7d93947" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/897eb517a343a2281f11bc5556d6548db7d93947", + "reference": "897eb517a343a2281f11bc5556d6548db7d93947", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "ext-libxml": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.7.6" + }, + "time": "2022-08-18T16:18:26+00:00" + }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -10699,7 +10235,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" }, "funding": [ { @@ -10707,20 +10243,20 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-03-03T13:19:32+00:00" }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v4.15.3", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", "shasum": "" }, "require": { @@ -10761,9 +10297,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" }, - "time": "2021-11-30T19:35:32+00:00" + "time": "2023-01-16T22:05:37+00:00" }, { "name": "phar-io/manifest", @@ -10827,16 +10363,16 @@ }, { "name": "phar-io/version", - "version": "3.1.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -10872,96 +10408,29 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" - }, - "time": "2021-02-23T14:00:09+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2021-12-08T12:19:24+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.10", + "version": "9.2.24", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687" + "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2cf940ebc6355a9d430462811b5aaa308b174bed", + "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.14", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -11010,7 +10479,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.10" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.24" }, "funding": [ { @@ -11018,7 +10487,7 @@ "type": "github" } ], - "time": "2021-12-05T09:12:13+00:00" + "time": "2023-01-26T08:26:55+00:00" }, { "name": "phpunit/php-file-iterator", @@ -11263,20 +10732,20 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.10", + "version": "9.6.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a" + "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c814a05837f2edb0d1471d6e3f4ab3501ca3899a", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7b1615e3e887d6c719121c6d4a44b0ab9645555", + "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -11287,28 +10756,23 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.7", + "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { "ext-soap": "*", "ext-xdebug": "*" @@ -11319,15 +10783,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { - "classmap": [ - "src/" - ], "files": [ "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -11350,19 +10814,23 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.10" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.3" }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2021-09-25T07:38:51+00:00" + "time": "2023-02-04T13:37:15+00:00" }, { "name": "sebastian/cli-parser", @@ -11533,16 +11001,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -11595,7 +11063,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -11603,7 +11071,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -11730,16 +11198,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -11781,7 +11249,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -11789,20 +11257,20 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -11858,7 +11326,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -11866,20 +11334,20 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.3", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", "shasum": "" }, "require": { @@ -11922,7 +11390,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" }, "funding": [ { @@ -11930,7 +11398,7 @@ "type": "github" } ], - "time": "2021-06-11T13:31:12+00:00" + "time": "2022-02-14T08:28:10+00:00" }, { "name": "sebastian/lines-of-code", @@ -12103,16 +11571,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -12151,10 +11619,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -12162,7 +11630,7 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", @@ -12221,28 +11689,28 @@ }, { "name": "sebastian/type", - "version": "2.3.4", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -12265,7 +11733,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -12273,7 +11741,7 @@ "type": "github" } ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -12330,28 +11798,27 @@ }, { "name": "symfony/browser-kit", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "d250db364a35ba5d60626b2a6f10f2eaf2073bde" + "reference": "ea591a69d714216d29cb67b519b509bd32b735a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/d250db364a35ba5d60626b2a6f10f2eaf2073bde", - "reference": "d250db364a35ba5d60626b2a6f10f2eaf2073bde", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/ea591a69d714216d29cb67b519b509bd32b735a2", + "reference": "ea591a69d714216d29cb67b519b509bd32b735a2", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/dom-crawler": "^5.4|^6.0" }, "require-dev": { - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0" + "symfony/css-selector": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" }, "suggest": { "symfony/process": "" @@ -12382,7 +11849,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v5.4.0" + "source": "https://github.com/symfony/browser-kit/tree/v6.2.5" }, "funding": [ { @@ -12398,38 +11865,37 @@ "type": "tidelift" } ], - "time": "2021-10-26T22:29:18+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/debug-bundle", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", - "reference": "71c299d4516dbc7c8e7bc73f57d57c7f7df9817e" + "reference": "c365a0f0f6bf80f17ae9a16bc6989548746071cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/71c299d4516dbc7c8e7bc73f57d57c7f7df9817e", - "reference": "71c299d4516dbc7c8e7bc73f57d57c7f7df9817e", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/c365a0f0f6bf80f17ae9a16bc6989548746071cc", + "reference": "c365a0f0f6bf80f17ae9a16bc6989548746071cc", "shasum": "" }, "require": { "ext-xml": "*", - "php": ">=7.2.5", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/polyfill-php80": "^1.16", - "symfony/twig-bridge": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "php": ">=8.1", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/twig-bridge": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/dependency-injection": "<5.2" + "symfony/config": "<5.4", + "symfony/dependency-injection": "<5.4" }, "require-dev": { - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/web-profiler-bundle": "^4.4|^5.0|^6.0" + "symfony/config": "^5.4|^6.0", + "symfony/web-profiler-bundle": "^5.4|^6.0" }, "suggest": { "symfony/config": "For service container configuration", @@ -12458,10 +11924,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides a tight integration of the Symfony Debug component into the Symfony full-stack framework", + "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug-bundle/tree/v5.4.0" + "source": "https://github.com/symfony/debug-bundle/tree/v6.2.5" }, "funding": [ { @@ -12477,35 +11943,30 @@ "type": "tidelift" } ], - "time": "2021-07-21T12:43:48+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/dom-crawler", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "5b06626e940a3ad54e573511d64d4e00dc8d0fd8" + "reference": "19aa4962a0687e96941f0bdb27b794c5b73e2394" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/5b06626e940a3ad54e573511d64d4e00dc8d0fd8", - "reference": "5b06626e940a3ad54e573511d64d4e00dc8d0fd8", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/19aa4962a0687e96941f0bdb27b794c5b73e2394", + "reference": "19aa4962a0687e96941f0bdb27b794c5b73e2394", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "masterminds/html5": "^2.6", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "masterminds/html5": "<2.6" + "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "masterminds/html5": "^2.6", - "symfony/css-selector": "^4.4|^5.0|^6.0" + "symfony/css-selector": "^5.4|^6.0" }, "suggest": { "symfony/css-selector": "" @@ -12536,7 +11997,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v5.4.0" + "source": "https://github.com/symfony/dom-crawler/tree/v6.2.5" }, "funding": [ { @@ -12552,45 +12013,50 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { "name": "symfony/maker-bundle", - "version": "v1.38.0", + "version": "v1.48.0", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "143024ab0e426285d3d9b7f6a3ce51e12a9d8ec5" + "reference": "2e428e8432e9879187672fe08f1cc335e2a31dd6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/143024ab0e426285d3d9b7f6a3ce51e12a9d8ec5", - "reference": "143024ab0e426285d3d9b7f6a3ce51e12a9d8ec5", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/2e428e8432e9879187672fe08f1cc335e2a31dd6", + "reference": "2e428e8432e9879187672fe08f1cc335e2a31dd6", "shasum": "" }, "require": { - "doctrine/inflector": "^1.2|^2.0", + "doctrine/inflector": "^2.0", "nikic/php-parser": "^4.11", - "php": ">=7.1.3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "php": ">=8.0", + "symfony/config": "^5.4.7|^6.0", + "symfony/console": "^5.4.7|^6.0", + "symfony/dependency-injection": "^5.4.7|^6.0", "symfony/deprecation-contracts": "^2.2|^3", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/framework-bundle": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0" + "symfony/filesystem": "^5.4.7|^6.0", + "symfony/finder": "^5.4.3|^6.0", + "symfony/framework-bundle": "^5.4.7|^6.0", + "symfony/http-kernel": "^5.4.7|^6.0" + }, + "conflict": { + "doctrine/doctrine-bundle": "<2.4", + "doctrine/orm": "<2.10", + "symfony/doctrine-bridge": "<5.4" }, "require-dev": { "composer/semver": "^3.0", - "doctrine/doctrine-bundle": "^1.12.3|^2.0", - "doctrine/orm": "^2.3", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/phpunit-bridge": "^4.4|^5.0|^6.0", + "doctrine/doctrine-bundle": "^2.4", + "doctrine/orm": "^2.10.0", + "symfony/http-client": "^5.4.7|^6.0", + "symfony/phpunit-bridge": "^5.4.7|^6.0", "symfony/polyfill-php80": "^1.16.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/security-core": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0", + "symfony/process": "^5.4.7|^6.0", + "symfony/security-core": "^5.4.7|^6.0", + "symfony/yaml": "^5.4.3|^6.0", "twig/twig": "^2.0|^3.0" }, "type": "symfony-bundle", @@ -12624,7 +12090,7 @@ ], "support": { "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.38.0" + "source": "https://github.com/symfony/maker-bundle/tree/v1.48.0" }, "funding": [ { @@ -12640,20 +12106,20 @@ "type": "tidelift" } ], - "time": "2022-02-24T21:06:51+00:00" + "time": "2022-11-14T10:48:46+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v6.0.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "5d6cc6720085084f504d2482fc4a2f268784006b" + "reference": "d759e5372de414bef53a688c7aa7e240e4fd8aa2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/5d6cc6720085084f504d2482fc4a2f268784006b", - "reference": "5d6cc6720085084f504d2482fc4a2f268784006b", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/d759e5372de414bef53a688c7aa7e240e4fd8aa2", + "reference": "d759e5372de414bef53a688c7aa7e240e4fd8aa2", "shasum": "" }, "require": { @@ -12707,7 +12173,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.0.0" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.2.5" }, "funding": [ { @@ -12723,43 +12189,41 @@ "type": "tidelift" } ], - "time": "2021-11-29T15:32:57+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v5.4.0", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "85261499e255007ac76afe1a943b0c7c0f925c45" + "reference": "8d4b1a806ae185a735f789edfdc346c8b43d914b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/85261499e255007ac76afe1a943b0c7c0f925c45", - "reference": "85261499e255007ac76afe1a943b0c7c0f925c45", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/8d4b1a806ae185a735f789edfdc346c8b43d914b", + "reference": "8d4b1a806ae185a735f789edfdc346c8b43d914b", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/framework-bundle": "^5.3|^6.0", - "symfony/http-kernel": "^5.3|^6.0", - "symfony/polyfill-php80": "^1.16", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/twig-bundle": "^4.4|^5.0|^6.0", + "php": ">=8.1", + "symfony/config": "^5.4|^6.0", + "symfony/framework-bundle": "^5.4|^6.0", + "symfony/http-kernel": "^6.1", + "symfony/routing": "^5.4|^6.0", + "symfony/twig-bundle": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, "conflict": { - "symfony/dependency-injection": "<5.2", - "symfony/form": "<4.4", + "symfony/form": "<5.4", "symfony/mailer": "<5.4", - "symfony/messenger": "<4.4" + "symfony/messenger": "<5.4" }, "require-dev": { - "symfony/browser-kit": "^4.4|^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0" + "symfony/browser-kit": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0" }, "type": "symfony-bundle", "autoload": { @@ -12787,79 +12251,7 @@ "description": "Provides a development tool that gives detailed information about the execution of any request", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v5.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-11-21T13:58:13+00:00" - }, - { - "name": "symfony/web-server-bundle", - "version": "v4.4.27", - "source": { - "type": "git", - "url": "https://github.com/symfony/web-server-bundle.git", - "reference": "c283d46b40b1c9dee20771433a19fa7f4a9bb97a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/web-server-bundle/zipball/c283d46b40b1c9dee20771433a19fa7f4a9bb97a", - "reference": "c283d46b40b1c9dee20771433a19fa7f4a9bb97a", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/http-kernel": "^3.4|^4.0|^5.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/process": "^3.4.2|^4.0.2|^5.0" - }, - "suggest": { - "symfony/expression-language": "For using the filter option of the log server.", - "symfony/monolog-bridge": "For using the log server." - }, - "type": "symfony-bundle", - "autoload": { - "psr-4": { - "Symfony\\Bundle\\WebServerBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides commands for running applications using the PHP built-in web server", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/web-server-bundle/tree/v4.4.27" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.2.5" }, "funding": [ { @@ -12875,7 +12267,7 @@ "type": "tidelift" } ], - "time": "2021-07-21T12:19:41+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "theseer/tokenizer", @@ -12934,10 +12326,10 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.4.25", + "php": "^8.1", "ext-ctype": "*", "ext-iconv": "*" }, "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.1.0" } diff --git a/config/assistant.yaml b/config/assistant.yaml new file mode 100644 index 00000000..b515c146 --- /dev/null +++ b/config/assistant.yaml @@ -0,0 +1,53 @@ +steps: + 0: + type: 'App\Form\Type\SoftwareType' + title: 'software.processing.title' + info: 'software.processing.info' + newTitle: 'new.software' + skip: true + 1: + type: 'App\Form\Type\VVTType' + title: 'procedure.processing.title' + info: 'procedure.processing.info' + newTitle: 'new.procedure' + software: 0 + 2: + type: 'App\Form\Type\KontaktType' + title: 'contact.source.title' + info: 'contact.source.info' + newTitle: 'new.contact' + 3: + type: 'App\Form\Type\DatenweitergabeType' + title: 'processing.title' + info: 'processing.info' + newTitle: 'new.processing' + transferType: 2 + software: 0 + procedure: 1 + contact: 2 + 4: + type: 'App\Form\Type\SoftwareType' + title: 'software.transfer.title' + info: 'software.transfer.info' + newTitle: 'new.software' + skip: true + 5: + type: 'App\Form\Type\VVTType' + title: 'procedure.transfer.title' + info: 'procedure.transfer.info' + newTitle: 'new.procedure' + software: 4 + 6: + type: 'App\Form\Type\KontaktType' + title: 'contact.dest.title' + info: 'contact.dest.info' + newTitle: 'new.contact' + 7: + type: 'App\Form\Type\DatenweitergabeType' + title: 'transfer.title' + info: 'transfer.info' + newTitle: 'new.transfer' + transferType: 1 + software: 4 + procedure: 5 + contact: 6 diff --git a/config/bundles.php b/config/bundles.php index 1d187aa5..ff518d85 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -12,12 +12,10 @@ Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true], Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], - Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle::class => ['all' => true], Vich\UploaderBundle\VichUploaderBundle::class => ['all' => true], Oneup\FlysystemBundle\OneupFlysystemBundle::class => ['all' => true], Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], Nucleos\DompdfBundle\NucleosDompdfBundle::class => ['all' => true], KnpU\OAuth2ClientBundle\KnpUOAuth2ClientBundle::class => ['all' => true], - Symfony\Bundle\WebServerBundle\WebServerBundle::class => ['dev' => true], Ambta\DoctrineEncryptBundle\AmbtaDoctrineEncryptBundle::class => ['all' => true], ]; diff --git a/config/packages/dev/swiftmailer.yaml b/config/packages/dev/swiftmailer.yaml deleted file mode 100644 index 9b8ff338..00000000 --- a/config/packages/dev/swiftmailer.yaml +++ /dev/null @@ -1,3 +0,0 @@ -# See https://symfony.com/doc/current/email/dev_environment.html -swiftmailer: - delivery_addresses: ['%env(DEV_EMAIL)%'] diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index 5e80e77b..893350ee 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -12,7 +12,7 @@ doctrine: mappings: App: is_bundle: false - type: annotation + type: attribute dir: '%kernel.project_dir%/src/Entity' prefix: 'App\Entity' alias: App diff --git a/config/packages/mailer.yaml b/config/packages/mailer.yaml index 56a650d8..a85ce28f 100644 --- a/config/packages/mailer.yaml +++ b/config/packages/mailer.yaml @@ -1,3 +1,8 @@ framework: mailer: dsn: '%env(MAILER_DSN)%' +when@dev: + framework: + mailer: + envelope: + recipients: ['%env(DEV_EMAIL)%'] diff --git a/config/packages/oneup_flysystem.yaml b/config/packages/oneup_flysystem.yaml index f7bb01de..ac5dcb0f 100644 --- a/config/packages/oneup_flysystem.yaml +++ b/config/packages/oneup_flysystem.yaml @@ -3,45 +3,45 @@ oneup_flysystem: adapters: asset_adapter: local: - directory: '%kernel.project_dir%/public%app.path.images%' + location: '%kernel.project_dir%/public%app.path.images%' intern_adapter: local: - directory: '%kernel.project_dir%/data' + location: '%kernel.project_dir%/data' policy_adapter: local: - directory: '%kernel.project_dir%/data/policies' + location: '%kernel.project_dir%/data/policies' forms_adapter: local: - directory: '%kernel.project_dir%/data/forms' + location: '%kernel.project_dir%/data/forms' daten_adapter: local: - directory: '%kernel.project_dir%/data/daten' + location: '%kernel.project_dir%/data/daten' software_adapter: local: - directory: '%kernel.project_dir%/data/software' + location: '%kernel.project_dir%/data/software' filesystems: - asset_filesystem: + asset: adapter: asset_adapter alias: League\Flysystem\Asset - mount: asset_filesystem - intern_fileSystem: + mount: asset + intern: adapter: intern_adapter alias: League\Flysystem\Intern - mount: intern_adapter - policies_fileSystem: + mount: intern + policies: adapter: policy_adapter alias: League\Flysystem\Intern - mount: policy_adapter - forms_fileSystem: + mount: policies + forms: adapter: forms_adapter alias: League\Flysystem\Intern - mount: forms_adapter - daten_fileSystem: + mount: forms + daten: adapter: daten_adapter alias: League\Flysystem\Intern - mount: daten_adapter - software_fileSystem: + mount: daten + software: adapter: software_adapter alias: League\Flysystem\Intern - mount: software_adapter \ No newline at end of file + mount: software \ No newline at end of file diff --git a/config/packages/security.yaml b/config/packages/security.yaml index e110aaa6..8394aee4 100644 --- a/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -1,8 +1,8 @@ security: - encoders: + password_hashers: App\Entity\User: algorithm: auto - + enable_authenticator_manager: true role_hierarchy: @@ -23,25 +23,23 @@ security: security: false main: pattern: ^/ - anonymous: true switch_user: true logout: path: app_logout target: dashboard - guard: - authenticators: - - App\Security\GuardServiceKeycloak + custom_authenticators: + - App\Security\KeycloakAuthenticator # Easy way to control access for large sections of your site # Note: Only the *first* access control that matches will be used access_control: - { path: /backend/, role: ROLE_ADMIN } - - { path: /login$, role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: /no_team$, role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: /resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: /cron/, role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: /client/, role: IS_AUTHENTICATED_ANONYMOUSLY } - - { path: /health/, role: IS_AUTHENTICATED_ANONYMOUSLY } + - { path: /login$, role: PUBLIC_ACCESS } + - { path: /no_team$, role: PUBLIC_ACCESS } + - { path: /resetting, role: PUBLIC_ACCESS } + - { path: /cron/, role: PUBLIC_ACCESS } + - { path: /client/, role: PUBLIC_ACCESS } + - { path: /health/, role: PUBLIC_ACCESS } - { path: /register, role: ROLE_ADMIN } - { path: /, role: ROLE_USER } diff --git a/config/packages/swiftmailer.yaml b/config/packages/swiftmailer.yaml deleted file mode 100644 index 0dbfe892..00000000 --- a/config/packages/swiftmailer.yaml +++ /dev/null @@ -1,9 +0,0 @@ -swiftmailer: - spool: { type: 'memory' } - disable_delivery: false - host: '%env(MAILER_HOST)%' - password: '%env(MAILER_PASSWORD)%' - username: '%env(MAILER_USERNAME)%' - transport: '%env(MAILER_TRANSPORT)%' - encryption: '%env(MAILER_ENCRYPTION)%' - port: '%env(MAILER_PORT)%' diff --git a/config/packages/translation.yaml b/config/packages/translation.yaml index 05a2b3d8..155c354b 100644 --- a/config/packages/translation.yaml +++ b/config/packages/translation.yaml @@ -1,6 +1,6 @@ framework: - default_locale: en + default_locale: de translator: default_path: '%kernel.project_dir%/translations' fallbacks: - - en + - de diff --git a/config/packages/vich_uploader.yaml b/config/packages/vich_uploader.yaml index 3299653b..51129fcf 100644 --- a/config/packages/vich_uploader.yaml +++ b/config/packages/vich_uploader.yaml @@ -4,27 +4,27 @@ vich_uploader: mappings: profil_picture: uri_prefix: '%app.path.images%' - upload_destination: intern_adapter + upload_destination: oneup_flysystem.intern_filesystem namer: vich_uploader.namer_uniqid delete_on_update: true policies: uri_prefix: '%app.path.images%' - upload_destination: policy_adapter + upload_destination: oneup_flysystem.policies_filesystem namer: vich_uploader.namer_uniqid delete_on_update: true forms: uri_prefix: '%app.path.images%' - upload_destination: forms_adapter + upload_destination: oneup_flysystem.forms_filesystem namer: vich_uploader.namer_uniqid delete_on_update: true daten: uri_prefix: '%app.path.images%' - upload_destination: daten_adapter + upload_destination: oneup_flysystem.daten_filesystem namer: vich_uploader.namer_uniqid delete_on_update: true software: uri_prefix: '%kernel.project_dir%/data/software' - upload_destination: software_adapter + upload_destination: oneup_flysystem.software_filesystem namer: vich_uploader.namer_uniqid delete_on_update: true diff --git a/config/routes.yaml b/config/routes.yaml index 5749978b..02de8665 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -3,4 +3,20 @@ # controller: App\Controller\DefaultController::index app_logout: path: /login/logout - methods: GET \ No newline at end of file + methods: GET +connect_keycloak_check: + path: /login/keycloak_login/check + controller: App\Controller\LoginControllerKeycloak::check + +when@prod: + connect_keycloak_check: + path: /login/keycloak_login/check + controller: App\Controller\LoginControllerKeycloak::check + schemes: [https] + +controllers: + resource: '../src/Controller/' + type: annotation + prefix: + de: '' + en: '/en' diff --git a/config/services.yaml b/config/services.yaml index 705a89a0..41e8a2a7 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -12,8 +12,9 @@ parameters: cronIPAdress: '%env(CRON_IPADRESS)%' KEYCLOAK_URL: '%env(OAUTH_KEYCLOAK_SERVER)%' KEYCLOAK_REALM: '%env(OAUTH_KEYCLOAK_REALM)%' - KEYCLOAK_SECRETE: '%env(OAUTH_KEYCLOAK_CLIENT_SECRET)%' + KEYCLOAK_SECRET: '%env(OAUTH_KEYCLOAK_CLIENT_SECRET)%' KEYCLOAK_ID: '%env(OAUTH_KEYCLOAK_CLIENT_ID)%' + superAdminRole: '%env(superAdminRole)%' services: # default configuration for services in *this* file _defaults: diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 00000000..3cf1aaaf --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,4 @@ +files: + - source: /translations/*/*.de.yaml + translation: /%original_path%/%file_name%.%two_letters_code%.yaml + translation_replace: {"de.": ""} diff --git a/installDockerDebian.sh b/installDockerDebian.sh new file mode 100644 index 00000000..db14256f --- /dev/null +++ b/installDockerDebian.sh @@ -0,0 +1,22 @@ +sudo apt-get remove docker docker-engine docker.io containerd runc + +sudo apt-get update +sudo apt-get install ca-certificates curl gnupg + +sudo install -m 0755 -d /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg +sudo chmod a+r /etc/apt/keyrings/docker.gpg + +echo \ + "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ + "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +sudo apt-get update +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin + +sudo wget https://github.com/docker/compose/releases/download/v2.7.0/docker-compose-linux-x86_64 -O /usr/local/bin/docker-compose +sudo chmod +x /usr/local/bin/docker-compose +docker-compose -v + +sudo bash ./installOdcDocker.sh \ No newline at end of file diff --git a/installDockerUbuntu.sh b/installDockerUbuntu.sh new file mode 100644 index 00000000..3d6bfcd3 --- /dev/null +++ b/installDockerUbuntu.sh @@ -0,0 +1,22 @@ +sudo apt-get remove docker docker-engine docker.io containerd runc + +sudo apt-get update +sudo apt-get install ca-certificates curl gnupg + +sudo install -m 0755 -d /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg +sudo chmod a+r /etc/apt/keyrings/docker.gpg + +echo \ + "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +sudo apt-get update +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin + +sudo wget https://github.com/docker/compose/releases/download/v2.7.0/docker-compose-linux-x86_64 -O /usr/local/bin/docker-compose +sudo chmod +x /usr/local/bin/docker-compose +docker-compose -v + +sudo bash ./installOdcDocker.sh \ No newline at end of file diff --git a/installDocker.sh b/installOdcDocker.sh similarity index 97% rename from installDocker.sh rename to installOdcDocker.sh index afdc37f3..59c4d9e1 100644 --- a/installDocker.sh +++ b/installOdcDocker.sh @@ -14,20 +14,20 @@ else echo "ODC_DB_PW=$ODC_DB_PW" >> $FILE source $FILE fi - ENVIRONMENT=${ENVIRONMENT:=dev} + ENVIRONMENT=${ENVIRONMENT:=prod} read -p "Enter the environment dev/prod[$ENVIRONMENT]: " input ENVIRONMENT=${input:=$ENVIRONMENT} sed -i '/ENVIRONMENT/d' $FILE echo "ENVIRONMENT=$ENVIRONMENT" >> $FILE - HTTP_METHOD=${HTTP_METHOD:=http} + HTTP_METHOD=${HTTP_METHOD:=https} read -p "Enter http/https for testing on local environment ALWAYS use http [$HTTP_METHOD]: " input HTTP_METHOD=${input:=$HTTP_METHOD} sed -i '/HTTP_METHOD/d' $FILE echo "HTTP_METHOD=$HTTP_METHOD" >> $FILE PUBLIC_URL=${PUBLIC_URL:=dev.domain.de} - read -p "Enter the url you want to enter the open-datenschutzcenter [$PUBLIC_URL]: " input + read -p "Enter the url you want to enter the open-datenschutzcenter without http://, https:// or ports [$PUBLIC_URL]: " input PUBLIC_URL=${input:=$PUBLIC_URL} sed -i '/PUBLIC_URL/d' $FILE echo "PUBLIC_URL=$PUBLIC_URL" >> $FILE diff --git a/package-lock.json b/package-lock.json index c3514452..22dc71a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,7 @@ "requires": true, "packages": { "": { + "name": "open-datenschutzcenter", "license": "UNLICENSED", "dependencies": { "bootstrap": "^4.5.0", @@ -21,344 +22,476 @@ "vis-network": "^7.8.0" }, "devDependencies": { - "@symfony/webpack-encore": "^0.30.0", + "@symfony/webpack-encore": "^3.0.0", "core-js": "^3.0.0", "regenerator-runtime": "^0.13.2", "webpack-notifier": "^1.6.0" } }, - "node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.10.4" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.4.tgz", - "integrity": "sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw==", + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "dependencies": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/compat-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", "dev": true, - "bin": { - "semver": "bin/semver" + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.4.tgz", - "integrity": "sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, "node_modules/@babel/core/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", - "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", + "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, "dependencies": { - "@babel/types": "^7.10.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.10.4", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz", - "integrity": "sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz", + "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", + "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-define-map": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz", - "integrity": "sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA==", + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", + "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.4", - "lodash": "^4.17.13" + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" } }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", - "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "dependencies": { - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "node_modules/@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", "dev": true, "dependencies": { - "@babel/types": "^7.10.4" + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz", - "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", "dev": true, "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz", - "integrity": "sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4", - "lodash": "^4.17.13" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "node_modules/@babel/helper-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.4.tgz", - "integrity": "sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", "dev": true, - "dependencies": { - "lodash": "^4.17.13" + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", - "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", + "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", "dev": true, "dependencies": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz", + "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-function-name": "^7.18.9", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.11", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", "dev": true, "dependencies": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight/node_modules/chalk": { @@ -375,131 +508,327 @@ "node": ">=4" } }, - "node_modules/@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, "engines": { - "node": ">=6.0.0" + "node": ">=0.8.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz", - "integrity": "sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg==", + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "engines": { + "node": ">=4" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", + "node_modules/@babel/parser": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", + "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", + "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz", - "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz", - "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==", + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", + "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-async-generators": { @@ -509,15 +838,36 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-dynamic-import": { @@ -527,6 +877,36 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-json-strings": { @@ -536,6 +916,21 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { @@ -545,6 +940,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-numeric-separator": { @@ -554,6 +952,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-object-rest-spread": { @@ -563,6 +964,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { @@ -572,6 +976,9 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-chaining": { @@ -581,417 +988,651 @@ "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz", - "integrity": "sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", + "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "lodash": "^4.17.13" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz", + "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz", + "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz", - "integrity": "sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz", - "integrity": "sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz", + "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-identifier": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", + "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz", - "integrity": "sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "dev": true, "dependencies": { - "regenerator-transform": "^0.14.2" + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz", - "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz", + "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz", - "integrity": "sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-env": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz", - "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.10.4", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.10.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.10.4", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", + "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.10.4", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.10.4", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-env/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" } }, "node_modules/@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -999,56 +1640,158 @@ "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/runtime": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", - "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", - "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4", + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", + "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", @@ -1103,52 +1846,134 @@ "node": ">=10" } }, + "node_modules/@nuxt/friendly-errors-webpack-plugin": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@nuxt/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.5.2.tgz", + "integrity": "sha512-LLc+90lnxVbpKkMqk5z1EWpXoODhc6gRkqqXJCInJwF5xabHAE7biFvbULfvTRmtaTzAaP8IV4HQDLUgeAUTTw==", + "dev": true, + "dependencies": { + "chalk": "^2.3.2", + "consola": "^2.6.0", + "error-stack-parser": "^2.0.0", + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@nuxt/friendly-errors-webpack-plugin/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nuxt/friendly-errors-webpack-plugin/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@nuxt/friendly-errors-webpack-plugin/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nuxt/friendly-errors-webpack-plugin/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@symfony/webpack-encore": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/@symfony/webpack-encore/-/webpack-encore-0.30.2.tgz", - "integrity": "sha512-fJGPnNJ69/FrRcIRluqk5grO4R0ZmXU1n3TyplOjjXv9nuLTA8ljvhk/sMAs/WMri4vb1ZdWwcT5sPw1pmYZdA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@symfony/webpack-encore/-/webpack-encore-3.0.0.tgz", + "integrity": "sha512-59BTz9glnvcGSFeTaYWtNzgfA26wLwh0TSbVQk8I9hmCnFYOFp+LgnUN+T4MyXA4WWg6+DAFIf+CuOD3o1XwoA==", "dev": true, "dependencies": { - "@babel/core": "^7.7.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/preset-env": "^7.4.0", - "assets-webpack-plugin": "^3.9.7", - "babel-loader": "^8.0.0", + "@babel/core": "^7.17.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/preset-env": "^7.16.0", + "@nuxt/friendly-errors-webpack-plugin": "^2.5.1", + "assets-webpack-plugin": "7.0.*", + "babel-loader": "^8.2.5", "chalk": "^4.0.0", - "clean-webpack-plugin": "^3.0.0", - "css-loader": "^3.5.2", - "fast-levenshtein": "^2.0.6", - "file-loader": "^6.0.0", - "friendly-errors-webpack-plugin": "^2.0.0-beta.1", - "loader-utils": "^2.0.0", - "mini-css-extract-plugin": ">=0.4.0 <0.4.3", - "optimize-css-assets-webpack-plugin": "^5.0.1", + "clean-webpack-plugin": "^4.0.0", + "css-loader": "^6.7.0", + "css-minimizer-webpack-plugin": "^4.0.0", + "fast-levenshtein": "^3.0.0", + "mini-css-extract-plugin": "^2.6.0", "pkg-up": "^3.1.0", - "pretty-error": "^2.1.1", - "resolve-url-loader": "^3.0.1", + "pretty-error": "^4.0.0", + "resolve-url-loader": "^5.0.0", "semver": "^7.3.2", - "style-loader": "^1.1.3", - "terser-webpack-plugin": "^1.1.0", + "style-loader": "^3.3.0", + "sync-rpc": "^1.3.6", + "terser-webpack-plugin": "^5.3.0", "tmp": "^0.2.1", - "webpack": "^4.36.0", - "webpack-cli": "^3.0.0", - "webpack-dev-server": "^3.1.14", - "webpack-manifest-plugin": "^2.0.2", - "webpack-sources": "^1.3.0", - "yargs-parser": "^18.1.3" + "webpack": "^5.72", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.8.0", + "yargs-parser": "^21.0.0" }, "bin": { "encore": "bin/encore.js" }, "engines": { - "node": ">= 10.13.0" + "node": ">=14.0.0" } }, - "node_modules/@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", - "dev": true + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/color-name": { "version": "1.1.1", @@ -1156,25 +1981,108 @@ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.30", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", + "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, "node_modules/@types/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "dependencies": { "@types/minimatch": "*", "@types/node": "*" } }, + "node_modules/@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "dev": true }, "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, "node_modules/@types/node": { @@ -1183,258 +2091,254 @@ "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==", "dev": true }, - "node_modules/@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, - "node_modules/@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, - "node_modules/@types/tapable": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", - "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, - "node_modules/@types/uglify-js": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.3.tgz", - "integrity": "sha512-KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w==", + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dev": true, "dependencies": { - "source-map": "^0.6.1" + "@types/express": "*" } }, - "node_modules/@types/uglify-js/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@types/mime": "*", + "@types/node": "*" } }, - "node_modules/@types/webpack": { - "version": "4.41.19", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.19.tgz", - "integrity": "sha512-hBryCwAJhqf7MiYNnsr6UsPVQHF4+sUnXVG9MTVAJFtX8vJoxc2rPFcWEAUVuBOCxfTkEY5TPc7RYUer7EXTEQ==", + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dev": true, "dependencies": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "source-map": "^0.6.0" + "@types/node": "*" } }, - "node_modules/@types/webpack-sources": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-1.4.0.tgz", - "integrity": "sha512-c88dKrpSle9BtTqR6ifdaxu1Lvjsl3C5OsfvuUbUwdXymshv1TkufUAXBajCCUM/f/TmnkZC/Esb03MinzSiXQ==", + "node_modules/@types/webpack": { + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.0.tgz", + "integrity": "sha512-8cP0CzcxUiFuA9xGJkfeVpqmWTk9nx6CWwamRGCj95ph1SmlRRk9KlCZ6avhCbZd4L68LvYT6l1kpdEnQXrF8w==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - } - }, - "node_modules/@types/webpack-sources/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" + "tapable": "^2.2.0", + "webpack": "^5" } }, - "node_modules/@types/webpack/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@types/node": "*" } }, "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0" + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } } }, "node_modules/@xtuc/ieee754": { @@ -1450,22 +2354,22 @@ "dev": true }, "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" } }, "node_modules/acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1474,61 +2378,26 @@ "node": ">=0.4.0" } }, - "node_modules/adjust-sourcemap-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", - "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", - "dev": true, - "dependencies": { - "assert": "1.4.1", - "camelcase": "5.0.0", - "loader-utils": "1.2.3", - "object-path": "0.11.4", - "regex-parser": "2.2.10" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "peerDependencies": { + "acorn": "^8" } }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" }, "engines": { - "node": ">=4.0.0" + "node": ">=8.9" } }, "node_modules/aggregate-error": { @@ -1544,46 +2413,71 @@ } }, "node_modules/ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } }, - "node_modules/ajv-keywords": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.0.tgz", - "integrity": "sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw==" + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } }, - "node_modules/alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" } }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, "engines": [ "node >= 0.8.0" @@ -1593,12 +2487,12 @@ } }, "node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/ansi-styles": { @@ -1614,11 +2508,10 @@ } }, "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, - "optional": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1627,54 +2520,6 @@ "node": ">= 8" } }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", - "dev": true - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -1684,7 +2529,7 @@ "node_modules/array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, "dependencies": { "array-uniq": "^1.0.1" @@ -1696,150 +2541,46 @@ "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "node_modules/assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "dependencies": { - "util": "0.10.3" - } - }, "node_modules/assets-webpack-plugin": { - "version": "3.9.12", - "resolved": "https://registry.npmjs.org/assets-webpack-plugin/-/assets-webpack-plugin-3.9.12.tgz", - "integrity": "sha512-iqXT/CtP013CO+IZJG7f4/KmUnde+nn6FSksAhrGRbT1GODsFU3xocP6A5NkTFoey3XOI9n1ZY0QmX/mY74gNA==", - "dev": true, - "dependencies": { - "camelcase": "5.3.1", - "escape-string-regexp": "2.0.0", - "lodash": "4.17.15", - "mkdirp": "0.5.3" - } - }, - "node_modules/assets-webpack-plugin/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/assets-webpack-plugin/-/assets-webpack-plugin-7.0.0.tgz", + "integrity": "sha512-DMZ9r6HFxynWeONRMhSOFTvTrmit5dovdoUKdJgCG03M6CC7XiwNImPH+Ad1jaVrQ2n59e05lBhte52xPt4MSA==", "dev": true, "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" + "camelcase": "^6.0.0", + "escape-string-regexp": "^4.0.0", + "lodash": "^4.17.20" }, "engines": { - "node": ">= 4.5.0" + "node": ">=10.x.x" + }, + "peerDependencies": { + "webpack": ">=5.0.0" } }, "node_modules/babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", "dev": true, "dependencies": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", "schema-utils": "^2.6.5" }, "engines": { - "node": ">= 6.9" - } - }, - "node_modules/babel-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "node": ">= 8.9" }, - "engines": { - "node": ">=4.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" } }, "node_modules/babel-plugin-dynamic-import-node": { @@ -1851,89 +2592,63 @@ "object.assign": "^4.1.0" } }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", + "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.0" + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.2", + "semver": "^6.1.1" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", + "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", + "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "@babel/helper-define-polyfill-provider": "^0.3.2" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, "node_modules/big.js": { @@ -1945,52 +2660,42 @@ } }, "node_modules/binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, - "optional": true, "engines": { "node": ">=8" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", - "dev": true - }, "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "dependencies": { - "bytes": "3.1.0", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "engines": { "node": ">= 0.8" @@ -2008,27 +2713,25 @@ "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "node_modules/bonjour-service": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.13.tgz", + "integrity": "sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==", "dev": true, "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", + "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, "node_modules/bootstrap": { @@ -2051,139 +2754,36 @@ } }, "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { - "is-extendable": "^0.1.0" + "fill-range": "^7.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-rsa/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "node_modules/browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", - "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "dependencies": { - "pako": "~1.0.5" + "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", - "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" }, "bin": { "browserslist": "cli.js" @@ -2192,133 +2792,44 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, "engines": { "node": ">= 0.8" } }, - "node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "dependencies": { - "caller-callsite": "^2.0.0" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/caniuse-api": { @@ -2334,10 +2845,20 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001094", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001094.tgz", - "integrity": "sha512-ufHZNtMaDEuRBpTbqD93tIQnngmJ+oBknjvr0IbFympSdtFpAUFmNv4mVKbb53qltxFx0nK3iy32S9AqkLzUNA==", - "dev": true + "version": "1.0.30001378", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz", + "integrity": "sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] }, "node_modules/chalk": { "version": "4.1.0", @@ -2383,15 +2904,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/chalk/node_modules/supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -2405,80 +2917,32 @@ } }, "node_modules/chokidar": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", - "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, - "optional": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" + "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" - } - }, - "node_modules/chokidar/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "optional": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "optional": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/chokidar/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^7.0.0" }, - "engines": { - "node": ">=8.0" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, "node_modules/chrome-trace-event": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", @@ -2491,43 +2955,6 @@ "node": ">=6.0" } }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -2537,92 +2964,32 @@ } }, "node_modules/clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", "dev": true, "dependencies": { - "@types/webpack": "^4.4.31", "del": "^4.1.1" }, "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "node": ">=10.0.0" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "webpack": ">=4.0.0 <6.0.0" } }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "node": ">=6" } }, "node_modules/color-convert": { @@ -2637,45 +3004,35 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "dev": true, - "dependencies": { - "arity-n": "^1.0.4" - } - }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -2718,7 +3075,7 @@ "node_modules/compression/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/concat-map": { @@ -2726,78 +3083,53 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, "engines": { "node": ">=0.8" } }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", "dev": true }, "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "dependencies": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" } }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -2808,18 +3140,18 @@ } }, "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "dependencies": { "safe-buffer": "~5.1.1" } }, "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, "engines": { "node": ">= 0.6" @@ -2828,32 +3160,9 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/copy-webpack-plugin": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz", @@ -2918,31 +3227,6 @@ "node": ">=10" } }, - "node_modules/copy-webpack-plugin/node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/copy-webpack-plugin/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/copy-webpack-plugin/node_modules/globby": { "version": "11.0.1", "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", @@ -2959,28 +3243,6 @@ "node": ">=10" } }, - "node_modules/copy-webpack-plugin/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/copy-webpack-plugin/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/copy-webpack-plugin/node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -3003,28 +3265,6 @@ "node": ">=10" } }, - "node_modules/copy-webpack-plugin/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/copy-webpack-plugin/node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/copy-webpack-plugin/node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -3036,25 +3276,6 @@ "node": ">=10" } }, - "node_modules/copy-webpack-plugin/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/copy-webpack-plugin/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/copy-webpack-plugin/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -3066,14 +3287,6 @@ "rimraf": "bin.js" } }, - "node_modules/copy-webpack-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", @@ -3083,9 +3296,9 @@ } }, "node_modules/copy-webpack-plugin/node_modules/ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dependencies": { "minipass": "^3.1.1" }, @@ -3101,13 +3314,17 @@ "hasInstallScript": true }, "node_modules/core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.1.tgz", + "integrity": "sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw==", "dev": true, "dependencies": { - "browserslist": "^4.8.5", + "browserslist": "^4.21.3", "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat/node_modules/semver": { @@ -3124,260 +3341,221 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "node_modules/css-declaration-sorter": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz", + "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==", "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "node_modules/css-loader": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", "dev": true, "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "icss-utils": "^5.1.0", + "postcss": "^8.4.7", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=4.8" + "node": ">=10" } }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "node_modules/css-minimizer-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA==", "dev": true, "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "cssnano": "^5.1.8", + "jest-worker": "^27.5.1", + "postcss": "^8.4.13", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": "*" + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } } }, - "node_modules/css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, "dependencies": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - } - }, - "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true, - "engines": { - "node": "*" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "dependencies": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" + "fast-deep-equal": "^3.1.3" }, - "engines": { - "node": ">4" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/css-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", - "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^6.3.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">= 8.9.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/css-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, - "bin": { - "json5": "lib/cli.js" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=8.0.0" } }, - "node_modules/css-loader/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-what": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", - "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, "engines": { "node": ">= 6" - } - }, - "node_modules/css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, "node_modules/cssesc": { @@ -3393,160 +3571,97 @@ } }, "node_modules/cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", + "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", "dev": true, "dependencies": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" + "cssnano-preset-default": "^5.2.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" + "node": "^10 || ^12 || >=14.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "node_modules/cssnano-preset-default": { + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", + "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.0", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.2", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.6", + "postcss-merge-rules": "^5.1.2", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.3", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", "dev": true, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", - "dev": true, - "dependencies": { - "css-tree": "1.0.0-alpha.39" + "node": "^10 || ^12 || >=14.0" }, - "engines": { - "node": ">=8.0.0" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "dependencies": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" + "css-tree": "^1.1.2" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", - "dev": true - }, - "node_modules/csso/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "node_modules/datatables.net": { - "version": "1.10.21", - "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.21.tgz", - "integrity": "sha512-/bSZtxmf3GTpYcvEmwZ8q26I1yhSx8qklR2B+s1K8+/51UW/zc2zTYwJMqr/Z+iCYixAc00ildj4g2x0Qamolw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.12.1.tgz", + "integrity": "sha512-e6XAMUoV41JdQPS/r9YRfRcmTPcCVvyZbWI+xog1Zg+kjVliMQbEkvWK5XFItmi64Cvwg+IqsZbTUJ1KSY3umA==", "dependencies": { "jquery": ">=1.7" } @@ -3571,129 +3686,66 @@ } }, "node_modules/datatables.net-dt": { - "version": "1.10.21", - "resolved": "https://registry.npmjs.org/datatables.net-dt/-/datatables.net-dt-1.10.21.tgz", - "integrity": "sha512-P89PgkhVCB6shP0CbigmB1Z812yfdfhvAbUdg08mLuF7tuvLFPQC9F+WIV30Hj9mgMsPALWAEJEYAA3aJjuqIA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/datatables.net-dt/-/datatables.net-dt-1.12.1.tgz", + "integrity": "sha512-HYsHbSYqOqlgsgjKMH/kkCB5455t51GmmtXRxgnDMRbjPLEIKo5CZmAlUe5mdD/RVPRtAUaj5K3SDlkEZ1bUmw==", "dependencies": { - "datatables.net": "1.10.21", + "datatables.net": ">=1.11.3", "jquery": ">=1.7" } }, "node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "ms": "2.1.2" }, "engines": { - "node": ">=6" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" + "node": ">=6.0" }, - "engines": { - "node": ">= 0.4" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "execa": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "node": ">= 0.4" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/del": { @@ -3715,60 +3767,28 @@ } }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "node": ">= 0.8" } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, "node_modules/dir-glob": { @@ -3785,26 +3805,19 @@ "node_modules/dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", "dev": true }, "node_modules/dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dev": true, - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "dev": true, "dependencies": { - "buffer-indexof": "^1.0.0" + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" } }, "node_modules/dom-converter": { @@ -3817,328 +3830,148 @@ } }, "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "dependencies": { "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", "entities": "^2.0.0" - } - }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", - "dev": true - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, "node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "dependencies": { - "domelementtype": "1" + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.222", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.222.tgz", + "integrity": "sha512-gEM2awN5HZknWdLbngk4uQCVfhucFAfFzuchP3wM3NN6eow1eDU0dFy2kts43FB20ZfhVFF0jmFSTb1h5OhyIg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" } }, - "node_modules/dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", "dev": true, "dependencies": { - "is-obj": "^2.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=8" + "node": ">=10.13.0" } }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.3.488", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.488.tgz", - "integrity": "sha512-NReBdOugu1yl8ly+0VDtiQ6Yw/1sLjnvflWq0gvY1nfUXU2PbA+1XAVuEb7ModnwL/MfUPjby7e4pAFnSHiy6Q==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dev": true, - "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz", - "integrity": "sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/enhanced-resolve/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/enhanced-resolve/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - }, - "node_modules/errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", - "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", - "dev": true, - "dependencies": { - "stackframe": "^1.1.1" - } - }, - "node_modules/es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "envinfo": "dist/cli.js" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" + "node": ">=4" } }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dev": true, "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "stackframe": "^1.3.4" } }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true }, "node_modules/escalade": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz", - "integrity": "sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, "engines": { "node": ">=6" @@ -4147,52 +3980,51 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=8.0.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "dependencies": { + "estraverse": "^5.2.0" }, "engines": { - "node": ">=4" + "node": ">=4.0" } }, - "node_modules/esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "dependencies": { - "estraverse": "^4.1.0" - }, "engines": { "node": ">=4.0" } @@ -4218,169 +4050,84 @@ "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "node_modules/events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "engines": { "node": ">=0.8.x" } }, - "node_modules/eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "dev": true, - "dependencies": { - "original": "^1.0.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" + "node": ">=10" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "dev": true, "dependencies": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -4392,7 +4139,7 @@ "node_modules/express/node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, "node_modules/express/node_modules/debug": { @@ -4407,215 +4154,73 @@ "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "dependencies": { - "type": "^2.0.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/ext/node_modules/type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", - "dev": true + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, + "node_modules/fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/fast-levenshtein": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "fastest-levenshtein": "^1.0.7" } }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/fast-glob/node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, "engines": { - "node": ">=8.0" + "node": ">= 4.9.1" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, "node_modules/fastq": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", @@ -4625,75 +4230,40 @@ } }, "node_modules/faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "dependencies": { "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "node_modules/file-loader": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.0.0.tgz", - "integrity": "sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 10.13.0" + "node": ">=0.8.0" } }, "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { - "is-extendable": "^0.1.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -4712,21 +4282,23 @@ "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dependencies": { "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, "node_modules/find-up": { @@ -4741,237 +4313,72 @@ "node": ">=6" } }, - "node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/flush-write-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/flush-write-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/follow-redirects": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz", - "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { "node": ">=4.0" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "engines": { "node": ">= 0.6" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "engines": { "node": ">= 0.6" } }, - "node_modules/friendly-errors-webpack-plugin": { - "version": "2.0.0-beta.2", - "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.0.0-beta.2.tgz", - "integrity": "sha512-0x14cdjGx5q0yZc3Cy9sgAF/szWUFx1WxH/IX88UuKbM5Z+7FCk/Z/6hFbXMcz3qqK0mp7WrHKX3cxhUAL2aqQ==", - "dev": true, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dependencies": { - "chalk": "^2.4.2", - "error-stack-parser": "^2.0.2", - "string-width": "^2.0.0", - "strip-ansi": "^5" + "minipass": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 8" } }, - "node_modules/friendly-errors-webpack-plugin/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -4987,42 +4394,47 @@ "dev": true }, "node_modules/gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "engines": { "node": ">=6.9.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/glob": { @@ -5042,9 +4454,9 @@ } }, "node_modules/glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { "is-glob": "^4.0.1" }, @@ -5052,47 +4464,11 @@ "node": ">= 6" } }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-modules/node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true }, "node_modules/globals": { "version": "11.12.0", @@ -5106,7 +4482,7 @@ "node_modules/globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", "dev": true, "dependencies": { "array-union": "^1.0.1", @@ -5122,22 +4498,22 @@ "node_modules/globby/node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "node_modules/growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", "dev": true }, "node_modules/h2-invent-apps": { @@ -5167,125 +4543,42 @@ } }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "get-intrinsic": "^1.1.1" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/homedir-polyfill": { + "node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, "dependencies": { "inherits": "^2.0.1", @@ -5318,76 +4611,57 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "node_modules/html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, "node_modules/html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", "dev": true }, "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", "dev": true }, "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", "dev": true }, "node_modules/http-proxy": { @@ -5405,25 +4679,37 @@ } }, "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, "engines": { - "node": ">=4.0.0" + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } }, "node_modules/iconv-lite": { "version": "0.4.24", @@ -5438,29 +4724,17 @@ } }, "node_modules/icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "dependencies": { - "postcss": "^7.0.14" - }, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, "node_modules/ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", @@ -5474,33 +4748,23 @@ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" }, - "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { @@ -5519,12 +4783,6 @@ "node": ">=8" } }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, "node_modules/infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -5544,124 +4802,29 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true, "engines": { - "node": "*" - } - }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true, - "engines": { - "node": ">=4" + "node": ">= 0.10" } }, "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">= 10" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "optional": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -5669,107 +4832,31 @@ "node": ">=8" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "has": "^1.0.3" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "node": ">=8" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-extglob": { @@ -5781,12 +4868,12 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/is-glob": { @@ -5801,36 +4888,11 @@ } }, "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">=8" + "node": ">=0.12.0" } }, "node_modules/is-path-cwd": { @@ -5866,6 +4928,18 @@ "node": ">=6" } }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -5878,73 +4952,28 @@ "node": ">=0.10.0" } }, - "node_modules/is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "dependencies": { - "html-comment-regex": "^1.1.0" + "node": ">=8" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "dependencies": { - "has-symbols": "^1.0.1" + "is-docker": "^2.0.0" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true, - "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/isarray": { @@ -5961,12 +4990,26 @@ "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/jquery": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", @@ -5978,19 +5021,6 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "node_modules/js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -6003,10 +5033,10 @@ "node": ">=4" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, "node_modules/json-schema-traverse": { @@ -6014,19 +5044,10 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "node_modules/json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, "node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dependencies": { - "minimist": "^1.2.5" - }, + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "bin": { "json5": "lib/cli.js" }, @@ -6034,24 +5055,15 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/jszip": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", - "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" + "setimmediate": "^1.0.5" } }, "node_modules/jszip/node_modules/readable-stream": { @@ -6076,12 +5088,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -6091,37 +5097,6 @@ "node": ">=0.10.0" } }, - "node_modules/last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dev": true, - "dependencies": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "dependencies": { - "leven": "^3.1.0" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -6130,13 +5105,22 @@ "immediate": "~3.0.5" } }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "node": ">=6.11.5" } }, "node_modules/loader-utils": { @@ -6166,104 +5150,57 @@ } }, "node_modules/lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, - "node_modules/loglevel": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", - "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" } }, "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "semver": "^6.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { - "semver": "bin/semver" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "semver": "bin/semver.js" } }, "node_modules/mdbootstrap": { @@ -6272,58 +5209,42 @@ "integrity": "sha512-vzYd7UQ0H1tyJfDqCYwsAv+sxol/xRkJP/5FMhcdW3ZbN9xUnmWiSPHx3A6ddGxdOQbfJTWxT3G8M+I++Qdk6w==" }, "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, "engines": { "node": ">= 0.6" } }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/memfs": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", + "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" } }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "node_modules/merge2": { @@ -6337,55 +5258,24 @@ "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, - "bin": { - "miller-rabin": "bin/miller-rabin" + "engines": { + "node": ">=8.6" } }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -6399,78 +5289,105 @@ } }, "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { - "mime-db": "1.44.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/mini-css-extract-plugin": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.2.tgz", - "integrity": "sha512-ots7URQH4wccfJq9Ssrzu2+qupbncAce4TmTzunI9CIwlQMp2XI+WNUw6xWF6MMAGAm1cbUVINrSjATaVMyKXg==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", + "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", "dev": true, "dependencies": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" + "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 6.9.0 <7.0.0 || >= 8.9.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/mini-css-extract-plugin/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "bin": { - "json5": "lib/cli.js" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "fast-deep-equal": "^3.1.3" }, - "engines": { - "node": ">=4.0.0" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">= 4" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/minimalistic-assert": { @@ -6479,12 +5396,6 @@ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -6496,11 +5407,6 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "node_modules/minipass": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", @@ -6551,9 +5457,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/minizlib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", - "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -6567,86 +5473,14 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/moment": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", - "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==", + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", "engines": { "node": "*" } }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6654,184 +5488,72 @@ "dev": true }, "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, "dependencies": { - "dns-packet": "^1.3.1", + "dns-packet": "^5.2.2", "thunky": "^1.0.2" }, "bin": { "multicast-dns": "cli.js" } }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "node_modules/node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/node-libs-browser/node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" + "node": ">= 6.13.0" } }, - "node_modules/node-libs-browser/node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, "node_modules/node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", "dev": true, "dependencies": { "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", "shellwords": "^0.1.1", - "which": "^1.3.0" - } - }, - "node_modules/node-notifier/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "uuid": "^8.3.0", + "which": "^2.0.2" } }, "node_modules/node-releases": { - "version": "1.1.58", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz", - "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, "node_modules/normalize-path": { @@ -6843,216 +5565,102 @@ } }, "node_modules/normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "path-key": "^2.0.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "dependencies": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, - "node_modules/object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "ee-first": "1.1.1" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.entries": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", - "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" + "node": ">= 0.8" } }, "node_modules/on-headers": { @@ -7072,57 +5680,42 @@ "wrappy": "1" } }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { - "is-wsl": "^1.1.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/optimize-css-assets-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", - "dev": true, - "dependencies": { - "cssnano": "^4.1.10", - "last-call-webpack-plugin": "^3.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, "dependencies": { - "url-parse": "^1.4.3" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -7152,15 +5745,16 @@ } }, "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, "dependencies": { - "retry": "^0.12.0" + "@types/retry": "0.12.0", + "retry": "^0.13.1" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/p-try": { @@ -7176,77 +5770,6 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/parallel-transform/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/parallel-transform/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "dev": true, - "dependencies": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -7256,27 +5779,6 @@ "node": ">= 0.8" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -7297,28 +5799,28 @@ "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", "dev": true }, "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "dev": true }, "node_modules/path-type": { @@ -7329,28 +5831,21 @@ "node": ">=8" } }, - "node_modules/pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pify": { @@ -7365,7 +5860,7 @@ "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -7374,7 +5869,7 @@ "node_modules/pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "dependencies": { "pinkie": "^2.0.0" @@ -7384,718 +5879,585 @@ } }, "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dependencies": { - "find-up": "^3.0.0" + "find-up": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { - "find-up": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/portfinder": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", - "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", - "dev": true, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" + "p-locate": "^4.1.0" }, "engines": { - "node": ">= 0.12.0" + "node": ">=8" } }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { - "ms": "^2.1.1" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">=6.0.0" + "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-calc": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", - "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, "dependencies": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" } }, "node_modules/postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-colormin/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", + "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", "dev": true, "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "browserslist": "^4.20.3", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", + "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", "dev": true, "dependencies": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", + "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", + "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "node": "^10 || ^12 || >=14.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dev": true, "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dev": true, "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", + "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", "dev": true, "dependencies": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" + "browserslist": "^4.16.6", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dev": true, "dependencies": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "node": "^10 || ^12 || >=14.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, - "dependencies": { - "postcss": "^7.0.5" - }, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/postcss-modules-local-by-default": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz", - "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "dependencies": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.16", + "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.0" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "dependencies": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dev": true, "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dev": true, "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "dev": true, "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "dev": true, "dependencies": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "dev": true, "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", + "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dev": true, "dependencies": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "dev": true, "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dev": true, "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", + "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "dev": true, "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, "dependencies": { "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "util-deprecate": "^1.0.2" }, "engines": { "node": ">=4" } }, "node_modules/postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dev": true, "dependencies": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-svgo/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "dev": true, "dependencies": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "node_modules/postcss/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, "dependencies": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true, - "engines": { - "node": ">= 0.6.0" + "lodash": "^4.17.20", + "renderkid": "^3.0.0" } }, "node_modules/process-nextick-args": { @@ -8109,73 +6471,25 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, "node_modules/proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "dependencies": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, "engines": { "node": ">= 0.10" } }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "engines": { + "node": ">= 0.10" } }, "node_modules/punycode": { @@ -8186,49 +6500,21 @@ "node": ">=6" } }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", - "dev": true - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -8237,16 +6523,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -8257,13 +6533,13 @@ } }, "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -8272,9 +6548,9 @@ } }, "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "engines": { "node": ">= 0.8" @@ -8295,11 +6571,10 @@ } }, "node_modules/readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "optional": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -8307,19 +6582,31 @@ "node": ">=8.10.0" } }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", "dev": true, "dependencies": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" }, "engines": { "node": ">=4" @@ -8332,73 +6619,47 @@ "dev": true }, "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" } }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/regex-parser": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", - "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==", + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", "dev": true }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", + "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", "dev": true, "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", "dev": true }, "node_modules/regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dev": true, "dependencies": { "jsesc": "~0.5.0" @@ -8410,315 +6671,98 @@ "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, "bin": { "jsesc": "bin/jsesc" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, "node_modules/renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", - "dev": true, - "dependencies": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" - } - }, - "node_modules/renderkid/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/renderkid/node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/renderkid/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - } - }, - "node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "dependencies": { - "resolve-from": "^3.0.0" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" + "bin": { + "resolve": "bin/resolve" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-dir/node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, "node_modules/resolve-url-loader": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", - "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "2.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/resolve-url-loader/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve-url-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-url-loader/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" + "node": ">=12" } }, "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, "engines": { "node": ">= 4" @@ -8733,40 +6777,6 @@ "node": ">=0.10.0" } }, - "node_modules/rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", - "dev": true, - "dependencies": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - } - }, - "node_modules/rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", - "dev": true - }, - "node_modules/rework/node_modules/convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", - "dev": true - }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, "node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -8779,56 +6789,22 @@ "rimraf": "bin.js" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, "node_modules/run-parallel": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "dependencies": { - "aproba": "^1.1.1" - } - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, "node_modules/schema-utils": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", @@ -8845,16 +6821,19 @@ "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", "dev": true }, "node_modules/selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", + "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", "dev": true, "dependencies": { - "node-forge": "0.9.0" + "node-forge": "^1" + }, + "engines": { + "node": ">=10" } }, "node_modules/semver": { @@ -8870,24 +6849,24 @@ } }, "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "2.0.0", "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", + "ms": "2.1.3", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -8905,19 +6884,19 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -8926,7 +6905,7 @@ "node_modules/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, "dependencies": { "accepts": "~1.3.4", @@ -8950,10 +6929,19 @@ "ms": "2.0.0" } }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, "dependencies": { "depd": "~1.1.2", @@ -8968,13 +6956,13 @@ "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/serve-index/node_modules/setprototypeof": { @@ -8983,106 +6971,72 @@ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "kind-of": "^6.0.2" }, - "bin": { - "sha.js": "bin.js" + "engines": { + "node": ">=8" } }, "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shellwords": { @@ -9091,25 +7045,24 @@ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", "dev": true }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "dependencies": { - "is-arrayish": "^0.3.1" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "node_modules/slash": { @@ -9120,818 +7073,895 @@ "node": ">=8" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" } }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" } }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "dependencies": { - "ms": "2.0.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "is-descriptor": "^0.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/snapdragon/node_modules/ms": { + "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "dependencies": { - "faye-websocket": "^0.10.0", - "uuid": "^3.4.0", - "websocket-driver": "0.6.5" + "engines": { + "node": ">=6" } }, - "node_modules/sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "node_modules/style-loader": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", "dev": true, - "dependencies": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "node_modules/stylehacks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", + "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/sockjs-client/node_modules/faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "node_modules/summernote": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.18.tgz", + "integrity": "sha512-VlwBaNm9vSYMYXvO2f3UCUmY0Gm8jxLcBn+D08aX3pKs4x2vAoyQ4DcDQ6D+PchQiLrf86AGQVfVu56F4aP3ug==" + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "websocket-driver": ">=0.5.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", "dev": true, "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "get-port": "^3.1.0" } }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "node": ">= 10" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1" + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "node_modules/stackframe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", - "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", - "dev": true + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "node_modules/terser": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", "dev": true, "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/terser-webpack-plugin": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.5.tgz", + "integrity": "sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==", "dev": true, "dependencies": { - "is-descriptor": "^0.1.0" + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, "engines": { - "node": ">= 0.6" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true }, - "node_modules/stream-browserify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" } }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "node_modules/tmp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "node_modules/stream-http/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, + "node_modules/toastr": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/toastr/-/toastr-2.1.4.tgz", + "integrity": "sha1-i0O+ZPudDEFIcURvLbjoyk6V8YE=", "dependencies": { - "safe-buffer": "~5.1.0" + "jquery": ">=1.12.0" } }, - "node_modules/stream-shift": { + "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" + "engines": { + "node": ">=0.6" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", "dev": true }, - "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, "engines": { "node": ">=4" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "dependencies": { - "ansi-regex": "^3.0.0" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "engines": { + "node": ">=4" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "engines": { + "node": ">=4" } }, - "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "unique-slug": "^2.0.0" } }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dependencies": { + "imurmurhash": "^0.1.4" } }, - "node_modules/strip-eof": { + "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/style-loader": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", - "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==", + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.6" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, - "engines": { - "node": ">= 8.9.0" - } - }, - "node_modules/stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "bin": { + "browserslist-lint": "cli.js" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, + "node_modules/uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" + "punycode": "^2.1.0" } }, - "node_modules/summernote": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.18.tgz", - "integrity": "sha512-VlwBaNm9vSYMYXvO2f3UCUmY0Gm8jxLcBn+D08aX3pKs4x2vAoyQ4DcDQ6D+PchQiLrf86AGQVfVu56F4aP3ug==" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">= 0.4.0" } }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" + "uuid": "dist/bin/uuid" } }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } + "node_modules/vis-network": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/vis-network/-/vis-network-7.8.0.tgz", + "integrity": "sha512-nQLBaMZODkeC2T6DEcczuKVtC2f8IZtOeNlq3U3AOvrh8r8ippS3qn/vUafiEjjsAx1fGCe03icTs0WVL27iKw==", + "hasInstallScript": true }, - "node_modules/tar": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz", - "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==", + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.0", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" }, "engines": { - "node": ">= 10" + "node": ">=10.13.0" } }, - "node_modules/tar/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" } }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, "bin": { - "mkdirp": "bin/cmd.js" + "webpack": "bin/webpack.js" }, "engines": { - "node": ">=10" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" }, "bin": { - "terser": "bin/terser" + "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=6.0.0" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/terser-webpack-plugin": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", - "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", "dev": true, "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^3.1.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 6.9.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">= 4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/terser-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node_modules/webpack-dev-server": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.10.0.tgz", + "integrity": "sha512-7dezwAs+k6yXVFZ+MaL8VnE+APobiO3zvpp3rBHe/HmWQ+avwh0Q3d0xxacOiBybZZ3syTZw9HXzpa3YNbAZDQ==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "dependencies": { - "setimmediate": "^1.0.4" + "fast-deep-equal": "^3.1.3" }, - "engines": { - "node": ">=0.6.0" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/tmp/node_modules/rimraf": { + "node_modules/webpack-dev-server/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", @@ -9941,1633 +7971,1489 @@ }, "bin": { "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, "engines": { - "node": ">=4" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" } }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/webpack-notifier": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", + "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "@types/webpack": ">4.41.31" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + } } }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toastr": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/toastr/-/toastr-2.1.4.tgz", - "integrity": "sha1-i0O+ZPudDEFIcURvLbjoyk6V8YE=", - "dependencies": { - "jquery": ">=1.12.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "node_modules/webpack/node_modules/webpack-sources": { + "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": ">=0.6" + "node": ">=10.13.0" } }, - "node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" }, "engines": { - "node": ">= 0.6" + "node": ">=0.8.0" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.8.0" } }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } }, - "node_modules/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", "dev": true }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, "dependencies": { - "unique-slug": "^2.0.0" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "@babel/generator": { + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", + "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, "dependencies": { - "imurmurhash": "^0.1.4" + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, - "engines": { - "node": ">= 4.0.0" + "requires": { + "@babel/types": "^7.18.6" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, - "engines": { - "node": ">= 0.8" + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" } }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "@babel/helper-create-class-features-plugin": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz", + "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==", "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" } }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", + "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" } }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "@babel/helper-define-polyfill-provider": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", + "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, "dependencies": { - "punycode": "^2.1.0" + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", "dev": true }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "requires": { + "@babel/types": "^7.18.6" } }, - "node_modules/url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.18.9" } }, - "node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, - "dependencies": { - "inherits": "2.0.1" + "requires": { + "@babel/types": "^7.18.6" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" + "requires": { + "@babel/types": "^7.18.6" } }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", "dev": true }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "@babel/helper-replace-supers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", + "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", "dev": true, - "engines": { - "node": ">= 0.4.0" + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" } }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", "dev": true, - "bin": { - "uuid": "bin/uuid" + "requires": { + "@babel/types": "^7.18.6" } }, - "node_modules/v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, - "engines": { - "node": ">= 0.8" + "requires": { + "@babel/types": "^7.18.6" } }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", "dev": true }, - "node_modules/vis-network": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/vis-network/-/vis-network-7.8.0.tgz", - "integrity": "sha512-nQLBaMZODkeC2T6DEcczuKVtC2f8IZtOeNlq3U3AOvrh8r8ippS3qn/vUafiEjjsAx1fGCe03icTs0WVL27iKw==", - "hasInstallScript": true + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", "dev": true }, - "node_modules/watchpack": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", - "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", + "@babel/helper-wrap-function": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz", + "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==", "dev": true, - "dependencies": { - "chokidar": "^3.4.0", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.0", - "watchpack-chokidar2": "^2.0.0" + "requires": { + "@babel/helper-function-name": "^7.18.9", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.11", + "@babel/types": "^7.18.10" } }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", "dev": true, - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - }, - "engines": { - "node": "<8.10.0" + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" } }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, - "optional": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } + "@babel/parser": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", + "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", + "dev": true }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" } }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", + "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 4.0" + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, - "node_modules/watchpack-chokidar2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dev": true, - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, - "node_modules/watchpack-chokidar2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", "dev": true, - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, - "node_modules/webpack": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", - "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.1", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, - "node_modules/webpack-cli": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", - "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=6.11.5" + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", + "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" } }, - "node_modules/webpack-cli/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, - "node_modules/webpack-cli/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, - "node_modules/webpack-cli/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/webpack-cli/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, - "node_modules/webpack-cli/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "engines": { - "node": ">= 6" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 6.11.5" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack-dev-server/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" } }, - "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/webpack-dev-server/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 4.0" + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack-dev-server/node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack-dev-server/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/webpack-dev-server/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/webpack-dev-server/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" } }, - "node_modules/webpack-dev-server/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "@babel/plugin-transform-block-scoping": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", + "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" } }, - "node_modules/webpack-dev-server/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "@babel/plugin-transform-classes": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz", + "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" } }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", "dev": true, - "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" } }, - "node_modules/webpack-manifest-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz", - "integrity": "sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==", + "@babel/plugin-transform-destructuring": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz", + "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==", "dev": true, - "dependencies": { - "fs-extra": "^7.0.0", - "lodash": ">=3.5 <5", - "object.entries": "^1.1.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.11.5" + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" } }, - "node_modules/webpack-notifier": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.8.0.tgz", - "integrity": "sha512-I6t76NoPe5DZCCm5geELmDV2wlJ89LbU425uN6T2FG8Ywrrt1ZcUMz6g8yWGNg4pttqTPFQJYUPjWAlzUEQ+cQ==", + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, - "dependencies": { - "node-notifier": "^5.1.2", - "object-assign": "^4.1.0", - "strip-ansi": "^3.0.1" + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/webpack-notifier/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" } }, - "node_modules/webpack-notifier/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" } }, - "node_modules/webpack/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" } }, - "node_modules/webpack/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, - "node_modules/websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", "dev": true, - "dependencies": { - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.6.0" + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "@babel/plugin-transform-modules-systemjs": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz", + "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==", "dev": true, - "engines": { - "node": ">=0.8.0" + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", + "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", "dev": true, - "dependencies": { - "errno": "~0.1.7" + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "@babel/plugin-transform-parameters": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", "dev": true, - "dependencies": { - "async-limiter": "~1.0.0" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dev": true, - "engines": { - "node": ">=0.4" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" } }, - "node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "@babel/plugin-transform-spread": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz", + "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" } }, - "@babel/compat-data": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.4.tgz", - "integrity": "sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw==", + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "@babel/core": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.4.tgz", - "integrity": "sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.18.6" } }, - "@babel/generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", - "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dev": true, "requires": { - "@babel/types": "^7.10.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" + "@babel/helper-plugin-utils": "^7.18.9" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.9" } }, - "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, "requires": { - "@babel/compat-data": "^7.10.4", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", + "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz", - "integrity": "sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" - } - }, - "@babel/helper-define-map": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz", - "integrity": "sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.4", - "lodash": "^4.17.13" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", - "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "requires": { - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" } }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "@babel/runtime": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "regenerator-runtime": "^0.13.4" } }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" } }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" + "@babel/traverse": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", + "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz", - "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==", + "@babel/types": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" } }, - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true }, - "@babel/helper-module-transforms": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz", - "integrity": "sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q==", + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4", - "lodash": "^4.17.13" + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true }, - "@babel/helper-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.4.tgz", - "integrity": "sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ==", + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", "dev": true, "requires": { - "lodash": "^4.17.13" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } } }, - "@babel/helper-remap-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", - "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "dev": true, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", "requires": { - "@babel/types": "^7.10.4" + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" } }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" }, - "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", - "dev": true, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" } }, - "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", - "dev": true, + "@npmcli/move-file": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", + "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "mkdirp": "^1.0.4" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } } }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "@nuxt/friendly-errors-webpack-plugin": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@nuxt/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.5.2.tgz", + "integrity": "sha512-LLc+90lnxVbpKkMqk5z1EWpXoODhc6gRkqqXJCInJwF5xabHAE7biFvbULfvTRmtaTzAaP8IV4HQDLUgeAUTTw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "chalk": "^2.3.2", + "consola": "^2.6.0", + "error-stack-parser": "^2.0.0", + "string-width": "^4.2.3" }, "dependencies": { "chalk": { @@ -11580,5941 +9466,2488 @@ "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz", - "integrity": "sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg==", + "@symfony/webpack-encore": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@symfony/webpack-encore/-/webpack-encore-3.0.0.tgz", + "integrity": "sha512-59BTz9glnvcGSFeTaYWtNzgfA26wLwh0TSbVQk8I9hmCnFYOFp+LgnUN+T4MyXA4WWg6+DAFIf+CuOD3o1XwoA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "@babel/core": "^7.17.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/preset-env": "^7.16.0", + "@nuxt/friendly-errors-webpack-plugin": "^2.5.1", + "assets-webpack-plugin": "7.0.*", + "babel-loader": "^8.2.5", + "chalk": "^4.0.0", + "clean-webpack-plugin": "^4.0.0", + "css-loader": "^6.7.0", + "css-minimizer-webpack-plugin": "^4.0.0", + "fast-levenshtein": "^3.0.0", + "mini-css-extract-plugin": "^2.6.0", + "pkg-up": "^3.1.0", + "pretty-error": "^4.0.0", + "resolve-url-loader": "^5.0.0", + "semver": "^7.3.2", + "style-loader": "^3.3.0", + "sync-rpc": "^1.3.6", + "terser-webpack-plugin": "^5.3.0", + "tmp": "^0.2.1", + "webpack": "^5.72", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.8.0", + "yargs-parser": "^21.0.0" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@types/connect": "*", + "@types/node": "*" } }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "@types/node": "*" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@types/node": "*" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@types/express-serve-static-core": "*", + "@types/node": "*" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", + "@types/eslint": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@types/estree": "*", + "@types/json-schema": "*" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz", - "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" + "@types/eslint": "*", + "@types/estree": "*" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz", - "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==", + "@types/express-serve-static-core": { + "version": "4.17.30", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", + "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@types/minimatch": "*", + "@types/node": "*" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", + "@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@types/node": "*" } }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/node": { + "version": "14.0.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz", + "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@types/express": "*" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", + "@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@types/mime": "*", + "@types/node": "*" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@types/node": "*" } }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "@types/webpack": { + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.0.tgz", + "integrity": "sha512-8cP0CzcxUiFuA9xGJkfeVpqmWTk9nx6CWwamRGCj95ph1SmlRRk9KlCZ6avhCbZd4L68LvYT6l1kpdEnQXrF8w==", "dev": true, + "optional": true, + "peer": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@types/node": "*", + "tapable": "^2.2.0", + "webpack": "^5" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@types/node": "*" } }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@xtuc/ieee754": "^1.2.0" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@xtuc/long": "4.2.2" } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz", - "integrity": "sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A==", + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "lodash": "^4.17.13" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", + "@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "requires": {} }, - "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", + "@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "envinfo": "^7.7.3" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", + "@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } + "requires": {} }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } + "requires": {} }, - "@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", + "adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" } }, - "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", - "dev": true, + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, - "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", - "dev": true, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz", - "integrity": "sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA==", + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" + "color-convert": "^1.9.0" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz", - "integrity": "sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ==", + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" + "array-uniq": "^1.0.1" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true + }, + "assets-webpack-plugin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/assets-webpack-plugin/-/assets-webpack-plugin-7.0.0.tgz", + "integrity": "sha512-DMZ9r6HFxynWeONRMhSOFTvTrmit5dovdoUKdJgCG03M6CC7XiwNImPH+Ad1jaVrQ2n59e05lBhte52xPt4MSA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "camelcase": "^6.0.0", + "escape-string-regexp": "^4.0.0", + "lodash": "^4.17.20" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", + "babel-loader": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" } }, - "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "object.assign": "^4.1.0" } }, - "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", + "babel-plugin-polyfill-corejs2": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", + "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.2", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "@babel/plugin-transform-parameters": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz", - "integrity": "sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ==", + "babel-plugin-polyfill-corejs3": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", + "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", + "babel-plugin-polyfill-regenerator": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", + "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-define-polyfill-provider": "^0.3.2" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, - "@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", + "bonjour-service": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.13.tgz", + "integrity": "sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, - "@babel/plugin-transform-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz", - "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==", - "dev": true, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "bootstrap": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.0.tgz", + "integrity": "sha512-Z93QoXvodoVslA+PWNdk23Hze4RBYIkpb5h8I2HY2Tu2h7A0LpAgLcyrhrSUyo2/Oxm2l1fRZPs1e5hnxnliXA==" + }, + "bootstrap-select": { + "version": "1.13.18", + "resolved": "https://registry.npmjs.org/bootstrap-select/-/bootstrap-select-1.13.18.tgz", + "integrity": "sha512-V1IzK4rxBq5FrJtkzSH6RmFLFBsjx50byFbfAf8jYyXROWs7ZpprGjdHeoyq2HSsHyjJhMMwjsQhRoYAfxCGow==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", - "dev": true, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" + "fill-range": "^7.0.1" } }, - "@babel/plugin-transform-template-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz", - "integrity": "sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ==", + "browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", + "caniuse-lite": { + "version": "1.0.30001378", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz", + "integrity": "sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/preset-env": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz", - "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.10.4", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.10.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.10.4", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.10.4", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.10.4", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, - "@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" } }, - "@babel/runtime": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", - "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.4" + "tslib": "^1.9.0" } }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "clean-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "del": "^4.1.1" } }, - "@babel/traverse": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", - "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, - "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" + "color-name": "1.1.3" } }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", - "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" - } + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" - } - }, - "@npmcli/move-file": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", - "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", - "requires": { - "mkdirp": "^1.0.4" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "@symfony/webpack-encore": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/@symfony/webpack-encore/-/webpack-encore-0.30.2.tgz", - "integrity": "sha512-fJGPnNJ69/FrRcIRluqk5grO4R0ZmXU1n3TyplOjjXv9nuLTA8ljvhk/sMAs/WMri4vb1ZdWwcT5sPw1pmYZdA==", - "dev": true, - "requires": { - "@babel/core": "^7.7.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/preset-env": "^7.4.0", - "assets-webpack-plugin": "^3.9.7", - "babel-loader": "^8.0.0", - "chalk": "^4.0.0", - "clean-webpack-plugin": "^3.0.0", - "css-loader": "^3.5.2", - "fast-levenshtein": "^2.0.6", - "file-loader": "^6.0.0", - "friendly-errors-webpack-plugin": "^2.0.0-beta.1", - "loader-utils": "^2.0.0", - "mini-css-extract-plugin": ">=0.4.0 <0.4.3", - "optimize-css-assets-webpack-plugin": "^5.0.1", - "pkg-up": "^3.1.0", - "pretty-error": "^2.1.1", - "resolve-url-loader": "^3.0.1", - "semver": "^7.3.2", - "style-loader": "^1.1.3", - "terser-webpack-plugin": "^1.1.0", - "tmp": "^0.2.1", - "webpack": "^4.36.0", - "webpack-cli": "^3.0.0", - "webpack-dev-server": "^3.1.14", - "webpack-manifest-plugin": "^2.0.2", - "webpack-sources": "^1.3.0", - "yargs-parser": "^18.1.3" - } - }, - "@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", - "dev": true - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "14.0.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz", - "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==", - "dev": true - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/tapable": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", - "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.3.tgz", - "integrity": "sha512-KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@types/webpack": { - "version": "4.41.19", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.19.tgz", - "integrity": "sha512-hBryCwAJhqf7MiYNnsr6UsPVQHF4+sUnXVG9MTVAJFtX8vJoxc2rPFcWEAUVuBOCxfTkEY5TPc7RYUer7EXTEQ==", - "dev": true, - "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@types/webpack-sources": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-1.4.0.tgz", - "integrity": "sha512-c88dKrpSle9BtTqR6ifdaxu1Lvjsl3C5OsfvuUbUwdXymshv1TkufUAXBajCCUM/f/TmnkZC/Esb03MinzSiXQ==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - }, - "adjust-sourcemap-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", - "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", - "dev": true, - "requires": { - "assert": "1.4.1", - "camelcase": "5.0.0", - "loader-utils": "1.2.3", - "object-path": "0.11.4", - "regex-parser": "2.2.10" - }, - "dependencies": { - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - } - } - }, - "aggregate-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", - "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.0.tgz", - "integrity": "sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw==" - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", - "dev": true - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - } - }, - "assets-webpack-plugin": { - "version": "3.9.12", - "resolved": "https://registry.npmjs.org/assets-webpack-plugin/-/assets-webpack-plugin-3.9.12.tgz", - "integrity": "sha512-iqXT/CtP013CO+IZJG7f4/KmUnde+nn6FSksAhrGRbT1GODsFU3xocP6A5NkTFoey3XOI9n1ZY0QmX/mY74gNA==", - "dev": true, - "requires": { - "camelcase": "5.3.1", - "escape-string-regexp": "2.0.0", - "lodash": "4.17.15", - "mkdirp": "0.5.3" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "dev": true, - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true, - "optional": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "bootstrap": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.5.0.tgz", - "integrity": "sha512-Z93QoXvodoVslA+PWNdk23Hze4RBYIkpb5h8I2HY2Tu2h7A0LpAgLcyrhrSUyo2/Oxm2l1fRZPs1e5hnxnliXA==" - }, - "bootstrap-select": { - "version": "1.13.18", - "resolved": "https://registry.npmjs.org/bootstrap-select/-/bootstrap-select-1.13.18.tgz", - "integrity": "sha512-V1IzK4rxBq5FrJtkzSH6RmFLFBsjx50byFbfAf8jYyXROWs7ZpprGjdHeoyq2HSsHyjJhMMwjsQhRoYAfxCGow==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", - "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001094", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001094.tgz", - "integrity": "sha512-ufHZNtMaDEuRBpTbqD93tIQnngmJ+oBknjvr0IbFympSdtFpAUFmNv4mVKbb53qltxFx0nK3iy32S9AqkLzUNA==", - "dev": true - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chokidar": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", - "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "optional": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", - "dev": true, - "requires": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "dev": true, - "requires": { - "arity-n": "^1.0.4" - } - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-webpack-plugin": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz", - "integrity": "sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA==", - "requires": { - "cacache": "^15.0.4", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^3.0.1", - "schema-utils": "^2.7.0", - "serialize-javascript": "^4.0.0", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "cacache": { - "version": "15.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.4.tgz", - "integrity": "sha512-YlnKQqTbD/6iyoJvEY3KJftjrdBYroCbxxYXzhOzsFLWlp6KX4BOlEf4mTx0cMUfVaTS3ENL2QtDWeRYoGLkkw==", - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.0", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "p-limit": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.1.tgz", - "integrity": "sha512-mw/p92EyOzl2MhauKodw54Rx5ZK4624rNfgNaBguFZkHzyUG9WsDzFF5/yQVEJinbJDdP4jEfMN+uBquiGnaLg==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", - "requires": { - "minipass": "^3.1.1" - } - } - } - }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "dev": true, - "requires": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dev": true, - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, - "css-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", - "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^6.3.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-what": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", - "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true - }, - "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", - "dev": true, - "requires": { - "css-tree": "1.0.0-alpha.39" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", - "dev": true, - "requires": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "datatables.net": { - "version": "1.10.21", - "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.21.tgz", - "integrity": "sha512-/bSZtxmf3GTpYcvEmwZ8q26I1yhSx8qklR2B+s1K8+/51UW/zc2zTYwJMqr/Z+iCYixAc00ildj4g2x0Qamolw==", - "requires": { - "jquery": ">=1.7" - } - }, - "datatables.net-buttons": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-1.6.2.tgz", - "integrity": "sha512-0sKWBBwtCCECRc4T+fUDhFCJv9miLPrB90QsVYq4ep0hIMuWiW76+eCdykZq5yd/3m7K1O+ryt9c7PahBDf91g==", - "requires": { - "datatables.net": "^1.10.15", - "jquery": ">=1.7" - } - }, - "datatables.net-buttons-dt": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/datatables.net-buttons-dt/-/datatables.net-buttons-dt-1.6.2.tgz", - "integrity": "sha512-CEEhXLqLwJP17RktzdZBN142dvILUj0OnlFtCO1hl4YjFz8ttYGc6Qfi/OhU2GcH0z9sW2bcYKbvAZe2/Uiazg==", - "requires": { - "datatables.net-buttons": "1.6.2", - "datatables.net-dt": "^1.10.15", - "jquery": ">=1.7" - } - }, - "datatables.net-dt": { - "version": "1.10.21", - "resolved": "https://registry.npmjs.org/datatables.net-dt/-/datatables.net-dt-1.10.21.tgz", - "integrity": "sha512-P89PgkhVCB6shP0CbigmB1Z812yfdfhvAbUdg08mLuF7tuvLFPQC9F+WIV30Hj9mgMsPALWAEJEYAA3aJjuqIA==", - "requires": { - "datatables.net": "1.10.21", - "jquery": ">=1.7" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.488", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.488.tgz", - "integrity": "sha512-NReBdOugu1yl8ly+0VDtiQ6Yw/1sLjnvflWq0gvY1nfUXU2PbA+1XAVuEb7ModnwL/MfUPjby7e4pAFnSHiy6Q==", - "dev": true - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz", - "integrity": "sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", - "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", - "dev": true, - "requires": { - "stackframe": "^1.1.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz", - "integrity": "sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", - "dev": true - }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", - "dev": true - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "file-loader": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.0.0.tgz", - "integrity": "sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.5" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "follow-redirects": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz", - "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "friendly-errors-webpack-plugin": { - "version": "2.0.0-beta.2", - "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.0.0-beta.2.tgz", - "integrity": "sha512-0x14cdjGx5q0yZc3Cy9sgAF/szWUFx1WxH/IX88UuKbM5Z+7FCk/Z/6hFbXMcz3qqK0mp7WrHKX3cxhUAL2aqQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "error-stack-parser": "^2.0.2", - "string-width": "^2.0.0", - "strip-ansi": "^5" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - }, - "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - } - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "h2-invent-apps": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/h2-invent-apps/-/h2-invent-apps-2.4.0.tgz", - "integrity": "sha512-oa3e4nQnCpRdQQwtxsi0CukUCnlxYZ/lm6kpIChf7jmAEjxLVILx69yLavR0v08h1GhOYL5GFQAciiuZHxdSlg==", - "requires": { - "toastr": "^2.1.4" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, - "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", - "dev": true - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "dev": true, - "requires": { - "postcss": "^7.0.14" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" + "mime-db": ">= 1.43.0 < 2" } }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { - "loose-envify": "^1.0.0" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } } }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", "dev": true }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "safe-buffer": "5.2.1" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true } } }, - "is-arguments": { + "content-type": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, - "optional": true, "requires": { - "binary-extensions": "^2.0.0" + "safe-buffer": "~5.1.1" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, + "copy-webpack-plugin": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz", + "integrity": "sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA==", "requires": { - "kind-of": "^3.0.2" + "cacache": "^15.0.4", + "fast-glob": "^3.2.4", + "find-cache-dir": "^3.3.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.1", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "p-limit": "^3.0.1", + "schema-utils": "^2.7.0", + "serialize-javascript": "^4.0.0", + "webpack-sources": "^1.4.3" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "cacache": { + "version": "15.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.4.tgz", + "integrity": "sha512-YlnKQqTbD/6iyoJvEY3KJftjrdBYroCbxxYXzhOzsFLWlp6KX4BOlEf4mTx0cMUfVaTS3ENL2QtDWeRYoGLkkw==", + "requires": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "p-limit": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.1.tgz", + "integrity": "sha512-mw/p92EyOzl2MhauKodw54Rx5ZK4624rNfgNaBguFZkHzyUG9WsDzFF5/yQVEJinbJDdP4jEfMN+uBquiGnaLg==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "requires": { - "is-buffer": "^1.1.5" + "minipass": "^3.1.1" } } } }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "core-js": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", "dev": true }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "core-js-compat": { + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.1.tgz", + "integrity": "sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "browserslist": "^4.21.3", + "semver": "7.0.0" }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true } } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "requires": { - "is-extglob": "^2.1.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "css-declaration-sorter": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz", + "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==", + "dev": true, + "requires": {} + }, + "css-loader": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "icss-utils": "^5.1.0", + "postcss": "^8.4.7", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "lru-cache": "^6.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "css-minimizer-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA==", "dev": true, "requires": { - "path-is-inside": "^1.0.2" + "cssnano": "^5.1.8", + "jest-worker": "^27.5.1", + "postcss": "^8.4.13", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "requires": { - "isobject": "^3.0.1" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" } }, - "is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "cssnano": { + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", + "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", "dev": true, "requires": { - "html-comment-regex": "^1.1.0" + "cssnano-preset-default": "^5.2.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" } }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "cssnano-preset-default": { + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", + "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.3.0", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.2", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.6", + "postcss-merge-rules": "^5.1.2", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.3", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "jquery": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", - "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "requires": {} }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "css-tree": "^1.1.2" } }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "datatables.net": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.12.1.tgz", + "integrity": "sha512-e6XAMUoV41JdQPS/r9YRfRcmTPcCVvyZbWI+xog1Zg+kjVliMQbEkvWK5XFItmi64Cvwg+IqsZbTUJ1KSY3umA==", "requires": { - "minimist": "^1.2.5" + "jquery": ">=1.7" } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, + "datatables.net-buttons": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-1.6.2.tgz", + "integrity": "sha512-0sKWBBwtCCECRc4T+fUDhFCJv9miLPrB90QsVYq4ep0hIMuWiW76+eCdykZq5yd/3m7K1O+ryt9c7PahBDf91g==", "requires": { - "graceful-fs": "^4.1.6" + "datatables.net": "^1.10.15", + "jquery": ">=1.7" } }, - "jszip": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", - "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", + "datatables.net-buttons-dt": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/datatables.net-buttons-dt/-/datatables.net-buttons-dt-1.6.2.tgz", + "integrity": "sha512-CEEhXLqLwJP17RktzdZBN142dvILUj0OnlFtCO1hl4YjFz8ttYGc6Qfi/OhU2GcH0z9sW2bcYKbvAZe2/Uiazg==", "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } + "datatables.net-buttons": "1.6.2", + "datatables.net-dt": "^1.10.15", + "jquery": ">=1.7" } }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dev": true, + "datatables.net-dt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/datatables.net-dt/-/datatables.net-dt-1.12.1.tgz", + "integrity": "sha512-HYsHbSYqOqlgsgjKMH/kkCB5455t51GmmtXRxgnDMRbjPLEIKo5CZmAlUe5mdD/RVPRtAUaj5K3SDlkEZ1bUmw==", "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" + "datatables.net": ">=1.11.3", + "jquery": ">=1.7" } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "leven": "^3.1.0" + "ms": "2.1.2" } }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, "requires": { - "immediate": "~3.0.5" + "execa": "^5.0.0" } }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, - "loglevel": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", - "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dns-packet": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "@leichtgewicht/ip-codec": "^2.0.1" } }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, "requires": { - "yallist": "^3.0.2" + "utila": "~0.4" } }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "requires": { - "object-visit": "^1.0.0" + "domelementtype": "^2.2.0" } }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, - "mdbootstrap": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/mdbootstrap/-/mdbootstrap-4.19.1.tgz", - "integrity": "sha512-vzYd7UQ0H1tyJfDqCYwsAv+sxol/xRkJP/5FMhcdW3ZbN9xUnmWiSPHx3A6ddGxdOQbfJTWxT3G8M+I++Qdk6w==" + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "electron-to-chromium": { + "version": "1.4.222", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.222.tgz", + "integrity": "sha512-gEM2awN5HZknWdLbngk4uQCVfhucFAfFzuchP3wM3NN6eow1eDU0dFy2kts43FB20ZfhVFF0jmFSTb1h5OhyIg==", "dev": true }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "stackframe": "^1.3.4" } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "mime-db": "1.44.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" } }, - "mini-css-extract-plugin": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.2.tgz", - "integrity": "sha512-ots7URQH4wccfJq9Ssrzu2+qupbncAce4TmTzunI9CIwlQMp2XI+WNUw6xWF6MMAGAm1cbUVINrSjATaVMyKXg==", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" + "estraverse": "^5.2.0" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true } } }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dev": true, "requires": { - "yallist": "^4.0.0" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true } } }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", "requires": { - "minipass": "^3.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" } }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", + "dev": true, "requires": { - "minipass": "^3.0.0" + "fastest-levenshtein": "^1.0.7" } }, - "minipass-pipeline": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz", - "integrity": "sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==", + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", "requires": { - "minipass": "^3.0.0" + "reusify": "^1.0.4" } }, - "minizlib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", - "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } + "websocket-driver": ">=0.5.1" } }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "to-regex-range": "^5.0.1" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true } } }, - "mkdirp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", - "dev": true, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "requires": { - "minimist": "^1.2.5" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, - "moment": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", - "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "locate-path": "^3.0.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", "dev": true }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "minipass": "^3.0.0" } }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", "dev": true }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", "dev": true }, - "node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - } + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", "dev": true, "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true } } }, - "node-releases": { - "version": "1.1.58", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz", - "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==", + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", + "dev": true }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "h2-invent-apps": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/h2-invent-apps/-/h2-invent-apps-2.4.0.tgz", + "integrity": "sha512-oa3e4nQnCpRdQQwtxsi0CukUCnlxYZ/lm6kpIChf7jmAEjxLVILx69yLavR0v08h1GhOYL5GFQAciiuZHxdSlg==", + "requires": { + "toastr": "^2.1.4" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "path-key": "^2.0.0" + "function-bind": "^1.1.1" } }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "get-intrinsic": "^1.1.1" } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "safe-buffer": "~5.1.0" } } } }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", "dev": true }, - "object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", "dev": true }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=", + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { - "isobject": "^3.0.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" } }, - "object.entries": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", - "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "has": "^1.0.3" + "safer-buffer": ">= 2.1.2 < 3" } }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "isobject": "^3.0.1" + "binary-extensions": "^2.0.0" } }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", "has": "^1.0.3" } }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "requires": { - "ee-first": "1.1.1" + "is-extglob": "^2.1.1" } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, "requires": { - "wrappy": "1" + "is-path-inside": "^2.1.0" } }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "requires": { - "is-wsl": "^1.1.0" + "path-is-inside": "^1.0.2" } }, - "optimize-css-assets-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "cssnano": "^4.1.10", - "last-call-webpack-plugin": "^3.0.0" + "isobject": "^3.0.1" } }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { - "url-parse": "^1.4.3" + "is-docker": "^2.0.0" } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "requires": { - "p-try": "^2.0.0" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } + "jquery": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", + "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dev": true, - "requires": { - "retry": "^0.12.0" - } + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, + "jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" }, "dependencies": { "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -17529,2059 +11962,1563 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "immediate": "~3.0.5" } }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", "dev": true }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "mdbootstrap": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/mdbootstrap/-/mdbootstrap-4.19.1.tgz", + "integrity": "sha512-vzYd7UQ0H1tyJfDqCYwsAv+sxol/xRkJP/5FMhcdW3ZbN9xUnmWiSPHx3A6ddGxdOQbfJTWxT3G8M+I++Qdk6w==" }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "memfs": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", + "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", "dev": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "fs-monkey": "^1.0.3" } }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "pinkie": "^2.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true }, - "portfinder": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", - "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "mime-db": "1.52.0" } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "mini-css-extract-plugin": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", + "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "schema-utils": "^4.0.0" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } } } }, - "postcss-calc": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", - "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", - "dev": true, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "minipass": "^3.0.0" } }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, + "minipass-pipeline": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz", + "integrity": "sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==", "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "minipass": "^3.0.0" } }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dev": true, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, "requires": { - "postcss": "^7.0.0" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" } }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "node-notifier": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", "dev": true, "requires": { - "postcss": "^7.0.0" + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" } }, - "postcss-discard-empty": { + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "postcss": "^7.0.0" + "path-key": "^3.0.0" } }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "requires": { - "postcss": "^7.0.0" + "boolbase": "^1.0.0" } }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" } }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } + "ee-first": "1.1.1" } }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dev": true, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "wrappy": "1" } }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "mimic-fn": "^2.1.0" } }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } + "p-try": "^2.0.0" } }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "postcss": "^7.0.5" + "p-limit": "^2.0.0" } }, - "postcss-modules-local-by-default": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz", - "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==", + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.16", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.0" + "@types/retry": "0.12.0", + "retry": "^0.13.1" } }, - "postcss-modules-scope": { + "p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, - "postcss-modules-values": { + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "dev": true, - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "requires": { - "postcss": "^7.0.0" + "pinkie": "^2.0.0" } }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dev": true, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "find-up": "^4.0.0" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" } } }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "find-up": "^3.0.0" } }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "postcss": { + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", "dev": true, "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" } }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" } }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", "dev": true, "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" } }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "postcss-convert-values": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", + "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "browserslist": "^4.20.3", + "postcss-value-parser": "^4.2.0" } }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } + "requires": {} }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } + "requires": {} }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } + "requires": {} }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } + "requires": {} }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "postcss-merge-longhand": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", + "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", "dev": true, "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.0" } }, - "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "postcss-merge-rules": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", + "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", "dev": true, "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" } }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dev": true, "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "postcss-value-parser": "^4.2.0" } }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dev": true, "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" } }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "postcss-minify-params": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", + "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", "dev": true, "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" + "browserslist": "^4.16.6", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" } }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dev": true, "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" + "postcss-selector-parser": "^6.0.5" } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" } }, - "pump": { + "postcss-modules-scope": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "postcss-selector-parser": "^6.0.4" } }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } + "icss-utils": "^5.0.0" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "requires": {} }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dev": true, "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "postcss-value-parser": "^4.2.0" } }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - } + "postcss-value-parser": "^4.2.0" } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "postcss-value-parser": "^4.2.0" } }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "dev": true, - "optional": true, "requires": { - "picomatch": "^2.2.1" + "postcss-value-parser": "^4.2.0" } }, - "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "dev": true, "requires": { - "regenerate": "^1.4.0" + "postcss-value-parser": "^4.2.0" } }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "postcss-normalize-unicode": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", + "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", "dev": true, "requires": { - "@babel/runtime": "^7.8.4" + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" } }, - "regex-parser": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", - "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "postcss-value-parser": "^4.2.0" } }, - "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dev": true, "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" } }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "postcss-reduce-initial": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", + "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", "dev": true, "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "dev": true, "requires": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "postcss-value-parser": "^4.2.0" } }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, "requires": { - "path-parse": "^1.0.6" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" } }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "dev": true, "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - } + "postcss-selector-parser": "^6.0.5" } }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "resolve-url-loader": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", - "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "2.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "rework": { + "promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "dependencies": { - "convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true } } }, - "rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", - "dev": true - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "requires": { - "glob": "^7.1.3" + "side-channel": "^1.0.4" } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "safe-buffer": "^5.1.0" } }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "requires": { - "aproba": "^1.1.1" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + } } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "ret": "~0.1.10" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "resolve": "^1.9.0" } }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, - "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", "dev": true, "requires": { - "node-forge": "0.9.0" + "regenerate": "^1.4.2" } }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", "dev": true }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } + "@babel/runtime": "^7.8.4" } }, - "serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "regexpu-core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", + "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", "dev": true, "requires": { - "randombytes": "^2.1.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" } }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dev": true, "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "jsesc": "~0.5.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true } } }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "resolve-from": "^5.0.0" } }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } + "glob": "^7.1.3" } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", + "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", + "dev": true, + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "requires": { - "kind-of": "^3.2.0" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, - "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.4.0", - "websocket-driver": "0.6.5" + "randombytes": "^2.1.0" } }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, "requires": { - "websocket-driver": ">=0.5.1" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true } } }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" } }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "kind-of": "^6.0.2" } }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "shebang-regex": "^3.0.0" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", "dev": true }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "stackframe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", - "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", - "dev": true + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" } }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" } }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, "string_decoder": { @@ -19602,101 +13539,46 @@ } }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } + "ansi-regex": "^5.0.1" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, "style-loader": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", - "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.6" - } + "requires": {} }, "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", + "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" } }, "summernote": { @@ -19705,63 +13587,59 @@ "integrity": "sha512-VlwBaNm9vSYMYXvO2f3UCUmY0Gm8jxLcBn+D08aX3pKs4x2vAoyQ4DcDQ6D+PchQiLrf86AGQVfVu56F4aP3ug==" }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + }, + "sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "requires": { + "get-port": "^3.1.0" } }, "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, "tar": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz", - "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^3.0.0", - "minizlib": "^2.1.0", + "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, @@ -19784,92 +13662,47 @@ } }, "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", "dev": true, "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "source-map-support": "~0.5.20" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true } } }, "terser-webpack-plugin": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", - "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.5.tgz", + "integrity": "sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==", "dev": true, "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^3.1.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" }, "dependencies": { "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } } } @@ -19880,21 +13713,6 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, "tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -19915,58 +13733,18 @@ } } }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, "toastr": { @@ -19978,9 +13756,9 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "tslib": { @@ -19989,18 +13767,6 @@ "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", "dev": true }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -20011,62 +13777,32 @@ "mime-types": "~2.1.24" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "uniqs": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, "unique-filename": { @@ -20085,70 +13821,22 @@ "imurmurhash": "^0.1.4" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", "dev": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } + "escalade": "^3.1.1", + "picocolors": "^1.0.0" } }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -20157,114 +13845,33 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, "utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", "dev": true }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true }, "vis-network": { @@ -20272,163 +13879,14 @@ "resolved": "https://registry.npmjs.org/vis-network/-/vis-network-7.8.0.tgz", "integrity": "sha512-nQLBaMZODkeC2T6DEcczuKVtC2f8IZtOeNlq3U3AOvrh8r8ippS3qn/vUafiEjjsAx1fGCe03icTs0WVL27iKw==" }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, "watchpack": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", - "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", - "dev": true, - "requires": { - "chokidar": "^3.4.0", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" - } - }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, - "optional": true, "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" } }, "wbuf": { @@ -20441,419 +13899,235 @@ } }, "webpack": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", - "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.1", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } + }, + "webpack-sources": { + "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-cli": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", - "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", "dev": true, "requires": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" } }, "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", "dev": true, "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" + "schema-utils": "^4.0.0" }, "dependencies": { - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true - } - } - }, - "webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "fast-deep-equal": "^3.1.3" } }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + } + } + }, + "webpack-dev-server": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.10.0.tgz", + "integrity": "sha512-7dezwAs+k6yXVFZ+MaL8VnE+APobiO3zvpp3rBHe/HmWQ+avwh0Q3d0xxacOiBybZZ3syTZw9HXzpa3YNbAZDQ==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "fast-deep-equal": "^3.1.3" } }, - "schema-utils": { + "json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "glob": "^7.1.3" } }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } } } }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-manifest-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz", - "integrity": "sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==", + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, "requires": { - "fs-extra": "^7.0.0", - "lodash": ">=3.5 <5", - "object.entries": "^1.1.0", - "tapable": "^1.0.0" + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" } }, "webpack-notifier": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.8.0.tgz", - "integrity": "sha512-I6t76NoPe5DZCCm5geELmDV2wlJ89LbU425uN6T2FG8Ywrrt1ZcUMz6g8yWGNg4pttqTPFQJYUPjWAlzUEQ+cQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", + "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", "dev": true, "requires": { - "node-notifier": "^5.1.2", - "object-assign": "^4.1.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" } }, "webpack-sources": { @@ -20863,21 +14137,16 @@ "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, @@ -20888,134 +14157,48 @@ "dev": true }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } }, - "which-module": { + "wildcard": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true + "requires": {} }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true } } } diff --git a/package.json b/package.json index 793dcdaf..7b64a1e3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "devDependencies": { - "@symfony/webpack-encore": "^0.30.0", + "@symfony/webpack-encore": "^3.0.0", "core-js": "^3.0.0", "regenerator-runtime": "^0.13.2", "webpack-notifier": "^1.6.0" diff --git a/public/index.php b/public/index.php index 0e303701..f85d7748 100644 --- a/public/index.php +++ b/public/index.php @@ -1,27 +1,10 @@ handle($request); -$response->send(); -$kernel->terminate($request, $response); +return function (array $context) { + return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']); +}; diff --git a/src/Command/ConnectDefaultToTeamsCommand.php b/src/Command/ConnectDefaultToTeamsCommand.php index d006d897..84ef8f6d 100644 --- a/src/Command/ConnectDefaultToTeamsCommand.php +++ b/src/Command/ConnectDefaultToTeamsCommand.php @@ -16,11 +16,11 @@ class ConnectDefaultToTeamsCommand extends Command { protected static $defaultName = 'app:connect:defaultToTeams'; - protected static $defaultDescription = 'This Command converts default attributes which can be selected in the dropdown field. ONLY USE ONCE. MAKE A BACKUP OF THE DATABASE BEFOE'; + protected static $defaultDescription = 'This Command converts default attributes which can be selected in the dropdown field. ONLY USE ONCE. MAKE A BACKUP OF THE DATABASE BEFORE EXECUTING.'; private $connectDefaultService; private $em; - public function __construct($name = null, ConnectDefaultToTeamsService $connectDefaultToTeamsService, EntityManagerInterface $entityManager) + public function __construct(ConnectDefaultToTeamsService $connectDefaultToTeamsService, EntityManagerInterface $entityManager, $name = null) { parent::__construct($name); $this->connectDefaultService = $connectDefaultToTeamsService; @@ -38,19 +38,19 @@ protected function execute(InputInterface $input, OutputInterface $output): int { $io = new SymfonyStyle($input, $output); $teams = $this->em->getRepository(Team::class)->findAll(); - $io->success(sprintf('We connect %d Teams',sizeof($teams))); + $io->success(sprintf('We will connect %d Teams', sizeof($teams))); $section1 = $output->section(); $section2 = $output->section(); $progressBar = new ProgressBar($section1, sizeof($teams)); $progressBar->start(); foreach ($teams as $data) { - $this->connectDefaultService->connectDefault($data,$section2); + $this->connectDefaultService->connectDefault($data, $section2); $progressBar->advance(); } $progressBar->finish(); - $io->success('We '); + $io->success('Success'); return Command::SUCCESS; } diff --git a/src/Command/MigrateDefaultTeamCommand.php b/src/Command/MigrateDefaultTeamCommand.php index eca2024a..9243b128 100644 --- a/src/Command/MigrateDefaultTeamCommand.php +++ b/src/Command/MigrateDefaultTeamCommand.php @@ -15,7 +15,7 @@ class MigrateDefaultTeamCommand extends Command protected static $defaultName = 'app:migrate:defaultTeam'; private $em; - public function __construct(string $name = null, EntityManagerInterface $entityManager) + public function __construct( EntityManagerInterface $entityManager,string $name = null) { parent::__construct($name); $this->em = $entityManager; diff --git a/src/Command/TeamListCommand.php b/src/Command/TeamListCommand.php new file mode 100644 index 00000000..b36af715 --- /dev/null +++ b/src/Command/TeamListCommand.php @@ -0,0 +1,46 @@ +setDescription(self::$defaultDescription); + } + + public function __construct(EntityManagerInterface $entityManager,string $name = null) + { + parent::__construct($name); + $this->em = $entityManager; + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $teams = $this->em->getRepository(Team::class)->findAll(); + foreach ($teams as $team) { + $teamInfo = $team->getName(); + if ($team->getKeycloakGroup()) { + $teamInfo .= ' (' . $team->getKeycloakGroup() . ')'; + } + $output->writeln($teamInfo); + } + + return Command::SUCCESS; + } +} diff --git a/src/Command/TeamNewCommand.php b/src/Command/TeamNewCommand.php index 2aae95e8..60b1c4e1 100644 --- a/src/Command/TeamNewCommand.php +++ b/src/Command/TeamNewCommand.php @@ -26,7 +26,7 @@ protected function configure() ->setDescription(self::$defaultDescription); } - public function __construct(string $name = null, EntityManagerInterface $entityManager, ConnectDefaultToTeamsService $connectDefaultToTeamsService) + public function __construct(EntityManagerInterface $entityManager, ConnectDefaultToTeamsService $connectDefaultToTeamsService, string $name = null) { parent::__construct($name); $this->em = $entityManager; @@ -38,10 +38,13 @@ protected function execute(InputInterface $input, OutputInterface $output): int $io = new SymfonyStyle($input, $output); $helper = $this->getHelper('question'); $team = new Team(); - $question = new Question('Please enter the name of Team: ', 'TestCompany'); + $question = new Question('Team name (identical to keycloak group name if keycloak groups are used): ', 'TestCompany'); $name = $helper->ask($input, $output, $question); $team->setName($name); - $question = new Question('Street: ', 'default'); + $question = new Question('Display name (if different from team name): ', ''); + $keycloakGroup = $helper->ask($input, $output, $question); + $team->setKeycloakGroup($keycloakGroup); + $question = new Question('Street: ', ''); $street = $helper->ask($input, $output, $question); $team->setStrasse($street); $question = new Question('PLZ: ', 'default'); @@ -50,7 +53,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $question = new Question('City: ', 'default'); $city = $helper->ask($input, $output, $question); $team->setStadt($city); - $question = new Question('email: ', 'default'); + $question = new Question('Email: ', 'default'); $email = $helper->ask($input, $output, $question); $team->setEmail($email); $question = new Question('DSB : ', 'default'); @@ -59,24 +62,24 @@ protected function execute(InputInterface $input, OutputInterface $output): int $question = new Question('Phone: ', 'default'); $phone = $helper->ask($input, $output, $question); $team->setTelefon($phone); - $question = new Question('ceo: ', 'default'); + $question = new Question('CEO: ', 'default'); $ceo = $helper->ask($input, $output, $question); $team->setCeo($ceo); - $question = new Question('Signatur which is schown on all emails: ', 'default'); + $question = new Question('Email signature: ', 'default'); $signature = $helper->ask($input, $output, $question); $team->setSignature($signature); - $question = new Question('industry: ', 'default'); + $question = new Question('Industry: ', 'default'); $industry = $helper->ask($input, $output, $question); $team->setIndustry($industry); - $question = new Question('speciality: ', 'default'); - $scpeciality = $helper->ask($input, $output, $question); - $team->setSpecialty($scpeciality); + $question = new Question('Specialty: ', 'default'); + $specialty = $helper->ask($input, $output, $question); + $team->setSpecialty($specialty); $team->setActiv(true); $this->em->persist($team); $this->em->flush(); - $this->connectService->connectDefault($team,$output); + $this->connectService->connectDefault($team, $output); - $io->success(sprintf('We create a new Team with the name %s', $team->getName())); + $io->success(sprintf('We created a new Team with the name %s', $team->getName())); return Command::SUCCESS; } diff --git a/src/Controller/AkademieController.php b/src/Controller/AkademieController.php index dcc98de2..1ce01779 100644 --- a/src/Controller/AkademieController.php +++ b/src/Controller/AkademieController.php @@ -2,43 +2,43 @@ namespace App\Controller; +use App\DataTypes\ParticipationStateTypes; use App\Entity\AkademieBuchungen; +use App\Entity\Participation; +use App\Repository\AkademieBuchungenRepository; use App\Service\SecurityService; +use DateTime; +use Doctrine\ORM\EntityManagerInterface; use Nucleos\DompdfBundle\Wrapper\DompdfWrapper; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Contracts\Translation\TranslatorInterface; +#[Route(path: '/akademie', name: 'akademie')] class AkademieController extends AbstractController { - /** - * @Route("/akademie", name="akademie") - */ - public function index(SecurityService $securityService) - { - $team = $this->getUser()->getAkademieUser(); - if (!$securityService->teamCheck($team)) { - return $this->redirectToRoute('dashboard'); - } - $buchungen = $this->getDoctrine()->getRepository(AkademieBuchungen::class)->findMyBuchungenByUser($this->getUser()); - return $this->render('akademie/index.html.twig', [ - 'buchungen' => $buchungen, - - 'today' => $today = new \DateTime(), - ]); + public function __construct( + private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { } - /** - * @Route("/akademie/kurs", name="akademie_kurs") - */ - public function akademieKurs(Request $request, SecurityService $securityService) + #[Route(path: '/kurs', name: '_kurs')] + public function academyLesson( + Request $request, + SecurityService $securityService, + AkademieBuchungenRepository $academyBillingRepository, + ): Response { $team = $this->getUser()->getAkademieUser(); - - $today = new \DateTime(); - $buchung = $this->getDoctrine()->getRepository(AkademieBuchungen::class)->findOneBy(array('id' => $request->get('kurs'))); + $today = new DateTime(); + $buchung = $academyBillingRepository->find($request->get('kurs')); if (!$securityService->teamCheck($team) || $buchung->getUser() !== $this->getUser()) { return $this->redirectToRoute('akademie'); @@ -50,29 +50,59 @@ public function akademieKurs(Request $request, SecurityService $securityService) } $buchung->setFinishedID(md5(uniqid())); - $em = $this->getDoctrine()->getManager(); - $em->persist($buchung); - $em->flush(); + $this->em->persist($buchung); + $this->em->flush(); return $this->render('akademie/kurs.html.twig', [ 'kurs' => $buchung->getKurs(), 'buchung' => $buchung, ]); } + return $this->redirectToRoute('akademie'); + } + + #[Route(path: '/kurs/zertifikat/{id}', name: '_kurs_zertifikat')] + #[ParamConverter(data: 'billing', class: AkademieBuchungen::class, options: ['mapping' => ['id' => 'id']])] + public function academyLessonCertificate( + AkademieBuchungen $billing, + DompdfWrapper $wrapper, + ): Response + { + if ($billing->getUser() !== $this->getUser()) { + return $this->redirectToRoute('akademie'); + } + + //Abfrage, ob der Kurs abgeschlossen ist + if ($billing->getParticipations()[0]->isPassed()) { + // Retrieve the HTML generated in our twig file + $html = $this->renderView('bericht/zertifikatAkademie.html.twig', [ + 'daten' => $billing, + 'team' => $this->getUser()->getAkademieUser(), + 'user' => $this->getUser(), + ]); + //Generate PDF File for Download + $response = $wrapper->getStreamResponse($html, $this->translator->trans(id: 'certificate', domain: 'academy')); + $response->send(); + + return new Response($this->translator->trans(id: 'pdf.generateSuccessful', domain: 'general')); + } + return $this->redirectToRoute('akademie'); } - /** - * @Route("/akademie/kurs/finish", name="akademie_kurs_finish") - */ - public function akademieKursFinish(Request $request, SecurityService $securityService) + #[Route(path: '/kurs/finish', name: '_kurs_finish')] + public function academyLessonFinish( + Request $request, + SecurityService $securityService, + AkademieBuchungenRepository $academyBillingRepository, + ): Response { $team = $this->getUser()->getAkademieUser(); - $today = new \DateTime(); - $buchung = $this->getDoctrine()->getRepository(AkademieBuchungen::class)->findOneBy(array('finishedID' => $request->get('id'))); + $today = new DateTime(); + $buchung = $academyBillingRepository->findOneBy(['finishedID' => $request->get('id')]); if (!$securityService->teamCheck($team) || $buchung->getUser() !== $this->getUser()) { return $this->redirectToRoute('akademie'); @@ -84,8 +114,7 @@ public function akademieKursFinish(Request $request, SecurityService $securitySe $buchung->setFinishedID(null); $buchung->setBuchungsID(uniqid()); - $em = $this->getDoctrine()->getManager(); - $em->persist($buchung); + $this->em->persist($buchung); if ($buchung->getVorlage()) { $vorlage = $today->modify($buchung->getVorlage()); $newBuchung->setZugewiesen($vorlage); @@ -93,39 +122,30 @@ public function akademieKursFinish(Request $request, SecurityService $securitySe $newBuchung->setFinishedID(null); $newBuchung->setInvitation(false); $newBuchung->setStart(null); - $em->persist($newBuchung); + $this->em->persist($newBuchung); } - $em->flush(); + $this->em->flush(); return $this->redirectToRoute('akademie'); } - /** - * @Route("/akademie/kurs/zertifikat", name="akademie_kurs_zertifikat") - */ - public function akademieKursZertifikat(DompdfWrapper $wrapper, Request $request) + #[Route(path: '', name: '')] + public function index( + SecurityService $securityService, + AkademieBuchungenRepository $bookingRepository + ): Response { - $buchung = $this->getDoctrine()->getRepository(AkademieBuchungen::class)->find($request->get('buchung')); - - if ($buchung->getUser() !== $this->getUser()) { - return $this->redirectToRoute('akademie'); - } - - //Abfrage ob der Kurs abgeschlossen ist - if ($buchung->getAbgeschlossen() === true) { - // Retrieve the HTML generated in our twig file - $html = $this->renderView('bericht/zertifikatAkademie.html.twig', [ - 'daten' => $buchung, - 'team' => $this->getUser()->getAkademieUser(), - 'user' => $this->getUser(), - ]); + $team = $this->getUser()->getAkademieUser(); - //Generate PDF File for Download - $response = $wrapper->getStreamResponse($html, "Zertifikat.pdf"); - $response->send(); - return new Response("The PDF file has been succesfully generated !"); + if (!$securityService->teamCheck($team)) { + return $this->redirectToRoute('dashboard'); } - return $this->redirectToRoute('akademie'); + $bookings = $bookingRepository->findMyBuchungenByUser($this->getUser()); + return $this->render('akademie/index.html.twig', [ + 'buchungen' => $bookings, + 'currentTeam' => $team, + 'today' => new DateTime(), + ]); } } diff --git a/src/Controller/AssignController.php b/src/Controller/AssignController.php index 67cd6b7f..36635b43 100644 --- a/src/Controller/AssignController.php +++ b/src/Controller/AssignController.php @@ -2,117 +2,94 @@ namespace App\Controller; -use App\Entity\AuditTom; -use App\Entity\Datenweitergabe; -use App\Entity\Forms; -use App\Entity\Policies; -use App\Entity\Software; -use App\Entity\Task; -use App\Entity\Vorfall; -use App\Entity\VVT; -use App\Entity\VVTDsfa; +use App\Repository\AuditTomRepository; +use App\Repository\DatenweitergabeRepository; +use App\Repository\FormsRepository; +use App\Repository\PoliciesRepository; +use App\Repository\SoftwareRepository; +use App\Repository\TaskRepository; +use App\Repository\VorfallRepository; +use App\Repository\VVTDsfaRepository; +use App\Repository\VVTRepository; use App\Service\AssignService; +use App\Service\CurrentTeamService; use App\Service\SecurityService; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +#[Route(path: '/assign', name: 'assign')] class AssignController extends AbstractController { - /** - * @Route("/assign", name="assign") - */ - public function index(Request $request, AssignService $assignService) + #[Route(path: '/audit', name: '_audit')] + public function assignAudit( + Request $request, + AssignService $assignService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + AuditTomRepository $auditTomRepository, + ): Response { - - $assignDatenweitergabe = $this->getUser()->getAssignedDatenweitergaben()->toarray(); - $assignVvt = $this->getUser()->getAssignedVvts()->toarray(); - $assignAudit = $this->getUser()->getAssignedAudits()->toarray(); - $assignDsfa = $this->getUser()->getAssignedDsfa()->toarray(); - $assignForms = $this->getUser()->getAssignedForms()->toarray(); - $assignPolicies = $this->getUser()->getAssignedPolicies()->toarray(); - $assignSoftware = $this->getUser()->getAssignedSoftware()->toarray(); - $assignTasks = $this->getDoctrine()->getRepository(Task::class)->findActivByUser($this->getUser()); - - return $this->render('assign/index.html.twig', [ - 'assignDaten' => $assignDatenweitergabe, - 'assignVvt' => $assignVvt, - 'assignAudit' => $assignAudit, - 'assignDsfa' => $assignDsfa, - 'assignForms' => $assignForms, - 'assignPolicies' => $assignPolicies, - 'assignSoftware' => $assignSoftware, - 'assignTasks' => $assignTasks - ]); - } - - /** - * @Route("/assign/vvt", name="assign_vvt") - */ - public function assignVvt(Request $request, AssignService $assignService, SecurityService $securityService) - { - $team = $this->getUser()->getTeam(); - $vvt = $this->getDoctrine()->getRepository(VVT::class)->find($request->get('id')); - if ($securityService->teamDataCheck($vvt, $team) === false) { - return $this->redirectToRoute('vvt'); - } - - $res = $assignService->assignVvt($request, $vvt); - return $this->redirect($request->headers->get('referer')); - } - - /** - * @Route("/assign/audit", name="assign_audit") - */ - public function assignAudit(Request $request, AssignService $assignService, SecurityService $securityService) - { - $team = $this->getUser()->getTeam(); - $audit = $this->getDoctrine()->getRepository(AuditTom::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $audit = $auditTomRepository->find($request->get('id')); if ($securityService->teamDataCheck($audit, $team) === false) { return $this->redirectToRoute('audit_tom'); } - $res = $assignService->assignAudit($request, $audit); + $assignService->assignAudit($request, $audit); return $this->redirect($request->headers->get('referer')); } - /** - * @Route("/assign/daten", name="assign_datenweitergabe") - */ - public function assignDatenweitergabe(Request $request, AssignService $assignService, SecurityService $securityService) + #[Route(path: '/daten', name: '_datenweitergabe')] + public function assignDataTransfer( + Request $request, + AssignService $assignService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + DatenweitergabeRepository $dataTransferRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $daten = $this->getDoctrine()->getRepository(Datenweitergabe::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $daten = $dataTransferRepository->find($request->get('id')); if ($securityService->teamDataCheck($daten, $team) === false) { return $this->redirectToRoute('datenweitergabe'); } - $res = $assignService->assignDatenweitergabe($request, $daten); + $assignService->assignDatenweitergabe($request, $daten); return $this->redirect($request->headers->get('referer')); } - /** - * @Route("/assign/dsfa", name="assign_dsfa") - */ - public function assignDsfa(Request $request, AssignService $assignService, SecurityService $securityService) + #[Route(path: '/dsfa', name: '_dsfa')] + public function assignDsfa( + Request $request, + AssignService $assignService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + VVTDsfaRepository $impactAssessmentRepository + ): Response { - $team = $this->getUser()->getTeam(); - $dsfa = $this->getDoctrine()->getRepository(VVTDsfa::class)->find($request->get('id')); - if ($securityService->teamDataCheck($dsfa->getVvt(), $team) === false) { - return $this->redirectToRoute('vvt'); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $impactAssessment = $impactAssessmentRepository->find($request->get('id')); + if ($securityService->teamDataCheck($impactAssessment->getVvt(), $team)) { + $assignService->assignDsfa($request, $impactAssessment); + return $this->redirect($request->headers->get('referer')); } - $res = $assignService->assignDsfa($request, $dsfa); - return $this->redirect($request->headers->get('referer')); + return $this->redirectToRoute('vvt'); } - /** - * @Route("/assign/form", name="assign_form") - */ - public function assignForm(Request $request, AssignService $assignService, SecurityService $securityService) + #[Route(path: '/form', name: '_form')] + public function assignForm( + Request $request, + AssignService $assignService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + FormsRepository $formsRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $form = $this->getDoctrine()->getRepository(Forms::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $form = $formsRepository->find($request->get('id')); if ($securityService->teamDataCheck($form, $team) === false) { return $this->redirectToRoute('forms'); } @@ -121,63 +98,134 @@ public function assignForm(Request $request, AssignService $assignService, Secur return $this->redirect($request->headers->get('referer')); } - /** - * @Route("/assign/policy", name="assign_policy") - */ - public function assignPolicy(Request $request, AssignService $assignService, SecurityService $securityService) + #[Route(path: '/policy', name: '_policy')] + public function assignPolicy( + Request $request, + AssignService $assignService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + PoliciesRepository $policiesRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $policy = $this->getDoctrine()->getRepository(Policies::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $policy = $policiesRepository->find($request->get('id')); if ($securityService->teamDataCheck($policy, $team) === false) { return $this->redirectToRoute('policies'); } - $res = $assignService->assignPolicy($request, $policy); + $assignService->assignPolicy($request, $policy); return $this->redirect($request->headers->get('referer')); } - /** - * @Route("/assign/software", name="assign_software") - */ - public function assignSoftware(Request $request, AssignService $assignService, SecurityService $securityService) + #[Route(path: '/software', name: '_software')] + public function assignSoftware( + Request $request, + AssignService $assignService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + SoftwareRepository $softwareRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $software = $this->getDoctrine()->getRepository(Software::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $software = $softwareRepository->find($request->get('id')); if ($securityService->teamDataCheck($software, $team) === false) { return $this->redirectToRoute('software'); } - $res = $assignService->assignSoftware($request, $software); + $assignService->assignSoftware($request, $software); return $this->redirect($request->headers->get('referer')); } - /** - * @Route("/assign/vorfall", name="assign_vorfall") - */ - public function assignVorfall(Request $request, AssignService $assignService, SecurityService $securityService) + #[Route(path: '/task', name: '_task')] + public function assignTask( + Request $request, + AssignService $assignService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + TaskRepository $taskRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $vorfall = $this->getDoctrine()->getRepository(Vorfall::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $task = $taskRepository->find($request->get('id')); + if ($securityService->teamDataCheck($task, $team) === false) { + return $this->redirectToRoute('tasks'); + } + + $assignService->assignTask($request, $task); + return $this->redirect($request->headers->get('referer')); + } + + #[Route(path: '/vorfall', name: '_vorfall')] + public function assignVorfall( + Request $request, + AssignService $assignService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + VorfallRepository $vorfallRepository, + ): Response + { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $vorfall = $vorfallRepository->find($request->get('id')); if ($securityService->teamDataCheck($vorfall, $team) === false) { return $this->redirectToRoute('vorfall'); } - $res = $assignService->assignVorfall($request, $vorfall); + $assignService->assignVorfall($request, $vorfall); return $this->redirect($request->headers->get('referer')); } - /** - * @Route("/assign/task", name="assign_task") - */ - public function assignTask(Request $request, AssignService $assignService, SecurityService $securityService) + #[Route(path: '/vvt', name: '_vvt')] + public function assignVvt( + Request $request, + AssignService $assignService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + VVTRepository $vvtRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $task = $this->getDoctrine()->getRepository(Task::class)->find($request->get('id')); - if ($securityService->teamDataCheck($task, $team) === false) { - return $this->redirectToRoute('tasks'); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $vvt = $vvtRepository->find($request->get('id')); + if ($securityService->teamDataCheck($vvt, $team) === false) { + return $this->redirectToRoute('vvt'); } - $res = $assignService->assignTask($request, $task); + $assignService->assignVvt($request, $vvt); return $this->redirect($request->headers->get('referer')); } + + #[Route(path: '', name: '')] + public function index(CurrentTeamService $currentTeamService, + DatenweitergabeRepository $transferRepository, + VVTRepository $processingRepository, + AuditTomRepository $auditRepository, + VVTDsfaRepository $impactAssessmentRepository, + FormsRepository $formRepository, + PoliciesRepository $policyRepository, + SoftwareRepository $softwareRepository, + TaskRepository $taskRepository + ): Response + { + $user = $this->getUser(); + $currentTeam = $currentTeamService->getTeamFromSession($user); + $assignedDataTransfers = $transferRepository->findActiveByTeamAndUser($currentTeam, $user); + $assignedProcessings = $processingRepository->findActiveByTeamAndUser($currentTeam, $user); + $assignedAudits = $auditRepository->findActiveByTeamAndUser($currentTeam, $user); + $assignImpactAssessments = $impactAssessmentRepository->findActiveByTeamAndUser($currentTeam, $user); + $assignedForms = $formRepository->findActiveByTeamAndUser($currentTeam, $user); + $assignedPolicies = $policyRepository->findActiveByTeamAndUser($currentTeam, $user); + $assignedSoftware = $softwareRepository->findActiveByTeamAndUser($currentTeam, $user); + $assignedTasks = $taskRepository->findActiveByTeamAndUser($currentTeam, $user); + + return $this->render('assign/index.html.twig', [ + 'currentTeam' => $currentTeam, + 'dataTransfers' => $assignedDataTransfers, + 'processings' => $assignedProcessings, + 'audits' => $assignedAudits, + 'impactAssessments' => $assignImpactAssessments, + 'forms' => $assignedForms, + 'policies' => $assignedPolicies, + 'software' => $assignedSoftware, + 'tasks' => $assignedTasks + ]); + } } diff --git a/src/Controller/AssistantController.php b/src/Controller/AssistantController.php new file mode 100644 index 00000000..c7ee0c30 --- /dev/null +++ b/src/Controller/AssistantController.php @@ -0,0 +1,161 @@ +getTeamFromSession($this->getUser()); + + if (!$securityService->teamCheck($team)) { + return $this->redirectToRoute('dashboard'); + } + + return $this->render('assistant/index.html.twig', [ + 'currentTeam' => $team, + ]); + } + + #[Route('/step/{step}', name: '_step')] + public function step(int $step, + Request $request, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + AssistantService $assistantService, + ValidatorInterface $validator, + EntityManagerInterface $entityManager, + ): RedirectResponse|Response + { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + + if (!$securityService->teamCheck($team)) { + return $this->redirectToRoute('dashboard'); + } + + if ($step < $assistantService->getStepCount()) { + $assistantService->setStep($step); + return $this->renderStep( + $step, + $team, + $request, + $assistantService, + $validator, + $entityManager + ); + } + + if ($step == $assistantService->getStepCount()) { + $assistantService->clear(); + $this->addFlash( + 'success', + 'assistant.finished' + ); + } else { + $this->addFlash( + 'danger', + 'step.error' + ); + } + + return $this->redirectToRoute('assistant'); + } + + #[Route('/cancel', name: '_cancel')] + public function cancel(AssistantService $assistantService) : Response + { + $assistantService->clear(); + $this->addFlash( + 'info', + 'assistant.aborted' + ); + return $this->redirectToRoute('assistant'); + } + + private function renderStep(int $step, + Team $team, + Request $request, + AssistantService $assistantService, + ValidatorInterface $validator, + EntityManagerInterface $entityManager, + ): RedirectResponse|Response + { + $title = $assistantService->getPropertyForStep($step, AssistantService::PROPERTY_TITLE); + $info = $assistantService->getPropertyForStep($step, AssistantService::PROPERTY_INFO); + $newTitle = $assistantService->getPropertyForStep($step, AssistantService::PROPERTY_NEW); + $type = $assistantService->getPropertyForStep($step, AssistantService::PROPERTY_TYPE); + $skip = $assistantService->getPropertyForStep($step, AssistantService::PROPERTY_SKIP); + $select = $assistantService->getSelectDataForStep($step, $team); + $newItem = $assistantService->createElementForStep($step, $this->getUser(), $team); + $form = $assistantService->createForm($type, $newItem, $team); + $form->handleRequest($request); + + $errors = array(); + if ($form->isSubmitted() && $form->isValid()) { + $data = $form->getData(); + $errors = $validator->validate($data); + if (count($errors) == 0) { + if ($type == DatenweitergabeType::class) { + foreach ($data->getVerfahren() as $item) { + $item->addDatenweitergaben($data); + $entityManager->persist($item); + } + } + $entityManager->persist($data); + $entityManager->flush(); + $assistantService->saveToSession(step: $step, id: $data->getId()); + return $this->redirectToRoute('assistant_step', ['step' => $step + 1]); + } + } + return $this->render('assistant/step.html.twig', [ + 'currentTeam' => $team, + 'title' => $title, + 'info' => $info, + 'newTitle' => $newTitle, + 'form' => $form->createView(), + 'errors' => $errors, + 'newItem' => $newItem, + 'select' => $select, + 'step' => $step, + 'skip' => $skip, + ]); + } + + #[Route('/contact/select', name: '_select')] + public function selectContact(Request $request, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + AssistantService $assistantService, + ) : Response + { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamCheck($team) === false) { + return $this->redirectToRoute('dashboard'); + } + + $step = $assistantService->getStep(); + $selected = $request->get('assistant_select'); + $assistantService->saveToSession(step: $step, id: $selected); + return $this->redirectToRoute('assistant_step', ['step' => $step + 1]); + } +} diff --git a/src/Controller/AuditTomController.php b/src/Controller/AuditTomController.php index 3fd18fc4..dc5e5a64 100644 --- a/src/Controller/AuditTomController.php +++ b/src/Controller/AuditTomController.php @@ -9,59 +9,73 @@ namespace App\Controller; use App\Entity\AuditTom; -use App\Entity\AuditTomAbteilung; -use App\Entity\AuditTomStatus; -use App\Entity\AuditTomZiele; use App\Form\Type\AuditTomType; +use App\Repository\AuditTomAbteilungRepository; +use App\Repository\AuditTomRepository; +use App\Repository\AuditTomStatusRepository; +use App\Repository\AuditTomZieleRepository; use App\Service\AssignService; +use App\Service\CurrentTeamService; use App\Service\SecurityService; +use DateTime; +use Doctrine\ORM\EntityManagerInterface; +use Exception; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; +#[Route(path: '/audit-tom', name: 'audit_tom')] class AuditTomController extends AbstractController { - /** - * @Route("/audit-tom", name="audit_tom") - */ - public function index(SecurityService $securityService) - { - $team = $this->getUser()->getTeam(); - $audit = $this->getDoctrine()->getRepository(AuditTom::class)->findAllByTeam($team); - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); - } - return $this->render('audit_tom/index.html.twig', [ - 'audit' => $audit, - ]); + public function __construct( + private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { } - /** - * @Route("/audit-tom/new", name="audit_tom_new") - */ - public function addAuditTom(ValidatorInterface $validator, Request $request, SecurityService $securityService) + #[Route(path: '/new', name: '_new')] + public function addAuditTom( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + AuditTomStatusRepository $auditTomStatusRepository, + AuditTomZieleRepository $auditTomZieleRepository, + AuditTomAbteilungRepository $auditTomAbteilungRepository, + ): Response { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('audit_tom'); } - $today = new \DateTime(); + $today = new DateTime(); $audit = new AuditTom(); $audit->setTeam($team); $audit->setNummer('AUDIT-' . hexdec(uniqid())); $audit->setActiv(true); $audit->setCreatedAt($today); $audit->setUser($this->getUser()); - $status = $this->getDoctrine()->getRepository(AuditTomStatus::class)->findAll(); - $ziele = $this->getDoctrine()->getRepository(AuditTomZiele::class)->findByTeam($team); - $abteilungen = $this->getDoctrine()->getRepository(AuditTomAbteilung::class)->findAllByTeam($team); - - $form = $this->createForm(AuditTomType::class, $audit, ['abteilungen' => $abteilungen, 'ziele' => $ziele, 'status' => $status]); + $status = $auditTomStatusRepository->findAll(); + $ziele = $auditTomZieleRepository->findByTeam($team); + $abteilungen = $auditTomAbteilungRepository->findAllByTeam($team); + + $form = $this->createForm( + AuditTomType::class, + $audit, + [ + 'abteilungen' => $abteilungen, + 'ziele' => $ziele, + 'status' => $status + ] + ); $form->handleRequest($request); $errors = array(); @@ -85,36 +99,78 @@ public function addAuditTom(ValidatorInterface $validator, Request $request, Sec ]); } - /** - * @Route("/audit-tom/edit", name="audit_tom_edit") - */ - public function EditAuditTom(ValidatorInterface $validator, Request $request, SecurityService $securityService, AssignService $assignService) + #[Route(path: '/clone', name: '_clone')] + public function cloneAuditTom( + SecurityService $securityService, + CurrentTeamService $currentTeamService, + AuditTomRepository $auditTomRepository, + ): Response + { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamCheck($team) === false) { + return $this->redirectToRoute('audit_tom'); + } + + $today = new DateTime(); + $audit = $auditTomRepository->findAllByTeam(1); + + foreach ($audit as $data) { + if ($data->getCreatedAt() > $team->getClonedAt()) { + $newAudit = clone $data; + $newAudit->setTeam($team); + $newAudit->setCreatedAt($today); + $this->em->persist($newAudit); + } + + } + + //set ClonedAt Date to be able to update later newer versions + $team->setclonedAt($today); + + $this->em->persist($team); + $this->em->flush(); + + return $this->redirectToRoute('audit_tom'); + + } + + #[Route(path: '/edit', name: '_edit')] + public function editAuditTom( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + AssignService $assignService, + CurrentTeamService $currentTeamService, + AuditTomRepository $auditTomRepository, + AuditTomStatusRepository $auditTomStatusRepository, + AuditTomAbteilungRepository $auditTomAbteilungRepository, + AuditTomZieleRepository $auditTomZieleRepository, + ) { - $team = $this->getUser()->getTeam(); - $audit = $this->getDoctrine()->getRepository(AuditTom::class)->find($request->get('tom')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $audit = $auditTomRepository->find($request->get('tom')); if ($securityService->teamDataCheck($audit, $team) === false) { return $this->redirectToRoute('audit_tom'); } - $today = new \DateTime(); - $status = $this->getDoctrine()->getRepository(AuditTomStatus::class)->findAll(); - $abteilungen = $this->getDoctrine()->getRepository(AuditTomAbteilung::class)->findAllByTeam($team); - $ziele = $this->getDoctrine()->getRepository(AuditTomZiele::class)->findByTeam($team); + $today = new DateTime(); + $status = $auditTomStatusRepository->findAll(); + $abteilungen = $auditTomAbteilungRepository->findAllByTeam($team); + $ziele = $auditTomZieleRepository->findByTeam($team); - $allAudits = array_reverse($this->getDoctrine()->getRepository(AuditTom::class)->findAllByTeam($this->getUser()->getTeam())); + $allAudits = array_reverse($auditTomRepository->findAllByTeam($team)); $mykey = 0; - foreach ($allAudits as $key=>$item) { + foreach ($allAudits as $key => $item) { if ($item === $audit) { $mykey = $key; } } try { $nextAudit = $allAudits[++$mykey]; - } - catch (\Exception $e) { + } catch (Exception $e) { $nextAudit = $allAudits[0]; } @@ -124,7 +180,15 @@ public function EditAuditTom(ValidatorInterface $validator, Request $request, Se $newAudit->setCreatedAt($today); $newAudit->setUser($this->getUser()); $newAudit->setTeam($team); - $form = $this->createForm(AuditTomType::class, $newAudit, ['abteilungen' => $abteilungen, 'ziele' => $ziele, 'status' => $status]); + $form = $this->createForm( + AuditTomType::class, + $newAudit, + [ + 'abteilungen' => $abteilungen, + 'ziele' => $ziele, + 'status' => $status + ] + ); $form->remove('nummer'); $form->handleRequest($request); $assign = $assignService->createForm($audit, $team); @@ -136,59 +200,51 @@ public function EditAuditTom(ValidatorInterface $validator, Request $request, Se $newAudit = $form->getData(); $errors = $validator->validate($newAudit); if (count($errors) == 0) { - - $em = $this->getDoctrine()->getManager(); - $em->persist($newAudit); - $em->persist($audit); - $em->flush(); - return $this->redirectToRoute('audit_tom_edit', array('tom' => $newAudit->getId(), 'snack' => 'Erfolgreich gepeichert')); + $this->em->persist($newAudit); + $this->em->persist($audit); + $this->em->flush(); + return $this->redirectToRoute( + 'audit_tom_edit', + [ + 'tom' => $newAudit->getId(), + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general'), + ] + ); } } - return $this->render('audit_tom/edit.html.twig', [ - 'form' => $form->createView(), - 'assignForm' => $assign->createView(), - 'errors' => $errors, - 'title' => 'A-Frage bearbeiten', - 'audit' => $audit, - 'activ' => $audit->getActiv(), - 'activNummer' => false, - 'nextAudit' => $nextAudit, - 'snack' => $request->get('snack') - ]); + return $this->render( + 'audit_tom/edit.html.twig', + [ + 'form' => $form->createView(), + 'assignForm' => $assign->createView(), + 'errors' => $errors, + 'title' => $this->translator->trans(id: 'auditQuestion.edit', domain: 'audit_tom'), + 'audit' => $audit, + 'activ' => $audit->getActiv(), + 'activNummer' => false, + 'nextAudit' => $nextAudit, + 'snack' => $request->get('snack') + ] + ); } - /** - * @Route("/audit-tom/clone", name="audit_tom_clone") - */ - public function CloneAuditTom(Request $request, SecurityService $securityService) + #[Route(path: '', name: '')] + public function index( + SecurityService $securityService, + CurrentTeamService $currentTeamService, + AuditTomRepository $auditTomRepository, + ): Response { - $team = $this->getUser()->getTeam(); - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('audit_tom'); - } - - $today = new \DateTime(); - $audit = $this->getDoctrine()->getRepository(AuditTom::class)->findAllByTeam(1); - - $em = $this->getDoctrine()->getManager(); - - foreach ($audit as $data) { - if ($data->getCreatedAt() > $team->getClonedAt()) { - $newAudit = clone $data; - $newAudit->setTeam($team); - $newAudit->setCreatedAt($today); - $em->persist($newAudit); - } + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $audit = $auditTomRepository->findAllByTeam($team); + if ($securityService->teamCheck($team) === false) { + return $this->redirectToRoute('dashboard'); } - //set ClonedAt Date to be able to update later newer versions - $team->setclonedAt($today); - - $em->persist($team); - $em->flush(); - - return $this->redirectToRoute('audit_tom'); - + return $this->render('audit_tom/index.html.twig', [ + 'audit' => $audit, + 'currentTeam' => $team, + ]); } } diff --git a/src/Controller/BerichtController.php b/src/Controller/BerichtController.php index 407f4a38..dedb1d47 100644 --- a/src/Controller/BerichtController.php +++ b/src/Controller/BerichtController.php @@ -6,7 +6,7 @@ * Time: 09:15 */ - /** +/** * Modified by * User: Jan Juister * Date: 13.05.2022 @@ -14,109 +14,180 @@ namespace App\Controller; -use App\Entity\AkademieBuchungen; -use App\Entity\AuditTom; -use App\Entity\ClientRequest; -use App\Entity\Datenweitergabe; -use App\Entity\Policies; -use App\Entity\Report; -use App\Entity\Software; -use App\Entity\Tom; -use App\Entity\Vorfall; -use App\Entity\VVT; -use App\Entity\Loeschkonzept; -use App\Entity\VVTDatenkategorie; use App\Form\Type\ReportExportType; +use App\Repository\AkademieBuchungenRepository; +use App\Repository\AuditTomRepository; +use App\Repository\ClientRequestRepository; +use App\Repository\DatenweitergabeRepository; +use App\Repository\LoeschkonzeptRepository; +use App\Repository\PoliciesRepository; +use App\Repository\ReportRepository; +use App\Repository\SoftwareRepository; +use App\Repository\TomRepository; +use App\Repository\VorfallRepository; +use App\Repository\VVTRepository; +use App\Service\CurrentTeamService; use Nucleos\DompdfBundle\Wrapper\DompdfWrapper; use PhpOffice\PhpWord\IOFactory; use PhpOffice\PhpWord\PhpWord; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\BinaryFileResponse; +use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Contracts\Translation\TranslatorInterface; +#[Route(path: '/bericht', name: 'bericht')] class BerichtController extends AbstractController { - /** - * @Route("/bericht", name="bericht") - */ - public function bericht(Request $request) + public function __construct( + private readonly TranslatorInterface $translator, + ) + { + } + + #[Route(path: '/backupconcept', name: '_backupconcept')] + public function backupSoftware( + DompdfWrapper $wrapper, + Request $request, + CurrentTeamService $currentTeamService, + SoftwareRepository $softwareRepository, + VVTRepository $vvtRepository, + ) { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + + $software = $softwareRepository->findBy(['team' => $team, 'activ' => true], ['createdAt' => 'DESC']); + $vvt = $vvtRepository->findActiveByTeam($team); + + if (count($software) < 1) { + return $this->redirectNoReport(); + } + // Center Team authentication - if ($this->getUser()->getTeam() === null) { + if ($team === null || $software[0]->getTeam() !== $team) { return $this->redirectToRoute('dashboard'); } - return $this->render('bericht/index.html.twig', ['snack' => $request->get('snack')]); + // Retrieve the HTML generated in our twig file + $html = $this->renderView('bericht/backup.html.twig', [ + 'daten' => $software, + 'vvt' => $vvt, + 'titel' => $this->translator->trans(id: 'archiveConcept.word', domain: 'bericht'), + 'team' => $team, + 'all' => $request->get('all'), + ]); + + //Generate PDF File for Download + $response = $wrapper->getStreamResponse( + $html, + $this->translator->trans(id: 'archiveConcept.word', domain: 'bericht') . '.pdf' + ); + $response->send(); } - /** - * @Route("/bericht/vvt", name="bericht_vvt") - */ - public function berichtVvt(DompdfWrapper $wrapper, Request $request) + #[Route(path: '/revoceryconcept', name: '_recoveryconcept')] + public function recoverySoftware( + DompdfWrapper $wrapper, + Request $request, + CurrentTeamService $currentTeamService, + SoftwareRepository $softwareRepository, + ) { - ini_set('max_execution_time', '900'); - ini_set('memory_limit', '512M'); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $software = $softwareRepository->findBy(['team' => $team, 'activ' => true], ['createdAt' => 'DESC']); - $req = $request->get('id'); - $team = $this->getUser()->getTeam(); - $doc = 'Verzeichnis der Verarbeitungstätigkeiten'; - - if ($req) { - $vvt = $this->getDoctrine()->getRepository(VVT::class)->findBy(array('id' => $req)); - $title = 'Export der Verarbeitungstätigkeit ' . $vvt[0]->getName(); - $doc = $vvt[0]->getName(); - } else { - $vvt = $this->getDoctrine()->getRepository(VVT::class)->findBy(array('team' => $team, 'activ' => true)); - $title = 'Verzeichnis der Verarbeitungstätigkeiten von ' . $team->getName(); - } - - if (count($vvt) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); + if (count($software) < 1) { + return $this->redirectNoReport(); } // Center Team authentication - if ($team === null || $vvt[0]->getTeam() !== $team) { + if ($team === null || $software[0]->getTeam() !== $team) { return $this->redirectToRoute('dashboard'); } // Retrieve the HTML generated in our twig file - $html = $this->renderView('bericht/vvt.html.twig', [ - 'daten' => $vvt, - 'titel' => $title, + $html = $this->renderView('bericht/recovery.html.twig', [ + 'daten' => $software, + 'titel' => $this->translator->trans(id: 'report.about.recoveryConcept', domain: 'bericht'), 'team' => $team, 'all' => $request->get('all'), - 'min' => $request->get('min'), ]); //Generate PDF File for Download - $response = $wrapper->getStreamResponse($html, $doc . ".pdf"); + $response = $wrapper->getStreamResponse( + $html, + $this->translator->trans(id: 'recoveryConcept', domain: 'bericht') + ); $response->send(); } - /** - * @Route("/bericht/audit", name="bericht_audit") - */ - public function berichtAudit(DompdfWrapper $wrapper, Request $request) + #[Route(path: '', name: '')] + public function report( + Request $request, + CurrentTeamService $currentTeamService, + ): Response + { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + + // Center Team authentication + if (!$team) { + return $this->redirectToRoute('dashboard'); + } + + return $this->render('bericht/index.html.twig', [ + 'snack' => $request->get('snack'), + 'currentTeam' => $team, + ]); + } + + #[Route(path: '/akademie', name: '_akademie')] + public function reportAcademy( + AkademieBuchungenRepository $academyBillingRepository, + ): Response + { + $user = $this->getUser(); + $team = $user->getAkademieUser(); + // Admin Team authentication + if (!$user->hasAdminRole($team)) { + return $this->redirectToRoute('dashboard'); + } + + $daten = $academyBillingRepository->findBerichtByTeam($team); + + return $this->render('bericht/akademie.html.twig', [ + 'daten' => $daten, + 'team' => $this->getUser()->getAkademieUser() + ]); + } + + #[Route(path: '/audit', name: '_audit')] + public function reportAudit( + DompdfWrapper $wrapper, + Request $request, + CurrentTeamService $currentTeamService, + AuditTomRepository $auditTomRepository, + ) { $req = $request->get('id'); - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($req) { - $audit = $this->getDoctrine()->getRepository(AuditTom::class)->findBy(array('id' => $req)); + $audit = $auditTomRepository->findBy(array('id' => $req)); } elseif ($request->get('activ')) { - $audit = $this->getDoctrine()->getRepository(AuditTom::class)->findAuditByTeam($team); + $audit = $auditTomRepository->findAuditByTeam($team); } elseif ($request->get('open')) { - $audit = $this->getDoctrine()->getRepository(AuditTom::class)->findOpenByTeam($team); + $audit = $auditTomRepository->findActiveAndOpenByTeam($team); } else { - $audit = $this->getDoctrine()->getRepository(AuditTom::class)->findBy(array('team' => $team, 'activ' => true)); + $audit = $auditTomRepository->findBy(array('team' => $team, 'activ' => true)); } if (count($audit) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); + return $this->redirectNoReport(); } // Center Team authentication @@ -127,159 +198,262 @@ public function berichtAudit(DompdfWrapper $wrapper, Request $request) // Retrieve the HTML generated in our twig file $html = $this->renderView('bericht/audit.html.twig', [ 'daten' => $audit, - 'titel' => 'Bericht zu Auditfragen', - 'team' => $this->getUser()->getTeam(), + 'titel' => $this->translator->trans(id: 'report.about.auditQuestion', domain: 'bericht'), + 'team' => $team, 'all' => $request->get('all'), ]); //Generate PDF File for Download - $response = $wrapper->getStreamResponse($html, "Auditfragen.pdf"); + $response = $wrapper->getStreamResponse($html, $this->translator->trans(id: 'auditQuestion.word', domain: 'audit_tom') . '.pdf'); $response->send(); } - /** - * @Route("/bericht/tom", name="bericht_tom") - */ - public function berichtTom(DompdfWrapper $wrapper, Request $request) + #[Route(path: '/weitergabe', name: '_weitergabe')] + public function reportDataTransfer( + DompdfWrapper $wrapper, + Request $request, + CurrentTeamService $currentTeamService, + DatenweitergabeRepository $dataTransferRepository, + ) { + $id = $request->get('id'); + $team = $currentTeamService->getTeamFromSession($this->getUser()); - $req = $request->get('id'); - $team = $this->getUser()->getTeam(); - - if ($req) { - $tom = $this->getDoctrine()->getRepository(Tom::class)->findBy(array('id' => $req)); + if ($id) { + $daten = $dataTransferRepository->find($id); } else { - $tom = $this->getDoctrine()->getRepository(Tom::class)->findBy(array('team' => $team, 'activ' => true)); + $daten = $dataTransferRepository->findBy([ + 'team' => $team, + 'activ' => true, + 'art' => $request->get('art') + ]); } - if (count($tom) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); + if (count($daten) < 1) { + return $this->redirectNoReport(); } // Center Team authentication - if ($team === null || $tom[0]->getTeam() !== $team) { + if ($team === null || $daten[0]->getTeam() !== $team) { return $this->redirectToRoute('dashboard'); } // Retrieve the HTML generated in our twig file - $html = $this->renderView('bericht/berichtTom.html.twig', [ - 'datenAll' => $tom, - 'titel' => 'TOM', + $html = $this->renderView('bericht/daten.html.twig', [ + 'daten' => $daten, + 'titel' => $this->translator->trans(id: 'report.about.dataTransfer', domain: 'bericht'), 'team' => $team, + 'all' => $request->get('all'), ]); //Generate PDF File for Download - $response = $wrapper->getStreamResponse($html, "Technische-und-organisatorische-Massnahmen.pdf"); + $response = $wrapper->getStreamResponse( + $html, + $this->translator->trans(id: 'dataTransfer.word', domain: 'datenweitergabe') . '.pdf', + ); $response->send(); } - /** - * @Route("/bericht/global_tom", name="bericht_global_tom") - */ - public function berichtGlobalTom(DompdfWrapper $wrapper) + #[Route(path: '/loeschkonzept', name: '_loeschkonzept')] + public function reportDeletionConcept( + DompdfWrapper $wrapper, + Request $request, + CurrentTeamService $currentTeamService, + LoeschkonzeptRepository $deletionConceptRepository, + ) { + ini_set('max_execution_time', '900'); + ini_set('memory_limit', '512M'); - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $doc = $this->translator->trans(id: 'deletionConcept.plural', domain: 'loeschkonzept'); - $audit = $this->getDoctrine()->getRepository(AuditTom::class)->findAllByTeam($team); - if (count($audit) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); + $loeschkonzept = $deletionConceptRepository->findByTeam($team); + $title = $this->translator->trans(id: 'deletionConcept.directoryOf') . ' ' . $team->getName(); + + if (count($loeschkonzept) < 1) { + return $this->redirectNoReport(); } // Center Team authentication - if ($team === null || $audit[0]->getTeam() !== $team) { + if ($team === null || $loeschkonzept[0]->getTeam() !== $team) { return $this->redirectToRoute('dashboard'); } // Retrieve the HTML generated in our twig file - $html = $this->renderView('bericht/berichtGlobalTom.html.twig', [ - 'daten' => $audit, - 'titel' => 'Allgemeine TOM', + $html = $this->renderView('bericht/loeschkonzept.html.twig', [ + 'daten' => $loeschkonzept, + 'titel' => $title, 'team' => $team, + 'all' => $request->get('all'), ]); //Generate PDF File for Download - $response = $wrapper->getStreamResponse($html, "Globale_TOM.pdf"); + $response = $wrapper->getStreamResponse($html, $doc . ".pdf"); $response->send(); } - /** - * @Route("/bericht/weitergabe", name="bericht_weitergabe") - */ - public function berichtWeitergabe(DompdfWrapper $wrapper, Request $request) + #[Route(path: '/reports/generate', name: '_reports_generate')] + public function reportGenerateReports( + Request $request, + CurrentTeamService $currentTeamService, + ReportRepository $reportRepository, + ): Response { + $team = $currentTeamService->getTeamFromSession($this->getUser()); - $req = $request->get('id'); + $data = $request->get('report_export'); + $qb = $reportRepository->createQueryBuilder('s'); + $qb->andWhere( + $qb->expr()->between('s.date', ':von', ':bis') + ) + ->andWhere('s.activ = 1') + ->setParameter('von', $data['von']) + ->setParameter('bis', $data['bis']); - $team = $this->getUser()->getTeam(); + if ($data['user'] !== null) { + $qb->innerJoin('s.user', 'u') + ->andWhere('u.email = :user') + ->setParameter('user', $data['user']); + } - if ($req) { - $daten = $this->getDoctrine()->getRepository(Datenweitergabe::class)->findBy(array('id' => $req)); - } else { - $daten = $this->getDoctrine()->getRepository(Datenweitergabe::class)->findBy(array('team' => $team, 'activ' => true, 'art' => $request->get('art'))); + if ($data['report'] === 1) { + $qb->andWhere('s.inReport = 1'); } - if (count($daten) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); + $report = $qb->getQuery()->getResult(); + + if (count($report) < 1) { + return $this->redirectNoReport(); } // Center Team authentication - if ($team === null || $daten[0]->getTeam() !== $team) { + if ($team === null || $report[0]->getTeam() !== $team) { return $this->redirectToRoute('dashboard'); } - // Retrieve the HTML generated in our twig file - $html = $this->renderView('bericht/daten.html.twig', [ - 'daten' => $daten, - 'titel' => 'Bericht zur Datenweitergabe', - 'team' => $this->getUser()->getTeam(), - 'all' => $request->get('all'), - ]); - //Generate PDF File for Download - $response = $wrapper->getStreamResponse($html, "Datenweitergabe.pdf"); - $response->send(); + // Create a new Word document + $phpWord = new PhpWord(); + $phpWord->addTitleStyle(1, ['bold' => true], ['spaceAfter' => 240]); + $phpWord->addTitleStyle(2, ['bold' => true], ['spaceBefore' => 300]); + $header = ['size' => 34, 'bold' => true]; + $secHeader = ['size' => 13, 'bold' => true]; + + $title = $data['title']; + + $section = $phpWord->addSection(); + $section->addText($title, $header); + + foreach ($report as $item) { + + // Adding a software to the document... + $section->addTitle($item->getDate()->format('d.m.Y'), 2); + + $table = $section->addTable(); + $table->addRow(); + $table->addCell(100 * 50)->addText($this->translator->trans(id: 'date', domain: 'general')); + $table->addCell(100 * 50)->addText($item->getDate()->format('d.m.Y')); + + $table->addRow(); + $table->addCell()->addText($this->translator->trans(id: 'startTime', domain: 'general')); + $table->addCell()->addText($item->getStart()->format('H:i')); + + $table->addRow(); + $table->addCell()->addText($this->translator->trans(id: 'endTime', domain: 'general')); + $table->addCell()->addText($item->getEnd()->format('H:i')); + + $table->addRow(); + $table->addCell()->addText($this->translator->trans(id: 'worker', domain: 'report')); + $table->addCell()->addText($item->getUser()->getEmail()); + + $table->addRow(); + $table->addCell()->addText($this->translator->trans(id: 'work.onSight', domain: 'report')); + $table->addCell()->addText($this->translator->trans(id: ($item->getOnSite() ? 'yes' : 'no'), domain: 'general')); + + $table->addRow(); + $table->addCell()->addText($this->translator->trans(id: 'description', domain: 'general')); + $table->addCell()->addText($item->getDescription()); + } + + $section->addHeader()->addText($title); + $section->addFooter()->addText('Powered by open-datenschutzcenter.de'); + + // Saving the document as OOXML file... + $objWriter = IOFactory::createWriter($phpWord, 'Word2007'); + + // Create a temporal file in the system + $fileName = $data['title'] . '.docx'; + $temp_file = tempnam(sys_get_temp_dir(), $fileName); + + // Write in the temporal filepath + $objWriter->save($temp_file); + + // Send the temporal file as response (as an attachment) + $response = new BinaryFileResponse($temp_file); + $response->setContentDisposition( + ResponseHeaderBag::DISPOSITION_ATTACHMENT, + $fileName + ); + + return $response; } - /** - * @Route("/bericht/akademie", name="bericht_akademie") - */ - public function berichtAkademie() + #[Route(path: '/global_tom', name: '_global_tom')] + public function reportGlobalTom( + DompdfWrapper $wrapper, + CurrentTeamService $currentTeamService, + AuditTomRepository $auditTomRepository, + ) { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $audit = $auditTomRepository->findAllByTeam($team); - $team = $this->getUser()->getAkademieUser(); - // Admin Team authentication - if ($this->getUser()->getAdminUser() !== $team) { - return $this->redirectToRoute('dashboard'); + if (count($audit) < 1) { + return $this->redirectNoReport(); } - $daten = $this->getDoctrine()->getRepository(AkademieBuchungen::class)->findBerichtByTeam($team); + // Center Team authentication + if ($team === null || $audit[0]->getTeam() !== $team) { + return $this->redirectToRoute('dashboard'); + } - return $this->render('bericht/akademie.html.twig', [ - 'daten' => $daten, - 'team' => $this->getUser()->getAkademieUser() + // Retrieve the HTML generated in our twig file + $html = $this->renderView('bericht/berichtGlobalTom.html.twig', [ + 'daten' => $audit, + 'titel' => $this->translator->trans(id: 'tom.general', domain: 'bericht'), + 'team' => $team, ]); + + //Generate PDF File for Download + $response = $wrapper->getStreamResponse( + $html, + $this->translator->trans(id: 'tom.global', domain: 'bericht') . '.pdf', + ); + $response->send(); } - /** - * @Route("/bericht/vorfall", name="bericht_vorfall") - */ - public function berichtVorfall(DompdfWrapper $wrapper, Request $request) + #[Route(path: '/vorfall', name: '_vorfall')] + public function reportIncident( + DompdfWrapper $wrapper, + Request $request, + CurrentTeamService $currentTeamService, + VorfallRepository $vorfallRepository, + ) { + $id = $request->get('id'); - $req = $request->get('id'); - - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); - if ($req) { - $daten = $this->getDoctrine()->getRepository(Vorfall::class)->findBy(array('id' => $req)); + if ($id) { + $daten = $vorfallRepository->find($id); } else { - $daten = $this->getDoctrine()->getRepository(Vorfall::class)->findBy(array('team' => $team, 'activ' => true), ['datum' => 'DESC']); + $daten = $vorfallRepository->findBy(['team' => $team, 'activ' => true], ['datum' => 'DESC']); } if (count($daten) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); + return $this->redirectNoReport(); } // Center Team authentication @@ -290,34 +464,38 @@ public function berichtVorfall(DompdfWrapper $wrapper, Request $request) // Retrieve the HTML generated in our twig file $html = $this->renderView('bericht/vorfall.html.twig', [ 'daten' => $daten, - 'titel' => 'Bericht zu Datenvorfall', - 'team' => $this->getUser()->getTeam(), + 'titel' => $this->translator->trans(id: 'report.about.dataIncident', domain: 'bericht'), + 'team' => $team, 'all' => $request->get('all'), ]); //Generate PDF File for Download - $response = $wrapper->getStreamResponse($html, "Datenschutzvorfall.pdf"); + $response = $wrapper->getStreamResponse( + $html, + $this->translator->trans(id: 'dataProtection.incident', domain: 'bericht') . '.pdf', + ); $response->send(); } - /** - * @Route("/bericht/policy", name="bericht_policy") - */ - public function berichtPolicy(DompdfWrapper $wrapper, Request $request) + #[Route(path: '/policy', name: '_policy')] + public function reportPolicy( + DompdfWrapper $wrapper, + Request $request, + CurrentTeamService $currentTeamService, + PoliciesRepository $policiesRepository, + ) { + $id = $request->get('id'); + $team = $currentTeamService->getTeamFromSession($this->getUser()); - $req = $request->get('id'); - - $team = $this->getUser()->getTeam(); - - if ($req) { - $policies = $this->getDoctrine()->getRepository(Policies::class)->findBy(array('id' => $req)); + if ($id) { + $policies = $policiesRepository->find($id); } else { - $policies = $this->getDoctrine()->getRepository(Policies::class)->findBy(array('team' => $team, 'activ' => true), ['createdAt' => 'DESC']); + $policies = $policiesRepository->findBy(['team' => $team, 'activ' => true], ['createdAt' => 'DESC']); } if (count($policies) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); + return $this->redirectNoReport(); } // Center Team authentication @@ -328,167 +506,201 @@ public function berichtPolicy(DompdfWrapper $wrapper, Request $request) // Retrieve the HTML generated in our twig file $html = $this->renderView('bericht/policy.html.twig', [ 'daten' => $policies, - 'titel' => 'Bericht zu Datenschutzrichtlinien', - 'team' => $this->getUser()->getTeam(), + 'titel' => $this->translator->trans(id: 'report.about.dataProtectionGuidelines', domain: 'bericht'), + 'team' => $team, 'all' => $request->get('all'), ]); //Generate PDF File for Download - $response = $wrapper->getStreamResponse($html, "Richtlinie.pdf"); + $response = $wrapper->getStreamResponse( + $html, + $this->translator->trans(id: 'guideline', domain: 'vorfall') . '.pdf', + ); $response->send(); } - /** - * @Route("/bericht/software", name="bericht_software") - */ - public function berichtSoftware(DompdfWrapper $wrapper, Request $request) + #[Route(path: '/request', name: '_request')] + public function reportRequest( + DompdfWrapper $wrapper, + Request $request, + CurrentTeamService $currentTeamService, + ClientRequestRepository $clientRequestRepository, + ) { - $req = $request->get('id'); - - $team = $this->getUser()->getTeam(); + $id = $request->get('id'); + $team = $currentTeamService->getTeamFromSession($this->getUser()); - if ($req) { - $software = $this->getDoctrine()->getRepository(Software::class)->findBy(array('id' => $req)); + if ($id) { + $clientRequest = $clientRequestRepository->find($id); + $title = $this->translator->trans(id: 'report.about.clientRequestBy', domain: 'bericht') . ' ' . $clientRequest->getName(); } else { - $software = $this->getDoctrine()->getRepository(Software::class)->findBy(array('team' => $team, 'activ' => true), ['createdAt' => 'DESC']); + $clientRequest = $clientRequestRepository->findBy(['team' => $team, 'activ' => true], ['createdAt' => 'DESC']); + $title = $this->translator->trans(id: 'report.about.clientRequest', domain: 'bericht'); } - if (count($software) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); + if (count($clientRequest) < 1) { + return $this->redirectNoReport(); } // Center Team authentication - if ($team === null || $software[0]->getTeam() !== $team) { + if ($team === null || $clientRequest[0]->getTeam() !== $team) { return $this->redirectToRoute('dashboard'); } + // Retrieve the HTML generated in our twig file - $html = $this->renderView('bericht/software.html.twig', [ - 'daten' => $software, - 'titel' => 'Bericht zu verwendeter Software und Konfiguration', - 'team' => $this->getUser()->getTeam(), + $html = $this->renderView('bericht/request.html.twig', [ + 'daten' => $clientRequest, + 'titel' => $title, + 'team' => $team, 'all' => $request->get('all'), ]); //Generate PDF File for Download - $response = $wrapper->getStreamResponse($html, "Softwarekonfiguration.pdf"); + $response = $wrapper->getStreamResponse($html, $title . ".pdf"); $response->send(); } - /** - * @Route("/bericht/backupconcept", name="bericht_backupconcept") - */ - public function backupSoftware(DompdfWrapper $wrapper, Request $request) + #[Route(path: '/software', name: '_software')] + public function reportSoftware( + DompdfWrapper $wrapper, + Request $request, + CurrentTeamService $currentTeamService, + SoftwareRepository $softwareRepository, + ) { + $id = $request->get('id'); + $team = $currentTeamService->getTeamFromSession($this->getUser()); - $team = $this->getUser()->getTeam(); - - $software = $this->getDoctrine()->getRepository(Software::class)->findBy(array('team' => $team, 'activ' => true), ['createdAt' => 'DESC']); - $vvt = $this->getDoctrine()->getRepository(VVT::class)->findActivByTeam($team); + if ($id) { + $software = $softwareRepository->find($id); + } else { + $software = $softwareRepository->findBy(['team' => $team, 'activ' => true], ['createdAt' => 'DESC']); + } if (count($software) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); + return $this->redirectNoReport(); } // Center Team authentication if ($team === null || $software[0]->getTeam() !== $team) { return $this->redirectToRoute('dashboard'); } - // Retrieve the HTML generated in our twig file - $html = $this->renderView('bericht/backup.html.twig', [ + $html = $this->renderView('bericht/software.html.twig', [ 'daten' => $software, - 'vvt' => $vvt, - 'titel' => 'Archivierungskonzept', - 'team' => $this->getUser()->getTeam(), + 'titel' => $this->translator->trans(id: 'report.about.software', domain: 'bericht'), + 'team' => $team, 'all' => $request->get('all'), ]); //Generate PDF File for Download - $response = $wrapper->getStreamResponse($html, "Archivierungskonzept.pdf"); + $response = $wrapper->getStreamResponse( + $html, + $this->translator->trans('softwareConfig', domain: 'software') . '.pdf', + ); $response->send(); } - /** - * @Route("/bericht/revoceryconcept", name="bericht_recoveryconcept") - */ - public function recoverySoftware(DompdfWrapper $wrapper, Request $request) + #[Route(path: '/tom', name: '_tom')] + public function reportTom( + DompdfWrapper $wrapper, + Request $request, + CurrentTeamService $currentTeamService, + TomRepository $tomRepository, + ) { - $team = $this->getUser()->getTeam(); - $software = $this->getDoctrine()->getRepository(Software::class)->findBy(array('team' => $team, 'activ' => true), ['createdAt' => 'DESC']); + $req = $request->get('id'); + $team = $currentTeamService->getTeamFromSession($this->getUser()); - if (count($software) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); + if ($req) { + $tom = $tomRepository->findBy(array('id' => $req)); + } else { + $tom = $tomRepository->findBy(array('team' => $team, 'activ' => true)); + } + + if (count($tom) < 1) { + return $this->redirectNoReport(); } // Center Team authentication - if ($team === null || $software[0]->getTeam() !== $team) { + if ($team === null || $tom[0]->getTeam() !== $team) { return $this->redirectToRoute('dashboard'); } // Retrieve the HTML generated in our twig file - $html = $this->renderView('bericht/recovery.html.twig', [ - 'daten' => $software, - 'titel' => 'Recoverykonzept und Widerherstellungskonzept', - 'team' => $this->getUser()->getTeam(), - 'all' => $request->get('all'), + $html = $this->renderView('bericht/berichtTom.html.twig', [ + 'datenAll' => $tom, + 'titel' => $this->translator->trans(id: 'tom.word', domain: 'bericht'), + 'team' => $team, ]); //Generate PDF File for Download - $response = $wrapper->getStreamResponse($html, "Recoverykonzept.pdf"); + $response = $wrapper->getStreamResponse( + $html, + $this->translator->trans(id: 'technicalAndOrganizationMeasures', domain: 'audit_tom') . '.pdf'); $response->send(); } - /** - * @Route("/bericht/request", name="bericht_request") - */ - public function berichtRequest(DompdfWrapper $wrapper, Request $request) + #[Route(path: '/vvt', name: '_vvt')] + public function reportVvt( + DompdfWrapper $wrapper, + Request $request, + CurrentTeamService $currentTeamService, + VVTRepository $vvtRepository, + ) { + ini_set('max_execution_time', '900'); + ini_set('memory_limit', '512M'); $req = $request->get('id'); - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $doc = $this->translator->trans(id: 'processing.directory', domain: 'vvt'); if ($req) { - $clientRequest = $this->getDoctrine()->getRepository(ClientRequest::class)->findBy(array('id' => $req)); - $title = 'Bericht zur Kundenanfrage und Datenauskunft von ' . $clientRequest[0]->getName(); + $vvt = $vvtRepository->findBy(array('id' => $req)); + $title = $this->translator->trans(id: 'processing.export', domain: 'vvt') . $vvt[0]->getName(); + $doc = $vvt[0]->getName(); } else { - $clientRequest = $this->getDoctrine()->getRepository(ClientRequest::class)->findBy(array('team' => $team, 'activ' => true), ['createdAt' => 'DESC']); - $title = 'Bericht zur Kundenanfrage und Datenauskunft'; + $vvt = $vvtRepository->findBy(array('team' => $team, 'activ' => true)); + $title = $this->translator->trans(id: 'processing.directoryOf', domain: 'vvt') . $team->getName(); } - if (count($clientRequest) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); + if (count($vvt) < 1) { + return $this->redirectNoReport(); } // Center Team authentication - if ($team === null || $clientRequest[0]->getTeam() !== $team) { + if ($team === null || $vvt[0]->getTeam() !== $team) { return $this->redirectToRoute('dashboard'); } // Retrieve the HTML generated in our twig file - $html = $this->renderView('bericht/request.html.twig', [ - 'daten' => $clientRequest, + $html = $this->renderView('bericht/vvt.html.twig', [ + 'daten' => $vvt, 'titel' => $title, - 'team' => $this->getUser()->getTeam(), + 'team' => $team, 'all' => $request->get('all'), + 'min' => $request->get('min'), ]); //Generate PDF File for Download - $response = $wrapper->getStreamResponse($html, $title . ".pdf"); + $response = $wrapper->getStreamResponse($html, $doc . ".pdf"); $response->send(); } - - /** - * @Route("/bericht/reports", name="bericht_reports") - */ - public function berichtReports(Request $request) + #[Route(path: '/reports', name: '_reports')] + public function reports( + Request $request, + CurrentTeamService $currentTeamService, + ReportRepository $reportRepository, + ) { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); $users = $team->getMembers(); - $members = array(); + $members = []; foreach ($users as $item) { $members[$item->getEmail()] = $item->getId(); } @@ -496,12 +708,12 @@ public function berichtReports(Request $request) $form = $this->createForm(ReportExportType::class, ['action' => $this->generateUrl('bericht_reports'), 'method' => 'GET']); $form->handleRequest($request); - $title = 'Tätigkeitsbericht erstellen'; + $title = $this->translator->trans(id: 'report.about.workReport', domain: 'bericht'); if ($form->isSubmitted() && $form->isValid()) { $data = $form->getData(); - $qb = $this->getDoctrine()->getRepository(Report::class)->createQueryBuilder('s'); + $qb = $reportRepository->createQueryBuilder('s'); $qb->andWhere( $qb->expr()->between('s.date', ':von', ':bis') ) @@ -522,7 +734,7 @@ public function berichtReports(Request $request) $report = $qb->getQuery()->getResult(); if (count($report) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); + return $this->redirectNoReport(); } // Center Team authentication @@ -533,10 +745,10 @@ public function berichtReports(Request $request) // Create a new Word document $phpWord = new PhpWord(); - $phpWord->addTitleStyle(1, array('bold' => true), array('spaceAfter' => 240)); - $phpWord->addTitleStyle(2, array('bold' => true), array('spaceBefore' => 300)); - $header = array('size' => 34, 'bold' => true); - $secHeader = array('size' => 13, 'bold' => true); + $phpWord->addTitleStyle(1, ['bold' => true], ['spaceAfter' => 240]); + $phpWord->addTitleStyle(2, ['bold' => true], ['spaceBefore' => 300]); + $header = ['size' => 34, 'bold' => true]; + $secHeader = ['size' => 13, 'bold' => true]; $title = $data['title']; @@ -550,27 +762,27 @@ public function berichtReports(Request $request) $table = $section->addTable(); $table->addRow(); - $table->addCell(100 * 50)->addText('Datum'); + $table->addCell(100 * 50)->addText($this->translator->trans(id: 'date', domain: 'general')); $table->addCell(100 * 50)->addText($item->getDate()->format('d.m.Y')); $table->addRow(); - $table->addCell()->addText('Startzeit'); + $table->addCell()->addText($this->translator->trans(id: 'startTime', domain: 'general')); $table->addCell()->addText($item->getStart()->format('H:i')); $table->addRow(); - $table->addCell()->addText('Endzeit'); + $table->addCell()->addText($this->translator->trans(id: 'endTime', domain: 'general')); $table->addCell()->addText($item->getEnd()->format('H:i')); $table->addRow(); - $table->addCell()->addText('Bearbeiter'); + $table->addCell()->addText($this->translator->trans(id: 'worker', domain: 'report')); $table->addCell()->addText($item->getUser()->getEmail()); $table->addRow(); - $table->addCell()->addText('Vor Ort'); - $table->addCell()->addText($item->getOnSite() ? 'Ja' : 'Nein'); + $table->addCell()->addText($this->translator->trans(id: 'work.onSight', domain: 'report')); + $table->addCell()->addText($this->translator->trans(id: ($item->getOnSite() ? 'yes' : 'no'), domain: 'general')); $table->addRow(); - $table->addCell()->addText('Beschreibung'); + $table->addCell()->addText($this->translator->trans(id: 'description', domain: 'general')); $table->addCell()->addText($item->getDescription()); } @@ -600,145 +812,13 @@ public function berichtReports(Request $request) return $this->render('bericht/modalView.html.twig', array('form' => $form->createView(), 'title' => $title, 'members' => $users)); } - /** - * @Route("/bericht/loeschkonzept", name="bericht_loeschkonzept") - */ - public function berichtLoeschkonzept(DompdfWrapper $wrapper, Request $request) + private function redirectNoReport(): RedirectResponse { - ini_set('max_execution_time', '900'); - ini_set('memory_limit', '512M'); - - $req = $request->get('id'); - $team = $this->getUser()->getTeam(); - $doc = 'Löschkonzepte'; - - - $loeschkonzept = $this->getDoctrine()->getRepository(Loeschkonzept::class)->findByTeam($team); - $title = 'Verzeichnis der Löschkonzepte von ' . $team->getName(); - - if (count($loeschkonzept) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); - } - - // Center Team authentication - if ($team === null || $loeschkonzept[0]->getTeam() !== $team) { - return $this->redirectToRoute('dashboard'); - } - - // Retrieve the HTML generated in our twig file - $html = $this->renderView('bericht/loeschkonzept.html.twig', [ - 'daten' => $loeschkonzept, - 'titel' => $title, - 'team' => $team, - 'all' => $request->get('all'), - ]); - - //Generate PDF File for Download - $response = $wrapper->getStreamResponse($html, $doc . ".pdf"); - $response->send(); - } - - - /** - * @Route("/bericht/reports/generate", name="bericht_reports_generate") - */ - public function berichtGernateReports(Request $request) - { - $team = $this->getUser()->getTeam(); - - $data = $request->get('report_export'); - $qb = $this->getDoctrine()->getRepository(Report::class)->createQueryBuilder('s'); - $qb->andWhere( - $qb->expr()->between('s.date', ':von', ':bis') - ) - ->andWhere('s.activ = 1') - ->setParameter('von', $data['von']) - ->setParameter('bis', $data['bis']); - - if ($data['user'] !== null) { - $qb->innerJoin('s.user', 'u') - ->andWhere('u.email = :user') - ->setParameter('user', $data['user']); - } - - if ($data['report'] === 1) { - $qb->andWhere('s.inReport = 1'); - } - - $report = $qb->getQuery()->getResult(); - - if (count($report) < 1) { - return $this->redirectToRoute('bericht', ['snack' => 'Keine Berichte vorhanden']); - } - - // Center Team authentication - if ($team === null || $report[0]->getTeam() !== $team) { - return $this->redirectToRoute('dashboard'); - } - - - // Create a new Word document - $phpWord = new PhpWord(); - $phpWord->addTitleStyle(1, array('bold' => true), array('spaceAfter' => 240)); - $phpWord->addTitleStyle(2, array('bold' => true), array('spaceBefore' => 300)); - $header = array('size' => 34, 'bold' => true); - $secHeader = array('size' => 13, 'bold' => true); - - $title = $data['title']; - - $section = $phpWord->addSection(); - $section->addText($title, $header); - - foreach ($report as $item) { - - // Adding a software to the document... - $section->addTitle($item->getDate()->format('d.m.Y'), 2); - - $table = $section->addTable(); - $table->addRow(); - $table->addCell(100 * 50)->addText('Datum'); - $table->addCell(100 * 50)->addText($item->getDate()->format('d.m.Y')); - - $table->addRow(); - $table->addCell()->addText('Startzeit'); - $table->addCell()->addText($item->getStart()->format('H:i')); - - $table->addRow(); - $table->addCell()->addText('Endzeit'); - $table->addCell()->addText($item->getStart()->format('H:i')); - - $table->addRow(); - $table->addCell()->addText('Bearbeiter'); - $table->addCell()->addText($item->getUser()->getEmail()); - - $table->addRow(); - $table->addCell()->addText('Vor Ort'); - $table->addCell()->addText($item->getOnSite() ? 'Ja' : 'Nein'); - - $section->addText('Beschreibung', $secHeader); - $section->addText($item->getDescription()); - } - - $section->addHeader()->addText($title); - $section->addFooter()->addText('Powered by open-datenschutzcenter.de'); - - // Saving the document as OOXML file... - $objWriter = IOFactory::createWriter($phpWord, 'Word2007'); - - // Create a temporal file in the system - $fileName = $data['title'] . '.docx'; - $temp_file = tempnam(sys_get_temp_dir(), $fileName); - - // Write in the temporal filepath - $objWriter->save($temp_file); - - // Send the temporal file as response (as an attachment) - $response = new BinaryFileResponse($temp_file); - $response->setContentDisposition( - ResponseHeaderBag::DISPOSITION_ATTACHMENT, - $fileName + return $this->redirectToRoute( + 'bericht', + [ + 'snack' => $this->translator->trans(id: 'report.notAvailable', domain: 'bericht') + ] ); - - return $response; } } diff --git a/src/Controller/ClientRequestController.php b/src/Controller/ClientRequestController.php index 1a4c9aae..57b60be3 100644 --- a/src/Controller/ClientRequestController.php +++ b/src/Controller/ClientRequestController.php @@ -2,32 +2,47 @@ namespace App\Controller; -use App\Entity\ClientRequest; use App\Entity\Team; use App\Form\Type\ClientRequesCommentType; use App\Form\Type\ClientRequestInternalNoteType; use App\Form\Type\ClientRequestInternalType; use App\Form\Type\ClientRequestType; use App\Form\Type\ClientRequestViewType; +use App\Repository\ClientRequestRepository; use App\Service\ClientRequestService; +use App\Service\CurrentTeamService; use App\Service\NotificationService; use App\Service\SecurityService; +use Doctrine\ORM\EntityManagerInterface; +use Exception; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Contracts\Translation\TranslatorInterface; class ClientRequestController extends AbstractController { - /** - * @Route("/client-requests", name="client_requests") - */ - public function allClientRequests(SecurityService $securityService) + + + public function __construct( + private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { + } + + #[Route(path: '/client-requests', name: 'client_requests')] + public function allClientRequests( + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ClientRequestRepository $clientRequestRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $client = $this->getDoctrine()->getRepository(ClientRequest::class)->findBy(['team' => $team, 'emailValid' => true]); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $client = $clientRequestRepository->findBy(['team' => $team, 'emailValid' => true]); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('dashboard'); @@ -35,233 +50,283 @@ public function allClientRequests(SecurityService $securityService) return $this->render('client_request/indexInternal.html.twig', [ 'client' => $client, - 'team' => $team + 'currentTeam' => $team ]); } - /** - * @Route("/client-requests/show", name="client_requests_show") - */ - public function showClientRequests(SecurityService $securityService, Request $request) + #[Route(path: '/client/{slug}/comment', name: 'client_comment')] + #[ParamConverter('team', options: ['mapping' => ['slug' => 'slug']])] + public function clientComment( + Request $request, + Team $team, + ClientRequestService $clientRequestService, + ClientRequestRepository $clientRequestRepository, + ): Response { + $data = $request->get('client_request_comment'); + $clientRequest = $clientRequestRepository->findOneBy(['token' => $request->get('token')]); - $team = $this->getUser()->getTeam(); - $clientRequest = $this->getDoctrine()->getRepository(ClientRequest::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($clientRequest, $team) === false) { - return $this->redirectToRoute('client_requests'); - } - - $form = $this->createForm(ClientRequesCommentType::class); + $content = $data['comment']; + $clientRequestService->newComment($clientRequest, $content, $clientRequest->getName(), 0); - return $this->render('client_request/internalShow.html.twig', [ - 'data' => $clientRequest, - 'team' => $team, - 'form' => $form->createView(), - 'snack' => $request->get('snack') - ]); + $snack = $this->translator->trans(id: 'save.comment', domain: 'general'); + return $this->redirectToRoute('client_show', ['slug' => $team->getSlug(), 'token' => $clientRequest->getToken(), 'snack' => $snack]); } - /** - * @Route("/client-requests/comment", name="client_request_comment") - */ - public function clientRequestComment(SecurityService $securityService, Request $request, ClientRequestService $clientRequestService) + #[Route(path: '/client-requests/comment', name: 'client_request_comment')] + public function clientRequestComment( + SecurityService $securityService, + Request $request, + ClientRequestService $clientRequestService, + CurrentTeamService $currentTeamService, + ClientRequestRepository $clientRequestRepository, + ): Response { - $data = $request->get('client_reques_comment'); - $clientRequest = $this->getDoctrine()->getRepository(ClientRequest::class)->find($request->get('clientRequest')); + $data = $request->get('client_request_comment'); + $clientRequest = $clientRequestRepository->find($request->get('clientRequest')); - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamDataCheck($clientRequest, $team) === false) { return $this->redirectToRoute('client_requests'); } $content = $data['comment']; - $clientRequestService->newComment($clientRequest, $content, $this->getUser()->getTeam()->getName() . ' > ' . $this->getUser()->getUsername(), 1); + $clientRequestService->newComment($clientRequest, $content, $team->getKeycloakGroup() . ' > ' . $this->getUser()->getUsername(), 1); return $this->redirectToRoute('client_requests_show', ['id' => $clientRequest->getId()]); } - /** - * @Route("/client-requests/userValidate", name="client_valid_user") - */ - public function validateUserRequest(SecurityService $securityService, Request $request, ClientRequestService $clientRequestService) + #[Route(path: '/client-requests/close', name: 'client_request_close')] + public function closeRequest( + SecurityService $securityService, + Request $request, + ClientRequestService $clientRequestService, + CurrentTeamService $currentTeamService, + ClientRequestRepository $clientRequestRepository, + ): Response { - $clientRequest = $this->getDoctrine()->getRepository(ClientRequest::class)->find($request->get('id')); - - $team = $this->getUser()->getAdminUser(); - if ($securityService->teamDataCheck($clientRequest, $team) === false) { - return $this->redirectToRoute('client_requests'); - } - - $clientRequestService->userValid($clientRequest, $this->getUser()); - return $this->redirectToRoute('client_requests_show', ['id' => $clientRequest->getId()]); - } + $clientRequest = $clientRequestRepository->find($request->get('id')); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); - /** - * @Route("/client-requests/close", name="client_request_close") - */ - public function closeRequest(SecurityService $securityService, Request $request, ClientRequestService $clientRequestService) - { - $clientRequest = $this->getDoctrine()->getRepository(ClientRequest::class)->find($request->get('id')); + if ($securityService->teamDataCheck($clientRequest, $team) && $securityService->adminCheck($user, $team)) { + $clientRequestService->closeRequest($clientRequest, $this->getUser()); - $team = $this->getUser()->getAdminUser(); - if ($securityService->teamDataCheck($clientRequest, $team) === false) { - return $this->redirectToRoute('client_requests'); + return $this->redirectToRoute('client_requests_show', ['id' => $clientRequest->getId()]); } - $clientRequestService->closeRequest($clientRequest, $this->getUser()); - return $this->redirectToRoute('client_requests_show', ['id' => $clientRequest->getId()]); + // if security check fails + return $this->redirectToRoute('client_requests'); } - /** - * @Route("/client-requests/internal", name="client_request_make_internal") - */ - public function makeInternalRequest(TranslatorInterface $translator, SecurityService $securityService, Request $request, ClientRequestService $clientRequestService) + #[Route(path: '/client-requests/edit', name: 'client_requests_edit')] + public function editClientRequests( + SecurityService $securityService, + Request $request, + ValidatorInterface $validator, + ClientRequestService $clientRequestService, + CurrentTeamService $currentTeamService, + ClientRequestRepository $clientRequestRepository, + ) { - $clientRequest = $this->getDoctrine()->getRepository(ClientRequest::class)->find($request->get('id')); - - $team = $this->getUser()->getAdminUser(); - if ($securityService->teamDataCheck($clientRequest, $team) === false) { - return $this->redirectToRoute('client_requests'); - } - if ($clientRequestService->interalRequest($clientRequest)) { - $snack = $translator->trans('Änderung gespeichert.'); - } else { - $snack = $translator->trans('Fehler. Bitte noch einmal versuchen'); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $clientRequest = $clientRequestRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($clientRequest, $team) && $securityService->adminCheck($user, $team)) { + $contentArray = [ + 'Anfrage wurde geändert || Alte Nachricht: ' . $clientRequest->getTitle(), + $this->translator->trans(id: 'email', domain: 'general') . ': ' . $clientRequest->getEmail(), + $this->translator->trans(id: 'name', domain: 'general') . ': ' . $clientRequest->getName(), + $this->translator->trans(id: 'reason', domain: 'general') . ': ' . $clientRequest->getItemString(), + $this->translator->trans(id: 'description', domain: 'general') . ': ' . $clientRequest->getDescription(), + $this->translator->trans(id: 'additionalInformation', domain: 'general') . ': ' . $clientRequest->getFirstname() . ' ' . $clientRequest->getLastname(), + $this->translator->trans(id: 'birthday', domain: 'general') . ': ' . $clientRequest->getBirthday()->format('d.m.Y'), + $this->translator->trans(id: 'address', domain: 'general') . ': ' . $clientRequest->getStreet() . ' ' . $clientRequest->getCity(), + ]; + $content = implode(' | ', $contentArray); + + $form = $this->createForm(ClientRequestType::class, $clientRequest); + $form->remove('password'); + $form->handleRequest($request); + $errors = array(); + if ($form->isSubmitted() && $form->isValid()) { + $clientRequest = $form->getData(); + $errors = $validator->validate($clientRequest); + if (count($errors) == 0) { + $this->em->persist($clientRequest); + $this->em->flush(); + + $clientRequestService->newComment($clientRequest, $content, $team->getKeycloakGroup() . ' > ' . $this->getUser()->getUsername(), 1); + + $snack = $this->translator->trans(id: 'save.changeSuccessful', domain: 'general'); + return $this->redirectToRoute('client_requests_show', ['id' => $clientRequest->getId(), 'snack' => $snack]); + } + } + return $this->render('client_request/internalEdit.html.twig', [ + 'data' => $clientRequest, + 'team' => $team, + 'form' => $form->createView() + ]); } - return $this->redirectToRoute('client_requests_show', ['id' => $clientRequest->getId(), 'snack' => $snack]); + + // if security check fails + return $this->redirectToRoute('client_requests'); } - /** - * @Route("/client-requests/internalNote", name="client_requests_internal_note") - */ - public function internalNoteClientRequests(SecurityService $securityService, Request $request, ValidatorInterface $validator) + #[Route(path: '/client/{slug}', name: 'client_index')] + #[ParamConverter('team', options: ['mapping' => ['slug' => 'slug']])] + public function index( + Team $team, + Request $request, + ClientRequestRepository $clientRequestRepository, + ): Response { - - $team = $this->getUser()->getTeam(); - $clientRequest = $this->getDoctrine()->getRepository(ClientRequest::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($clientRequest, $team) === false) { - return $this->redirectToRoute('client_requests'); - } - $form = $this->createForm(ClientRequestInternalNoteType::class, $clientRequest); + $form = $this->createForm(ClientRequestViewType::class); $form->handleRequest($request); + $snack = $request->get('snack'); $errors = array(); if ($form->isSubmitted() && $form->isValid()) { - $em = $this->getDoctrine()->getManager(); - $clientRequest = $form->getData(); - - $errors = $validator->validate($clientRequest); - if (count($errors) == 0) { - $em->persist($clientRequest); - $em->flush(); + $search = $form->getData(); + $pass = sha1($search['password']); + $clientRequest = $clientRequestRepository->findOneBy([ + 'uuid' => $search['uuid'], + 'email' => $search['email'], + 'password' => $pass, + 'open' => true + ]); - return $this->redirectToRoute('client_requests_show', ['id' => $clientRequest->getId(), 'snack' => 'Änderung gespeichert']); + if (count($errors) == 0 && $clientRequest) { + return $this->redirectToRoute('client_show', ['slug' => $team->getSlug(), 'token' => $clientRequest->getToken()]); } + $snack = $this->translator->trans(id: 'login.error.retry', domain: 'client_request'); } - return $this->render('client_request/internalEdit.html.twig', ['data' => $clientRequest, 'team' => $team, 'form' => $form->createView(),]); - } + return $this->render('client_request/index.html.twig', [ + 'form' => $form->createView(), + 'team' => $team, + 'snack' => $snack + ]); + } - /** - * @Route("/client-requests/edit", name="client_requests_edit") - */ - public function editClientRequests(SecurityService $securityService, Request $request, ValidatorInterface $validator, ClientRequestService $clientRequestService, TranslatorInterface $translator) + #[Route(path: '/client-requests/internalNote', name: 'client_requests_internal_note')] + public function internalNoteClientRequests( + SecurityService $securityService, + Request $request, + ValidatorInterface $validator, + CurrentTeamService $currentTeamService, + ClientRequestRepository $clientRequestRepository, + ): Response { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $clientRequest = $clientRequestRepository->find($request->get('id')); - $team = $this->getUser()->getAdminUser(); - $clientRequest = $this->getDoctrine()->getRepository(ClientRequest::class)->find($request->get('id')); if ($securityService->teamDataCheck($clientRequest, $team) === false) { return $this->redirectToRoute('client_requests'); } - $content = 'Anfrage wurde geändert || Alte Nachricht: ' . $clientRequest->getTitle() . '| Email: ' . $clientRequest->getEmail() . '| Name: ' . $clientRequest->getName() . '| Grund: ' . $clientRequest->getItemString() . '| Beschreibung: ' . $clientRequest->getDescription() . '| Zusätzliche Angaben: ' . $clientRequest->getFirstname() . ' ' . $clientRequest->getLastname() . ', Geburtstag: ' . $clientRequest->getBirthday()->format('d.m.Y') . ', Adresse: ' . $clientRequest->getStreet() . ' ' . $clientRequest->getCity(); - - $form = $this->createForm(ClientRequestType::class, $clientRequest); - $form->remove('password'); + $form = $this->createForm(ClientRequestInternalNoteType::class, $clientRequest); $form->handleRequest($request); - $errors = array(); + $errors = []; if ($form->isSubmitted() && $form->isValid()) { - $em = $this->getDoctrine()->getManager(); $clientRequest = $form->getData(); + $errors = $validator->validate($clientRequest); if (count($errors) == 0) { - $em->persist($clientRequest); - $em->flush(); - - $clientRequestService->newComment($clientRequest, $content, $this->getUser()->getTeam()->getName() . ' > ' . $this->getUser()->getUsername(), 1); - - $snack = $translator->trans('Änderung gespeichert.'); - return $this->redirectToRoute('client_requests_show', ['id' => $clientRequest->getId(), 'snack' => $snack]); + $this->em->persist($clientRequest); + $this->em->flush(); + + return $this->redirectToRoute( + 'client_requests_show', + [ + 'id' => $clientRequest->getId(), + 'snack' => $this->translator->trans(id: 'save.changesSuccessful', domain: 'general'), + ], + ); } } - return $this->render('client_request/internalEdit.html.twig', [ - 'data' => $clientRequest, - 'team' => $team, - 'form' => $form->createView() - ]); - } + return $this->render( + 'client_request/internalEdit.html.twig', + [ + 'data' => $clientRequest, + 'team' => $team, + 'form' => $form->createView(), + ], + ); + } - /** - * @Route("/client/{slug}", name="client_index") - * @ParamConverter("team", options={"mapping": {"slug": "slug"}}) - */ - public function index(Team $team, Request $request, TranslatorInterface $translator) + #[Route(path: '/client-requests/internal', name: 'client_request_make_internal')] + public function makeInternalRequest( + SecurityService $securityService, + Request $request, + ClientRequestService $clientRequestService, + CurrentTeamService $currentTeamService, + ClientRequestRepository $clientRequestRepository, + ): Response { - $form = $this->createForm(ClientRequestViewType::class); - $form->handleRequest($request); - $snack = $request->get('snack'); - $errors = array(); - if ($form->isSubmitted() && $form->isValid()) { - $search = $form->getData(); - $pass = sha1($search['password']); - $clientRequest = $this->getDoctrine()->getRepository(ClientRequest::class)->findOneBy(['uuid' => $search['uuid'], 'email' => $search['email'], 'password' => $pass, 'open' => true]); + $clientRequest = $clientRequestRepository->find($request->get('id')); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); - if (count($errors) == 0 && $clientRequest) { - return $this->redirectToRoute('client_show', ['slug' => $team->getSlug(), 'token' => $clientRequest->getToken()]); + if ($securityService->teamDataCheck($clientRequest, $team) && $securityService->adminCheck($user, $team)) { + if ($clientRequestService->interalRequest($clientRequest)) { + $snack = $this->translator->trans(id: 'save.changesSuccessful', domain: 'general'); + } else { + $snack = $this->translator->trans(id: 'error.retry', domain: 'general'); } - $snack = $translator->trans('Login war nicht erfolgreich. Bitte versuchen Sie es noch einmal.'); + return $this->redirectToRoute('client_requests_show', ['id' => $clientRequest->getId(), 'snack' => $snack]); } - return $this->render('client_request/index.html.twig', [ - 'form' => $form->createView(), - 'team' => $team, - 'snack' => $snack - ]); + // if security check fails + return $this->redirectToRoute('client_requests'); } - /** - * @Route("/client/{slug}/new", name="client_new") - * @ParamConverter("team", options={"mapping": {"slug": "slug"}}) - */ - public function newRequest(Request $request, ValidatorInterface $validator, Team $team, ClientRequestService $clientRequestService, NotificationService $notificationService) + #[Route(path: '/client/{slug}/new', name: 'client_new')] + #[ParamConverter('team', options: ['mapping' => ['slug' => 'slug']])] + public function newRequest( + Request $request, + ValidatorInterface $validator, + Team $team, + ClientRequestService $clientRequestService, + NotificationService $notificationService, + ): Response { $form = $clientRequestService->newRequest($team); $form->handleRequest($request); $errors = array(); if ($form->isSubmitted() && $form->isValid()) { - $em = $this->getDoctrine()->getManager(); $clientRequest = $form->getData(); $clientRequest->setPassword(sha1($clientRequest->getPassword())); $errors = $validator->validate($clientRequest); if (count($errors) == 0) { - $em->persist($clientRequest); + $this->em->persist($clientRequest); if ($clientRequest->getPgp()) { $content = $this->renderView('email/client/notificationVerifyEncrypt.html.twig', ['data' => $clientRequest]); try { - $notificationService->sendEncrypt($clientRequest->getPgp(), $content, $clientRequest->getEmail(), 'Neue Nachricht vom Datenschutzcenter'); - } catch (\Exception $e) { + $notificationService->sendEncrypt( + $clientRequest->getPgp(), + $content, + $clientRequest->getEmail(), + $this->translator->trans(id: 'emailFromOdc', domain: 'client_request')); + } catch (Exception $e) { $clientRequest->setPgp(null); - $em->persist($clientRequest); + $this->em->persist($clientRequest); } } if (!$clientRequest->getPgp()) { - $content = $this->renderView('email/client/notificationVerify.html.twig', ['data' => $clientRequest, 'title' => $clientRequest->getTitle(), 'team' => $clientRequest->getTeam()]); + $content = $this->renderView( + 'email/client/notificationVerify.html.twig', + [ + 'data' => $clientRequest, + 'title' => $clientRequest->getTitle(), + 'team' => $clientRequest->getTeam() + ] + ); $notificationService->sendRequestVerify($content, $clientRequest->getEmail()); } - $em->flush(); + $this->em->flush(); return $this->redirectToRoute('client_show', ['slug' => $team->getSlug(), 'token' => $clientRequest->getToken()]); } } @@ -272,13 +337,40 @@ public function newRequest(Request $request, ValidatorInterface $validator, Team ]); } - /** - * @Route("/client/{slug}/show", name="client_show") - * @ParamConverter("team", options={"mapping": {"slug": "slug"}}) - */ - public function showRequest(Request $request, Team $team, TranslatorInterface $translator) + #[Route(path: '/client-requests/show', name: 'client_requests_show')] + public function showClientRequests( + SecurityService $securityService, + Request $request, + CurrentTeamService $currentTeamService, + ClientRequestRepository $clientRequestRepository, + ): Response { - $clientRequest = $this->getDoctrine()->getRepository(ClientRequest::class)->findOneBy(['token' => $request->get('token'), 'open' => true]); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $clientRequest = $clientRequestRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($clientRequest, $team) === false) { + return $this->redirectToRoute('client_requests'); + } + + $form = $this->createForm(ClientRequesCommentType::class); + + return $this->render('client_request/internalShow.html.twig', [ + 'data' => $clientRequest, + 'team' => $team, + 'form' => $form->createView(), + 'snack' => $request->get('snack') + ]); + } + + #[Route(path: '/client/{slug}/show', name: 'client_show')] + #[ParamConverter('team', options: ['mapping' => ['slug' => 'slug']])] + public function showRequest( + Request $request, + Team $team, + ClientRequestRepository $clientRequestRepository + ): Response + { + $clientRequest = $clientRequestRepository->findOneBy(['token' => $request->get('token'), 'open' => true]); if ($clientRequest) { $form = $this->createForm(ClientRequesCommentType::class); @@ -288,52 +380,61 @@ public function showRequest(Request $request, Team $team, TranslatorInterface $t 'form' => $form->createView(), ]); } - $snack = $translator->trans('Token passt zu keinem offenen Ticket'); + $snack = $this->translator->trans(id: 'noTicketMatched', domain: 'client_request'); return $this->redirectToRoute('client_index', ['slug' => $team->getSlug(), 'snack' => $snack]); } - /** - * @Route("/client/{slug}/comment", name="client_comment") - * @ParamConverter("team", options={"mapping": {"slug": "slug"}}) - */ - public function clientComment(Request $request, Team $team, ClientRequestService $clientRequestService, TranslatorInterface $translator) + #[Route(path: '/client/{slug}/verify', name: 'client_valid')] + #[ParamConverter('team', options: ['mapping' => ['slug' => 'slug']])] + public function validateRequest( + Request $request, + Team $team, + NotificationService $notificationService, + ClientRequestService $clientRequestService, + ClientRequestRepository $clientRequestRepository, + ): Response { - $data = $request->get('client_reques_comment'); - $clientRequest = $this->getDoctrine()->getRepository(ClientRequest::class)->findOneBy(['token' => $request->get('token')]); - - $content = $data['comment']; - $clientRequestService->newComment($clientRequest, $content, $clientRequest->getName(), 0); - - $snack = $translator->trans('Kommentar gespeichert'); - return $this->redirectToRoute('client_show', ['slug' => $team->getSlug(), 'token' => $clientRequest->getToken(), 'snack' => $snack]); - } - - /** - * @Route("/client/{slug}/verify", name="client_valid") - * @ParamConverter("team", options={"mapping": {"slug": "slug"}}) - */ - public function validateRequest(Request $request, Team $team, NotificationService $notificationService, ClientRequestService $clientRequestService, TranslatorInterface $translator) - { - $clientRequest = $this->getDoctrine()->getRepository(ClientRequest::class)->findOneBy(['uuid' => $request->get('token')]); - $snack = $translator->trans('Es wurde kein offenes Ticket gefunden.'); + $clientRequest = $clientRequestRepository->findOneBy(['uuid' => $request->get('token')]); + $snack = $this->translator->trans(id: 'noOpenTicket', domain: 'client_request'); if ($clientRequest) { if (!$clientRequest->getEmailValid()) { $clientRequest->setEmailValid(true); - $em = $this->getDoctrine()->getManager(); - $em->persist($clientRequest); - $em->flush(); + $this->em->persist($clientRequest); + $this->em->flush(); $contentInternal = $this->renderView('email/client/notificationNew.html.twig', ['data' => $clientRequest, 'title' => $clientRequest->getTitle(), 'team' => $clientRequest->getTeam()]); foreach ($clientRequest->getTeam()->getAdmins() as $admin) { $notificationService->sendRequestNew($contentInternal, $admin->getEmail()); } - $content = 'Email wurde erfolgreich verifiziert'; + $content = $this->translator->trans(id: 'email.verify', domain: 'client_request'); $clientRequestService->newComment($clientRequest, $content, $clientRequest->getName(), 1); - $snack = $translator->trans('Email wurde erfolgreich verifiziert'); + $snack = $this->translator->trans(id: 'email.verify', domain: 'client_request'); } else { - $snack = $translator->trans('Email bereits verifiziert'); + $snack = $this->translator->trans(id: 'email.alreadyVerified', domain: 'client_request'); } } return $this->redirectToRoute('client_index', ['slug' => $team->getSlug(), 'snack' => $snack]); } + + #[Route(path: '/client-requests/userValidate', name: 'client_valid_user')] + public function validateUserRequest( + SecurityService $securityService, + Request $request, + ClientRequestService $clientRequestService, + CurrentTeamService $currentTeamService, + ClientRequestRepository $clientRequestRepository, + ): Response + { + $clientRequest = $clientRequestRepository->find($request->get('id')); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + + if ($securityService->teamDataCheck($clientRequest, $team) && $securityService->adminCheck($user, $team)) { + $clientRequestService->userValid($clientRequest, $user); + return $this->redirectToRoute('client_requests_show', ['id' => $clientRequest->getId()]); + } + + // if security check fails + return $this->redirectToRoute('client_requests'); + } } diff --git a/src/Controller/CronController.php b/src/Controller/CronController.php index 7cec910e..b065c0ce 100644 --- a/src/Controller/CronController.php +++ b/src/Controller/CronController.php @@ -4,6 +4,7 @@ use App\Entity\AkademieBuchungen; use App\Service\NotificationService; +use DateTime; use Psr\Log\LoggerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; @@ -12,12 +13,10 @@ class CronController extends AbstractController { - /** - * @Route("/cron/akademie_update", name="cron_akademie") - */ + #[Route(path: '/cron/akademie_update', name: 'cron_akademie')] public function updateCronAkademie(NotificationService $notificationService, Request $request, LoggerInterface $logger) { - $today = new \DateTime(); + $today = new DateTime(); if ($request->get('token') !== $this->getParameter('cronToken')) { $message = ['error' => true, 'hinweis' => 'Token fehlerhaft', 'token' => $request->get('token'), 'ip' => $request->getClientIp()]; @@ -36,14 +35,16 @@ public function updateCronAkademie(NotificationService $notificationService, Req $em = $this->getDoctrine()->getManager(); $countNeu = 0; $countWdh = 0; + + // TODO: How should users with multiple teams be handled? foreach ($buchungen as $buchung) { if (!$buchung->getInvitation()) { - $content = $this->renderView('email/neuerKurs.html.twig', ['buchung' => $buchung, 'team' => $buchung->getUser()->getTeam()]); + $content = $this->renderView('email/neuerKurs.html.twig', ['buchung' => $buchung, 'team' => $buchung->getUser()->getTeams()->get(0)]); $buchung->setInvitation(true); $em->persist($buchung); ++$countNeu; } else { - $content = $this->renderView('email/errinnerungKurs.html.twig', ['buchung' => $buchung, 'team' => $buchung->getUser()->getTeam()]); + $content = $this->renderView('email/errinnerungKurs.html.twig', ['buchung' => $buchung, 'team' => $buchung->getUser()->getTeams()->get(0)]); ++$countWdh; } $notificationService->sendNotificationAkademie($buchung, $content); diff --git a/src/Controller/DashboardController.php b/src/Controller/DashboardController.php index a9a07af0..56bcd23f 100644 --- a/src/Controller/DashboardController.php +++ b/src/Controller/DashboardController.php @@ -6,7 +6,7 @@ * Time: 09:15 */ - /** +/** * Modified by * User: Jan Juister * Date: 13.05.2022 @@ -14,96 +14,97 @@ namespace App\Controller; -use App\Entity\AkademieBuchungen; -use App\Entity\AuditTom; -use App\Entity\Datenweitergabe; -use App\Entity\Forms; -use App\Entity\Kontakte; -use App\Entity\Policies; -use App\Entity\Software; -use App\Entity\Task; -use App\Entity\Team; -use App\Entity\Tom; -use App\Entity\VVT; -use App\Entity\VVTDsfa; -use App\Entity\Loeschkonzept; -use App\Entity\VVTDatenkategorie; +use App\Repository\AkademieBuchungenRepository; +use App\Repository\AuditTomRepository; +use App\Repository\DatenweitergabeRepository; +use App\Repository\FormsRepository; +use App\Repository\KontakteRepository; +use App\Repository\LoeschkonzeptRepository; +use App\Repository\PoliciesRepository; +use App\Repository\SoftwareRepository; +use App\Repository\TaskRepository; +use App\Repository\TeamRepository; +use App\Repository\TomRepository; +use App\Repository\VVTDatenkategorieRepository; +use App\Repository\VVTDsfaRepository; +use App\Repository\VVTRepository; +use App\Service\CurrentTeamService; +use App\Service\SecurityService; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class DashboardController extends AbstractController { - /** - * @Route("/", name="dashboard") - */ - public function dashboard(Request $request) + #[Route(path: '/', name: 'dashboard')] + public function dashboard(Request $request, + CurrentTeamService $currentTeamService, + SecurityService $securityService, + TeamRepository $teamRepository, + DatenweitergabeRepository $transferRepository, + VVTRepository $procedureRepository, + AuditTomRepository $auditRepository, + VVTDsfaRepository $impactAssessmentRepository, + FormsRepository $formRepository, + PoliciesRepository $policyRepository, + SoftwareRepository $softwareRepository, + KontakteRepository $contactRepository, + TomRepository $tomRepository, + LoeschkonzeptRepository $deletionConceptRepository, + VVTDatenkategorieRepository $dataCategoryRepository, + AkademieBuchungenRepository $bookingRepository, + TaskRepository $taskRepository + ): Response { - $team = $this->getUser()->getTeam(); - $allTeams = $this->getDoctrine()->getRepository(Team::class)->findAll(); - if (sizeof($allTeams) === 0){ + // if no teams exist, redirect to first_run + $allTeams = $teamRepository->findAll(); + if (sizeof($allTeams) === 0) { return $this->redirectToRoute('first_run'); } - if ($team === null && $this->getUser()->getAkademieUser() !== null) { - return $this->redirectToRoute('akademie'); - } elseif ($team === null && count($dsbTeams = $this->getUser()->getTeamDsb()) > 0) { - return $this->redirectToRoute('dsb'); - } elseif ($team === null && $this->getUser()->getAkademieUser() === null) { - return $this->redirectToRoute('no_team'); - } - - $audit = $this->getDoctrine()->getRepository(AuditTom::class)->findAllByTeam($team); - $daten = $this->getDoctrine()->getRepository(Datenweitergabe::class)->findBy(array('team' => $team, 'activ' => true, 'art' => 1)); - $av = $this->getDoctrine()->getRepository(Datenweitergabe::class)->findBy(array('team' => $team, 'activ' => true, 'art' => 2)); - $vvt = $this->getDoctrine()->getRepository(VVT::class)->findActivByTeam($team); - $vvtDsfa = $this->getDoctrine()->getRepository(VVTDsfa::class)->findActivByTeam($team); - $kontakte = $this->getDoctrine()->getRepository(Kontakte::class)->findActivByTeam($team); - $tom = $this->getDoctrine()->getRepository(Tom::class)->findActivByTeam($team); - $forms = $this->getDoctrine()->getRepository(Forms::class)->findPublicByTeam($team); - $policies = $this->getDoctrine()->getRepository(Policies::class)->findPublicByTeam($team); - $software = $this->getDoctrine()->getRepository(Software::class)->findActivByTeam($team); - $tasks = $this->getDoctrine()->getRepository(Task::class)->findBy(['team' => $team, 'activ' => true, 'done' => false]); - $loeschkonzepte = $this->getDoctrine()->getRepository(Loeschkonzept::class)->findByTeam($team); - $vvtdatenkategorien = $this->getDoctrine()->getRepository(VVTDatenkategorie::class)->findByTeam($team); - $qb = $this->getDoctrine()->getRepository(AuditTom::class)->createQueryBuilder('audit'); - $qb->andWhere('audit.team = :team') - ->andWhere('audit.activ = 1') - ->andWhere('audit.status = 5 OR audit.status = 6') - ->orderBy('audit.createdAt', 'DESC') - ->setParameter('team', $team); - $query = $qb->getQuery(); - $kritischeAudits = $query->getResult(); + // else get team for current user + $user = $this->getUser(); + $currentTeam = $currentTeamService->getTeamFromSession($user); - $qb = $this->getDoctrine()->getRepository(VVT::class)->createQueryBuilder('vvt'); - $qb->andWhere('vvt.team = :team') - ->andWhere('vvt.activ = 1') - ->andWhere('vvt.status = 3') - ->orderBy('vvt.CreatedAt', 'DESC') - ->setParameter('team', $team); - $query = $qb->getQuery(); - $kritischeVvts = $query->getResult(); - - $qb = $this->getDoctrine()->getRepository(VVTDsfa::class)->createQueryBuilder('dsfa'); - $qb->innerJoin('dsfa.vvt', 'vvt') - ->andWhere('vvt.activ = 1') - ->andWhere('dsfa.activ = 1') - ->andWhere('dsfa.dsb IS NULL OR dsfa.ergebnis IS NULL') - ->andWhere('vvt.team = :team') - ->setParameter('team', $team); - $query = $qb->getQuery(); - $openDsfa = $query->getResult(); + if ($currentTeam === null) { + if ($securityService->superAdminCheck($this->getUser())) { + return $this->redirectToRoute('manage_teams'); + } elseif ($this->getUser()->getAkademieUser() !== null) { + return $this->redirectToRoute('akademie'); + } elseif (count($this->getUser()->getTeamDsb()) > 0) { + return $this->redirectToRoute('dsb'); + } else { + return $this->redirectToRoute('no_team'); + } + } - $assignVvt = $this->getUser()->getAssignedVvts()->toarray(); - $assignAudit = $this->getUser()->getAssignedAudits()->toarray(); - $assignDsfa = $this->getUser()->getAssignedDsfa()->toarray(); - $assignDatenweitergabe = $this->getUser()->getAssignedDatenweitergaben()->toarray(); - $assignTasks = $this->getDoctrine()->getRepository(Task::class)->findActivByUser($this->getUser()); + $audit = $auditRepository->findAllByTeam($currentTeam); + $daten = $transferRepository->findActiveTransfersByTeam($currentTeam); + $av = $transferRepository->findActiveOrderProcessingsByTeam($currentTeam); + $vvt = $procedureRepository->findActiveByTeam($currentTeam); + $vvtDsfa = $impactAssessmentRepository->findActiveByTeam($currentTeam); + $kontakte = $contactRepository->findActiveByTeam($currentTeam); + $tom = $tomRepository->findActiveByTeam($currentTeam); + $forms = $formRepository->findPublicByTeam($currentTeam); + $policies = $policyRepository->findPublicByTeam($currentTeam); + $software = $softwareRepository->findActiveByTeam($currentTeam); + $tasks = $taskRepository->findActiveAndOpenByTeam($currentTeam); + $loeschkonzepte = $deletionConceptRepository->findByTeam($currentTeam); + $vvtdatenkategorien = $dataCategoryRepository->findByTeam($currentTeam); + $kritischeAudits = $auditRepository->findCriticalByTeam($currentTeam); + $kritischeVvts = $procedureRepository->findCriticalByTeam($currentTeam); + $openDsfa = $impactAssessmentRepository->findActiveAndOpenByTeam($currentTeam); + $buchungen = $bookingRepository->findActiveByUser($user); - $buchungen = $this->getDoctrine()->getRepository(AkademieBuchungen::class)->findActivBuchungenByUser($this->getUser()); + $assignVvt = $procedureRepository->findActiveByTeamAndUser($currentTeam, $user); + $assignAudit = $auditRepository->findActiveByTeamAndUser($currentTeam, $user); + $assignDsfa = $impactAssessmentRepository->findActiveByTeamAndUser($currentTeam, $user); + $assignDatenweitergabe = $transferRepository->findActiveByTeamAndUser($currentTeam, $user); + $assignTasks = $taskRepository->findActiveByTeamAndUser($currentTeam, $user); return $this->render('dashboard/index.html.twig', [ - 'team' => $team, + 'currentTeam' => $currentTeam, 'audit' => $audit, 'daten' => $daten, 'vvt' => $vvt, @@ -126,19 +127,17 @@ public function dashboard(Request $request) 'tasks' => $tasks, 'snack' => $request->get('snack'), 'loeschkonzepte' => $loeschkonzepte, - 'vvtdatenkategorien' => $vvtdatenkategorien, - + 'vvtdatenkategorien' => $vvtdatenkategorien, + ]); } - /** - * @Route("/no_team", name="no_team") - */ - public function noTeam() + #[Route(path: '/no_team', name: 'no_team')] + public function noTeam(): Response { if ($this->getUser()) { - if ($this->getUser()->getTeam()) { + if (count($this->getUser()->getTeams())) { return $this->redirectToRoute('dashboard'); } if ($this->getUser()->getAkademieUser()) { diff --git a/src/Controller/DatenweitergabeController.php b/src/Controller/DatenweitergabeController.php index 1d203740..2d87fd74 100644 --- a/src/Controller/DatenweitergabeController.php +++ b/src/Controller/DatenweitergabeController.php @@ -9,12 +9,15 @@ namespace App\Controller; use App\Entity\Datenweitergabe; +use App\Repository\DatenweitergabeRepository; use App\Service\ApproveService; use App\Service\AssignService; +use App\Service\CurrentTeamService; use App\Service\DatenweitergabeService; use App\Service\DisableService; use App\Service\SecurityService; -use League\Flysystem\FilesystemInterface; +use Doctrine\ORM\EntityManagerInterface; +use League\Flysystem\FilesystemOperator; use Psr\Log\LoggerInterface; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -23,135 +26,232 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class DatenweitergabeController extends AbstractController { - /** - * @Route("/datenweitergabe", name="datenweitergabe") - */ - public function indexDatenweitergabe(SecurityService $securityService) + public function __construct( + private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) { - $team = $this->getUser()->getTeam(); - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); - } - - $daten = $this->getDoctrine()->getRepository(Datenweitergabe::class)->findBy(array('team' => $this->getUser()->getTeam(), 'activ' => true, 'art' => 1)); - return $this->render('datenweitergabe/index.html.twig', [ - 'table' => $daten, - 'titel' => 'Alle Datenweitergaben nach DSGVO Art. 30(1)', - ]); - } - - /** - * @Route("/auftragsverarbeitung", name="auftragsverarbeitung") - */ - public function indexAuftragsverarbeitung(SecurityService $securityService) - { - $team = $this->getUser()->getTeam(); - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); - } - - $daten = $this->getDoctrine()->getRepository(Datenweitergabe::class)->findBy(array('team' => $this->getUser()->getTeam(), 'activ' => true, 'art' => 2)); - return $this->render('datenweitergabe/indexAuftragsverarbeitung.html.twig', [ - 'table' => $daten, - 'titel' => 'Verarbeitungen nach DSGVO Art. 30(2)', - ]); } - /** - * @Route("/datenweitergabe/new", name="datenweitergabe_new") - */ - public function addDatenweitergabe(ValidatorInterface $validator, Request $request, DatenweitergabeService $datenweitergabeService, SecurityService $securityService) + #[Route(path: '/auftragsverarbeitung/new', name: 'auftragsverarbeitung_new')] + public function addAuftragsverarbeitung( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + DatenweitergabeService $datenweitergabeService, + CurrentTeamService $currentTeamService, + ): Response { set_time_limit(600); - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('dashboard'); } - $daten = $datenweitergabeService->newDatenweitergabe($this->getUser(), 1, 'DW-'); + $daten = $datenweitergabeService->newDatenweitergabe($this->getUser(), 2); $form = $datenweitergabeService->createForm($daten, $team); $form->handleRequest($request); $errors = array(); if ($form->isSubmitted() && $form->isValid()) { - $em = $this->getDoctrine()->getManager(); + $daten = $form->getData(); foreach ($daten->getVerfahren() as $item) { $item->addDatenweitergaben($daten); - $em->persist($item); + $this->em->persist($item); } + $errors = $validator->validate($daten); if (count($errors) == 0) { - - $em->persist($daten); - $em->flush(); - return $this->redirectToRoute('datenweitergabe'); + $this->em->persist($daten); + $this->em->flush(); + return $this->redirectToRoute('auftragsverarbeitung'); } } return $this->render('datenweitergabe/new.html.twig', [ 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Datenweitergabe erstellen', + 'title' => $this->translator->trans(id: 'requestProcessing.create', domain: 'datenweitergabe'), 'daten' => $daten, 'activNummer' => true, 'activ' => $daten->getActiv() ]); } - /** - * @Route("/auftragsverarbeitung/new", name="auftragsverarbeitung_new") - */ - public function addAuftragsverarbeitung(ValidatorInterface $validator, Request $request, SecurityService $securityService, DatenweitergabeService $datenweitergabeService) + #[Route(path: '/datenweitergabe/new', name: 'datenweitergabe_new')] + public function addDatenweitergabe( + ValidatorInterface $validator, + Request $request, + DatenweitergabeService $datenweitergabeService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response { set_time_limit(600); - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('dashboard'); } - $daten = $datenweitergabeService->newDatenweitergabe($this->getUser(), 2, 'AVV-'); + $daten = $datenweitergabeService->newDatenweitergabe($this->getUser(), 1); $form = $datenweitergabeService->createForm($daten, $team); $form->handleRequest($request); $errors = array(); if ($form->isSubmitted() && $form->isValid()) { - $em = $this->getDoctrine()->getManager(); + $daten = $form->getData(); foreach ($daten->getVerfahren() as $item) { $item->addDatenweitergaben($daten); - $em->persist($item); + $this->em->persist($item); } - $errors = $validator->validate($daten); if (count($errors) == 0) { - $em->persist($daten); - $em->flush(); - return $this->redirectToRoute('auftragsverarbeitung'); + + $this->em->persist($daten); + $this->em->flush(); + return $this->redirectToRoute('datenweitergabe'); } } return $this->render('datenweitergabe/new.html.twig', [ 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Auftragsverarbeitung erstellen', + 'title' => $this->translator->trans(id: 'dataTransfer.create', domain: 'datenweitergabe'), 'daten' => $daten, 'activNummer' => true, 'activ' => $daten->getActiv() ]); } - /** - * @Route("/datenweitergabe/edit", name="datenweitergabe_edit") - */ - public function EditDatenweitergabe(ValidatorInterface $validator, Request $request, SecurityService $securityService, DatenweitergabeService $datenweitergabeService, AssignService $assignService) + #[Route(path: '/datenweitergabe/approve', name: 'datenweitergabe_approve')] + public function approveDatenweitergabe( + Request $request, + SecurityService $securityService, + ApproveService $approveService, + CurrentTeamService $currentTeamService, + DatenweitergabeRepository $dataTransferRepository, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $daten = $dataTransferRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($daten, $team) && $securityService->adminCheck($user, $team)) { + $approve = $approveService->approve($daten, $this->getUser()); + if ($approve['clone'] === true) { + $newDaten = $dataTransferRepository->find($approve['data']); + + + foreach ($newDaten->getVerfahren() as $item) { + $item->addDatenweitergaben($newDaten); + $this->em->persist($item); + } + foreach ($newDaten->getSoftware() as $item) { + $item->addDatenweitergabe($newDaten); + $this->em->persist($item); + } + $this->em->flush(); + } + return $this->redirectToRoute('datenweitergabe_edit', ['id' => $approve['data'], 'snack' => $approve['snack']]); + } + + // if security check fails + if ($daten->getArt() === 1) { + return $this->redirectToRoute('datenweitergabe'); + } + return $this->redirectToRoute('auftragsverarbeitung'); + } + + #[Route(path: '/datenweitergabe/disable', name: 'datenweitergabe_disable')] + public function disableDatenweitergabe( + Request $request, + SecurityService $securityService, + DisableService $disableService, + CurrentTeamService $currentTeamService, + DatenweitergabeRepository $dataTransferRepository, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $daten = $dataTransferRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($daten, $team) && $securityService->adminCheck($user, $team) && !$daten->getApproved()) { + $disableService->disable($daten, $user); + } + + if ($daten->getArt() === 1) { + return $this->redirectToRoute('datenweitergabe'); + } + return $this->redirectToRoute('auftragsverarbeitung'); + } + + #[Route(path: '/datenweitergabe/download/{id}', name: 'datenweitergabe_download_file', methods: ['GET'])] + #[ParamConverter('datenweitergabe', options: ['mapping' => ['id' => 'id']])] + public function downloadArticleReference( + FilesystemOperator $datenFilesystem, + Datenweitergabe $datenweitergabe, + SecurityService $securityService, + LoggerInterface $logger, + CurrentTeamService $currentTeamService, + ): Response + { + $stream = $datenFilesystem->read($datenweitergabe->getUpload()); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamDataCheck($datenweitergabe, $team) === false) { + $logger->error( + 'DOWNLOAD', + [ + 'typ' => 'DOWNLOAD', + 'error' => true, + 'hinweis' => 'Fehlerhafter download. User nicht berechtigt!', + 'dokument' => $datenweitergabe->getUpload(), + 'user' => $this->getUser()->getUsername() + ]); + return $this->redirectToRoute('dashboard'); + } + + $type = $datenFilesystem->getMimetype($datenweitergabe->getUpload()); + $response = new Response($stream); + $response->headers->set('Content-Type', $type); + $disposition = HeaderUtils::makeDisposition( + HeaderUtils::DISPOSITION_ATTACHMENT, + preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $datenweitergabe->getUpload()) + ); + + $response->headers->set('Content-Disposition', $disposition); + $logger->info( + 'DOWNLOAD', + [ + 'typ' => 'DOWNLOAD', + 'error' => false, + 'hinweis' => 'Download erfolgreich', + 'dokument' => $datenweitergabe->getUpload(), + 'user' => $this->getUser()->getUsername() + ], + ); + return $response; + } + + #[Route(path: '/datenweitergabe/edit', name: 'datenweitergabe_edit')] + public function editDatenweitergabe( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + DatenweitergabeService $datenweitergabeService, + AssignService $assignService, + CurrentTeamService $currentTeamService, + DatenweitergabeRepository $dataTransferRepository, + ): Response { set_time_limit(600); - $team = $this->getUser()->getTeam(); - $daten = $this->getDoctrine()->getRepository(Datenweitergabe::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $daten = $dataTransferRepository->find($request->get('id')); if ($securityService->teamDataCheck($daten, $team) === false) { if ($daten->getArt() === 1) { @@ -169,33 +269,39 @@ public function EditDatenweitergabe(ValidatorInterface $validator, Request $requ $errors = array(); if ($form->isSubmitted() && $form->isValid() && $daten->getActiv() && !$daten->getApproved()) { - $em = $this->getDoctrine()->getManager(); + $daten->setActiv(false); $newDaten = $form->getData(); foreach ($newDaten->getVerfahren() as $item) { $item->addDatenweitergaben($newDaten); - $em->persist($item); + $this->em->persist($item); } foreach ($newDaten->getSoftware() as $item) { $item->addDatenweitergabe($newDaten); - $em->persist($item); + $this->em->persist($item); } $errors = $validator->validate($newDaten); if (count($errors) == 0) { - $em->persist($newDaten); - $em->persist($daten); - $em->flush(); - return $this->redirectToRoute('datenweitergabe_edit', array('id' => $newDaten->getId(), 'snack' => 'Erfolgreich gespeichert')); + $this->em->persist($newDaten); + $this->em->persist($daten); + $this->em->flush(); + return $this->redirectToRoute( + 'datenweitergabe_edit', + [ + 'id' => $newDaten->getId(), + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general'), + ], + ); } } return $this->render('datenweitergabe/edit.html.twig', [ 'form' => $form->createView(), 'assignForm' => $assign->createView(), 'errors' => $errors, - 'title' => 'Datenweitergabe bearbeiten', + 'title' => $this->translator->trans(id: 'dataTransfer.edit', domain: 'datenweitergabe'), 'daten' => $daten, 'activ' => $daten->getActiv(), 'activNummer' => false, @@ -203,85 +309,43 @@ public function EditDatenweitergabe(ValidatorInterface $validator, Request $requ ]); } - /** - * @Route("/datenweitergabe/download/{id}", name="datenweitergabe_download_file", methods={"GET"}) - * @ParamConverter("datenweitergabe", options={"mapping"={"id"="id"}}) - */ - public function downloadArticleReference(FilesystemInterface $datenFileSystem, Datenweitergabe $datenweitergabe, SecurityService $securityService, LoggerInterface $logger) + #[Route(path: '/auftragsverarbeitung', name: 'auftragsverarbeitung')] + public function indexAuftragsverarbeitung( + SecurityService $securityService, + CurrentTeamService $currentTeamService, + DatenweitergabeRepository $dataTransferRepository, + ): Response { - - $stream = $datenFileSystem->read($datenweitergabe->getUpload()); - - $team = $this->getUser()->getTeam(); - if ($securityService->teamDataCheck($datenweitergabe, $team) === false) { - $message = ['typ' => 'DOWNLOAD', 'error' => true, 'hinweis' => 'Fehlerhafter download. User nicht berechtigt!', 'dokument' => $datenweitergabe->getUpload(), 'user' => $this->getUser()->getUsername()]; - $logger->error($message['typ'], $message); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('dashboard'); } - $type = $datenFileSystem->getMimetype($datenweitergabe->getUpload()); - $response = new Response($stream); - $response->headers->set('Content-Type', $type); - $disposition = HeaderUtils::makeDisposition( - HeaderUtils::DISPOSITION_ATTACHMENT, - preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $datenweitergabe->getUpload()) - ); - - $response->headers->set('Content-Disposition', $disposition); - $message = ['typ' => 'DOWNLOAD', 'error' => false, 'hinweis' => 'Download erfolgreich', 'dokument' => $datenweitergabe->getUpload(), 'user' => $this->getUser()->getUsername()]; - $logger->info($message['typ'], $message); - return $response; - } - - /** - * @Route("/datenweitergabe/approve", name="datenweitergabe_approve") - */ - public function approveDatenweitergabe(Request $request, SecurityService $securityService, ApproveService $approveService) - { - $team = $this->getUser()->getAdminUser(); - $daten = $this->getDoctrine()->getRepository(Datenweitergabe::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($daten, $team) === false) { - if ($daten->getArt() === 1) { - return $this->redirectToRoute('datenweitergabe'); - } - return $this->redirectToRoute('auftragsverarbeitung'); - } - $approve = $approveService->approve($daten, $this->getUser()); - - if ($approve['clone'] === true) { - $newDaten = $this->getDoctrine()->getRepository(Datenweitergabe::class)->find($approve['data']); - $em = $this->getDoctrine()->getManager(); - - foreach ($newDaten->getVerfahren() as $item) { - $item->addDatenweitergaben($newDaten); - $em->persist($item); - } - foreach ($newDaten->getSoftware() as $item) { - $item->addDatenweitergabe($newDaten); - $em->persist($item); - } - $em->flush(); - } - - return $this->redirectToRoute('datenweitergabe_edit', ['id' => $approve['data'], 'snack' => $approve['snack']]); + $daten = $dataTransferRepository->findBy(array('team' => $team, 'activ' => true, 'art' => 2)); + return $this->render('datenweitergabe/indexAuftragsverarbeitung.html.twig', [ + 'table' => $daten, + 'titel' => $this->translator->trans(id: 'dataTransfer.disclaimer', domain: 'datenweitergabe'), + 'currentTeam' => $team, + ]); } - /** - * @Route("/datenweitergabe/disable", name="datenweitergabe_disable") - */ - public function disableDatenweitergabe(Request $request, SecurityService $securityService, DisableService $disableService) + #[Route(path: '/datenweitergabe', name: 'datenweitergabe')] + public function indexDataTransfer( + SecurityService $securityService, + CurrentTeamService $currentTeamService, + DatenweitergabeRepository $dataTransferRepository, + ): Response { - $team = $this->getUser()->getAdminUser(); - $daten = $this->getDoctrine()->getRepository(Datenweitergabe::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($daten, $team) === true && !$daten->getApproved()) { - $disableService->disable($daten, $this->getUser()); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamCheck($team) === false) { + return $this->redirectToRoute('dashboard'); } - if ($daten->getArt() === 1) { - return $this->redirectToRoute('datenweitergabe'); - } - return $this->redirectToRoute('auftragsverarbeitung'); + $daten = $dataTransferRepository->findBy(array('team' => $team, 'activ' => true, 'art' => 1)); + return $this->render('datenweitergabe/index.html.twig', [ + 'table' => $daten, + 'titel' => $this->translator->trans(id: 'dataTransfer.disclaimer', domain: 'datenweitergabe'), + 'currentTeam' => $team, + ]); } } diff --git a/src/Controller/DsbController.php b/src/Controller/DsbController.php index ad4d1529..69b76c34 100644 --- a/src/Controller/DsbController.php +++ b/src/Controller/DsbController.php @@ -2,45 +2,65 @@ namespace App\Controller; -use App\Entity\Team; +use App\Repository\TeamRepository; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Contracts\Translation\TranslatorInterface; class DsbController extends AbstractController { - /** - * @Route("/ext-dsb", name="dsb") - */ - public function index() - { - $dsbTeams = $this->getUser()->getTeamDsb(); - if (count($dsbTeams) < 1) { - return $this->redirectToRoute('dashboard'); - } - return $this->render('dsb/index.html.twig', [ - 'teams' => $dsbTeams, - ]); + + public function __construct(private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { } - /** - * @Route("/ext-dsb/change", name="dsb_change") - */ - public function change(Request $request) + #[Route(path: '/ext-dsb/change', name: 'dsb_change')] + public function change( + Request $request, + TeamRepository $teamRepository, + ): Response { - $team = $this->getDoctrine()->getRepository(Team::class)->find($request->get('id')); + $team = $teamRepository->find($request->get('id')); if (in_array($team, $this->getUser()->getTeamDsb()->toarray())) { $user = $this->getUser(); - $user->setTeam($team); - $user->setAdminUser($team); + $user->addTeam($team); + $team->addAdmin($user); $user->setAkademieUser($team); - $em = $this->getDoctrine()->getManager(); - $em->persist($user); - $em->flush(); - return $this->redirectToRoute('dashboard', ['snack' => 'Team gewächselt']); + $this->em->persist($user); + $this->em->persist($team); + $this->em->flush(); + return $this->redirectToRoute( + 'dashboard', + [ + 'snack' => $this->translator->trans(id: 'team.change.successful', domain: 'dsb'), + ], + ); } - return $this->redirectToRoute('dashboard', ['snack' => 'DSB passt nicht zu diesem Team. Benutzer kann das Team nicht wechseln.']); + return $this->redirectToRoute( + 'dashboard', + [ + 'snack' => $this->translator->trans(id: 'team.change.error', domain: 'dsb'), + ], + ); + } + + #[Route(path: '/ext-dsb', name: 'dsb')] + public function index(): Response + { + $dsbTeams = $this->getUser()->getTeamDsb(); + if (count($dsbTeams) < 1) { + return $this->redirectToRoute('dashboard'); + } + + return $this->render('dsb/index.html.twig', [ + 'teams' => $dsbTeams, + ]); } } diff --git a/src/Controller/ExternalController.php b/src/Controller/ExternalController.php index d02e2469..ee3b1dc8 100644 --- a/src/Controller/ExternalController.php +++ b/src/Controller/ExternalController.php @@ -2,25 +2,28 @@ namespace App\Controller; +use App\Service\CurrentTeamService; use App\Service\SecurityService; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class ExternalController extends AbstractController { - /** - * @Route("/external", name="external") - */ - public function index(SecurityService $securityService) + #[Route(path: '/external', name: 'external')] + public function index( + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('dashboard'); } return $this->render('external/index.html.twig', [ 'team' => $team, - 'hash' => hash('md5', $team->getName()), + 'hash' => md5($team->getName()), ]); } } diff --git a/src/Controller/FirstRunController.php b/src/Controller/FirstRunController.php index 3b43e656..3104c65a 100644 --- a/src/Controller/FirstRunController.php +++ b/src/Controller/FirstRunController.php @@ -2,55 +2,21 @@ namespace App\Controller; -use App\Entity\Team; -use App\Form\Type\TeamType; +use App\Repository\TeamRepository; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; -use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -use Symfony\Component\Validator\Validator\ValidatorInterface; class FirstRunController extends AbstractController { - /** - * @Route("/first/run", name="first_run") - */ - public function index(ValidatorInterface $validator, Request $request): Response + #[Route(path: '/first/run', name: 'first_run')] + public function index(TeamRepository $teamRepository): Response { - $teams = $this->getDoctrine()->getRepository(Team::class)->findAll(); - if (sizeof($teams) !== 0){ - return $this->redirectToRoute('no_team'); + $teams = $teamRepository->findAll(); + if (sizeof($teams) !== 0) { + return $this->redirectToRoute('dashboard'); } - $nteam = new Team(); - $nteam->setActiv(true); - $form = $this->createForm(TeamType::class, $nteam); - $form->remove('video'); - $form->remove('externalLink'); - $form->handleRequest($request); - - $errors = array(); - if ($form->isSubmitted() && $form->isValid()) { - $nTeam = $form->getData(); - $errors = $validator->validate($nTeam); - if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($nTeam); - $em->flush(); - $user = $this->getUser(); - $user->setTeam($nTeam); - $user->setAdminUser($nTeam); - $em->persist($user); - $em->flush(); - return $this->redirectToRoute('dashboard'); - } - } - - return $this->render('team/index.html.twig', [ - 'controller_name' => 'TeamController', - 'form' => $form->createView(), - 'errors' => $errors, - 'title' => 'Jetzt ein Team anlegen' - ]); + return $this->redirectToRoute('team_create'); } } diff --git a/src/Controller/FormsController.php b/src/Controller/FormsController.php index 271a1ff6..f9b9d8c1 100644 --- a/src/Controller/FormsController.php +++ b/src/Controller/FormsController.php @@ -3,12 +3,15 @@ namespace App\Controller; use App\Entity\Forms; +use App\Repository\FormsRepository; use App\Service\ApproveService; use App\Service\AssignService; +use App\Service\CurrentTeamService; use App\Service\DisableService; use App\Service\FormsService; use App\Service\SecurityService; -use League\Flysystem\FilesystemInterface; +use Doctrine\ORM\EntityManagerInterface; +use League\Flysystem\FilesystemOperator; use Psr\Log\LoggerInterface; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -17,32 +20,29 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class FormsController extends AbstractController { - /** - * @Route("/forms", name="forms") - */ - public function indexForms(SecurityService $securityService) - { - $team = $this->getUser()->getTeam(); - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); - } - $daten = $this->getDoctrine()->getRepository(Forms::class)->findBy(array('team' => $team, 'activ' => true)); - return $this->render('forms/index.html.twig', [ - 'table' => $daten, - 'titel' => 'Formulare', - ]); + + public function __construct(private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { } - /** - * @Route("/forms/new", name="forms_new") - */ - public function addForms(ValidatorInterface $validator, Request $request, FormsService $formsService, SecurityService $securityService) + #[Route(path: '/forms/new', name: 'forms_new')] + public function addForms( + ValidatorInterface $validator, + Request $request, + FormsService $formsService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('dashboard'); } @@ -54,32 +54,129 @@ public function addForms(ValidatorInterface $validator, Request $request, FormsS $errors = array(); if ($form->isSubmitted() && $form->isValid()) { - $em = $this->getDoctrine()->getManager(); $daten = $form->getData(); $errors = $validator->validate($daten); + if (count($errors) == 0) { + $this->em->persist($daten); + $this->em->flush(); - $em->persist($daten); - $em->flush(); return $this->redirectToRoute('forms'); } } return $this->render('forms/new.html.twig', [ 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Formular erstellen/hochladen', + 'title' => $this->translator->trans(id: 'form.create', domain: 'forms'), 'daten' => $daten, 'activ' => $daten->getActiv() ]); } - /** - * @Route("/forms/edit", name="forms_edit") - */ - public function EditFormulare(ValidatorInterface $validator, Request $request, SecurityService $securityService, FormsService $formsService, AssignService $assignService) + #[Route(path: '/forms/approve', name: 'forms_approve')] + public function approvePolicy( + Request $request, + SecurityService $securityService, + ApproveService $approveService, + CurrentTeamService $currentTeamService, + FormsRepository $formsRepository, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $forms = $formsRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($forms, $team) && $securityService->adminCheck($user, $team)) { + $approve = $approveService->approve($forms, $user); + return $this->redirectToRoute('forms_edit', ['id' => $approve['data'], 'snack' => $approve['snack']]); + } + + // if security check fails + return $this->redirectToRoute('forms'); + } + + #[Route(path: '/forms/disable', name: 'forms_disable')] + public function disable( + Request $request, + SecurityService $securityService, + DisableService $disableService, + CurrentTeamService $currentTeamService, + FormsRepository $formsRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $forms = $this->getDoctrine()->getRepository(Forms::class)->find($request->get('id')); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $forms = $formsRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($forms, $team) && $securityService->adminCheck($user, $team) && !$forms->getApproved()) { + $disableService->disable($forms, $user); + } + + return $this->redirectToRoute('forms'); + } + + #[Route(path: '/forms/download/{id}', name: 'forms_download_file', methods: ['GET'])] + #[ParamConverter('forms', options: ['mapping' => ['id' => 'id']])] + public function downloadArticleReference( + FilesystemOperator $formsFilesystem, + Forms $forms, + SecurityService $securityService, + LoggerInterface $logger, + CurrentTeamService $currentTeamService, + ): Response + { + $stream = $formsFilesystem->read($forms->getUpload()); + + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamDataCheck($forms, $team) === false) { + $logger->error( + 'DOWNLOAD', + [ + 'typ' => 'DOWNLOAD', + 'error' => true, + 'hinweis' => $this->translator->trans(id: 'user.unauthorized', domain: 'forms'), + 'dokument' => $forms->getUpload(), + 'user' => $this->getUser()->getUsername(), + ], + ); + return $this->redirectToRoute('dashboard'); + } + + $type = $formsFilesystem->getMimetype($forms->getUpload()); + $response = new Response($stream); + $response->headers->set('Content-Type', $type); + $disposition = HeaderUtils::makeDisposition( + HeaderUtils::DISPOSITION_ATTACHMENT, + preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $forms->getUpload()) + ); + + $response->headers->set('Content-Disposition', $disposition); + $logger->info( + 'DOWNLOAD', + [ + 'typ' => 'DOWNLOAD', + 'error' => false, + 'hinweis' => $this->translator->trans(id: 'download.successful', domain: 'general'), + 'dokument' => $forms->getUpload(), + 'user' => $this->getUser()->getUsername(), + ], + ); + return $response; + } + + #[Route(path: '/forms/edit', name: 'forms_edit')] + public function editFormulare( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + FormsService $formsService, + AssignService $assignService, + CurrentTeamService $currentTeamService, + FormsRepository $formsRepository, + ): Response + { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $forms = $formsRepository->find($request->get('id')); if ($securityService->teamDataCheck($forms, $team) === false) { return $this->redirectToRoute('forms'); @@ -93,91 +190,53 @@ public function EditFormulare(ValidatorInterface $validator, Request $request, S $errors = array(); if ($form->isSubmitted() && $form->isValid() && $forms->getActiv() && !$forms->getApproved()) { - $em = $this->getDoctrine()->getManager(); $forms->setActiv(false); $forms->setStatus(4); $newForms = $form->getData(); $errors = $validator->validate($newForms); if (count($errors) == 0) { - - $em->persist($newForms); - $em->persist($forms); - $em->flush(); - return $this->redirectToRoute('forms_edit', array('id' => $newForms->getId(), 'snack' => 'Erfolgreich gespeichert')); + $this->em->persist($newForms); + $this->em->persist($forms); + $this->em->flush(); + + return $this->redirectToRoute( + 'forms_edit', + [ + 'id' => $newForms->getId(), + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general'), + ] + ); } } return $this->render('forms/edit.html.twig', [ 'form' => $form->createView(), 'assignForm' => $assign->createView(), 'errors' => $errors, - 'title' => 'Formular bearbeiten', + 'title' => $this->translator->trans(id: 'form.edit', domain: 'forms'), 'daten' => $forms, 'activ' => $forms->getActiv(), 'snack' => $request->get('snack') ]); } - /** - * @Route("/forms/approve", name="forms_approve") - */ - public function approvePolicy(Request $request, SecurityService $securityService, ApproveService $approveService) - { - $team = $this->getUser()->getAdminUser(); - $forms = $this->getDoctrine()->getRepository(Forms::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($forms, $team) === false) { - return $this->redirectToRoute('forms'); - } - - $approve = $approveService->approve($forms, $this->getUser()); - - return $this->redirectToRoute('forms_edit', ['id' => $approve['data'], 'snack' => $approve['snack']]); - - } - - /** - * @Route("/forms/disable", name="forms_disable") - */ - public function disable(Request $request, SecurityService $securityService, DisableService $disableService) - { - $team = $this->getUser()->getAdminUser(); - $forms = $this->getDoctrine()->getRepository(Forms::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($forms, $team) === true && !$forms->getApproved()) { - $disableService->disable($forms, $this->getUser()); - } - - return $this->redirectToRoute('forms'); - } - - /** - * @Route("/forms/download/{id}", name="forms_download_file", methods={"GET"}) - * @ParamConverter("forms", options={"mapping"={"id"="id"}}) - */ - public function downloadArticleReference(FilesystemInterface $formsFileSystem, Forms $forms, SecurityService $securityService, LoggerInterface $logger) + #[Route(path: '/forms', name: 'forms')] + public function indexForms( + SecurityService $securityService, + CurrentTeamService $currentTeamService, + FormsRepository $formsRepository, + ): Response { - - $stream = $formsFileSystem->read($forms->getUpload()); - - $team = $this->getUser()->getTeam(); - if ($securityService->teamDataCheck($forms, $team) === false) { - $message = ['typ' => 'DOWNLOAD', 'error' => true, 'hinweis' => 'Fehlerhafter download. User nicht berechtigt!', 'dokument' => $forms->getUpload(), 'user' => $this->getUser()->getUsername()]; - $logger->error($message['typ'], $message); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('dashboard'); } - $type = $formsFileSystem->getMimetype($forms->getUpload()); - $response = new Response($stream); - $response->headers->set('Content-Type', $type); - $disposition = HeaderUtils::makeDisposition( - HeaderUtils::DISPOSITION_ATTACHMENT, - preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $forms->getUpload()) - ); - - $response->headers->set('Content-Disposition', $disposition); - $message = ['typ' => 'DOWNLOAD', 'error' => false, 'hinweis' => 'Download erfolgreich', 'dokument' => $forms->getUpload(), 'user' => $this->getUser()->getUsername()]; - $logger->info($message['typ'], $message); - return $response; + $daten = $formsRepository->findBy(['team' => $team, 'activ' => true]); + return $this->render('forms/index.html.twig', [ + 'table' => $daten, + 'titel' => $this->translator->trans(id: 'form.word', domain: 'forms'), + 'currentTeam' => $team, + ]); } } diff --git a/src/Controller/HealthCheckController.php b/src/Controller/HealthCheckController.php index 7b2cdfe8..8a731382 100644 --- a/src/Controller/HealthCheckController.php +++ b/src/Controller/HealthCheckController.php @@ -3,7 +3,8 @@ namespace App\Controller; -use Proxies\__CG__\App\Entity\Vorfall; +use App\Repository\VorfallRepository; +use Exception; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; @@ -11,15 +12,13 @@ class HealthCheckController extends AbstractController { - /** - * @Route("/health/check", name="health_check",methods={"GET"}) - */ - public function index(): Response + #[Route(path: '/health/check', name: 'health_check', methods: ['GET'])] + public function index(VorfallRepository $incidentRepository): Response { try { - $res = $this->getDoctrine()->getRepository(Vorfall::class)->findAll(); + $res = $incidentRepository->findAll(); $vorfall = $res[0]->getFakten(); - } catch (\Exception $exception) { + } catch (Exception $exception) { throw $this->createNotFoundException('Database not working'); } diff --git a/src/Controller/InvitationController.php b/src/Controller/InvitationController.php index 9c88b6f8..42ec1bf1 100644 --- a/src/Controller/InvitationController.php +++ b/src/Controller/InvitationController.php @@ -11,14 +11,12 @@ class InvitationController extends AbstractController { - /** - * @Route("/login/invitationAccept/{id}", name="invitation_accept") - * @ParamConverter("user", class="App\Entity\User",options={"mapping": {"id": "registerId"}}) - */ + #[Route(path: '/login/invitationAccept/{id}', name: 'invitation_accept')] + #[ParamConverter('user', class: 'App\Entity\User', options: ['mapping' => ['id' => 'registerId']])] public function index(InviteService $inviteService, User $user): Response { - $inviteService->connectUserWithEmail($user, $this->getUser()); + return $this->redirectToRoute('dashboard'); } } diff --git a/src/Controller/KontaktController.php b/src/Controller/KontaktController.php index 0c2cf7fa..01d03317 100644 --- a/src/Controller/KontaktController.php +++ b/src/Controller/KontaktController.php @@ -10,40 +10,38 @@ use App\Entity\Kontakte; use App\Form\Type\KontaktType; +use App\Repository\KontakteRepository; use App\Service\ApproveService; +use App\Service\CurrentTeamService; use App\Service\DisableService; use App\Service\SecurityService; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class KontaktController extends AbstractController { - /** - * @Route("/kontakt", name="kontakt") - */ - public function index(SecurityService $securityService) - { - $team = $this->getUser()->getTeam(); - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); - } - $kontakte = $this->getDoctrine()->getRepository(Kontakte::class)->findBy(array('team' => $team, 'activ' => true)); - return $this->render('kontakt/index.html.twig', [ - 'kontakte' => $kontakte, - 'title' => 'Kontakte' - ]); + public function __construct(private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { } - /** - * @Route("/kontakt/neu", name="kontakt_new") - */ - public function addKontakt(ValidatorInterface $validator, Request $request, SecurityService $securityService) + #[Route(path: '/kontakt/neu', name: 'kontakt_new')] + public function addKontakt( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('dashboard'); } @@ -59,9 +57,8 @@ public function addKontakt(ValidatorInterface $validator, Request $request, Secu $data = $form->getData(); $errors = $validator->validate($data); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($data); - $em->flush(); + $this->em->persist($data); + $this->em->flush(); return $this->redirectToRoute('kontakt'); } } @@ -69,18 +66,64 @@ public function addKontakt(ValidatorInterface $validator, Request $request, Secu 'kontakt' => $kontakt, 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Kontakt erstellen', + 'title' => $this->translator->trans(id: 'contact.create', domain: 'kontakt'), 'new' => true, ]); } - /** - * @Route("/kontakt/edit", name="kontakt_edit") - */ - public function editKontakt(ValidatorInterface $validator, Request $request, SecurityService $securityService) + #[Route(path: '/kontakt/approve', name: 'kontakt_approve')] + public function approve( + Request $request, + SecurityService $securityService, + ApproveService $approveService, + CurrentTeamService $currentTeamService, + KontakteRepository $contactRepository, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $kontakt = $contactRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($kontakt, $team) && $securityService->adminCheck($user, $team)) { + $approve = $approveService->approve($kontakt, $user); + return $this->redirectToRoute('kontakt_edit', ['id' => $kontakt->getId(), 'snack' => $approve['snack']]); + } + + // if security check fails + return $this->redirectToRoute('kontakt'); + } + + #[Route(path: '/kontakt/disable', name: 'kontakt_disable')] + public function disable( + Request $request, + SecurityService $securityService, + DisableService $disableService, + CurrentTeamService $currentTeamService, + KontakteRepository $contactRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $kontakt = $this->getDoctrine()->getRepository(Kontakte::class)->find($request->get('id')); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $kontakt = $contactRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($kontakt, $team) && $securityService->adminCheck($user, $team) && !$kontakt->getApproved()) { + $disableService->disable($kontakt, $user); + } + + return $this->redirectToRoute('kontakt'); + } + + #[Route(path: '/kontakt/edit', name: 'kontakt_edit')] + public function editKontakt( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + KontakteRepository $contactRepository, + ): Response + { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $kontakt = $contactRepository->find($request->get('id')); if ($securityService->teamDataCheck($kontakt, $team) === false) { return $this->redirectToRoute('kurse'); } @@ -93,49 +136,44 @@ public function editKontakt(ValidatorInterface $validator, Request $request, Sec $data = $form->getData(); $errors = $validator->validate($data); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($data); - $em->flush(); - return $this->redirectToRoute('kontakt_edit', ['id' => $kontakt->getId(), 'snack' => 'Erfolgreich gepeichert']); + $this->em->persist($data); + $this->em->flush(); + return $this->redirectToRoute( + 'kontakt_edit', + [ + 'id' => $kontakt->getId(), + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general'), + ] + ); } } return $this->render('kontakt/edit.html.twig', [ 'form' => $form->createView(), 'kontakt' => $kontakt, 'errors' => $errors, - 'title' => 'Kontakt erstellen', + 'title' => $this->translator->trans(id: 'contact.create', domain: 'kontakt'), 'snack' => $request->get('snack') ]); } - /** - * @Route("/kontakt/approve", name="kontakt_approve") - */ - public function approve(Request $request, SecurityService $securityService, ApproveService $approveService) + #[Route(path: '/kontakt', name: 'kontakt')] + public function index( + SecurityService $securityService, + CurrentTeamService $currentTeamService, + KontakteRepository $contactRepository, + ): Response { - $team = $this->getUser()->getAdminUser(); - $kontakt = $this->getDoctrine()->getRepository(Kontakte::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($kontakt, $team) === false) { - return $this->redirectToRoute('kontakt'); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamCheck($team) === false) { + return $this->redirectToRoute('dashboard'); } - $approve = $approveService->approve($kontakt, $this->getUser()); - return $this->redirectToRoute('kontakt_edit', ['id' => $kontakt->getId(), 'snack' => $approve['snack']]); - } + $kontakte = $contactRepository->findBy(['team' => $team, 'activ' => true]); - /** - * @Route("/kontakt/disable", name="kontakt_disable") - */ - public function disable(Request $request, SecurityService $securityService, DisableService $disableService) - { - $team = $this->getUser()->getAdminUser(); - $kontakt = $this->getDoctrine()->getRepository(Kontakte::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($kontakt, $team) === true && !$kontakt->getApproved()) { - $disableService->disable($kontakt, $this->getUser()); - } - - return $this->redirectToRoute('kontakt'); + return $this->render('kontakt/index.html.twig', [ + 'kontakte' => $kontakte, + 'title' => $this->translator->trans(id: 'contact', domain: 'general'), + 'currentTeam' => $team, + ]); } } diff --git a/src/Controller/KursController.php b/src/Controller/KursController.php index da93066d..4468af37 100644 --- a/src/Controller/KursController.php +++ b/src/Controller/KursController.php @@ -5,33 +5,50 @@ use App\Entity\AkademieKurse; use App\Form\Type\KursAnmeldungType; use App\Form\Type\KursType; +use App\Repository\AkademieKurseRepository; use App\Service\AkademieService; -use App\Service\NotificationService; +use App\Service\CurrentTeamService; use App\Service\SecurityService; +use DateTime; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class KursController extends AbstractController { - /** - * @Route("/kurs/new", name="akademie_kurs_new") - */ - public function addKurs(ValidatorInterface $validator, Request $request, SecurityService $securityService) + + + public function __construct(private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { + } + + #[Route(path: '/kurs/new', name: 'akademie_kurs_new')] + public function addKurs( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getAdminUser(); + $user = $this->getUser(); + $team = $currentTeamService->getCurrentAdminTeam($user); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('akademie_admin'); } - $today = new \DateTime(); + $today = new DateTime(); $daten = new AkademieKurse(); $daten->addTeam($team); $daten->setCreatedAt($today); $daten->setActiv(true); - $daten->setUser($this->getUser()); + $daten->setUser($user); $form = $this->createForm(KursType::class, $daten); $form->handleRequest($request); @@ -40,27 +57,36 @@ public function addKurs(ValidatorInterface $validator, Request $request, Securit if ($form->isSubmitted() && $form->isValid()) { $daten = $form->getData(); $errors = $validator->validate($daten); + if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($daten); - $em->flush(); + $this->em->persist($daten); + $this->em->flush(); + return $this->redirectToRoute('kurs_anmelden', ['id' => $daten->getId()]); } } + return $this->render('akademie/new.html.twig', [ + 'currentTeam' => $team, + 'adminArea' => true, 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Kurs erstellen', + 'title' => $this->translator->trans(id: 'lesson.create', domain: 'kurs'), ]); } - /** - * @Route("/kurs/edit", name="akademie_kurs_edit") - */ - public function editKurs(ValidatorInterface $validator, Request $request, SecurityService $securityService) + #[Route(path: '/kurs/edit', name: 'akademie_kurs_edit')] + public function editKurs( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + AkademieKurseRepository $academyLessonRepository, + ): Response { - $team = $this->getUser()->getAdminUser(); - $kurs = $this->getDoctrine()->getRepository(AkademieKurse::class)->find($request->get('id')); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $kurs = $academyLessonRepository->find($request->get('id')); if ($securityService->teamArrayDataCheck($kurs, $team) === false) { return $this->redirectToRoute('akademie_admin'); @@ -70,7 +96,7 @@ public function editKurs(ValidatorInterface $validator, Request $request, Securi return $this->redirectToRoute('akademie_admin'); } - $today = new \DateTime();; + $today = new DateTime(); $kurs->setCreatedAt($today); $form = $this->createForm(KursType::class, $kurs); @@ -81,56 +107,66 @@ public function editKurs(ValidatorInterface $validator, Request $request, Securi $daten = $form->getData(); $errors = $validator->validate($daten); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($daten); - $em->flush(); + $this->em->persist($daten); + $this->em->flush(); return $this->redirectToRoute('kurs_anmelden', ['id' => $daten->getId()]); } } return $this->render('akademie/new.html.twig', [ 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Verarbeitung erstellen', + 'title' => $this->translator->trans(id: 'processing.create', domain: 'kurs'), ]); } - /** - * @Route("/kurs/anmelden", name="kurs_anmelden") - */ - public function kursAnmelden(Request $request, NotificationService $notificationService, SecurityService $securityService, AkademieService $akademieService) + #[Route(path: '/kurs/anmelden', name: 'kurs_anmelden')] + public function kursAnmelden( + Request $request, + SecurityService $securityService, + AkademieService $akademieService, + CurrentTeamService $currentTeamService, + AkademieKurseRepository $academyLessonRepository, + ): Response { - $team = $this->getUser()->getAdminUser(); - $kurs = $this->getDoctrine()->getRepository(AkademieKurse::class)->find($request->get('id')); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $kurs = $academyLessonRepository->find($request->get('id')); if ($securityService->teamArrayDataCheck($kurs, $team) === false) { return $this->redirectToRoute('akademie_admin'); } $daten = array(); - $daten['zugewiesen'] = new \DateTime(); + $daten['zugewiesen'] = new DateTime(); $form = $this->createForm(KursAnmeldungType::class, $daten, ['user' => $team->getAkademieUsers()]); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $daten = $form->getData(); $akademieService->addUser($kurs, $daten); + return $this->redirectToRoute('akademie_admin'); } return $this->render('akademie/new.html.twig', [ 'form' => $form->createView(), - 'title' => 'Mitglieder diesem Kurs zuweisen', + 'title' => $this->translator->trans(id: 'lesson.members.assign', domain: 'kurs'), ]); } - /** - * @Route("/kurs/deaktivieren", name="kurs_deaktivieren") - */ - public function kursDeaktivieren(Request $request, SecurityService $securityService, AkademieService $akademieService) + #[Route(path: '/kurs/deaktivieren', name: 'kurs_deaktivieren')] + public function kursDeaktivieren( + Request $request, + SecurityService $securityService, + AkademieService $akademieService, + CurrentTeamService $currentTeamService, + AkademieKurseRepository $academyLessonRepository, + ): Response { - $team = $this->getUser()->getAdminUser(); - $kurs = $this->getDoctrine()->getRepository(AkademieKurse::class)->find($request->get('id')); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $kurs = $academyLessonRepository->find($request->get('id')); - if ($securityService->teamArrayDataCheck($kurs, $team) === false) { + if (!$securityService->teamArrayDataCheck($kurs, $team)) { return $this->redirectToRoute('akademie_admin'); } diff --git a/src/Controller/LoeschkonzeptController.php b/src/Controller/LoeschkonzeptController.php index 995b1c87..6d5966f3 100644 --- a/src/Controller/LoeschkonzeptController.php +++ b/src/Controller/LoeschkonzeptController.php @@ -9,37 +9,106 @@ namespace App\Controller; use App\Entity\Loeschkonzept; -use App\Form\Type\LoeschkonzeptType; -use App\Service\ApproveService; -use App\Service\DisableService; -use App\Service\SecurityService; -use App\Service\LoeschkonzeptService; use App\Repository\LoeschkonzeptRepository; use App\Repository\VVTDatenkategorieRepository; +use App\Service\CurrentTeamService; +use App\Service\LoeschkonzeptService; +use App\Service\SecurityService; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -use Doctrine\ORM\EntityManagerInterface; -use Symfony\Component\Form\FormFactoryInterface; -/** - * @Route("/loeschkonzept") - */ +#[Route(path: '/loeschkonzept')] class LoeschkonzeptController extends AbstractController { - /** - * @Route("/", name="app_loeschkonzept_index", methods={"GET"}) - */ - public function index(VVTDatenkategorieRepository $vvtDatenkategorieRepository, LoeschkonzeptRepository $loeschkonzeptRepository, SecurityService $securityService): Response + #[Route(path: '/{id}', name: 'app_loeschkonzept_delete', methods: ['POST'])] + public function delete( + Loeschkonzept $loeschkonzept, + EntityManagerInterface $entityManager, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + if ($securityService->teamCheck($team) && $securityService->adminCheck($user, $team)) { + $loeschkonzept->setActiv(false); + $entityManager->persist($loeschkonzept); + $entityManager->flush(); + } + return $this->redirectToRoute('app_loeschkonzept_index', [], Response::HTTP_SEE_OTHER); + } + + #[Route(path: '/{id}/edit', name: 'app_loeschkonzept_edit', methods: ['GET', 'POST'])] + public function edit( + Request $request, + Loeschkonzept $loeschkonzept, + LoeschkonzeptRepository $loeschkonzeptRepository, + EntityManagerInterface $entityManager, + VVTDatenkategorieRepository $VvtDatenkategorieRepository, + LoeschkonzeptService $loeschkonzeptService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response + { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamCheck($team) === false) { + return $this->redirectToRoute('app_loeschkonzept_index'); + } + + # remove datenkategory from loeschkonzept if it is not the newest relation + $vvtDatenkategories = $VvtDatenkategorieRepository->findByTeam($team); + foreach ($vvtDatenkategories as $vvtDatenkategorie) { + if ($vvtDatenkategorie->getLoeschkonzept()->last() != $loeschkonzept) { + $loeschkonzept->removeVvtdatenkategory($vvtDatenkategorie); + } + } + + $newloeschkonzept = $loeschkonzeptService->cloneLoeschkonzept($loeschkonzept); + foreach ($loeschkonzept->getVvtdatenkategories() as $datenkategorie) { + $newloeschkonzept->addVvtdatenkategory($datenkategorie); + } + $form = $loeschkonzeptService->createForm($newloeschkonzept, $team); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + + $loeschkonzeptRepository->add($newloeschkonzept); + + $newloeschkonzept->setActiv(true); + $loeschkonzept->setActiv(false); + + $entityManager->persist($loeschkonzept); + $entityManager->persist($newloeschkonzept); + + $entityManager->flush(); + + return $this->redirectToRoute('app_loeschkonzept_index', [], Response::HTTP_SEE_OTHER); + } + + return $this->renderForm('loeschkonzept/edit.html.twig', [ + 'loeschkonzept' => $newloeschkonzept, + 'form' => $form, + ]); + } + + #[Route(path: '/', name: 'app_loeschkonzept_index', methods: ['GET'])] + public function index( + VVTDatenkategorieRepository $vvtDatenkategorieRepository, + LoeschkonzeptRepository $loeschkonzeptRepository, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('dashboard'); } - $loeschkonzepte = $this->getDoctrine()->getRepository(Loeschkonzept::class)->findByTeam($team); + $loeschkonzepte = $loeschkonzeptRepository->findByTeam($team); # remove all kategories from loeschkonzepte foreach ($loeschkonzepte as $loeschkonzept) { @@ -48,28 +117,34 @@ public function index(VVTDatenkategorieRepository $vvtDatenkategorieRepository, $loeschkonzept->removeVvtdatenkategory($datenkategorie); } } - + # add datenkategory to loeschkonzept if it is the newest relation $vvtDatenkategories = $vvtDatenkategorieRepository->findByTeam($team); foreach ($vvtDatenkategories as $vvtDatenkategorie) { $loeschkonzept = $vvtDatenkategorie->getLoeschkonzept()->last(); - if ($loeschkonzept != false){ + if ($loeschkonzept != false) { $loeschkonzept->addVvtdatenkategory($vvtDatenkategorie); } } - + return $this->render('loeschkonzept/index.html.twig', [ 'loeschkonzepte' => $loeschkonzepte, + 'currentTeam' => $team, ]); } - /** - * @Route("/new", name="app_loeschkonzept_new", methods={"GET", "POST"}) - */ - public function new (Request $request, LoeschkonzeptRepository $loeschkonzeptRepository, EntityManagerInterface $entityManager, SecurityService $securityService, LoeschkonzeptService $loeschkonzeptService): Response + #[Route(path: '/new', name: 'app_loeschkonzept_new', methods: ['GET', 'POST'])] + public function new( + Request $request, + LoeschkonzeptRepository $loeschkonzeptRepository, + EntityManagerInterface $entityManager, + SecurityService $securityService, + LoeschkonzeptService $loeschkonzeptService, + CurrentTeamService $currentTeamService, + ): Response { $user = $this->getUser(); - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($user); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('dashboard'); } @@ -84,7 +159,7 @@ public function new (Request $request, LoeschkonzeptRepository $loeschkonzeptRep $datenkategory->addLoeschkonzept($loeschkonzept); $entityManager->persist($datenkategory); - } + } $entityManager->flush(); @@ -97,76 +172,11 @@ public function new (Request $request, LoeschkonzeptRepository $loeschkonzeptRep ]); } - /** - * @Route("/{id}", name="app_loeschkonzept_show", methods={"GET"}) - */ + #[Route(path: '/{id}', name: 'app_loeschkonzept_show', methods: ['GET'])] public function show(Loeschkonzept $loeschkonzept): Response { return $this->render('loeschkonzept/show.html.twig', [ 'loeschkonzept' => $loeschkonzept, ]); } - - /** - * @Route("/{id}/edit", name="app_loeschkonzept_edit", methods={"GET", "POST"}) - */ - public function edit(Request $request, Loeschkonzept $loeschkonzept, LoeschkonzeptRepository $loeschkonzeptRepository, EntityManagerInterface $entityManager, VVTDatenkategorieRepository $VvtDatenkategorieRepository, LoeschkonzeptService $loeschkonzeptService, SecurityService $securityService): Response - { - $team = $this->getUser()->getTeam(); - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('app_loeschkonzept_index'); - } - - # remove datenkategory from loeschkonzept if it is not the newest relation - $vvtDatenkategories = $VvtDatenkategorieRepository->findByTeam($team); - foreach ($vvtDatenkategories as $vvtDatenkategorie) { - if ($vvtDatenkategorie->getLoeschkonzept()->last() != $loeschkonzept) { - $loeschkonzept->removeVvtdatenkategory($vvtDatenkategorie); - } - } - - $newloeschkonzept = $loeschkonzeptService->cloneLoeschkonzept($loeschkonzept); - foreach ($loeschkonzept->getVvtdatenkategories() as $datenkategorie){ - $newloeschkonzept->addVvtdatenkategory($datenkategorie); - } - $form = $loeschkonzeptService->createForm($newloeschkonzept, $team); - $form->handleRequest($request); - - if ($form->isSubmitted() && $form->isValid()) { - - $loeschkonzeptRepository->add($newloeschkonzept); - - $newloeschkonzept->setActiv(true); - $loeschkonzept->setActiv(false); - - $entityManager->persist($loeschkonzept); - $entityManager->persist($newloeschkonzept); - - $entityManager->flush(); - - return $this->redirectToRoute('app_loeschkonzept_index', [], Response::HTTP_SEE_OTHER); - } - - return $this->renderForm('loeschkonzept/edit.html.twig', [ - 'loeschkonzept' => $newloeschkonzept, - 'form' => $form, - ]); - } - - /** - * @Route("/{id}", name="app_loeschkonzept_delete", methods={"POST"}) - */ - public function delete(Request $request, Loeschkonzept $loeschkonzept, LoeschkonzeptRepository $loeschkonzeptRepository, VVTDatenkategorieRepository $VvtDatenkategorieRepository, EntityManagerInterface $entityManager, SecurityService $securityService, DisableService $disableService): Response - { - $team = $this->getUser()->getAdminUser(); - if ($securityService->teamCheck($team) === true) - { - - $loeschkonzept->setActiv(false); - $entityManager->persist($loeschkonzept); - $entityManager->flush(); - } - - return $this->redirectToRoute('app_loeschkonzept_index', [], Response::HTTP_SEE_OTHER); - } } diff --git a/src/Controller/LoginController.php b/src/Controller/LoginController.php index b5199886..0bb944ed 100644 --- a/src/Controller/LoginController.php +++ b/src/Controller/LoginController.php @@ -2,8 +2,10 @@ namespace App\Controller; + use KnpU\OAuth2ClientBundle\Client\ClientRegistry; use KnpU\OAuth2ClientBundle\Client\Provider\Auth0Client; +use Stevenmaguire\OAuth2\Client\Provider\Keycloak; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -12,18 +14,11 @@ class LoginController extends AbstractController { - /** - * @Route("/login/auth0_login", name="login_auth0") - */ - public function index(ClientRegistry $clientRegistry): Response - { - return $clientRegistry->getClient('auth0_main')->redirect(['user']); - } - - /** - * @Route("/login/auth0_login/check", name="connect_auth0_check") - */ - public function check(ClientRegistry $clientRegistry, Request $request) + #[Route(path: '/login/auth0_login/check', name: 'connect_auth0_check')] + public function check( + ClientRegistry $clientRegistry, + Request $request, + ) { // ** if you want to *authenticate* the user, then // leave this method blank and create a Guard authenticator @@ -47,14 +42,35 @@ public function check(ClientRegistry $clientRegistry, Request $request) } } - /** - * @Route("/logout_keycloak", name="logout_keycloak") - */ - public function logout(ClientRegistry $clientRegistry, Request $request) + #[Route(path: '/login/auth0_login', name: 'login_auth0')] + public function index(ClientRegistry $clientRegistry): Response + { + return $clientRegistry->getClient('auth0_main')->redirect(['user']); + } + + #[Route(path: '/logout_keycloak', name: 'logout_keycloak')] + public function logout( + ClientRegistry $clientRegistry, + Request $request, + ) { - $url = $this->getParameter('KEYCLOAK_URL') - . '/realms/' . $this->getParameter('KEYCLOAK_REALM') - . '/protocol/openid-connect/logout?redirect_uri=' . $this->generateUrl('app_logout', [], UrlGenerator::ABSOLUTE_URL); + $provider = new Keycloak([ + 'authServerUrl' => $this->getParameter('KEYCLOAK_URL'), + 'realm' => $this->getParameter('KEYCLOAK_REALM'), + 'clientId' => $this->getParameter('KEYCLOAK_ID'), + 'clientSecret' => $this->getParameter('KEYCLOAK_SECRET'), + ]); + + + $redirectUri = $this->generateUrl('app_logout', array(), UrlGenerator::ABSOLUTE_URL); + $options = array( + 'id_token_hint' => $request->getSession()->get('id_token'), + 'post_logout_redirect_uri' => $redirectUri, + ); + + $url = $provider->getLogoutUrl( + $options + ); return $this->redirect($url); } diff --git a/src/Controller/LoginControllerKeycloak.php b/src/Controller/LoginControllerKeycloak.php index 2f133af3..3ab793b6 100644 --- a/src/Controller/LoginControllerKeycloak.php +++ b/src/Controller/LoginControllerKeycloak.php @@ -10,25 +10,21 @@ class LoginControllerKeycloak extends AbstractController { - /** - * @Route("/login", name="login_keycloak") - */ - public function index(ClientRegistry $clientRegistry): Response - { - return $clientRegistry->getClient('keycloak_main')->redirect(['email']); - } - public function check(ClientRegistry $clientRegistry, Request $request) { } - /** - * @Route("/login/keycloak_edit", name="connect_keycloak_edit") - */ + #[Route(path: '/login/keycloak_edit', name: 'connect_keycloak_edit')] public function edit(ClientRegistry $clientRegistry, Request $request) { - $url = $this->getParameter('KEYCLOAK_URL').'/realms/'.$this->getParameter('KEYCLOAK_REALM').'/account'; + $url = $this->getParameter('KEYCLOAK_URL') . '/realms/' . $this->getParameter('KEYCLOAK_REALM') . '/account'; return $this->redirect($url); } + + #[Route(path: '/login', name: 'login_keycloak')] + public function index(ClientRegistry $clientRegistry): Response + { + return $clientRegistry->getClient('keycloak_main')->redirect(['email', 'openid', 'profile']); + } } diff --git a/src/Controller/ParticipationController.php b/src/Controller/ParticipationController.php new file mode 100644 index 00000000..a92a9e51 --- /dev/null +++ b/src/Controller/ParticipationController.php @@ -0,0 +1,141 @@ + ['id' => 'id']])] + public function start(Participation $participation): RedirectResponse{ + $participation->setState(ParticipationStateTypes::$ONGOING); + + $this->em->persist($participation); + $this->em->flush(); + + return $this->redirectToRoute('participation_question', ['id' => $participation->getId()]); + } + + #[Route(path: '/reset/{id}', name: '_reset')] + #[ParamConverter(data: 'participation', class: Participation::class, options: ['mapping' => ['id' => 'id']])] + public function reset(Participation $oldParticipation): RedirectResponse + { + if($oldParticipation->isPassed()){ + return $this->redirectToRoute('akademie'); + } + + $billing = $oldParticipation->getAcademyBilling(); + $questionnaire = $oldParticipation->getQuestionnaire(); + + $this->em->remove($oldParticipation); + + $participation = (new Participation()) + ->setState(ParticipationStateTypes::$ASSIGNED) + ->setAcademyBilling($billing) + ->setQuestionnaire($questionnaire); + + $this->em->persist($participation); + $this->em->flush(); + + return $this->redirectToRoute('akademie'); + } + + #[Route(path: '/{id}/continue', name: '_continue', methods:['GET', 'POST'])] + #[ParamConverter(data: 'participation', class: Participation::class, options: ['mapping' => ['id' => 'id']])] + public function continue(Participation $participation): RedirectResponse + { + return $this->redirectToRoute('participation_question', ['id' => $participation->getId()]); + } + + #[Route(path: '/{id}/finish', name: '_finish', methods: ['GET', 'POST'])] + #[ParamConverter(data: 'participation', class: Participation::class, options: ['mapping' => ['id' => 'id']])] + public function finish(Participation $participation): RedirectResponse + { + $this->evaluate($participation); + $this->removeParticipationAnswers($participation); + + return $this->redirectToRoute('akademie'); + } + + private function evaluate(Participation $participation): void + { + $questionnaire = $participation->getQuestionnaire(); + + $questions = []; + $overallPoints = 0; + foreach($questionnaire->getQuestionnaireQuestions() as $questionnaireQuestion) { + $question = $questionnaireQuestion->getQuestion(); + $questions[] = $question; + $overallPoints += $question->getEvalValue(); + } + + $achievedPoints = 0; + + foreach($questions as $question) { + if($this->evaluateQuestion($question, $participation)){ + $achievedPoints += $question->getEvalValue(); + } + } + + $participation->setPassed($questionnaire->getPercentageToPass() <= ($achievedPoints/$overallPoints)); + $participation->setState(ParticipationStateTypes::$FINISHED); + } + + private function evaluateQuestion(Question $question, Participation $participation): bool { + $givenAnswers = []; + + foreach($participation->getParticipationAnswers() as $participationAnswer){ + if($participationAnswer->getQuestion() === $question){ + $givenAnswer = $participationAnswer->getAnswer(); + + if(!$givenAnswer->isCorrect()){ + return false; + } + + $givenAnswers[] = $givenAnswer; + } + } + + /** @var Answer $answer */ + foreach ($question->getAnswers() as $answer){ + if($answer->isCorrect() && !in_array($answer, $givenAnswers)){ + return false; + } + } + + return true; + } + + private function removeParticipationAnswers(Participation $participation): void + { + foreach($participation->getParticipationAnswers() as $participationAnswer) { + $this->em->remove($participationAnswer); + } + + $this->em->flush(); + } +} \ No newline at end of file diff --git a/src/Controller/ParticipationQuestionController.php b/src/Controller/ParticipationQuestionController.php new file mode 100644 index 00000000..21b13369 --- /dev/null +++ b/src/Controller/ParticipationQuestionController.php @@ -0,0 +1,209 @@ + ['id' => 'id']])] +class ParticipationQuestionController extends AbstractController +{ + private static string $TEMPLATE_DIR = 'questionnaire/participationQuestion/'; + + public function __construct( + private QuestionnaireQuestionRepository $questionnaireQuestionRepository, + private QuestionRepository $questionRepository, + private EntityManagerInterface $em, + ) + { + } + + #[Route(path: '', name: '', methods: ['GET', 'POST'])] + public function question(Participation $participation, Request $request): Response + { + # region validate + $error = $this->getError($participation); + + if ($error !== null) { + return $error; + } + # endregion validate + + # region handle_previous_question + $previousForm = $this->getPreviousForm($request); + + if ($previousForm !== null && $previousForm->isSubmitted()) { + $this->handleForm($previousForm, $participation); + $this->em->refresh($participation); + } + # endregion handle_previous_question + + # region get_current_question + $question = $this->getCurrentQuestion($previousForm, $participation); + # endregion get_current_question + + # region finish_if_last_question + if ($question === null) { + return $this->redirectToRoute('participation_finish', ['id' => $participation->getId()]); + } + # endregion finish_if_last_question + + return $this->render( + view: self::$TEMPLATE_DIR . 'question.html.twig', + parameters: ['form' => $this->createForm(DynamicQuestionType::class, options: ['question' => $question]), + 'question' => $question,], + ); + } + + private function getPreviousForm(Request $request): ?FormInterface + { + if($request->get('dynamic_question') === null){ + return null; + } + + $questionId = array_key_first($request->get('dynamic_question')); + $previousQuestion = $this->questionRepository->find($questionId); + + $form = $this->createForm(DynamicQuestionType::class, options: ['question' => $previousQuestion]); + $form->handleRequest($request); + + return $form; + } + + private function getCurrentQuestion(?FormInterface $form, Participation $participation): ?Question + { + $sortedQuestions = $this->getSortedQuestions($participation->getQuestionnaire()); + + if ($form === null) { + return $sortedQuestions[0]->getQuestion(); + } else { + $latestParticipationAnswer = $this->getLatestParticipationAnswer($participation); + $previousQuestionnaireQuestion = $this->getPreviousQuestionnaireQuestion($sortedQuestions, $latestParticipationAnswer); + if($previousQuestionnaireQuestion === array_reverse($sortedQuestions)[0]){ + return null; + } + + return $this->getNextQuestionnaireQuestionByQuestionnaireQuestion($previousQuestionnaireQuestion)->getQuestion(); + } + } + + private function getLatestParticipationAnswer(Participation $participation): ?ParticipationAnswer + { + foreach ($participation->getParticipationAnswers() as $participationAnswer) { + if ( + !isset($latestAnswer) + || $participationAnswer->getUpdatedAt()->format('U') > $latestAnswer->getUpdatedAt()->format('U') + ) { + $latestAnswer = $participationAnswer; + } + } + + return $latestAnswer ?? null; + } + + private + function getError(Participation $participation): ?Response + { + if ($participation->getAcademyBilling()->getUser() !== $this->getUser()) { + return $this->render(self::$TEMPLATE_DIR . 'error/wrongUser.html.twig'); + } + + if ($participation->getState() !== ParticipationStateTypes::$ONGOING) { + return $this->render(self::$TEMPLATE_DIR . 'error/invalidState.html.twig'); + } + + return null; + } + + /** @return QuestionnaireQuestion[] */ + private function getSortedQuestions(Questionnaire $questionnaire): array + { + return $this->questionnaireQuestionRepository->createQueryBuilder('qq') + ->where('qq.questionnaire = :questionnaire') + ->setParameter('questionnaire', $questionnaire) + ->orderBy('qq.step', 'ASC') + ->getQuery() + ->getResult(); + } + + /** @param QuestionnaireQuestion[] $sortedQuestions */ + private function getPreviousQuestionnaireQuestion( + array $sortedQuestions, + ParticipationAnswer $latestParticipationAnswer, + ): ?QuestionnaireQuestion + { + foreach ($sortedQuestions as $questionnaireQuestion) { + if ($questionnaireQuestion->getQuestion() === $latestParticipationAnswer->getQuestion()) { + return $questionnaireQuestion; + } + } + + return null; + } + + private function getNextQuestionnaireQuestionByQuestionnaireQuestion( + QuestionnaireQuestion $questionnaireQuestion, + ): QuestionnaireQuestion + { + return $this->questionnaireQuestionRepository->createQueryBuilder('qq') + ->where('qq.questionnaire = :questionnaire') + ->setParameter('questionnaire', $questionnaireQuestion->getQuestionnaire()) + ->andWhere('qq.step > :step') + ->setParameter('step', $questionnaireQuestion->getStep()) + ->orderBy('qq.step', 'ASC') + ->getQuery() + ->getResult()[0]; + } + + private + function handleForm(FormInterface $form, Participation $participation): void + { + $questions = $form->getData(); + $questionnaire = $participation->getQuestionnaire(); + + foreach ($questions as $questionId => $answers) { + if ($answers === null) { + return; + } + + if (is_array($answers)) { + foreach ($answers as $answer) { + $participationAnswer = (new ParticipationAnswer()) + ->setParticipation($participation) + ->setAnswer($answer) + ->setQuestion($this->questionRepository->find($questionId)) + ->setQuestionnaire($questionnaire); + + $this->em->persist($participationAnswer); + } + } else { + $participationAnswer = (new ParticipationAnswer()) + ->setParticipation($participation) + ->setAnswer($answers) + ->setQuestion($this->questionRepository->find($questionId)) + ->setQuestionnaire($questionnaire); + + $this->em->persist($participationAnswer); + } + } + + $this->em->flush(); + } +} \ No newline at end of file diff --git a/src/Controller/PoliciesController.php b/src/Controller/PoliciesController.php index d6f6bb45..ef4edc23 100644 --- a/src/Controller/PoliciesController.php +++ b/src/Controller/PoliciesController.php @@ -3,12 +3,15 @@ namespace App\Controller; use App\Entity\Policies; +use App\Repository\PoliciesRepository; use App\Service\ApproveService; use App\Service\AssignService; +use App\Service\CurrentTeamService; use App\Service\DisableService; use App\Service\PoliciesService; use App\Service\SecurityService; -use League\Flysystem\FilesystemInterface; +use Doctrine\ORM\EntityManagerInterface; +use League\Flysystem\FilesystemOperator; use Psr\Log\LoggerInterface; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -17,32 +20,28 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class PoliciesController extends AbstractController { - /** - * @Route("/policies", name="policies") - */ - public function index(SecurityService $securityService) - { - $team = $this->getUser()->getTeam(); - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); - } - $polcies = $this->getDoctrine()->getRepository(Policies::class)->findActivByTeam($team); - return $this->render('policies/index.html.twig', [ - 'data' => $polcies, - ]); + public function __construct(private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { } - /** - * @Route("/policy/new", name="policy_new") - */ - public function addPolicy(ValidatorInterface $validator, Request $request, PoliciesService $policiesService, SecurityService $securityService) + #[Route(path: '/policy/new', name: 'policy_new')] + public function addPolicy( + ValidatorInterface $validator, + Request $request, + PoliciesService $policiesService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ) { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('policies'); @@ -58,9 +57,8 @@ public function addPolicy(ValidatorInterface $validator, Request $request, Polic $policy = $form->getData(); $errors = $validator->validate($policy); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($policy); - $em->flush(); + $this->em->persist($policy); + $this->em->flush(); return $this->redirectToRoute('policies'); } } @@ -68,7 +66,7 @@ public function addPolicy(ValidatorInterface $validator, Request $request, Polic 'form' => $form->createView(), 'policy' => $policy, 'errors' => $errors, - 'title' => 'Richtlinie & Arbeitsanweisung erstellen', + 'title' => $this->translator->trans(id: 'policies.create', domain: 'policies'), 'activNummer' => true, 'vvt' => $policy, 'activ' => $policy->getActiv(), @@ -76,14 +74,111 @@ public function addPolicy(ValidatorInterface $validator, Request $request, Polic ]); } + #[Route(path: '/policy/approve', name: 'policy_approve')] + public function approvePolicy( + Request $request, + SecurityService $securityService, + ApproveService $approveService, + CurrentTeamService $currentTeamService, + PoliciesRepository $policiesRepository, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $policy = $policiesRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($policy, $team) && $securityService->adminCheck($user, $team)) { + $approve = $approveService->approve($policy, $user); + return $this->redirectToRoute('policy_edit', ['id' => $approve['data'], 'snack' => $approve['snack']]); + } + + // if security check fails + return $this->redirectToRoute('policies'); + } + + #[Route(path: '/policy/disable', name: 'policy_disable')] + public function disable( + Request $request, + SecurityService $securityService, + DisableService $disableService, + CurrentTeamService $currentTeamService, + PoliciesRepository $policiesRepository, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $policy = $policiesRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($policy, $team) && $securityService->adminCheck($user, $team) && !$policy->getApproved()) { + $disableService->disable($policy, $this->getUser()); + } + + return $this->redirectToRoute('policies'); + } + + #[Route(path: '/policy/download/{id}', name: 'policy_download_file', methods: ['GET'])] + #[ParamConverter('policies', options: ['mapping' => ['id' => 'id']])] + public function downloadArticleReference( + FilesystemOperator $policiesFilesystem, + Policies $policies, + SecurityService $securityService, + LoggerInterface $logger, + CurrentTeamService $currentTeamService, + ): Response + { + + $stream = $policiesFilesystem->read($policies->getUpload()); + + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamDataCheck($policies, $team) === false) { + $logger->error( + 'DOWNLOAD', + [ + 'typ' => 'DOWNLOAD', + 'error' => true, + 'hinweis' => 'Fehlerhafter download. User nicht berechtigt!', + 'dokument' => $policies->getUpload(), + 'user' => $this->getUser()->getUsername() + ], + ); + return $this->redirectToRoute('dashboard'); + } + + $type = $policiesFilesystem->getMimetype($policies->getUpload()); + $response = new Response($stream); + $response->headers->set('Content-Type', $type); + $disposition = HeaderUtils::makeDisposition( + HeaderUtils::DISPOSITION_ATTACHMENT, + preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $policies->getUpload()) + ); + + $response->headers->set('Content-Disposition', $disposition); + $logger->info( + 'DOWNLOAD', + [ + 'typ' => 'DOWNLOAD', + 'error' => false, + 'hinweis' => 'Download erfolgreich', + 'dokument' => $policies->getUpload(), + 'user' => $this->getUser()->getUsername() + ], + ); + return $response; + } - /** - * @Route("/policy/edit", name="policy_edit") - */ - public function editPolicy(ValidatorInterface $validator, Request $request, PoliciesService $policiesService, SecurityService $securityService, AssignService $assignService) + #[Route(path: '/policy/edit', name: 'policy_edit')] + public function editPolicy( + ValidatorInterface $validator, + Request $request, + PoliciesService $policiesService, + SecurityService $securityService, + AssignService $assignService, + CurrentTeamService $currentTeamService, + PoliciesRepository $policiesRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $policy = $this->getDoctrine()->getRepository(Policies::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $policy = $policiesRepository->find($request->get('id')); if ($securityService->teamDataCheck($policy, $team) === false) { return $this->redirectToRoute('policies'); @@ -95,16 +190,20 @@ public function editPolicy(ValidatorInterface $validator, Request $request, Poli $errors = array(); if ($form->isSubmitted() && $form->isValid() && $policy->getActiv() && !$policy->getApproved()) { - - $em = $this->getDoctrine()->getManager(); $policy->setActiv(false); $newPolicy = $form->getData(); $errors = $validator->validate($newPolicy); if (count($errors) == 0) { - $em->persist($newPolicy); - $em->persist($policy); - $em->flush(); - return $this->redirectToRoute('policy_edit', ['id' => $newPolicy->getId(), 'snack' => 'Erfolgreich gespeichert']); + $this->em->persist($newPolicy); + $this->em->persist($policy); + $this->em->flush(); + return $this->redirectToRoute( + 'policy_edit', + [ + 'id' => $newPolicy->getId(), + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general'), + ], + ); } } @@ -112,71 +211,29 @@ public function editPolicy(ValidatorInterface $validator, Request $request, Poli 'form' => $form->createView(), 'assignForm' => $assign->createView(), 'errors' => $errors, - 'title' => 'Richtlinie / Arbeitsanweisung bearbeiten', + 'title' => $this->translator->trans(id: 'policies.edit', domain: 'policies'), 'policy' => $policy, 'activ' => $policy->getActiv(), 'snack' => $request->get('snack') ]); } - /** - * @Route("/policy/approve", name="policy_approve") - */ - public function approvePolicy(Request $request, SecurityService $securityService, ApproveService $approveService) + #[Route(path: '/policies', name: 'policies')] + public function index( + SecurityService $securityService, + CurrentTeamService $currentTeamService, + PoliciesRepository $policiesRepository, + ): Response { - $team = $this->getUser()->getAdminUser(); - $policy = $this->getDoctrine()->getRepository(Policies::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($policy, $team) === false) { - return $this->redirectToRoute('policies'); - } - $approve = $approveService->approve($policy, $this->getUser()); - - return $this->redirectToRoute('policy_edit', ['id' => $approve['data'], 'snack' => $approve['snack']]); - } - - /** - * @Route("/policy/disable", name="policy_disable") - */ - public function disable(Request $request, SecurityService $securityService, DisableService $disableService) - { - $team = $this->getUser()->getAdminUser(); - $policy = $this->getDoctrine()->getRepository(Policies::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($policy, $team) === true && !$policy->getApproved()) { - $disableService->disable($policy, $this->getUser()); - } - - return $this->redirectToRoute('policies'); - } - - /** - * @Route("/policy/download/{id}", name="policy_download_file", methods={"GET"}) - * @ParamConverter("policies", options={"mapping"={"id"="id"}}) - */ - public function downloadArticleReference(FilesystemInterface $policiesFileSystem, Policies $policies, SecurityService $securityService, LoggerInterface $logger) - { - - $stream = $policiesFileSystem->read($policies->getUpload()); - - $team = $this->getUser()->getTeam(); - if ($securityService->teamDataCheck($policies, $team) === false) { - $message = ['typ' => 'DOWNLOAD', 'error' => true, 'hinweis' => 'Fehlerhafter download. User nicht berechtigt!', 'dokument' => $policies->getUpload(), 'user' => $this->getUser()->getUsername()]; - $logger->error($message['typ'], $message); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('dashboard'); } + $polcies = $policiesRepository->findActiveByTeam($team); - $type = $policiesFileSystem->getMimetype($policies->getUpload()); - $response = new Response($stream); - $response->headers->set('Content-Type', $type); - $disposition = HeaderUtils::makeDisposition( - HeaderUtils::DISPOSITION_ATTACHMENT, - preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $policies->getUpload()) - ); - - $response->headers->set('Content-Disposition', $disposition); - $message = ['typ' => 'DOWNLOAD', 'error' => false, 'hinweis' => 'Download erfolgreich', 'dokument' => $policies->getUpload(), 'user' => $this->getUser()->getUsername()]; - $logger->info($message['typ'], $message); - return $response; + return $this->render('policies/index.html.twig', [ + 'data' => $polcies, + 'currentTeam' => $team, + ]); } } diff --git a/src/Controller/QuestionController.php b/src/Controller/QuestionController.php new file mode 100644 index 00000000..cec5d437 --- /dev/null +++ b/src/Controller/QuestionController.php @@ -0,0 +1,172 @@ + ['id' => 'id']])] + public function create(Request $request, Questionnaire $questionnaire): Response + { + $form = $this->createForm(QuestionType::class); + $error = false; + $form->handleRequest($request); + + if ($form->isSubmitted()) { + $question = $this->handleForm($form); + + if ($question !== null) { + return $this->redirectToRoute( + 'questionnaire_add_question', + [ + 'questionnaireId' => $questionnaire->getId(), + 'questionId' => $question->getId() + ] + ); + } + + $error = true; + } + + return $this->render( + self::$TEMPLATE_DIR . 'create.html.twig', + [ + 'form' => $form->createView(), + 'error' => $error, + ] + ); + } + + #[Route(path: '/edit/{id}', name: '_edit', methods: ['POST', 'GET'])] + #[ParamConverter('question', class: 'App\Entity\Question', options: ['mapping' => ['id' => 'id']])] + public function edit(Request $request, Question $question): Response + { + $form = $this->createForm(QuestionType::class, $question); + $error = false; + + $form->handleRequest($request); + + if ($form->isSubmitted()) { + $question = $this->handleForm($form, $question); + + if ($question !== null) { + return $this->redirectToRoute('question_details', ['id' => $question->getId()]); + } + + $error = true; + } + + return $this->render( + self::$TEMPLATE_DIR . 'edit.html.twig', + [ + 'form' => $form->createView(), + 'error' => $error, + ] + ); + } + + #[Route(path: '/details/{id}', name: '_details', methods: ['POST', 'GET'])] + #[ParamConverter('question', class: 'App\Entity\Question', options: ['mapping' => ['id' => 'id']])] + public function details(Question $question): Response + { + return $this->render( + self::$TEMPLATE_DIR . 'details.html.twig', + [ + 'question' => $question + ], + ); + } + + #[Route(path: '/delete/{id}', name: '_delete', methods: ['POST', 'GET'])] + #[ParamConverter('question', class: 'App\Entity\Question', options: ['mapping' => ['id' => 'id']])] + public function delete( + Question $question, + QuestionnaireQuestionRepository $questionnaireQuestionRepository, + AnswerRepository $answerRepository, + ParticipationAnswerRepository $participationAnswerRepository, + ): RedirectResponse + { + foreach ($participationAnswerRepository->findBy(['question' => $question]) as $participationAnswer) { + $this->em->remove($participationAnswer); + } + + foreach ($questionnaireQuestionRepository->findBy(['question' => $question]) as $questionnaireQuestion) { + $this->em->remove($questionnaireQuestion); + }; + + foreach ($answerRepository->findBy(['question' => $question]) as $answer) { + $this->em->remove($answer); + } + + + $this->em->remove($question); + $this->em->flush(); + + return $this->redirectToRoute('question'); + } + + private function handleForm(FormInterface $form, ?Question $originalQuestion = null): ?Question + { + if (!$form->isValid()) { + return null; + } + /** @var Question $question */ + $question = $form->getData(); + + if ($originalQuestion !== null) { + foreach ($originalQuestion->getAnswers() as $originalAnswer) { + if (!in_array($originalAnswer, $question->getAnswers()->toArray())) { + $this->em->remove($originalAnswer); + } + } + } + + $trueAnswers = []; + foreach ($question->getAnswers() as $answer) { + if ($answer->isCorrect()) { + $trueAnswers[] = $answer; + } + } + + if (count($trueAnswers) === 0) { + return null; + } + + if ($question->getType() === QuestionTypes::RADIO && count($trueAnswers) !== 1) { + return null; + } + + $this->em->persist($question); + $this->em->flush(); + + return $question; + } +} \ No newline at end of file diff --git a/src/Controller/QuestionnaireController.php b/src/Controller/QuestionnaireController.php new file mode 100644 index 00000000..98efcd2d --- /dev/null +++ b/src/Controller/QuestionnaireController.php @@ -0,0 +1,177 @@ +createForm(QuestionnaireType::class); + $error = false; + + $form->handleRequest($request); + + if ($form->isSubmitted()) { + $questionnaire = $this->handleForm($form); + + if ($questionnaire !== null) { + return $this->redirectToRoute('question_create', ['id' => $questionnaire->getId()]); + } + + $error = true; + } + + return $this->render( + self::$TEMPLATE_DIR . 'create.html.twig', + [ + 'form' => $form, + 'error' => $error, + ], + ); + } + + #[Route(path: '/edit/{id}', name: '_edit', methods: ['GET', 'POST'])] + #[ParamConverter('questionnaire', class: 'App\Entity\Questionnaire', options: ['mapping' => ['id' => 'id']])] + public function edit( + Questionnaire $questionnaire, + Request $request, + ): Response + { + $form = $this->createForm(QuestionnaireType::class, $questionnaire); + + $form->handleRequest($request); + + if($form->isSubmitted()){ + $success = $this->handleForm($form); + + if($success){ + return $this->redirectToRoute('akademie_admin'); + } + } + + return $this->render( + self::$TEMPLATE_DIR . 'edit.html.twig', + [ + 'form' => $form, + 'success' => $success??true, + ], + ); + } + + #[Route(path: '/delete/{id}', name: '_delete', methods: ['GET', 'POST'])] + #[ParamConverter('questionnaire', class: 'App\Entity\Questionnaire', options: ['mapping' => ['id' => 'id']])] + public function delete(Questionnaire $questionnaire): RedirectResponse + { + foreach ($questionnaire->getParticipationAnswers() as $participationAnswer) { + $this->em->remove($participationAnswer); + } + + foreach ($questionnaire->getQuestionnaireQuestions() as $questionnaireQuestion) { + foreach ($questionnaireQuestion->getQuestion()->getAnswers() as $answer) { + $this->em->remove($answer); + } + + $this->em->remove($questionnaireQuestion->getQuestion()); + $this->em->remove($questionnaireQuestion); + } + + $this->em->remove($questionnaire); + $this->em->flush(); + + return $this->redirectToRoute('akademie_admin'); + } + + #[Route(path: '/details/{id}', name: '_details', methods: ['GET'])] + #[ParamConverter('questionnaire', class: 'App\Entity\Questionnaire', options: ['mapping' => ['id' => 'id']])] + public function details(Questionnaire $questionnaire): Response + { + return $this->render( + self::$TEMPLATE_DIR . 'details.html.twig', + [ + 'questionnaire' => $questionnaire, + ], + ); + } + + #[Route(path: '/{questionnaireId}/add/question/{questionId}', name: '_add_question', methods: ['GET'])] + #[ParamConverter('questionnaire', class: 'App\Entity\Questionnaire', options: ['mapping' => ['questionnaireId' => 'id']])] + #[ParamConverter('question', class: 'App\Entity\Question', options: ['mapping' => ['questionId' => 'id']])] + public function addQuestion( + Question $question, + Questionnaire $questionnaire, + ): RedirectResponse + { + $latestStep = 0; + foreach ($questionnaire->getQuestionnaireQuestions() as $questionnaireQuestion) { + if ($latestStep < $questionnaireQuestion->getStep()) { + $latestStep = $questionnaireQuestion->getStep(); + } + } + + $questionnaireQuestion = (new QuestionnaireQuestion()) + ->setQuestion($question) + ->setQuestionnaire($questionnaire) + ->setStep(++$latestStep); + + $this->em->persist($questionnaireQuestion); + $this->em->flush(); + + return $this->redirectToRoute('questionnaire_details', ['id' => $questionnaire->getId()]); + } + + private function handleForm(FormInterface $form): ?Questionnaire + { + if (!$form->isValid()) { + return null; + } + + /** @var Questionnaire $questionnaire */ + $questionnaire = $form->getData(); + $questionnaire->setTeam($this->getCurrentTeam()); + + $this->em->persist($questionnaire); + $this->em->flush(); + + return $questionnaire; + } + + private function getCurrentTeam(): Team + { + /** @var User&UserInterface $user */ + $user = $this->getUser(); + + return $this->currentTeamService->getTeamFromSession($user); + } +} \ No newline at end of file diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index 184b1c17..0c9822f2 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -2,41 +2,39 @@ namespace App\Controller; -use App\Entity\Report; use App\Form\Type\ReportType; -use App\Service\DisableService; +use App\Repository\ReportRepository; +use App\Service\CurrentTeamService; use App\Service\ReportService; use App\Service\SecurityService; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class ReportController extends AbstractController { - /** - * @Route("/report", name="report") - */ - public function index(SecurityService $securityService) - { - $team = $this->getUser()->getTeam(); - $report = $this->getDoctrine()->getRepository(Report::class)->findActivByTeam($team); - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); - } - return $this->render('report/index.html.twig', [ - 'report' => $report, - ]); + public function __construct(private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { } - /** - * @Route("/report/new", name="report_new") - */ - public function addReport(ValidatorInterface $validator, Request $request, SecurityService $securityService, ReportService $reportService) + #[Route(path: '/report/new', name: 'report_new')] + public function addReport( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + ReportService $reportService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('report'); } @@ -51,28 +49,53 @@ public function addReport(ValidatorInterface $validator, Request $request, Secur $data = $form->getData(); $errors = $validator->validate($data); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($data); - $em->flush(); + $this->em->persist($data); + $this->em->flush(); return $this->redirectToRoute('report'); } } return $this->render('report/new.html.twig', [ 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Aufgabe erstellen', + 'title' => $this->translator->trans(id: 'task.create', domain: 'report'), 'report' => $report, 'activ' => $report->getActiv(), ]); } - /** - * @Route("/report/edit", name="report_edit") - */ - public function editReport(ValidatorInterface $validator, Request $request, SecurityService $securityService) + #[Route(path: '/report/delete', name: 'report_delete')] + public function deleteReport( + Request $request, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ReportRepository $reportRepository, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $report = $reportRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($report, $team) && $securityService->adminCheck($user, $team)) { + $report->setActiv(2); + + $this->em->persist($report); + $this->em->flush(); + } + + return $this->redirectToRoute('report'); + } + + #[Route(path: '/report/edit', name: 'report_edit')] + public function editReport( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ReportRepository $reportRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $report = $this->getDoctrine()->getRepository(Report::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $report = $reportRepository->find($request->get('id')); if ($securityService->teamDataCheck($report, $team) === false) { return $this->redirectToRoute('report'); @@ -86,16 +109,21 @@ public function editReport(ValidatorInterface $validator, Request $request, Secu $data = $form->getData(); $errors = $validator->validate($data); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($data); - $em->flush(); - return $this->redirectToRoute('report_edit', ['id' => $data->getId(), 'snack' => 'Erfolgreich gepeichert']); + $this->em->persist($data); + $this->em->flush(); + return $this->redirectToRoute( + 'report_edit', + [ + 'id' => $data->getId(), + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general') + ], + ); } } return $this->render('report/edit.html.twig', [ 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Aktivität bearbeiten', + 'title' => $this->translator->trans(id: 'work.edit', domain: 'report'), 'report' => $report, 'activ' => $report->getActiv(), 'snack' => $request->get('snack'), @@ -103,39 +131,44 @@ public function editReport(ValidatorInterface $validator, Request $request, Secu ]); } - /** - * @Route("/report/invoice", name="report_invoice") - */ - public function invoiceReport(Request $request, SecurityService $securityService, DisableService $disableService) + #[Route(path: '/report', name: 'report')] + public function index( + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ReportRepository $reportRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $report = $this->getDoctrine()->getRepository(Report::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $report = $reportRepository->findActiveByTeam($team); - if ($securityService->teamDataCheck($report, $team) === true) { - if ($report->getUser() === $this->getUser()) { - $report->setInvoice(1); - } - $em = $this->getDoctrine()->getManager(); - $em->persist($report); - $em->flush(); + if ($securityService->teamCheck($team) === false) { + return $this->redirectToRoute('dashboard'); } - return $this->redirectToRoute('report'); + return $this->render('report/index.html.twig', [ + 'report' => $report, + 'currentTeam' => $team, + ]); } - /** - * @Route("/report/delete", name="report_delete") - */ - public function deleteReport(Request $request, SecurityService $securityService, DisableService $disableService) + #[Route(path: '/report/invoice', name: 'report_invoice')] + public function invoiceReport( + Request $request, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ReportRepository $reportRepository, + ): Response { - $team = $this->getUser()->getAdminUser(); - $report = $this->getDoctrine()->getRepository(Report::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $report = $reportRepository->find($request->get('id')); if ($securityService->teamDataCheck($report, $team) === true) { - $report->setActiv(2); - $em = $this->getDoctrine()->getManager(); - $em->persist($report); - $em->flush(); + if ($report->getUser() === $this->getUser()) { + $report->setInvoice(1); + } + + $this->em->persist($report); + $this->em->flush(); } return $this->redirectToRoute('report'); diff --git a/src/Controller/SettingsController.php b/src/Controller/SettingsController.php new file mode 100644 index 00000000..ed5ff81f --- /dev/null +++ b/src/Controller/SettingsController.php @@ -0,0 +1,62 @@ +getUser(); + + if (!$securityService->superAdminCheck($user)) { + return $this->redirectToRoute('dashboard'); + } + + $settings = $settingsRepository->findOne(); + + if (!$settings) { + $settings = new Settings(); + } + + $form = $this->createForm(SettingsType::class, $settings); + $form->handleRequest($request); + + $errors = array(); + + if ($form->isSubmitted() && $form->isValid()) { + $newSettings = $form->getData(); + $settings->setUseKeycloakGroups($newSettings->getUseKeycloakGroups()); + $errors = $validator->validate($settings); + if (count($errors) == 0) { + $em->persist($settings); + $em->flush(); + } + } + + return $this->render('settings/settings.html.twig', [ + 'form' => $form->createView(), + 'errors' => $errors, + 'settings' => $settings + ]); + } +} diff --git a/src/Controller/SoftwareController.php b/src/Controller/SoftwareController.php index 53cd68c3..f51a408f 100644 --- a/src/Controller/SoftwareController.php +++ b/src/Controller/SoftwareController.php @@ -2,47 +2,111 @@ namespace App\Controller; -use App\Entity\Software; use App\Entity\SoftwareConfig; +use App\Repository\SoftwareConfigRepository; +use App\Repository\SoftwareRepository; use App\Service\ApproveService; use App\Service\AssignService; +use App\Service\CurrentTeamService; use App\Service\SecurityService; use App\Service\SoftwareService; +use DateTime; +use Doctrine\ORM\EntityManagerInterface; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class SoftwareController extends AbstractController { - /** - * @Route("/software", name="software") - */ - public function index(SecurityService $securityService, Request $request) + + + public function __construct(private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) { - //Request: snack: Snack Notice - $team = $this->getUser()->getTeam(); - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); + } + + #[Route(path: '/software/config', name: 'software_config_new')] + public function addConfig( + ValidatorInterface $validator, + Request $request, + SoftwareService $softwareService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + SoftwareRepository $softwareRepository, + SoftwareConfigRepository $softwareConfigRepository, + ) + { + //Requests: id: SoftwareID, config: ConfigID + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $software = $softwareRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($software, $team) === false) { + return $this->redirectToRoute('software'); } - $software = $this->getDoctrine()->getRepository(Software::class)->findActivByTeam($team); + $req = $request->get('config'); - return $this->render('software/index.html.twig', [ - 'data' => $software, - 'today' => new \DateTime(), - 'snack' => $request->get('snack'), + if (!$req) { + $config = $softwareService->newConfig($software); + } else { + $config = $softwareConfigRepository->find($req); + } + + if ($config->getSoftware() !== $software) { + return $this->redirectToRoute( + 'software', + [ + 'snack' => $this->translator->trans(id: 'config.mismatchSoftware', domain: 'software'), + ], + ); + + } + + $form = $softwareService->createConfigForm($config); + $form->handleRequest($request); + + $errors = array(); + if ($form->isSubmitted() && $form->isValid() && $config->getSoftware()->getActiv() && !$config->getSoftware()->getApproved()) { + $config = $form->getData(); + $errors = $validator->validate($config); + if (count($errors) == 0) { + $config->setCreatedAt(new DateTime()); + $this->em->persist($config); + $this->em->flush(); + return $this->redirectToRoute( + 'software_edit', + [ + 'id' => $software->getId(), + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general'), + ], + ); + } + } + return $this->render('software/newConfig.html.twig', [ + 'form' => $form->createView(), + 'config' => $config, + 'errors' => $errors, + 'title' => $this->translator->trans(id: 'config.for', domain: 'software'), + 'activ' => $software->getActiv(), + 'software' => $software, ]); } - /** - * @Route("/software/new", name="software_new") - */ - public function addSoftware(ValidatorInterface $validator, Request $request, SoftwareService $softwareService, SecurityService $securityService) + #[Route(path: '/software/new', name: 'software_new')] + public function addSoftware( + ValidatorInterface $validator, + Request $request, + SoftwareService $softwareService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('software'); @@ -58,31 +122,117 @@ public function addSoftware(ValidatorInterface $validator, Request $request, Sof $software = $form->getData(); $errors = $validator->validate($software); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($software); - $em->flush(); + $this->em->persist($software); + $this->em->flush(); + return $this->redirectToRoute('software'); } } return $this->render('software/new.html.twig', [ 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Software anlegen', + 'title' => $this->translator->trans(id: 'software.create', domain: 'software'), 'activNummer' => true, 'vvt' => $software, 'activ' => $software->getActiv(), ]); } + #[Route(path: '/software/approve', name: 'software_approve')] + public function approveSoftware( + Request $request, + SecurityService $securityService, + ApproveService $approveService, + CurrentTeamService $currentTeamService, + SoftwareRepository $softwareRepository, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $software = $softwareRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($software, $team) && $securityService->adminCheck($user, $team)) { + $approve = $approveService->approve($software, $user); + + if ($approve['clone'] === true) { + $newSoftware = $softwareRepository->find($approve['data']); + foreach ($software->getConfig() as $config) { + $newConfig = clone $config; + $newConfig->setSoftware($newSoftware); + + $this->em->persist($newConfig); + } + $this->em->persist($newSoftware); + $this->em->flush(); + } + return $this->redirectToRoute('software_edit', ['id' => $approve['data'], 'snack' => $approve['snack']]); + } + + return $this->redirectToRoute('policies'); + } + + #[Route(path: '/software/config/delete', name: 'software_config_delete')] + public function deleteConfig( + Request $request, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + SoftwareConfigRepository $softwareConfigRepository, + ): Response + { + // Request: config: ConfigID + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $config = $softwareConfigRepository->find($request->get('config')); + + if ($securityService->teamDataCheck($config->getSoftware(), $team) && $securityService->adminCheck($user, $team)) { + $this->em->remove($config); + $this->em->flush(); + return $this->redirectToRoute( + 'software_edit', + [ + 'id' => $config->getSoftware()->getId(), + 'snack' => $this->translator->trans(id: 'config.delete', domain: 'software'), + ], + ); + } + + // if security check fails + return $this->redirectToRoute('software'); + } + + #[Route(path: '/software/config/download/{id}', name: 'software_config_download_file', methods: ['GET'])] + #[ParamConverter('softwareConfig', options: ['mapping' => ['id' => 'id']])] + public function downloadArticleReference( + SoftwareConfig $softwareConfig, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response + { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $path = $this->getParameter('kernel.project_dir') . "/data/software/" . $softwareConfig->getUpload(); + + if ($securityService->teamDataCheck($softwareConfig->getSoftware(), $team) === false) { + return $this->redirectToRoute('software'); + } + + $file = file_get_contents($path); + return new Response($file, 200); + } - /** - * @Route("/software/edit", name="software_edit") - */ - public function editSoftware(ValidatorInterface $validator, Request $request, SoftwareService $softwareService, SecurityService $securityService, AssignService $assignService) + #[Route(path: '/software/edit', name: 'software_edit')] + public function editSoftware( + ValidatorInterface $validator, + Request $request, + SoftwareService $softwareService, + SecurityService $securityService, + AssignService $assignService, + CurrentTeamService $currentTeamService, + SoftwareRepository $softwareRepository, + ): Response { //Request: id: SoftwareID, snack:Snack Notice - $team = $this->getUser()->getTeam(); - $software = $this->getDoctrine()->getRepository(Software::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $software = $softwareRepository->find($request->get('id')); if ($securityService->teamDataCheck($software, $team) === false) { return $this->redirectToRoute('software'); @@ -94,8 +244,6 @@ public function editSoftware(ValidatorInterface $validator, Request $request, So $errors = array(); if ($form->isSubmitted() && $form->isValid() && $software->getActiv() && !$software->getApproved()) { - - $em = $this->getDoctrine()->getManager(); $software->setActiv(false); $newSoftware = $form->getData(); @@ -105,12 +253,18 @@ public function editSoftware(ValidatorInterface $validator, Request $request, So foreach ($software->getConfig() as $config) { $newConfig = clone $config; $newConfig->setSoftware($newSoftware); - $em->persist($newConfig); + $this->em->persist($newConfig); } - $em->persist($newSoftware); - $em->persist($software); - $em->flush(); - return $this->redirectToRoute('software_edit', ['id' => $newSoftware->getId(), 'snack' => 'Erfolgreich gespeichert']); + $this->em->persist($newSoftware); + $this->em->persist($software); + $this->em->flush(); + return $this->redirectToRoute( + 'software_edit', + [ + 'id' => $newSoftware->getId(), + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general'), + ] + ); } } @@ -118,125 +272,33 @@ public function editSoftware(ValidatorInterface $validator, Request $request, So 'form' => $form->createView(), 'assignForm' => $assign->createView(), 'errors' => $errors, - 'title' => 'Software bearbeiten', + 'title' => $this->translator->trans(id: 'software.edit', domain: 'software'), 'software' => $software, 'activ' => $software->getActiv(), 'snack' => $request->get('snack'), ]); } - /** - * @Route("/software/config", name="software_config_new") - */ - public function addConfig(ValidatorInterface $validator, Request $request, SoftwareService $softwareService, SecurityService $securityService) + #[Route(path: '/software', name: 'software')] + public function index( + SecurityService $securityService, + Request $request, + CurrentTeamService $currentTeamService, + SoftwareRepository $softwareRepository, + ): Response { - //Requests: id: SoftwareID, config: ConfigID - $team = $this->getUser()->getTeam(); - $software = $this->getDoctrine()->getRepository(Software::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($software, $team) === false) { - return $this->redirectToRoute('software'); - } - $req = $request->get('config'); - - if (!$req) { - $config = $softwareService->newConfig($software); - } else { - $config = $this->getDoctrine()->getRepository(SoftwareConfig::class)->find($req); - } - - if ($config->getSoftware() !== $software) { - return $this->redirectToRoute('software', ['snack' => 'FEHLER: Die Konfiguration gehört nicht zu der Software']); - + //Request: snack: Snack Notice + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamCheck($team) === false) { + return $this->redirectToRoute('dashboard'); } + $software = $softwareRepository->findActiveByTeam($team); - $form = $softwareService->createConfigForm($config); - $form->handleRequest($request); - - - $errors = array(); - if ($form->isSubmitted() && $form->isValid() && $config->getSoftware()->getActiv() && !$config->getSoftware()->getApproved()) { - $config = $form->getData(); - $errors = $validator->validate($config); - if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $config->setCreatedAt(new \DateTime()); - $em->persist($config); - $em->flush(); - return $this->redirectToRoute('software_edit', ['id' => $software->getId(), 'snack' => 'Erfolgreich gespeichert']); - } - } - return $this->render('software/newConfig.html.twig', [ - 'form' => $form->createView(), - 'config' => $config, - 'errors' => $errors, - 'title' => 'Konfiguration für', - 'activ' => $software->getActiv(), - 'software' => $software, + return $this->render('software/index.html.twig', [ + 'data' => $software, + 'today' => new DateTime(), + 'snack' => $request->get('snack'), + 'currentTeam' => $team, ]); } - - /** - * @Route("/software/config/delete", name="software_config_delete") - */ - public function deleteConfig(ValidatorInterface $validator, Request $request, SoftwareService $softwareService, SecurityService $securityService) - { - // Request: config: ConfigID - $team = $this->getUser()->getAdminUser(); - $config = $this->getDoctrine()->getRepository(SoftwareConfig::class)->find($request->get('config')); - - if ($securityService->teamDataCheck($config->getSoftware(), $team) === false) { - return $this->redirectToRoute('software'); - } - - $em = $this->getDoctrine()->getManager(); - $em->remove($config); - $em->flush(); - return $this->redirectToRoute('software_edit', ['id' => $config->getSoftware()->getId(), 'snack' => 'Konfiguration gelöscht']); - } - - /** - * @Route("/software/approve", name="software_approve") - */ - public function approveSoftware(Request $request, SecurityService $securityService, ApproveService $approveService) - { - $team = $this->getUser()->getAdminUser(); - $software = $this->getDoctrine()->getRepository(Software::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($software, $team) === false) { - return $this->redirectToRoute('policies'); - } - $approve = $approveService->approve($software, $this->getUser()); - - if ($approve['clone'] === true) { - $newSoftware = $this->getDoctrine()->getRepository(Software::class)->find($approve['data']); - $em = $this->getDoctrine()->getManager(); - foreach ($software->getConfig() as $config) { - $newConfig = clone $config; - $newConfig->setSoftware($newSoftware); - - $em->persist($newConfig); - } - $em->persist($newSoftware); - $em->flush(); - } - return $this->redirectToRoute('software_edit', ['id' => $approve['data'], 'snack' => $approve['snack']]); - } - - /** - * @Route("/software/config/download/{id}", name="software_config_download_file", methods={"GET"}) - * @ParamConverter("softwareConfig", options={"mapping"={"id"="id"}}) - */ - public function downloadArticleReference(SoftwareConfig $softwareConfig, SecurityService $securityService) - { - $team = $this->getUser()->getTeam(); - $path = $this->getParameter('kernel.project_dir') . "/data/software/" . $softwareConfig->getUpload(); - - if ($securityService->teamDataCheck($softwareConfig->getSoftware(), $team) === false) { - return $this->redirectToRoute('software'); - } - - $file = file_get_contents($path); - return new Response($file, 200); - } } diff --git a/src/Controller/TaskController.php b/src/Controller/TaskController.php index 428a14a5..64aa17f8 100644 --- a/src/Controller/TaskController.php +++ b/src/Controller/TaskController.php @@ -2,50 +2,41 @@ namespace App\Controller; -use App\Entity\Task; use App\Form\Type\TasksType; +use App\Repository\TaskRepository; use App\Service\AssignService; -use App\Service\DisableService; +use App\Service\CurrentTeamService; use App\Service\SecurityService; use App\Service\TaskService; +use DateTime; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class TaskController extends AbstractController { - /** - * @Route("/tasks", name="tasks") - */ - public function index(SecurityService $securityService, Request $request) - { - $team = $this->getUser()->getTeam(); - if ($request->get('all')) { - $tasks = $this->getDoctrine()->getRepository(Task::class)->findActivByTeam($team); - $all = true; - } else { - $tasks = $this->getDoctrine()->getRepository(Task::class)->findBy(['team' => $team, 'activ' => true, 'done' => false]); - $all = false; - } - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); - } - - return $this->render('task/index.html.twig', [ - 'task' => $tasks, - 'all' => $all - ]); + public function __construct(private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { } - /** - * @Route("/task/new", name="task_new") - */ - public function addTask(ValidatorInterface $validator, Request $request, SecurityService $securityService, TaskService $taskService) + #[Route(path: '/task/new', name: 'task_new')] + public function addTask( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + TaskService $taskService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('tasks'); } @@ -60,28 +51,84 @@ public function addTask(ValidatorInterface $validator, Request $request, Securit $data = $form->getData(); $errors = $validator->validate($data); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($data); - $em->flush(); + $this->em->persist($data); + $this->em->flush(); + return $this->redirectToRoute('tasks'); } } return $this->render('task/new.html.twig', [ 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Aufgabe erstellen', + 'title' => $this->translator->trans(id: 'task.create', domain: 'task'), 'task' => $task, 'activ' => $task->getActiv(), ]); } - /** - * @Route("/task/edit", name="task_edit") - */ - public function EditTask(ValidatorInterface $validator, Request $request, SecurityService $securityService, AssignService $assignService) + #[Route(path: '/task/disable', name: 'task_disable')] + public function disable( + Request $request, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + TaskRepository $taskRepository, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $task = $taskRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($task, $team) && $securityService->adminCheck($user, $team)) { + if ($task->getActiv() === 1) { + $task->setActiv(2); + } else { + $task->setActiv(1); + } + + $this->em->persist($task); + $this->em->flush(); + } + + return $this->redirectToRoute('tasks'); + } + + #[Route(path: '/task/done', name: 'task_done')] + public function done( + Request $request, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + TaskRepository $taskRepository, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $task = $taskRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($task, $team) && $securityService->adminCheck($user, $team)) { + if ($task->getActiv() === 1) { + $task->setDone(1); + $task->setDoneDate(new DateTime()); + } + + $this->em->persist($task); + $this->em->flush(); + } + + return $this->redirectToRoute('tasks'); + } + + #[Route(path: '/task/edit', name: 'task_edit')] + public function editTask( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + AssignService $assignService, + CurrentTeamService $currentTeamService, + TaskRepository $taskRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $task = $this->getDoctrine()->getRepository(Task::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $task = $taskRepository->find($request->get('id')); if ($securityService->teamDataCheck($task, $team) === false) { return $this->redirectToRoute('tasks'); @@ -97,17 +144,23 @@ public function EditTask(ValidatorInterface $validator, Request $request, Securi $task->setUpdatedBy($this->getUser()); $errors = $validator->validate($task); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($task); - $em->flush(); - return $this->redirectToRoute('task_edit', ['id' => $task->getId(), 'snack' => 'Erfolgreich gepeichert']); + $this->em->persist($task); + $this->em->flush(); + + return $this->redirectToRoute( + 'task_edit', + [ + 'id' => $task->getId(), + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general'), + ], + ); } } return $this->render('task/edit.html.twig', [ 'form' => $form->createView(), 'assignForm' => $assign->createView(), 'errors' => $errors, - 'title' => 'Aufgabe bearbeiten', + 'title' => $this->translator->trans(id: 'task.edit', domain: 'task'), 'task' => $task, 'activ' => $task->getActiv(), 'snack' => $request->get('snack'), @@ -115,46 +168,32 @@ public function EditTask(ValidatorInterface $validator, Request $request, Securi ]); } - /** - * @Route("/task/done", name="task_done") - */ - public function done(Request $request, SecurityService $securityService, DisableService $disableService) + #[Route(path: '/tasks', name: 'tasks')] + public function index( + SecurityService $securityService, + Request $request, + CurrentTeamService $currentTeamService, + TaskRepository $taskRepository, + ) { - $team = $this->getUser()->getAdminUser(); - $task = $this->getDoctrine()->getRepository(Task::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($task, $team) === true) { - if ($task->getActiv() === 1) { - $task->setDone(1); - $task->setDoneDate(new \DateTime()); - } - $em = $this->getDoctrine()->getManager(); - $em->persist($task); - $em->flush(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($request->get('all')) { + $tasks = $taskRepository->findActiveByTeam($team); + $all = true; + } else { + $tasks = $taskRepository->findBy(['team' => $team, 'activ' => true, 'done' => false]); + $all = false; } - return $this->redirectToRoute('tasks'); - } - - /** - * @Route("/task/disable", name="task_disable") - */ - public function disable(Request $request, SecurityService $securityService, DisableService $disableService) - { - $team = $this->getUser()->getAdminUser(); - $task = $this->getDoctrine()->getRepository(Task::class)->find($request->get('id')); - if ($securityService->teamDataCheck($task, $team) === true) { - if ($task->getActiv() === 1) { - $task->setActiv(2); - } else { - $task->setActiv(1); - } - $em = $this->getDoctrine()->getManager(); - $em->persist($task); - $em->flush(); + if ($securityService->teamCheck($team) === false) { + return $this->redirectToRoute('dashboard'); } - return $this->redirectToRoute('tasks'); + return $this->render('task/index.html.twig', [ + 'task' => $tasks, + 'all' => $all, + 'currentTeam' => $team, + ]); } } diff --git a/src/Controller/TeamController.php b/src/Controller/TeamController.php index 4ab212ea..2505c6b3 100644 --- a/src/Controller/TeamController.php +++ b/src/Controller/TeamController.php @@ -8,112 +8,161 @@ namespace App\Controller; -use App\Entity\AkademieKurse; use App\Entity\AuditTomAbteilung; -use App\Entity\AuditTomZiele; -use App\Entity\User; +use App\Entity\Team; use App\Form\Type\AbteilungType; -use App\Form\Type\DsbType; -use App\Form\Type\NewMemberType; +use App\Form\Type\DeleteTeamType; use App\Form\Type\NewType; use App\Form\Type\TeamType; -use App\Service\InviteService; +use App\Repository\AuditTomAbteilungRepository; +use App\Repository\SettingsRepository; +use App\Repository\TeamRepository; +use App\Service\CurrentTeamService; use App\Service\SecurityService; use App\Service\TeamService; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class TeamController extends AbstractController { - /** - * @Route("/team_edit", name="team_edit") - */ - public function index(ValidatorInterface $validator, Request $request, SecurityService $securityService) + public function __construct(private readonly TranslatorInterface $translator) { - $team = $this->getUser()->getAdminUser(); + } + + #[Route(path: '/team_abteilungen', name: 'team_abteilungen')] + public function abteilungenAdd( + ValidatorInterface $validator, + Request $request, + EntityManagerInterface $em, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + AuditTomAbteilungRepository $departmentRepository, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getCurrentAdminTeam($user); - if (!$securityService->adminCheck($this->getUser(), $team)) { + if (!$team || !$securityService->adminCheck($user, $team)) { return $this->redirectToRoute('dashboard'); } - $ziel = new AuditTomZiele(); - $ziel->setTeam($team); - $form = $this->createForm(TeamType::class, $team); + $departments = $departmentRepository->findAllByTeam($team); + + if ($request->get('id')) { + $department = $departmentRepository->find($request->get('id')); + + } else { + $department = new AuditTomAbteilung(); + $department->setActiv(true); + $department->setTeam($team); + } + + $form = $this->createForm(AbteilungType::class, $department); $form->handleRequest($request); $errors = array(); if ($form->isSubmitted() && $form->isValid()) { - $nTeam = $form->getData(); - $errors = $validator->validate($nTeam); + $data = $form->getData(); + $errors = $validator->validate($data); if (count($errors) == 0) { - $text = array(); - $em = $this->getDoctrine()->getManager(); - $em->persist($nTeam); + $em->persist($data); $em->flush(); - return $this->redirectToRoute('team_edit'); + return $this->redirectToRoute('team_abteilungen'); } } - return $this->render('team/index.html.twig', [ - 'controller_name' => 'TeamController', + return $this->render('team/abteilungen.html.twig', [ + 'currentTeam' => $team, + 'adminArea' => true, 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Stammdaten' + 'title' => $this->translator->trans(id: 'departments', domain: 'general'), + 'data' => $departments, ]); } - - /** - * @Route("/team_custom", name="team_custom") - */ - public function customShow(ValidatorInterface $validator, Request $request, SecurityService $securityService, TeamService $teamService) + #[Route(path: '/team_abteilungen/deaktivieren', name: 'team_abteilungen_deativate')] + public function abteilungenRemove( + Request $request, + SecurityService $securityService, + EntityManagerInterface $em, + CurrentTeamService $currentTeamService, + AuditTomAbteilungRepository $departmentRepository, + ): Response { - $team = $this->getUser()->getAdminUser(); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); - if ($securityService->adminCheck($this->getUser(), $team) === false) { - return $this->redirectToRoute('dashboard'); + if ($securityService->adminCheck($user, $team) === false) { + return $this->redirectToRoute('team_abteilungen'); } - $data = $teamService->show($team); + $department = $departmentRepository->findOneBy(array('id' => $request->get('id'))); + if ($this->getUser()->hasTeam($department->getTeam())) { + $department->setActiv(false); + } - return $this->render('team/custom.html.twig', [ - 'title' => 'Vorgaben für Formulare anpassen', - 'data' => $data, - 'edit' => false - ]); + $em->persist($department); + $em->flush(); + return $this->redirectToRoute('team_abteilungen'); } - /** - * @Route("/akademie/admin", name="akademie_admin") - */ - public function academyAdmin(ValidatorInterface $validator, Request $request, InviteService $inviteService, SecurityService $securityService) + #[Route(path: '/team_create', name: 'team_create')] + public function create( + ValidatorInterface $validator, + EntityManagerInterface $em, + Request $request, + ): Response { - $team = $this->getUser()->getAdminUser(); + $user = $this->getUser(); + $team = new Team(); + $team->setActiv(true); + $form = $this->createForm(TeamType::class, $team); + $form->remove('video'); + $form->remove('externalLink'); + $form->handleRequest($request); - // Admin Route only - if (!$securityService->adminCheck($this->getUser(), $team)) { - return $this->redirectToRoute('dashboard'); + $errors = array(); + if ($form->isSubmitted() && $form->isValid()) { + $nTeam = $form->getData(); + $errors = $validator->validate($nTeam); + if (count($errors) == 0) { + $user->addTeam($nTeam); + $nTeam->addAdmin($user); + $em->persist($nTeam); + $em->persist($user); + $em->flush(); + return $this->redirectToRoute('manage_teams'); + } } - $kurse = $this->getDoctrine()->getRepository(AkademieKurse::class)->findKurseByTeam($team); - return $this->render('team/academy.html.twig', [ - 'title' => 'Akademie verwalten', - 'data' => $team->getAkademieUsers(), - 'kurse' => $kurse, + return $this->render('team/index.html.twig', [ + 'controller_name' => 'TeamController', + 'form' => $form->createView(), + 'errors' => $errors, + 'title' => $this->translator->trans(id: 'team.create', domain: 'team') ]); } - - /** - * @Route("/team_custom/create", name="team_custom_create") - */ - public function customCreate(ValidatorInterface $validator, Request $request, SecurityService $securityService, TeamService $teamService) + #[Route(path: '/team_custom/create', name: 'team_custom_create')] + public function customCreate( + Request $request, + SecurityService $securityService, + EntityManagerInterface $em, + TeamService $teamService, + ValidatorInterface $validator, + CurrentTeamService $currentTeamService, + ): Response { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); - $team = $this->getUser()->getAdminUser(); - - if ($securityService->adminCheck($this->getUser(), $team) === false) { + if ($securityService->adminCheck($user, $team) === false) { return $this->redirectToRoute('dashboard'); } @@ -125,346 +174,204 @@ public function customCreate(ValidatorInterface $validator, Request $request, Se $errors = array(); if ($form->isSubmitted() && $form->isValid()) { $data = $form->getData(); - + $errors = $validator->validate($data); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); $em->persist($data); $em->flush(); return $this->redirect($this->generateUrl('team_custom') . '#' . $request->get('type')); } } - return $this->render('team/modalView.html.twig', array('form' => $form->createView(), 'title' => $request->get('title'), 'type' => $request->get('type'), 'id' => $request->get('id'))); + return $this->render('team/modalView.html.twig', [ + 'form' => $form->createView(), + 'title' => $request->get('title'), + 'type' => $request->get('type'), + 'id' => $request->get('id'), + 'errors' => $errors + ]); } - - /** - * @Route("/team_custom/deaktivieren", name="team_custom_deativate") - */ - public function customDeactivate(Request $request, SecurityService $securityService, TeamService $teamService) + #[Route(path: '/team_custom/deaktivieren', name: 'team_custom_deativate')] + public function customDeactivate( + Request $request, + SecurityService $securityService, + EntityManagerInterface $em, + TeamService $teamService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getAdminUser(); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); - if ($securityService->adminCheck($this->getUser(), $team) === false) { + if ($securityService->adminCheck($user, $team) === false) { return $this->redirectToRoute('team_custom'); } $data = $teamService->delete($request->get('type'), $request->get('id')); - if ($data->getTeam() == $this->getUser()->getTeam()) { + if ($this->getUser()->hasTeam($data->getTeam())) { $data->setActiv(false); } - $em = $this->getDoctrine()->getManager(); $em->persist($data); $em->flush(); + return $this->redirectToRoute('team_custom'); } - - /** - * @Route("/team_abteilungen", name="team_abteilungen") - */ - public function abteilungenAdd(ValidatorInterface $validator, Request $request, SecurityService $securityService) + #[Route(path: '/team_custom', name: 'team_custom')] + public function customShow( + SecurityService $securityService, + TeamService $teamService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getAdminUser(); + $user = $this->getUser(); + $team = $currentTeamService->getCurrentAdminTeam($user); - if ($securityService->adminCheck($this->getUser(), $team) === false) { + if (!$team || !$securityService->adminCheck($user, $team)) { return $this->redirectToRoute('dashboard'); } - $abteilungen = $this->getDoctrine()->getRepository(AuditTomAbteilung::class)->findAllByTeam($team); - - if ($request->get('id')) { - $abteilung = $this->getDoctrine()->getRepository(AuditTomAbteilung::class)->find($request->get('id')); - - } else { - $abteilung = new AuditTomAbteilung(); - $abteilung->setActiv(true); - $abteilung->setTeam($team); - } - - $form = $this->createForm(AbteilungType::class, $abteilung); - $form->handleRequest($request); + $data = $teamService->show($team); - $errors = array(); - if ($form->isSubmitted() && $form->isValid()) { - $data = $form->getData(); - $errors = $validator->validate($data); - if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($data); - $em->flush(); - return $this->redirectToRoute('team_abteilungen'); - } - } - return $this->render('team/abteilungen.html.twig', [ - 'form' => $form->createView(), - 'errors' => $errors, - 'title' => 'Abteilungen', - 'data' => $abteilungen, + return $this->render('team/custom.html.twig', [ + 'currentTeam' => $team, + 'adminArea' => true, + 'title' => $this->translator->trans(id: 'customFormPresents', domain: 'team'), + 'data' => $data, + 'edit' => false ]); } - /** - * @Route("/team_abteilungen/deaktivieren", name="team_abteilungen_deativate") - */ - public function abteilungenRemove(Request $request, SecurityService $securityService) + #[Route(path: '/team_edit', name: 'team_edit')] + public function edit( + ValidatorInterface $validator, + Request $request, + EntityManagerInterface $em, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + TeamRepository $teamRepository, + ): Response { - $team = $this->getUser()->getAdminUser(); + $user = $this->getUser(); + $teamId = $request->get('id'); + $currentTeam = null; - if ($securityService->adminCheck($this->getUser(), $team) === false) { - return $this->redirectToRoute('team_abteilungen'); - } - - $abteilung = $this->getDoctrine()->getRepository(AuditTomAbteilung::class)->findOneBy(array('id' => $request->get('id'))); - if ($abteilung->getTeam() == $this->getUser()->getTeam()) { - $abteilung->setActiv(false); + if ($teamId) { + $team = $teamRepository->find($teamId); + } else { + $team = $currentTeamService->getCurrentAdminTeam($user); + $currentTeam = $team; } - $em = $this->getDoctrine()->getManager(); - $em->persist($abteilung); - $em->flush(); - return $this->redirectToRoute('team_abteilungen'); - } - - /** - * @Route("/team_mitglieder", name="team_mitglieder") - */ - public function mitgliederAdd(ValidatorInterface $validator, Request $request, InviteService $inviteService, SecurityService $securityService) - { - - $team = $this->getUser()->getAdminUser(); - - if ($securityService->adminCheck($this->getUser(), $team) === false) { + if (!$team || (!$securityService->adminCheck($user, $team))) { return $this->redirectToRoute('dashboard'); } - $newMember = array(); - $form = $this->createForm(NewMemberType::class, $newMember); + $form = $this->createForm(TeamType::class, $team); $form->handleRequest($request); $errors = array(); if ($form->isSubmitted() && $form->isValid()) { - - - $newMembers = $form->getData(); - $lines = explode("\n", $newMembers['member']); - - if (!empty($lines)) { - $em = $this->getDoctrine()->getManager(); - foreach ($lines as $line) { - $newMember = trim($line); - $user = $inviteService->newUser($newMember); - if ($user->getTeam() === null) { - $user->setTeam($team); - $em->persist($user); - } - } + $nTeam = $form->getData(); + $errors = $validator->validate($nTeam); + if (count($errors) == 0) { + $em->persist($nTeam); $em->flush(); - return $this->redirectToRoute('team_mitglieder'); + if ($teamId) { + return $this->redirectToRoute('team_edit', ['id' => $teamId]); + } + return $this->redirectToRoute('team_edit'); } - - } - return $this->render('team/member.html.twig', [ + return $this->render('team/index.html.twig', [ + 'currentTeam' => $currentTeam, + 'adminArea' => true, + 'controller_name' => 'TeamController', 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Benutzer verwalten', - 'data' => $team, + 'title' => $this->translator->trans(id: 'team.data', domain: 'team') ]); } - /** - * @Route("/team_mitglieder/create", name="team_mitglieder_create") - */ - public function teamMemberCreate(Request $request, SecurityService $securityService, TeamService $teamService, InviteService $inviteService) + #[Route(path: '/manage_teams', name: 'manage_teams')] + public function manage( + SecurityService $securityService, + SettingsRepository $settingsRepository, + TeamRepository $teamRepository, + ): Response { + $user = $this->getUser(); + $settings = $settingsRepository->findOne(); + $useKeycloakGroups = $settings ? $settings->getUseKeycloakGroups() : false; - $team = $this->getUser()->getAdminUser(); - - if ($securityService->adminCheck($this->getUser(), $team) === false) { + if (!$securityService->superAdminCheck($user)) { return $this->redirectToRoute('dashboard'); } - $newMember = array(); - $form = $this->createForm(NewMemberType::class, $newMember); - $form->handleRequest($request); - - $errors = array(); - if ($form->isSubmitted() && $form->isValid()) { - - $newMembers = $form->getData(); - $lines = explode("\n", $newMembers['member']); - - if (!empty($lines)) { - $em = $this->getDoctrine()->getManager(); - foreach ($lines as $line) { - $newMember = trim($line); - $user = $inviteService->newUser($newMember); - - switch ($request->get('type')) { - case 'odc': - if ($user->getTeam() === null) { - $user->setTeam($team); - $em->persist($user); - $target = $this->generateUrl('team_mitglieder'); - break; - } - case 'academy': - if ($user->getAdminUser() === null) { - $user->setAkademieUser($team); - $em->persist($user); - $target = $this->generateUrl('akademie_admin') . '#user'; - break; - } - default: - $target = $this->generateUrl('team_mitglieder'); - break; - } - } - } - $em->flush(); - return $this->redirect($target); - } - - return $this->render('team/modalViewUser.html.twig', array('form' => $form->createView(), 'title' => $request->get('title'), 'type' => $request->get('type'))); - } - - /** - * @Route("/team_mitglieder/remove", name="team_mitglieder_remove") - */ - public function mitgliederRemove(Request $request, SecurityService $securityService) - { - $team = $this->getUser()->getAdminUser(); + $teams = $teamRepository->findAll(); - if ($securityService->adminCheck($this->getUser(), $team) === false) { - return $this->redirectToRoute('team_mitglieder'); - } - - $user = $this->getDoctrine()->getRepository(User::class)->findOneBy(array('id' => $request->get('id'))); - - - switch ($request->get('type')) { - case 'academy' : - $user->setAkademieUser(null); - $target = $this->generateUrl('akademie_admin') . '#user'; - break; - case 'odc': - if ($this->getUser() !== $user && $user->getTeam() === $this->getUser()->getTeam()) { - $user->setTeam(null); - $user->setAdminUser(null); - $target = $this->generateUrl('team_mitglieder'); - } - break; - default: - $target = $this->generateUrl('team_mitglieder'); - break; - } - - - $em = $this->getDoctrine()->getManager(); - $em->persist($user); - $em->flush(); - return $this->redirect($target); + return $this->render('team/manage.html.twig', [ + 'teams' => $teams, + 'useKeycloakGroups' => $useKeycloakGroups, + ]); } - /** - * @Route("/team_mitglieder/admin", name="team_mitglieder_admin") - */ - public function adminToggle(Request $request, SecurityService $securityService) + #[Route(path: '/team/switch', name: 'team_switch')] + public function switchTeam( + Request $request, + CurrentTeamService $userService, + ): RedirectResponse { - $team = $this->getUser()->getAdminUser(); + $team = $request->get('team'); - if ($securityService->adminCheck($this->getUser(), $team) === false) { - return $this->redirectToRoute('dashboard'); - } - - $user = $this->getDoctrine()->getRepository(User::class)->findOneBy(array('id' => $request->get('id'))); + $userService->switchToTeam($team); - // Only other users and admins of the same Team can promote users - if ($this->getUser() !== $user && $user->getTeam() === $team) { - if ($user->getAdminUser() === null) { - $user->setAdminUser($team); - } else { - $user->setAdminUser(null); - } - } - $em = $this->getDoctrine()->getManager(); - $em->persist($user); - $em->flush(); - return $this->redirectToRoute('team_mitglieder'); + return new RedirectResponse($request->headers->get('referer')); } - /** - * @Route("/ext_team_dsb", name="team_dsb") - */ - public function dsbAdd(Request $request, InviteService $inviteService, SecurityService $securityService) + #[Route(path: '/manage_teams/delete', name: 'team_delete')] + public function teamDelete( + Request $request, + SecurityService $securityService, + EntityManagerInterface $em, + TeamRepository $teamRepository, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getAdminUser(); + $user = $this->getUser(); + $teamId = $request->get('id'); + $team = $teamId ? $teamRepository->find($teamId) : $currentTeamService->getCurrentAdminTeam($user); - if (!$securityService->adminCheck($this->getUser(), $team)) { + if ($securityService->superAdminCheck($user) === false) { return $this->redirectToRoute('dashboard'); } - $form = $this->createForm(DsbType::class); - $form->handleRequest($request); - - $errors = array(); - if ($form->isSubmitted() && $form->isValid()) { - - $dsb = $form->getData(); - $em = $this->getDoctrine()->getManager(); - $email = $dsb['dsb']; - $user = $this->getDoctrine()->getRepository(User::class)->findOneBy(array('email' => $email)); - if (!$user) { - $user = $inviteService->newUser($email, $team); - } - if (!$team->getDsbUser()) { - $team->setDsbUser($user); - $em->persist($team); + if ($team->getDeleteBlockers()) { + return $this->render('team/modalViewDeleteBlockers.html.twig', [ + 'team' => $team, + 'type' => $request->get('type') + ]); + } else { + $data = array(); + $form = $this->createForm(DeleteTeamType::class, $data); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $data = $form->getData(); + if ($data['teamName'] === $team->getName()) { + $em->remove($team); + $em->flush(); + } + return $this->redirectToRoute('manage_teams'); } - $em->flush(); - return $this->redirectToRoute('team_dsb', ['snack' => 'DSB wurde hinzugefügt']); + return $this->render('team/modalViewDelete.html.twig', [ + 'form' => $form->createView(), + 'team' => $team, + 'type' => $request->get('type') + ]); } - return $this->render('team/dsb.html.twig', [ - 'form' => $form->createView(), - 'errors' => $errors, - 'title' => 'Externen DSB verwalten', - 'data' => $team->getDsbUser(), - 'snack' => $request->get('snack') - ]); - } - - /** - * @Route("/team_dsb/remove", name="team_dsb_remove") - */ - public function dsbRemove(Request $request, SecurityService $securityService) - { - $team = $this->getUser()->getAdminUser(); - - if ($securityService->adminCheck($this->getUser(), $team) === false) { - return $this->redirectToRoute('dashboard'); - } - - $user = $this->getDoctrine()->getRepository(User::class)->findOneBy(array('id' => $request->get('id'))); - - if ($team->getDsbUser() === $user) { - $snack = 'Sie können sich nicht selbst aus dem Team entfernen und wurden daher nur als externer DSB entfernt.'; - if ($this->getUser() !== $team->getDsbUser()) { - $user->setTeam(null); - $user->setAdminUser(null); - $user->setAkademieUser(null); - $snack = 'Sie haben den externen DSB aus Ihrem Team entfernt'; - } - $team->setDsbUser(null); - } - $em = $this->getDoctrine()->getManager(); - $em->persist($team); - $em->persist($user); - $em->flush(); - - return $this->redirectToRoute('team_dsb', ['snack' => $snack]); } } diff --git a/src/Controller/TeamMemberController.php b/src/Controller/TeamMemberController.php new file mode 100644 index 00000000..86d45214 --- /dev/null +++ b/src/Controller/TeamMemberController.php @@ -0,0 +1,369 @@ +getUser(); + $team = $currentTeamService->getTeamFromSession($user); + + // Admin Route only + if (!$securityService->adminCheck($user, $team)) { + return $this->redirectToRoute('dashboard'); + } + $kurse = $academyCourseRepository->findKurseByTeam($team); + + return $this->render('team/academy.html.twig', [ + 'currentTeam' => $team, + 'title' => $this->translator->trans(id: 'academy.manage', domain: 'team'), + 'team' => $team, + 'data' => $team->getAkademieUsers(), + 'kurse' => $kurse, + 'questionnaires' => $questionnaireRepository->findByTeam($team), + ]); + } + + #[Route(path: '/team_mitglieder/admin', name: 'team_mitglieder_admin')] + public function adminToggle( + Request $request, + SecurityService $securityService, + UserRepository $userRepository, + EntityManagerInterface $em, + TeamRepository $teamRepository, + CurrentTeamService $currentTeamService, + ): Response + { + $user = $this->getUser(); + $teamId = $request->get('teamId'); + $team = $teamId ? $teamRepository->find($teamId) : $currentTeamService->getCurrentAdminTeam($user); + + if ($securityService->adminCheck($user, $team) === false) { + return $this->redirectToRoute('dashboard'); + } + + $member = $userRepository->findOneBy(array('id' => $request->get('memberId'))); + + // Only superadmins can promote themselves + if ($securityService->superAdminCheck($user) || ($user !== $member && $member->hasTeam($team))) { + if ($member->hasAdminRole($team)) { + $team->removeAdmin($member); + } else { + $team->addAdmin($member); + } + } + + $em->persist($team); + $em->flush(); + + if ($teamId) { + return $this->redirectToRoute('team_mitglieder', ['id' => $teamId]); + } + return $this->redirectToRoute('team_mitglieder'); + } + + #[Route(path: '/ext_team_dsb', name: 'team_dsb')] + public function dsbAdd( + Request $request, + InviteService $inviteService, + SecurityService $securityService, + EntityManagerInterface $em, + UserRepository $userRepository, + CurrentTeamService $currentTeamService, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getCurrentAdminTeam($user); + + if (!$securityService->adminCheck($user, $team)) { + return $this->redirectToRoute('dashboard'); + } + + $form = $this->createForm(DsbType::class); + $form->handleRequest($request); + + $errors = array(); + if ($form->isSubmitted() && $form->isValid()) { + + $dsb = $form->getData(); + $email = $dsb['dsb']; + $user = $userRepository->findOneBy(array('email' => $email)); + if (!$user) { + $user = $inviteService->newUser($email, $team); + } + if (!$team->getDsbUser()) { + $team->setDsbUser($user); + $em->persist($team); + } + + $em->flush(); + return $this->redirectToRoute( + 'team_dsb', + [ + 'snack' => $this->translator->trans(id: 'dsb.added', domain: 'team'), + ], + ); + } + return $this->render('team/dsb.html.twig', [ + 'form' => $form->createView(), + 'errors' => $errors, + 'title' => $this->translator->trans(id: 'dsb.manage', domain: 'team'), + 'data' => $team->getDsbUser(), + 'snack' => $request->get('snack'), + 'currentTeam' => $team, + 'adminArea' => true, + ]); + } + + #[Route(path: '/team_dsb/remove', name: 'team_dsb_remove')] + public function dsbRemove( + Request $request, + SecurityService $securityService, + UserRepository $userRepository, + EntityManagerInterface $em, + CurrentTeamService $currentTeamService, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + + if ($securityService->adminCheck($user, $team) === false) { + return $this->redirectToRoute('dashboard'); + } + + $user = $userRepository->findOneBy(array('id' => $request->get('id'))); + + if ($team->getDsbUser() === $user) { + $snack = $this->translator->trans(id: 'dsb.error.selfRemove', domain: 'team'); + if ($this->getUser() !== $team->getDsbUser()) { + $user->removeTeam($team); + $team->removeAdmin($user); + $user->setAkademieUser(null); + $snack = $this->translator->trans(id: 'dsb.removed', domain: 'team'); + } + $team->setDsbUser(null); + } + $em->persist($team); + $em->persist($user); + $em->flush(); + + return $this->redirectToRoute('team_dsb', ['snack' => $snack]); + } + + #[Route(path: '/team_mitglieder', name: 'team_mitglieder')] + public function mitgliederAdd( + Request $request, + InviteService $inviteService, + EntityManagerInterface $em, + TeamRepository $teamRepository, + SettingsRepository $settingsRepository, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response + { + $user = $this->getUser(); + $teamId = $request->get('id'); + $currentTeam = null; + $settings = $settingsRepository->findOne(); + $useKeycloakGroups = $settings ? $settings->getUseKeycloakGroups() : false; + + if ($teamId) { + $team = $teamRepository->find($teamId); + } else { + $team = $currentTeamService->getCurrentAdminTeam($user); + $currentTeam = $team; + } + + $temp = array_merge($team->getMembers()->toArray(), $team->getAdmins()->toArray()); + $members = []; + foreach ($temp as $member) { + if (!in_array($member, $members)) { + $members[] = $member; + } + } + + if ($securityService->adminCheck($user, $team) === false) { + return $this->redirectToRoute('team_abteilungen'); + } + + $newMember = array(); + $form = $this->createForm(NewMemberType::class, $newMember); + $form->handleRequest($request); + + $errors = array(); + if ($form->isSubmitted() && $form->isValid()) { + $newMembers = $form->getData(); + $lines = explode("\n", $newMembers['member']); + + if (!empty($lines)) { + foreach ($lines as $line) { + $newMember = trim($line); + $newUser = $inviteService->newUser($newMember); + $newUser->addTeam($team); + $em->persist($newUser); + } + $em->flush(); + if ($teamId) { + return $this->redirectToRoute('team_mitglieder', ['id' => $teamId]); + } + return $this->redirectToRoute('team_mitglieder'); + } + } + return $this->render('team/member.html.twig', [ + 'currentTeam' => $currentTeam, + 'adminArea' => true, + 'form' => $form->createView(), + 'errors' => $errors, + 'title' => $this->translator->trans(id: 'team.manageMembers', domain: 'team'), + 'team' => $team, + 'members' => $members, + 'useKeycloakGroups' => $useKeycloakGroups, + ]); + } + + #[Route(path: '/team_mitglieder/remove', name: 'team_mitglieder_remove')] + public function mitgliederRemove( + Request $request, + SecurityService $securityService, + TeamRepository $teamRepository, + UserRepository $userRepository, + EntityManagerInterface $em, + CurrentTeamService $currentTeamService, + ): Response + { + $user = $this->getUser(); + $teamId = $request->get('teamId'); + $team = $teamId ? $teamRepository->find($teamId) : $currentTeamService->getCurrentAdminTeam($user); + + if ($securityService->adminCheck($user, $team) === false) { + return $this->redirectToRoute('team_mitglieder'); + } + + $member = $userRepository->findOneBy(array('id' => $request->get('memberId'))); + + switch ($request->get('type')) { + case 'academy': + $member->setAkademieUser(null); + $target = $this->generateUrl('akademie_admin') . '#user'; + break; + default: + if ($member !== $user && $member->hasTeam($team)) { + $member->removeTeam($team); + $team->removeAdmin($member); + } + if ($teamId) { + $target = $this->generateUrl('team_mitglieder', ['id' => $teamId]); + } else { + $target = $this->generateUrl('team_mitglieder'); + } + } + + $em->persist($member); + $em->persist($team); + $em->flush(); + return $this->redirect($target); + } + + #[Route(path: '/team_mitglieder/create', name: 'team_mitglieder_create')] + public function teamMemberCreate( + Request $request, + SecurityService $securityService, + InviteService $inviteService, + EntityManagerInterface $em, + TeamRepository $teamRepository, + CurrentTeamService $currentTeamService, + ): Response + { + $user = $this->getUser(); + $teamId = $request->get('id'); + $team = $teamId ? $teamRepository->find($teamId) : $currentTeamService->getCurrentAdminTeam($user); + $target = $this->generateUrl('team_mitglieder'); + + if ($securityService->adminCheck($user, $team) === false) { + return $this->redirectToRoute('dashboard'); + } + + $newMember = array(); + $form = $this->createForm(NewMemberType::class, $newMember); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $newMembers = $form->getData(); + $lines = explode("\n", $newMembers['member']); + + if (!empty($lines)) { + foreach ($lines as $line) { + $newMember = trim($line); + $user = $inviteService->newUser($newMember); + + switch ($request->get('type')) { + case 'admin': + if (!$user->hasAdminRole($team)) { + $team->addAdmin($user); + $em->persist($team); + } + break; + case 'academy': + if ($user->getAkademieUser() === null) { + $user->setAkademieUser($team); + $em->persist($user); + } + $target = $this->generateUrl('akademie_admin') . '#user'; + break; + default: + if (!$user->hasTeam($team)) { + $user->addTeam($team); + $em->persist($user); + } + if ($teamId) { + $target = $this->generateUrl('team_mitglieder', ['id' => $teamId]); + } + } + } + } + $em->flush(); + return $this->redirect($target); + } + + return $this->render('team/modalViewUser.html.twig', [ + 'form' => $form->createView(), + 'teamId' => $teamId, + 'title' => $request->get('title'), + 'type' => $request->get('type') + ]); + } +} diff --git a/src/Controller/TomController.php b/src/Controller/TomController.php index 736f131e..c40774b2 100644 --- a/src/Controller/TomController.php +++ b/src/Controller/TomController.php @@ -5,45 +5,46 @@ * Date: 15.05.2020 * Time: 09:15 */ + namespace App\Controller; -use App\Entity\AuditTom; -use App\Entity\Tom; use App\Form\Type\TomType; +use App\Repository\AuditTomRepository; +use App\Repository\TomRepository; use App\Service\ApproveService; +use App\Service\CurrentTeamService; use App\Service\DisableService; use App\Service\SecurityService; use App\Service\TomService; +use DateTime; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class TomController extends AbstractController { - /** - * @Route("/tom", name="tom") - */ - public function index(SecurityService $securityService) - { - $team = $this->getUser()->getTeam(); - $tom = $this->getDoctrine()->getRepository(Tom::class)->findActivByTeam($team); - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); - } - return $this->render('tom/index.html.twig', [ - 'tom' => $tom, - ]); + public function __construct(private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { } - /** - * @Route("/tom/new", name="tom_new") - */ - public function addAuditTom(ValidatorInterface $validator, Request $request, SecurityService $securityService, TomService $tomService) + #[Route(path: '/tom/new', name: 'tom_new')] + public function addAuditTom( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + TomService $tomService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('tom'); } @@ -58,85 +59,64 @@ public function addAuditTom(ValidatorInterface $validator, Request $request, Sec $data = $form->getData(); $errors = $validator->validate($data); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($data); - $em->flush(); + $this->em->persist($data); + $this->em->flush(); return $this->redirectToRoute('tom'); } } return $this->render('tom/new.html.twig', [ + 'currentTeam' => $team, 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'TOM erstellen', + 'title' => $this->translator->trans(id: 'tom.create', domain: 'tom'), 'tom' => $tom, 'activ' => $tom->getActiv(), 'activTitel' => true ]); } - /** - * @Route("/tom/edit", name="tom_edit") - */ - public function EditTom(ValidatorInterface $validator, Request $request, SecurityService $securityService, TomService $tomService) + #[Route(path: '/tom/approve', name: 'tom_approve')] + public function approve( + Request $request, + SecurityService $securityService, + ApproveService $approveService, + CurrentTeamService $currentTeamService, + TomRepository $tomRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $tom = $this->getDoctrine()->getRepository(Tom::class)->find($request->get('tom')); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $tom = $tomRepository->find($request->get('id')); - if ($securityService->teamDataCheck($tom, $team) === false) { - return $this->redirectToRoute('tom'); + if ($securityService->teamDataCheck($tom, $team) && $securityService->adminCheck($user, $team)) { + $approve = $approveService->approve($tom, $user); + return $this->redirectToRoute('tom_edit', ['tom' => $approve['data'], 'snack' => $approve['snack']]); } - $newTom = $tomService->cloneTom($tom, $this->getUser()); - - $form = $this->createForm(TomType::class, $newTom); - $form->remove('titel'); - $form->handleRequest($request); - $errors = array(); - if ($form->isSubmitted() && $form->isValid() && $tom->getActiv() === 1 && !$tom->getApproved()) { - - $tom->setActiv(false); - $newTom = $form->getData(); - $errors = $validator->validate($newTom); - if (count($errors) == 0) { - - $em = $this->getDoctrine()->getManager(); - $em->persist($newTom); - $em->persist($tom); - $em->flush(); - return $this->redirectToRoute('tom_edit', ['tom' => $newTom->getId(), 'snack' => 'Erfolgreich gepeichert']); - } - } - return $this->render('tom/edit.html.twig', [ - 'form' => $form->createView(), - 'errors' => $errors, - 'title' => 'TOM bearbeiten', - 'tom' => $tom, - 'activ' => $tom->getActiv(), - 'activTitel' => false, - 'snack' => $request->get('snack') - ]); + // if security check fails + return $this->redirectToRoute('tom'); } - /** - * @Route("/tom/clone", name="tom_clone") - */ - public function cloneTom(Request $request) + #[Route(path: '/tom/clone', name: 'tom_clone')] + public function cloneTom( + Request $request, + CurrentTeamService $currentTeamService, + AuditTomRepository $auditTomRepository, + ): Response { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($team === null) { return $this->redirectToRoute('dashboard'); } - $today = new \DateTime(); - $audit = $this->getDoctrine()->getRepository(AuditTom::class)->findAllByTeam(1); - - $em = $this->getDoctrine()->getManager(); + $today = new DateTime(); + $audit = $auditTomRepository->findAllByTeam(1); foreach ($audit as $data) { if ($data->getCreatedAt() > $team->getClonedAt()) { $newAudit = clone $data; $newAudit->setTeam($team); $newAudit->setCreatedAt($today); - $em->persist($newAudit); + $this->em->persist($newAudit); } } @@ -144,41 +124,103 @@ public function cloneTom(Request $request) //set ClonedAt Date to be able to update later newer versions $team->setclonedAt($today); - $em->persist($team); - $em->flush(); + $this->em->persist($team); + $this->em->flush(); return $this->redirectToRoute('audit_tom'); } - /** - * @Route("/tom/approve", name="tom_approve") - */ - public function approve(Request $request, SecurityService $securityService, ApproveService $approveService) + #[Route(path: '/tom/disable', name: 'tom_disable')] + public function disable( + Request $request, + SecurityService $securityService, + DisableService $disableService, + CurrentTeamService $currentTeamService, + TomRepository $tomRepository, + ): Response { - $team = $this->getUser()->getAdminUser(); - $tom = $this->getDoctrine()->getRepository(Tom::class)->find($request->get('id')); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $tom = $tomRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($tom, $team) && $securityService->adminCheck($user, $team)) { + $disableService->disable($tom, $user); + } + + return $this->redirectToRoute('tom'); + } + + #[Route(path: '/tom/edit', name: 'tom_edit')] + public function editTom( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + TomService $tomService, + CurrentTeamService $currentTeamService, + TomRepository $tomRepository, + ): Response + { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $tom = $tomRepository->find($request->get('tom')); if ($securityService->teamDataCheck($tom, $team) === false) { return $this->redirectToRoute('tom'); } - $approve = $approveService->approve($tom, $this->getUser()); - return $this->redirectToRoute('tom_edit', ['tom' => $approve['data'], 'snack' => $approve['snack']]); + $newTom = $tomService->cloneTom($tom, $this->getUser()); + + $form = $this->createForm(TomType::class, $newTom); + $form->remove('titel'); + $form->handleRequest($request); + $errors = []; + if ($form->isSubmitted() && $form->isValid() && $tom->getActiv() === 1 && !$tom->getApproved()) { + + $tom->setActiv(false); + $newTom = $form->getData(); + $errors = $validator->validate($newTom); + if (count($errors) == 0) { + $this->em->persist($newTom); + $this->em->persist($tom); + $this->em->flush(); + return $this->redirectToRoute( + 'tom_edit', + [ + 'tom' => $newTom->getId(), + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general'), + ], + ); + } + } + return $this->render('tom/edit.html.twig', [ + 'form' => $form->createView(), + 'errors' => $errors, + 'title' => $this->translator->trans(id: 'tom.edit', domain: 'tom'), + 'tom' => $tom, + 'activ' => $tom->getActiv(), + 'activTitel' => false, + 'snack' => $request->get('snack'), + 'currentTeam' => $team + ]); } - /** - * @Route("/tom/disable", name="tom_disable") - */ - public function disable(Request $request, SecurityService $securityService, DisableService $disableService) + #[Route(path: '/tom', name: 'tom')] + public function index( + SecurityService $securityService, + CurrentTeamService $currentTeamService, + TomRepository $tomRepository, + ): Response { - $team = $this->getUser()->getAdminUser(); - $tom = $this->getDoctrine()->getRepository(Tom::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $tom = $tomRepository->findActiveByTeam($team); - if ($securityService->teamDataCheck($tom, $team) === true) { - $disableService->disable($tom, $this->getUser()); + if ($securityService->teamCheck($team) === false) { + return $this->redirectToRoute('dashboard'); } - return $this->redirectToRoute('tom'); + return $this->render('tom/index.html.twig', [ + 'tom' => $tom, + 'currentTeam' => $team + ]); } } diff --git a/src/Controller/UploadController.php b/src/Controller/UploadController.php index 6ec32e62..f9e5b719 100644 --- a/src/Controller/UploadController.php +++ b/src/Controller/UploadController.php @@ -4,21 +4,45 @@ use App\Entity\Upload; use App\Form\Type\UploadTyp; +use App\Service\CurrentTeamService; use App\Service\ParserService; use App\Service\SecurityService; -use League\Flysystem\FilesystemInterface; +use DateTime; +use Doctrine\ORM\EntityManagerInterface; +use League\Flysystem\FilesystemOperator; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Contracts\Translation\TranslatorInterface; class UploadController extends AbstractController { - /** - * @Route("/upload", name="upload_new") - */ - public function index(Request $request, FilesystemInterface $internFileSystem, ParserService $parserService, SecurityService $securityService) + + + public function __construct(private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { + } + + #[Route(path: '/upload/fail', name: 'upload_fail')] + public function fail(Request $request): Response { - $team = $this->getUser()->getAdminUser(); + return $this->render('upload/fail.html.twig', array('message' => $request->get('message'))); + } + + #[Route(path: '/upload', name: 'upload_new')] + public function index( + Request $request, + FilesystemOperator $internFilesystem, + ParserService $parserService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getCurrentAdminTeam($user); // Admin Route only if (!$securityService->adminCheck($this->getUser(), $team)) { return $this->redirectToRoute('dashboard'); @@ -29,25 +53,32 @@ public function index(Request $request, FilesystemInterface $internFileSystem, P $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $em = $this->getDoctrine()->getManager(); - $upload->setUpdatedAt(new \DateTime()); + $upload->setUpdatedAt(new DateTime()); $upload->setUId('Not completed'); $upload->setAmount(0); $upload = $form->getData(); - $em->persist($upload); + $this->em->persist($upload); if (!preg_match('/odif$/', $upload->getFile())) { - return $this->redirectToRoute('upload_fail', array('message' => ' - Der Dateityp ist fehlerhaft. Die Datei muss mit .odif enden.')); + return $this->redirectToRoute( + 'upload_fail', + [ + 'message' => $this->translator->trans(id: 'error.dataType.notOdif', domain: 'general'), + ], + ); } - $em->flush(); - $stream = $internFileSystem->read($upload->getFile()); + $this->em->flush(); + $stream = $internFilesystem->read($upload->getFile()); $data = json_decode($stream); $verify = $parserService->verify($data); - if($verify != 1){ - $internFileSystem->delete($upload->getFile()); - return $this->redirectToRoute('upload_fail',array('message'=>' - Die Signatur ist ungültig. Bitte kontaktieren Sie die Personen, die Ihnen die Datei überlassen hat.')); + if ($verify != 1) { + $internFilesystem->delete($upload->getFile()); + return $this->redirectToRoute( + 'upload_fail', + [ + 'message' => $this->translator->trans(id: 'error.signature', domain: 'general'), + ], + ); } $res = false; switch ($data->table) { @@ -62,32 +93,24 @@ public function index(Request $request, FilesystemInterface $internFileSystem, P } if ($res) { - $internFileSystem->delete($upload->getFile()); + $internFilesystem->delete($upload->getFile()); return $this->redirectToRoute('upload_success'); } else { - $internFileSystem->delete($upload->getFile()); - return $this->redirectToRoute('upload_fail',array('message'=>' - Die Datei ist fehlerhaft und kann nicht eingelesen werden. - Es können jedoch bereits Daten in Ihren Datenstamm eingetragen worden sein. - Bitte kontaktieren Sie die Personen, die Ihnen die Datei überlassen hat.')); + $internFilesystem->delete($upload->getFile()); + return $this->redirectToRoute( + 'upload_fail', + [ + 'message' => $this->translator->trans(id: 'error.file', domain: 'general'), + ], + ); } } return $this->render('upload/new.html.twig', array('form' => $form->createView())); } - /** - * @Route("/upload/success", name="upload_success") - */ - public function success(Request $request) + #[Route(path: '/upload/success', name: 'upload_success')] + public function success(Request $request): Response { return $this->render('upload/success.html.twig'); } - - /** - * @Route("/upload/fail", name="upload_fail") - */ - public function fail(Request $request) - { - return $this->render('upload/fail.html.twig',array('message'=>$request->get('message'))); - } } diff --git a/src/Controller/VVTDatenkategorieController.php b/src/Controller/VVTDatenkategorieController.php index 138635bf..34a977ef 100644 --- a/src/Controller/VVTDatenkategorieController.php +++ b/src/Controller/VVTDatenkategorieController.php @@ -10,128 +10,138 @@ use App\Entity\VVTDatenkategorie; use App\Form\Type\VVTDatenkategorieType; -use App\Service\VVTDatenkategorieService; -use App\Service\ApproveService; -use App\Service\DisableService; -use App\Service\SecurityService; use App\Repository\VVTDatenkategorieRepository; +use App\Service\CurrentTeamService; +use App\Service\SecurityService; +use App\Service\VVTDatenkategorieService; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; -use Doctrine\ORM\EntityManagerInterface; -/** - * @Route("/vvtdatenkategorie") - */ +#[Route(path: '/vvtdatenkategorie')] class VVTDatenkategorieController extends AbstractController { - /** - * @Route("/", name="app_vvtdatenkategorie_index", methods={"GET"}) - */ - public function index(VVTDatenkategorieRepository $vVTDatenkategorieRepository, SecurityService $securityService): Response + #[Route(path: '/delete/{id}', name: 'app_vvtdatenkategorie_delete', methods: ['POST'])] + public function delete( + Request $request, + VVTDatenkategorie $vVTDatenkategorie, + EntityManagerInterface $entityManager, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getTeam(); - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamCheck($team) === true) { + if ($this->isCsrfTokenValid('delete' . $vVTDatenkategorie->getId(), $request->request->get('_token'))) { + + $vVTDatenkategorie->setActiv(false); + $entityManager->persist($vVTDatenkategorie); + $entityManager->flush(); + } } - return $this->render('vvt_datenkategorie/index.html.twig', [ - 'vvtdatenkategories' => $vVTDatenkategorieRepository->findByTeam($team), - ]); + + return $this->redirectToRoute('app_vvtdatenkategorie_index', [], Response::HTTP_SEE_OTHER); } - /** - * @Route("/new", name="app_vvtdatenkategorie_new", methods={"GET", "POST"}) - */ - public function new(Request $request, EntityManagerInterface $entityManager, SecurityService $securityService, VVTDatenkategorieService $vVTDatenkategorieService): Response + #[Route(path: '/edit/{id}', name: 'app_vvtdatenkategorie_edit', methods: ['GET', 'POST'])] + public function edit( + Request $request, + VVTDatenkategorie $vVTDatenkategorie, + EntityManagerInterface $entityManager, + SecurityService $securityService, + VVTDatenkategorieService $vVTDatenkategorieService, + CurrentTeamService $currentTeamService, + ): Response { - $user = $this->getUser(); - $team = $user->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); + return $this->redirectToRoute('app_vvtdatenkategorie_index'); } - $vVTDatenkategorie = $vVTDatenkategorieService->newVVTDatenkategorie($team, $user); - $form = $form = $this->createForm(VVTDatenkategorieType::class, $vVTDatenkategorie); + + $newVVTDatenkategorie = $vVTDatenkategorieService->cloneVVTDatenkategorie($vVTDatenkategorie); + $form = $vVTDatenkategorieService->createForm($newVVTDatenkategorie, $team); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { + + $vVTDatenkategorie->setActiv(false); $entityManager->persist($vVTDatenkategorie); + + $entityManager->persist($newVVTDatenkategorie); + + + foreach ($vVTDatenkategorie->getLoeschkonzept() as $loeschkonzept) { + $loeschkonzept->addVvtdatenkategory($newVVTDatenkategorie); + $entityManager->persist($loeschkonzept); + } + $entityManager->flush(); return $this->redirectToRoute('app_vvtdatenkategorie_index', [], Response::HTTP_SEE_OTHER); } - return $this->renderForm('vvt_datenkategorie/new.html.twig', [ + return $this->renderForm('vvt_datenkategorie/edit.html.twig', [ 'vvtdatenkategorie' => $vVTDatenkategorie, 'form' => $form, ]); } - /** - * @Route("/{id}", name="app_vvtdatenkategorie_show", methods={"GET"}) - */ - public function show(VVTDatenkategorie $vVTDatenkategorie): Response + #[Route(path: '/', name: 'app_vvtdatenkategorie_index', methods: ['GET'])] + public function index( + VVTDatenkategorieRepository $vVTDatenkategorieRepository, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + ): Response { - - return $this->render('vvt_datenkategorie/show.html.twig', [ - 'vvtdatenkategorie' => $vVTDatenkategorie, + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamCheck($team) === false) { + return $this->redirectToRoute('dashboard'); + } + return $this->render('vvt_datenkategorie/index.html.twig', [ + 'vvtdatenkategories' => $vVTDatenkategorieRepository->findByTeam($team), + 'currentTeam' => $team, ]); } - /** - * @Route("/{id}/edit", name="app_vvtdatenkategorie_edit", methods={"GET", "POST"}) - */ - public function edit(Request $request, VVTDatenkategorie $vVTDatenkategorie, VVTDatenkategorieRepository $vVTDatenkategorieRepository, EntityManagerInterface $entityManager, SecurityService $securityService, VVTDatenkategorieService $vVTDatenkategorieService): Response + #[Route(path: '/new', name: 'app_vvtdatenkategorie_new', methods: ['GET', 'POST'])] + public function new( + Request $request, + EntityManagerInterface $entityManager, + SecurityService $securityService, + VVTDatenkategorieService $vVTDatenkategorieService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getTeam(); + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('app_vvtdatenkategorie_index'); + return $this->redirectToRoute('dashboard'); } - - $newVVTDatenkategorie = $vVTDatenkategorieService->cloneVVTDatenkategorie($vVTDatenkategorie); - $form = $vVTDatenkategorieService->createForm($newVVTDatenkategorie, $team); + $vVTDatenkategorie = $vVTDatenkategorieService->newVVTDatenkategorie($team, $user); + $form = $this->createForm(VVTDatenkategorieType::class, $vVTDatenkategorie); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - - $vVTDatenkategorie->setActiv(false); $entityManager->persist($vVTDatenkategorie); - - $entityManager->persist($newVVTDatenkategorie); - - - foreach ($vVTDatenkategorie->getLoeschkonzept() as $loeschkonzept) { - $loeschkonzept->addVvtdatenkategory($newVVTDatenkategorie); - $entityManager->persist($loeschkonzept); - } - $entityManager->flush(); return $this->redirectToRoute('app_vvtdatenkategorie_index', [], Response::HTTP_SEE_OTHER); } - return $this->renderForm('vvt_datenkategorie/edit.html.twig', [ + return $this->renderForm('vvt_datenkategorie/new.html.twig', [ 'vvtdatenkategorie' => $vVTDatenkategorie, 'form' => $form, ]); } - /** - * @Route("/{id}", name="app_vvtdatenkategorie_delete", methods={"POST"}) - */ - public function delete(Request $request, VVTDatenkategorie $vVTDatenkategorie, EntityManagerInterface $entityManager, SecurityService $securityService): Response + #[Route(path: '/show/{id}', name: 'app_vvtdatenkategorie_show', methods: ['GET'])] + public function show(VVTDatenkategorie $vVTDatenkategorie): Response { - $team = $this->getUser()->getAdminUser(); - if ($securityService->teamCheck($team) === true) - { - if ($this->isCsrfTokenValid('delete'.$vVTDatenkategorie->getId(), $request->request->get('_token'))) { - - $vVTDatenkategorie->setActiv(false); - $entityManager->persist($vVTDatenkategorie); - $entityManager->flush(); - } - } - return $this->redirectToRoute('app_vvtdatenkategorie_index', [], Response::HTTP_SEE_OTHER); + return $this->render('vvt_datenkategorie/show.html.twig', [ + 'vvtdatenkategorie' => $vVTDatenkategorie, + ]); } } diff --git a/src/Controller/VorfallController.php b/src/Controller/VorfallController.php index e2d48c6f..415060db 100644 --- a/src/Controller/VorfallController.php +++ b/src/Controller/VorfallController.php @@ -8,42 +8,40 @@ namespace App\Controller; -use App\Entity\Vorfall; +use App\Repository\VorfallRepository; use App\Service\ApproveService; use App\Service\AssignService; +use App\Service\CurrentTeamService; use App\Service\SecurityService; use App\Service\VorfallService; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class VorfallController extends AbstractController { - /** - * @Route("/vorfall", name="vorfall") - */ - public function index(SecurityService $securityService) - { - $team = $this->getUser()->getTeam(); - - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); - } - $vorfall = $this->getDoctrine()->getRepository(Vorfall::class)->findAllByTeam($team); - return $this->render('vorfall/index.html.twig', [ - 'vorfall' => $vorfall, - ]); + public function __construct(private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { } - /** - * @Route("/vorfall/new", name="vorfall_new") - */ - public function addVorfall(ValidatorInterface $validator, Request $request, SecurityService $securityService, VorfallService $vorfallService) + #[Route(path: '/vorfall/new', name: 'vorfall_new')] + public function addVorfall( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + VorfallService $vorfallService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('dashboard'); } @@ -58,28 +56,55 @@ public function addVorfall(ValidatorInterface $validator, Request $request, Secu $data = $form->getData(); $errors = $validator->validate($data); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($data); - $em->flush(); + $this->em->persist($data); + $this->em->flush(); return $this->redirectToRoute('vorfall'); } } return $this->render('vorfall/new.html.twig', [ 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Datenschutzvorfall eintragen', + 'title' => $this->translator->trans(id: 'incident.register', domain: 'vorfall'), 'vorfall' => $vorfall, 'activ' => $vorfall->getActiv() ]); } - /** - * @Route("/vorfall/edit", name="vorfall_edit") - */ - public function EditVorfall(ValidatorInterface $validator, Request $request, SecurityService $securityService, VorfallService $vorfallService, AssignService $assignService) + #[Route(path: '/vorfall/approve', name: 'vorfall_approve')] + public function approve( + Request $request, + SecurityService $securityService, + ApproveService $approveService, + CurrentTeamService $currentTeamService, + VorfallRepository $incidentRepository, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $vorfall = $incidentRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($vorfall, $team) && $securityService->adminCheck($user, $team)) { + $approve = $approveService->approve($vorfall, $user); + return $this->redirectToRoute('vorfall_edit', ['id' => $approve['data'], 'snack' => $approve['snack']]); + } + + // if security check fails + return $this->redirectToRoute('vvt'); + } + + #[Route(path: '/vorfall/edit', name: 'vorfall_edit')] + public function editVorfall( + ValidatorInterface $validator, + Request $request, + SecurityService $securityService, + VorfallService $vorfallService, + AssignService $assignService, + CurrentTeamService $currentTeamService, + VorfallRepository $incidentRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $vorgang = $this->getDoctrine()->getRepository(Vorfall::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $vorgang = $incidentRepository->find($request->get('id')); if ($securityService->teamDataCheck($vorgang, $team) === false) { return $this->redirectToRoute('vorfall'); @@ -97,38 +122,47 @@ public function EditVorfall(ValidatorInterface $validator, Request $request, Sec $newVorgang = $form->getData(); $errors = $validator->validate($newVorgang); if (count($errors) == 0) { - - $em = $this->getDoctrine()->getManager(); - $em->persist($newVorgang); - $em->persist($vorgang); - $em->flush(); - return $this->redirectToRoute('vorfall_edit', ['id' => $newVorgang->getId(), 'snack' => 'Erfolgreich gespeichert']); + $this->em->persist($newVorgang); + $this->em->persist($vorgang); + $this->em->flush(); + return $this->redirectToRoute( + 'vorfall_edit', + [ + 'id' => $newVorgang->getId(), + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general'), + ], + ); } } return $this->render('vorfall/edit.html.twig', [ 'form' => $form->createView(), 'assignForm' => $assign->createView(), 'errors' => $errors, - 'title' => 'Datenschutzvorfall bearbeiten', + 'title' => $this->translator->trans(id: 'incident.edit', domain: 'vorfall'), 'vorfall' => $vorgang, 'activ' => $vorgang->getActiv(), 'snack' => $request->get('snack') ]); } - /** - * @Route("/vorfall/approve", name="vorfall_approve") - */ - public function approve(Request $request, SecurityService $securityService, ApproveService $approveService) + #[Route(path: '/vorfall', name: 'vorfall')] + public function index( + SecurityService $securityService, + CurrentTeamService $currentTeamService, + VorfallRepository $incidentRepository, + ): Response { - $team = $this->getUser()->getAdminUser(); - $vorfall = $this->getDoctrine()->getRepository(Vorfall::class)->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); - if ($securityService->teamDataCheck($vorfall, $team) === false) { - return $this->redirectToRoute('vvt'); + if ($securityService->teamCheck($team) === false) { + return $this->redirectToRoute('dashboard'); } - $approve = $approveService->approve($vorfall, $this->getUser()); - return $this->redirectToRoute('vorfall_edit', ['id' => $approve['data'], 'snack' => $approve['snack']]); + $vorfall = $incidentRepository->findAllByTeam($team); + + return $this->render('vorfall/index.html.twig', [ + 'vorfall' => $vorfall, + 'currentTeam' => $team, + ]); } } diff --git a/src/Controller/VvtController.php b/src/Controller/VvtController.php index 8a8c504c..8508cfdc 100644 --- a/src/Controller/VvtController.php +++ b/src/Controller/VvtController.php @@ -8,46 +8,45 @@ namespace App\Controller; -use App\Entity\VVT; -use App\Entity\VVTDsfa; use App\Form\Type\VvtDsfaType; +use App\Repository\VVTDsfaRepository; +use App\Repository\VVTRepository; use App\Service\ApproveService; use App\Service\AssignService; +use App\Service\CurrentTeamService; use App\Service\DisableService; use App\Service\SecurityService; use App\Service\VVTDatenkategorieService; use App\Service\VVTService; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class VvtController extends AbstractController { - /** - * @Route("/vvt", name="vvt") - */ - public function index(SecurityService $securityService, Request $request) - { - $team = $this->getUser()->getTeam(); - if ($securityService->teamCheck($team) === false) { - return $this->redirectToRoute('dashboard'); - } - $vvt = $this->getDoctrine()->getRepository(VVT::class)->findActivByTeam($team); - return $this->render('vvt/index.html.twig', [ - 'vvt' => $vvt, - 'snack' => $request->get('snack') - ]); + public function __construct(private readonly TranslatorInterface $translator, + private EntityManagerInterface $em, + ) + { } - /** - * @Route("/vvt/new", name="vvt_new") - */ - public function addVvt(ValidatorInterface $validator, Request $request, VVTService $VVTService, SecurityService $securityService, VVTDatenkategorieService $VVTDatenkategorieService) + #[Route(path: '/vvt/new', name: 'vvt_new')] + public function addVvt( + ValidatorInterface $validator, + Request $request, + VVTService $VVTService, + SecurityService $securityService, + VVTDatenkategorieService $VVTDatenkategorieService, + CurrentTeamService $currentTeamService, + ): Response { - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamCheck($team) === false) { return $this->redirectToRoute('vvt'); @@ -63,23 +62,26 @@ public function addVvt(ValidatorInterface $validator, Request $request, VVTServi $vvt = $form->getData(); $errors = $validator->validate($vvt); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - - foreach ($vvt->getKategorien() as $kategorie){ - $tmp= $VVTDatenkategorieService->createChild($kategorie); + foreach ($vvt->getKategorien() as $kategorie) { + $tmp = $VVTDatenkategorieService->createChild($kategorie); $vvt->removeKategorien($kategorie); $vvt->addKategorien($tmp); } - $em->persist($vvt); - $em->flush(); - return $this->redirectToRoute('vvt', ['snack' => 'Erfolgreich angelegt']); + $this->em->persist($vvt); + $this->em->flush(); + return $this->redirectToRoute( + 'vvt', + [ + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general'), + ], + ); } } return $this->render('vvt/new.html.twig', [ 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Verarbeitung erfassen', + 'title' => $this->translator->trans(id: 'processing.track', domain: 'vvt'), 'activNummer' => true, 'vvt' => $vvt, 'activ' => $vvt->getActiv(), @@ -87,21 +89,144 @@ public function addVvt(ValidatorInterface $validator, Request $request, VVTServi ]); } + #[Route(path: '/vvt/approve', name: 'vvt_approve')] + public function approveVvt( + Request $request, + SecurityService $securityService, + ApproveService $approveService, + CurrentTeamService $currentTeamService, + VVTRepository $vvtRepository, + ): Response + { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $vvt = $vvtRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($vvt, $team) === false) { + return $this->redirectToRoute('vvt'); + } + $approve = $approveService->approve($vvt, $this->getUser()); + if ($approve['clone'] === true) { + $newVvt = $vvtRepository->find($approve['data']); + + if ($vvt->getActivDsfa()) { + $dsfa = $vvt->getActivDsfa(); + $newDsfa = clone $dsfa; + $newDsfa->setVvt($newVvt); + $newDsfa->setPrevious(null); + $this->em->persist($newDsfa); + } + foreach ($vvt->getPolicies() as $item) { + $item->addProcess($newVvt); + $this->em->persist($item); + } + foreach ($vvt->getSoftware() as $software) { + $software->addVvt($newVvt); + $this->em->persist($software); + } + + $this->em->persist($newVvt); + $this->em->flush(); + } + + return $this->redirectToRoute('vvt_edit', ['id' => $approve['data'], 'snack' => $approve['snack']]); + + } - /** - * @Route("/vvt/edit", name="vvt_edit") - */ - public function editVvt(ValidatorInterface $validator, Request $request, VVTService $VVTService, SecurityService $securityService, AssignService $assignService, VVTDatenkategorieService $VVTDatenkategorieService) + #[Route(path: '/vvt/clone', name: 'vvt_clone')] + public function cloneVvt( + Request $request, + SecurityService $securityService, + VVTService $VVTService, + ValidatorInterface $validator, + CurrentTeamService $currentTeamService, + VVTRepository $vvtRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $vvt = $this->getDoctrine()->getRepository(VVT::class)->find($request->get('id')); + $vvt = $vvtRepository->find($request->get('id')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); if ($securityService->teamDataCheck($vvt, $team) === false) { return $this->redirectToRoute('vvt'); } + $newVvt = $VVTService->cloneVvt($vvt, $this->getUser()); + $newVvt->setPrevious(null); + $newVvt->setApproved(null); + $newVvt->setApprovedBy(null); - foreach ($vvt->getKategorien() as $cloneKat){//hier haben wir die geklonten KAtegorien + foreach ($newVvt->getDsfa() as $dsfa) { + $newVvt->removeDsfa($dsfa); + } + foreach ($newVvt->getPolicies() as $policy) { + $newVvt->removePolicy($policy); + } + + $form = $VVTService->createForm($newVvt, $team); + $form->handleRequest($request); + + $errors = array(); + if ($form->isSubmitted() && $form->isValid()) { + $vvt = $form->getData(); + $errors = $validator->validate($vvt); + if (count($errors) == 0) { + $this->em->persist($vvt); + $this->em->flush(); + + return $this->redirectToRoute('vvt'); + } + } + return $this->render('vvt/new.html.twig', [ + 'form' => $form->createView(), + 'errors' => $errors, + 'title' => $this->translator->trans(id: 'processing.track', domain: 'vvt'), + 'activNummer' => true, + 'vvt' => $newVvt, + 'activ' => $newVvt->getActiv(), + 'CTA' => false, + ]); + } + + #[Route(path: '/vvt/disable', name: 'vvt_disable')] + public function disableVvt( + Request $request, + SecurityService $securityService, + DisableService $disableService, + CurrentTeamService $currentTeamService, + VVTRepository $vvtRepository, + ): Response + { + $user = $this->getUser(); + $team = $currentTeamService->getTeamFromSession($user); + $vvt = $vvtRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($vvt, $team) && $securityService->adminCheck($user, $team) && !$vvt->getApproved()) { + $disableService->disable($vvt, $user); + } + + return $this->redirectToRoute('vvt'); + } + + #[Route(path: '/vvt/edit', name: 'vvt_edit')] + public function editVvt( + ValidatorInterface $validator, + Request $request, + VVTService $VVTService, + SecurityService $securityService, + AssignService $assignService, + VVTDatenkategorieService $VVTDatenkategorieService, + CurrentTeamService $currentTeamService, + VVTRepository $vvtRepository, + ): Response + { + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $vvt = $vvtRepository->find($request->get('id')); + + if ($securityService->teamDataCheck($vvt, $team) === false) { + return $this->redirectToRoute('vvt'); + } + $newVvt = $VVTService->cloneVvt($vvt, $this->getUser()); + + foreach ($vvt->getKategorien() as $cloneKat) {//hier haben wir die geklonten KAtegorien $newVvt->addKategorien($VVTDatenkategorieService->findLatestKategorie($cloneKat->getCloneOf()));//wir hängen die neueste gültige Datenkategorie an den VVT clone an. } @@ -112,41 +237,45 @@ public function editVvt(ValidatorInterface $validator, Request $request, VVTServ $errors = array(); if ($form->isSubmitted() && $form->isValid() && $vvt->getActiv() && !$vvt->getApproved()) { - - $em = $this->getDoctrine()->getManager(); $vvt->setActiv(false); $newVvt = $form->getData(); $errors = $validator->validate($newVvt); if (count($errors) == 0) { - foreach ($newVvt->getKategorien() as $kategorie){ // wir haben die fiktiven neuesten Kategories - $tmp= $VVTDatenkategorieService->createChild($kategorie);//wir klonen die kategorie damit diese revisionssicher ist + foreach ($newVvt->getKategorien() as $kategorie) { // wir haben die fiktiven neuesten Kategories + $tmp = $VVTDatenkategorieService->createChild($kategorie);//wir klonen die kategorie damit diese revisionssicher ist $newVvt->removeKategorien($kategorie);//wir entferenen die fiktive neues kategorie $newVvt->addKategorien($tmp);//wir fügen die geklonte kategorie an } - + if ($vvt->getActivDsfa()) { $dsfa = $vvt->getActivDsfa(); $newDsfa = clone $dsfa; $newDsfa->setVvt($newVvt); $newDsfa->setPrevious(null); - $em->persist($newDsfa); + $this->em->persist($newDsfa); } foreach ($vvt->getPolicies() as $item) { $item->addProcess($newVvt); - $em->persist($item); + $this->em->persist($item); } foreach ($vvt->getSoftware() as $software) { $software->addVvt($newVvt); - $em->persist($software); + $this->em->persist($software); } - $em->persist($newVvt); - $em->persist($vvt); - $em->flush(); - return $this->redirectToRoute('vvt_edit', ['id' => $newVvt->getId(), 'snack' => 'Erfolgreich gespeichert']); + $this->em->persist($newVvt); + $this->em->persist($vvt); + $this->em->flush(); + return $this->redirectToRoute( + 'vvt_edit', + [ + 'id' => $newVvt->getId(), + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general'), + ], + ); } } @@ -154,7 +283,7 @@ public function editVvt(ValidatorInterface $validator, Request $request, VVTServ 'form' => $form->createView(), 'assignForm' => $assign->createView(), 'errors' => $errors, - 'title' => 'Verarbeitung bearbeiten', + 'title' => $this->translator->trans(id: 'processing.edit', domain: 'vvt'), 'vvt' => $vvt, 'activ' => $vvt->getActiv(), 'activNummer' => false, @@ -162,51 +291,19 @@ public function editVvt(ValidatorInterface $validator, Request $request, VVTServ ]); } - - /** - * @Route("/vvt/dsfa/new", name="vvt_dsfa_new") - */ - public function newVvtDsfa(ValidatorInterface $validator, Request $request, VVTService $VVTService, SecurityService $securityService) + #[Route(path: '/vvt/dsfa/edit', name: 'vvt_dsfa_edit')] + public function editVvtDsfa( + ValidatorInterface $validator, + Request $request, + VVTService $VVTService, + SecurityService $securityService, + AssignService $assignService, + CurrentTeamService $currentTeamService, + VVTDsfaRepository $vvtDsfaRepository, + ): Response { - $team = $this->getUser()->getTeam(); - $vvt = $this->getDoctrine()->getRepository(VVT::class)->find($request->get('vvt')); - - if ($securityService->teamDataCheck($vvt, $team) === false) { - return $this->redirectToRoute('vvt'); - } - - $dsfa = $VVTService->newDsfa($team, $this->getUser(), $vvt); - - $form = $this->createForm(VvtDsfaType::class, $dsfa); - $form->handleRequest($request); - - $errors = array(); - if ($form->isSubmitted() && $form->isValid()) { - $dsfa = $form->getData(); - $errors = $validator->validate($dsfa); - if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($dsfa); - $em->flush(); - return $this->redirectToRoute('vvt_edit', ['id' => $dsfa->getVvt()->getId(), 'snack' => 'DSFA angelegt']); - } - } - return $this->render('vvt/editDsfa.html.twig', [ - 'form' => $form->createView(), - 'errors' => $errors, - 'title' => 'Datenschutzfolgeabschätzung erstellen', - 'dsfa' => $dsfa, - 'activ' => $dsfa->getActiv(), - ]); - } - - /** - * @Route("/vvt/dsfa/edit", name="vvt_dsfa_edit") - */ - public function editVvtDsfa(ValidatorInterface $validator, Request $request, VVTService $VVTService, SecurityService $securityService, AssignService $assignService) - { - $team = $this->getUser()->getTeam(); - $dsfa = $this->getDoctrine()->getRepository(VVTDsfa::class)->find($request->get('dsfa')); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $dsfa = $vvtDsfaRepository->find($request->get('dsfa')); if ($securityService->teamDataCheck($dsfa->getVvt(), $team) === false) { return $this->redirectToRoute('vvt'); @@ -225,11 +322,17 @@ public function editVvtDsfa(ValidatorInterface $validator, Request $request, VVT $newDsfa = $form->getData(); $errors = $validator->validate($newDsfa); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($newDsfa); - $em->persist($dsfa); - $em->flush(); - return $this->redirectToRoute('vvt_dsfa_edit', ['dsfa' => $newDsfa->getId(), 'snack' => 'Erfolgreich gepeichert']); + $this->em->persist($newDsfa); + $this->em->persist($dsfa); + $this->em->flush(); + + return $this->redirectToRoute( + 'vvt_dsfa_edit', + [ + 'dsfa' => $newDsfa->getId(), + 'snack' => $this->translator->trans(id: 'save.successful', domain: 'general'), + ], + ); } } @@ -237,114 +340,78 @@ public function editVvtDsfa(ValidatorInterface $validator, Request $request, VVT 'form' => $form->createView(), 'assignForm' => $assign->createView(), 'errors' => $errors, - 'title' => 'Datenschutzfolgeabschätzung bearbeiten', + 'title' => $this->translator->trans(id: 'dataPrivacyFollowUpEstimation.edit', domain: 'vvt'), 'dsfa' => $dsfa, 'activ' => $dsfa->getActiv(), 'snack' => $request->get('snack') ]); } - /** - * @Route("/vvt/approve", name="vvt_approve") - */ - public function approveVvt(Request $request, SecurityService $securityService, ApproveService $approveService) + #[Route(path: '/vvt', name: 'vvt')] + public function index( + SecurityService $securityService, + Request $request, + CurrentTeamService $currentTeamService, + VVTRepository $vvtRepository, + ): Response { - $team = $this->getUser()->getAdminUser(); - $vvt = $this->getDoctrine()->getRepository(VVT::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($vvt, $team) === false) { - return $this->redirectToRoute('vvt'); - } - $approve = $approveService->approve($vvt, $this->getUser()); - if ($approve['clone'] === true) { - $newVvt = $this->getDoctrine()->getRepository(VVT::class)->find($approve['data']); - - $em = $this->getDoctrine()->getManager(); - if ($vvt->getActivDsfa()) { - $dsfa = $vvt->getActivDsfa(); - $newDsfa = clone $dsfa; - $newDsfa->setVvt($newVvt); - $newDsfa->setPrevious(null); - $em->persist($newDsfa); - } - foreach ($vvt->getPolicies() as $item) { - $item->addProcess($newVvt); - $em->persist($item); - } - foreach ($vvt->getSoftware() as $software) { - $software->addVvt($newVvt); - $em->persist($software); - } - - $em->persist($newVvt); - $em->flush(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + if ($securityService->teamCheck($team) === false) { + return $this->redirectToRoute('dashboard'); } + $vvt = $vvtRepository->findActiveByTeam($team); - return $this->redirectToRoute('vvt_edit', ['id' => $approve['data'], 'snack' => $approve['snack']]); - + return $this->render('vvt/index.html.twig', [ + 'vvt' => $vvt, + 'snack' => $request->get('snack'), + 'currentTeam' => $team, + ]); } - /** - * @Route("/vvt/clone", name="vvt_clone") - */ - public function cloneVvt(Request $request, SecurityService $securityService, VVTService $VVTService, ValidatorInterface $validator) + #[Route(path: '/vvt/dsfa/new', name: 'vvt_dsfa_new')] + public function newVvtDsfa( + ValidatorInterface $validator, + Request $request, + VVTService $VVTService, + SecurityService $securityService, + CurrentTeamService $currentTeamService, + VVTRepository $vvtRepository, + ): Response { - $vvt = $this->getDoctrine()->getRepository(VVT::class)->find($request->get('id')); - $team = $this->getUser()->getTeam(); + $team = $currentTeamService->getTeamFromSession($this->getUser()); + $vvt = $vvtRepository->find($request->get('vvt')); if ($securityService->teamDataCheck($vvt, $team) === false) { return $this->redirectToRoute('vvt'); } - $newVvt = $VVTService->cloneVvt($vvt, $this->getUser()); - $newVvt->setPrevious(null); - $newVvt->setApproved(null); - $newVvt->setApprovedBy(null); - - foreach ($newVvt->getDsfa() as $dsfa) { - $newVvt->removeDsfa($dsfa); - } - foreach ($newVvt->getPolicies() as $policy) { - $newVvt->removePolicy($policy); - } + $dsfa = $VVTService->newDsfa($team, $this->getUser(), $vvt); - $form = $VVTService->createForm($newVvt, $team); + $form = $this->createForm(VvtDsfaType::class, $dsfa); $form->handleRequest($request); $errors = array(); if ($form->isSubmitted() && $form->isValid()) { - $vvt = $form->getData(); - $errors = $validator->validate($vvt); + $dsfa = $form->getData(); + $errors = $validator->validate($dsfa); if (count($errors) == 0) { - $em = $this->getDoctrine()->getManager(); - $em->persist($vvt); - $em->flush(); - return $this->redirectToRoute('vvt'); + $this->em->persist($dsfa); + $this->em->flush(); + return $this->redirectToRoute( + 'vvt_edit', + [ + 'id' => $dsfa->getVvt()->getId(), + 'snack' => $this->translator->trans(id: 'dsfa.created', domain: 'vvt'), + ], + ); } } - return $this->render('vvt/new.html.twig', [ + return $this->render('vvt/editDsfa.html.twig', [ 'form' => $form->createView(), 'errors' => $errors, - 'title' => 'Verarbeitung erfassen', - 'activNummer' => true, - 'vvt' => $newVvt, - 'activ' => $newVvt->getActiv(), - 'CTA' => false, + 'title' => $this->translator->trans(id: 'dataPrivacyFollowUpEstimation.create', domain: 'vvt'), + 'dsfa' => $dsfa, + 'activ' => $dsfa->getActiv(), ]); } - - /** - * @Route("/vvt/disable", name="vvt_disable") - */ - public function disableVvt(Request $request, SecurityService $securityService, DisableService $disableService) - { - $team = $this->getUser()->getAdminUser(); - $vvt = $this->getDoctrine()->getRepository(VVT::class)->find($request->get('id')); - - if ($securityService->teamDataCheck($vvt, $team) === true && !$vvt->getApproved()) { - $disableService->disable($vvt, $this->getUser()); - } - - return $this->redirectToRoute('vvt'); - } } diff --git a/src/DataTypes/ParticipationStateTypes.php b/src/DataTypes/ParticipationStateTypes.php new file mode 100644 index 00000000..ef5a0ce4 --- /dev/null +++ b/src/DataTypes/ParticipationStateTypes.php @@ -0,0 +1,11 @@ +participations = new ArrayCollection(); + } public function getId(): ?int { @@ -196,4 +178,34 @@ public function setInvitation(bool $invitation): self return $this; } + + /** + * @return Collection + */ + public function getParticipations(): Collection + { + return $this->participations; + } + + public function addParticipation(Participation $participation): self + { + if (!$this->participations->contains($participation)) { + $this->participations->add($participation); + $participation->setAcademyBilling($this); + } + + return $this; + } + + public function removeParticipation(Participation $participation): self + { + if ($this->participations->removeElement($participation)) { + // set the owning side to null (unless already changed) + if ($participation->getAcademyBilling() === $this) { + $participation->setAcademyBilling(null); + } + } + + return $this; + } } diff --git a/src/Entity/AkademieKurse.php b/src/Entity/AkademieKurse.php index 722f63fe..1f7ae321 100644 --- a/src/Entity/AkademieKurse.php +++ b/src/Entity/AkademieKurse.php @@ -8,67 +8,49 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; -/** - * @ORM\Entity(repositoryClass=AkademieKurseRepository::class) - */ +#[ORM\Entity(repositoryClass: AkademieKurseRepository::class)] class AkademieKurse { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $createdAt; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $video; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $title; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $beschreibung; - /** - * @ORM\ManyToMany(targetEntity=Team::class, inversedBy="kurse") - */ + #[ORM\ManyToMany(targetEntity: Team::class, inversedBy: 'kurse')] private $team; - /** - * @ORM\OneToMany(targetEntity=AkademieBuchungen::class, mappedBy="kurs") - */ + #[ORM\OneToMany(targetEntity: AkademieBuchungen::class, mappedBy: 'kurs')] private $buchungen; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $activ; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="akademieKurses") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'akademieKurses')] + #[ORM\JoinColumn(nullable: false)] private $user; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $type; + #[ORM\ManyToOne(targetEntity: Questionnaire::class, inversedBy: 'academyLessons')] + #[ORM\JoinColumn(nullable: true)] + private ?Questionnaire $questionnaire; + public function __construct() { $this->team = new ArrayCollection(); @@ -220,4 +202,16 @@ public function setType(int $type): self return $this; } + + public function getQuestionnaire(): ?Questionnaire + { + return $this->questionnaire; + } + + public function setQuestionnaire(Questionnaire $questionnaire): self + { + $this->questionnaire = $questionnaire; + + return $this; + } } diff --git a/src/Entity/Answer.php b/src/Entity/Answer.php new file mode 100644 index 00000000..e5005a00 --- /dev/null +++ b/src/Entity/Answer.php @@ -0,0 +1,99 @@ +participationAnswers = new ArrayCollection(); + } + + public function getLabel(): string + { + return $this->label; + } + + public function setLabel(string $label): self + { + $this->label = $label; + return $this; + } + + public function isCorrect(): bool + { + return $this->isCorrect; + } + + public function setIsCorrect(bool $isCorrect): self + { + $this->isCorrect = $isCorrect; + + return $this; + } + + public function getQuestion(): Question + { + return $this->question; + } + + public function setQuestion(?Question $question): self + { + $this->question = $question; + + return $this; + } + + /** + * @return Collection + */ + public function getParticipationAnswers(): Collection + { + return $this->participationAnswers; + } + + public function addParticipationAnswer(ParticipationAnswer $participationAnswer): self + { + if (!$this->participationAnswers->contains($participationAnswer)) { + $this->participationAnswers->add($participationAnswer); + $participationAnswer->setAnswer($this); + } + + return $this; + } + + public function removeParticipationAnswer(ParticipationAnswer $participationAnswer): self + { + if ($this->participationAnswers->removeElement($participationAnswer)) { + // set the owning side to null (unless already changed) + if ($participationAnswer->getAnswer() === $this) { + $participationAnswer->setAnswer(null); + } + } + + return $this; + } +} \ No newline at end of file diff --git a/src/Entity/AuditTom.php b/src/Entity/AuditTom.php index 9d31877f..8119aa04 100644 --- a/src/Entity/AuditTom.php +++ b/src/Entity/AuditTom.php @@ -9,115 +9,91 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; -/** - * @ORM\Entity(repositoryClass=AuditTomRepository::class) - */ +#[ORM\Entity(repositoryClass: AuditTomRepository::class)] class AuditTom { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $frage; /** - * @ORM\Column(type="text") * @Encrypted() - * @Assert\NotBlank() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $bemerkung; /** - * @ORM\Column(type="text") * @Encrypted() - * @Assert\NotBlank() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $empfehlung; - /** - * @ORM\ManyToMany(targetEntity=AuditTomZiele::class) - * @Assert\NotBlank() - */ + #[ORM\ManyToMany(targetEntity: AuditTomZiele::class)] + #[Assert\NotBlank] private $ziele; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="auditToms") - * @ORM\JoinColumn(nullable=false) - * @Assert\NotBlank() - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'auditToms')] + #[ORM\JoinColumn(nullable: false)] + #[Assert\NotBlank] private $team; - /** - * @ORM\ManyToMany(targetEntity=AuditTomAbteilung::class) - * @Assert\NotBlank() - */ + #[ORM\ManyToMany(targetEntity: AuditTomAbteilung::class)] + #[Assert\NotBlank] private $abteilung; - /** - * @ORM\ManyToOne(targetEntity=AuditTomStatus::class, inversedBy="auditToms") - * @ORM\JoinColumn(nullable=true) - * @Assert\NotBlank() - */ + #[ORM\ManyToOne(targetEntity: AuditTomStatus::class, inversedBy: 'auditToms')] + #[ORM\JoinColumn(nullable: true)] + #[Assert\NotBlank] private $status; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; - /** - * @ORM\OneToOne(targetEntity=AuditTom::class, cascade={"persist", "remove"}) - */ + #[ORM\OneToOne(targetEntity: AuditTom::class, cascade: ['persist', 'remove'])] private $previous; - /** - * @ORM\Column(type="datetime") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'datetime')] + #[Assert\NotBlank] private $createdAt; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $nummer; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="auditToms") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'auditToms')] + #[ORM\JoinColumn(nullable: false)] private $user; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $tomAttribut; - /** - * @ORM\Column(type="integer", nullable=true) - */ + #[ORM\Column(type: 'integer', nullable: true)] private $tomZiel; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $kategorie; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="assignedAudits") - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'assignedAudits')] private $assignedUser; public function __construct() diff --git a/src/Entity/AuditTomAbteilung.php b/src/Entity/AuditTomAbteilung.php index 9319ed84..20d3afc6 100644 --- a/src/Entity/AuditTomAbteilung.php +++ b/src/Entity/AuditTomAbteilung.php @@ -7,37 +7,25 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=AuditTomAbteilungRepository::class) - */ +#[ORM\Entity(repositoryClass: AuditTomAbteilungRepository::class)] class AuditTomAbteilung { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: 'text')] private $name; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="abteilungen") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'abteilungen')] + #[ORM\JoinColumn(nullable: false)] private $team; - /** - * @ORM\OneToMany(targetEntity=VVT::class, mappedBy="abteilung") - */ + #[ORM\OneToMany(targetEntity: VVT::class, mappedBy: 'abteilung')] private $vVTs; public function __construct() diff --git a/src/Entity/AuditTomStatus.php b/src/Entity/AuditTomStatus.php index 721c899e..b84b82b5 100644 --- a/src/Entity/AuditTomStatus.php +++ b/src/Entity/AuditTomStatus.php @@ -7,31 +7,21 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=AuditTomStatusRepository::class) - */ +#[ORM\Entity(repositoryClass: AuditTomStatusRepository::class)] class AuditTomStatus { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: 'text')] private $name; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: 'text')] private $color; - /** - * @ORM\OneToMany(targetEntity=AuditTom::class, mappedBy="status") - */ + #[ORM\OneToMany(targetEntity: AuditTom::class, mappedBy: 'status')] private $auditToms; public function __construct() diff --git a/src/Entity/AuditTomZiele.php b/src/Entity/AuditTomZiele.php index a29da0a4..b9f52353 100644 --- a/src/Entity/AuditTomZiele.php +++ b/src/Entity/AuditTomZiele.php @@ -5,32 +5,22 @@ use App\Repository\AuditTomZieleRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=AuditTomZieleRepository::class) - */ +#[ORM\Entity(repositoryClass: AuditTomZieleRepository::class)] class AuditTomZiele { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: 'text')] private $name; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="ziele") - * @ORM\JoinColumn(nullable=true) - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'ziele')] + #[ORM\JoinColumn(nullable: true)] private $team; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; public function getId(): ?int diff --git a/src/Entity/ClientComment.php b/src/Entity/ClientComment.php index 40e78eb5..e9963cf2 100644 --- a/src/Entity/ClientComment.php +++ b/src/Entity/ClientComment.php @@ -7,45 +7,35 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; -/** - * @ORM\Entity(repositoryClass=ClientCommentRepository::class) - */ +#[ORM\Entity(repositoryClass: ClientCommentRepository::class)] class ClientComment { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $name; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $comment; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $createdAt; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $internal; - /** - * @ORM\ManyToOne(targetEntity=ClientRequest::class, inversedBy="clientComments") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: ClientRequest::class, inversedBy: 'clientComments')] + #[ORM\JoinColumn(nullable: false)] private $clientRequest; public function getId(): ?int diff --git a/src/Entity/ClientRequest.php b/src/Entity/ClientRequest.php index ac7ac588..aa5dee09 100644 --- a/src/Entity/ClientRequest.php +++ b/src/Entity/ClientRequest.php @@ -9,160 +9,114 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; -/** - * @ORM\Entity(repositoryClass=ClientRequestRepository::class) - */ +#[ORM\Entity(repositoryClass: ClientRequestRepository::class)] class ClientRequest { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $uuid; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $title; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $description; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $item; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $createdAt; - /** - * @ORM\Column(type="text") - * @Assert\Email() - */ + #[ORM\Column(type: 'text')] + #[Assert\Email] private $email; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $name; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="clientRequests") - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'clientRequests')] private $user; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="assignedRequests") - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'assignedRequests')] private $assignedUser; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $emailValid; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $token; - /** - * @ORM\Column(type="integer") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'integer')] + #[Assert\NotBlank] private $activ; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="clientRequests") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'clientRequests')] + #[ORM\JoinColumn(nullable: false)] private $team; - /** - * @ORM\OneToMany(targetEntity=ClientComment::class, mappedBy="clientRequest") - */ + #[ORM\OneToMany(targetEntity: ClientComment::class, mappedBy: 'clientRequest')] private $clientComments; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $validUser; - /** - * @ORM\ManyToOne(targetEntity=User::class) - */ + #[ORM\ManyToOne(targetEntity: User::class)] private $userValidBy; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $gdpr; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $notes; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $pgp; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $password; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $open; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $firstname; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $lastname; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $street; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $city; - /** - * @ORM\Column(type="date", nullable=true) - */ + #[ORM\Column(type: 'date', nullable: true)] private $birthday; public function __construct() diff --git a/src/Entity/Datenweitergabe.php b/src/Entity/Datenweitergabe.php index 5eb820f8..566314b8 100644 --- a/src/Entity/Datenweitergabe.php +++ b/src/Entity/Datenweitergabe.php @@ -12,116 +12,94 @@ use Vich\UploaderBundle\Mapping\Annotation as Vich; /** - * @ORM\Entity(repositoryClass=DatenweitergabeRepository::class) * @Vich\Uploadable */ +#[ORM\Entity(repositoryClass: DatenweitergabeRepository::class)] class Datenweitergabe { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $gegenstand; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $verantwortlich; - /** - * @ORM\ManyToOne(targetEntity=Kontakte::class, inversedBy="datenweitergaben") - * @ORM\JoinColumn(nullable=false) - * @Assert\NotBlank() - */ + #[ORM\ManyToOne(targetEntity: Kontakte::class, inversedBy: 'datenweitergaben')] + #[ORM\JoinColumn(nullable: false)] + #[Assert\NotBlank] private $kontakt; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $vertragsform; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $createdAt; - /** - * @ORM\Column(type="date", nullable=true) - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'date', nullable: true)] + #[Assert\NotBlank] private $zeichnungsdatum; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="datenweitergaben") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'datenweitergaben')] + #[ORM\JoinColumn(nullable: false)] private $team; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $activ; - /** - * @ORM\OneToOne(targetEntity=Datenweitergabe::class, cascade={"persist", "remove"}) - */ + #[ORM\OneToOne(targetEntity: Datenweitergabe::class, cascade: ['persist', 'remove'])] private $previous; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $nummer; - /** - * @ORM\ManyToOne(targetEntity=DatenweitergabeStand::class) - * @ORM\JoinColumn(nullable=false) - * @Assert\NotBlank() - */ + #[ORM\ManyToOne(targetEntity: DatenweitergabeStand::class)] + #[ORM\JoinColumn(nullable: false)] + #[Assert\NotBlank] private $stand; - /** - * @ORM\ManyToOne(targetEntity=DatenweitergabeGrundlagen::class) - * @ORM\JoinColumn(nullable=false) - * @Assert\NotBlank() - */ + #[ORM\ManyToOne(targetEntity: DatenweitergabeGrundlagen::class)] + #[ORM\JoinColumn(nullable: false)] + #[Assert\NotBlank] private $grundlage; - /** - * @ORM\Column(type="integer") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'integer')] + #[Assert\NotBlank] private $art; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="datenweitergabes") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'datenweitergabes')] + #[ORM\JoinColumn(nullable: false)] private $user; /** - * @ORM\Column(type="datetime", nullable=true) * @var \DateTime */ + #[ORM\Column(type: 'datetime', nullable: true)] private $updatedAt; /** - * @ORM\Column(type="string", length=255,nullable=true) * @var string */ + #[ORM\Column(type: 'string', length: 255, nullable: true)] private $upload; /** @@ -130,99 +108,61 @@ class Datenweitergabe */ private $uploadFile; - /** - * @ORM\ManyToMany(targetEntity=VVT::class, mappedBy="datenweitergaben") - */ + #[ORM\ManyToMany(targetEntity: VVT::class, mappedBy: 'datenweitergaben')] private $verfahren; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="assignedDatenweitergaben") - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'assignedDatenweitergaben')] private $assignedUser; - /** - * @ORM\ManyToMany(targetEntity=Software::class, mappedBy="datenweitergabe") - */ + #[ORM\ManyToMany(targetEntity: Software::class, mappedBy: 'datenweitergabe')] private $software; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $reference; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $approved; - /** - * @ORM\ManyToOne(targetEntity=User::class) - */ + #[ORM\ManyToOne(targetEntity: User::class)] private $approvedBy; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $notes; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $checkItems; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $checkPeople; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $checkData; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $checkDocumentation; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $checkTrust; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $checkTom; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $checkSubcontractor; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $checkSupport; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $checkSupport3236; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $checkEnding; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $checkAudit; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $checkNotes; public function __construct() diff --git a/src/Entity/DatenweitergabeGrundlagen.php b/src/Entity/DatenweitergabeGrundlagen.php index 625d49ab..0d6c762d 100644 --- a/src/Entity/DatenweitergabeGrundlagen.php +++ b/src/Entity/DatenweitergabeGrundlagen.php @@ -5,31 +5,21 @@ use App\Repository\DatenweitergabeGrundlagenRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=DatenweitergabeGrundlagenRepository::class) - */ +#[ORM\Entity(repositoryClass: DatenweitergabeGrundlagenRepository::class)] class DatenweitergabeGrundlagen { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: 'text')] private $name; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="datenweitergabeGrundlagens") - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'datenweitergabeGrundlagens')] private $team; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ = true; public function getId(): ?int diff --git a/src/Entity/DatenweitergabeStand.php b/src/Entity/DatenweitergabeStand.php index b40a4da9..19cd2e18 100644 --- a/src/Entity/DatenweitergabeStand.php +++ b/src/Entity/DatenweitergabeStand.php @@ -5,36 +5,24 @@ use App\Repository\DatenweitergabeStandRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=DatenweitergabeStandRepository::class) - */ +#[ORM\Entity(repositoryClass: DatenweitergabeStandRepository::class)] class DatenweitergabeStand { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: 'text')] private $name; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $network; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="datenweitergabeStands") - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'datenweitergabeStands')] private $team; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; public function getId(): ?int diff --git a/src/Entity/Forms.php b/src/Entity/Forms.php index be9425a6..f9813676 100644 --- a/src/Entity/Forms.php +++ b/src/Entity/Forms.php @@ -12,28 +12,26 @@ use Vich\UploaderBundle\Mapping\Annotation as Vich; /** - * @ORM\Entity(repositoryClass=FormsRepository::class) * @Vich\Uploadable */ +#[ORM\Entity(repositoryClass: FormsRepository::class)] class Forms { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; /** - * @ORM\Column(type="datetime", nullable=true) * @var \DateTime */ + #[ORM\Column(type: 'datetime', nullable: true)] private $updatedAt; /** - * @ORM\Column(type="string", length=255,nullable=true) * @var string */ + #[ORM\Column(type: 'string', length: 255, nullable: true)] private $upload; /** @@ -42,81 +40,59 @@ class Forms */ private $uploadFile; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="forms") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'forms')] + #[ORM\JoinColumn(nullable: false)] private $team; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $createdAt; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $title; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $version; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $activ; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="forms") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'forms')] + #[ORM\JoinColumn(nullable: false)] private $user; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $description; - /** - * @ORM\OneToOne(targetEntity=Forms::class, cascade={"persist", "remove"}) - */ + #[ORM\OneToOne(targetEntity: Forms::class, cascade: ['persist', 'remove'])] private $previous; - /** - * @ORM\ManyToMany(targetEntity=Produkte::class) - */ + #[ORM\ManyToMany(targetEntity: Produkte::class)] private $products; - /** - * @ORM\ManyToMany(targetEntity=AuditTomAbteilung::class) - */ + #[ORM\ManyToMany(targetEntity: AuditTomAbteilung::class)] private $departments; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $status; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="assignedForms") - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'assignedForms')] private $assignedUser; - /** - * @ORM\ManyToOne(targetEntity=User::class) - */ + #[ORM\ManyToOne(targetEntity: User::class)] private $approvedBy; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $approved; public function __construct() diff --git a/src/Entity/Kontakte.php b/src/Entity/Kontakte.php index 73340eaf..1f29c928 100644 --- a/src/Entity/Kontakte.php +++ b/src/Entity/Kontakte.php @@ -8,110 +8,72 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; -/** - * @ORM\Entity(repositoryClass=KontakteRepository::class) - */ +#[ORM\Entity(repositoryClass: KontakteRepository::class)] class Kontakte { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text", nullable=true) - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text', nullable: true)] + #[Assert\NotBlank] private $firma; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $anrede; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $vorname; - /** - * @ORM\Column(type="text", nullable=true) - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text', nullable: true)] + #[Assert\NotBlank] private $nachname; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $strase; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $plz; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $ort; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $email; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $telefon; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $bemerkung; - /** - * @ORM\Column(type="integer") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'integer')] + #[Assert\NotBlank] private $art; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="kontakte") - * @ORM\JoinColumn(nullable=false) - * @Assert\NotBlank() - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'kontakte')] + #[ORM\JoinColumn(nullable: false)] + #[Assert\NotBlank] private $team; - /** - * @ORM\Column(type="integer") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'integer')] + #[Assert\NotBlank] private $activ; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $nummer; - /** - * @ORM\OneToMany(targetEntity=Datenweitergabe::class, mappedBy="kontakt") - */ + #[ORM\OneToMany(targetEntity: Datenweitergabe::class, mappedBy: 'kontakt')] private $datenweitergaben; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $approved; - /** - * @ORM\ManyToOne(targetEntity=User::class) - */ + #[ORM\ManyToOne(targetEntity: User::class)] private $approvedBy; public function __construct() @@ -346,4 +308,9 @@ public function setApprovedBy(?User $approvedBy): self return $this; } + + public function getName(): string + { + return $this->firma ?? $this->getVorname() . $this->getNachname(); + } } diff --git a/src/Entity/Loeschkonzept.php b/src/Entity/Loeschkonzept.php index 848a7282..db0f2303 100644 --- a/src/Entity/Loeschkonzept.php +++ b/src/Entity/Loeschkonzept.php @@ -14,86 +14,56 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; -/** - * @ORM\Entity(repositoryClass=LoeschkonzeptRepository::class) - */ +#[ORM\Entity(repositoryClass: LoeschkonzeptRepository::class)] class Loeschkonzept { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text", length=255) - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text', length: 255)] + #[Assert\NotBlank] private $standartlf; - /** - * @ORM\Column(type="text", length=255, nullable=true) - */ + #[ORM\Column(type: 'text', length: 255, nullable: true)] private $loeschfrist; - /** - * @ORM\Column(type="text", length=511) - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text', length: 511)] + #[Assert\NotBlank] private $speicherorte; - /** - * @ORM\Column(type="text", length=255) - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text', length: 255)] + #[Assert\NotBlank] private $loeschbeauftragter; - /** - * @ORM\Column(type="text", length=1023, nullable=true) - */ + #[ORM\Column(type: 'text', length: 1023, nullable: true)] private $beschreibung; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="loeschkonzepts") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'loeschkonzepts')] + #[ORM\JoinColumn(nullable: false)] private $team; - /** - * @ORM\OneToOne(targetEntity=Loeschkonzept::class, cascade={"persist", "remove"}) - */ + #[ORM\OneToOne(targetEntity: Loeschkonzept::class, cascade: ['persist', 'remove'])] private $previous; - /** - * @ORM\Column(type="datetime_immutable") - */ + #[ORM\Column(type: 'datetime_immutable')] private $CreateAt; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="loeschkonzepts") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'loeschkonzepts')] + #[ORM\JoinColumn(nullable: false)] private $user; - /** - * @ORM\ManyToMany(targetEntity=VVTDatenkategorie::class, inversedBy="loeschkonzept") - */ + #[ORM\ManyToMany(targetEntity: VVTDatenkategorie::class, inversedBy: 'loeschkonzept')] private $vvtdatenkategories; - /** - * @ORM\ManyToOne(targetEntity=Loeschkonzept::class, inversedBy="parentOf") - */ + #[ORM\ManyToOne(targetEntity: Loeschkonzept::class, inversedBy: 'parentOf')] private $cloneOf; - /** - * @ORM\OneToMany(targetEntity=Loeschkonzept::class, mappedBy="cloneOf") - */ + #[ORM\OneToMany(targetEntity: Loeschkonzept::class, mappedBy: 'cloneOf')] private $parentOf; public function __construct() @@ -102,7 +72,7 @@ public function __construct() $this->parentOf = new ArrayCollection(); } - public function __toString(): ?string + public function __toString(): string { return $this->standartlf; } diff --git a/src/Entity/Participation.php b/src/Entity/Participation.php new file mode 100644 index 00000000..eba51928 --- /dev/null +++ b/src/Entity/Participation.php @@ -0,0 +1,130 @@ +participationAnswers = new ArrayCollection(); + } + + public function getCompletedAt(): ?DateTimeImmutable + { + return $this->completedAt; + } + + public function setCompletedAt(?DateTimeImmutable $completedAt): self + { + $this->completedAt = $completedAt; + + return $this; + } + + public function getState(): ?string + { + return $this->state; + } + + public function setState(string $state): self + { + $this->state = $state; + + return $this; + } + + public function isPassed(): ?bool + { + return $this->passed; + } + + public function setPassed(bool $passed): self + { + $this->passed = $passed; + + return $this; + } + + public function getAcademyBilling(): ?AkademieBuchungen + { + return $this->academyBilling; + } + + public function setAcademyBilling(?AkademieBuchungen $academyBilling): self + { + $this->academyBilling = $academyBilling; + + return $this; + } + + public function getQuestionnaire(): Questionnaire + { + return $this->questionnaire; + } + + public function setQuestionnaire(Questionnaire $questionnaire): self + { + $this->questionnaire = $questionnaire; + + return $this; + } + + /** + * @return Collection + */ + public function getParticipationAnswers(): Collection + { + return $this->participationAnswers; + } + + public function addParticipationAnswer(ParticipationAnswer $participationAnswer): self + { + if (!$this->participationAnswers->contains($participationAnswer)) { + $this->participationAnswers->add($participationAnswer); + $participationAnswer->setParticipation($this); + } + + return $this; + } + + public function removeParticipationAnswer(ParticipationAnswer $participationAnswer): self + { + if ($this->participationAnswers->removeElement($participationAnswer)) { + // set the owning side to null (unless already changed) + if ($participationAnswer->getParticipation() === $this) { + $participationAnswer->setParticipation(null); + } + } + + return $this; + } +} diff --git a/src/Entity/ParticipationAnswer.php b/src/Entity/ParticipationAnswer.php new file mode 100644 index 00000000..abfc7545 --- /dev/null +++ b/src/Entity/ParticipationAnswer.php @@ -0,0 +1,76 @@ +participation; + } + + public function setParticipation(?Participation $participation): self + { + $this->participation = $participation; + + return $this; + } + + public function getQuestionnaire(): ?Questionnaire + { + return $this->questionnaire; + } + + public function setQuestionnaire(?Questionnaire $questionnaire): self + { + $this->questionnaire = $questionnaire; + + return $this; + } + + public function getQuestion(): ?Question + { + return $this->question; + } + + public function setQuestion(?Question $question): self + { + $this->question = $question; + + return $this; + } + + public function getAnswer(): ?Answer + { + return $this->answer; + } + + public function setAnswer(?Answer $answer): self + { + $this->answer = $answer; + + return $this; + } +} diff --git a/src/Entity/Policies.php b/src/Entity/Policies.php index 64e7d486..8d8e8722 100644 --- a/src/Entity/Policies.php +++ b/src/Entity/Policies.php @@ -12,138 +12,106 @@ use Vich\UploaderBundle\Mapping\Annotation as Vich; /** - * @ORM\Entity(repositoryClass=PoliciesRepository::class) * @Vich\Uploadable */ +#[ORM\Entity(repositoryClass: PoliciesRepository::class)] class Policies { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="policies") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'policies')] + #[ORM\JoinColumn(nullable: false)] private $team; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="policies") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'policies')] + #[ORM\JoinColumn(nullable: false)] private $user; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $createdAt; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $activ; - /** - * @ORM\OneToOne(targetEntity=Policies::class, cascade={"persist", "remove"}) - */ + #[ORM\OneToOne(targetEntity: Policies::class, cascade: ['persist', 'remove'])] private $previous; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $scope; - /** - * @ORM\ManyToMany(targetEntity=VVT::class, inversedBy="policies") - * @Assert\NotBlank() - */ + #[ORM\ManyToMany(targetEntity: VVT::class, inversedBy: 'policies')] + #[Assert\NotBlank] private $processes; - /** - * @ORM\ManyToMany(targetEntity=VVTPersonen::class) - * @Assert\NotBlank() - */ + #[ORM\ManyToMany(targetEntity: VVTPersonen::class)] + #[Assert\NotBlank] private $people; - /** - * @ORM\ManyToMany(targetEntity=VVTDatenkategorie::class) - * @Assert\NotBlank() - */ + #[ORM\ManyToMany(targetEntity: VVTDatenkategorie::class)] + #[Assert\NotBlank] private $categories; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $risk; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $foundation; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="policiesResponsible") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'policiesResponsible')] + #[ORM\JoinColumn(nullable: false)] private $person; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $protection; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $notes; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $consequences; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $contact; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $status; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="assignedPolicies") - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'assignedPolicies')] private $assignedUser; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $title; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $reference; /** - * @ORM\Column(type="string", length=255,nullable=true) * @var string */ + #[ORM\Column(type: 'string', length: 255, nullable: true)] private $upload; /** @@ -152,14 +120,10 @@ class Policies */ private $uploadFile; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $approved; - /** - * @ORM\ManyToOne(targetEntity=User::class) - */ + #[ORM\ManyToOne(targetEntity: User::class)] private $approvedBy; public function __construct() diff --git a/src/Entity/Produkte.php b/src/Entity/Produkte.php index 41eb704c..6116963f 100644 --- a/src/Entity/Produkte.php +++ b/src/Entity/Produkte.php @@ -7,37 +7,25 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=ProdukteRepository::class) - */ +#[ORM\Entity(repositoryClass: ProdukteRepository::class)] class Produkte { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: 'text')] private $name; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="produktes") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'produktes')] + #[ORM\JoinColumn(nullable: false)] private $team; - /** - * @ORM\ManyToMany(targetEntity=VVT::class, mappedBy="produkt") - */ + #[ORM\ManyToMany(targetEntity: VVT::class, mappedBy: 'produkt')] private $Vvts; public function __construct() diff --git a/src/Entity/Question.php b/src/Entity/Question.php new file mode 100644 index 00000000..06c05dac --- /dev/null +++ b/src/Entity/Question.php @@ -0,0 +1,174 @@ +answers = new ArrayCollection(); + $this->questionnaireQuestions = new ArrayCollection(); + $this->participationAnswers = new ArrayCollection(); + } + + public function getLabel(): string + { + return $this->label; + } + + public function setLabel(string $label): self + { + $this->label = $label; + return $this; + } + + public function getHint(): ?string + { + return $this->hint; + } + + public function setHint(string $hint): self + { + $this->hint = $hint; + return $this; + } + + public function getType(): string + { + return $this->type; + } + + public function setType(string $type): self + { + $this->type = $type; + return $this; + } + + public function getEvalValue(): float + { + return $this->evalValue; + } + + public function setEvalValue(float $evalValue): self + { + $this->evalValue = $evalValue; + return $this; + } + + public function getAnswers(): Collection + { + return $this->answers; + } + + public function addAnswer(Answer $answer): self + { + if(!$this->answers->contains($answer)){ + $this->answers->add($answer); + $answer->setQuestion($this); + } + + return $this; + } + + public function removeAnswer(Answer $answer): self + { + if($this->answers->removeElement($answer)){ + if($answer->getQuestion() === $this){ + $answer->setQuestion(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getQuestionnaireQuestions(): Collection + { + return $this->questionnaireQuestions; + } + + public function addQuestionnaireQuestion(QuestionnaireQuestion $questionnaireQuestion): self + { + if (!$this->questionnaireQuestions->contains($questionnaireQuestion)) { + $this->questionnaireQuestions->add($questionnaireQuestion); + $questionnaireQuestion->setQuestion($this); + } + + return $this; + } + + public function removeQuestionnaireQuestion(QuestionnaireQuestion $questionnaireQuestion): self + { + if ($this->questionnaireQuestions->removeElement($questionnaireQuestion)) { + // set the owning side to null (unless already changed) + if ($questionnaireQuestion->getQuestion() === $this) { + $questionnaireQuestion->setQuestion(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getParticipationAnswers(): Collection + { + return $this->participationAnswers; + } + + public function addParticipationAnswer(ParticipationAnswer $participationAnswer): self + { + if (!$this->participationAnswers->contains($participationAnswer)) { + $this->participationAnswers->add($participationAnswer); + $participationAnswer->setQuestion($this); + } + + return $this; + } + + public function removeParticipationAnswer(ParticipationAnswer $participationAnswer): self + { + if ($this->participationAnswers->removeElement($participationAnswer)) { + // set the owning side to null (unless already changed) + if ($participationAnswer->getQuestion() === $this) { + $participationAnswer->setQuestion(null); + } + } + + return $this; + } +} \ No newline at end of file diff --git a/src/Entity/Questionnaire.php b/src/Entity/Questionnaire.php new file mode 100644 index 00000000..1c916cee --- /dev/null +++ b/src/Entity/Questionnaire.php @@ -0,0 +1,179 @@ +questionnaireQuestions = new ArrayCollection(); + $this->participationAnswers = new ArrayCollection(); + $this->academyLessons = new ArrayCollection(); + } + + public function getLabel(): ?string + { + return $this->label; + } + + public function setLabel(string $label): self + { + $this->label = $label; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(string $description): self + { + $this->description = $description; + + return $this; + } + + public function getPercentageToPass(): ?float + { + return $this->percentageToPass; + } + + public function setPercentageToPass(float $percentageToPass): self + { + $this->percentageToPass = $percentageToPass; + + return $this; + } + + /** + * @return Collection + */ + public function getQuestionnaireQuestions(): Collection + { + return $this->questionnaireQuestions; + } + + public function addQuestionnaireQuestion(QuestionnaireQuestion $questionnaireQuestion): self + { + if (!$this->questionnaireQuestions->contains($questionnaireQuestion)) { + $this->questionnaireQuestions->add($questionnaireQuestion); + $questionnaireQuestion->setQuestionnaire($this); + } + + return $this; + } + + public function removeQuestionnaireQuestion(QuestionnaireQuestion $questionnaireQuestion): self + { + if ($this->questionnaireQuestions->removeElement($questionnaireQuestion)) { + // set the owning side to null (unless already changed) + if ($questionnaireQuestion->getQuestionnaire() === $this) { + $questionnaireQuestion->setQuestionnaire(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getParticipationAnswers(): Collection + { + return $this->participationAnswers; + } + + public function addParticipationAnswer(ParticipationAnswer $participationAnswer): self + { + if (!$this->participationAnswers->contains($participationAnswer)) { + $this->participationAnswers->add($participationAnswer); + $participationAnswer->setQuestionnaire($this); + } + + return $this; + } + + public function removeParticipationAnswer(ParticipationAnswer $participationAnswer): self + { + if ($this->participationAnswers->removeElement($participationAnswer)) { + // set the owning side to null (unless already changed) + if ($participationAnswer->getQuestionnaire() === $this) { + $participationAnswer->setQuestionnaire(null); + } + } + + return $this; + } + + public function getAcademyLessons(): Collection + { + return $this->academyLessons; + } + + public function addAcademyLesson(AkademieKurse $academyLesson): self + { + if (!$this->academyLessons->contains($academyLesson)) { + $this->academyLessons->add($academyLesson); + $academyLesson->setQuestionnaire($this); + } + + return $this; + } + + public function removeAcademyLesson(AkademieKurse $academyLesson): self + { + if ($this->academyLessons->removeElement($academyLesson)) { + // set the owning side to null (unless already changed) + if ($academyLesson->getQuestionnaire() === $this) { + $academyLesson->setQuestionnaire(null); + } + } + + return $this; + } + + public function setTeam(Team $team): self + { + $this->team = $team; + + return $this; + } + + public function getTeam(): Team + { + return $this->team; + } +} diff --git a/src/Entity/QuestionnaireQuestion.php b/src/Entity/QuestionnaireQuestion.php new file mode 100644 index 00000000..81843051 --- /dev/null +++ b/src/Entity/QuestionnaireQuestion.php @@ -0,0 +1,59 @@ +step; + } + + public function setStep(int $step): self + { + $this->step = $step; + + return $this; + } + + public function getQuestion(): ?Question + { + return $this->question; + } + + public function setQuestion(?Question $question): self + { + $this->question = $question; + + return $this; + } + + public function getQuestionnaire(): ?Questionnaire + { + return $this->questionnaire; + } + + public function setQuestionnaire(?Questionnaire $questionnaire): self + { + $this->questionnaire = $questionnaire; + + return $this; + } +} diff --git a/src/Entity/Report.php b/src/Entity/Report.php index 332a15e9..b61b8a03 100644 --- a/src/Entity/Report.php +++ b/src/Entity/Report.php @@ -5,78 +5,50 @@ use App\Repository\ReportRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=ReportRepository::class) - */ +#[ORM\Entity(repositoryClass: ReportRepository::class)] class Report { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\ManyToOne(targetEntity=User::class) - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class)] + #[ORM\JoinColumn(nullable: false)] private $user; - /** - * @ORM\Column(type="date") - */ + #[ORM\Column(type: 'date')] private $date; - /** - * @ORM\Column(type="time") - */ + #[ORM\Column(type: 'time')] private $start; - /** - * @ORM\Column(type="time") - */ + #[ORM\Column(type: 'time')] private $end; - /** - * @ORM\Column(type="float") - */ + #[ORM\Column(type: 'float')] private $calcTime; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: 'text')] private $description; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $invoice; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $onsite; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $inReport; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $activ; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="reports") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'reports')] + #[ORM\JoinColumn(nullable: false)] private $team; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $createdAt; public function getId(): ?int diff --git a/src/Entity/Settings.php b/src/Entity/Settings.php new file mode 100644 index 00000000..2e9ed943 --- /dev/null +++ b/src/Entity/Settings.php @@ -0,0 +1,33 @@ +useKeycloakGroups; + } + + public function setUseKeycloakGroups(?bool $useKeycloakGroups): self + { + $this->useKeycloakGroups = $useKeycloakGroups; + + return $this; + } +} diff --git a/src/Entity/Software.php b/src/Entity/Software.php index f38246c0..de2c2778 100644 --- a/src/Entity/Software.php +++ b/src/Entity/Software.php @@ -9,153 +9,111 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; -/** - * @ORM\Entity(repositoryClass=SoftwareRepository::class) - */ +#[ORM\Entity(repositoryClass: SoftwareRepository::class)] class Software { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $name; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $build; - /** - * @ORM\Column(type="date") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'date')] + #[Assert\NotBlank] private $purchase; - /** - * @ORM\ManyToMany(targetEntity=VVT::class, inversedBy="software") - */ + #[ORM\ManyToMany(targetEntity: VVT::class, inversedBy: 'software')] private $vvts; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $license; - /** - * @ORM\Column(type="date", nullable=true) - */ + #[ORM\Column(type: 'date', nullable: true)] private $licenseExpiration; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $description; - /** - * @ORM\Column(type="integer", nullable=true) - */ + #[ORM\Column(type: 'integer', nullable: true)] private $status; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="software") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'software')] + #[ORM\JoinColumn(nullable: false)] private $user; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="software") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'software')] + #[ORM\JoinColumn(nullable: false)] private $team; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $createdAt; - /** - * @ORM\OneToOne(targetEntity=Software::class, cascade={"persist", "remove"}) - */ + #[ORM\OneToOne(targetEntity: Software::class, cascade: ['persist', 'remove'])] private $previous; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="assignedSoftware") - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'assignedSoftware')] private $assignedUser; - /** - * @ORM\OneToMany(targetEntity=SoftwareConfig::class, mappedBy="software") - */ + #[ORM\OneToMany(targetEntity: SoftwareConfig::class, mappedBy: 'software')] private $config; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $location; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $nummer; - /** - * @ORM\ManyToMany(targetEntity=Datenweitergabe::class, inversedBy="software") - */ + #[ORM\ManyToMany(targetEntity: Datenweitergabe::class, inversedBy: 'software')] private $datenweitergabe; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $reference; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $approved; - /** - * @ORM\ManyToOne(targetEntity=User::class) - */ + #[ORM\ManyToOne(targetEntity: User::class)] private $approvedBy; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $archiving; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $recovery; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $permissions; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $licenseType; public function __construct() diff --git a/src/Entity/SoftwareConfig.php b/src/Entity/SoftwareConfig.php index 5fe3f0ff..0ffb1e45 100644 --- a/src/Entity/SoftwareConfig.php +++ b/src/Entity/SoftwareConfig.php @@ -10,64 +10,52 @@ use Vich\UploaderBundle\Mapping\Annotation as Vich; /** - * @ORM\Entity(repositoryClass=SoftwareConfigRepository::class) * @Vich\Uploadable */ +#[ORM\Entity(repositoryClass: SoftwareConfigRepository::class)] class SoftwareConfig { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; /** - * @ORM\Column(type="text") * @Encrypted() - * @Assert\NotBlank() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $name; /** - * @ORM\Column(type="text") * @Encrypted() - * @Assert\NotBlank() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $config; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $createdAt; - /** - * @ORM\ManyToOne(targetEntity=Software::class, inversedBy="config") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Software::class, inversedBy: 'config')] + #[ORM\JoinColumn(nullable: false)] private $software; /** - * @ORM\Column(type="string", length=255,nullable=true) * @var string */ + #[ORM\Column(type: 'string', length: 255, nullable: true)] private $upload; /** - * @Assert\File( - * maxSize = "600k", - * mimeTypes = {"image/jpg", "image/jpeg", "image/gif", "image/png"}, - * mimeTypesMessage = "Please upload a valid JP, JPEG, GIF or PNG" - * ) * * @Vich\UploadableField(mapping="software", fileNameProperty="upload") * @var File */ + #[Assert\File(maxSize: '600k', mimeTypes: ['image/jpg', 'image/jpeg', 'image/gif', 'image/png'], mimeTypesMessage: 'Please upload a valid JP, JPEG, GIF or PNG')] private $uploadFile; diff --git a/src/Entity/Task.php b/src/Entity/Task.php index 05dc030c..bc306165 100644 --- a/src/Entity/Task.php +++ b/src/Entity/Task.php @@ -6,78 +6,54 @@ use App\Repository\TaskRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=TaskRepository::class) - */ +#[ORM\Entity(repositoryClass: TaskRepository::class)] class Task { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $activ; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="tasks") - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'tasks')] private $assignedUser; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $createdAt; /** - * @ORM\Column(type="text") * @Encrypted() */ + #[ORM\Column(type: 'text')] private $task; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $done; /** - * @ORM\Column(type="text") * @Encrypted() */ + #[ORM\Column(type: 'text')] private $title; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="tasks") - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'tasks')] private $team; - /** - * @ORM\ManyToOne(targetEntity=User::class) - */ + #[ORM\ManyToOne(targetEntity: User::class)] private $user; - /** - * @ORM\Column(type="date", nullable=true) - */ + #[ORM\Column(type: 'date', nullable: true)] private $endDate; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $prio; - /** - * @ORM\Column(type="date", nullable=true) - */ + #[ORM\Column(type: 'date', nullable: true)] private $doneDate; - /** - * @ORM\ManyToOne(targetEntity=User::class) - */ + #[ORM\ManyToOne(targetEntity: User::class)] private $updatedBy; public function getId(): ?int diff --git a/src/Entity/Team.php b/src/Entity/Team.php index 4bd4f4a9..27c15816 100644 --- a/src/Entity/Team.php +++ b/src/Entity/Team.php @@ -16,248 +16,166 @@ use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Validator\Constraints as Assert; -/** - * @ORM\Entity(repositoryClass=TeamRepository::class) - * @UniqueEntity("slug") - */ +#[ORM\Entity(repositoryClass: TeamRepository::class)] +#[UniqueEntity('slug')] class Team { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'string', length: 255, unique: true)] + #[Assert\NotBlank] private $name; - /** - * @ORM\Column(type="boolean") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text', nullable: true)] + private $keycloakGroup; + + #[ORM\Column(type: 'boolean')] + #[Assert\NotBlank] private $activ; - /** - * @ORM\OneToMany(targetEntity=User::class, mappedBy="team") - */ + #[ORM\ManyToMany(targetEntity: User::class, mappedBy: 'teams')] private $members; - /** - * @ORM\OneToMany(targetEntity=AuditTomZiele::class, mappedBy="team") - */ - private $ziele; + #[ORM\OneToMany(targetEntity: AuditTomZiele::class, mappedBy: 'team')] + private Collection $ziele; - /** - * @ORM\OneToMany(targetEntity=AuditTomAbteilung::class, mappedBy="team") - */ - private $abteilungen; + #[ORM\OneToMany(targetEntity: AuditTomAbteilung::class, mappedBy: 'team')] + private Collection $abteilungen; - /** - * @ORM\OneToMany(targetEntity=AuditTom::class, mappedBy="team") - */ - private $auditToms; + #[ORM\OneToMany(targetEntity: AuditTom::class, mappedBy: 'team')] + private Collection $auditToms; - /** - * @ORM\OneToMany(targetEntity=Kontakte::class, mappedBy="team", orphanRemoval=true) - */ - private $kontakte; + #[ORM\OneToMany(targetEntity: Kontakte::class, mappedBy: 'team', orphanRemoval: true)] + private Collection $kontakte; - /** - * @ORM\OneToMany(targetEntity=VVT::class, mappedBy="team") - */ - private $vvts; + #[ORM\OneToMany(targetEntity: VVT::class, mappedBy: 'team')] + private Collection $vvts; - /** - * @ORM\OneToMany(targetEntity=Datenweitergabe::class, mappedBy="team") - */ - private $datenweitergaben; + #[ORM\OneToMany(targetEntity: Datenweitergabe::class, mappedBy: 'team')] + private Collection $datenweitergaben; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $strasse; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $plz; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $stadt; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $email; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $telefon; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $dsb; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $ceo; - /** - * @ORM\Column(type="datetime", nullable=true) - */ + #[ORM\Column(type: 'datetime', nullable: true)] private $clonedAt; - /** - * @ORM\ManyToMany(targetEntity=AkademieKurse::class, mappedBy="team") - */ + #[ORM\ManyToMany(targetEntity: AkademieKurse::class, mappedBy: 'team')] private $kurse; - /** - * @ORM\OneToMany(targetEntity=User::class, mappedBy="akademieUser") - */ - private $akademieUsers; + #[ORM\OneToMany(targetEntity: User::class, mappedBy: 'akademieUser')] + private Collection $akademieUsers; - /** - * @ORM\OneToMany(targetEntity=User::class, mappedBy="adminUser") - */ + #[ORM\JoinTable(name: 'team_admin')] + #[ORM\ManyToMany(targetEntity: User::class, inversedBy: 'adminRoles')] private $admins; - /** - * @ORM\OneToMany(targetEntity=Tom::class, mappedBy="team") - */ - private $toms; + #[ORM\OneToMany(targetEntity: Tom::class, mappedBy: 'team')] + private Collection $toms; - /** - * @ORM\OneToMany(targetEntity=Vorfall::class, mappedBy="team") - */ - private $vorfalls; + #[ORM\OneToMany(targetEntity: Vorfall::class, mappedBy: 'team')] + private Collection $vorfalls; - /** - * @ORM\OneToMany(targetEntity=Produkte::class, mappedBy="team") - */ - private $produktes; + #[ORM\OneToMany(targetEntity: Produkte::class, mappedBy: 'team')] + private Collection $produktes; - /** - * @ORM\OneToMany(targetEntity=Forms::class, mappedBy="team") - */ - private $forms; + #[ORM\OneToMany(targetEntity: Forms::class, mappedBy: 'team')] + private Collection $forms; - /** - * @ORM\OneToMany(targetEntity=Policies::class, mappedBy="team") - */ - private $policies; + #[ORM\OneToMany(targetEntity: Policies::class, mappedBy: 'team')] + private Collection $policies; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $signature; - /** - * @ORM\OneToMany(targetEntity=Software::class, mappedBy="team") - */ - private $software; + #[ORM\OneToMany(targetEntity: Software::class, mappedBy: 'team')] + private Collection $software; - /** - * @ORM\OneToMany(targetEntity=Task::class, mappedBy="team") - */ - private $tasks; + #[ORM\OneToMany(targetEntity: Task::class, mappedBy: 'team')] + private Collection $tasks; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() - * @Assert\Url() */ + #[ORM\Column(type: 'text', nullable: true)] + #[Assert\Url] private $externalLink; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $video; - /** - * @ORM\OneToMany(targetEntity=ClientRequest::class, mappedBy="team") - */ - private $clientRequests; + #[ORM\OneToMany(targetEntity: ClientRequest::class, mappedBy: 'team')] + private Collection $clientRequests; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $slug; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="teamDsb") - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'teamDsb')] private $dsbUser; - /** - * @ORM\OneToMany(targetEntity=Report::class, mappedBy="team") - */ - private $reports; + #[ORM\OneToMany(targetEntity: Report::class, mappedBy: 'team')] + private Collection $reports; - /** - * @ORM\OneToMany(targetEntity=VVTDatenkategorie::class, mappedBy="team") - */ - private $vVTDatenkategories; + #[ORM\OneToMany(targetEntity: VVTDatenkategorie::class, mappedBy: 'team')] + private Collection $vVTDatenkategories; - /** - * @ORM\OneToMany(targetEntity=VVTPersonen::class, mappedBy="team") - */ - private $vVTPersonens; + #[ORM\OneToMany(targetEntity: VVTPersonen::class, mappedBy: 'team')] + private Collection $vVTPersonens; - /** - * @ORM\OneToMany(targetEntity=VVTRisiken::class, mappedBy="team") - */ - private $vVTRisikens; + #[ORM\OneToMany(targetEntity: VVTRisiken::class, mappedBy: 'team')] + private Collection $vVTRisikens; - /** - * @ORM\OneToMany(targetEntity=VVTGrundlage::class, mappedBy="team") - */ - private $vVTGrundlages; + #[ORM\OneToMany(targetEntity: VVTGrundlage::class, mappedBy: 'team')] + private Collection $vVTGrundlages; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $industry; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $specialty; - /** - * @ORM\OneToMany(targetEntity=VVTStatus::class, mappedBy="team") - */ - private $vVTStatuses; + #[ORM\OneToMany(targetEntity: VVTStatus::class, mappedBy: 'team')] + private Collection $vVTStatuses; - /** - * @ORM\OneToMany(targetEntity=DatenweitergabeGrundlagen::class, mappedBy="team") - */ - private $datenweitergabeGrundlagens; + #[ORM\OneToMany(targetEntity: DatenweitergabeGrundlagen::class, mappedBy: 'team')] + private Collection $datenweitergabeGrundlagens; - /** - * @ORM\OneToMany(targetEntity=DatenweitergabeStand::class, mappedBy="team") - */ - private $datenweitergabeStands; - - /** - * @ORM\OneToMany(targetEntity=Loeschkonzept::class, mappedBy="team") - */ - private $loeschkonzepts; + #[ORM\OneToMany(targetEntity: DatenweitergabeStand::class, mappedBy: 'team')] + private Collection $datenweitergabeStands; + #[ORM\OneToMany(targetEntity: Loeschkonzept::class, mappedBy: 'team')] + private Collection $loeschkonzepts; + + #[ORM\OneToMany(targetEntity: Questionnaire::class, mappedBy: 'team')] + private Collection $questionnaires; public function __construct() { @@ -288,9 +206,10 @@ public function __construct() $this->datenweitergabeGrundlagens = new ArrayCollection(); $this->datenweitergabeStands = new ArrayCollection(); $this->loeschkonzepts = new ArrayCollection(); + $this->questionnaires = new ArrayCollection(); } - public function __toString(): ?string + public function __toString(): string { return $this->name; } @@ -313,6 +232,18 @@ public function setName(string $name): self return $this; } + public function getKeycloakGroup(): ?string + { + return $this->keycloakGroup ? : $this->name; + } + + public function setKeycloakGroup(?string $keycloakGroup): self + { + $this->keycloakGroup = $keycloakGroup; + + return $this; + } + public function getActiv(): ?bool { return $this->activ; @@ -337,7 +268,7 @@ public function addMember(User $member): self { if (!$this->members->contains($member)) { $this->members[] = $member; - $member->setTeam($this); + $member->addTeam($this); } return $this; @@ -348,9 +279,7 @@ public function removeMember(User $member): self if ($this->members->contains($member)) { $this->members->removeElement($member); // set the owning side to null (unless already changed) - if ($member->getTeam() === $this) { - $member->setTeam(null); - } + $member->removeTeam($this); } return $this; @@ -709,7 +638,6 @@ public function addAdmin(User $admin): self { if (!$this->admins->contains($admin)) { $this->admins[] = $admin; - $admin->setAdminUser($this); } return $this; @@ -719,10 +647,6 @@ public function removeAdmin(User $admin): self { if ($this->admins->contains($admin)) { $this->admins->removeElement($admin); - // set the owning side to null (unless already changed) - if ($admin->getAdminUser() === $this) { - $admin->setAdminUser(null); - } } return $this; @@ -1331,4 +1255,67 @@ public function removeLoeschkonzept(Loeschkonzept $loeschkonzept): self return $this; } + /** + * @return Collection + */ + public function getQuestionnaires(): Collection + { + return $this->questionnaires; + } + + public function addQuestionnaire(Questionnaire $questionnaire): self + { + if (!$this->questionnaires->contains($questionnaire)) { + $this->questionnaires[] = $questionnaire; + $questionnaire->setTeam($this); + } + + return $this; + } + + public function removeQuestionnaire(Questionnaire $questionnaire): self + { + if ($this->questionnaires->removeElement($questionnaire)) { + // set the owning side to null (unless already changed) + if ($questionnaire->getTeam() === $this) { + $questionnaire->setTeam(null); + } + } + + return $this; + } + + /** + * returns list of elements that prevent team deletion + * @return array + */ + public function getDeleteBlockers(): array + { + $blockers = []; + if (count($this->ziele)) $blockers[] = 'auditGoals'; + if (count($this->abteilungen)) $blockers[] = 'departments'; + if (count($this->auditToms)) $blockers[] = 'audits'; + if (count($this->kontakte)) $blockers[] = 'contacts'; + if (count($this->vvts)) $blockers[] = 'processingActivities'; + if (count($this->datenweitergaben)) $blockers[] = 'dataTransfers'; + if (count($this->kurse)) $blockers[] = 'academyCourses'; + if (count($this->akademieUsers)) $blockers[] = 'academyUsers'; + if (count($this->toms)) $blockers[] = 'toms'; + if (count($this->vorfalls)) $blockers[] = 'incidents'; + if (count($this->produktes)) $blockers[] = 'products'; + if (count($this->forms)) $blockers[] = 'forms'; + if (count($this->policies)) $blockers[] = 'policies'; + if (count($this->software)) $blockers[] = 'software'; + if (count($this->tasks)) $blockers[] = 'tasks'; + if (count($this->clientRequests)) $blockers[] = 'clientRequests'; + if (count($this->reports)) $blockers[] = 'reports'; + if (count($this->vVTDatenkategories)) $blockers[] = 'dataCategories'; + if (count($this->vVTPersonens)) $blockers[] = 'groupsOfPeople'; + if (count($this->vVTRisikens)) $blockers[] = 'processingRisks'; + if (count($this->vVTGrundlages)) $blockers[] = 'dataTransferBases'; + if (count($this->vVTStatuses)) $blockers[] = 'processingStatuses'; + if (count($this->datenweitergabeStands)) $blockers[] = 'dataTransferStatuses'; + if (count($this->loeschkonzepts)) $blockers[] = 'deleteConcepts'; + return $blockers; + } } diff --git a/src/Entity/Templates/EntityWithTimestamps.php b/src/Entity/Templates/EntityWithTimestamps.php new file mode 100644 index 00000000..90721d5c --- /dev/null +++ b/src/Entity/Templates/EntityWithTimestamps.php @@ -0,0 +1,57 @@ +id ?? null; + } + + #[ORM\PrePersist] + public function setCreatedAt(): self + { + if(!isset($this->createdAt)){ + $this->createdAt = new DateTimeImmutable(); + } + + return $this; + } + + public function getCreatedAt(): DateTimeImmutable + { + return $this->createdAt; + } + + #[ORM\PrePersist] + public function setUpdatedAt(): self + { + if(!isset($this->updatedAt)){ + $this->updatedAt = new DateTimeImmutable(); + } + + return $this; + } + + public function getUpdatedAt(): DateTimeImmutable + { + return $this->updatedAt; + } +} \ No newline at end of file diff --git a/src/Entity/Tom.php b/src/Entity/Tom.php index 49b32bac..aec452bc 100644 --- a/src/Entity/Tom.php +++ b/src/Entity/Tom.php @@ -9,187 +9,167 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; -/** - * @ORM\Entity(repositoryClass=TomRepository::class) - */ +#[ORM\Entity(repositoryClass: TomRepository::class)] class Tom { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="toms") - * @ORM\JoinColumn(nullable=false) - * @Assert\NotBlank() - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'toms')] + #[ORM\JoinColumn(nullable: false)] + #[Assert\NotBlank] private $team; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="toms") - * @ORM\JoinColumn(nullable=false) - * @Assert\NotBlank() - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'toms')] + #[ORM\JoinColumn(nullable: false)] + #[Assert\NotBlank] private $user; - /** - * @ORM\Column(type="datetime") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'datetime')] + #[Assert\NotBlank] private $createdAt; - /** - * @ORM\OneToMany(targetEntity=VVT::class, mappedBy="tomLink") - */ + #[ORM\OneToMany(targetEntity: VVT::class, mappedBy: 'tomLink')] private $vvts; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $activ; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomPseudo; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomZutrittskontrolle; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomZugangskontrolle; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomZugriffskontrolle; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomBenutzerkontrolle; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomSpeicherkontrolle; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomTrennbarkeit; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomDatenintegritaet; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomTransportkontrolle; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomUebertragungskontrolle; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomZuverlaessigkeit; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomAuftragskontrolle; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomVerfuegbarkeitskontrolle; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomWiederherstellbarkeit; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomAudit; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $tomEingabekontrolle; - /** - * @ORM\OneToOne(targetEntity=Tom::class, cascade={"persist", "remove"}) - */ + #[ORM\OneToOne(targetEntity: Tom::class, cascade: ['persist', 'remove'])] private $previous; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $beschreibung; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $titel; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $approved; - /** - * @ORM\ManyToOne(targetEntity=User::class) - */ + #[ORM\ManyToOne(targetEntity: User::class)] private $approvedBy; public function __construct() diff --git a/src/Entity/Upload.php b/src/Entity/Upload.php index d088b434..9f787cc0 100644 --- a/src/Entity/Upload.php +++ b/src/Entity/Upload.php @@ -9,46 +9,36 @@ use Vich\UploaderBundle\Mapping\Annotation as Vich; /** - * @ORM\Entity(repositoryClass=FileRepository::class) * @Vich\Uploadable */ +#[ORM\Entity(repositoryClass: FileRepository::class)] class Upload { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; /** - * @ORM\Column(type="string", length=255,nullable=true) * @var string */ + #[ORM\Column(type: 'string', length: 255, nullable: true)] private $file; /** - * @Assert\File( - * maxSize="2M", - * mimeTypes={"text/plain"}) * @Vich\UploadableField(mapping="profil_picture", fileNameProperty="file") * @var File */ + #[Assert\File(maxSize: '2M', mimeTypes: ['text/plain'])] private $fileFile; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $updatedAt; - /** - * @ORM\Column(type="string", length=50) - */ + #[ORM\Column(type: 'string', length: 50)] private $UId; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $amount; public function getId(): ?int diff --git a/src/Entity/User.php b/src/Entity/User.php index d499f623..2feaf810 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -6,215 +6,130 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; -use App\Entity\UserBase as BaseUser; -use Symfony\Component\Validator\Constraints as Assert; - -/** - * @ORM\Entity - * @ORM\Table(name="fos_user") - */ -class User extends BaseUser +use Symfony\Component\Security\Core\User\UserInterface; + +#[ORM\Table(name: 'user')] +#[ORM\Entity] +class User implements UserInterface { - /** - * @ORM\Id - * @ORM\Column(type="integer") - * @ORM\GeneratedValue(strategy="AUTO") - */ + #[ORM\Id] + #[ORM\Column(type: 'integer')] + #[ORM\GeneratedValue(strategy: 'AUTO')] protected $id; - /** - * @Assert\NotBlank(message="fos_user.password.blank", groups={"Registration", "ResetPassword", "ChangePassword"}) - * @Assert\Length(min=8, - * minMessage="fos_user.password.short", - * groups={"Registration", "Profile", "ResetPassword", "ChangePassword"}) - */ - protected $plainPassword; - - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="members") - */ - private $team; - - /** - * @ORM\OneToMany(targetEntity=Datenweitergabe::class, mappedBy="user") - */ - private $datenweitergabes; - - /** - * @ORM\OneToMany(targetEntity=VVT::class, mappedBy="user") - */ - private $vVTs; - - /** - * @ORM\OneToMany(targetEntity=AuditTom::class, mappedBy="user") - */ - private $auditToms; - - /** - * @ORM\OneToMany(targetEntity=VVTDsfa::class, mappedBy="user") - */ - private $vVTDsfas; - - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="akademieUsers") - */ - private $akademieUser; - - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="admins") - */ - private $adminUser; - - /** - * @ORM\OneToMany(targetEntity=VVT::class, mappedBy="userContract") - */ - private $myVvts; - - /** - * @ORM\OneToMany(targetEntity=Tom::class, mappedBy="user") - */ - private $toms; - - /** - * @ORM\OneToMany(targetEntity=Vorfall::class, mappedBy="user") - */ - private $vorfalls; - - /** - * @ORM\OneToMany(targetEntity=AkademieKurse::class, mappedBy="user") - */ - private $akademieKurses; - - /** - * @ORM\OneToMany(targetEntity=VVT::class, mappedBy="assignedUser") - */ - private $assignedVvts; - - /** - * @ORM\OneToMany(targetEntity=AuditTom::class, mappedBy="assignedUser") - */ - private $assignedAudits; - - /** - * @ORM\OneToMany(targetEntity=Datenweitergabe::class, mappedBy="assignedUser") - */ - private $assignedDatenweitergaben; - - /** - * @ORM\OneToMany(targetEntity=VVTDsfa::class, mappedBy="assignedUser") - */ - private $assignedDsfa; - - /** - * @ORM\OneToMany(targetEntity=Forms::class, mappedBy="user") - */ - private $forms; - - /** - * @ORM\OneToMany(targetEntity=Policies::class, mappedBy="user") - */ - private $policies; - - /** - * @ORM\OneToMany(targetEntity=Policies::class, mappedBy="person") - */ - private $policiesResponsible; - - /** - * @ORM\OneToMany(targetEntity=Policies::class, mappedBy="assignedUser") - */ - private $assignedPolicies; - - /** - * @ORM\OneToMany(targetEntity=Forms::class, mappedBy="assignedUser") - */ - private $assignedForms; - - /** - * @ORM\OneToMany(targetEntity=Software::class, mappedBy="user") - */ - private $software; - - /** - * @ORM\OneToMany(targetEntity=Software::class, mappedBy="assignedUser") - */ - private $assignedSoftware; - - /** - * @ORM\OneToMany(targetEntity=Vorfall::class, mappedBy="assignedUser") - */ - private $assignedVorfalls; - - /** - * @ORM\OneToMany(targetEntity=Task::class, mappedBy="assignedUser") - */ - private $tasks; - - /** - * @ORM\OneToMany(targetEntity=ClientRequest::class, mappedBy="user") - */ - private $clientRequests; - - /** - * @ORM\OneToMany(targetEntity=ClientRequest::class, mappedBy="assignedUser") - */ - private $assignedRequests; - - /** - * @ORM\OneToMany(targetEntity=Team::class, mappedBy="dsbUser") - */ - private $teamDsb; - - /** - * @ORM\Column(type="text") - */ - private $email; - - /** - * @ORM\Column(type="text", nullable=true) - */ - private $keycloakId; - - /** - * @ORM\Column(type="datetime",nullable=true) - */ - private $createdAt; - - /** - * @ORM\Column(type="text", nullable=true) - */ - private $username; - - /** - * @ORM\Column(type="datetime", nullable=true) - */ - private $lastLogin; - - /** - * @ORM\Column(type="text", nullable=true) - */ - private $firstName; - - /** - * @ORM\Column(type="text", nullable=true) - */ - private $lastName; - - /** - * @ORM\Column(type="text", nullable=true) - */ - private $registerId; - - /** - * @ORM\OneToMany(targetEntity=Loeschkonzept::class, mappedBy="user") - */ - private $loeschkonzepts; - - /** - * @ORM\OneToMany(targetEntity=VVTDatenkategorie::class, mappedBy="user") - */ - private $vVTDatenkategories; + #[ORM\ManyToMany(targetEntity: Team::class, inversedBy: 'members')] + private Collection $teams; + + #[ORM\OneToMany(mappedBy: 'user', targetEntity: Datenweitergabe::class)] + private Collection $datenweitergabes; + + #[ORM\OneToMany(mappedBy: 'user', targetEntity: VVT::class)] + private Collection $vVTs; + + #[ORM\OneToMany(mappedBy: 'user', targetEntity: AuditTom::class)] + private Collection $auditToms; + + #[ORM\OneToMany(mappedBy: 'user', targetEntity: VVTDsfa::class)] + private Collection $vVTDsfas; + + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'akademieUsers')] + private ?Team $akademieUser; + + #[ORM\ManyToMany(targetEntity: Team::class, mappedBy: 'admins')] + private $adminRoles; + + #[ORM\OneToMany(mappedBy: 'userContract', targetEntity: VVT::class)] + private Collection $myVvts; + + #[ORM\OneToMany(mappedBy: 'user', targetEntity: Tom::class)] + private Collection $toms; + + #[ORM\OneToMany(mappedBy: 'user', targetEntity: Vorfall::class)] + private Collection $vorfalls; + + #[ORM\OneToMany(mappedBy: 'user', targetEntity: AkademieKurse::class)] + private Collection $akademieKurses; + + #[ORM\OneToMany(mappedBy: 'assignedUser', targetEntity: VVT::class)] + private Collection $assignedVvts; + + #[ORM\OneToMany(mappedBy: 'assignedUser', targetEntity: AuditTom::class)] + private Collection $assignedAudits; + + #[ORM\OneToMany(mappedBy: 'assignedUser', targetEntity: Datenweitergabe::class)] + private Collection $assignedDatenweitergaben; + + #[ORM\OneToMany(mappedBy: 'assignedUser', targetEntity: VVTDsfa::class)] + private Collection $assignedDsfa; + + #[ORM\OneToMany(mappedBy: 'user', targetEntity: Forms::class)] + private Collection $forms; + + #[ORM\OneToMany(mappedBy: 'user', targetEntity: Policies::class)] + private Collection $policies; + + #[ORM\OneToMany(mappedBy: 'person', targetEntity: Policies::class)] + private Collection $policiesResponsible; + + #[ORM\OneToMany(mappedBy: 'assignedUser', targetEntity: Policies::class)] + private Collection $assignedPolicies; + + #[ORM\OneToMany(mappedBy: 'assignedUser', targetEntity: Forms::class)] + private Collection $assignedForms; + + #[ORM\OneToMany(mappedBy: 'user', targetEntity: Software::class)] + private Collection $software; + + #[ORM\OneToMany(mappedBy: 'assignedUser', targetEntity: Software::class)] + private Collection $assignedSoftware; + + #[ORM\OneToMany(mappedBy: 'assignedUser', targetEntity: Vorfall::class)] + private Collection $assignedVorfalls; + + #[ORM\OneToMany(mappedBy: 'assignedUser', targetEntity: Task::class)] + private Collection $tasks; + + #[ORM\OneToMany(mappedBy: 'user', targetEntity: ClientRequest::class)] + private Collection $clientRequests; + + #[ORM\OneToMany(mappedBy: 'assignedUser', targetEntity: ClientRequest::class)] + private Collection $assignedRequests; + + #[ORM\OneToMany(mappedBy: 'dsbUser', targetEntity: Team::class)] + private Collection $teamDsb; + + #[ORM\Column(type: 'text')] + private ?string $email; + + #[ORM\Column(type: 'text', nullable: true)] + private ?string $keycloakId; + + #[ORM\Column(type: 'datetime', nullable: true)] + private ?\DateTimeInterface $createdAt; + + #[ORM\Column(type: 'text', nullable: true)] + private string $username; + + #[ORM\Column(type: 'datetime', nullable: true)] + private ?\DateTimeInterface $lastLogin; + + #[ORM\Column(type: 'text', nullable: true)] + private ?string $firstName; + + #[ORM\Column(type: 'text', nullable: true)] + private ?string $lastName; + + #[ORM\Column(type: 'text', nullable: true)] + private ?string $registerId; + + #[ORM\OneToMany(mappedBy: 'user', targetEntity: Loeschkonzept::class)] + private Collection $loeschkonzepts; + + #[ORM\OneToMany(mappedBy: 'user', targetEntity: VVTDatenkategorie::class)] + private Collection $vVTDatenkategories; + #[ORM\Column(type: 'json', nullable: true)] + private array $roles; public function __construct() { @@ -246,21 +161,50 @@ public function __construct() $this->vVTDatenkategories = new ArrayCollection(); } - public function getTeam(): ?Team + public function getId(): ?int { - return $this->team; + return $this->id; } - public function setTeam(?Team $team): self + public function getTeams(): Collection { - $this->team = $team; + $allTeams = array_merge($this->teams->toArray(), $this->adminRoles->toArray()); + return new ArrayCollection(array_unique($allTeams)); + } + + public function setTeams(Collection $teams): self + { + $this->teams = $teams; + + return $this; + } + + public function addTeam(Team $team): self + { + if(!$this->teams->contains($team)) { + $this->teams[] = $team; + } return $this; } - /** - * @return Collection|Datenweitergabe[] - */ + public function removeTeam(Team $team): self + { + if ($this->teams->contains($team)) { + $this->teams->removeElement($team); + } + + return $this; + } + + public function hasTeam(Team $team = null): bool + { + if ($team) { + return $this->getTeams()->contains($team); + } + return count($this->getTeams()) > 0; + } + public function getDatenweitergabes(): Collection { return $this->datenweitergabes; @@ -289,9 +233,6 @@ public function removeDatenweitergabe(Datenweitergabe $datenweitergabe): self return $this; } - /** - * @return Collection|VVT[] - */ public function getVVTs(): Collection { return $this->vVTs; @@ -320,9 +261,6 @@ public function removeVVT(VVT $vVT): self return $this; } - /** - * @return Collection|AuditTom[] - */ public function getAuditToms(): Collection { return $this->auditToms; @@ -351,9 +289,6 @@ public function removeAuditTom(AuditTom $auditTom): self return $this; } - /** - * @return Collection|VVTDsfa[] - */ public function getVVTDsfas(): Collection { return $this->vVTDsfas; @@ -394,21 +329,19 @@ public function setAkademieUser(?Team $akademieUser): self return $this; } - public function getAdminUser(): ?Team + public function getAdminRoles(): Collection { - return $this->adminUser; + return $this->adminRoles; } - public function setAdminUser(?Team $adminUser): self + public function hasAdminRole(Team $team = null): bool { - $this->adminUser = $adminUser; - - return $this; + if ($team && $this->adminRoles) { + return $this->adminRoles->contains($team); + } + return count($this->adminRoles) > 0; } - /** - * @return Collection|VVT[] - */ public function getMyVvts(): Collection { return $this->myVvts; @@ -437,9 +370,6 @@ public function removeMyVvt(VVT $myVvt): self return $this; } - /** - * @return Collection|Tom[] - */ public function getToms(): Collection { return $this->toms; @@ -468,9 +398,6 @@ public function removeTom(Tom $tom): self return $this; } - /** - * @return Collection|Vorfall[] - */ public function getVorfalls(): Collection { return $this->vorfalls; @@ -499,9 +426,6 @@ public function removeVorfall(Vorfall $vorfall): self return $this; } - /** - * @return Collection|AkademieKurse[] - */ public function getAkademieKurses(): Collection { return $this->akademieKurses; @@ -530,9 +454,6 @@ public function removeAkademieKurse(AkademieKurse $akademieKurse): self return $this; } - /** - * @return Collection|VVT[] - */ public function getAssignedVvts(): Collection { return $this->assignedVvts; @@ -561,9 +482,6 @@ public function removeAssignedVvt(VVT $assignedVvt): self return $this; } - /** - * @return Collection|AuditTom[] - */ public function getAssignedAudits(): Collection { return $this->assignedAudits; @@ -592,9 +510,6 @@ public function removeAssignedAudit(AuditTom $assignedAudit): self return $this; } - /** - * @return Collection|Datenweitergabe[] - */ public function getAssignedDatenweitergaben(): Collection { return $this->assignedDatenweitergaben; @@ -610,6 +525,7 @@ public function addAssignedDatenweitergaben(Datenweitergabe $assignedDatenweiter return $this; } + public function removeAssignedDatenweitergaben(Datenweitergabe $assignedDatenweitergaben): self { if ($this->assignedDatenweitergaben->contains($assignedDatenweitergaben)) { @@ -623,9 +539,6 @@ public function removeAssignedDatenweitergaben(Datenweitergabe $assignedDatenwei return $this; } - /** - * @return Collection|VVTDsfa[] - */ public function getAssignedDsfa(): Collection { return $this->assignedDsfa; @@ -654,9 +567,6 @@ public function removeAssignedDsfa(VVTDsfa $assignedDsfa): self return $this; } - /** - * @return Collection|Forms[] - */ public function getForms(): Collection { return $this->forms; @@ -685,9 +595,6 @@ public function removeForm(Forms $form): self return $this; } - /** - * @return Collection|Policies[] - */ public function getPolicies(): Collection { return $this->policies; @@ -716,9 +623,6 @@ public function removePolicy(Policies $policy): self return $this; } - /** - * @return Collection|Policies[] - */ public function getPoliciesResponsible(): Collection { return $this->policiesResponsible; @@ -747,9 +651,6 @@ public function removePoliciesResponsible(Policies $policiesResponsible): self return $this; } - /** - * @return Collection|Policies[] - */ public function getAssignedPolicies(): Collection { return $this->assignedPolicies; @@ -778,9 +679,6 @@ public function removeAssignedPolicy(Policies $assignedPolicy): self return $this; } - /** - * @return Collection|Forms[] - */ public function getAssignedForms(): Collection { return $this->assignedForms; @@ -809,9 +707,6 @@ public function removeAssignedForm(Forms $assignedForm): self return $this; } - /** - * @return Collection|Software[] - */ public function getSoftware(): Collection { return $this->software; @@ -840,9 +735,6 @@ public function removeSoftware(Software $software): self return $this; } - /** - * @return Collection|Software[] - */ public function getAssignedSoftware(): Collection { return $this->assignedSoftware; @@ -871,9 +763,6 @@ public function removeAssignedSoftware(Software $assignedSoftware): self return $this; } - /** - * @return Collection|Vorfall[] - */ public function getAssignedVorfalls(): Collection { return $this->assignedVorfalls; @@ -902,9 +791,6 @@ public function removeAssignedVorfall(Vorfall $assignedVorfall): self return $this; } - /** - * @return Collection|Task[] - */ public function getTasks(): Collection { return $this->tasks; @@ -933,9 +819,6 @@ public function removeTask(Task $task): self return $this; } - /** - * @return Collection|ClientRequest[] - */ public function getClientRequests(): Collection { return $this->clientRequests; @@ -964,9 +847,6 @@ public function removeClientRequest(ClientRequest $clientRequest): self return $this; } - /** - * @return Collection|ClientRequest[] - */ public function getAssignedRequests(): Collection { return $this->assignedRequests; @@ -995,9 +875,6 @@ public function removeAssignedRequest(ClientRequest $assignedRequest): self return $this; } - /** - * @return Collection|Team[] - */ public function getTeamDsb(): Collection { return $this->teamDsb; @@ -1062,6 +939,11 @@ public function setCreatedAt(\DateTimeInterface $createdAt): self return $this; } + public function getUsername(): string + { + return $this->username; + } + public function setUsername(?string $username): self { $this->username = $username; @@ -1117,9 +999,6 @@ public function setRegisterId(?string $registerId): self return $this; } - /** - * @return Collection - */ public function getLoeschkonzepts(): Collection { return $this->loeschkonzepts; @@ -1147,9 +1026,6 @@ public function removeLoeschkonzept(Loeschkonzept $loeschkonzept): self return $this; } - /** - * @return Collection - */ public function getVVTDatenkategories(): Collection { return $this->vVTDatenkategories; @@ -1177,4 +1053,26 @@ public function removeVVTDatenkategory(VVTDatenkategorie $vVTDatenkategory): sel return $this; } + public function getRoles(): array + { + $roles = $this->roles ?? []; + $roles[] = 'ROLE_USER'; + return array_unique($roles); + } + + public function setRoles(array $roles): void + { + $this->roles = $roles; + } + + public function eraseCredentials() + { + // If you store any temporary, sensitive data on the user, clear it here + // $this->plainPassword = null; + } + + public function getUserIdentifier(): string + { + return $this->getUsername(); + } } diff --git a/src/Entity/UserBase.php b/src/Entity/UserBase.php deleted file mode 100644 index c1db5974..00000000 --- a/src/Entity/UserBase.php +++ /dev/null @@ -1,106 +0,0 @@ -id; - } - - public function getUuid(): ?string - { - return $this->uuid; - } - - public function setUuid(string $uuid): self - { - $this->uuid = $uuid; - - return $this; - } - - /** - * A visual identifier that represents this user. - * - * @see UserInterface - */ - public function getUsername(): string - { - return (string) $this->uuid; - } - - /** - * @see UserInterface - */ - public function getRoles(): array - { - $roles = $this->roles; - // guarantee every user at least has ROLE_USER - $roles[] = 'ROLE_USER'; - - return array_unique($roles); - } - - public function setRoles(array $roles): self - { - $this->roles = $roles; - - return $this; - } - - /** - * @see UserInterface - */ - public function getPassword(): string - { - return (string) $this->password; - } - - public function setPassword(string $password): self - { - $this->password = $password; - - return $this; - } - - /** - * @see UserInterface - */ - public function getSalt() - { - // not needed when using the "bcrypt" algorithm in security.yaml - } - - /** - * @see UserInterface - */ - public function eraseCredentials() - { - // If you store any temporary, sensitive data on the user, clear it here - // $this->plainPassword = null; - } -} diff --git a/src/Entity/VVT.php b/src/Entity/VVT.php index 96f34ae3..c741f382 100644 --- a/src/Entity/VVT.php +++ b/src/Entity/VVT.php @@ -15,228 +15,162 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; -/** - * @ORM\Entity(repositoryClass=VVTRepository::class) - */ +#[ORM\Entity(repositoryClass: VVTRepository::class)] class VVT { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $name; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $verantwortlich; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $zweck; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $jointControl = false; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $auftragsverarbeitung = false; - /** - * @ORM\Column(type="text",nullable=true) - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text', nullable: true)] + #[Assert\NotBlank] private $speicherung; - /** - * @ORM\ManyToMany(targetEntity=VVTGrundlage::class) - * @Assert\NotBlank() - */ + #[ORM\ManyToMany(targetEntity: VVTGrundlage::class)] + #[Assert\NotBlank] private $grundlage; - /** - * @ORM\ManyToMany(targetEntity=VVTPersonen::class) - * @Assert\NotBlank() - */ + #[ORM\ManyToMany(targetEntity: VVTPersonen::class)] + #[Assert\NotBlank] private $personengruppen; - /** - * @ORM\ManyToMany(targetEntity=VVTDatenkategorie::class, cascade={"persist", "remove"}) - * @Assert\NotBlank() - */ + #[ORM\ManyToMany(targetEntity: VVTDatenkategorie::class, cascade: ['persist', 'remove'])] + #[Assert\NotBlank] private $kategorien; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $weitergabe; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $eu = false; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $tom; - /** - * @ORM\ManyToMany(targetEntity=VVTRisiken::class) - * @Assert\NotBlank() - */ + #[ORM\ManyToMany(targetEntity: VVTRisiken::class)] + #[Assert\NotBlank] private $risiko; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $nummer; - /** - * @ORM\ManyToOne(targetEntity=VVTStatus::class) - * @ORM\JoinColumn(nullable=false) - * @Assert\NotBlank() - */ + #[ORM\ManyToOne(targetEntity: VVTStatus::class)] + #[ORM\JoinColumn(nullable: false)] + #[Assert\NotBlank] private $status; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="vvts") - * @ORM\JoinColumn(nullable=false) - * @Assert\NotBlank() - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'vvts')] + #[ORM\JoinColumn(nullable: false)] + #[Assert\NotBlank] private $team; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: 'integer')] private $activ; - /** - * @ORM\Column(type="datetime") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'datetime')] + #[Assert\NotBlank] private $CreatedAt; - /** - * @ORM\OneToOne(targetEntity=VVT::class, cascade={"persist", "remove"}) - */ + #[ORM\OneToOne(targetEntity: VVT::class, cascade: ['persist', 'remove'])] private $previous; - /** - * @ORM\OneToMany(targetEntity=VVTDsfa::class, mappedBy="vvt") - */ + #[ORM\OneToMany(targetEntity: VVTDsfa::class, mappedBy: 'vvt')] private $dsfa; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="vVTs") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'vVTs')] + #[ORM\JoinColumn(nullable: false)] private $user; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $informationspflicht; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $dsb; - /** - * @ORM\Column(type="integer") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'integer')] + #[Assert\NotBlank] private $beurteilungEintritt; - /** - * @ORM\Column(type="integer") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'integer')] + #[Assert\NotBlank] private $beurteilungSchaden; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="myVvts") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'myVvts')] + #[ORM\JoinColumn(nullable: false)] private $userContract; - /** - * @ORM\ManyToMany(targetEntity=Datenweitergabe::class, inversedBy="verfahren") - */ + #[ORM\ManyToMany(targetEntity: Datenweitergabe::class, inversedBy: 'verfahren')] private $datenweitergaben; - /** - * @ORM\ManyToOne(targetEntity=Tom::class, inversedBy="vvts") - */ + #[ORM\ManyToOne(targetEntity: Tom::class, inversedBy: 'vvts')] private $tomLink; - /** - * @ORM\ManyToOne(targetEntity=AuditTomAbteilung::class, inversedBy="vVTs") - */ + #[ORM\ManyToOne(targetEntity: AuditTomAbteilung::class, inversedBy: 'vVTs')] private $abteilung; - /** - * @ORM\ManyToMany(targetEntity=Produkte::class, inversedBy="Vvts") - */ + #[ORM\ManyToMany(targetEntity: Produkte::class, inversedBy: 'Vvts')] private $produkt; private $beurteilungEintrittString; private $beurteilungSchadenString; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="assignedVvts") - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'assignedVvts')] private $assignedUser; - /** - * @ORM\ManyToMany(targetEntity=Policies::class, mappedBy="processes") - */ + #[ORM\ManyToMany(targetEntity: Policies::class, mappedBy: 'processes')] private $policies; - /** - * @ORM\ManyToMany(targetEntity=Software::class, mappedBy="vvts") - */ + #[ORM\ManyToMany(targetEntity: Software::class, mappedBy: 'vvts')] private $software; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $approved; - /** - * @ORM\ManyToOne(targetEntity=User::class) - */ + #[ORM\ManyToOne(targetEntity: User::class)] private $approvedBy; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $source; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() - */ + */ + #[ORM\Column(type: 'text', nullable: true)] private $loeschfrist; public function __construct() diff --git a/src/Entity/VVTDatenkategorie.php b/src/Entity/VVTDatenkategorie.php index 9a7b135a..0b80f783 100644 --- a/src/Entity/VVTDatenkategorie.php +++ b/src/Entity/VVTDatenkategorie.php @@ -14,70 +14,46 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; -/** - * @ORM\Entity(repositoryClass=VVTDatenkategorieRepository::class) - */ +#[ORM\Entity(repositoryClass: VVTDatenkategorieRepository::class)] class VVTDatenkategorie { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $name; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="vVTDatenkategories") - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'vVTDatenkategories')] private $team; - /** - * @ORM\Column(type="text") - * @Assert\NotBlank() - */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $datenarten; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; - /** - * @ORM\ManyToMany(targetEntity=Loeschkonzept::class, mappedBy="vvtdatenkategories",cascade={"persist", "remove"}) - */ + #[ORM\ManyToMany(targetEntity: Loeschkonzept::class, mappedBy: 'vvtdatenkategories', cascade: ['persist', 'remove'])] private $loeschkonzept; - /** - * @ORM\OneToOne(targetEntity=VVTDatenkategorie::class, cascade={"persist", "remove"}) - */ + #[ORM\OneToOne(targetEntity: VVTDatenkategorie::class, cascade: ['persist', 'remove'])] private $previous; - /** - * @ORM\Column(type="datetime_immutable", nullable = true) - */ + #[ORM\Column(type: 'datetime_immutable', nullable: true)] private $CreatedAt; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="vVTDatenkategories") - * @ORM\JoinColumn(nullable=true) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'vVTDatenkategories')] + #[ORM\JoinColumn(nullable: true)] private $user; - /** - * @ORM\ManyToOne(targetEntity=VVTDatenkategorie::class, inversedBy="parentOf") - */ + #[ORM\ManyToOne(targetEntity: VVTDatenkategorie::class, inversedBy: 'parentOf')] private $cloneOf; - /** - * @ORM\OneToMany(targetEntity=VVTDatenkategorie::class, mappedBy="cloneOf") - */ + #[ORM\OneToMany(targetEntity: VVTDatenkategorie::class, mappedBy: 'cloneOf')] private $parentOf; public function __construct() @@ -86,7 +62,7 @@ public function __construct() $this->parentOf = new ArrayCollection(); } - public function __toString(): ?string + public function __toString(): string { if ($this->getLoeschkonzept()) { diff --git a/src/Entity/VVTDsfa.php b/src/Entity/VVTDsfa.php index a4f07ce2..158e8814 100644 --- a/src/Entity/VVTDsfa.php +++ b/src/Entity/VVTDsfa.php @@ -7,96 +7,80 @@ use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; -/** - * @ORM\Entity(repositoryClass=VVTDsfaRepository::class) - */ +#[ORM\Entity(repositoryClass: VVTDsfaRepository::class)] class VVTDsfa { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $beschreibung; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $notwendigkeit; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $risiko; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $abhilfe; /** - * @ORM\Column(type="text") - * @Assert\NotBlank() * @Encrypted() */ + #[ORM\Column(type: 'text')] + #[Assert\NotBlank] private $standpunkt; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $dsb; /** - * @ORM\Column(type="text", nullable=true) * @Encrypted() */ + #[ORM\Column(type: 'text', nullable: true)] private $ergebnis; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; - /** - * @ORM\OneToOne(targetEntity=VVTDsfa::class, cascade={"persist", "remove"}) - */ + #[ORM\OneToOne(targetEntity: VVTDsfa::class, cascade: ['persist', 'remove'])] private $previous; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $CreatedAt; - /** - * @ORM\ManyToOne(targetEntity=VVT::class, inversedBy="dsfa") - * @ORM\JoinColumn(nullable=false) - * @Assert\NotBlank() - */ + #[ORM\ManyToOne(targetEntity: VVT::class, inversedBy: 'dsfa')] + #[ORM\JoinColumn(nullable: false)] + #[Assert\NotBlank] private $vvt; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="vVTDsfas") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'vVTDsfas')] + #[ORM\JoinColumn(nullable: false)] private $user; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="assignedDsfa") - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'assignedDsfa')] private $assignedUser; diff --git a/src/Entity/VVTGrundlage.php b/src/Entity/VVTGrundlage.php index 6d957c24..0a4abfa2 100644 --- a/src/Entity/VVTGrundlage.php +++ b/src/Entity/VVTGrundlage.php @@ -5,31 +5,21 @@ use App\Repository\VVTGrundlageRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=VVTGrundlageRepository::class) - */ +#[ORM\Entity(repositoryClass: VVTGrundlageRepository::class)] class VVTGrundlage { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: 'text')] private $name; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="vVTGrundlages") - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'vVTGrundlages')] private $team; public function getId(): ?int diff --git a/src/Entity/VVTPersonen.php b/src/Entity/VVTPersonen.php index 1765216e..a951177a 100644 --- a/src/Entity/VVTPersonen.php +++ b/src/Entity/VVTPersonen.php @@ -5,31 +5,21 @@ use App\Repository\VVTPersonenRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=VVTPersonenRepository::class) - */ +#[ORM\Entity(repositoryClass: VVTPersonenRepository::class)] class VVTPersonen { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: 'text')] private $name; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="vVTPersonens") - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'vVTPersonens')] private $team; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; public function getId(): ?int diff --git a/src/Entity/VVTRisiken.php b/src/Entity/VVTRisiken.php index 2c179fd6..52895b8c 100644 --- a/src/Entity/VVTRisiken.php +++ b/src/Entity/VVTRisiken.php @@ -5,31 +5,21 @@ use App\Repository\VVTRisikenRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=VVTRisikenRepository::class) - */ +#[ORM\Entity(repositoryClass: VVTRisikenRepository::class)] class VVTRisiken { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: 'text')] private $name; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="vVTRisikens") - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'vVTRisikens')] private $team; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; public function getId(): ?int diff --git a/src/Entity/VVTStatus.php b/src/Entity/VVTStatus.php index b6f305a1..7b863278 100644 --- a/src/Entity/VVTStatus.php +++ b/src/Entity/VVTStatus.php @@ -5,41 +5,27 @@ use App\Repository\VVTStatusRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=VVTStatusRepository::class) - */ +#[ORM\Entity(repositoryClass: VVTStatusRepository::class)] class VVTStatus { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: 'text')] private $name; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: 'text', nullable: true)] private $color; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $network; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="vVTStatuses") - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'vVTStatuses')] private $team; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ = true; public function getId(): ?int diff --git a/src/Entity/Vorfall.php b/src/Entity/Vorfall.php index cce87ef3..c2d2c476 100644 --- a/src/Entity/Vorfall.php +++ b/src/Entity/Vorfall.php @@ -8,112 +8,80 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=VorfallRepository::class) - */ +#[ORM\Entity(repositoryClass: VorfallRepository::class)] class Vorfall { - /** - * @ORM\Id() - * @ORM\GeneratedValue() - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private $id; /** - * @ORM\Column(type="text") * @Encrypted() */ + #[ORM\Column(type: 'text')] private $fakten; /** - * @ORM\Column(type="text") * @Encrypted() */ + #[ORM\Column(type: 'text')] private $auswirkung; /** - * @ORM\Column(type="text") * @Encrypted() */ + #[ORM\Column(type: 'text')] private $massnahmen; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $activ; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $createdAt; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: 'datetime')] private $datum; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $gemeldet; - /** - * @ORM\ManyToOne(targetEntity=Team::class, inversedBy="vorfalls") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Team::class, inversedBy: 'vorfalls')] + #[ORM\JoinColumn(nullable: false)] private $team; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="vorfalls") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'vorfalls')] + #[ORM\JoinColumn(nullable: false)] private $user; - /** - * @ORM\OneToOne(targetEntity=Vorfall::class, cascade={"persist", "remove"}) - */ + #[ORM\OneToOne(targetEntity: Vorfall::class, cascade: ['persist', 'remove'])] private $previous; /** - * @ORM\Column(type="text") * @Encrypted() */ + #[ORM\Column(type: 'text')] private $nummer; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $betroffeneGemeldet; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] private $auftraggeberGemeldet; - /** - * @ORM\ManyToMany(targetEntity=VVTPersonen::class) - */ + #[ORM\ManyToMany(targetEntity: VVTPersonen::class)] private $personen; - /** - * @ORM\ManyToMany(targetEntity=VVTDatenkategorie::class) - */ + #[ORM\ManyToMany(targetEntity: VVTDatenkategorie::class)] private $daten; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: 'boolean', nullable: true)] private $approved; - /** - * @ORM\ManyToOne(targetEntity=User::class) - */ + #[ORM\ManyToOne(targetEntity: User::class)] private $approvedBy; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="assignedVorfalls") - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'assignedVorfalls')] private $assignedUser; public function __construct() diff --git a/src/Form/Type/AbteilungType.php b/src/Form/Type/AbteilungType.php index d8fa1e4b..49c9c0ea 100644 --- a/src/Form/Type/AbteilungType.php +++ b/src/Form/Type/AbteilungType.php @@ -21,8 +21,8 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('name', TextType::class, ['label' => 'Neues Abteilung hinzufügen', 'required' => true, 'translation_domain' => 'form']) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('name', TextType::class, ['label' => 'newDepartment', 'required' => true, 'translation_domain' => 'form']) + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'save', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/AssignType.php b/src/Form/Type/AssignType.php index ed012196..b75e1019 100644 --- a/src/Form/Type/AssignType.php +++ b/src/Form/Type/AssignType.php @@ -30,7 +30,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'multiple' => false, 'required' => false ]) - ->add('submit', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-sm'), 'label' => 'Zuweisen', 'translation_domain' => 'form']); + ->add('submit', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-sm'), 'label' => 'assign', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/AuditTomType.php b/src/Form/Type/AuditTomType.php index df4aa91b..92ab9407 100644 --- a/src/Form/Type/AuditTomType.php +++ b/src/Form/Type/AuditTomType.php @@ -27,15 +27,15 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('frage', TextType::class, ['label' => 'Fragestellung', 'required' => true, 'translation_domain' => 'form']) - ->add('nummer', TextType::class, ['label' => 'AuditTom Nummer', 'required' => true, 'translation_domain' => 'form']) - ->add('bemerkung', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Bemerkung', 'required' => true, 'translation_domain' => 'form']) - ->add('empfehlung', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Empfehlung', 'required' => true, 'translation_domain' => 'form']) + ->add('frage', TextType::class, ['label' => 'question', 'required' => true, 'translation_domain' => 'form']) + ->add('nummer', TextType::class, ['label' => 'auditTomNumber', 'required' => true, 'translation_domain' => 'form']) + ->add('bemerkung', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'comment', 'required' => true, 'translation_domain' => 'form']) + ->add('empfehlung', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'recommendation', 'required' => true, 'translation_domain' => 'form']) ->add('ziele', EntityType::class, [ 'choice_label' => 'name', 'class' => AuditTomZiele::class, 'choices' => $options['ziele'], - 'label' => 'Schutzziele', + 'label' => 'auditGoals', 'translation_domain' => 'form', 'multiple' => true, 'attr' => [ @@ -47,7 +47,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'choice_label' => 'name', 'class' => AuditTomAbteilung::class, 'choices' => $options['abteilungen'], - 'label' => 'Abteilungen', + 'label' => 'departments', 'translation_domain' => 'form', 'multiple' => true, 'attr' => [ @@ -59,7 +59,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'choice_label' => 'name', 'class' => AuditTomStatus::class, 'choices' => $options['status'], - 'label' => 'Status', + 'label' => 'status', 'translation_domain' => 'form', 'multiple' => false, 'attr' => [ @@ -67,28 +67,28 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'data-live-search' => 'true' ], ]) - ->add('tomAttribut', TextType::class, ['label' => 'Attribut für die globale TOM', 'required' => false, 'translation_domain' => 'form']) + ->add('tomAttribut', TextType::class, ['label' => 'globalTomAttribute', 'required' => false, 'translation_domain' => 'form']) ->add('tomZiel', ChoiceType::class, [ 'choices' => [ - 'Bitte auswählen (Nicht in der TOM darstellen)' => null, - 'Pseudonymisierung Verschlüsselung' => 1, - 'Zutrittskontrolle' => 2, - 'Zugangskontrolle' => 3, - 'Zugriffskontrolle' => 4, - 'Benutzerkontrolle' => 5, - 'Speicherkontrolle' => 6, - 'Trennbarkeit' => 7, - 'Datenintegrität' => 8, - 'Transportkontrolle ' => 9, - 'Übertragungskontrolle' => 10, - 'Eingabekontrolle' => 11, - 'Zuverlässigkeit' => 12, - 'Auftragskontrolle' => 13, - 'Verfügbarkeitskontrolle' => 14, - 'Wiederherstellbarkeit' => 15, - 'Evaluierung' => 16, + 'nothingSelectedTomView' => null, + 'encryption' => 1, + 'physicalAccessControl' => 2, + 'authenticatedAccessControl' => 3, + 'privilegedAccessControl' => 4, + 'userControl' => 5, + 'storageControl' => 6, + 'separability' => 7, + 'dataIntegrity' => 8, + 'transportControl' => 9, + 'transferControl' => 10, + 'inputControl' => 11, + 'reliability' => 12, + 'assignmentControl' => 13, + 'availabilityControl' => 14, + 'recoverability' => 15, + 'evaluation' => 16, ], - 'label' => 'TOM Possition des Attributes', + 'label' => 'globalTomPosition', 'translation_domain' => 'form', 'required' => false, 'multiple' => false, @@ -99,34 +99,34 @@ public function buildForm(FormBuilderInterface $builder, array $options) ]) ->add('kategorie', ChoiceType::class, [ 'choices' => [ - 'Bitte auswählen' => '', - 'Datenschutzmanagement' => 'Datenschutzmanagement', - 'Verbindliche Vorlagen Datenschutz' => 'Verbindliche Vorlagen Datenschutz', - 'Arbeitsanweisungen' => 'Arbeitsanweisungen', - 'Notfallplanung und Dokumentation' => 'Notfallplanung und Dokumentation', - 'Bauliche Sicherheit' => 'Bauliche Sicherheit', - 'Video' => 'Video', - 'Authentifizierungen' => 'Authentifizierungen', - 'Berechtigungen' => 'Berechtigungen', - 'Logs' => 'Logs', - 'Backups' => 'Backups', - 'Datenvernichtung/ Löschen' => 'Datenvernichtung/ Löschen', - 'Übermittlung/ Transport' => 'Übermittlung/ Transport', - 'Fernwartung' => 'Fernwartung', - 'Mobile Geräte' => 'Mobile Geräte', - 'WLAN' => 'WLAN', - 'Marketing' => 'Marketing', - 'Cloud' => 'Cloud', - 'Archiv' => 'Archiv', - 'IT Sicherheit' => 'IT Sicherheit', + 'nothingSelected' => '', + 'privacyManagement' => 'privacyManagement', + 'privacyTemplates' => 'privacyTemplates', + 'instructions' => 'instructions', + 'emergencyPlanAndDocumentation' => 'emergencyPlanAndDocumentation', + 'structuralSafety' => 'structuralSafety', + 'video' => 'video', + 'authentications' => 'authentications', + 'privileges' => 'privileges', + 'logs' => 'logs', + 'backups' => 'backups', + 'deletion' => 'deletion', + 'transfer' => 'transfer', + 'remoteMaintenance' => 'remoteMaintenance', + 'mobileDevices' => 'mobileDevices', + 'wlan' => 'wlan', + 'marketing' => 'marketing', + 'cloud' => 'cloud', + 'archive' => 'archive', + 'ITSec' => 'ITSec', 'MFC' => 'MFC', - 'Serverraum' => 'Serverraum', - 'Mandantenfähigkeit' => 'Mandantenfähigkeit', - 'Compliance' => 'Compliance', + 'serverRoom' => 'serverRoom', + 'clientCapability' => 'clientCapability', + 'compliance' => 'compliance', 'GoBD' => 'GoBD', - 'Sonstiges' => 'Sonstiges', + 'other' => 'other', ], - 'label' => 'Kategorie', + 'label' => 'category', 'translation_domain' => 'form', 'required' => true, 'multiple' => false, @@ -136,7 +136,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) ], ]) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'save', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/ClientRequesCommentType.php b/src/Form/Type/ClientRequesCommentType.php index 182baf79..49e4c175 100644 --- a/src/Form/Type/ClientRequesCommentType.php +++ b/src/Form/Type/ClientRequesCommentType.php @@ -20,8 +20,8 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('comment', TextareaType::class, ['label' => 'Nachricht', 'required' => true, 'translation_domain' => 'form']) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-block mt-3'), 'label' => 'Senden', 'translation_domain' => 'form']); + ->add('comment', TextareaType::class, ['label' => 'message', 'required' => true, 'translation_domain' => 'form']) + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-block mt-3'), 'label' => 'send', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/ClientRequestInternalNoteType.php b/src/Form/Type/ClientRequestInternalNoteType.php index b89289e0..e5f370b2 100644 --- a/src/Form/Type/ClientRequestInternalNoteType.php +++ b/src/Form/Type/ClientRequestInternalNoteType.php @@ -21,8 +21,8 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('notes', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Interne Bemerkungen', 'required' => false, 'translation_domain' => 'form']) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-block mt-3'), 'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('notes', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'internalComment', 'required' => false, 'translation_domain' => 'form']) + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-block mt-3'), 'label' => 'save', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/DatenweitergabeType.php b/src/Form/Type/DatenweitergabeType.php index b0ea5d6b..a0063213 100644 --- a/src/Form/Type/DatenweitergabeType.php +++ b/src/Form/Type/DatenweitergabeType.php @@ -31,30 +31,30 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('gegenstand', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'Vertragsgegenstand', 'required' => true, 'translation_domain' => 'form', 'help' => 'Geben Sie hier den Gegenstand der Datenweitergabe oder Auftragsverarbeitung an. Der Gegenstand ist in den meisten Verträgen bereits in einem der ersten Paragraphen beschreiben und muss nur übernommen werden.']) - ->add('notes', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Bemerkungen', 'required' => false, 'translation_domain' => 'form']) - ->add('nummer', TextType::class, ['label' => 'Nummer der Datenweitergabe', 'required' => true, 'translation_domain' => 'form']) - ->add('verantwortlich', TextType::class, ['label' => 'Verantwortlich für die Datenweitergabe (Intern)', 'required' => true, 'translation_domain' => 'form']) - ->add('vertragsform', TextType::class, ['label' => 'Vertragsform', 'required' => true, 'translation_domain' => 'form']) - ->add('reference', TextType::class, ['label' => 'Aktenzeichen', 'required' => false, 'translation_domain' => 'form', 'help' => 'Hängen Sie den original Vertrag in einem Ordner ab. Geben Sie hier den Pfad zu diesem Lagerort oder das Aktenziech an, damit Sie das Dokument später wieder finden können.']) - ->add('zeichnungsdatum', DateType::class, ['label' => 'Zeichnungsdatum', 'required' => true, 'translation_domain' => 'form', 'widget' => 'single_text', 'help' => 'Ab wann ist die Datenweitergabe oder Auftragsverarbeitung unterschrieben. Geben Sie hier das Datum der Unterschrift an.']) - ->add('checkItems', CheckboxType::class, ['label' => 'Gegenstand und Dauer der Verarbeitung, Art und Zweck der Verarbeitung', 'required' => false, 'translation_domain' => 'form']) - ->add('checkPeople', CheckboxType::class, ['label' => 'Art der personenbezogenen Daten', 'required' => false, 'translation_domain' => 'form']) - ->add('checkData', CheckboxType::class, ['label' => 'Kategorien betroffener Personen', 'required' => false, 'translation_domain' => 'form']) - ->add('checkDocumentation', CheckboxType::class, ['label' => 'Verarbeitung auf dokumentierte Weisung des Verantwortlichen', 'required' => false, 'translation_domain' => 'form']) - ->add('checkTom', CheckboxType::class, ['label' => 'Ergreifen erforderlicher technischer und organisatorischer Maßnahmen', 'required' => false, 'translation_domain' => 'form']) - ->add('checkSubcontractor', CheckboxType::class, ['label' => 'Inanspruchnahme von Unterauftragnehmern nach Art. Art. 28 Abs. 2 und Abs. 4 DSGVO', 'required' => false, 'translation_domain' => 'form']) - ->add('checkTrust', CheckboxType::class, ['label' => 'Vertraulichkeitsverpflichtung', 'required' => false, 'translation_domain' => 'form']) - ->add('checkSupport', CheckboxType::class, ['label' => 'Unterstützung des Verantwortlichen bei der Beantwortung von Betroffenenanfragen', 'required' => false, 'translation_domain' => 'form']) - ->add('checkSupport3236', CheckboxType::class, ['label' => 'Unterstützung des Verantwortlichen bei den Pflichten nach Art. 32 – 36 DSGVO', 'required' => false, 'translation_domain' => 'form']) - ->add('checkNotes', CheckboxType::class, ['label' => 'Hinweispflicht', 'required' => false, 'translation_domain' => 'form']) - ->add('checkEnding', CheckboxType::class, ['label' => 'Umgang mit personenbezogenen Daten nach Beendigung der Auftragsverarbeitung', 'required' => false, 'translation_domain' => 'form']) - ->add('checkAudit', CheckboxType::class, ['label' => 'Zurverfügungstellung von Informationen und Ermöglichung von Überprüfungen', 'required' => false, 'translation_domain' => 'form']) + ->add('gegenstand', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'contractObject', 'required' => true, 'translation_domain' => 'form', 'help' => 'contractObjectHelp']) + ->add('notes', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'comments', 'required' => false, 'translation_domain' => 'form']) + ->add('nummer', TextType::class, ['label' => 'dataTransferNumber', 'required' => true, 'translation_domain' => 'form']) + ->add('verantwortlich', TextType::class, ['label' => 'responsibleParty', 'required' => true, 'translation_domain' => 'form']) + ->add('vertragsform', TextType::class, ['label' => 'contractType', 'required' => true, 'translation_domain' => 'form']) + ->add('reference', TextType::class, ['label' => 'reference', 'required' => false, 'translation_domain' => 'form', 'help' => 'referenceHelp']) + ->add('zeichnungsdatum', DateType::class, ['label' => 'signDate', 'required' => true, 'translation_domain' => 'form', 'widget' => 'single_text', 'help' => 'signDateHelp']) + ->add('checkItems', CheckboxType::class, ['label' => 'dataTransferParameters', 'required' => false, 'translation_domain' => 'form']) + ->add('checkPeople', CheckboxType::class, ['label' => 'personalDataType', 'required' => false, 'translation_domain' => 'form']) + ->add('checkData', CheckboxType::class, ['label' => 'affectedPersons', 'required' => false, 'translation_domain' => 'form']) + ->add('checkDocumentation', CheckboxType::class, ['label' => 'documentedInstructions', 'required' => false, 'translation_domain' => 'form']) + ->add('checkTom', CheckboxType::class, ['label' => 'technicalAndOrganisationalMeasures', 'required' => false, 'translation_domain' => 'form']) + ->add('checkSubcontractor', CheckboxType::class, ['label' => 'subcontractors', 'required' => false, 'translation_domain' => 'form']) + ->add('checkTrust', CheckboxType::class, ['label' => 'privacyObligation', 'required' => false, 'translation_domain' => 'form']) + ->add('checkSupport', CheckboxType::class, ['label' => 'supportWithInquiries', 'required' => false, 'translation_domain' => 'form']) + ->add('checkSupport3236', CheckboxType::class, ['label' => 'supportWithObligations', 'required' => false, 'translation_domain' => 'form']) + ->add('checkNotes', CheckboxType::class, ['label' => 'dutyToInform', 'required' => false, 'translation_domain' => 'form']) + ->add('checkEnding', CheckboxType::class, ['label' => 'handlingOfDataAfterProcessing', 'required' => false, 'translation_domain' => 'form']) + ->add('checkAudit', CheckboxType::class, ['label' => 'resources', 'required' => false, 'translation_domain' => 'form']) ->add('kontakt', EntityType::class, [ 'choice_label' => 'firma', 'class' => Kontakte::class, 'choices' => $options['kontakt'], - 'label' => 'Kontakt', + 'label' => 'contact', 'translation_domain' => 'form', 'multiple' => false, 'attr' => [ @@ -66,7 +66,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'choice_label' => 'name', 'class' => VVT::class, 'choices' => $options['verfahren'], - 'label' => 'Zugehörige Verarbeitungstätigkeit', + 'label' => 'relatedprocedure', 'translation_domain' => 'form', 'multiple' => true, 'required' => false, @@ -74,13 +74,13 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'class' => 'selectpicker', 'data-live-search' => 'true' ], - 'help' => 'Zu jeder Datenweitergabe und Auftragsverarbeitung muss mindestens eine Verarbeitung eingetragen werden, da die Datenweitergabe und Auftragsverarbeitung sonst kein Funktion erfüllt oder keine Verarbeitung nach der DSGVO darstellt.' + 'help' => 'relatedprocedureHelp' ]) ->add('stand', EntityType::class, [ 'choice_label' => 'name', 'class' => DatenweitergabeStand::class, 'choices' => $options['stand'], - 'label' => 'Status', + 'label' => 'status', 'translation_domain' => 'form', 'multiple' => false, 'attr' => [ @@ -91,20 +91,20 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'choice_label' => 'name', 'class' => DatenweitergabeGrundlagen::class, 'choices' => $options['grundlage'], - 'label' => 'Grundlage für die Verarbeitung', + 'label' => 'dataTransferBasis', 'translation_domain' => 'form', 'multiple' => false, 'attr' => [ 'class' => 'selectpicker', 'data-live-search' => 'true' ], - 'help' => 'Auf welcher Grundlage wird der Vertrag abgeschlossen. Nach der DSGVO stehen unterschiedliche Möglichkeiten zur Verfügung, die unterschiedlich betrachtet und bewertet werden müssen.' + 'help' => 'dataTransferBasisHelp' ]) ->add('software', EntityType::class, [ 'choice_label' => 'name', 'class' => Software::class, 'choices' => $options['software'], - 'label' => 'Software, die in der Weitergabe involviert ist', + 'label' => 'relatedSoftware', 'translation_domain' => 'form', 'multiple' => true, 'required' => false, @@ -116,12 +116,12 @@ public function buildForm(FormBuilderInterface $builder, array $options) ->add('uploadFile', VichImageType::class, [ 'required' => false, 'allow_delete' => false, - 'delete_label' => 'Löschen', - 'label' => 'Dokument zur Datenweitergabe hochladen', + 'delete_label' => 'delete', + 'label' => 'dataTransferDocument', 'translation_domain' => 'form', 'download_label' => false ]) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-block'), 'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-block'), 'label' => 'save', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/DeleteTeamType.php b/src/Form/Type/DeleteTeamType.php new file mode 100644 index 00000000..4b035439 --- /dev/null +++ b/src/Form/Type/DeleteTeamType.php @@ -0,0 +1,35 @@ +add('teamName',TextType::class,['required' => false, 'label' => 'confirmTeamName', 'help'=> 'confirmTeamNameHelp','translation_domain' => 'form']) + ->add('submit', SubmitType::class, ['attr' => array('class' => 'btn btn-danger'), 'label' => 'deleteTeam', 'translation_domain' => 'form']); + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults([ + + ]); + + } +} diff --git a/src/Form/Type/DsbType.php b/src/Form/Type/DsbType.php index 847c84bc..2202612d 100644 --- a/src/Form/Type/DsbType.php +++ b/src/Form/Type/DsbType.php @@ -21,8 +21,8 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('dsb', TextType::class, ['required' => false, 'label' => 'E-Mail Adresse des DSB angeben', 'help' => 'Wenn die E-Mail Adresse im diesem Datenschutzcenter noch nicht vorhanden ist, wird ein neues Konto angelegt und der Empfänger wird per E-Mail darüber informiert.', 'translation_domain' => 'form']) - ->add('submit', SubmitType::class, ['attr' => array('class' => 'btn btn-outline-primary'), 'label' => 'Ernennen', 'translation_domain' => 'form']); + ->add('dsb', TextType::class, ['required' => false, 'label' => 'dpoEmail', 'help' => 'dpoEmailHelp', 'translation_domain' => 'form']) + ->add('submit', SubmitType::class, ['attr' => array('class' => 'btn btn-outline-primary'), 'label' => 'appoint', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/FormsType.php b/src/Form/Type/FormsType.php index e2386a3a..1c4e4ed4 100644 --- a/src/Form/Type/FormsType.php +++ b/src/Form/Type/FormsType.php @@ -27,14 +27,14 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('title', TextType::class, ['label' => 'Titel', 'required' => true, 'translation_domain' => 'form']) - ->add('description', TextareaType::class, ['label' => 'Beschreibung', 'required' => false, 'translation_domain' => 'form']) - ->add('version', TextType::class, ['label' => 'Version', 'required' => true, 'translation_domain' => 'form']) + ->add('title', TextType::class, ['label' => 'title', 'required' => true, 'translation_domain' => 'form']) + ->add('description', TextareaType::class, ['label' => 'description', 'required' => false, 'translation_domain' => 'form']) + ->add('version', TextType::class, ['label' => 'version', 'required' => true, 'translation_domain' => 'form']) ->add('departments', EntityType::class, [ 'choice_label' => 'name', 'class' => AuditTomAbteilung::class, 'choices' => $options['departments'], - 'label' => 'Zugeordnete Abteilungen', + 'label' => 'relatedDepartments', 'translation_domain' => 'form', 'multiple' => true, 'required' => true, @@ -47,7 +47,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'choice_label' => 'name', 'class' => Produkte::class, 'choices' => $options['products'], - 'label' => 'Zugeordnete Produkte/Dienstleistungen', + 'label' => 'relatedProducts', 'translation_domain' => 'form', 'multiple' => true, 'required' => true, @@ -60,18 +60,18 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'required' => false, 'allow_delete' => false, 'delete_label' => 'Löschen', - 'label' => 'Formular hochladen', + 'label' => 'uploadForm', 'translation_domain' => 'form', 'download_label' => false ]) ->add('status', ChoiceType::class, [ 'choices' => [ - 'Angelegt' => 0, - 'In Bearbeitung' => 1, - 'Prüfung' => 2, - 'Zur Freigabe vorgelegt' => 3, - 'Veraltet' => 4,], - 'label' => 'Status', + 'created' => 0, + 'inProgress' => 1, + 'inReview' => 2, + 'submitted' => 3, + 'outdated' => 4,], + 'label' => 'status', 'translation_domain' => 'form', 'multiple' => false, 'attr' => [ @@ -79,7 +79,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'data-live-search' => 'true' ] ]) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-block mt-3'), 'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-block mt-3'), 'label' => 'save', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/KontaktType.php b/src/Form/Type/KontaktType.php index 520b7dc7..32fab5ed 100644 --- a/src/Form/Type/KontaktType.php +++ b/src/Form/Type/KontaktType.php @@ -27,24 +27,24 @@ public function buildForm(FormBuilderInterface $builder, array $options) $builder ->add('art', ChoiceType::class, [ 'choices' => [ - 'Auftraggeber' => 1, - 'Auftragnehmer' => 2,], - 'label'=>'Funktion des Kontakts', + 'client' => 1, + 'contractor' => 2,], + 'label'=>'contactFunction', 'translation_domain' => 'form', 'multiple' =>false, ]) - ->add('firma', TextType::class, ['label' => 'Firma', 'required' => true, 'translation_domain' => 'form']) - ->add('nummer', TextType::class, ['label' => 'Nummer', 'required' => false, 'translation_domain' => 'form']) - ->add('anrede', TextType::class, ['label' => 'Anrede', 'required' => false, 'translation_domain' => 'form']) - ->add('vorname', TextType::class, ['label' => 'Vorname', 'required' => false, 'translation_domain' => 'form']) - ->add('nachname', TextType::class, ['label' => 'Nachname', 'required' => true, 'translation_domain' => 'form']) - ->add('strase', TextType::class, ['label' => 'Straße', 'required' => true, 'translation_domain' => 'form']) - ->add('plz', TextType::class, ['label' => 'PLZ', 'required' => true, 'translation_domain' => 'form']) - ->add('ort', TextType::class, ['label' => 'Ort', 'required' => true, 'translation_domain' => 'form']) - ->add('email', TextType::class, ['label' => 'E-Mail', 'required' => false, 'translation_domain' => 'form']) - ->add('telefon', TextType::class, ['label' => 'Telefon', 'required' => false, 'translation_domain' => 'form']) - ->add('bemerkung', TextareaType::class, ['label' => 'Bemerkung', 'required' => false, 'translation_domain' => 'form']) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('firma', TextType::class, ['label' => 'company', 'required' => true, 'translation_domain' => 'form']) + ->add('nummer', TextType::class, ['label' => 'number', 'required' => false, 'translation_domain' => 'form']) + ->add('anrede', TextType::class, ['label' => 'salutation', 'required' => false, 'translation_domain' => 'form']) + ->add('vorname', TextType::class, ['label' => 'firstName', 'required' => false, 'translation_domain' => 'form']) + ->add('nachname', TextType::class, ['label' => 'lastName', 'required' => true, 'translation_domain' => 'form']) + ->add('strase', TextType::class, ['label' => 'street', 'required' => true, 'translation_domain' => 'form']) + ->add('plz', TextType::class, ['label' => 'postcode', 'required' => true, 'translation_domain' => 'form']) + ->add('ort', TextType::class, ['label' => 'city', 'required' => true, 'translation_domain' => 'form']) + ->add('email', TextType::class, ['label' => 'email', 'required' => false, 'translation_domain' => 'form']) + ->add('telefon', TextType::class, ['label' => 'phone', 'required' => false, 'translation_domain' => 'form']) + ->add('bemerkung', TextareaType::class, ['label' => 'comment', 'required' => false, 'translation_domain' => 'form']) + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'save', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/KursType.php b/src/Form/Type/KursType.php index d51600b4..c1e116c8 100644 --- a/src/Form/Type/KursType.php +++ b/src/Form/Type/KursType.php @@ -9,42 +9,103 @@ namespace App\Form\Type; use App\Entity\AkademieKurse; +use App\Entity\Questionnaire; +use App\Entity\Team; +use App\Form\Type\Template\BaseType; +use App\Repository\QuestionnaireRepository; +use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\OptionsResolver\Options; use Symfony\Component\OptionsResolver\OptionsResolver; -class KursType extends AbstractType +class KursType extends BaseType { + private static string $TRANSLATION_DOMAIN = 'academy'; + private static string $BASE_LABEL = 'lesson.'; + public function buildForm(FormBuilderInterface $builder, array $options) { + $builder->add( + 'title', + TextType::class, + $this->getOptions('title', domain: 'general'), + ); + $builder->add( + 'video', + TextType::class, + $this->getOptions(self::$BASE_LABEL . 'video.link'), + ); - $builder - ->add('title', TextType::class, ['label' => 'Titel', 'required' => true, 'translation_domain' => 'form']) - ->add('video', TextType::class, ['label' => 'Videolink', 'required' => true, 'translation_domain' => 'form']) - ->add('type', ChoiceType::class, [ - 'choices' => [ - 'Lokal/Cloud Storage oder CDN' => 0, - 'Vimeo' => 1,], - 'label' => 'Videotyp angeben', - 'translation_domain' => 'form', - 'multiple' => false, - 'required' => true, - 'attr' => [ - 'class' => 'selectpicker', + $builder->add( + 'type', + ChoiceType::class, + $this->getOptions( + label: self::$BASE_LABEL . 'video.type', + additionalOptions: [ + 'choices' => [ + 'Lokal/Cloud Storage oder CDN' => 0, + 'Vimeo' => 1, + ], + 'multiple' => false, + 'attr' => [ + 'class' => 'selectpicker', + ], + ], + ), + ); + $builder->add( + 'beschreibung', + TextareaType::class, + $this->getOptions( + label: 'description', + domain: 'general', + additionalOptions: [ + 'attr' => ['rows' => 12], ], - ]) - ->add('beschreibung', TextareaType::class, ['attr' => ['rows' => 12], 'label' => 'Beschreibung', 'required' => true, 'translation_domain' => 'form']) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'Speichern', 'translation_domain' => 'form']); + ), + ); + $builder->add( + 'questionnaire', + EntityType::class, + $this->getOptions( + label: 'questionnaire.word', + additionalOptions: [ + 'class' => Questionnaire::class, + 'choice_label' => 'label', + 'query_builder' => function (QuestionnaireRepository $repo) use ($options) { + return $repo->createQueryBuilder('q') + ->where('q.team = :team') + ->setParameter('team', $options['data']->getTeam()); + } + ] + ), + ); + $builder->add( + 'save', + SubmitType::class, + [ + 'label' => 'save', + 'translation_domain' => 'general', + 'attr' => ['class' => 'btn btn-primary'], + ], + ); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => AkademieKurse::class, + 'team' => new Team(), ]); } + + protected function getDefaultDomain(): string + { + return self::$TRANSLATION_DOMAIN; + } } diff --git a/src/Form/Type/LoeschkonzeptType.php b/src/Form/Type/LoeschkonzeptType.php index d230b45d..14b410c7 100644 --- a/src/Form/Type/LoeschkonzeptType.php +++ b/src/Form/Type/LoeschkonzeptType.php @@ -26,7 +26,7 @@ public function buildForm(FormBuilderInterface $builder, array $options): void ->add('vvtdatenkategories', EntityType::class, [ 'class' => VVTDatenkategorie::class, 'choices' => $options['vvtdatenkategories'], - 'label' => 'Datenkategorien', + 'label' => 'dataCategories', 'multiple' => true, 'required' => false, 'translation_domain' => 'form', @@ -37,35 +37,35 @@ public function buildForm(FormBuilderInterface $builder, array $options): void ]) ->add('standartlf', TextareaType::class, [ - 'label' => 'Standard Löschfrist', + 'label' => 'standardDeleteDeadline', 'required' => true, 'translation_domain' => 'form', - 'help' => 'Hier wird die Löschfrist eingetragen, die unternehmensintern für die ausgewählten Datenkategorien festgelegt wurde. Sie kann kürzer sein, als es das Gesetz fordert, darf die gesetzlichen Frist aber nicht überschreiten. Gibt es eine gesetzliche Mindest-Speicherdauer, darf die Standard Löschfrsit diese nicht unterschreiten. Existiert keine gesetzliche Vorgabe wird unternehmensintern eine Löschfrist festgelegt. Diese Löschfrist wird auch an anderen Stellen angezeigt.' + 'help' => 'standardDeleteDeadline' ]) ->add('loeschfrist', TextareaType::class, [ - 'label' => 'gesetzliche Löschfrist', + 'label' => 'legalDeleteDeadline', 'required' => false, 'translation_domain' => 'form', - 'help' => 'Sollte es eine gesetzliche Grundlage zur maximalen oder minimalen Speicherdauer geben, ist diese maximale oder minimale Löschfrist hier einzutragen.' + 'help' => 'legalDeleteDeadlineHelp' ]) ->add('speicherorte', TextareaType::class, [ - 'label' => 'Speicherorte', + 'label' => 'dataStorageLocations', 'required' => true, 'translation_domain' => 'form', - 'help' => 'Hier sind alle Orte, an denen Daten der betroffenen Kategorien gespeichert sind, anzugeben. Auch Auftragsverarbeiter können hier als Speicherort mit eingetragen werden.' + 'help' => 'dataStorageLocationsHelp' ]) ->add('loeschbeauftragter', TextareaType::class, [ - 'label' => 'Löschbeauftragter', + 'label' => 'deleteOfficial', 'required' => true, 'translation_domain' => 'form', - 'help' => 'Hier kann eine Löschbeauftragter namentlich benannt oder eine Gruppe/Abteilung als Verantwortlicher eingetragen werden' + 'help' => 'deleteOfficialHelp' ]) ->add('beschreibung', TextareaType::class, [ 'attr' => ['rows' => 10], - 'label' => 'Beschreibung', + 'label' => 'deleteDescription', 'required' => false, 'translation_domain' => 'form', - 'help' => 'Die Beschreibung soll zur Dokumentation von Löschabläufen, Frist-Begründungen, Ausnahmen, Spezialfällen und weiteren Informationsdokumentationen dienen.' + 'help' => 'deleteDescriptionHelp' ]) ; } diff --git a/src/Form/Type/NewMemberType.php b/src/Form/Type/NewMemberType.php index 1dd29c26..a5e0b545 100644 --- a/src/Form/Type/NewMemberType.php +++ b/src/Form/Type/NewMemberType.php @@ -12,7 +12,6 @@ use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; -use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -22,8 +21,8 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('member',TextareaType::class,['required' => false, 'label' => 'E-Mail Adresse von neuem Teammitglied eingeben', 'help'=> 'Es können mehrere Mitglieder auf einmal hinzugefügt werden. Jede E-Mail Adresse muss in eine neue Zeile schreiben. Wenn die E-Mail Adresse im diesem Datenschutzcenter noch nicht vorhanden ist, wird ein neues Konto angelegt und der Empfänger wird per E-Mail darüber informiert.','translation_domain' => 'form']) - ->add('submit', SubmitType::class, ['attr' => array('class' => 'btn btn-outline-primary'), 'label' => 'Mitglied(er) Hinzufügen', 'translation_domain' => 'form']); + ->add('member',TextareaType::class,['required' => false, 'label' => 'newMemberEmail', 'help'=> 'newMemberEmailHelp','translation_domain' => 'form']) + ->add('submit', SubmitType::class, ['attr' => array('class' => 'btn btn-outline-primary'), 'label' => 'addMembers', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/NewType.php b/src/Form/Type/NewType.php index 4b65ef58..260e6564 100644 --- a/src/Form/Type/NewType.php +++ b/src/Form/Type/NewType.php @@ -21,8 +21,8 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('name', TextType::class, ['label' => 'Neu', 'required' => true, 'translation_domain' => 'form']) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'), 'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('name', TextType::class, ['label' => 'new', 'required' => true, 'translation_domain' => 'form']) + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'), 'label' => 'save', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/PolicyType.php b/src/Form/Type/PolicyType.php index 3a79689c..47d7a523 100644 --- a/src/Form/Type/PolicyType.php +++ b/src/Form/Type/PolicyType.php @@ -29,16 +29,16 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('title', TextType::class, ['label' => 'Name der Richtlinie', 'required' => true, 'translation_domain' => 'form']) - ->add('scope', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Festlegung des Geltungsbereiches', 'required' => true, 'translation_domain' => 'form']) - ->add('risk', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Abzuwehrende IT-Risiken, bestehende Gefahren und mögliche Konsequenzen (wichtig für die Motivation!)', 'required' => true, 'translation_domain' => 'form']) - ->add('foundation', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Bezug zu Gesetzen, Verordnungen und Standards', 'required' => true, 'translation_domain' => 'form']) - ->add('reference', TextType::class, ['label' => 'Aktenzeichen', 'required' => false, 'translation_domain' => 'form']) + ->add('title', TextType::class, ['label' => 'policyName', 'required' => true, 'translation_domain' => 'form']) + ->add('scope', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'policyScope', 'required' => true, 'translation_domain' => 'form']) + ->add('risk', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'policyPotentialDangers', 'required' => true, 'translation_domain' => 'form']) + ->add('foundation', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'policyLegislation', 'required' => true, 'translation_domain' => 'form']) + ->add('reference', TextType::class, ['label' => 'fileNumber', 'required' => false, 'translation_domain' => 'form']) ->add('processes', EntityType::class, [ 'choice_label' => 'name', 'class' => VVT::class, 'choices' => $options['processes'], - 'label' => 'Betroffene Arbeitsvorgänge und Fachverfahren', + 'label' => 'affectedProcesses', 'translation_domain' => 'form', 'multiple' => true, 'required' => true, @@ -48,15 +48,15 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'data-live-search' => 'true' ] ]) - ->add('protection', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Zu ergreifende Schutzmaßnahmen in kurzer, verständlicher Form', 'required' => false, 'translation_domain' => 'form']) - ->add('notes', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Hinweis auf Schulungsangebotet', 'required' => false, 'translation_domain' => 'form']) - ->add('consequences', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Konsequenzen bei Nichtbeachtung der Sicherheitsrichtlinie', 'required' => false, 'translation_domain' => 'form']) - ->add('contact', TextareaType::class, ['attr' => ['row' => 5], 'label' => 'Kontaktdaten von IT-Sicherheitsverantwortlichen und Datenschutzbeauftragten', 'required' => false, 'translation_domain' => 'form']) + ->add('protection', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'policySafetyMeasures', 'required' => false, 'translation_domain' => 'form']) + ->add('notes', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'policyTrainingOffer', 'required' => false, 'translation_domain' => 'form']) + ->add('consequences', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'policyNoncomplianceConsequences', 'required' => false, 'translation_domain' => 'form']) + ->add('contact', TextareaType::class, ['attr' => ['row' => 5], 'label' => 'policyContacts', 'required' => false, 'translation_domain' => 'form']) ->add('people', EntityType::class, [ 'choice_label' => 'name', 'class' => VVTPersonen::class, 'choices' => $options['personen'], - 'label' => 'Die Daten welcher Personen werden verarbeitet?', + 'label' => 'affectedPersons', 'translation_domain' => 'form', 'multiple' => true, 'expanded' => false, @@ -69,7 +69,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'choice_label' => 'name', 'class' => VVTDatenkategorie::class, 'choices' => $options['kategorien'], - 'label' => 'Betroffene Datenkategorien sind betroffen', + 'label' => 'affectedDataCategories', 'translation_domain' => 'form', 'multiple' => true, 'expanded' => false, @@ -82,7 +82,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'choice_label' => 'email', 'class' => User::class, 'choices' => $options['user'], - 'label' => 'Konkrete Verantwortlichkeiten für die Schutzmaßnahmen', + 'label' => 'responsibilitiesForSafetyMeasures', 'translation_domain' => 'form', 'multiple' => false, 'attr' => [ @@ -92,12 +92,12 @@ public function buildForm(FormBuilderInterface $builder, array $options) ]) ->add('status', ChoiceType::class, [ 'choices' => [ - 'Angelegt' => 0, - 'In Bearbeitung' => 1, - 'Prüfung' => 2, - 'Zur Freigabe vorgelegt' => 3, - 'Veraltet' => 4,], - 'label' => 'Status', + 'created' => 0, + 'inProgress' => 1, + 'inReview' => 2, + 'submitted' => 3, + 'outdated' => 4,], + 'label' => 'status', 'translation_domain' => 'form', 'multiple' => false, 'attr' => [ @@ -108,12 +108,12 @@ public function buildForm(FormBuilderInterface $builder, array $options) ->add('uploadFile', VichImageType::class, [ 'required' => false, 'allow_delete' => false, - 'delete_label' => 'Löschen', - 'label' => 'Dokument zur Richtlinie hochladen', + 'delete_label' => 'delete', + 'label' => 'policyDocument', 'translation_domain' => 'form', 'download_label' => false ]) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'), 'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'), 'label' => 'save', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/Questionnaire/AnswerType.php b/src/Form/Type/Questionnaire/AnswerType.php new file mode 100644 index 00000000..37331b2f --- /dev/null +++ b/src/Form/Type/Questionnaire/AnswerType.php @@ -0,0 +1,46 @@ +add( + 'label', + TextType::class, + $this->getOptions(self::$BASE_LABEL . 'label'), + ); + + $builder->add( + 'isCorrect', + CheckboxType::class, + $this->getOptions(self::$BASE_LABEL . 'isCorrect', false), + ); + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults( + [ + 'data_class' => Answer::class, + ], + ); + } + + protected function getDefaultDomain(): string + { + return self::$TRANSLATION_DOMAIN; + } +} \ No newline at end of file diff --git a/src/Form/Type/Questionnaire/Question/DynamicQuestionType.php b/src/Form/Type/Questionnaire/Question/DynamicQuestionType.php new file mode 100644 index 00000000..55684eae --- /dev/null +++ b/src/Form/Type/Questionnaire/Question/DynamicQuestionType.php @@ -0,0 +1,63 @@ +getAnswers()->toArray(); + shuffle($answers); + + + $builder->add( + (string)$question->getId(), + ChoiceType::class, + [ + 'label' => $question->getHint() ?? false, + 'required' => true, + 'expanded' => true, + 'choices' => $answers, + 'choice_value' => 'id', + 'choice_label' => 'label', + 'multiple' => $question->getType() === QuestionTypes::CHECKBOX, + ], + ); + + $builder->add( + 'continue', + SubmitType::class, + [ + 'attr' => [ + 'class' => 'btn btn-primary' + ], + 'label' => 'continue', + 'translation_domain' => 'general', + ] + ); + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults( + [ + 'question' => new Question(), + ], + ); + } +} \ No newline at end of file diff --git a/src/Form/Type/Questionnaire/QuestionType.php b/src/Form/Type/Questionnaire/QuestionType.php new file mode 100644 index 00000000..b94fedb6 --- /dev/null +++ b/src/Form/Type/Questionnaire/QuestionType.php @@ -0,0 +1,106 @@ +add( + 'label', + TextType::class, + $this->getOptions(self::$BASE_LABEL . 'label'), + ); + + $builder->add( + 'evalValue', + PercentType::class, + $this->getOptions(self::$BASE_LABEL . 'evaluationValue'), + ); + + $builder->add( + 'hint', + TextType::class, + $this->getOptions(self::$BASE_LABEL . 'hint', false), + ); + + $builder->add( + 'type', + ChoiceType::class, + $this->getOptions( + self::$BASE_LABEL . 'type.word', + additionalOptions: [ + 'choices' => [ + $this->translator->trans( + self::$BASE_LABEL . 'type.checkbox', + domain: self::$TRANSLATION_DOMAIN + ) => QuestionTypes::CHECKBOX, + $this->translator->trans( + self::$BASE_LABEL . 'type.radio', + domain: self::$TRANSLATION_DOMAIN + ) => QuestionTypes::RADIO, + ] + ] + ) + ); + + $builder->add( + 'answers', + CollectionType::class, + options: [ + 'label' => false, + 'entry_type' => AnswerType::class, + 'entry_options' => ['label' => false], + 'allow_add' => true, + 'allow_delete' => true, + 'by_reference' => false, + ] + ); + + $builder->add( + 'save', + SubmitType::class, + [ + 'attr' => [ + 'class' => 'btn btn-primary' + ], + 'label' => 'save.word', + 'translation_domain' => 'general', + ] + ); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults( + [ + 'data_class' => Question::class, + ], + ); + } + + protected function getDefaultDomain(): string + { + return self::$TRANSLATION_DOMAIN; + } +} \ No newline at end of file diff --git a/src/Form/Type/Questionnaire/QuestionnaireType.php b/src/Form/Type/Questionnaire/QuestionnaireType.php new file mode 100644 index 00000000..9c1ae278 --- /dev/null +++ b/src/Form/Type/Questionnaire/QuestionnaireType.php @@ -0,0 +1,70 @@ +add( + 'label', + TextType::class, + $this->getOptions(self::$BASE_LABEL.'label'), + ); + + $builder->add( + 'description', + TextareaType::class, + $this->getOptions( + self::$BASE_LABEL.'description', + false, + ), + ); + + $builder->add( + 'percentageToPass', + PercentType::class, + $this->getOptions(self::$BASE_LABEL.'percentageToPass') + ); + + $builder->add( + 'save', + SubmitType::class, + [ + 'attr' => [ + 'class' => 'btn btn-primary' + ], + 'label' => 'save.word', + 'translation_domain' => 'general', + ] + ); + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults( + [ + 'data_class' => Questionnaire::class, + ], + ); + } + + protected function getDefaultDomain(): string + { + return self::$TRANSLATION_DOMAIN; + } +} \ No newline at end of file diff --git a/src/Form/Type/ReportType.php b/src/Form/Type/ReportType.php index 082cbc65..40f91478 100644 --- a/src/Form/Type/ReportType.php +++ b/src/Form/Type/ReportType.php @@ -27,12 +27,12 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('description', TextareaType::class, ['attr' => ['rows' => 12], 'label' => 'Beschreibung', 'required' => true, 'translation_domain' => 'form']) + ->add('description', TextareaType::class, ['attr' => ['rows' => 12], 'label' => 'description', 'required' => true, 'translation_domain' => 'form']) ->add('user', EntityType::class, [ 'choice_label' => 'email', 'class' => User::class, 'choices' => $options['user'], - 'label' => 'User', + 'label' => 'user', 'translation_domain' => 'form', 'multiple' => false, 'required' => true, @@ -41,14 +41,14 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'data-live-search' => 'true' ], ]) - ->add('date', DateType::class, ['label' => 'Datum', 'widget' => 'single_text', 'required' => true, 'translation_domain' => 'form']) - ->add('start', TimeType::class, ['label' => 'Startzeit', 'required' => true, 'translation_domain' => 'form']) - ->add('end', TimeType::class, ['label' => 'Endzeit', 'required' => true, 'translation_domain' => 'form']) - ->add('calcTime', TextType::class, ['label' => 'Abrechenbare Zeit in Minuten', 'required' => true, 'translation_domain' => 'form']) - ->add('invoice', CheckboxType::class, ['label' => 'Abgerechnet', 'required' => false, 'translation_domain' => 'form']) - ->add('inReport', CheckboxType::class, ['label' => 'Im Report anzeigen', 'required' => false, 'translation_domain' => 'form']) - ->add('onsite', CheckboxType::class, ['label' => 'Vor Ort', 'required' => false, 'translation_domain' => 'form']) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-block mt-3'), 'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('date', DateType::class, ['label' => 'date', 'widget' => 'single_text', 'required' => true, 'translation_domain' => 'form']) + ->add('start', TimeType::class, ['label' => 'startTime', 'required' => true, 'translation_domain' => 'form']) + ->add('end', TimeType::class, ['label' => 'endTime', 'required' => true, 'translation_domain' => 'form']) + ->add('calcTime', TextType::class, ['label' => 'billableTime', 'required' => true, 'translation_domain' => 'form']) + ->add('invoice', CheckboxType::class, ['label' => 'billed', 'required' => false, 'translation_domain' => 'form']) + ->add('inReport', CheckboxType::class, ['label' => 'showInReport', 'required' => false, 'translation_domain' => 'form']) + ->add('onsite', CheckboxType::class, ['label' => 'onSite', 'required' => false, 'translation_domain' => 'form']) + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-block mt-3'), 'label' => 'save', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/SettingsType.php b/src/Form/Type/SettingsType.php new file mode 100644 index 00000000..3f852801 --- /dev/null +++ b/src/Form/Type/SettingsType.php @@ -0,0 +1,41 @@ +add('useKeycloakGroups', CheckboxType::class, ['label' => 'useKeycloakGroups', 'help'=> 'useKeycloakGroupsHelp', 'required' => false, 'translation_domain' => 'form']) + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'save', 'translation_domain' => 'form']); + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults([ + 'data_class' => Settings::class + ]); + } +} diff --git a/src/Form/Type/SoftwareType.php b/src/Form/Type/SoftwareType.php index 5d75db8a..754752c4 100644 --- a/src/Form/Type/SoftwareType.php +++ b/src/Form/Type/SoftwareType.php @@ -27,32 +27,32 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('name', TextType::class, ['label' => 'Name der Software', 'required' => true, 'translation_domain' => 'form']) - ->add('nummer', TextType::class, ['label' => 'Software Nummer', 'required' => false, 'translation_domain' => 'form']) - ->add('description', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'Beschreibung der Software', 'required' => true, 'translation_domain' => 'form']) + ->add('name', TextType::class, ['label' => 'softwareName', 'required' => true, 'translation_domain' => 'form']) + ->add('nummer', TextType::class, ['label' => 'softwareNumber', 'required' => false, 'translation_domain' => 'form']) + ->add('description', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'softwareDescription', 'required' => true, 'translation_domain' => 'form']) ->add('licenseType', ChoiceType::class, [ 'choices' => [ - 'Keine Angabe' => 0, - 'Free and Open Source (FOSS)' => 10, - 'Kostenlos/Closed Source' => 20, - 'Benutzerlizenzen' => 30, - 'Gerätelizenzen' => 40, - 'Serverlizenzen' => 50, - 'Managed Service' => 60, - 'Misch-Lizenzen' => 70, - 'Andere Lizenz' => 90,], - 'label' => 'Lizenz Typ', + 'notSpecified' => 0, + 'openSource' => 10, + 'closedSource' => 20, + 'userLicence' => 30, + 'deviceLicence' => 40, + 'serverLicence' => 50, + 'managedService' => 60, + 'mixedLicence' => 70, + 'otherLicence' => 90,], + 'label' => 'licenceType', 'translation_domain' => 'form', 'multiple' => false, ]) - ->add('license', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'Lizenzbeschreibung', 'required' => false, 'translation_domain' => 'form']) - ->add('licenseExpiration', DateType::class, ['label' => 'Lizenzablaufsdatum', 'required' => false, 'translation_domain' => 'form', 'widget' => 'single_text']) - ->add('reference', TextType::class, ['label' => 'Aktenzeichen', 'required' => false, 'translation_domain' => 'form']) + ->add('license', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'licenceDescription', 'required' => false, 'translation_domain' => 'form']) + ->add('licenseExpiration', DateType::class, ['label' => 'expirationDate', 'required' => false, 'translation_domain' => 'form', 'widget' => 'single_text']) + ->add('reference', TextType::class, ['label' => 'softwareReference', 'required' => false, 'translation_domain' => 'form']) ->add('vvts', EntityType::class, [ 'choice_label' => 'name', 'class' => VVT::class, 'choices' => $options['processes'], - 'label' => 'Mit dieser Software verbundene Verarbeitungen', + 'label' => 'relatedProcesses', 'translation_domain' => 'form', 'multiple' => true, 'required' => false, @@ -65,7 +65,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'choice_label' => 'gegenstand', 'class' => Datenweitergabe::class, 'choices' => $options['datenweitergabe'], - 'label' => 'Mit dieser Software verbundene Datenweitergaben', + 'label' => 'relatedDataTransfers', 'translation_domain' => 'form', 'multiple' => true, 'required' => false, @@ -74,25 +74,25 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'data-live-search' => 'true' ], ]) - ->add('purchase', DateType::class, ['label' => 'Kaufdatum/Anschaffungsdatum', 'required' => false, 'translation_domain' => 'form', 'widget' => 'single_text']) - ->add('build', TextType::class, ['label' => 'Version', 'required' => true, 'translation_domain' => 'form']) + ->add('purchase', DateType::class, ['label' => 'purchaseDate', 'required' => false, 'translation_domain' => 'form', 'widget' => 'single_text']) + ->add('build', TextType::class, ['label' => 'version', 'required' => true, 'translation_domain' => 'form']) ->add('status', ChoiceType::class, [ 'choices' => [ - 'Angelegt' => 0, - 'In Bearbeitung' => 10, - 'In Prüfung' => 20, - 'Zur Freigegebe vorgelegt' => 30, - 'Inaktiv' => 60,], - 'label' => 'Status', + 'created' => 0, + 'inProgress' => 10, + 'inReview' => 20, + 'submitted' => 30, + 'inactive' => 60,], + 'label' => 'status', 'translation_domain' => 'form', 'multiple' => false, - 'help' => 'Software mit dem Status Inaktiv wird nicht mehr auf dem Datenflussplan angezeigt.' + 'help' => 'softwareStatusHelp' ]) - ->add('location', TextType::class, ['label' => 'Standort der Software', 'required' => false, 'translation_domain' => 'form']) - ->add('archiving', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'Archivierungskonzept/Backup', 'required' => false, 'translation_domain' => 'form', 'help' => 'Das Archivierungskonzept kann ausgefüllt werden, um zu dokumentieren, wie, wo und nach welchem Vorgehen die Daten archiviert werden. Es handelt sich bei dem Archivierungskonzept nicht um das Löschkonzept. Die Angabe ist vor allem für ein vollständiges Informationsmanagmeentsystem wichtig.']) - ->add('recovery', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'Notfallplanung und Widerherstellungskonzept', 'required' => false, 'translation_domain' => 'form', 'help' => 'Der Notfallplan ist die Dokumentation der Backup und Wiederherstellungsschritte im Falle eines Notfalls. Die Angabe ist vor allem für ein vollständiges Informationsmanagmeentsystem wichtig.']) - ->add('permissions', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'Berechtigungskonzept', 'required' => false, 'translation_domain' => 'form', 'help' => 'Im Berechtigungskonzept kann dokumentiert werden, wie die Berechtigungen vergeben und kontrolliert werden und wie die Berechtigungsstruktur aufgebaut ist. Je nach Anwendung kann beschrieben werden wo die Benutzer gespeichert werden. Die Angabe ist vor allem für ein vollständiges Informationsmanagmeentsystem wichtig.']) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'), 'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('location', TextType::class, ['label' => 'softwareLocation', 'required' => false, 'translation_domain' => 'form']) + ->add('archiving', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'backupPolicy', 'required' => false, 'translation_domain' => 'form', 'help' => 'backupPolicyHelp']) + ->add('recovery', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'emergencyPlan', 'required' => false, 'translation_domain' => 'form', 'help' => 'emergencyPlanHelp']) + ->add('permissions', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'privilegePolicy', 'required' => false, 'translation_domain' => 'form', 'help' => 'privilegePolicyHelp']) + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'), 'label' => 'save', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/TasksType.php b/src/Form/Type/TasksType.php index 632979f0..fdbdb5d3 100644 --- a/src/Form/Type/TasksType.php +++ b/src/Form/Type/TasksType.php @@ -26,17 +26,17 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('title', TextType::class, ['label' => 'Titel', 'required' => true, 'translation_domain' => 'form']) - ->add('task', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Beschreibung der Aufgabe', 'required' => true, 'translation_domain' => 'form']) - ->add('endDate', DateType::class, ['label' => 'Enddatum', 'widget' => 'single_text', 'required' => false, 'translation_domain' => 'form']) + ->add('title', TextType::class, ['label' => 'title', 'required' => true, 'translation_domain' => 'form']) + ->add('task', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'taskDescription', 'required' => true, 'translation_domain' => 'form']) + ->add('endDate', DateType::class, ['label' => 'endDate', 'widget' => 'single_text', 'required' => false, 'translation_domain' => 'form']) ->add('prio', ChoiceType::class, [ 'choices' => [ - 'Ohne Priorität' => 0, - 'Wenig Wichtig' => 1, - 'Normal' => 2, - 'Wichtig' => 3, - 'Sehr wichtig' => 4,], - 'label' => 'Priorität', + 'noPriority' => 0, + 'lowPriority' => 1, + 'normalPriority' => 2, + 'highPriority' => 3, + 'veryHighPriority' => 4,], + 'label' => 'priority', 'translation_domain' => 'form', 'multiple' => false, 'attr' => [ @@ -47,7 +47,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'choice_label' => 'email', 'class' => User::class, 'choices' => $options['user'], - 'label' => 'Aufgabe zuweisen', + 'label' => 'assignTask', 'translation_domain' => 'form', 'multiple' => false, 'required' => false, @@ -56,7 +56,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'data-live-search' => 'true' ], ]) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-block mt-3'), 'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-block mt-3'), 'label' => 'save', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/TeamType.php b/src/Form/Type/TeamType.php index 1fc0069c..4e490cda 100644 --- a/src/Form/Type/TeamType.php +++ b/src/Form/Type/TeamType.php @@ -9,6 +9,7 @@ namespace App\Form\Type; use App\Entity\Team; +use App\Repository\SettingsRepository; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; @@ -18,25 +19,37 @@ class TeamType extends AbstractType { + private $settings; + + public function __construct(SettingsRepository $settingsRepository) + { + $this->settings = $settingsRepository->findOne(); + } + public function buildForm(FormBuilderInterface $builder, array $options) { + $builder->add('name', TextType::class, ['label' => 'teamName', 'required' => true, 'translation_domain' => 'form']); + + if ($this->settings && $this->settings->getUseKeycloakGroups()) { + $builder->add('keycloakGroup', TextType::class, ['label' => 'keycloakGroup', 'help' => 'keycloakGroupHelp', 'required' => false, 'translation_domain' => 'form']); + } + $builder - ->add('name', TextType::class, ['label' => 'Teamname', 'required' => true, 'translation_domain' => 'form']) - ->add('strasse', TextType::class, ['label' => 'Straße', 'required' => true, 'translation_domain' => 'form']) - ->add('plz', TextType::class, ['label' => 'PLZ', 'required' => true, 'translation_domain' => 'form']) - ->add('stadt', TextType::class, ['label' => 'Stadt', 'required' => true, 'translation_domain' => 'form']) - ->add('email', TextType::class, ['label' => 'E-Mail', 'required' => true, 'translation_domain' => 'form']) - ->add('telefon', TextType::class, ['label' => 'Telefon', 'required' => true, 'translation_domain' => 'form']) - ->add('dsb', TextType::class, ['label' => 'Datenschutzbeauftragter', 'required' => false, 'translation_domain' => 'form']) - ->add('ceo', TextType::class, ['label' => 'Geschäftsführung', 'required' => true, 'translation_domain' => 'form']) - ->add('industry', TextType::class, ['label' => 'Branche', 'required' => false, 'translation_domain' => 'form']) - ->add('specialty', TextType::class, ['label' => 'Spezialisierung', 'required' => false, 'translation_domain' => 'form']) - ->add('signature', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'Email Signatur', 'required' => false, 'translation_domain' => 'form']) - ->add('slug', TextType::class, ['label' => 'Slug für Kundenplattform (Darf keine Leerzeichen oder Sonderzeichen enthalten)', 'required' => false, 'translation_domain' => 'form', 'help' => 'Im ODC gibt es die Möglichkeit, ein Kundenportal für Betroffenenanfragen einzurichten. Damit das Protal von extern verfügbar ist, muss erst ein Slug ausgewählt werden. Der Slug kann der Mandantenname oder eine zufälle Kombination von Zeichen sein.']) - ->add('externalLink', TextType::class, ['label' => 'Externer Link zu Kommunikationplattform', 'required' => false, 'translation_domain' => 'form', 'help' => 'Hier können Sie eine externe Seite in den ODC einbinden, z.B. Wiki oder Intranet. Diese Seite ist danach über die Navigation -> External aufrufbar.']) - ->add('video', TextType::class, ['label' => 'Externer Link zur internen Jitsi Installation', 'required' => false, 'translation_domain' => 'form', 'help' => 'Hier können Sie Ihre eigene oder eine externe Jitsi Installation in den ODC einbinden. Jitsi Meet ist eine datenschutzfreundliche Alternative für zoom und Microsoft Teams.']) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('strasse', TextType::class, ['label' => 'street', 'required' => true, 'translation_domain' => 'form']) + ->add('plz', TextType::class, ['label' => 'postcode', 'required' => true, 'translation_domain' => 'form']) + ->add('stadt', TextType::class, ['label' => 'city', 'required' => true, 'translation_domain' => 'form']) + ->add('email', TextType::class, ['label' => 'email', 'required' => true, 'translation_domain' => 'form']) + ->add('telefon', TextType::class, ['label' => 'phone', 'required' => true, 'translation_domain' => 'form']) + ->add('dsb', TextType::class, ['label' => 'dsb', 'required' => false, 'translation_domain' => 'form']) + ->add('ceo', TextType::class, ['label' => 'ceo', 'required' => true, 'translation_domain' => 'form']) + ->add('industry', TextType::class, ['label' => 'industry', 'required' => false, 'translation_domain' => 'form']) + ->add('specialty', TextType::class, ['label' => 'specialty', 'required' => false, 'translation_domain' => 'form']) + ->add('signature', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'signature', 'required' => false, 'translation_domain' => 'form']) + ->add('slug', TextType::class, ['label' => 'slug', 'required' => false, 'translation_domain' => 'form', 'help' => 'slugHelp']) + ->add('externalLink', TextType::class, ['label' => 'externalLink', 'required' => false, 'translation_domain' => 'form', 'help' => 'externalLinkHelp']) + ->add('video', TextType::class, ['label' => 'jitsiLink', 'required' => false, 'translation_domain' => 'form', 'help' => 'jitsiLinkHelp']) + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'save', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/Template/BaseType.php b/src/Form/Type/Template/BaseType.php new file mode 100644 index 00000000..e9cb3bb4 --- /dev/null +++ b/src/Form/Type/Template/BaseType.php @@ -0,0 +1,28 @@ + $label, + 'translation_domain' => $domain ?? $this->getDefaultDomain(), + 'required' => $required, + ], + $additionalOptions, + ); + } +} \ No newline at end of file diff --git a/src/Form/Type/TomType.php b/src/Form/Type/TomType.php index 7336e508..1489d72e 100644 --- a/src/Form/Type/TomType.php +++ b/src/Form/Type/TomType.php @@ -29,26 +29,26 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('titel', TextType::class, ['attr' => ['rows' => 8],'label' => 'Title, Anwendung, Verarbeitung', 'required' => true, 'translation_domain' => 'form']) - ->add('beschreibung', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Beschreibung der technischen und organisatorischen Maßnahmen', 'required' => true, 'translation_domain' => 'form']) - ->add('tomPseudo', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Pseudonymisierung Verschlüsselung (Art. 32 Abs. 1 lit. a) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomZutrittskontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Zutrittskontrolle -> Vertraulichkeit (Art. 32 Abs. 1 lit. b) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomZugangskontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Zugangskontrolle -> Vertraulichkeit (Art. 32 Abs. 1 lit. b) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomZugriffskontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Zugriffskontrolle -> Vertraulichkeit (Art. 32 Abs. 1 lit. b) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomBenutzerkontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Benutzerkontrolle -> Vertraulichkeit (Art. 32 Abs. 1 lit. b) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomSpeicherkontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Speicherkontrolle -> Vertraulichkeit (Art. 32 Abs. 1 lit. b) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomTrennbarkeit', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Trennbarkeit -> Vertraulichkeit (Art. 32 Abs. 1 lit. b) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomDatenintegritaet', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Datenintegrität -> Integrität (Art. 32 Abs. 1 lit. c) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomTransportkontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Transportkontrolle -> Integrität (Art. 32 Abs. 1 lit. c) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomUebertragungskontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Übertragungskontrolle -> Integrität (Art. 32 Abs. 1 lit. c) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomEingabekontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Eingabekontrolle -> Integrität (Art. 32 Abs. 1 lit. c) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomZuverlaessigkeit', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Zuverlässigkeit -> Integrität (Art. 32 Abs. 1 lit. c) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomAuftragskontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Auftragskontrolle -> Integrität (Art. 32 Abs. 1 lit. c) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomVerfuegbarkeitskontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Verfügbarkeitskontrolle -> Verfügbarkeit und Belastbarkeit (Art. 32 Abs. 1 lit. c) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomWiederherstellbarkeit', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Wiederherstellbarkeit -> Verfügbarkeit und Belastbarkeit (Art. 32 Abs. 1 lit. c) DSGVO)', 'required' => true, 'translation_domain' => 'form']) - ->add('tomAudit', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'Verfahren zur regelmässigen Überprüfung, Bewertung und Evaluierung (Art. 32 Abs. 1 lit. c) DSGVO)', 'required' => true, 'translation_domain' => 'form']) + ->add('titel', TextType::class, ['attr' => ['rows' => 8],'label' => 'tomTitle', 'required' => true, 'translation_domain' => 'form']) + ->add('beschreibung', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'descriptionOfMeasures', 'required' => true, 'translation_domain' => 'form']) + ->add('tomPseudo', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomEncryption', 'required' => true, 'translation_domain' => 'form']) + ->add('tomZutrittskontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomPhysicalAccess', 'required' => true, 'translation_domain' => 'form']) + ->add('tomZugangskontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomAuthenticatedAccess', 'required' => true, 'translation_domain' => 'form']) + ->add('tomZugriffskontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomPrivilegedAccess', 'required' => true, 'translation_domain' => 'form']) + ->add('tomBenutzerkontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomUserControl', 'required' => true, 'translation_domain' => 'form']) + ->add('tomSpeicherkontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomStorageControl', 'required' => true, 'translation_domain' => 'form']) + ->add('tomTrennbarkeit', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomSeparability', 'required' => true, 'translation_domain' => 'form']) + ->add('tomDatenintegritaet', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomDataIntegrity', 'required' => true, 'translation_domain' => 'form']) + ->add('tomTransportkontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomTransportControl', 'required' => true, 'translation_domain' => 'form']) + ->add('tomUebertragungskontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomTransferControl', 'required' => true, 'translation_domain' => 'form']) + ->add('tomEingabekontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomInputControl', 'required' => true, 'translation_domain' => 'form']) + ->add('tomZuverlaessigkeit', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomReliability', 'required' => true, 'translation_domain' => 'form']) + ->add('tomAuftragskontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomAssignmentControl', 'required' => true, 'translation_domain' => 'form']) + ->add('tomVerfuegbarkeitskontrolle', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomAvailabilityControl', 'required' => true, 'translation_domain' => 'form']) + ->add('tomWiederherstellbarkeit', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomRecoverability', 'required' => true, 'translation_domain' => 'form']) + ->add('tomAudit', TextareaType::class, ['attr' => ['rows' => 8],'label' => 'tomAuditProcedure', 'required' => true, 'translation_domain' => 'form']) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'save', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/UploadTyp.php b/src/Form/Type/UploadTyp.php index 2b4e424d..276c82cb 100644 --- a/src/Form/Type/UploadTyp.php +++ b/src/Form/Type/UploadTyp.php @@ -25,11 +25,11 @@ public function buildForm(FormBuilderInterface $builder, array $options) ->add('fileFile', VichFileType::class, [ 'required' => false, 'allow_delete' => false, - 'label' => 'Import File', + 'label' => 'importFile', 'translation_domain' => 'form', 'download_label' => false ]) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'Hochladen', 'translation_domain' => 'form']); + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'),'label' => 'uploadFile', 'translation_domain' => 'form']); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/VVTDatenkategorieType.php b/src/Form/Type/VVTDatenkategorieType.php index 5c204397..b63a65fb 100644 --- a/src/Form/Type/VVTDatenkategorieType.php +++ b/src/Form/Type/VVTDatenkategorieType.php @@ -22,18 +22,18 @@ public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('name', TextareaType::class, [ - 'label' => 'Name', + 'label' => 'dataCategoryName', 'empty_data' => '', 'required' => true, 'translation_domain' => 'form', - 'help' => 'Der Name bezeichnet die Datenkategorie, unter der die dazugehörigen Datenarten zusammengefasst werden sollen.' + 'help' => 'dataCategoryNameHelp' ]) ->add('datenarten', TextareaType::class, [ - 'label' => 'Datenarten', + 'label' => 'dataTypes', 'empty_data' => '', 'required' => true, 'translation_domain' => 'form', - 'help' => 'Hier sollen alle Datenarten eingetragen werden, die sich auf die oben benannte Datenkategorie beziehen.' + 'help' => 'dataTypesHelp' ]) ; } diff --git a/src/Form/Type/VVTType.php b/src/Form/Type/VVTType.php index bf107071..50c34bb3 100644 --- a/src/Form/Type/VVTType.php +++ b/src/Form/Type/VVTType.php @@ -42,14 +42,22 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('nummer', TextType::class, ['label' => 'Nummer der Verarbeitung', 'required' => true, 'translation_domain' => 'form']) - ->add('name', TextType::class, ['label' => 'Bezeichung der Verarbeitung', 'required' => true, 'translation_domain' => 'form']) - ->add('verantwortlich', TextareaType::class, ['label' => 'Verantwortliche Person (weitere)', 'required' => false, 'translation_domain' => 'form']) + ->add('nummer', TextType::class, [ + 'label' => 'procedureNumber', + 'required' => true, + 'translation_domain' => 'form' + ]) + ->add('name', TextType::class, [ + 'label' => 'procedureDenomination', + 'required' => true, + 'translation_domain' => 'form' + ]) + ->add('verantwortlich', TextareaType::class, ['label' => 'furtherResponsibleParties', 'required' => false, 'translation_domain' => 'form']) ->add('userContract', EntityType::class, [ 'choice_label' => 'email', 'class' => User::class, 'choices' => $options['user'], - 'label' => 'Verantwortliche Person intern', + 'label' => 'internalResponsibleParty', 'translation_domain' => 'form', 'multiple' => false, 'required' => true, @@ -57,13 +65,13 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'class' => 'selectpicker', 'data-live-search' => 'true' ], - 'help' => 'Wählen Sie hier den zuständigen Benutzer für diese Verarbeitung aus dem Datenschutzcenter. zu jeder Verarbeitung muss mindestens eine verantwortliche Person eingetragen werden.' + 'help' => 'internalResponsiblePartyHelp' ]) ->add('software', EntityType::class, [ 'choice_label' => 'name', 'class' => Software::class, 'choices' => $options['software'], - 'label' => 'Verwendete Software in dieser Verarbeitung', + 'label' => 'procedureUsedSoftware', 'translation_domain' => 'form', 'multiple' => true, 'required' => false, @@ -71,19 +79,53 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'class' => 'selectpicker', 'data-live-search' => 'true' ], - 'help' => 'Bei Bedarf können Sie hier die Software auswählen, die in dieser Verarbeitung eingesetzt werden. Diese Angabe ist für die Analyse der Informationssicherheit und zur Umsetzung der technischen Maßnahmen wichtig. Mit getrückter "STRG" Taste können mehrere Optionen ausgewählt werden.' + 'help' => 'procedureUsedSOftwareHelp' + ]) + ->add('zweck', TextareaType::class, [ + 'attr' => ['class' => 'summernote'], + 'label' => 'procedurePurpose', + 'required' => true, + 'translation_domain' => 'form', + 'help' => 'procedurePurposeHelp' + ]) + ->add('jointControl', CheckboxType::class, [ + 'label' => 'jointControl', + 'required' => false, + 'translation_domain' => 'form', + 'help' => 'jointControlHelp' + ]) + ->add('auftragsverarbeitung', CheckboxType::class, [ + 'label' => 'isContract', + 'required' => false, + 'translation_domain' => 'form', + 'help' => 'isContractHelp' + ]) + ->add('speicherung', TextareaType::class, [ + 'attr' => ['class' => 'summernote'], + 'label' => 'procedureDataStorage', + 'required' => true, + 'translation_domain' => 'form', + 'help' => 'procedureDataStorage' + ]) + ->add('loeschfrist', TextareaType::class, [ + 'attr' => ['readonly'=>true, 'class' => 'summernote summernote-disable'], + 'label' => 'deleteDeadline', + 'required' => false, + 'translation_domain' => 'form', + 'help' => 'deleteDeadlineHelp' + ]) + ->add('weitergabe', TextareaType::class, [ + 'attr' => ['class' => 'summernote'], + 'label' => 'procedureDataTransferPartners', + 'required' => false, + 'translation_domain' => 'form', + 'help' => 'procedureDataTransferPartners' ]) - ->add('zweck', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Zweck der Verarbeitung', 'required' => true, 'translation_domain' => 'form', 'help' => 'Geben Sie hier den Zweck der Verarbeitung und eine Beschreibung der Verarbeitung an. Wenn möglich beschreiben Sie hier zusätzlich den Nutzen der Verarbeitung mit Fokus auf Ihre Unternehmenstätigkeit.']) - ->add('jointControl', CheckboxType::class, ['label' => 'Ja, es handelt sich um eine Joint Control Verarbeitung (gemeinsame Verarbeitung)', 'required' => false, 'translation_domain' => 'form', 'help' => 'Gemeinsame Verarbeitung bedeutet, dass Ihr Unternehmen zusammen mit einer anderen Organisation die Dienstleistung anbietet und dafür Daten erfasst und verarbeitet, z.B. Facebook ist ein typisches Beispiel für eine gemeinsame Verarbeitung. In dieser Verabreitung werden Daten von Ihrer Organisation generiert, an Facebook weitergegeben und auch selber intern verarbeitet.']) - ->add('auftragsverarbeitung', CheckboxType::class, ['label' => 'Ja, es handelt es sich um eine Verarbeitung im Auftrag einer weiteren Organisation', 'required' => false, 'translation_domain' => 'form', 'help' => 'Auftragsverarbeitung bedeutet, dass Ihre Organisation für eine weitere Organisation die Daten verarbeitet, meist in Form einer Dienstleistung. Ihre Organisation nutzt die Daten nur im Namen des Auftraggebers und nicht für eigene Zwecke.']) - ->add('speicherung', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Wo werden die Daten gespeichert/abgelegt', 'required' => true, 'translation_domain' => 'form', 'help' => 'Geben Sie hier an wo und wie die Daten gespeichert werden. Die Speicherung ist eine wichtige Teilverarbeitung und sollte daher zusätzliche dokumentiert werden. Es ist auch im nachhinein einfacher den Datenfluss nachzuverfolgen, wenn die Speicherorte genau dokumentiert wurden.']) - ->add('loeschfrist', TextareaType::class, ['attr' => ['readonly'=>true, 'class' => 'summernote summernote-disable'], 'label' => 'Löschfrist', 'required' => false, 'translation_domain' => 'form', 'help' => 'Alte Löschfristen. Bitte in Löschkonzepte umziehen.']) - ->add('weitergabe', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'An folgende Unternehmen/Stellen/Funktionen werden die Daten weitergegeben', 'required' => false, 'translation_domain' => 'form', 'help' => 'Beschrieben Sie hier in Form einer Matrix/ Tabelle an welche Unternehmen oder Stellen Sie die Daten in Rahmen dieser Verarbeitung weitergeben. Nutzen Sie dafür die Angaben aus den vorherigen Felder "Personengruppen und Datenkategorien".']) ->add('grundlage', EntityType::class, [ 'choice_label' => 'name', 'class' => VVTGrundlage::class, 'choices' => $options['grundlage'], - 'label' => 'Beschreiben Sie, weshalb die Datenverarbeitung erforderlich ist? (Zweck und Grundlage)', + 'label' => 'procedureBasis', 'translation_domain' => 'form', 'multiple' => true, 'required' => true, @@ -96,7 +138,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'choice_label' => 'name', 'class' => VVTPersonen::class, 'choices' => $options['personen'], - 'label' => 'Die Daten welcher Personen werden verarbeitet?', + 'label' => 'procedurePeople', 'translation_domain' => 'form', 'multiple' => true, 'attr' => [ @@ -108,7 +150,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'choice_label' => 'gegenstand', 'class' => Datenweitergabe::class, 'choices' => $options['daten'], - 'label' => 'Welche Datenweitergaben werden dieser Verarbeitung zuordnen?', + 'label' => 'procedureDataTransfers', 'translation_domain' => 'form', 'multiple' => true, 'required' => false, @@ -120,21 +162,26 @@ public function buildForm(FormBuilderInterface $builder, array $options) ->add('kategorien', EntityType::class, [ 'class' => VVTDatenkategorie::class, 'choices' => $options['kategorien'], - 'label' => 'Welche Datenkategorien (Löschfristen) werden verarbeitet?', + 'label' => 'procedureCategories', 'translation_domain' => 'form', 'multiple' => true, 'attr' => [ 'class' => 'selectpicker', 'data-live-search' => 'true' ], - 'help' => 'Das Dropdown-Menü zeigt die Datenkategorien mit den zugeordneten Standard Löschfristen aus den Löschkonzepten, sofern die Datenkategorien einem Löschkonztept zugeordnet wurden.' + 'help' => 'procedureCategoriesHelp' + ]) + ->add('eu', CheckboxType::class, [ + 'label' => 'procedureDataTransferOutsideEU', + 'required' => false, + 'translation_domain' => 'form', + 'help' => 'procedureDataTransferOutsideEuHelp' ]) - ->add('eu', CheckboxType::class, ['label' => 'Ja, Daten werden außerhalb der EU verarbeitet', 'required' => false, 'translation_domain' => 'form', 'help' => 'Wenn Daten außerhalb der EU verarbeitet (gespeichert, erfasst, gelöscht) werden, müssen zusätzliche Vorsichtsmaßnahmen getroffen werden um die Daten nach der DSGVo zu schützen. Setzen Sie diesen Hacken, wenn Sie oder ein Auftragsverarbeiter die Daten die Daten im EU Außland verarbeitet.']) ->add('tomLink', EntityType::class, [ 'choice_label' => 'titel', 'class' => Tom::class, 'choices' => $options['tom'], - 'label' => 'Welche TOM wird für diese Verarbeitung verwendet?', + 'label' => 'procedureTOM', 'translation_domain' => 'form', 'multiple' => false, 'required' => false, @@ -142,39 +189,45 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'class' => 'selectpicker', 'data-live-search' => 'true' ], - 'help' => 'Wenn Sie bereits ein TOM Dokument im Datenschutzcenter angelegt haben, können Sie diese bei Bedarf der Verarbeitung zuweisen. Die Verknüpfung wird soäter auch im Dashboard und Datenflussplan angezeigt.' + 'help' => 'procedureTOM' + ]) + ->add('tom', TextareaType::class, [ + 'attr' => ['class' => 'summernote'], + 'label' => 'procedureFurtherMeasures', + 'required' => false, + 'translation_domain' => 'form', + 'help' => 'procedureFurtherMeasuresHelp' ]) - ->add('tom', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Weitere Hinweise zur TOM', 'required' => false, 'translation_domain' => 'form', 'help' => 'Geben Sie hier bei Bedarf weitere technische und organisatorische Maßnahmen an, die nur diese Verarbeitung betreffen.']) ->add('risiko', EntityType::class, [ 'choice_label' => 'name', 'class' => VVTRisiken::class, 'choices' => $options['risiken'], - 'label' => 'Mögliche Risko-Quellen', + 'label' => 'procedureRiskSources', 'translation_domain' => 'form', 'multiple' => true, 'attr' => [ 'class' => 'selectpicker', 'data-live-search' => 'true' ], - 'help' => 'Geben Sie hier alle möglichen Risiken an die in dieser Verarbeitung auftreten können. Die Risiken können direkt, indirekt, technisch oder organisatorisch mit der Verarbeitung zusammenhängen.' + 'help' => 'procedureRiskSourcesHelp' ]) ->add('status', EntityType::class, [ 'choice_label' => 'name', 'class' => VVTStatus::class, 'choices' => $options['status'], - 'label' => 'Status', + 'label' => 'status', 'translation_domain' => 'form', 'multiple' => false, 'attr' => [ 'class' => 'selectpicker', ], - 'help' => 'Im Status Inaktiv wird die Verarbeitung nicht im Datenflussplan auf dem Dashboard angezeigt.' + 'help' => 'procedureStatusHelp' ]) ->add('abteilung', EntityType::class, [ 'choice_label' => 'name', 'class' => AuditTomAbteilung::class, 'choices' => $options['abteilung'], - 'label' => 'Zugeordnete Abteilung', + 'label' => 'procedureDepartment', 'translation_domain' => 'form', 'multiple' => false, 'required' => false, @@ -182,51 +235,69 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'class' => 'selectpicker', 'data-live-search' => 'true' ], - 'help' => 'Hier können Sie eine Abteilung zu der Verarbeitung hinzufügen. Die Abteilung ist hilfreich um den Datenflussplan filtern zu können und gleiche Verarbeitungen in unterschiedlichen Abteilungen eindeutig zu unterteilen.' + 'help' => 'procedureDepartment' + ]) + ->add('source', TextareaType::class, [ + 'attr' => ['row' => 8], + 'label' => 'procedureDataCollection', + 'required' => false, + 'translation_domain' => 'form', + 'help' => 'procedureDataCollectionHelp' + ]) + ->add('informationspflicht', TextareaType::class, [ + 'attr' => ['class' => 'summernote'], + 'label' => 'informationObligation', + 'required' => false, + 'translation_domain' => 'form', + 'help' => 'informationObligationHelp' + ]) + ->add('dsb', TextareaType::class, [ + 'attr' => ['class' => 'summernote'], + 'label' => 'dsbComment', + 'required' => false, + 'translation_domain' => 'form', + 'help' => 'dsbCommentHelp' ]) - ->add('source', TextareaType::class, ['attr' => ['row' => 8], 'label' => 'Wie und wo werden die Daten erhoben?', 'required' => false, 'translation_domain' => 'form', 'help' => 'Die Daten können auf unterschiedliche Art und Weisen erfasst werden. Direkterhebung ist die bekannteste und kommt z.B. bei einem Newsletter auf der eigenen Webseite vor. Die Erhebung durch Dritte (z.B. durch Adresshändler) ist eine weitere Methode der Datenerhebung.']) - ->add('informationspflicht', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Informationspflicht', 'required' => false, 'translation_domain' => 'form', 'help' => 'Es sollte je Verfahren dokumentiert werden, wo und wie den Informationspflichten jeweils nachgekommen wird. Dies kann bspw. durch Verweis auf Datenschutzhinweise, Vertragsbestandteile, Disclaimer in Formularen, bei Mitarbeiterdaten z.B. auch durch Verweise bei Erhebung auf intern bekanntgemachte Betriebsvereinbarung etc. erfolgen.']) - ->add('dsb', TextareaType::class, ['attr' => ['class' => 'summernote'], 'label' => 'Kommentar des Datenschutzbeauftragten', 'required' => false, 'translation_domain' => 'form', 'help' => 'Neben der verpflichtenden Erfassung des Verarbeitungszwecks sollte zur Erfüllung der Rechenschaftpflichten gem. Art. 5 auch die Rechtsgrundlage mitsamt ggfs. erforderlicher Abwägungen, Einwilligungsklauseln und Prüfvermerken, ob bspw. die Anforderungen an Widerspruchsmöglichkeiten oder die automatisierte Einzelentscheidung berücksichtigt wurden.']) ->add('beurteilungEintritt', ChoiceType::class, [ 'choices' => [ - 'Bitte auswählen' => 0, - 'Vernachlässigbar' => 1, - 'Eingeschränkt möglich' => 2, - 'Signifikant' => 3, - 'Sehr wahrscheinlich' => 4, + 'nothingSelected' => 0, + 'lowRisk' => 1, + 'someRisk' => 2, + 'significantRisk' => 3, + 'highRisk' => 4, ], - 'label' => 'Risiko: Eintrittswahrscheinlichkeit', + 'label' => 'procedureRiskProbability', 'translation_domain' => 'form', 'required' => true, 'multiple' => false, 'attr' => [ 'class' => 'selectpicker', ], - 'help' => 'Für jede Verarbeitung muss auf Grundlage der ISO 27001 die Eintrittswahrscheinlichkeit dokumentiert werden. Dabei muss die Eintrittswahrscheinlichkeit festgelegt werden. Die Wahrscheinlichkeit lässt sich in vier Level unterteilen.' + 'help' => 'procedureRiskProbabilityHelp' ]) ->add('beurteilungSchaden', ChoiceType::class, [ 'choices' => [ - 'Bitte auswählen' => 0, - 'Gering (kaum Auswirkung)' => 1, - 'Eingeschränkt vorhanden' => 2, - 'Signifikant' => 3, - 'Hoch (schwerwiegend bis existenzbedrohend)' => 4, + 'nothingSelected' => 0, + 'littleDamage' => 1, + 'someDamage' => 2, + 'significantDamage' => 3, + 'criticalDamage' => 4, ], - 'label' => 'Risiko: Schadenspotenzial', + 'label' => 'procedureRiskDamage', 'translation_domain' => 'form', 'required' => true, 'multiple' => false, 'attr' => [ 'class' => 'selectpicker', ], - 'help' => 'Für jede Verarbeitung muss auf Grundlage der ISO 27001 das Schadenspotenzial dokumentiert werden.' + 'help' => 'procedureRiskDamageHelp' ]) ->add('produkt', EntityType::class, [ 'choice_label' => 'name', 'class' => Produkte::class, 'choices' => $options['produkte'], - 'label' => 'Zugeordnete Produkte', - 'help' => 'Mit gedrückter "STRG" Taste können mehrere Produkte ausgewählt werden', + 'label' => 'procedureProducts', + 'help' => 'procedureProductsHelp', 'translation_domain' => 'form', 'multiple' => true, 'required' => false, @@ -235,7 +306,11 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'data-live-search' => 'true' ], ]) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary btn-block'), 'label' => 'Speichern', 'translation_domain' => 'form']); + ->add('save', SubmitType::class, [ + 'attr' => array('class' => 'btn btn-primary btn-block'), + 'label' => 'save', + 'translation_domain' => 'form' + ]); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/Form/Type/VorfallType.php b/src/Form/Type/VorfallType.php index 89cc074a..a155662f 100644 --- a/src/Form/Type/VorfallType.php +++ b/src/Form/Type/VorfallType.php @@ -26,19 +26,19 @@ public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('gemeldet', CheckboxType::class, ['label' => 'Datenschutzvorfall der Landesdatenschutzbehörde gemeldet. Wenn ja, die meldende Person in getroffene Maßnahmen eintragen', 'required' => false, 'translation_domain' => 'form']) - ->add('betroffeneGemeldet', CheckboxType::class, ['label' => 'Datenschutzvorfall an die betroffenen Personen gemeldet', 'required' => false, 'translation_domain' => 'form']) - ->add('auftraggeberGemeldet', CheckboxType::class, ['label' => 'Datenschutzvorfall an die Auftraggeber gemeldet', 'required' => false, 'translation_domain' => 'form']) - ->add('fakten', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'Fakten zum Datenschutzvorfall', 'required' => true, 'translation_domain' => 'form']) - ->add('auswirkung', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'Auswirkungen und Folgen der Datenschutzverletzung', 'required' => true, 'translation_domain' => 'form']) - ->add('massnahmen', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'Getroffene Maßnahmen', 'required' => true, 'translation_domain' => 'form']) - ->add('datum', DateTimeType::class, ['label' => 'Datenschutzvorfall bemerkt', 'required' => true, 'translation_domain' => 'form', 'widget' => 'single_text']) - ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'), 'label' => 'Speichern', 'translation_domain' => 'form']) + ->add('gemeldet', CheckboxType::class, ['label' => 'incidentReportedToStateAgency', 'required' => false, 'translation_domain' => 'form']) + ->add('betroffeneGemeldet', CheckboxType::class, ['label' => 'incidentReportedToAffectedPersons', 'required' => false, 'translation_domain' => 'form']) + ->add('auftraggeberGemeldet', CheckboxType::class, ['label' => 'incidentReportedToClients', 'required' => false, 'translation_domain' => 'form']) + ->add('fakten', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'incidentFacts', 'required' => true, 'translation_domain' => 'form']) + ->add('auswirkung', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'incidentConsequences', 'required' => true, 'translation_domain' => 'form']) + ->add('massnahmen', TextareaType::class, ['attr' => ['rows' => 8], 'label' => 'incidentMeasures', 'required' => true, 'translation_domain' => 'form']) + ->add('datum', DateTimeType::class, ['label' => 'incidentDiscovered', 'required' => true, 'translation_domain' => 'form', 'widget' => 'single_text']) + ->add('save', SubmitType::class, ['attr' => array('class' => 'btn btn-primary'), 'label' => 'save', 'translation_domain' => 'form']) ->add('personen', EntityType::class, [ 'choice_label' => 'name', 'class' => VVTPersonen::class, 'choices' => $options['personen'], - 'label' => 'Betroffene Personenkategorien', + 'label' => 'affectedPersons', 'translation_domain' => 'form', 'multiple' => true, 'attr' => [ @@ -50,7 +50,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) 'choice_label' => 'name', 'class' => VVTDatenkategorie::class, 'choices' => $options['daten'], - 'label' => 'Betroffene Datenkategorien', + 'label' => 'affectedDataCategories', 'translation_domain' => 'form', 'multiple' => true, 'attr' => [ diff --git a/src/Kernel.php b/src/Kernel.php index 1cd05726..54b472ea 100644 --- a/src/Kernel.php +++ b/src/Kernel.php @@ -13,42 +13,4 @@ class Kernel extends BaseKernel { use MicroKernelTrait; - private const CONFIG_EXTS = '.{php,xml,yaml,yml}'; - - public function registerBundles(): iterable - { - $contents = require $this->getProjectDir().'/config/bundles.php'; - foreach ($contents as $class => $envs) { - if ($envs[$this->environment] ?? $envs['all'] ?? false) { - yield new $class(); - } - } - } - - public function getProjectDir(): string - { - return \dirname(__DIR__); - } - - protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void - { - $container->addResource(new FileResource($this->getProjectDir().'/config/bundles.php')); - $container->setParameter('container.dumper.inline_class_loader', \PHP_VERSION_ID < 70400 || $this->debug); - $container->setParameter('container.dumper.inline_factories', true); - $confDir = $this->getProjectDir().'/config'; - - $loader->load($confDir.'/{packages}/*'.self::CONFIG_EXTS, 'glob'); - $loader->load($confDir.'/{packages}/'.$this->environment.'/*'.self::CONFIG_EXTS, 'glob'); - $loader->load($confDir.'/{services}'.self::CONFIG_EXTS, 'glob'); - $loader->load($confDir.'/{services}_'.$this->environment.self::CONFIG_EXTS, 'glob'); - } - - protected function configureRoutes(RouteCollectionBuilder $routes): void - { - $confDir = $this->getProjectDir().'/config'; - - $routes->import($confDir.'/{routes}/'.$this->environment.'/*'.self::CONFIG_EXTS, '/', 'glob'); - $routes->import($confDir.'/{routes}/*'.self::CONFIG_EXTS, '/', 'glob'); - $routes->import($confDir.'/{routes}'.self::CONFIG_EXTS, '/', 'glob'); - } } diff --git a/src/Migrations/Templates/CreateTable.php b/src/Migrations/Templates/CreateTable.php new file mode 100644 index 00000000..dc5ced89 --- /dev/null +++ b/src/Migrations/Templates/CreateTable.php @@ -0,0 +1,35 @@ +createTable($tableName); + + $table->addColumn(self::$FIELD_ID, Types::INTEGER) + ->setNotnull(true) + ->setAutoincrement(true); + + foreach([self::$FIELD_CREATED_AT, self::$FIELD_UPDATED_AT] as $field){ + $table->addColumn($field, Types::DATETIME_IMMUTABLE) + ->setNotnull(true); + } + + $table->setPrimaryKey([self::$FIELD_ID], $tableName.'_PK'); + + return $table; + } +} \ No newline at end of file diff --git a/src/Migrations/Templates/RelationColumn.php b/src/Migrations/Templates/RelationColumn.php new file mode 100644 index 00000000..298e4c55 --- /dev/null +++ b/src/Migrations/Templates/RelationColumn.php @@ -0,0 +1,38 @@ +getName() . '_' . $targetColumn; + + $table->addColumn($columnName, Types::INTEGER) + ->setNotnull(!$nullable); + + $table->addForeignKeyConstraint( + foreignTable: $targetTable, + localColumnNames: [$columnName], + foreignColumnNames: [$targetColumn], + name: sprintf(self::$INDEX_FORMAT, $table->getName(), $targetTable->getName()), + ); + } + + /** @throws SchemaException */ + public static function dropRelation(Table $table, Table $targetTable, string $targetColumn = 'id'): void + { + $columnName = $targetTable->getName() . '_' . $targetColumn; + + $table->dropIndex(sprintf(self::$INDEX_FORMAT, $table->getName(), $targetTable->getName())); + $table->dropColumn($columnName); + } +} \ No newline at end of file diff --git a/src/Migrations/Util/RelationConverter.php b/src/Migrations/Util/RelationConverter.php new file mode 100644 index 00000000..9a3bfbad --- /dev/null +++ b/src/Migrations/Util/RelationConverter.php @@ -0,0 +1,92 @@ +createQueryBuilder() + ->select('t.*') + ->from('`'.$sourceTable->getName().'`', 't') + ->fetchAllAssociative(); + + foreach ($sourceEntities as $sourceEntity) { + $foreignKey = $sourceEntity[$sourceColumn->getName()]; + $identifier = $sourceEntity[$identifierColumn->getName()]; + + if($foreignKey === null || $identifier === null){ + continue; + } + + $connection->createQueryBuilder() + ->insert($mappingTableName) + ->setValue( + column: $sourceColumnName, + value: $identifier + ) + ->setValue( + column: $targetColumnName, + value: $foreignKey, + ) + ->executeQuery(); + } + } + + public static function createManyToManyMappingTable( + Schema $schema, + Table $sourceTable, + Table $targetTable, + string $mappingTableName, + ?string $sourceColumnName = null, + ?string $targetColumnName = null, + ): Table + { + $sourceColumnName = $sourceColumnName ?? $sourceTable->getName() . '_id'; + $targetColumnName = $targetColumnName ?? $targetTable->getName() . '_id'; + + $mappingTable = $schema->createTable($mappingTableName); + $mappingTable->addColumn('id', Types::INTEGER) + ->setNotnull(true) + ->setAutoincrement(true); + + $mappingTable->addUniqueIndex(['id'], $mappingTable->getName() . '_IdX'); + $mappingTable->setPrimaryKey(['id'], $mappingTable->getName() . '_Id'); + + $sourceColumn = $mappingTable->addColumn($sourceColumnName, Types::INTEGER) + ->setNotnull(true); + + $targetColumn = $mappingTable->addColumn($targetColumnName, Types::INTEGER) + ->setNotnull(true); + + $mappingTable->addForeignKeyConstraint( + foreignTable: $sourceTable, + foreignColumnNames: $sourceTable->getPrimaryKey()->getColumns(), + localColumnNames: [$sourceColumnName], + name: 'RFX_' . $sourceColumn->getName() . '_' . $mappingTableName.'_'. uniqid(), + ); + + $mappingTable->addForeignKeyConstraint( + foreignTable: $targetTable, + foreignColumnNames: $targetTable->getPrimaryKey()->getColumns(), + localColumnNames: [$targetColumnName], + name: 'RFX_' . $targetColumn->getName() . '_' . $mappingTableName.'_'.uniqid(), + ); + + return $mappingTable; + } +} \ No newline at end of file diff --git a/src/Migrations/Util/Tables.php b/src/Migrations/Util/Tables.php new file mode 100644 index 00000000..f6556e2d --- /dev/null +++ b/src/Migrations/Util/Tables.php @@ -0,0 +1,18 @@ +addSql('ALTER TABLE fos_user RENAME TO user'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE user RENAME TO fos_user'); + } +} diff --git a/src/Migrations/Version20230508085407.php b/src/Migrations/Version20230508085407.php new file mode 100644 index 00000000..48fde06b --- /dev/null +++ b/src/Migrations/Version20230508085407.php @@ -0,0 +1,41 @@ +getTable('team'); + $team->getColumn('`name`') + ->setType(Type::getType(Types::STRING)) + ->setLength(255); + $team->addColumn('display_name', Types::TEXT); + + $team->addUniqueIndex(['name'], 'UNQ_team_name'); + } + + public function down(Schema $schema): void + { + $team = $schema->getTable('team'); + echo json_encode($team->getUniqueConstraints()); + $team->dropIndex('UNQ_team_name'); + $team->getColumn('`name`') + ->setType(Type::getType(Types::TEXT)); + } +} diff --git a/src/Migrations/Version20230508094645.php b/src/Migrations/Version20230508094645.php new file mode 100644 index 00000000..08e62520 --- /dev/null +++ b/src/Migrations/Version20230508094645.php @@ -0,0 +1,33 @@ +addSql('CREATE TABLE settings (id INT AUTO_INCREMENT NOT NULL, use_keycloak_groups TINYINT(1) DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('ALTER TABLE team CHANGE display_name keycloak_group LONGTEXT DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('DROP TABLE settings'); + $this->addSql('ALTER TABLE team CHANGE keycloak_group display_name LONGTEXT DEFAULT NULL'); + } +} diff --git a/src/Migrations/Version20230508112840.php b/src/Migrations/Version20230508112840.php new file mode 100644 index 00000000..15b0d786 --- /dev/null +++ b/src/Migrations/Version20230508112840.php @@ -0,0 +1,49 @@ +getTable('user'); + $team = $schema->getTable('team'); + + RelationConverter::createManyToManyMappingTable( + $schema, + $user, + $team, + 'user_team', + ); + + RelationConverter::createManyToManyMappingTable( + $schema, + $user, + $team, + 'team_admin', + ); + + $user->removeForeignKey('FK_957A6479296CD8AE'); + $user->removeForeignKey('FK_957A64796352511C'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + + } +} diff --git a/src/Migrations/Version20230508120952.php b/src/Migrations/Version20230508120952.php new file mode 100644 index 00000000..48dd489a --- /dev/null +++ b/src/Migrations/Version20230508120952.php @@ -0,0 +1,51 @@ +getTable('user'); + + RelationConverter::convert( + $this->connection, + $user, + $user->getColumn('id'), + $user->getColumn('team_id'), + 'user_team', + 'user_id', + 'team_id', + ); + + RelationConverter::convert( + $this->connection, + $user, + $user->getColumn('id'), + $user->getColumn('admin_user_id'), + 'team_admin', + 'user_id', + 'team_id', + ); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + + } +} diff --git a/src/Migrations/Version20230508140755.php b/src/Migrations/Version20230508140755.php new file mode 100644 index 00000000..9532ce50 --- /dev/null +++ b/src/Migrations/Version20230508140755.php @@ -0,0 +1,38 @@ +getTable('user') + ->dropColumn('team_id') + ->dropColumn('admin_user_id'); + } + + public function down(Schema $schema): void + { + $schema->getTable('user') + ->addColumn('team_id', Types::INTEGER) + ->setNotnull(false); + + $schema->getTable('user') + ->addColumn('admin_user_id', Types::INTEGER) + ->setNotnull(false); + } +} diff --git a/src/Migrations/Version20230515081952.php b/src/Migrations/Version20230515081952.php new file mode 100644 index 00000000..a9a1f868 --- /dev/null +++ b/src/Migrations/Version20230515081952.php @@ -0,0 +1,51 @@ +addColumn(self::FIELD_LABEL, Types::STRING) + ->setLength(255) + ->setNotnull(true); + + $table->addColumn(self::FIELD_HINT, Types::STRING) + ->setLength(255) + ->setNotnull(false); + + $table->addColumn(self::FIELD_EVAL_VALUE, Types::FLOAT) + ->setNotnull(true) + ->setDefault(1); + + $table->addColumn(self::FIELD_TYPE, Types::STRING) + ->setLength(255) + ->setNotnull(true); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $schema->dropTable(Tables::$QUESTION); + } +} diff --git a/src/Migrations/Version20230515103631.php b/src/Migrations/Version20230515103631.php new file mode 100644 index 00000000..0170aa51 --- /dev/null +++ b/src/Migrations/Version20230515103631.php @@ -0,0 +1,49 @@ +addColumn(self::FIELD_LABEL, Types::STRING) + ->setLength(255) + ->setNotnull(true); + + $table->addColumn(self::FIELD_IS_CORRECT, Types::BOOLEAN) + ->setNotnull(true); + + RelationColumn::addRelation( + table: $table, + targetTable: $schema->getTable(Tables::$QUESTION) + ); + } + + public function down(Schema $schema): void + { + foreach($schema->getTable(Tables::$QUESTIONNAIRE_QUESTION)->getIndexes() as $index) { + $schema->getTable(Tables::$QUESTIONNAIRE_QUESTION)->dropIndex($index->getName()); + } + + $schema->dropTable(Tables::$ANSWER); + } +} diff --git a/src/Migrations/Version20230515105533.php b/src/Migrations/Version20230515105533.php new file mode 100644 index 00000000..dea3c1ec --- /dev/null +++ b/src/Migrations/Version20230515105533.php @@ -0,0 +1,55 @@ +addColumn(self::FIELD_LABEL, Types::STRING) + ->setLength(255) + ->setNotnull(true); + + $table->addColumn(self::FIELD_DESCRIPTION, Types::STRING) + ->setLength(255) + ->setNotnull(false); + + $table->addColumn(self::FIELD_PERCENTAGE_TO_PASS, Types::FLOAT) + ->setnotnull(true); + + RelationColumn::addRelation( + table: $table, + targetTable: $schema->getTable(Tables::$TEAM), + nullable: false, + ); + } + + public function down(Schema $schema): void + { + foreach($schema->getTable(Tables::$QUESTIONNAIRE)->getIndexes() as $index){ + $schema->getTable(Tables::$QUESTIONNAIRE)->dropIndex($index->getName()); + } + + $schema->dropTable(Tables::$QUESTIONNAIRE); + } +} diff --git a/src/Migrations/Version20230515112211.php b/src/Migrations/Version20230515112211.php new file mode 100644 index 00000000..4d726426 --- /dev/null +++ b/src/Migrations/Version20230515112211.php @@ -0,0 +1,47 @@ +addColumn(self::FIELD_STEP, Types::INTEGER) + ->setNotnull(true); + + foreach ([Tables::$QUESTION, Tables::$QUESTIONNAIRE] as $targetTableName) { + RelationColumn::addRelation( + table: $table, + targetTable: $schema->getTable($targetTableName), + nullable: false, + ); + } + } + + public function down(Schema $schema): void + { + foreach($schema->getTable(Tables::$QUESTIONNAIRE_QUESTION)->getIndexes() as $index) { + $schema->getTable(Tables::$QUESTIONNAIRE_QUESTION)->dropIndex($index->getName()); + } + + $schema->dropTable(Tables::$QUESTIONNAIRE_QUESTION); + } +} diff --git a/src/Migrations/Version20230515123533.php b/src/Migrations/Version20230515123533.php new file mode 100644 index 00000000..fd14d3b7 --- /dev/null +++ b/src/Migrations/Version20230515123533.php @@ -0,0 +1,61 @@ +addColumn(self::FIELD_PASSED, Types::BOOLEAN) + ->setNotnull(false); + + $table->addColumn(self::FIELD_STATE, Types::STRING) + ->setNotnull(true) + ->setDefault('assigned'); + + $table->addColumn(self::FIELD_COMPLETED_AT, Types::DATETIME_IMMUTABLE) + ->setNotnull(false) + ->setDefault(null); + + RelationColumn::addRelation( + table: $table, + targetTable: $schema->getTable(Tables::$ACADEMY_BILLING), + nullable: false, + ); + + RelationColumn::addRelation( + table: $table, + targetTable: $schema->getTable(Tables::$QUESTIONNAIRE), + nullable: false, + ); + } + + public function down(Schema $schema): void + { + foreach($schema->getTable(Tables::$PARTICIPATION)->getIndexes() as $index) { + $schema->getTable(Tables::$PARTICIPATION)->dropIndex($index->getName()); + } + + $schema->dropTable(Tables::$PARTICIPATION); + } +} diff --git a/src/Migrations/Version20230515132941.php b/src/Migrations/Version20230515132941.php new file mode 100644 index 00000000..de48f2cd --- /dev/null +++ b/src/Migrations/Version20230515132941.php @@ -0,0 +1,46 @@ +getTable($targetTableName), + ); + } + } + + public function down(Schema $schema): void + { + foreach($schema->getTable(Tables::$PARTICIPATION_ANSWER)->getIndexes() as $index) { + $schema->getTable(Tables::$PARTICIPATION_ANSWER)->dropIndex($index->getName()); + } + + $schema->dropTable(Tables::$PARTICIPATION_ANSWER); + } +} diff --git a/src/Migrations/Version20230517065940.php b/src/Migrations/Version20230517065940.php new file mode 100644 index 00000000..fac7acdb --- /dev/null +++ b/src/Migrations/Version20230517065940.php @@ -0,0 +1,31 @@ +getTable(Tables::$AKADEMIE_KURS), + targetTable: $schema->getTable(Tables::$QUESTIONNAIRE), + ); + } + + public function down(Schema $schema): void + { + + } +} diff --git a/src/Migrations/Version20230518145342.php b/src/Migrations/Version20230518145342.php new file mode 100644 index 00000000..7975f177 --- /dev/null +++ b/src/Migrations/Version20230518145342.php @@ -0,0 +1,34 @@ +getTable('user'); + $table->addColumn('roles', Types::JSON) + ->setNotnull(false) + ->setDefault(null); + } + + public function down(Schema $schema): void + { + $table = $schema->getTable('user'); + $table->dropColumn('roles'); + } +} diff --git a/src/Repository/AkademieBuchungenRepository.php b/src/Repository/AkademieBuchungenRepository.php index bf3a0e2f..08eb0a4a 100644 --- a/src/Repository/AkademieBuchungenRepository.php +++ b/src/Repository/AkademieBuchungenRepository.php @@ -20,36 +20,8 @@ public function __construct(ManagerRegistry $registry) parent::__construct($registry, AkademieBuchungen::class); } - // /** - // * @return AkademieBuchungen[] Returns an array of AkademieBuchungen objects - // */ - /* - public function findByExampleField($value) - { - return $this->createQueryBuilder('a') - ->andWhere('a.exampleField = :val') - ->setParameter('val', $value) - ->orderBy('a.id', 'ASC') - ->setMaxResults(10) - ->getQuery() - ->getResult() - ; - } - */ - - /* - public function findOneBySomeField($value): ?AkademieBuchungen - { - return $this->createQueryBuilder('a') - ->andWhere('a.exampleField = :val') - ->setParameter('val', $value) - ->getQuery() - ->getOneOrNullResult() - ; - } - */ - - public function findMyBuchungenByUser($value) + /** @return AkademieBuchungen[] */ + public function findMyBuchungenByUser($value): array { return $this->createQueryBuilder('a') ->andWhere('a.user = :user') @@ -58,7 +30,7 @@ public function findMyBuchungenByUser($value) ->getResult(); } - public function findActivBuchungenByUser(User $user) + public function findActiveByUser(User $user) { return $this->createQueryBuilder('a') ->andWhere('a.user = :user') diff --git a/src/Repository/AnswerRepository.php b/src/Repository/AnswerRepository.php new file mode 100644 index 00000000..dd26641b --- /dev/null +++ b/src/Repository/AnswerRepository.php @@ -0,0 +1,22 @@ +createQueryBuilder('a') - ->andWhere('a.exampleField = :val') - ->setParameter('val', $value) - ->orderBy('a.id', 'ASC') - ->setMaxResults(10) - ->getQuery() - ->getResult() - ; - } - */ - - /* - public function findOneBySomeField($value): ?AuditTom - { - return $this->createQueryBuilder('a') - ->andWhere('a.exampleField = :val') - ->setParameter('val', $value) - ->getQuery() - ->getOneOrNullResult() - ; - } - */ - public function findAllByTeam($value) { return $this->createQueryBuilder('a') @@ -83,4 +54,29 @@ public function findOpenByTeam(Team $team) ->getResult() ; } + + public function findCriticalByTeam(Team $team) + { + return $this->createQueryBuilder('audit') + ->andWhere('audit.team = :team') + ->andWhere('audit.activ = 1') + ->andWhere('audit.status = 5 OR audit.status = 6') + ->orderBy('audit.createdAt', 'DESC') + ->setParameter('team', $team) + ->getQuery() + ->getResult(); + } + + public function findActiveByTeamAndUser($team, $user) + { + return $this->createQueryBuilder('a') + ->andWhere('a.team = :team') + ->andWhere('a.assignedUser = :user') + ->andWhere('a.activ = 1') + ->setParameter('team', $team) + ->setParameter('user', $user) + ->orderBy('a.createdAt', 'DESC') + ->getQuery() + ->getResult(); + } } diff --git a/src/Repository/AuditTomZieleRepository.php b/src/Repository/AuditTomZieleRepository.php index 8bc38a96..c1088894 100644 --- a/src/Repository/AuditTomZieleRepository.php +++ b/src/Repository/AuditTomZieleRepository.php @@ -57,7 +57,7 @@ public function findByTeam($value) ->getResult(); } - public function findActivByTeam($value) + public function findActiveByTeam($value) { return $this->createQueryBuilder('a') ->andWhere('a.team = :val') diff --git a/src/Repository/ClientRequestRepository.php b/src/Repository/ClientRequestRepository.php index dac38a3e..acaa09aa 100644 --- a/src/Repository/ClientRequestRepository.php +++ b/src/Repository/ClientRequestRepository.php @@ -48,7 +48,7 @@ public function findOneBySomeField($value): ?ClientRequest } */ - public function findActivByTeam($value) + public function findActiveByTeam($value) { return $this->createQueryBuilder('a') ->andWhere('a.team = :val') diff --git a/src/Repository/DatenweitergabeGrundlagenRepository.php b/src/Repository/DatenweitergabeGrundlagenRepository.php index 0839349e..8ee927f1 100644 --- a/src/Repository/DatenweitergabeGrundlagenRepository.php +++ b/src/Repository/DatenweitergabeGrundlagenRepository.php @@ -48,7 +48,7 @@ public function findOneBySomeField($value): ?DatenweitergabeGrundlagen } */ - public function findActivByTeam($value) + public function findActiveByTeam($value) { return $this->createQueryBuilder('a') ->where('a.team is null OR a.team = :val') diff --git a/src/Repository/DatenweitergabeRepository.php b/src/Repository/DatenweitergabeRepository.php index ff7aadc9..636ea589 100644 --- a/src/Repository/DatenweitergabeRepository.php +++ b/src/Repository/DatenweitergabeRepository.php @@ -19,43 +19,61 @@ public function __construct(ManagerRegistry $registry) parent::__construct($registry, Datenweitergabe::class); } - // /** - // * @return Datenweitergabe[] Returns an array of Datenweitergabe objects - // */ - /* - public function findByExampleField($value) + public function findActiveByTeam($value) { - return $this->createQueryBuilder('d') - ->andWhere('d.exampleField = :val') + return $this->createQueryBuilder('a') + ->andWhere('a.team = :val') + ->andWhere('a.activ = 1') ->setParameter('val', $value) - ->orderBy('d.id', 'ASC') - ->setMaxResults(10) ->getQuery() ->getResult() - ; + ; } - */ - /* - public function findOneBySomeField($value): ?Datenweitergabe + /** + * @param $value + * @return int|mixed|string + * find transfers of type Datenweitergabe + */ + public function findActiveTransfersByTeam($value) { - return $this->createQueryBuilder('d') - ->andWhere('d.exampleField = :val') + return $this->createQueryBuilder('a') + ->andWhere('a.team = :val') + ->andWhere('a.activ = 1') + ->andWhere('a.art = 1') ->setParameter('val', $value) ->getQuery() - ->getOneOrNullResult() - ; + ->getResult() + ; } - */ - public function findActivByTeam($value) + /** + * @param $value + * @return int|mixed|string + * find transfers of type Auftragsverarbeitung + */ + public function findActiveOrderProcessingsByTeam($value) { return $this->createQueryBuilder('a') ->andWhere('a.team = :val') ->andWhere('a.activ = 1') + ->andWhere('a.art = 2') ->setParameter('val', $value) ->getQuery() ->getResult() ; } + + public function findActiveByTeamAndUser($team, $user) + { + return $this->createQueryBuilder('a') + ->andWhere('a.team = :team') + ->andWhere('a.assignedUser = :user') + ->andWhere('a.activ = 1') + ->setParameter('team', $team) + ->setParameter('user', $user) + ->orderBy('a.createdAt', 'DESC') + ->getQuery() + ->getResult(); + } } diff --git a/src/Repository/DatenweitergabeStandRepository.php b/src/Repository/DatenweitergabeStandRepository.php index 12617f8d..cedbf47f 100644 --- a/src/Repository/DatenweitergabeStandRepository.php +++ b/src/Repository/DatenweitergabeStandRepository.php @@ -48,7 +48,7 @@ public function findOneBySomeField($value): ?DatenweitergabeStand } */ - public function findActivByTeam($value) + public function findActiveByTeam($value) { return $this->createQueryBuilder('a') ->where('a.team is null OR a.team = :val') diff --git a/src/Repository/FormsRepository.php b/src/Repository/FormsRepository.php index a68818c1..cab12838 100644 --- a/src/Repository/FormsRepository.php +++ b/src/Repository/FormsRepository.php @@ -19,51 +19,36 @@ public function __construct(ManagerRegistry $registry) parent::__construct($registry, Forms::class); } - // /** - // * @return Forms[] Returns an array of Forms objects - // */ - /* - public function findByExampleField($value) + public function findActiveByTeam($value) { - return $this->createQueryBuilder('f') - ->andWhere('f.exampleField = :val') + return $this->createQueryBuilder('a') + ->andWhere('a.team = :val') + ->andWhere('a.activ = 1') ->setParameter('val', $value) - ->orderBy('f.id', 'ASC') - ->setMaxResults(10) ->getQuery() - ->getResult() - ; + ->getResult(); } - */ - /* - public function findOneBySomeField($value): ?Forms - { - return $this->createQueryBuilder('f') - ->andWhere('f.exampleField = :val') - ->setParameter('val', $value) - ->getQuery() - ->getOneOrNullResult() - ; - } - */ - public function findActivByTeam($value) + public function findPublicByTeam($value) { return $this->createQueryBuilder('a') ->andWhere('a.team = :val') ->andWhere('a.activ = 1') + ->andWhere('a.status != 4') ->setParameter('val', $value) ->getQuery() ->getResult(); } - public function findPublicByTeam($value) + public function findActiveByTeamAndUser($team, $user) { return $this->createQueryBuilder('a') - ->andWhere('a.team = :val') + ->andWhere('a.team = :team') + ->andWhere('a.assignedUser = :user') ->andWhere('a.activ = 1') - ->andWhere('a.status != 4') - ->setParameter('val', $value) + ->setParameter('team', $team) + ->setParameter('user', $user) + ->orderBy('a.createdAt', 'DESC') ->getQuery() ->getResult(); } diff --git a/src/Repository/KontakteRepository.php b/src/Repository/KontakteRepository.php index 45cfd01a..060a0cda 100644 --- a/src/Repository/KontakteRepository.php +++ b/src/Repository/KontakteRepository.php @@ -48,7 +48,7 @@ public function findOneBySomeField($value): ?Kontakte } */ - public function findActivByTeam($value) + public function findActiveByTeam($value) { return $this->createQueryBuilder('a') ->andWhere('a.team = :val') diff --git a/src/Repository/ParticipationAnswerRepository.php b/src/Repository/ParticipationAnswerRepository.php new file mode 100644 index 00000000..deb5cd56 --- /dev/null +++ b/src/Repository/ParticipationAnswerRepository.php @@ -0,0 +1,66 @@ + + * + * @method ParticipationAnswer|null find($id, $lockMode = null, $lockVersion = null) + * @method ParticipationAnswer|null findOneBy(array $criteria, array $orderBy = null) + * @method ParticipationAnswer[] findAll() + * @method ParticipationAnswer[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ParticipationAnswerRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, ParticipationAnswer::class); + } + + public function save(ParticipationAnswer $entity, bool $flush = false): void + { + $this->getEntityManager()->persist($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(ParticipationAnswer $entity, bool $flush = false): void + { + $this->getEntityManager()->remove($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + +// /** +// * @return ParticipationAnswer[] Returns an array of ParticipationAnswer objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('p.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?ParticipationAnswer +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/ParticipationRepository.php b/src/Repository/ParticipationRepository.php new file mode 100644 index 00000000..5baf9fba --- /dev/null +++ b/src/Repository/ParticipationRepository.php @@ -0,0 +1,66 @@ + + * + * @method Participation|null find($id, $lockMode = null, $lockVersion = null) + * @method Participation|null findOneBy(array $criteria, array $orderBy = null) + * @method Participation[] findAll() + * @method Participation[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ParticipationRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Participation::class); + } + + public function save(Participation $entity, bool $flush = false): void + { + $this->getEntityManager()->persist($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(Participation $entity, bool $flush = false): void + { + $this->getEntityManager()->remove($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + +// /** +// * @return Participation[] Returns an array of Participation objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('p.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Participation +// { +// return $this->createQueryBuilder('p') +// ->andWhere('p.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/PoliciesRepository.php b/src/Repository/PoliciesRepository.php index 14cbb079..ab88ce81 100644 --- a/src/Repository/PoliciesRepository.php +++ b/src/Repository/PoliciesRepository.php @@ -19,52 +19,36 @@ public function __construct(ManagerRegistry $registry) parent::__construct($registry, Policies::class); } - // /** - // * @return Policies[] Returns an array of Policies objects - // */ - /* - public function findByExampleField($value) + public function findActiveByTeam($value) { - return $this->createQueryBuilder('p') - ->andWhere('p.exampleField = :val') - ->setParameter('val', $value) - ->orderBy('p.id', 'ASC') - ->setMaxResults(10) - ->getQuery() - ->getResult() - ; - } - */ - - /* - public function findOneBySomeField($value): ?Policies - { - return $this->createQueryBuilder('p') - ->andWhere('p.exampleField = :val') + return $this->createQueryBuilder('a') + ->andWhere('a.team = :val') + ->andWhere('a.activ = 1') ->setParameter('val', $value) ->getQuery() - ->getOneOrNullResult() - ; + ->getResult(); } - */ - public function findActivByTeam($value) + public function findPublicByTeam($value) { return $this->createQueryBuilder('a') ->andWhere('a.team = :val') ->andWhere('a.activ = 1') + ->andWhere('a.status != 4') ->setParameter('val', $value) ->getQuery() ->getResult(); } - public function findPublicByTeam($value) + public function findActiveByTeamAndUser($team, $user) { return $this->createQueryBuilder('a') - ->andWhere('a.team = :val') + ->andWhere('a.team = :team') + ->andWhere('a.assignedUser = :user') ->andWhere('a.activ = 1') - ->andWhere('a.status != 4') - ->setParameter('val', $value) + ->setParameter('team', $team) + ->setParameter('user', $user) + ->orderBy('a.createdAt', 'DESC') ->getQuery() ->getResult(); } diff --git a/src/Repository/ProdukteRepository.php b/src/Repository/ProdukteRepository.php index b224d448..274206a3 100644 --- a/src/Repository/ProdukteRepository.php +++ b/src/Repository/ProdukteRepository.php @@ -48,7 +48,7 @@ public function findOneBySomeField($value): ?Produkte } */ - public function findActivByTeam($value) + public function findActiveByTeam($value) { return $this->createQueryBuilder('a') ->andWhere('a.team = :val') diff --git a/src/Repository/QuestionRepository.php b/src/Repository/QuestionRepository.php new file mode 100644 index 00000000..74290e01 --- /dev/null +++ b/src/Repository/QuestionRepository.php @@ -0,0 +1,22 @@ + + * + * @method QuestionnaireQuestion|null find($id, $lockMode = null, $lockVersion = null) + * @method QuestionnaireQuestion|null findOneBy(array $criteria, array $orderBy = null) + * @method QuestionnaireQuestion[] findAll() + * @method QuestionnaireQuestion[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class QuestionnaireQuestionRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, QuestionnaireQuestion::class); + } + + public function save(QuestionnaireQuestion $entity, bool $flush = false): void + { + $this->getEntityManager()->persist($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(QuestionnaireQuestion $entity, bool $flush = false): void + { + $this->getEntityManager()->remove($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + +// /** +// * @return QuestionnaireQuestion[] Returns an array of QuestionnaireQuestion objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('q') +// ->andWhere('q.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('q.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?QuestionnaireQuestion +// { +// return $this->createQueryBuilder('q') +// ->andWhere('q.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/QuestionnaireRepository.php b/src/Repository/QuestionnaireRepository.php new file mode 100644 index 00000000..864b3ac3 --- /dev/null +++ b/src/Repository/QuestionnaireRepository.php @@ -0,0 +1,74 @@ + + * + * @method Questionnaire|null find($id, $lockMode = null, $lockVersion = null) + * @method Questionnaire|null findOneBy(array $criteria, array $orderBy = null) + * @method Questionnaire[] findAll() + * @method Questionnaire[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class QuestionnaireRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Questionnaire::class); + } + + public function save(Questionnaire $entity, bool $flush = false): void + { + $this->getEntityManager()->persist($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(Questionnaire $entity, bool $flush = false): void + { + $this->getEntityManager()->remove($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function findByTeam(Team $team): array { + return $this->createQueryBuilder('q') + ->where('q.team = :team') + ->setParameter('team', $team) + ->getQuery() + ->getResult(); + } +// /** +// * @return Questionnaire[] Returns an array of Questionnaire objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('q') +// ->andWhere('q.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('q.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Questionnaire +// { +// return $this->createQueryBuilder('q') +// ->andWhere('q.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/ReportRepository.php b/src/Repository/ReportRepository.php index afd7c771..4d36d713 100644 --- a/src/Repository/ReportRepository.php +++ b/src/Repository/ReportRepository.php @@ -48,7 +48,7 @@ public function findOneBySomeField($value): ?Report } */ - public function findActivByTeam($value) + public function findActiveByTeam($value) { return $this->createQueryBuilder('a') ->andWhere('a.team = :val AND a.activ = 1') diff --git a/src/Repository/SettingsRepository.php b/src/Repository/SettingsRepository.php new file mode 100644 index 00000000..7f1c99e3 --- /dev/null +++ b/src/Repository/SettingsRepository.php @@ -0,0 +1,23 @@ +findAll() ? $this->findAll()[0] : null; + } +} diff --git a/src/Repository/SoftwareRepository.php b/src/Repository/SoftwareRepository.php index 8043ab41..1e77ac4a 100644 --- a/src/Repository/SoftwareRepository.php +++ b/src/Repository/SoftwareRepository.php @@ -19,41 +19,25 @@ public function __construct(ManagerRegistry $registry) parent::__construct($registry, Software::class); } - // /** - // * @return Software[] Returns an array of Software objects - // */ - /* - public function findByExampleField($value) + public function findActiveByTeam($value) { - return $this->createQueryBuilder('s') - ->andWhere('s.exampleField = :val') - ->setParameter('val', $value) - ->orderBy('s.id', 'ASC') - ->setMaxResults(10) - ->getQuery() - ->getResult() - ; - } - */ - - /* - public function findOneBySomeField($value): ?Software - { - return $this->createQueryBuilder('s') - ->andWhere('s.exampleField = :val') + return $this->createQueryBuilder('a') + ->andWhere('a.team = :val') + ->andWhere('a.activ = 1') ->setParameter('val', $value) ->getQuery() - ->getOneOrNullResult() - ; + ->getResult(); } - */ - public function findActivByTeam($value) + public function findActiveByTeamAndUser($team, $user) { return $this->createQueryBuilder('a') - ->andWhere('a.team = :val') + ->andWhere('a.team = :team') + ->andWhere('a.assignedUser = :user') ->andWhere('a.activ = 1') - ->setParameter('val', $value) + ->setParameter('team', $team) + ->setParameter('user', $user) + ->orderBy('a.createdAt', 'DESC') ->getQuery() ->getResult(); } diff --git a/src/Repository/TaskRepository.php b/src/Repository/TaskRepository.php index 1893908c..9eb9e731 100644 --- a/src/Repository/TaskRepository.php +++ b/src/Repository/TaskRepository.php @@ -20,46 +20,42 @@ public function __construct(ManagerRegistry $registry) parent::__construct($registry, Task::class); } - // /** - // * @return Task[] Returns an array of Task objects - // */ - /* - public function findByExampleField($value) + public function findActiveByTeamAndUser($team, $user) { - return $this->createQueryBuilder('t') - ->andWhere('t.exampleField = :val') - ->setParameter('val', $value) - ->orderBy('t.id', 'ASC') - ->setMaxResults(10) + return $this->createQueryBuilder('a') + ->andWhere('a.team = :team') + ->andWhere('a.assignedUser = :user') + ->andWhere('a.activ = 1') + ->setParameter('team', $team) + ->setParameter('user', $user) + ->orderBy('a.createdAt', 'DESC') ->getQuery() - ->getResult() - ; + ->getResult(); } - */ - /* - public function findOneBySomeField($value): ?Task + public function findActiveByTeam($value) { - return $this->createQueryBuilder('t') - ->andWhere('t.exampleField = :val') + return $this->createQueryBuilder('a') + ->andWhere('a.team = :val AND a.activ = 1') ->setParameter('val', $value) + ->orderBy('a.createdAt', 'DESC') ->getQuery() - ->getOneOrNullResult() - ; + ->getResult(); } - */ - public function findActivByTeam($value) + public function findActiveAndOpenByTeam($team) { return $this->createQueryBuilder('a') - ->andWhere('a.team = :val AND a.activ = 1') - ->setParameter('val', $value) + ->andWhere('a.team = :team') + ->andWhere('a.activ = 1') + ->andWhere('a.done = false') + ->setParameter('team', $team) ->orderBy('a.createdAt', 'DESC') ->getQuery() ->getResult(); } - public function findActivByUser(User $user) + public function findActiveByUser(User $user) { return $this->createQueryBuilder('a') ->andWhere('a.assignedUser = :user') diff --git a/src/Repository/TomRepository.php b/src/Repository/TomRepository.php index 7cb5ddbc..6b96bb51 100644 --- a/src/Repository/TomRepository.php +++ b/src/Repository/TomRepository.php @@ -48,7 +48,7 @@ public function findOneBySomeField($value): ?Tom } */ - public function findActivByTeam($value) + public function findActiveByTeam($value) { return $this->createQueryBuilder('a') ->andWhere('a.team = :val AND a.activ = 1') diff --git a/src/Repository/UserRepository.php b/src/Repository/UserRepository.php new file mode 100644 index 00000000..6068cd0c --- /dev/null +++ b/src/Repository/UserRepository.php @@ -0,0 +1,27 @@ +createQueryBuilder('a') + ->andWhere('a.team = :val') + ->setParameter('val', $value) + ->getQuery() + ->getResult() + ; + } +} diff --git a/src/Repository/VVTDsfaRepository.php b/src/Repository/VVTDsfaRepository.php index ec74c561..05bad980 100644 --- a/src/Repository/VVTDsfaRepository.php +++ b/src/Repository/VVTDsfaRepository.php @@ -19,45 +19,44 @@ public function __construct(ManagerRegistry $registry) parent::__construct($registry, VVTDsfa::class); } - // /** - // * @return VVTDsfa[] Returns an array of VVTDsfa objects - // */ - /* - public function findByExampleField($value) + public function findActiveByTeam($value) { - return $this->createQueryBuilder('v') - ->andWhere('v.exampleField = :val') + return $this->createQueryBuilder('a') + ->innerJoin('a.vvt', 'v') + ->andWhere('a.activ = 1') + ->andWhere('v.team = :val') + ->andWhere('v.activ = 1') ->setParameter('val', $value) - ->orderBy('v.id', 'ASC') - ->setMaxResults(10) ->getQuery() ->getResult() - ; + ; } - */ - /* - public function findOneBySomeField($value): ?VVTDsfa - { - return $this->createQueryBuilder('v') - ->andWhere('v.exampleField = :val') - ->setParameter('val', $value) + public function findActiveAndOpenByTeam($team) { + return $this->createQueryBuilder('dsfa') + ->innerJoin('dsfa.vvt', 'vvt') + ->andWhere('vvt.activ = 1') + ->andWhere('dsfa.activ = 1') + ->andWhere('dsfa.dsb IS NULL OR dsfa.ergebnis IS NULL') + ->andWhere('vvt.team = :team') + ->setParameter('team', $team) ->getQuery() - ->getOneOrNullResult() - ; + ->getResult(); } - */ - public function findActivByTeam($value) + public function findActiveByTeamAndUser($team, $user) { - return $this->createQueryBuilder('a') - ->innerJoin('a.vvt', 'v') - ->andWhere('a.activ = 1') - ->andWhere('v.team = :val') - ->andWhere('v.activ = 1') - ->setParameter('val', $value) + $query = $this->createQueryBuilder('dsfa') + ->innerJoin('dsfa.vvt', 'vvt') + ->andWhere('dsfa.assignedUser = :user') + ->andWhere('vvt.team = :team') + ->andWhere('vvt.activ = 1') + ->andWhere('dsfa.activ = 1') + ->setParameter('user', $user) + ->setParameter('team', $team) ->getQuery() - ->getResult() - ; + ->getResult(); + + return $query; } } diff --git a/src/Repository/VVTRepository.php b/src/Repository/VVTRepository.php index ea04f03f..8ec2b9a6 100644 --- a/src/Repository/VVTRepository.php +++ b/src/Repository/VVTRepository.php @@ -2,6 +2,7 @@ namespace App\Repository; +use App\Entity\Team; use App\Entity\VVT; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; @@ -19,44 +20,38 @@ public function __construct(ManagerRegistry $registry) parent::__construct($registry, VVT::class); } - // /** - // * @return VVT[] Returns an array of VVT objects - // */ - /* - public function findByExampleField($value) + public function findActiveByTeam($value) { - return $this->createQueryBuilder('v') - ->andWhere('v.exampleField = :val') + return $this->createQueryBuilder('a') + ->andWhere('a.team = :val') + ->andWhere('a.activ = 1') ->setParameter('val', $value) - ->orderBy('v.id', 'ASC') - ->setMaxResults(10) + ->orderBy('a.CreatedAt', 'DESC') ->getQuery() ->getResult() - ; + ; } - */ - /* - public function findOneBySomeField($value): ?VVT - { - return $this->createQueryBuilder('v') - ->andWhere('v.exampleField = :val') - ->setParameter('val', $value) + public function findCriticalByTeam(Team $team) { + return $this->createQueryBuilder('vvt') + ->andWhere('vvt.team = :team') + ->andWhere('vvt.activ = 1') + ->andWhere('vvt.status = 3') + ->orderBy('vvt.CreatedAt', 'DESC') + ->setParameter('team', $team) ->getQuery() - ->getOneOrNullResult() - ; + ->getResult(); } - */ - public function findActivByTeam($value) + public function findActiveByTeamAndUser($team, $user) { return $this->createQueryBuilder('a') - ->andWhere('a.team = :val') + ->andWhere('a.team = :team') + ->andWhere('a.assignedUser = :user') ->andWhere('a.activ = 1') - ->setParameter('val', $value) - ->orderBy('a.CreatedAt', 'DESC') + ->setParameter('team', $team) + ->setParameter('user', $user) ->getQuery() - ->getResult() - ; + ->getResult(); } } diff --git a/src/Repository/VVTStatusRepository.php b/src/Repository/VVTStatusRepository.php index 9b748121..70af473c 100644 --- a/src/Repository/VVTStatusRepository.php +++ b/src/Repository/VVTStatusRepository.php @@ -48,7 +48,7 @@ public function findOneBySomeField($value): ?VVTStatus } */ - public function findActivByTeam($value) + public function findActiveByTeam($value) { return $this->createQueryBuilder('a') ->where('a.team is null OR a.team = :val') diff --git a/src/Security/GuardServiceKeycloak.php b/src/Security/GuardServiceKeycloak.php deleted file mode 100644 index 8045b2f0..00000000 --- a/src/Security/GuardServiceKeycloak.php +++ /dev/null @@ -1,147 +0,0 @@ -clientRegistry = $clientRegistry; - $this->em = $em; - $this->router = $router; - $this->tokenStorage = $tokenStorage; - } - - public function supports(Request $request) - { - // continue ONLY if the current ROUTE matches the check ROUTE - return $request->attributes->get('_route') === 'connect_keycloak_check'; - } - - public function getCredentials(Request $request) - { - - return $this->fetchAccessToken($this->getauth0Client()); - } - - public function getUser($credentials, UserProviderInterface $userProvider) - { - - /** @var KeycloakUser $keycloakUser */ - $keycloakUser = $this->getauth0Client()->fetchUserFromToken($credentials); - $email = $keycloakUser->getEmail(); - $id = $keycloakUser->getId(); - $firstName = $keycloakUser->toArray()['given_name']; - $lastName = $keycloakUser->toArray()['family_name']; - // 1) have they logged in with keycloak befor then login the user - $existingUser = $this->em->getRepository(User::class)->findOneBy(array('keycloakId' => $id)); - if ($existingUser) { - $existingUser->setLastLogin(new \DateTime()); - $existingUser->setEmail($email); - $existingUser->setFirstName($firstName); - $existingUser->setLastName($lastName); - $existingUser->setUsername($email); - $this->em->persist($existingUser); - $this->em->flush(); - return $existingUser; - } - - // 1) it is an old USer from FOS USer time never loged in from keycloak - $existingUser = null; - $existingUser = $this->em->getRepository(User::class)->findOneBy(array('email' => $email)); - if ($existingUser) { - $existingUser->setKeycloakId($id); - $existingUser->setLastLogin(new \DateTime()); - $existingUser->setEmail($email); - $existingUser->setFirstName($firstName); - $existingUser->setLastName($lastName); - $existingUser->setUsername($email); - $this->em->persist($existingUser); - $this->em->flush(); - return $existingUser; - } - - // the user never logged in with this email adress or keycloak - $newUser = new User(); - $newUser->setPassword('123') - ->setFirstName($firstName) - ->setLastName($lastName) - ->setUuid($email) - ->setEmail($email) - ->setCreatedAt(new \DateTime()) - ->setLastLogin(new \DateTime()) - ->setKeycloakId($id) - ->setUsername($email); - $this->em->persist($newUser); - $this->em->flush(); - return $newUser; - - } - - /** - * @return KeycloakClient - */ - private function getauth0Client() - { - return $this->clientRegistry - ->getClient('keycloak_main'); - } - - public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey) - { - - // change "app_homepage" to some route in your app - $targetUrl = $this->getTargetPath($request->getSession(), 'main'); - if (!$targetUrl) { - $targetUrl = $this->router->generate('dashboard'); - } - - return new RedirectResponse($targetUrl); - - } - - public function onAuthenticationFailure(Request $request, AuthenticationException $exception) - { - return new RedirectResponse($this->router->generate('no_team')); - } - - /** - * Called when authentication is needed, but it's not sent. - * This redirects to the 'login'. - */ - public function start(Request $request, AuthenticationException $authException = null) - { - $targetUrl = $this->router->generate('login_keycloak'); - return new RedirectResponse($targetUrl); - } - -} - - - diff --git a/src/Security/KeycloakAuthenticator.php b/src/Security/KeycloakAuthenticator.php new file mode 100644 index 00000000..a5840106 --- /dev/null +++ b/src/Security/KeycloakAuthenticator.php @@ -0,0 +1,191 @@ +attributes->get('_route') === 'connect_keycloak_check'; + } + + public function authenticate(Request $request): Passport + { + $client = $this->clientRegistry->getClient('keycloak_main'); + $accessToken = $this->fetchAccessToken($client); + $request->getSession()->set('id_token', $accessToken->getValues()['id_token']); + $passport = new SelfValidatingPassport( + new UserBadge($accessToken->getToken(), function () use ($accessToken, $client,) { + $keycloakUser = $client->fetchUserFromToken(accessToken: $accessToken); + $user = $this->getUserForKeycloakUser(keycloakUser: $keycloakUser); + $this->persistUser(user: $user, keycloakUser: $keycloakUser); + return $user; + } + ) + ); + $passport->setAttribute('id_token', 'null'); + $passport->setAttribute('scope', 'openid'); + + return $passport; + } + + public function onAuthenticationSuccess( + Request $request, + TokenInterface $token, + string $firewallName, + ): ?Response + { + $targetUrl = $this->getTargetPath($request->getSession(), 'main'); + if (!$targetUrl) { + $targetUrl = $this->router->generate('dashboard'); + } + return new RedirectResponse($targetUrl); + } + + public function onAuthenticationFailure( + Request $request, + AuthenticationException $exception, + ): ?Response + { + return new RedirectResponse($this->router->generate('no_team')); + } + + /* + * Called when authentication is needed, but it's not sent. + * This redirects to the 'login'. + */ + public function start( + Request $request, + AuthenticationException $authException = null, + ): RedirectResponse + { + $targetUrl = $this->router->generate('login_keycloak'); + return new RedirectResponse($targetUrl); + } + + private function getTeamsFromKeycloakGroups(ResourceOwnerInterface $keycloakUser): ArrayCollection + { + $userTeams = new ArrayCollection(); + $settings = $this->em->getRepository(Settings::class)->findOne(); + + if (isset($keycloakUser->toArray()['groups']) && $settings && $settings->getUseKeycloakGroups()) { + $groups = $keycloakUser->toArray()['groups']; + $teams = $this->teamRepository->findAll(); + + foreach ($groups as $keycloakGroup) { + foreach ($teams as $team) { + if ($team->getKeycloakGroup() === $keycloakGroup) { + $userTeams->add($team); + } + } + } + } + return $userTeams; + } + + private function getEmailForKeycloakUser(ResourceOwnerInterface $keycloakUser): string { + try { + return $keycloakUser->getEmail(); + } catch (\Exception $e) { + try { + return $keycloakUser->toArray()['preferred_username']; + } catch (\Exception $e) { + } + } + } + + private function getRolesForKeycloakUser(ResourceOwnerInterface $keycloakUser): array + { + $clientId = $this->parameterBag->get('KEYCLOAK_ID'); // name of keycloak client + $this->parameterBag->get('superAdminRole'); // name of super admin role in keycloak + + $roles = []; + + $clientData = $keycloakUser->toArray()['resource_access'][$clientId] ?? null; + + if ($clientData && isset($clientData['roles'])) { + $superAdminRole = $this->parameterBag->get('superAdminRole'); + if (in_array($superAdminRole, $clientData['roles'])) { + $roles [] = 'ROLE_ADMIN'; + } + } + + return $roles; + } + + private function getUserForKeycloakUser(ResourceOwnerInterface $keycloakUser): User + { + $email = $this->getEmailForKeycloakUser(keycloakUser: $keycloakUser); + $id = $keycloakUser->getId(); + + // 1) the user has logged in with keycloak before + $user = $this->em->getRepository(User::class)->findOneBy(array('keycloakId' => $id)); + + // 2) it is an old user who has never logged in from keycloak + if (!$user) { + $user = $this->em->getRepository(User::class)->findOneBy(array('email' => $email)); + } + + // 3) the user has never logged in with this email address or keycloak + if (!$user) { + $user = new User(); + $user->setCreatedAt(createdAt: new \DateTime()); + } + + return $user; + } + + private function persistUser(User $user, ResourceOwnerInterface $keycloakUser): User + { + $email = $this->getEmailForKeycloakUser(keycloakUser: $keycloakUser); + $user->setLastLogin(new \DateTime()); + $user->setEmail(email: $email); + $user->setUsername(username: $email); + $user->setKeycloakId(keycloakId: $keycloakUser->getId()); + $user->setFirstName(firstName: $keycloakUser->toArray()['given_name'] ?? ''); + $user->setLastName(lastName: $keycloakUser->toArray()['family_name'] ?? ''); + $user->setTeams(teams: $this->getTeamsFromKeycloakGroups(keycloakUser: $keycloakUser)); + $user->setRoles(roles: $this->getRolesForKeycloakUser(keycloakUser: $keycloakUser)); + $this->em->persist($user); + $this->em->flush(); + return $user; + } +} diff --git a/src/Security/UserProvider.php b/src/Security/UserProvider.php deleted file mode 100644 index a8713c44..00000000 --- a/src/Security/UserProvider.php +++ /dev/null @@ -1,86 +0,0 @@ -entityManager = $entityManager; - } - - /** - * Loads the user for the given username. - * - * This method must throw UsernameNotFoundException if the user is not - * found. - * - * @param string $username The username - * - * @return UserInterface - * - * @throws \Doctrine\ORM\NonUniqueResultException - */ - public function loadUserByUsername($username) - { - return $this->entityManager->createQueryBuilder('u') - ->where('u.email = :email') - ->setParameter('email', $username) - ->getQuery() - ->getOneOrNullResult(); - } - - /** - * Refreshes the user. - * - * It is up to the implementation to decide if the user data should be - * totally reloaded (e.g. from the database), or if the UserInterface - * object can just be merged into some internal array of users/identity - * map. - * - * @param UserInterface $user - * @return UserInterface - * - */ - public function refreshUser(UserInterface $user) - { - if (!$user instanceof User) { - throw new UnsupportedUserException( - sprintf('Instances of "%s" are not supported.', get_class($user)) - ); - } - return $user; - } - - /** - * Whether this provider supports the given user class. - * - * @param string $class - * - * @return bool - */ - public function supportsClass($class) - { - return $class === 'App\Security\User'; - } -} \ No newline at end of file diff --git a/src/Service/AkademieService.php b/src/Service/AkademieService.php index 52801ede..e406ea10 100644 --- a/src/Service/AkademieService.php +++ b/src/Service/AkademieService.php @@ -8,34 +8,38 @@ namespace App\Service; - +use App\DataTypes\ParticipationStateTypes; use App\Entity\AkademieBuchungen; use App\Entity\AkademieKurse; +use App\Entity\Participation; use App\Entity\Team; use Doctrine\ORM\EntityManagerInterface; -use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Twig\Environment; - class AkademieService { - private $em; - private $mailer; - private $twig; - private $parameterbag; - private $notificationService; - public function __construct(Environment $engine, EntityManagerInterface $entityManager, MailerService $mailerService, ParameterBagInterface $parameterBag, NotificationService $notificationService) + private CurrentTeamService $currentTeamService; + private NotificationService $notificationService; + private Environment $twig; + + public function __construct( + Environment $engine, + EntityManagerInterface $entityManager, + NotificationService $notificationService, + CurrentTeamService $currentTeamService) { $this->em = $entityManager; - $this->mailer = $mailerService; $this->twig = $engine; - $this->parameterbag = $parameterBag; $this->notificationService = $notificationService; + $this->currentTeamService = $currentTeamService; } - function addUser(AkademieKurse $kurs, $daten) + public function addUser(AkademieKurse $kurs, $daten): void { + $participation = (new Participation()) + ->setState(ParticipationStateTypes::$ASSIGNED) + ->setQuestionnaire($kurs->getQuestionnaire()); $buchung = new AkademieBuchungen(); $buchung->setKurs($kurs); @@ -43,13 +47,17 @@ function addUser(AkademieKurse $kurs, $daten) $buchung->setVorlage($daten['wiedervorlage']); $buchung->setZugewiesen($daten['zugewiesen']); $buchung->setInvitation(false); + $buchung->addParticipation($participation); + + $this->em->persist($participation); foreach ($daten['user'] as $user) { $buchung->setUser($user); $this->em->persist($buchung); $this->em->flush(); if ($daten['invite'] === true) { - $content = $this->twig->render('email/neuerKurs.html.twig', ['buchung' => $buchung, 'team' => $user->getTeam()]); + $team = $this->currentTeamService->getTeamFromSession($user); + $content = $this->twig->render('email/neuerKurs.html.twig', ['buchung' => $buchung, 'team' => $team]); $buchung->setInvitation(true); $this->notificationService->sendNotificationAkademie($buchung, $content); } @@ -59,7 +67,7 @@ function addUser(AkademieKurse $kurs, $daten) } - function removeKurs(Team $team, AkademieKurse $kurs) + public function removeKurs(Team $team, AkademieKurse $kurs): bool { $buchungen = $this->em->getRepository(AkademieBuchungen::class)->findBuchungenByTeam($team, $kurs); diff --git a/src/Service/ApproveService.php b/src/Service/ApproveService.php index 5092d163..17b30f30 100644 --- a/src/Service/ApproveService.php +++ b/src/Service/ApproveService.php @@ -8,22 +8,26 @@ namespace App\Service; - use App\Entity\User; use Doctrine\ORM\EntityManagerInterface; +use Exception; use Symfony\Component\Form\FormFactoryInterface; - +use Symfony\Contracts\Translation\TranslatorInterface; class ApproveService { private $em; - public function __construct(EntityManagerInterface $entityManager, FormFactoryInterface $formBuilder) + public function __construct( + EntityManagerInterface $entityManager, + FormFactoryInterface $formBuilder, + private TranslatorInterface $translator, + ) { $this->em = $entityManager; } - function approve($data, User $user) + public function approve($data, User $user): array { $status = array(); $status['data'] = $data->getId(); @@ -41,21 +45,21 @@ function approve($data, User $user) $this->em->flush(); $status['status'] = true; - $status['snack'] = 'Freigabe entfernt und neue Version angelegt'; + $status['snack'] = $this->translator->trans(id: 'element.unpublished', domain: 'service'); $status['data'] = $newdata->getId(); $status['clone'] = true; } else { $data->setApproved(true); $data->setApprovedBy($user); $status['status'] = true; - $status['snack'] = 'Element freigegeben'; + $status['snack'] = $this->translator->trans(id: 'element.published', domain: 'service'); $this->em->persist($data); $this->em->flush(); } - } catch (\Exception $e) { + } catch (Exception $e) { $status['status'] = false; - $status['snack'] = 'FEHLER: Element konnte nicht freigegeben werden. Versuchen Sie es noch einmal.'; + $status['snack'] = $this->translator->trans(id: 'element.error'); } return $status; diff --git a/src/Service/AssignService.php b/src/Service/AssignService.php index 137ac00f..38302b50 100644 --- a/src/Service/AssignService.php +++ b/src/Service/AssignService.php @@ -8,7 +8,6 @@ namespace App\Service; - use App\Entity\AuditTom; use App\Entity\Datenweitergabe; use App\Entity\Forms; @@ -23,29 +22,32 @@ use App\Form\Type\AssignType; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\EntityManagerInterface; +use Exception; use Symfony\Component\Form\FormFactoryInterface; -use Symfony\Component\Routing\RouterInterface; +use Symfony\Component\Form\FormInterface; use Twig\Environment; - class AssignService { - private $em; - private $formBuilder; - private $router; - private $notificationService; - private $twig; - public function __construct(EntityManagerInterface $entityManager, FormFactoryInterface $formBuilder, RouterInterface $router, NotificationService $notificationService, Environment $engine) + private FormFactoryInterface $formBuilder; + private NotificationService $notificationService; + private Environment $twig; + + public function __construct( + EntityManagerInterface $entityManager, + FormFactoryInterface $formBuilder, + NotificationService $notificationService, + Environment $engine, + ) { $this->em = $entityManager; $this->formBuilder = $formBuilder; - $this->router = $router; $this->notificationService = $notificationService; $this->twig = $engine; } - function assign($request, User $user) + public function assign($request, User $user): ArrayCollection|array { $assignDatenweitergabe = $user->getAssignedDatenweitergaben()->toarray(); $assignVvt = $user->getAssignedVvts()->toarray(); @@ -70,63 +72,25 @@ function assign($request, User $user) $assign = new ArrayCollection(array_merge($assignAudit, $assignVvt, $assignDsfa, $assignDatenweitergabe)); return $assign; - - } catch (\Exception $exception) { + } catch (Exception $exception) { return $assign; } } - function createForm($data, Team $team) - { - if (count($team->getMembers()) > 0) { - $teamMembers = $team->getMembers(); - if (!in_array($team->getDsbUser(), $teamMembers->toArray())) { - if ($team->getDsbUser()) { - $teamMembers->add($team->getDsbUser()); - } - } - } else { - $teamMembers = array(); - } - $form = $this->formBuilder->create(AssignType::class, $data, ['user' => $teamMembers]); - return $form; - } - - function assignVvt($request, VVT $vvt) - { - try { - - if ($vvt->getAssignedUser() == null) { - $data = $request->get('assign'); - $user = $this->em->getRepository(User::class)->find($data['user']); - if ($user && $vvt->getTeam() === $user->getTeam()) { - $vvt->setAssignedUser($user); - $content = $this->twig->render('email/assignementVvt.html.twig', ['assign' => $vvt->getName(), 'data' => $vvt, 'team' => $user->getTeam()]); - $this->notificationService->sendNotificationAssign($content, $user); - } - } else { - $vvt->setAssignedUser(null); - } - $this->em->persist($vvt); - $this->em->flush(); - - - return true; - } catch (\Exception $exception) { - return false; - } - } - - function assignAudit($request, AuditTom $audit) + public function assignAudit($request, AuditTom $audit): bool { try { if ($audit->getAssignedUser() == null) { $data = $request->get('assign'); $user = $this->em->getRepository(User::class)->find($data['user']); - if ($user && $audit->getTeam() === $user->getTeam()) { + if ($user && $user->hasTeam($audit->getTeam())) { $audit->setAssignedUser($user); - $content = $this->twig->render('email/assignementAudit.html.twig', ['assign' => $audit->getFrage(), 'data' => $audit, 'team' => $user->getTeam()]); + $content = $this->twig->render('email/assignementAudit.html.twig', [ + 'assign' => $audit->getFrage(), + 'data' => $audit, + 'team' => $audit->getTeam(), + ]); $this->notificationService->sendNotificationAssign($content, $user); } } else { @@ -136,20 +100,24 @@ function assignAudit($request, AuditTom $audit) $this->em->flush(); return true; - } catch (\Exception $exception) { + } catch (Exception $exception) { return false; } } - function assignDatenweitergabe($request, Datenweitergabe $datenweitergabe) + public function assignDatenweitergabe($request, Datenweitergabe $datenweitergabe): bool { try { if ($datenweitergabe->getAssignedUser() == null) { $data = $request->get('assign'); $user = $this->em->getRepository(User::class)->find($data['user']); - if ($user && $datenweitergabe->getTeam() === $user->getTeam()) { + if ($user && $user->hasTeam($datenweitergabe->getTeam())) { $datenweitergabe->setAssignedUser($user); - $content = $this->twig->render('email/assignementDatenweitergabe.html.twig', ['assign' => $datenweitergabe->getGegenstand(), 'data' => $datenweitergabe, 'team' => $user->getTeam()]); + $content = $this->twig->render('email/assignementDatenweitergabe.html.twig', [ + 'assign' => $datenweitergabe->getGegenstand(), + 'data' => $datenweitergabe, + 'team' => $datenweitergabe->getTeam(), + ]); $this->notificationService->sendNotificationAssign($content, $user); } } else { @@ -159,45 +127,49 @@ function assignDatenweitergabe($request, Datenweitergabe $datenweitergabe) $this->em->flush(); return true; - } catch (\Exception $exception) { + } catch (Exception $exception) { return false; } } - function assignDsfa($request, VVTDsfa $dsfa) + public function assignDsfa($request, VVTDsfa $dsfa): bool { try { - - if ($dsfa->getAssignedUser() == null) { - $data = $request->get('assign'); - $user = $this->em->getRepository(User::class)->find($data['user']); - if ($user && $dsfa->getVvt()->getTeam() === $user->getTeam()) { - $dsfa->setAssignedUser($user); - $content = $this->twig->render('email/assignementDsfa.html.twig', ['assign' => $dsfa->getVvt()->getName(), 'data' => $dsfa, 'team' => $user->getTeam()]); - $this->notificationService->sendNotificationAssign($content, $user); - } - } else { - $dsfa->setAssignedUser(null); + $data = $request->get('assign'); + $user = $this->em->getRepository(User::class)->find($data['user']); + $team = $dsfa->getVvt()->getTeam(); + if ($user && $user->hasTeam($team)) { + $dsfa->setAssignedUser($user); + $user->addAssignedDsfa($dsfa); + $content = $this->twig->render('email/assignementDsfa.html.twig', [ + 'assign' => $dsfa->getVvt()->getName(), + 'data' => $dsfa, + 'team' => $team, + ]); + $this->notificationService->sendNotificationAssign($content, $user); } $this->em->persist($dsfa); + $this->em->persist($dsfa); $this->em->flush(); - return true; - } catch (\Exception $exception) { + } catch (Exception $exception) { return false; } } - function assignForm($request, Forms $forms) + public function assignForm($request, Forms $forms): bool { try { - if ($forms->getAssignedUser() == null) { $data = $request->get('assign'); $user = $this->em->getRepository(User::class)->find($data['user']); - if ($user && $forms->getTeam() === $user->getTeam()) { + if ($user && $user->hasTeam($forms->getTeam())) { $forms->setAssignedUser($user); - $content = $this->twig->render('email/assignementForm.html.twig', ['assign' => $forms->getTitle(), 'data' => $forms, 'team' => $user->getTeam()]); + $content = $this->twig->render('email/assignementForm.html.twig', [ + 'assign' => $forms->getTitle(), + 'data' => $forms, + 'team' => $forms->getTeam(), + ]); $this->notificationService->sendNotificationAssign($content, $user); } } else { @@ -207,21 +179,25 @@ function assignForm($request, Forms $forms) $this->em->flush(); return true; - } catch (\Exception $exception) { + } catch (Exception $exception) { return false; } } - function assignPolicy($request, Policies $policies) + public function assignPolicy($request, Policies $policies): bool { try { if ($policies->getAssignedUser() == null) { $data = $request->get('assign'); $user = $this->em->getRepository(User::class)->find($data['user']); - if ($user && $policies->getTeam() === $user->getTeam()) { + if ($user && $user->hasTeam($policies->getTeam())) { $policies->setAssignedUser($user); - $content = $this->twig->render('email/assignementPolicy.html.twig', ['assign' => $policies->getScope(), 'data' => $policies, 'team' => $user->getTeam()]); + $content = $this->twig->render('email/assignementPolicy.html.twig', [ + 'assign' => $policies->getScope(), + 'data' => $policies, + 'team' => $policies->getTeam(), + ]); $this->notificationService->sendNotificationAssign($content, $user); } } else { @@ -231,21 +207,25 @@ function assignPolicy($request, Policies $policies) $this->em->flush(); return true; - } catch (\Exception $exception) { + } catch (Exception $exception) { return false; } } - function assignSoftware($request, Software $software) + public function assignSoftware($request, Software $software): bool { try { if ($software->getAssignedUser() == null) { $data = $request->get('assign'); $user = $this->em->getRepository(User::class)->find($data['user']); - if ($user && $software->getTeam() === $user->getTeam()) { + if ($user && $user->hasTeam($software->getTeam())) { $software->setAssignedUser($user); - $content = $this->twig->render('email/assignementSoftware.html.twig', ['assign' => $software->getName(), 'data' => $software, 'team' => $user->getTeam()]); + $content = $this->twig->render('email/assignementSoftware.html.twig', [ + 'assign' => $software->getName(), + 'data' => $software, + 'team' => $software->getTeam() + ]); $this->notificationService->sendNotificationAssign($content, $user); } } else { @@ -255,21 +235,55 @@ function assignSoftware($request, Software $software) $this->em->flush(); return true; - } catch (\Exception $exception) { + } catch (Exception $exception) { return false; } } - function assignVorfall($request, Vorfall $vorfall) + public function assignTask($request, Task $task): bool + { + try { + if ($task->getAssignedUser() == null) { + $data = $request->get('assign'); + $user = $this->em->getRepository(User::class)->find($data['user']); + if ($user && $user->hasTeam($task->getTeam())) { + $task->setAssignedUser($user); + $content = $this->twig->render( + 'email/assignementTask.html.twig', + [ + 'assign' => $task->getTitle(), + 'data' => $task, + 'team' => $task->getTeam(), + ], + ); + $this->notificationService->sendNotificationAssign($content, $user); + } + } else { + $task->setAssignedUser(null); + } + $this->em->persist($task); + $this->em->flush(); + + return true; + } catch (Exception $exception) { + return false; + } + } + + public function assignVorfall($request, Vorfall $vorfall): bool { try { if ($vorfall->getAssignedUser() == null) { $data = $request->get('assign'); $user = $this->em->getRepository(User::class)->find($data['user']); - if ($user && $vorfall->getTeam() === $user->getTeam()) { + if ($user && $user->hasTeam($vorfall->getTeam())) { $vorfall->setAssignedUser($user); - $content = $this->twig->render('email/assignementVorfall.html.twig', ['assign' => $vorfall->getFakten(), 'data' => $vorfall, 'team' => $user->getTeam()]); + $content = $this->twig->render('email/assignementVorfall.html.twig', [ + 'assign' => $vorfall->getFakten(), + 'data' => $vorfall, + 'team' => $vorfall->getTeam() + ]); $this->notificationService->sendNotificationAssign($content, $user); } } else { @@ -279,32 +293,51 @@ function assignVorfall($request, Vorfall $vorfall) $this->em->flush(); return true; - } catch (\Exception $exception) { + } catch (Exception $exception) { return false; } } - function assignTask($request, Task $task) + public function assignVvt($request, VVT $vvt): bool { try { - - if ($task->getAssignedUser() == null) { + if ($vvt->getAssignedUser() == null) { $data = $request->get('assign'); $user = $this->em->getRepository(User::class)->find($data['user']); - if ($user && $task->getTeam() === $user->getTeam()) { - $task->setAssignedUser($user); - $content = $this->twig->render('email/assignementTask.html.twig', ['assign' => $task->getTitle(), 'data' => $task, 'team' => $user->getTeam()]); + if ($user && $user->hasTeam($vvt->getTeam())) { + $vvt->setAssignedUser($user); + $content = $this->twig->render('email/assignementVvt.html.twig', [ + 'assign' => $vvt->getName(), + 'data' => $vvt, + 'team' => $vvt->getTeam(), + ]); $this->notificationService->sendNotificationAssign($content, $user); } } else { - $task->setAssignedUser(null); + $vvt->setAssignedUser(null); } - $this->em->persist($task); + $this->em->persist($vvt); $this->em->flush(); return true; - } catch (\Exception $exception) { + } catch (Exception $exception) { return false; } } + + public function createForm($data, Team $team): FormInterface + { + if (count($team->getMembers()) > 0) { + $teamMembers = $team->getMembers(); + if (!in_array($team->getDsbUser(), $teamMembers->toArray())) { + if ($team->getDsbUser()) { + $teamMembers->add($team->getDsbUser()); + } + } + } else { + $teamMembers = array(); + } + $form = $this->formBuilder->create(AssignType::class, $data, ['user' => $teamMembers]); + return $form; + } } diff --git a/src/Service/AssistantService.php b/src/Service/AssistantService.php new file mode 100644 index 00000000..5cfd63ff --- /dev/null +++ b/src/Service/AssistantService.php @@ -0,0 +1,205 @@ +locate('assistant.yaml', null, false)[0]; + $values = Yaml::parse(file_get_contents($stepsFile)); + if (array_key_exists('steps', $values)) { + $this->steps = $values['steps']; + } + } + + public function saveToSession(int $step, string $id): void + { + $session = $this->requestStack->getSession(); + $key = 'step_' . $step; + $session->set($key, $id); + } + + public function getFromSession(int $step): ?string { + $session = $this->requestStack->getSession(); + $key = 'step_' . $step; + return $session->get($key); + } + + public function getPropertyForStep(int $step, string $key): int|string|bool|Kontakte|VVT|Software|null { + if (array_key_exists($step, $this->steps) && array_key_exists($key, $this->steps[$step])) { + $value = $this->steps[$step][$key]; + return match($key) { + self::PROPERTY_CONTACT => $this->getContactFromStep($value), + self::PROPERTY_PROCEDURE => $this->getProcedureFromStep($value), + self::PROPERTY_SOFTWARE => $this->getSoftwareFromStep($value), + self::PROPERTY_TITLE, self::PROPERTY_INFO, self::PROPERTY_NEW + => $this->translator->trans(id: $value, domain: 'assistant'), + default => $value + }; + } + return null; + } + + private function getContactFromStep(int $step): ?Kontakte { + $contactId = $this->getFromSession($step); + return $contactId ? $this->contactRepository->find($contactId): null; + } + + private function getProcedureFromStep(int $step): ?VVT { + $procedureId = $this->getFromSession($step); + return $procedureId ? $this->vvtRepository->find($procedureId): null; + } + + private function getSoftwareFromStep(int $step): ?Software { + $softwareId = $this->getFromSession($step); + return $softwareId ? $this->softwareRepository->find($softwareId): null; + } + + public function getStepCount(): int { + return count($this->steps); + } + + public function setStep(int $step): void { + $session = $this->requestStack->getSession(); + $session->set('step', $step); + } + + public function getStep(): int { + $session = $this->requestStack->getSession(); + $id = $session->get('step'); + return $id ? : 0; + } + + public function clear(): void { + $session = $this->requestStack->getSession(); + $session->set('step', 0); + + for ($i = 0; $i < count($this->steps); $i++) { + $session->remove('step_' . $i); + } + } + + public function createElementForStep(int $step, User $user, Team $team): Software|Kontakte|VVT|Datenweitergabe|null + { + $item = null; + + switch ($this->getPropertyForStep($step, self::PROPERTY_TYPE)) { + case SoftwareType::class: + $item = $this->softwareService->newSoftware($team, $user); + break; + case KontaktType::class: + $item = new Kontakte(); + $item->setTeam($team); + $item->setActiv(1); + break; + case DatenweitergabeType::class: + if (array_key_exists(self::PROPERTY_TRANSFER_TYPE, $this->steps[$step])) { + $item = $this->dataTransferService->newDatenweitergabe($user, 2); + } else { + $item = $this->dataTransferService->newDatenweitergabe($user, 1); + } + $this->addDependenciesToDatenweitergabe($item, $step); + break; + case VVTType::class: + $item = $this->vvtService->newVvt($team, $user); + $this->addDependenciesToProcedure($item, $step); + } + return $item; + } + + public function getSelectDataForStep(int $step, Team $team): array { + $select = []; + switch ($this->getPropertyForStep($step, self::PROPERTY_TYPE)) { + case KontaktType::class: + $select['selected'] = $this->getFromSession($step); + $select['label'] = $this->translator->trans(id: 'select.contact', domain: 'assistant'); + $select['items'] = $this->contactRepository->findActiveByTeam($team); + $select['multiple'] = false; + break; + case SoftwareType::class: + $select['selected'] = $this->getFromSession($step); + $select['label'] = $this->translator->trans(id: 'select.software', domain: 'assistant'); + $select['items'] = $this->softwareRepository->findActiveByTeam($team); + $select['multiple'] = true; + break; + case VVTType::class: + $select['selected'] = $this->getFromSession($step); + $select['label'] = $this->translator->trans(id: 'select.procedure', domain: 'assistant'); + $select['items'] = $this->vvtRepository->findActiveByTeam($team); + $select['multiple'] = true; + break; + } + return $select; + } + + public function createForm($type, $newItem, Team $team) { + return match ($type) { + DatenweitergabeType::class => $this->dataTransferService->createForm($newItem, $team), + VVTType::class => $this->vvtService->createForm($newItem, $team), + default => $this->formBuilder->create($type, $newItem) + }; + } + + private function addDependenciesToDatenweitergabe(Datenweitergabe $item, $step): void { + $contact = $this->getPropertyForStep(step: $step, key: self::PROPERTY_CONTACT); + $item->setKontakt($contact); + $software = $this->getPropertyForStep(step: $step, key: self::PROPERTY_SOFTWARE); + if ($software) { + $item->addSoftware($software); + } + $procedure = $this->getPropertyForStep(step: $step, key: self::PROPERTY_PROCEDURE); + $item->addVerfahren($procedure); + } + + private function addDependenciesToProcedure(VVT $procedure, $step): void { + $software = $this->getPropertyForStep(step: $step, key: self::PROPERTY_SOFTWARE); + if ($software) { + $procedure->addSoftware($software); + } + } +} diff --git a/src/Service/ClientRequestService.php b/src/Service/ClientRequestService.php index 2867d993..fe2fc153 100644 --- a/src/Service/ClientRequestService.php +++ b/src/Service/ClientRequestService.php @@ -8,48 +8,45 @@ namespace App\Service; - use App\Entity\ClientComment; use App\Entity\ClientRequest; use App\Form\Type\ClientRequestType; +use DateTime; use Doctrine\ORM\EntityManagerInterface; +use Exception; use Symfony\Component\Form\FormFactoryInterface; -use Symfony\Component\Routing\RouterInterface; +use Symfony\Component\Form\FormInterface; +use Symfony\Contracts\Translation\TranslatorInterface; use Twig\Environment; - class ClientRequestService { - private $em; - private $formBuilder; - private $router; - private $notificationService; - private $twig; - - public function __construct(EntityManagerInterface $entityManager, FormFactoryInterface $formBuilder, RouterInterface $router, NotificationService $notificationService, Environment $engine) + public function __construct( + private EntityManagerInterface $em, + private FormFactoryInterface $formBuilder, + private NotificationService $notificationService, + private Environment $twig, + private CurrentTeamService $currentTeamService, + private TranslatorInterface $translator, + ) { - $this->em = $entityManager; - $this->formBuilder = $formBuilder; - $this->router = $router; - $this->notificationService = $notificationService; - $this->twig = $engine; } - function userValid(ClientRequest $clientRequest, $user) + public function closeRequest(ClientRequest $clientRequest, $user) { try { if ($clientRequest) { - if ($clientRequest->getValiduser()) { - $clientRequest->setValidUser(false); - $clientRequest->setUserValidBy(null); - $comment = 'Die Nutzervalidierung wurde wieder entfernt.'; + if ($clientRequest->getActiv()) { + $clientRequest->setActiv(false); + $comment = $this->translator->trans(id: 'request.closed', domain: 'client_request'); } else { - $clientRequest->setValidUser(true); - $clientRequest->setUserValidBy($user); - $comment = 'Der Nutzer wurde als validiert markiert.'; + $clientRequest->setActiv(true); + $clientRequest->setOpen(true); + $comment = $this->translator->trans(id: 'request.reopened', domain: 'client_request'); } - $this->newComment($clientRequest, $comment, $user->getTeam()->getName() . ' > ' . $user->getUsername(), 1); + $team = $this->currentTeamService->getTeamFromSession($user); + $this->newComment($clientRequest, $comment, $team->getKeycloakGroup() . ' > ' . $user->getUsername(), 1); $this->em->persist($clientRequest); $this->em->flush(); @@ -57,12 +54,35 @@ function userValid(ClientRequest $clientRequest, $user) return true; } } catch - (\Exception $exception) { + (Exception $exception) { return false; } } - function newComment(ClientRequest $clientRequest, $comment, $user, $type) + public function interalRequest(ClientRequest $clientRequest): bool + { + try { + if ($clientRequest) { + if (!$clientRequest->getActiv()) { + if ($clientRequest->getOpen()) { + $clientRequest->setOpen(false); + } else { + $clientRequest->setOpen(true); + } + } + + $this->em->persist($clientRequest); + $this->em->flush(); + + return true; + } + } catch + (Exception $exception) { + } + return false; + } + + public function newComment(ClientRequest $clientRequest, $comment, $user, $type): bool { try { @@ -72,100 +92,103 @@ function newComment(ClientRequest $clientRequest, $comment, $user, $type) $clientComment->setComment($comment); $clientComment->setClientRequest($clientRequest); - $clientComment->setCreatedAt(new \DateTime()); + $clientComment->setCreatedAt(new DateTime()); if ($type) { if ($clientRequest->getPgp()) { - $content = $this->twig->render('email/client/notificationCommentEncrypt.html.twig', ['data' => $clientRequest, 'comment' => $clientComment]); - $this->notificationService->sendEncrypt($clientRequest->getPgp(), $content, $clientRequest->getEmail(), 'Neue Nachricht vorhanden'); + $content = $this->twig->render( + 'email/client/notificationCommentEncrypt.html.twig', + [ + 'data' => $clientRequest, + 'comment' => $clientComment, + ], + ); + $this->notificationService->sendEncrypt( + $clientRequest->getPgp(), + $content, + $clientRequest->getEmail(), + $this->translator->trans(id: 'notification.new.message.available', domain: 'service'), + ); } else { - $content = $this->twig->render('email/client/notificationComment.html.twig', ['data' => $clientRequest, 'title' => $clientRequest->getTitle(), 'team' => $clientRequest->getTeam()]); + $content = $this->twig->render( + 'email/client/notificationComment.html.twig', + [ + 'data' => $clientRequest, + 'title' => $clientRequest->getTitle(), + 'team' => $clientRequest->getTeam(), + ], + ); $this->notificationService->sendNotificationRequest($content, $clientRequest->getEmail()); } } else { foreach ($clientRequest->getTeam()->getAdmins() as $admins) { - $content = $this->twig->render('email/client/notificationCommentInternal.html.twig', ['data' => $clientRequest, 'title' => $clientRequest->getTitle(), 'team' => $clientRequest->getTeam()]); + $content = $this->twig->render( + 'email/client/notificationCommentInternal.html.twig', + [ + 'data' => $clientRequest, + 'title' => $clientRequest->getTitle(), + 'team' => $clientRequest->getTeam(), + ], + ); $this->notificationService->sendNotificationRequest($content, $admins->getEmail()); } } - $this->em->persist($clientComment); $this->em->flush(); return true; - } catch (\Exception $exception) { + } catch (Exception) { return false; } } - function closeRequest(ClientRequest $clientRequest, $user) + public function newRequest($team): bool|FormInterface { try { - if ($clientRequest) { - if ($clientRequest->getActiv()) { - $clientRequest->setActiv(false); - $comment = 'Diese Anfrage wurde geschlossen.'; - } else { - $clientRequest->setActiv(true); - $clientRequest->setOpen(true); - $comment = 'Diese Anfrage wurde wieder geöffnet.'; - } - - $this->newComment($clientRequest, $comment, $user->getTeam()->getName() . ' > ' . $user->getUsername(), 1); - - $this->em->persist($clientRequest); - $this->em->flush(); + $clientRequest = new ClientRequest(); + $clientRequest->setUuid(uniqid('', true)); + $clientRequest->setOpen(true); + $clientRequest->setCreatedAt(new DateTime()); + $clientRequest->setEmailValid(false); + $clientRequest->setToken(uniqid(bin2hex(random_bytes(150)), true)); + $clientRequest->setTeam($team); + $clientRequest->setActiv(true); + $clientRequest->setValidUser(false); - return true; - } + $form = $this->formBuilder->create(ClientRequestType::class, $clientRequest); + return $form; } catch - (\Exception $exception) { + (Exception $exception) { return false; } } - function interalRequest(ClientRequest $clientRequest) + public function userValid(ClientRequest $clientRequest, $user) { try { if ($clientRequest) { - if (!$clientRequest->getActiv()) { - if ($clientRequest->getOpen()) { - $clientRequest->setOpen(false); - } else { - $clientRequest->setOpen(true); - } + if ($clientRequest->getValiduser()) { + $clientRequest->setValidUser(false); + $clientRequest->setUserValidBy(null); + $comment = $this->translator->trans(id: 'user.comment.validation.removed', domain: 'client_request'); + } else { + $clientRequest->setValidUser(true); + $clientRequest->setUserValidBy($user); + $comment = $this->translator->trans(id: 'user.comment.validation.success', domain: 'client_reqeust'); } + $team = $this->currentTeamService->getTeamFromSession($user); + $this->newComment($clientRequest, $comment, $team->getKeycloakGroup() . ' > ' . $user->getUsername(), 1); + $this->em->persist($clientRequest); $this->em->flush(); return true; } } catch - (\Exception $exception) { - return false; - } - } - - function newRequest($team) - { - try { - $clientRequest = new ClientRequest(); - $clientRequest->setUuid(uniqid('', true)); - $clientRequest->setOpen(true); - $clientRequest->setCreatedAt(new \DateTime()); - $clientRequest->setEmailValid(false); - $clientRequest->setToken(uniqid(bin2hex(random_bytes(150)), true)); - $clientRequest->setTeam($team); - $clientRequest->setActiv(true); - $clientRequest->setValidUser(false); - - $form = $this->formBuilder->create(ClientRequestType::class, $clientRequest); - return $form; - } catch - (\Exception $exception) { + (Exception $exception) { return false; } } diff --git a/src/Service/ConnectDefaultToTeamsService.php b/src/Service/ConnectDefaultToTeamsService.php index 73e96a95..08a430a0 100644 --- a/src/Service/ConnectDefaultToTeamsService.php +++ b/src/Service/ConnectDefaultToTeamsService.php @@ -22,23 +22,21 @@ class ConnectDefaultToTeamsService { - private $em; - private $team; private $output; private $progress; + private $team; - public function __construct(EntityManagerInterface $entityManager) + public function __construct(private EntityManagerInterface $em) { - $this->em = $entityManager; } - public function connectDefault(Team $team, Output $output = null) + public function connectDefault(Team $team, Output $output = null): void { $this->team = $team; $this->output = $output; - if ($output){ - $this->progress = new ProgressBar($this->output, 1); - }else{ + if ($output) { + $this->progress = new ProgressBar($this->output, 1); + } else { $this->progress = null; } $this->personenGruppen(); @@ -52,60 +50,63 @@ public function connectDefault(Team $team, Output $output = null) $this->finishProgress(); } - private function personenGruppen() + private function advanceProgress(): void { - $tmp = array(); + if ($this->progress) { + $this->progress->advance(); + } + } - $personenGruppen = $this->em->getRepository(VVTPersonen::class)->findBy(array('team' => null)); - $this->increaseProgress(sizeof($personenGruppen)); - foreach ($personenGruppen as $data) { - $pG = clone $data; - $pG->setTeam($this->team)->setActiv(true); - $this->em->persist($pG); - $tmp[$data->getId()] = $pG; + private function datenGruppen(): void + { + $tmp = array(); + $datenkategorie = $this->em->getRepository(VVTDatenkategorie::class)->findBy(array('team' => null)); + $this->increaseProgress(sizeof($datenkategorie)); + foreach ($datenkategorie as $data) { + $dK = clone $data; + $dK->setTeam($this->team)->setActiv(true); + $this->em->persist($dK); + $tmp[$data->getId()] = $dK; $data->setActiv(false); $this->em->persist($data); $this->advanceProgress(); - } $this->em->flush(); $risiken = $this->em->getRepository(Policies::class)->findBy(array('team' => $this->team)); $this->increaseProgress(sizeof($risiken)); + foreach ($risiken as $data) { - foreach ($data->getPeople() as $data2) { + foreach ($data->getCategories() as $data2) { if (isset($tmp[$data2->getId()])) { - $data->addPerson($tmp[$data2->getId()]); - $data->removePerson($data2); + $data->addCategory($tmp[$data2->getId()]); + $data->removeCategory($data2); $this->em->persist($data); } - } $this->advanceProgress(); } $this->em->flush(); - $vvt = $this->em->getRepository(VVT::class)->findBy(array('team' => $this->team)); $this->increaseProgress(sizeof($vvt)); foreach ($vvt as $data) { - foreach ($data->getPersonengruppen() as $data2) { + foreach ($data->getKategorien() as $data2) { if (isset($tmp[$data2->getId()])) { - $data->addPersonengruppen($tmp[$data2->getId()]); - $data->removePersonengruppen($data2); + $data->addKategorien($tmp[$data2->getId()]); + $data->removeKategorien($data2); $this->em->persist($data); } } $this->advanceProgress(); } $this->em->flush(); - $vorfall = $this->em->getRepository(Vorfall::class)->findBy(array('team' => $this->team)); $this->increaseProgress(sizeof($vorfall)); foreach ($vorfall as $data) { - foreach ($data->getPersonen() as $data2) { + foreach ($data->getDaten() as $data2) { if (isset($tmp[$data2->getId()])) { - $data->addPersonen($tmp[$data2->getId()]); - $data->removePersonen($data2); + $data->addDaten($tmp[$data2->getId()]); + $data->removeDaten($data2); $this->em->persist($data); } } @@ -115,29 +116,36 @@ private function personenGruppen() } + private function finishProgress(): void + { + if ($this->progress) { + $this->progress->finish(); + } + } - private function risikoGruppen() + private function gesetzlicheGrundlagen(): void { $tmp = array(); - $risikoGruppen = $this->em->getRepository(VVTRisiken::class)->findBy(array('team' => null)); - $this->increaseProgress(sizeof($risikoGruppen)); - foreach ($risikoGruppen as $data) { - $rG = clone $data; - $rG->setTeam($this->team)->setActiv(true); - $this->em->persist($rG); - $tmp[$data->getId()] = $rG; + $grundlagen = $this->em->getRepository(VVTGrundlage::class)->findBy(array('team' => null)); + $this->increaseProgress(sizeof($grundlagen)); + foreach ($grundlagen as $data) { + $new = clone $data; + $new->setTeam($this->team)->setActiv(true); + $this->em->persist($new); + $tmp[$data->getId()] = $new; $data->setActiv(false); $this->em->persist($data); $this->advanceProgress(); } $this->em->flush(); + $vvt = $this->em->getRepository(VVT::class)->findBy(array('team' => $this->team)); $this->increaseProgress(sizeof($vvt)); foreach ($vvt as $data) { - foreach ($data->getRisiko() as $data2) { + foreach ($data->getGrundlage() as $data2) { if (isset($tmp[$data2->getId()])) { - $data->addRisiko($tmp[$data2->getId()]); - $data->removeRisiko($data2); + $data->addGrundlage($tmp[$data2->getId()]); + $data->removeGrundlage($data2); $this->em->persist($data); } } @@ -147,56 +155,96 @@ private function risikoGruppen() } - private function datenGruppen() + private function grundlagenDatenweitergabe(): void { $tmp = array(); - $datenkategorie = $this->em->getRepository(VVTDatenkategorie::class)->findBy(array('team' => null)); - $this->increaseProgress(sizeof($datenkategorie)); - foreach ($datenkategorie as $data) { - $dK = clone $data; - $dK->setTeam($this->team)->setActiv(true); - $this->em->persist($dK); - $tmp[$data->getId()] = $dK; + $grundlagenDatenweitergabe = $this->em->getRepository(DatenweitergabeGrundlagen::class)->findBy(array('team' => null)); + $this->increaseProgress(sizeof($grundlagenDatenweitergabe)); + foreach ($grundlagenDatenweitergabe as $data) { + $new = clone $data; + $new->setTeam($this->team)->setActiv(true); + $this->em->persist($new); + $tmp[$data->getId()] = $new; $data->setActiv(false); $this->em->persist($data); $this->advanceProgress(); } $this->em->flush(); + $datenweitergabe = $this->em->getRepository(Datenweitergabe::class)->findBy(array('team' => $this->team)); + $this->increaseProgress(sizeof($datenweitergabe)); + foreach ($datenweitergabe as $data) { + if (isset($tmp[$data->getGrundlage()->getId()])) { + $data->setGrundlage($tmp[$data->getGrundlage()->getId()]); + $this->em->persist($data); + } + $this->advanceProgress(); + } + $this->em->flush(); + + } + + private function increaseProgress($steps): void + { + if ($this->progress) { + $this->progress->setMaxSteps($this->progress->getMaxSteps() + $steps); + } + } + + private function personenGruppen(): void + { + $tmp = array(); + + $personenGruppen = $this->em->getRepository(VVTPersonen::class)->findBy(array('team' => null)); + $this->increaseProgress(sizeof($personenGruppen)); + foreach ($personenGruppen as $data) { + $pG = clone $data; + $pG->setTeam($this->team)->setActiv(true); + $this->em->persist($pG); + $tmp[$data->getId()] = $pG; + $data->setActiv(false); + $this->em->persist($data); + $this->advanceProgress(); + + } + $this->em->flush(); + $risiken = $this->em->getRepository(Policies::class)->findBy(array('team' => $this->team)); $this->increaseProgress(sizeof($risiken)); - foreach ($risiken as $data) { - foreach ($data->getCategories() as $data2) { + foreach ($data->getPeople() as $data2) { if (isset($tmp[$data2->getId()])) { - $data->addCategory($tmp[$data2->getId()]); - $data->removeCategory($data2); + $data->addPerson($tmp[$data2->getId()]); + $data->removePerson($data2); $this->em->persist($data); } + } $this->advanceProgress(); } $this->em->flush(); + $vvt = $this->em->getRepository(VVT::class)->findBy(array('team' => $this->team)); $this->increaseProgress(sizeof($vvt)); foreach ($vvt as $data) { - foreach ($data->getKategorien() as $data2) { + foreach ($data->getPersonengruppen() as $data2) { if (isset($tmp[$data2->getId()])) { - $data->addKategorien($tmp[$data2->getId()]); - $data->removeKategorien($data2); + $data->addPersonengruppen($tmp[$data2->getId()]); + $data->removePersonengruppen($data2); $this->em->persist($data); } } $this->advanceProgress(); } $this->em->flush(); + $vorfall = $this->em->getRepository(Vorfall::class)->findBy(array('team' => $this->team)); $this->increaseProgress(sizeof($vorfall)); foreach ($vorfall as $data) { - foreach ($data->getDaten() as $data2) { + foreach ($data->getPersonen() as $data2) { if (isset($tmp[$data2->getId()])) { - $data->addDaten($tmp[$data2->getId()]); - $data->removeDaten($data2); + $data->addPersonen($tmp[$data2->getId()]); + $data->removePersonen($data2); $this->em->persist($data); } } @@ -206,29 +254,28 @@ private function datenGruppen() } - private function gesetzlicheGrundlagen() + private function risikoGruppen(): void { $tmp = array(); - $grundlagen = $this->em->getRepository(VVTGrundlage::class)->findBy(array('team' => null)); - $this->increaseProgress(sizeof($grundlagen)); - foreach ($grundlagen as $data) { - $new = clone $data; - $new->setTeam($this->team)->setActiv(true); - $this->em->persist($new); - $tmp[$data->getId()] = $new; + $risikoGruppen = $this->em->getRepository(VVTRisiken::class)->findBy(array('team' => null)); + $this->increaseProgress(sizeof($risikoGruppen)); + foreach ($risikoGruppen as $data) { + $rG = clone $data; + $rG->setTeam($this->team)->setActiv(true); + $this->em->persist($rG); + $tmp[$data->getId()] = $rG; $data->setActiv(false); $this->em->persist($data); $this->advanceProgress(); } $this->em->flush(); - $vvt = $this->em->getRepository(VVT::class)->findBy(array('team' => $this->team)); $this->increaseProgress(sizeof($vvt)); foreach ($vvt as $data) { - foreach ($data->getGrundlage() as $data2) { + foreach ($data->getRisiko() as $data2) { if (isset($tmp[$data2->getId()])) { - $data->addGrundlage($tmp[$data2->getId()]); - $data->removeGrundlage($data2); + $data->addRisiko($tmp[$data2->getId()]); + $data->removeRisiko($data2); $this->em->persist($data); } } @@ -238,41 +285,12 @@ private function gesetzlicheGrundlagen() } - private function status() - { - $tmp = array(); - $status = $this->em->getRepository(VVTStatus::class)->findBy(array('team' => null)); - $this->increaseProgress(sizeof($status)); - foreach ($status as $data) { - $new = clone $data; - $new->setTeam($this->team)->setActiv(true); - $this->em->persist($new); - $tmp[$data->getId()] = $new; - $data->setActiv(false); - $this->em->persist($data); - $this->advanceProgress(); - } - $this->em->flush(); - - $vvt = $this->em->getRepository(VVT::class)->findBy(array('team' => $this->team)); - $this->increaseProgress(sizeof($vvt)); - foreach ($vvt as $data) { - if (isset($tmp[$data->getStatus()->getId()])) { - $data->setStatus($tmp[$data->getStatus()->getId()]); - $this->em->persist($data); - } - $this->advanceProgress(); - } - $this->em->flush(); - - } - - private function grundlagenDatenweitergabe() + private function schutzZiele(): void { $tmp = array(); - $grundlagenDatenweitergabe = $this->em->getRepository(DatenweitergabeGrundlagen::class)->findBy(array('team' => null)); - $this->increaseProgress(sizeof($grundlagenDatenweitergabe)); - foreach ($grundlagenDatenweitergabe as $data) { + $defaultValue = $this->em->getRepository(AuditTomZiele::class)->findBy(array('team' => null)); + $this->increaseProgress(sizeof($defaultValue)); + foreach ($defaultValue as $data) { $new = clone $data; $new->setTeam($this->team)->setActiv(true); $this->em->persist($new); @@ -282,13 +300,15 @@ private function grundlagenDatenweitergabe() $this->advanceProgress(); } $this->em->flush(); - - $datenweitergabe = $this->em->getRepository(Datenweitergabe::class)->findBy(array('team' => $this->team)); - $this->increaseProgress(sizeof($datenweitergabe)); - foreach ($datenweitergabe as $data) { - if (isset($tmp[$data->getGrundlage()->getId()])) { - $data->setGrundlage($tmp[$data->getGrundlage()->getId()]); - $this->em->persist($data); + $auditTom = $this->em->getRepository(AuditTom::class)->findBy(array('team' => $this->team)); + $this->increaseProgress(sizeof($auditTom)); + foreach ($auditTom as $data) { + foreach ($data->getZiele() as $data2) { + if (isset($tmp[$data2->getId()])) { + $data->addZiele($tmp[$data2->getId()]); + $data->removeZiele($data2); + $this->em->persist($data); + } } $this->advanceProgress(); } @@ -296,7 +316,7 @@ private function grundlagenDatenweitergabe() } - private function standDatenweitergabe() + private function standDatenweitergabe(): void { $tmp = array(); $defaultValue = $this->em->getRepository(DatenweitergabeStand::class)->findBy(array('team' => null)); @@ -324,12 +344,12 @@ private function standDatenweitergabe() } - private function schutzZiele() + private function status(): void { $tmp = array(); - $defaultValue = $this->em->getRepository(AuditTomZiele::class)->findBy(array('team' => null)); - $this->increaseProgress(sizeof($defaultValue)); - foreach ($defaultValue as $data) { + $status = $this->em->getRepository(VVTStatus::class)->findBy(array('team' => null)); + $this->increaseProgress(sizeof($status)); + foreach ($status as $data) { $new = clone $data; $new->setTeam($this->team)->setActiv(true); $this->em->persist($new); @@ -339,38 +359,17 @@ private function schutzZiele() $this->advanceProgress(); } $this->em->flush(); - $auditTom = $this->em->getRepository(AuditTom::class)->findBy(array('team' => $this->team)); - $this->increaseProgress(sizeof($auditTom)); - foreach ($auditTom as $data) { - foreach ($data->getZiele() as $data2) { - if (isset($tmp[$data2->getId()])) { - $data->addZiele($tmp[$data2->getId()]); - $data->removeZiele($data2); - $this->em->persist($data); - } + + $vvt = $this->em->getRepository(VVT::class)->findBy(array('team' => $this->team)); + $this->increaseProgress(sizeof($vvt)); + foreach ($vvt as $data) { + if (isset($tmp[$data->getStatus()->getId()])) { + $data->setStatus($tmp[$data->getStatus()->getId()]); + $this->em->persist($data); } $this->advanceProgress(); } $this->em->flush(); } - - private function increaseProgress($steps) - { - if ($this->progress) { - $this->progress->setMaxSteps($this->progress->getMaxSteps() + $steps); - } - } - - private function advanceProgress() - { - if ($this->progress) { - $this->progress->advance(); - } - } - private function finishProgress(){ - if ($this->progress){ - $this->progress->finish(); - } - } -} \ No newline at end of file +} diff --git a/src/Service/CronService.php b/src/Service/CronService.php index 74cd043a..b3c50b3a 100644 --- a/src/Service/CronService.php +++ b/src/Service/CronService.php @@ -12,18 +12,18 @@ use Doctrine\ORM\EntityManagerInterface; use Psr\Log\LoggerInterface; use Symfony\Component\Form\FormFactoryInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class CronService { - private $em; - private $logger; - - public function __construct(EntityManagerInterface $entityManager, FormFactoryInterface $formBuilder, LoggerInterface $logger) + public function __construct( + private EntityManagerInterface $em, + FormFactoryInterface $formBuilder, + private LoggerInterface $logger, + private TranslatorInterface $translator, + ) { - $this->em = $entityManager; - $this->logger = $logger; - } function check($request) @@ -31,12 +31,22 @@ function check($request) $message = false; if ($request->get('token') !== $this->getParameter('cronToken')) { - $message = ['error' => true, 'hinweis' => 'Token fehlerhaft', 'token' => $request->get('token'), 'ip' => $request->getClientIp()]; + $message = + [ + 'error' => true, + 'hinweis' => $this->translator->trans(id: 'cron.token.invalid', domain: 'service'), + 'token' => $request->get('token'), + 'ip' => $request->getClientIp(), + ]; $this->logger->error($message['hinweis'], $message); } if ($this->getParameter('cronIPAdress') !== $request->getClientIp()) { - $message = ['error' => true, 'hinweis' => 'IP Adresse fuer Cron Jobs nicht zugelassen', 'ip' => $request->getClientIp()]; + $message = [ + 'error' => true, + 'hinweis' => $this->translator->trans(id: 'cron.ip.unauthorized', domain: 'service'), + 'ip' => $request->getClientIp(), + ]; $this->logger->error($message['hinweis'], $message); } diff --git a/src/Service/CurrentTeamService.php b/src/Service/CurrentTeamService.php new file mode 100644 index 00000000..5c4fa786 --- /dev/null +++ b/src/Service/CurrentTeamService.php @@ -0,0 +1,49 @@ +requestStack = $requestStack; + } + + public function getCurrentAdminTeam(User $user): Team + { + return $this->findTeam($user->getAdminRoles()); + } + + public function getTeamFromSession(User $user): ?Team + { + return $this->findTeam($user->getTeams()); + } + + public function switchToTeam($team): void + { + $session = $this->requestStack->getSession(); + $session->set('team', $team); + } + + private function findTeam(Collection $teams): ?Team + { + $session = $this->requestStack->getSession(); + $teamName = $session->get('team'); + + if ($teamName) { + foreach ($teams as $team) { + if ($team->getName() === $teamName) { + return $team; + } + } + } + return $teams->get(0); + } +} diff --git a/src/Service/DatenweitergabeService.php b/src/Service/DatenweitergabeService.php index dd838fc4..0fdc2059 100644 --- a/src/Service/DatenweitergabeService.php +++ b/src/Service/DatenweitergabeService.php @@ -18,48 +18,52 @@ use App\Entity\VVT; use App\Entity\VVTDsfa; use App\Form\Type\DatenweitergabeType; +use DateTime; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Form\FormFactoryInterface; +use Symfony\Component\Form\FormInterface; class DatenweitergabeService { - private $em; - private $formBuilder; + const PREFIX_PROCESSING = 'AVV-'; + const PREFIX_TRANSFER = 'DW-'; - public function __construct(EntityManagerInterface $entityManager, FormFactoryInterface $formBuilder) - { - $this->em = $entityManager; - $this->formBuilder = $formBuilder; - } + public function __construct( + private EntityManagerInterface $em, + private FormFactoryInterface $formBuilder, + private CurrentTeamService $currentTeamService, - function newDatenweitergabe(User $user, $type, $prefix) + ) { - $daten = new Datenweitergabe(); - $daten->setTeam($user->getTeam()); - $daten->setNummer($prefix . hexdec(uniqid())); - $daten->setActiv(true); - $daten->setCreatedAt(new \DateTime()); - $daten->setArt($type); - $daten->setUser($user); - - return $daten; } - function cloneDatenweitergabe(Datenweitergabe $datenweitergabe, User $user) + function cloneDatenweitergabe(Datenweitergabe $datenweitergabe, User $user): Datenweitergabe { $newDaten = clone $datenweitergabe; $newDaten->setPrevious($datenweitergabe); - $newDaten->setCreatedAt(new \DateTime()); - $newDaten->setUpdatedAt(new \DateTime()); + $newDaten->setCreatedAt(new DateTime()); + $newDaten->setUpdatedAt(new DateTime()); $newDaten->setUser($user); return $newDaten; } - function createForm(Datenweitergabe $datenweitergabe, Team $team) + function cloneDsfa(VVTDsfa $dsfa, User $user): VVTDsfa { - $stand = $this->em->getRepository(DatenweitergabeStand::class)->findActivByTeam($team); - $grundlagen = $this->em->getRepository(DatenweitergabeGrundlagen::class)->findActivByTeam($team); + $newDsfa = clone $dsfa; + $newDsfa->setPrevious($dsfa); + $newDsfa->setVvt($dsfa->getVvt()); + $newDsfa->setActiv(true); + $newDsfa->setCreatedAt(new DateTime()); + $newDsfa->setUser($user); + + return $newDsfa; + } + + function createForm(Datenweitergabe $datenweitergabe, Team $team): FormInterface + { + $stand = $this->em->getRepository(DatenweitergabeStand::class)->findActiveByTeam($team); + $grundlagen = $this->em->getRepository(DatenweitergabeGrundlagen::class)->findActiveByTeam($team); $verfahren = $this->em->getRepository(VVT::class)->findBy(array('team' => $team, 'activ' => true)); $software = $this->em->getRepository(Software::class)->findBy(array('team' => $team, 'activ' => true)); @@ -68,26 +72,28 @@ function createForm(Datenweitergabe $datenweitergabe, Team $team) return $form; } - function newDsfa(Team $team, User $user, VVT $vvt) + function newDatenweitergabe(User $user, $type): Datenweitergabe + { + $data = new Datenweitergabe(); + $prefix = $type === 1 ? self::PREFIX_TRANSFER : self::PREFIX_PROCESSING; + $data->setTeam($this->currentTeamService->getTeamFromSession($user)); + $data->setNummer($prefix . hexdec(uniqid())); + $data->setActiv(true); + $data->setCreatedAt(new DateTime()); + $data->setArt($type); + $data->setUser($user); + + return $data; + } + + function newDsfa(Team $team, User $user, VVT $vvt): VVTDsfa { $dsfa = new VVTDsfa(); $dsfa->setVvt($vvt); - $dsfa->setCreatedAt(new \DateTime()); + $dsfa->setCreatedAt(new DateTime()); $dsfa->setActiv(true); $dsfa->setUser($user); return $dsfa; } - - function cloneDsfa(VVTDsfa $dsfa, User $user) - { - $newDsfa = clone $dsfa; - $newDsfa->setPrevious($dsfa); - $newDsfa->setVvt($dsfa->getVvt()); - $newDsfa->setActiv(true); - $newDsfa->setCreatedAt(new \DateTime()); - $newDsfa->setUser($user); - - return $newDsfa; - } } diff --git a/src/Service/DisableService.php b/src/Service/DisableService.php index a5643053..d0afab60 100644 --- a/src/Service/DisableService.php +++ b/src/Service/DisableService.php @@ -11,15 +11,16 @@ use App\Entity\User; use Doctrine\ORM\EntityManagerInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class DisableService { - private $em; - - public function __construct(EntityManagerInterface $entityManager) + public function __construct( + private EntityManagerInterface $em, + private TranslatorInterface $translator, + ) { - $this->em = $entityManager; } function disable($data, User $user) @@ -30,12 +31,12 @@ function disable($data, User $user) $data->setActiv(2); $data->setApprovedBy($user); $status['status'] = true; - $status['snack'] = 'Gelöscht'; + $status['snack'] = $this->translator->trans(id: 'deleted', domain: 'general'); } else { $data->setActiv(1); $data->setApprovedBy($user); $status['status'] = true; - $status['snack'] = 'Widerhergestellt'; + $status['snack'] = $this->translator->trans(id: 'restored', domain: 'general'); } $this->em->persist($data); $this->em->flush(); diff --git a/src/Service/FormsService.php b/src/Service/FormsService.php index 32885ac6..8e349fe3 100644 --- a/src/Service/FormsService.php +++ b/src/Service/FormsService.php @@ -15,34 +15,33 @@ use App\Entity\Team; use App\Entity\User; use App\Form\Type\FormsType; +use DateTime; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Form\FormFactoryInterface; +use Symfony\Component\Form\FormInterface; class FormsService { - private $em; - private $formBuilder; - - public function __construct(EntityManagerInterface $entityManager, FormFactoryInterface $formBuilder) + public function __construct( + private EntityManagerInterface $em, + private FormFactoryInterface $formBuilder, + private CurrentTeamService $currentTeamService, + ) { - $this->em = $entityManager; - $this->formBuilder = $formBuilder; } - function newForm(User $user) + public function cloneForms(Forms $forms, User $user): Forms { - $form = new Forms(); - $form->setStatus(0); - $form->setTeam($user->getTeam()); - $form->setActiv(true); - $form->setCreatedAt(new \DateTime()); - $form->setUser($user); - - return $form; + $newForms = clone $forms; + $newForms->setPrevious($forms); + $newForms->setCreatedAt(new DateTime()); + $newForms->setUpdatedAt(new DateTime()); + $newForms->setUser($user); + return $newForms; } - function createForm(Forms $forms, Team $team) + public function createForm(Forms $forms, Team $team): FormInterface { $departments = $this->em->getRepository(AuditTomAbteilung::class)->findBy(array('team' => $team, 'activ' => true)); $products = $this->em->getRepository(Produkte::class)->findBy(array('team' => $team, 'activ' => true)); @@ -52,13 +51,15 @@ function createForm(Forms $forms, Team $team) return $form; } - function cloneForms(Forms $forms, User $user) + public function newForm(User $user): Forms { - $newForms = clone $forms; - $newForms->setPrevious($forms); - $newForms->setCreatedAt(new \DateTime()); - $newForms->setUpdatedAt(new \DateTime()); - $newForms->setUser($user); - return $newForms; + $form = new Forms(); + $form->setStatus(0); + $form->setTeam($this->currentTeamService->getTeamFromSession($user)); + $form->setActiv(true); + $form->setCreatedAt(new DateTime()); + $form->setUser($user); + + return $form; } } diff --git a/src/Service/InviteService.php b/src/Service/InviteService.php index 76afd661..040d24a2 100644 --- a/src/Service/InviteService.php +++ b/src/Service/InviteService.php @@ -9,42 +9,55 @@ namespace App\Service; use App\Entity\User; +use DateTime; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Contracts\Translation\TranslatorInterface; use Twig\Environment; - class InviteService { + public function __construct( + private EntityManagerInterface $em, + private TranslatorInterface $translator, + private UrlGeneratorInterface $router, + private MailerService $mailer, + private ParameterBagInterface $parameterBag, + private Environment $twig, + ) + { + } - - private $em; - private $translator; - private $router; - private $mailer; - private $parameterBag; - private $twig; - - public function __construct(Environment $environment, ParameterBagInterface $parameterBag, MailerService $mailerService, EntityManagerInterface $entityManager, TranslatorInterface $translator, UrlGeneratorInterface $urlGenerator) + public function connectUserWithEmail(User $userfromregisterId, User $user) { - $this->translator = $translator; - $this->em = $entityManager; - $this->router = $urlGenerator; - $this->mailer = $mailerService; - $this->parameterBag = $parameterBag; - $this->twig = $environment; + if ($user !== $userfromregisterId) { + foreach ($userfromregisterId->getTeams() as $team) { + $user->addTeam($team); + } + if (!$user->getAkademieUser()) { + $user->setAkademieUser($userfromregisterId->getAkademieUser()); + } + foreach ($userfromregisterId->getTeamDsb() as $team) { + $user->addTeamDsb($team); + } + $this->em->remove($userfromregisterId); + } + + $user->setRegisterId(null); + $this->em->persist($user); + $this->em->flush(); + return $user; } - public function newUser($email) + public function newUser($email): User { $user = $this->em->getRepository(User::class)->findOneBy(array('email' => $email)); if (!$user) { $user = new User(); $user->setLastName('') ->setFirstName('') - ->setCreatedAt(new \DateTime()) + ->setCreatedAt(new DateTime()) ->setRegisterId(md5(uniqid('ksdjhfkhsdkjhjksd', true))) ->setUsername($email) ->setEmail($email) @@ -62,29 +75,9 @@ public function newUser($email) $this->parameterBag->get('defaultEmail'), $this->parameterBag->get('defaultEmail'), $email, - $this->translator->trans('Einladung zum ODC'), - $content); - return $user; - } - - public function connectUserWithEmail(User $userfromregisterId, User $user) - { - if ($user !== $userfromregisterId) { - if (!$user->getTeam()) { - $user->setTeam($userfromregisterId->getTeam()); - } - if (!$user->getAkademieUser()) { - $user->setAkademieUser($userfromregisterId->getAkademieUser()); - } - foreach ($user->getTeamDsb() as $data) { - $user->addTeamDsb($data); - } - $this->em->remove($userfromregisterId); - } - - $user->setRegisterId(null); - $this->em->persist($user); - $this->em->flush(); + $this->translator->trans(id: 'subject.invite', domain: 'email'), + $content + ); return $user; } diff --git a/src/Service/LoeschkonzeptService.php b/src/Service/LoeschkonzeptService.php index bf46844c..75ce2a60 100644 --- a/src/Service/LoeschkonzeptService.php +++ b/src/Service/LoeschkonzeptService.php @@ -5,12 +5,14 @@ use App\Entity\Loeschkonzept; -use App\Entity\VVTDatenkategorie; use App\Entity\Team; use App\Entity\User; +use App\Entity\VVTDatenkategorie; use App\Form\Type\LoeschkonzeptType; +use DateTimeImmutable; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Form\FormFactoryInterface; +use Symfony\Component\Form\FormInterface; class LoeschkonzeptService @@ -24,7 +26,16 @@ public function __construct(EntityManagerInterface $entityManager, FormFactoryIn $this->formBuilder = $formBuilder; } - function createForm(Loeschkonzept $loeschkonzept, Team $team) + function cloneLoeschkonzept(Loeschkonzept $loeschkonzept): Loeschkonzept + { + $newLoeschkonzept = clone $loeschkonzept; + $newLoeschkonzept->setPrevious($loeschkonzept); + $newLoeschkonzept->setCreateAt(new DateTimeImmutable()); + + return $newLoeschkonzept; + } + + function createForm(Loeschkonzept $loeschkonzept, Team $team): FormInterface { $vvtdatenkategories = $this->em->getRepository(VVTDatenkategorie::class)->findByTeam($team); @@ -33,24 +44,14 @@ function createForm(Loeschkonzept $loeschkonzept, Team $team) return $form; } - function newLoeschkonzept(Team $team, User $user) + function newLoeschkonzept(Team $team, User $user): Loeschkonzept { $loeschkonzept = new Loeschkonzept(); $loeschkonzept->setTeam($team); - $loeschkonzept->setCreateAt(new \DateTimeImmutable()); + $loeschkonzept->setCreateAt(new DateTimeImmutable()); $loeschkonzept->setActiv(true); $loeschkonzept->setUser($user); return $loeschkonzept; } - - - function cloneLoeschkonzept(Loeschkonzept $loeschkonzept) - { - $newLoeschkonzept = clone $loeschkonzept; - $newLoeschkonzept->setPrevious($loeschkonzept); - $newLoeschkonzept->setCreateAt(new \DateTimeImmutable()); - - return $newLoeschkonzept; - } -} \ No newline at end of file +} diff --git a/src/Service/MailerService.php b/src/Service/MailerService.php index ea4ed325..16bced94 100644 --- a/src/Service/MailerService.php +++ b/src/Service/MailerService.php @@ -12,19 +12,17 @@ use nicoSWD\GPG\GPG; use nicoSWD\GPG\PublicKey; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; -use Symfony\Component\Mailer\Transport\TransportInterface; +use Symfony\Component\Mailer\MailerInterface; +use Symfony\Component\Mime\Address; +use Symfony\Component\Mime\Email; class MailerService { - private $smtp; - private $swift; private $parameter; - public function __construct(ParameterBagInterface $parameterBag, TransportInterface $smtp, \Swift_Mailer $swift_Mailer) + public function __construct(ParameterBagInterface $parameterBag, private MailerInterface $mailer) { - $this->smtp = $smtp; - $this->swift = $swift_Mailer; $this->parameter = $parameterBag; } @@ -33,34 +31,38 @@ public function sendEmail($sender, $from, $to, $betreff, $content, $attachment = $this->sendViaSwiftMailer($sender, $from, $to, $betreff, $content, $attachment); } - private function sendViaSwiftMailer($sender, $from, $to, $betreff, $content, $attachment = array()) + public function sendEncrypt($pgp, $sender, $from, $to, $betreff, $content, $attachment = array()) { - $message = (new \Swift_Message($betreff)) - ->setFrom(array($from => $sender)) - ->setTo($to) - ->setBody( - $content - , 'text/html' - ); - foreach ($attachment as $data) { - $message->attach(new \Swift_Attachment($data['body'], $data['filename'], $data['type'])); - }; - $this->swift->send($message); - } + $message = (new Email()) + ->subject($betreff) + ->from(new Address($from, $sender)) + ->to($to); - public function sendEncrypt($pgp, $sender, $from, $to, $betreff, $content, $attachment = array()) - { - $message = (new \Swift_Message($betreff)) - ->setFrom(array($from => $sender)) - ->setTo($to); foreach ($attachment as $data) { - $message->attach(new \Swift_Attachment($data['body'], $data['filename'], $data['type'])); - }; + $message->attach($data['body'], $data['filename'], $data['type']); + } + $gpg = new GPG(); $privat = new PublicKey($pgp); $data = $gpg->encrypt($privat, $content); - $message->setBody($data, 'text/plain'); - $this->swift->send($message); + $message->text($data); + + $this->mailer->send($message); + } + + private function sendViaSwiftMailer($sender, $from, $to, $betreff, $content, $attachment = array()) + { + $message = (new Email()) + ->subject($betreff) + ->from(new Address($from, $sender)) + ->to($to) + ->html( + $content + ); + foreach ($attachment as $data) { + $message->attach($data['body'], $data['filename'], $data['type']); + } + $this->mailer->send($message); } } diff --git a/src/Service/NotificationService.php b/src/Service/NotificationService.php index 635ef4c9..945c21fe 100644 --- a/src/Service/NotificationService.php +++ b/src/Service/NotificationService.php @@ -13,6 +13,7 @@ use App\Entity\User; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class NotificationService @@ -22,91 +23,94 @@ class NotificationService private $parameterBag; - public function __construct(EntityManagerInterface $entityManager, MailerService $mailerService, ParameterBagInterface $parameterBag) + public function __construct( + EntityManagerInterface $entityManager, + MailerService $mailerService, + ParameterBagInterface $parameterBag, + private TranslatorInterface $translator, + ) { $this->em = $entityManager; $this->mailer = $mailerService; $this->parameterBag = $parameterBag; } - - function sendNotificationAkademie(AkademieBuchungen $buchung, $content) + public function sendEncrypt($pgp, $content, $email, $betreff): bool { - $this->mailer->sendEmail( - 'Akademie Datenschutzcenter', - $this->parameterBag->get('akademieEmail'), - $buchung->getUser()->getEmail(), - 'Ihnen wurde ein neuer Kurs zugewiesen', + $this->mailer->sendEncrypt( + $pgp, + $this->translator->trans(id: 'notification.odc.sender', domain: 'service'), + $this->parameterBag->get('defaultEmail'), + $email, + $betreff, $content ); return true; } - function sendNotificationAssign($content, User $user) + public function sendNotificationAkademie(AkademieBuchungen $buchung, $content): bool { $this->mailer->sendEmail( - 'Datenschutzcenter', - $this->parameterBag->get('defaultEmail'), - $user->getEmail(), - 'Ihnen wurde ein Element zum Bearbeiten zugewiesen', + $this->translator->trans(id: 'notification.academy.sender', domain: 'service'), + $this->parameterBag->get('akademieEmail'), + $buchung->getUser()->getEmail(), + $this->translator->trans(id: 'notification.academy.lesson.assigned', domain: 'service'), $content ); return true; } - function sendNotificationRequest($content, $email) + public function sendNotificationAssign($content, User $user): bool { $this->mailer->sendEmail( - 'Datenschutzcenter', + $this->translator->trans(id: 'notification.odc.sender', domain: 'service'), $this->parameterBag->get('defaultEmail'), - $email, - 'Es ist eine neue Nachricht für Sie vorhanden', - $content + $user->getEmail(), + $this->translator->trans(id: 'notification.odc.element.assign', domain: 'service'), + $content, ); return true; } - function sendEncrypt($pgp, $content, $email, $betreff) + public function sendNotificationRequest($content, $email): bool { - $this->mailer->sendEncrypt( - $pgp, - 'Datenschutzcenter', + $this->mailer->sendEmail( + $this->translator->trans(id: 'notification.odc.sender', domain: 'service'), $this->parameterBag->get('defaultEmail'), $email, - $betreff, + $this->translator->trans(id: 'notification.odc.new.message.available', domain: 'service'), $content ); return true; } - function sendRequestVerify($content, $email) + public function sendRequestNew($content, $email): bool { $this->mailer->sendEmail( - 'Datenschutzcenter', + $this->translator->trans(id: 'notification.odc.sender', domain: 'service'), $this->parameterBag->get('defaultEmail'), $email, - 'Bestätigen Sie Ihre Email Adresse', + $this->translator->trans(id: 'notification.odc.new.clientRequest', domain: 'service'), $content ); return true; } - function sendRequestNew($content, $email) + public function sendRequestVerify($content, $email): bool { $this->mailer->sendEmail( - 'Datenschutzcenter', + $this->translator->trans(id: 'notification.odc.sender', domain: 'service'), $this->parameterBag->get('defaultEmail'), $email, - 'Neue Kundenanfrage in Datenschutcenter', + $this->translator->trans(id: 'notification.odc.email.verify', domain: 'service'), $content ); return true; } - } diff --git a/src/Service/ParserService.php b/src/Service/ParserService.php index 08cbf2c2..2c47e7da 100644 --- a/src/Service/ParserService.php +++ b/src/Service/ParserService.php @@ -22,7 +22,9 @@ use App\Entity\VVTPersonen; use App\Entity\VVTRisiken; use App\Entity\VVTStatus; +use DateTime; use Doctrine\ORM\EntityManagerInterface; +use Exception; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; @@ -76,14 +78,14 @@ function parseAudit($data, Team $team, User $user, Upload $upload) $audit->addZiele($ziel); } $audit->setActiv(true); - $audit->setCreatedAt(new \DateTime()); + $audit->setCreatedAt(new DateTime()); $audit->setTeam($team); $audit->setUser($user); $this->em->persist($audit); } $this->em->flush(); return true; - } catch (\Exception $e) { + } catch (Exception $e) { return false; } @@ -163,7 +165,7 @@ function parseVVT($data, $team, User $user, Upload $upload) $vvt->setInformationspflicht($e->informationspflicht); $vvt->setActiv(true); - $vvt->setCreatedAt(new \DateTime()); + $vvt->setCreatedAt(new DateTime()); $vvt->setTeam($team); $vvt->setUser($user); $vvt->setSpeicherung($e->speicherung); @@ -173,7 +175,7 @@ function parseVVT($data, $team, User $user, Upload $upload) $vvt->setUserContract($user); if ($e->nummer == null) { $vvt->setNummer('VVT-' . hexdec(uniqid())); - }else { + } else { $vvt->setNummer($e->nummer); } @@ -190,7 +192,7 @@ function parseVVT($data, $team, User $user, Upload $upload) $dsfa->setDsb($e->dsfaData->dsbKommentar); $dsfa->setErgebnis($e->dsfaData->ergebnis); $dsfa->setActiv(true); - $dsfa->setCreatedAt(new \DateTime()); + $dsfa->setCreatedAt(new DateTime()); $dsfa->setUser($user); $dsfa->setVvt($vvt); $this->em->persist($dsfa); @@ -201,7 +203,7 @@ function parseVVT($data, $team, User $user, Upload $upload) } $this->em->flush(); return true; - } catch (\Exception $e) { + } catch (Exception $e) { return false; } } @@ -220,7 +222,7 @@ function verify($json) $signature = $json->signature; $res = openssl_verify($data, hex2bin($signature), file_get_contents($this->parameterBag->get('projectRoot') . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'public.key'), OPENSSL_ALGO_SHA256); return $res; - } catch (\Exception $e) { + } catch (Exception $e) { return 0; } diff --git a/src/Service/PoliciesService.php b/src/Service/PoliciesService.php index 9fc8d97f..28d859a9 100644 --- a/src/Service/PoliciesService.php +++ b/src/Service/PoliciesService.php @@ -16,6 +16,7 @@ use App\Entity\VVTDatenkategorie; use App\Entity\VVTPersonen; use App\Form\Type\PolicyType; +use DateTime; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Form\FormFactoryInterface; @@ -31,17 +32,6 @@ public function __construct(EntityManagerInterface $entityManager, FormFactoryIn $this->formBuilder = $formBuilder; } - function newPolicy(Team $team, User $user) - { - $vvt = new Policies(); - $vvt->setTeam($team); - $vvt->setCreatedAt(new \DateTime()); - $vvt->setActiv(true); - $vvt->setUser($user); - - return $vvt; - } - function clonePolicy(Policies $policy, User $user) { $newPolicy = clone $policy; @@ -50,7 +40,7 @@ function clonePolicy(Policies $policy, User $user) $newPolicy->setApprovedBy(null); $newPolicy->setActiv(true); $newPolicy->setUser($user); - $newPolicy->setCreatedAt(new \DateTime()); + $newPolicy->setCreatedAt(new DateTime()); return $newPolicy; } @@ -58,10 +48,21 @@ function createForm(Policies $policies, Team $team) { $personen = $this->em->getRepository(VVTPersonen::class)->findByTeam($team); $kategorien = $this->em->getRepository(VVTDatenkategorie::class)->findByTeam($team); - $processes = $this->em->getRepository(VVT::class)->findActivByTeam($team); + $processes = $this->em->getRepository(VVT::class)->findActiveByTeam($team); $form = $this->formBuilder->create(PolicyType::class, $policies, ['personen' => $personen, 'kategorien' => $kategorien, 'user' => $team->getMembers(), 'processes' => $processes]); return $form; } + + function newPolicy(Team $team, User $user) + { + $vvt = new Policies(); + $vvt->setTeam($team); + $vvt->setCreatedAt(new DateTime()); + $vvt->setActiv(true); + $vvt->setUser($user); + + return $vvt; + } } diff --git a/src/Service/ReportService.php b/src/Service/ReportService.php index 23ffd3a3..a5a931d5 100644 --- a/src/Service/ReportService.php +++ b/src/Service/ReportService.php @@ -11,6 +11,7 @@ use App\Entity\Report; use App\Entity\Team; +use DateTime; use Doctrine\ORM\EntityManagerInterface; @@ -27,9 +28,9 @@ function newReport(Team $team) { $report = new Report(); $report->setTeam($team); - $report->setDate(new \DateTime()); + $report->setDate(new DateTime()); $report->setActiv(true); - $report->setCreatedAt(new \DateTime()); + $report->setCreatedAt(new DateTime()); return $report; } diff --git a/src/Service/SecurityService.php b/src/Service/SecurityService.php index 9b8bf80c..d379fb16 100644 --- a/src/Service/SecurityService.php +++ b/src/Service/SecurityService.php @@ -9,48 +9,83 @@ namespace App\Service; +use App\Entity\Team; +use App\Entity\User; use Psr\Log\LoggerInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class SecurityService { private $logger; - public function __construct(LoggerInterface $logger) + public function __construct(LoggerInterface $logger, private TranslatorInterface $translator) { $this->logger = $logger; } - function teamArrayDataCheck($data, $team) + public function adminCheck(User $user, Team $team): bool { - //Sicherheitsfunktion, dass ein Team vorhanden ist - if ($team === null) { - $message = ['typ' => 'LOGIN', 'error' => true, 'hinweis' => 'Benutzer keinem Team zugewiesen']; - $this->logger->error($message['typ'], $message); + if (!$this->teamCheck($team)) { return false; } - //Sicherheitsfunktion, dass nur eigene Daten bearbeitet werden können - if (!in_array($team, $data->getTeam()->toarray())) { - $message = ['typ' => 'LOGIN', 'error' => true, 'hinweis' => 'Benutzer nicht in Array von Teams', 'user' => $this->getUser()->getUsername()]; - $this->logger->error($message['typ'], $message); - return false; + // If user is super admin + if (in_array('ROLE_ADMIN', $user->getRoles())) { + return true; } - return true; + // If user has admin rights for this team + if ($user->hasAdminRole($team)) { + return true; + } + + // Else + $message = [ + 'typ' => 'LOGIN', + 'error' => true, + 'hinweis' => $this->translator->trans(id: 'error.userIsNotTeamAdministrator', domain: 'general'), + ]; + $this->logger->error($message['typ'], $message); + return false; } - function teamDataCheck($data, $team) + public function superAdminCheck(User $user): bool + { + // If user is super admin + if (in_array('ROLE_ADMIN', $user->getRoles())) { + return true; + } + + // else + $message = [ + 'typ' => 'LOGIN', + 'error' => true, + 'hinweis' => $this->translator->trans(id: 'error.userNotAuthorizedToManageTeam', domain: 'general'), + ]; + $this->logger->error($message['typ'], $message); + return false; + } + + public function teamArrayDataCheck($data, $team): bool { //Sicherheitsfunktion, dass ein Team vorhanden ist if ($team === null) { - $message = ['typ' => 'LOGIN', 'error' => true, 'hinweis' => 'Benutzer keinem Team zugewiesen']; + $message = [ + 'typ' => 'LOGIN', + 'error' => true, + 'hinweis' => $this->translator->trans(id: 'error.userWithoutTeam', domain: 'general'), + ]; $this->logger->error($message['typ'], $message); return false; } //Sicherheitsfunktion, dass nur eigene Daten bearbeitet werden können - if ($team !== $data->getTeam()) { - $message = ['typ' => 'LOGIN', 'error' => true, 'hinweis' => 'Benutzer nicht in Team und nicht berechtigt', 'team' => $team->getName()]; + if (!in_array($team, $data->getTeam()->toarray())) { + $message = [ + 'typ' => 'LOGIN', + 'error' => true, + 'hinweis' => $this->translator->trans(id: 'error.userNotFoundInArray', domain: 'general'), + 'user' => $this->getUser()->getUsername()]; $this->logger->error($message['typ'], $message); return false; } @@ -58,29 +93,46 @@ function teamDataCheck($data, $team) return true; } - function teamCheck($team) + public function teamCheck($team): bool { //Sicherheitsfunktion, dass ein Team vorhanden ist if ($team === null) { - $message = ['typ' => 'LOGIN', 'error' => true, 'hinweis' => 'Benutzer keinem Team zugewiesen']; + $message = [ + 'typ' => 'LOGIN', + 'error' => true, + 'hinweis' => $this->translator->trans(id: 'error.userWithoutTeam', domain: 'general'), + ]; $this->logger->error($message['typ'], $message); return false; } return true; } - function adminCheck($user, $team) + public function teamDataCheck($data, $team): bool { - if (!$this->teamCheck($team)) { + //Sicherheitsfunktion, dass ein Team vorhanden ist + if ($team === null) { + $message = [ + 'typ' => 'LOGIN', + 'error' => true, + 'hinweis' => $this->translator->trans(id: 'error.userWithoutTeam', domain: 'general'), + ]; + $this->logger->error($message['typ'], $message); return false; } - //Sicherheitsfunktion, dass Admin Team zu Team passt - if ($user->getTeam() !== $user->getAdminUser()) { - $message = ['typ' => 'LOGIN', 'error' => true, 'hinweis' => 'Benutzer Admin Team passt nicht zu Team']; + //Sicherheitsfunktion, dass nur eigene Daten bearbeitet werden können + if ($team !== $data->getTeam()) { + $message = [ + 'typ' => 'LOGIN', + 'error' => true, + 'hinweis' => $this->translator->trans(id: 'error.userNotInTeamAccessDenied', domain: 'general'), + 'team' => $team->getName(), + ]; $this->logger->error($message['typ'], $message); return false; } + return true; } } diff --git a/src/Service/SoftwareService.php b/src/Service/SoftwareService.php index ecdfe09f..e72ecb47 100644 --- a/src/Service/SoftwareService.php +++ b/src/Service/SoftwareService.php @@ -17,8 +17,10 @@ use App\Entity\VVT; use App\Form\Type\SoftwareConfigType; use App\Form\Type\SoftwareType; +use DateTime; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Form\FormFactoryInterface; +use Symfony\Component\Form\FormInterface; class SoftwareService @@ -32,31 +34,26 @@ public function __construct(EntityManagerInterface $entityManager, FormFactoryIn $this->formBuilder = $formBuilder; } - function newSoftware(Team $team, User $user) - { - $software = new Software(); - $software->setTeam($team); - $software->setCreatedAt(new \DateTime()); - $software->setPurchase(new \DateTime()); - $software->setActiv(true); - $software->setUser($user); - - return $software; - } - - function cloneSoftware(Software $software, User $user) + public function cloneSoftware(Software $software, User $user): Software { $newSoftware = clone $software; $newSoftware->setPrevious($software); $newSoftware->setActiv(true); $newSoftware->setUser($user); - $newSoftware->setCreatedAt(new \DateTime()); + $newSoftware->setCreatedAt(new DateTime()); return $newSoftware; } - function createForm(Software $software, Team $team) + public function createConfigForm(SoftwareConfig $softwareConfig): FormInterface + { + $form = $this->formBuilder->create(SoftwareConfigType::class, $softwareConfig); + + return $form; + } + + public function createForm(Software $software, Team $team): FormInterface { - $processes = $this->em->getRepository(VVT::class)->findActivByTeam($team); + $processes = $this->em->getRepository(VVT::class)->findActiveByTeam($team); $data = $this->em->getRepository(Datenweitergabe::class)->findBy(['team' => $team, 'activ' => true, 'art' => 1]); $form = $this->formBuilder->create(SoftwareType::class, $software, ['processes' => $processes, 'datenweitergabe' => $data]); @@ -64,20 +61,25 @@ function createForm(Software $software, Team $team) return $form; } - function newConfig(Software $software) + public function newConfig(Software $software): SoftwareConfig { $config = new SoftwareConfig(); - $config->setCreatedAt(new \DateTime()); + $config->setCreatedAt(new DateTime()); $config->setActiv(true); $config->setSoftware($software); return $config; } - function createConfigForm(SoftwareConfig $softwareConfig) + public function newSoftware(Team $team, User $user): Software { - $form = $this->formBuilder->create(SoftwareConfigType::class, $softwareConfig); + $software = new Software(); + $software->setTeam($team); + $software->setCreatedAt(new DateTime()); + $software->setPurchase(new DateTime()); + $software->setActiv(true); + $software->setUser($user); - return $form; + return $software; } } diff --git a/src/Service/TaskService.php b/src/Service/TaskService.php index a55caacf..43d8bfdc 100644 --- a/src/Service/TaskService.php +++ b/src/Service/TaskService.php @@ -12,6 +12,7 @@ use App\Entity\Task; use App\Entity\Team; use App\Entity\User; +use DateTime; use Doctrine\ORM\EntityManagerInterface; @@ -29,7 +30,7 @@ function newTask(Team $team, User $user) $task = new Task(); $task->setTeam($team); $task->setActiv(true); - $task->setCreatedAt(new \DateTime()); + $task->setCreatedAt(new DateTime()); $task->setUser($user); $task->setDone(false); diff --git a/src/Service/TeamService.php b/src/Service/TeamService.php index 13d8ea71..c693377b 100644 --- a/src/Service/TeamService.php +++ b/src/Service/TeamService.php @@ -37,16 +37,133 @@ public function __construct(EntityManagerInterface $entityManager, UrlGeneratorI $this->translator = $translator; } - function show(Team $team) + public function create($type, $id, Team $team): object + { + switch ($type) { + case 1: + if ($id) { + $data1 = $this->em->getRepository(VVTPersonen::class)->find($id); + } else { + $data1 = new VVTPersonen(); + } + break; + case 2: + if ($id) { + $data1 = $this->em->getRepository(VVTDatenkategorie::class)->find($id); + } else { + $data1 = new VVTDatenkategorie(); + } + break; + case 3: + if ($id) { + $data1 = $this->em->getRepository(VVTRisiken::class)->find($id); + } else { + $data1 = new VVTRisiken(); + } + break; + case 4: + if ($id) { + $data1 = $this->em->getRepository(VVTGrundlage::class)->find($id); + } else { + $data1 = new VVTGrundlage(); + } + break; + case 5: + if ($id) { + $data1 = $this->em->getRepository(Produkte::class)->find($id); + } else { + $data1 = new Produkte(); + } + break; + case 6: + if ($id) { + $data1 = $this->em->getRepository(VVTStatus::class)->find($id); + } else { + $data1 = new VVTStatus(); + } + break; + case 11: + if ($id) { + $data1 = $this->em->getRepository(DatenweitergabeGrundlagen::class)->find($id); + } else { + $data1 = new DatenweitergabeGrundlagen(); + } + break; + case 12: + if ($id) { + $data1 = $this->em->getRepository(DatenweitergabeStand::class)->find($id); + } else { + $data1 = new DatenweitergabeStand(); + } + break; + case 21: + if ($id) { + $data1 = $this->em->getRepository(AuditTomZiele::class)->find($id); + } else { + $data1 = new AuditTomZiele(); + } + break; + default: + + break; + + } + + $data1->setActiv(true); + $data1->setTeam($team); + + return $data1; + } + + public function delete($type, $id): ?object + { + switch ($type) { + case 1: + $data = $this->em->getRepository(VVTPersonen::class)->findOneBy(array('id' => $id)); + break; + case 2: + $data = $this->em->getRepository(VVTDatenkategorie::class)->findOneBy(array('id' => $id)); + break; + case 3: + $data = $this->em->getRepository(VVTRisiken::class)->findOneBy(array('id' => $id)); + break; + case 4: + $data = $this->em->getRepository(VVTGrundlage::class)->findOneBy(array('id' => $id)); + break; + case 5: + $data = $this->em->getRepository(Produkte::class)->findOneBy(array('id' => $id)); + break; + case 6: + $data = $this->em->getRepository(VVTStatus::class)->findOneBy(array('id' => $id)); + break; + case 11: + $data = $this->em->getRepository(DatenweitergabeGrundlagen::class)->findOneBy(array('id' => $id)); + break; + case 12: + $data = $this->em->getRepository(DatenweitergabeStand::class)->findOneBy(array('id' => $id)); + break; + case 21: + $data = $this->em->getRepository(AuditTomZiele::class)->findOneBy(array('id' => $id)); + break; + + default: + break; + + } + + return $data; + } + + public function show(Team $team): array { $data = array(); $id = 1; $data1 = $this->em->getRepository(VVTPersonen::class)->findBy(array('activ' => true)); - $data[$id]['title'] = $this->translator->trans('Personengruppen'); - $data[$id]['titleNew'] = $this->translator->trans('Neues Personengruppe hinzufügen'); - $data[$id]['titleEdit'] = $this->translator->trans('Personengruppe bearbeiten'); + $data[$id]['title'] = $this->translator->trans(id: 'groupOfPeople.word', domain: 'service'); + $data[$id]['titleNew'] = $this->translator->trans(id: 'groupOfPeople.add', domain: 'service'); + $data[$id]['titleEdit'] = $this->translator->trans(id: 'groupOfPeople.edit', domain: 'service'); $data[$id]['newLink'] = $this->router->generate('team_custom_create', ['title' => $data[$id]['titleNew'], 'type' => $id]); $data[$id]['type'] = $id; foreach ($data1 as $item) { @@ -64,9 +181,9 @@ function show(Team $team) $id = 3; $data1 = $this->em->getRepository(VVTRisiken::class)->findBy(array('activ' => true)); - $data[$id]['title'] = $this->translator->trans('Risiken der Verarbeitung'); - $data[$id]['titleNew'] = $this->translator->trans('Neues Risiko hinzufügen'); - $data[$id]['titleEdit'] = $this->translator->trans('Risiko bearbeiten'); + $data[$id]['title'] = $this->translator->trans(id: 'risk.processing', domain: 'service'); + $data[$id]['titleNew'] = $this->translator->trans(id: 'risk.new', domain: 'service'); + $data[$id]['titleEdit'] = $this->translator->trans(id: 'risk.edit', domain: 'service'); $data[$id]['newLink'] = $this->router->generate('team_custom_create', ['title' => $data[$id]['titleNew'], 'type' => $id]); foreach ($data1 as $item) { if ($item->getTeam() === $team || $item->getTeam() === null) { @@ -83,9 +200,9 @@ function show(Team $team) $id = 4; $data1 = $this->em->getRepository(VVTGrundlage::class)->findBy(array('activ' => true)); - $data[$id]['title'] = $this->translator->trans('Gesetzliche Grundlagen für die Verarbeitungen'); - $data[$id]['titleNew'] = $this->translator->trans('Gesetzliche Grundlage hinzufügen'); - $data[$id]['titleEdit'] = $this->translator->trans('Gesetzliche Grundlage bearbeiten'); + $data[$id]['title'] = $this->translator->trans(id: 'legalBase.word', domain: 'service'); + $data[$id]['titleNew'] = $this->translator->trans(id: 'legalBase.add', domain: 'service'); + $data[$id]['titleEdit'] = $this->translator->trans(id: 'legalBase.edit', domain: 'service'); $data[$id]['newLink'] = $this->router->generate('team_custom_create', ['title' => $data[$id]['titleNew'], 'type' => $id]); foreach ($data1 as $item) { if ($item->getTeam() === $team || $item->getTeam() === null) { @@ -102,9 +219,9 @@ function show(Team $team) $id = 5; $data1 = $this->em->getRepository(Produkte::class)->findBy(array('activ' => true)); - $data[$id]['title'] = $this->translator->trans('Produkte /Projekte'); - $data[$id]['titleNew'] = $this->translator->trans('Produkt /Projekt hinzufügen'); - $data[$id]['titleEdit'] = $this->translator->trans('Produkt /Projekt bearbeiten'); + $data[$id]['title'] = $this->translator->trans(id: 'product.word', domain: 'service'); + $data[$id]['titleNew'] = $this->translator->trans(id: 'product.add', domain: 'service'); + $data[$id]['titleEdit'] = $this->translator->trans(id: 'product.edit', domain: 'service'); $data[$id]['newLink'] = $this->router->generate('team_custom_create', ['title' => $data[$id]['titleNew'], 'type' => $id]); foreach ($data1 as $item) { if ($item->getTeam() === $team || $item->getTeam() === null) { @@ -122,9 +239,9 @@ function show(Team $team) $id = 6; $data1 = $this->em->getRepository(VVTStatus::class)->findBy(array('activ' => true)); - $data[$id]['title'] = $this->translator->trans('VVT Status'); - $data[$id]['titleNew'] = $this->translator->trans('VVT Status hinzufügen'); - $data[$id]['titleEdit'] = $this->translator->trans('VVT Status bearbeiten'); + $data[$id]['title'] = $this->translator->trans(id: 'processingState.word', domain: 'service'); + $data[$id]['titleNew'] = $this->translator->trans(id: 'processingState.add', domain: 'service'); + $data[$id]['titleEdit'] = $this->translator->trans(id: 'processingState.edit', domain: 'service'); $data[$id]['newLink'] = $this->router->generate('team_custom_create', ['title' => $data[$id]['titleNew'], 'type' => $id]); foreach ($data1 as $item) { if ($item->getTeam() === $team || $item->getTeam() === null) { @@ -141,9 +258,9 @@ function show(Team $team) $id = 11; $data1 = $this->em->getRepository(DatenweitergabeGrundlagen::class)->findBy(array('activ' => true)); - $data[$id]['title'] = $this->translator->trans('Grundlage für Datenweitergaben'); - $data[$id]['titleNew'] = $this->translator->trans('Grundlage hinzufügen'); - $data[$id]['titleEdit'] = $this->translator->trans('Grundlage bearbeiten'); + $data[$id]['title'] = $this->translator->trans(id: 'dataTransfer.base.word', domain: 'service'); + $data[$id]['titleNew'] = $this->translator->trans(id: 'dataTransfer.base.add', domain: 'service'); + $data[$id]['titleEdit'] = $this->translator->trans(id: 'dataTransfer.base.edit', domain: 'service'); $data[$id]['newLink'] = $this->router->generate('team_custom_create', ['title' => $data[$id]['titleNew'], 'type' => $id]); foreach ($data1 as $item) { if ($item->getTeam() === $team || $item->getTeam() === null) { @@ -160,9 +277,9 @@ function show(Team $team) $id = 12; $data1 = $this->em->getRepository(DatenweitergabeStand::class)->findBy(array('activ' => true)); - $data[$id]['title'] = $this->translator->trans('Stände in Datenweitergaben'); - $data[$id]['titleNew'] = $this->translator->trans('Stand hinzufügen'); - $data[$id]['titleEdit'] = $this->translator->trans('Stand bearbeiten'); + $data[$id]['title'] = $this->translator->trans(id: 'dataTransfer.state.word', domain: 'service'); + $data[$id]['titleNew'] = $this->translator->trans(id: 'dataTransfer.state.add', domain: 'service'); + $data[$id]['titleEdit'] = $this->translator->trans(id: 'dataTransfer.state.edit', domain: 'service'); $data[$id]['newLink'] = $this->router->generate('team_custom_create', ['title' => $data[$id]['titleNew'], 'type' => $id]); foreach ($data1 as $item) { if ($item->getTeam() === $team || $item->getTeam() === null) { @@ -180,9 +297,9 @@ function show(Team $team) $id = 21; $data1 = $this->em->getRepository(AuditTomZiele::class)->findBy(array('activ' => true)); - $data[$id]['title'] = $this->translator->trans('Schutzziele für Audits'); - $data[$id]['titleNew'] = $this->translator->trans('Schutzziel hinzufügen'); - $data[$id]['titleEdit'] = $this->translator->trans('Schutzziel bearbeiten'); + $data[$id]['title'] = $this->translator->trans(id: 'auditGoal.word', domain: 'service'); + $data[$id]['titleNew'] = $this->translator->trans(id: 'auditGoal.add', domain: 'service'); + $data[$id]['titleEdit'] = $this->translator->trans(id: 'auditGoal.edit', domain: 'service'); $data[$id]['newLink'] = $this->router->generate('team_custom_create', ['title' => $data[$id]['titleNew'], 'type' => $id]); foreach ($data1 as $item) { if ($item->getTeam() === $team || $item->getTeam() === null) { @@ -198,124 +315,6 @@ function show(Team $team) } - return $data; - } - - function create($type, $id, Team $team) - { - switch ($type) { - case 1: - if ($id) { - $data1 = $this->em->getRepository(VVTPersonen::class)->find($id); - } else { - $data1 = new VVTPersonen(); - } - break; - case 2: - if ($id) { - $data1 = $this->em->getRepository(VVTDatenkategorie::class)->find($id); - } else { - $data1 = new VVTDatenkategorie(); - } - break; - case 3: - if ($id) { - $data1 = $this->em->getRepository(VVTRisiken::class)->find($id); - } else { - $data1 = new VVTRisiken(); - } - break; - case 4: - if ($id) { - $data1 = $this->em->getRepository(VVTGrundlage::class)->find($id); - } else { - $data1 = new VVTGrundlage(); - } - break; - case 5: - if ($id) { - $data1 = $this->em->getRepository(Produkte::class)->find($id); - } else { - $data1 = new Produkte(); - } - break; - case 6: - if ($id) { - $data1 = $this->em->getRepository(VVTStatus::class)->find($id); - } else { - $data1 = new VVTStatus(); - } - break; - case 11: - if ($id) { - $data1 = $this->em->getRepository(DatenweitergabeGrundlagen::class)->find($id); - } else { - $data1 = new DatenweitergabeGrundlagen(); - } - break; - case 12: - if ($id) { - $data1 = $this->em->getRepository(DatenweitergabeStand::class)->find($id); - } else { - $data1 = new DatenweitergabeStand(); - } - break; - case 21: - if ($id) { - $data1 = $this->em->getRepository(AuditTomZiele::class)->find($id); - } else { - $data1 = new AuditTomZiele(); - } - break; - default: - - break; - - } - - $data1->setActiv(true); - $data1->setTeam($team); - - return $data1; - } - - - function delete($type, $id) - { - switch ($type) { - case 1: - $data = $this->em->getRepository(VVTPersonen::class)->findOneBy(array('id' => $id)); - break; - case 2: - $data = $this->em->getRepository(VVTDatenkategorie::class)->findOneBy(array('id' => $id)); - break; - case 3: - $data = $this->em->getRepository(VVTRisiken::class)->findOneBy(array('id' => $id)); - break; - case 4: - $data = $this->em->getRepository(VVTGrundlage::class)->findOneBy(array('id' => $id)); - break; - case 5: - $data = $this->em->getRepository(Produkte::class)->findOneBy(array('id' => $id)); - break; - case 6: - $data = $this->em->getRepository(VVTStatus::class)->findOneBy(array('id' => $id)); - break; - case 11: - $data = $this->em->getRepository(DatenweitergabeGrundlagen::class)->findOneBy(array('id' => $id)); - break; - case 12: - $data = $this->em->getRepository(DatenweitergabeStand::class)->findOneBy(array('id' => $id)); - break; - case 21: - $data = $this->em->getRepository(AuditTomZiele::class)->findOneBy(array('id' => $id)); - break; - - default: - break; - - } - return $data; } } diff --git a/src/Service/TomService.php b/src/Service/TomService.php index ba7ef0b9..b9d4f8e5 100644 --- a/src/Service/TomService.php +++ b/src/Service/TomService.php @@ -12,6 +12,7 @@ use App\Entity\Team; use App\Entity\Tom; use App\Entity\User; +use DateTime; use Doctrine\ORM\EntityManagerInterface; @@ -24,22 +25,11 @@ public function __construct(EntityManagerInterface $entityManager) $this->em = $entityManager; } - function newTom(Team $team, User $user) - { - $tom = new Tom(); - $tom->setTeam($team); - $tom->setActiv(true); - $tom->setCreatedAt(new \DateTime()); - $tom->setUser($user); - - return $tom; - } - function cloneTom(Tom $tom, User $user) { $newTom = clone $tom; $newTom->setPrevious($tom); - $newTom->setCreatedAt(new \DateTime()); + $newTom->setCreatedAt(new DateTime()); $newTom->setUser($user); foreach ($tom->getVvts() as $vvt) { if ($vvt->getActiv()) { @@ -49,4 +39,15 @@ function cloneTom(Tom $tom, User $user) } return $newTom; } + + function newTom(Team $team, User $user) + { + $tom = new Tom(); + $tom->setTeam($team); + $tom->setActiv(true); + $tom->setCreatedAt(new DateTime()); + $tom->setUser($user); + + return $tom; + } } diff --git a/src/Service/VVTDatenkategorieService.php b/src/Service/VVTDatenkategorieService.php index 8cee1c49..08e83cee 100644 --- a/src/Service/VVTDatenkategorieService.php +++ b/src/Service/VVTDatenkategorieService.php @@ -4,12 +4,12 @@ namespace App\Service; -use App\Entity\VVT; -use App\Entity\VVTDatenkategorie; use App\Entity\Loeschkonzept; use App\Entity\Team; use App\Entity\User; +use App\Entity\VVTDatenkategorie; use App\Form\Type\VVTDatenkategorieType; +use DateTimeImmutable; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Form\FormFactoryInterface; @@ -25,30 +25,11 @@ public function __construct(EntityManagerInterface $entityManager, FormFactoryIn $this->formBuilder = $formBuilder; } - function createForm(VVTDatenkategorie $vVTDatenkategorie, Team $team) - { - $form = $this->formBuilder->create(VVTDatenkategorieType::class, $vVTDatenkategorie); - - return $form; - } - - function newVVTDatenkategorie(Team $team, User $user) - { - $vVTDatenkategorie = new VVTDatenkategorie(); - $vVTDatenkategorie->setTeam($team); - $vVTDatenkategorie->setCreatedAt(new \DateTimeImmutable()); - $vVTDatenkategorie->setActiv(true); - $vVTDatenkategorie->setUser($user); - - return $vVTDatenkategorie; - } - - function cloneVVTDatenkategorie(VVTDatenkategorie $vVTDatenkategorie) { $newVVTDatenkategorie = clone $vVTDatenkategorie; $newVVTDatenkategorie->setPrevious($vVTDatenkategorie); - $newVVTDatenkategorie->setCreatedAt(new \DateTimeImmutable()); + $newVVTDatenkategorie->setCreatedAt(new DateTimeImmutable()); $newVVTDatenkategorie->setActiv(true); return $newVVTDatenkategorie; } @@ -58,7 +39,7 @@ function createChild(VVTDatenkategorie $vVTDatenkategorie) //first we clone the datenkategorie $childVVTDatenkategorie = new VVTDatenkategorie(); $childVVTDatenkategorie->setCloneOf($vVTDatenkategorie); - $childVVTDatenkategorie->setCreatedAt(new \DateTimeImmutable()) + $childVVTDatenkategorie->setCreatedAt(new DateTimeImmutable()) ->setPrevious(null) ->setName($vVTDatenkategorie->getName()) ->setDatenarten($vVTDatenkategorie->getDatenarten()) @@ -69,7 +50,7 @@ function createChild(VVTDatenkategorie $vVTDatenkategorie) // we clone the löschkonzept $loeschkonzept = $vVTDatenkategorie->getLastLoeschkonzept(); if ($loeschkonzept) { - $childLoeschkonzept =new Loeschkonzept(); + $childLoeschkonzept = new Loeschkonzept(); $childLoeschkonzept->setUser($loeschkonzept->getUser()) ->setTeam($loeschkonzept->getTeam()) ->setPrevious(null) @@ -77,7 +58,7 @@ function createChild(VVTDatenkategorie $vVTDatenkategorie) ->setUser($loeschkonzept->getUser()) ->setActiv(false) ->setBeschreibung($loeschkonzept->getBeschreibung()) - ->setCreateAt(new \DateTimeImmutable()) + ->setCreateAt(new DateTimeImmutable()) ->setLoeschbeauftragter($loeschkonzept->getLoeschbeauftragter()) ->setLoeschfrist($loeschkonzept->getLoeschfrist()) ->setSpeicherorte($loeschkonzept->getSpeicherorte()) @@ -88,6 +69,13 @@ function createChild(VVTDatenkategorie $vVTDatenkategorie) return $childVVTDatenkategorie; } + function createForm(VVTDatenkategorie $vVTDatenkategorie, Team $team) + { + $form = $this->formBuilder->create(VVTDatenkategorieType::class, $vVTDatenkategorie); + + return $form; + } + function findLatestKategorie(VVTDatenkategorie $VVTDatenkategorie): ?VVTDatenkategorie { $act = $VVTDatenkategorie; @@ -101,4 +89,15 @@ function findLatestKategorie(VVTDatenkategorie $VVTDatenkategorie): ?VVTDatenkat } -} \ No newline at end of file + function newVVTDatenkategorie(Team $team, User $user) + { + $vVTDatenkategorie = new VVTDatenkategorie(); + $vVTDatenkategorie->setTeam($team); + $vVTDatenkategorie->setCreatedAt(new DateTimeImmutable()); + $vVTDatenkategorie->setActiv(true); + $vVTDatenkategorie->setUser($user); + + return $vVTDatenkategorie; + } + +} diff --git a/src/Service/VVTService.php b/src/Service/VVTService.php index 87a5ad37..45d6194e 100644 --- a/src/Service/VVTService.php +++ b/src/Service/VVTService.php @@ -24,6 +24,7 @@ use App\Entity\VVTRisiken; use App\Entity\VVTStatus; use App\Form\Type\VVTType; +use DateTime; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Form\FormFactoryInterface; @@ -39,16 +40,16 @@ public function __construct(EntityManagerInterface $entityManager, FormFactoryIn $this->formBuilder = $formBuilder; } - function newVvt(Team $team, User $user) + function cloneDsfa(VVTDsfa $dsfa, User $user) { - $vvt = new VVT(); - $vvt->setTeam($team); - $vvt->setNummer('VVT-' . hexdec(uniqid())); - $vvt->setCreatedAt(new \DateTime()); - $vvt->setActiv(true); - $vvt->setUser($user); + $newDsfa = clone $dsfa; + $newDsfa->setPrevious($dsfa); + $newDsfa->setVvt($dsfa->getVvt()); + $newDsfa->setActiv(true); + $newDsfa->setCreatedAt(new DateTime()); + $newDsfa->setUser($user); - return $vvt; + return $newDsfa; } function cloneVvt(VVT $vvt, User $user) @@ -57,13 +58,13 @@ function cloneVvt(VVT $vvt, User $user) $newVvt->setPrevious($vvt); $newVvt->setActiv(true); $newVvt->setUser($user); - $newVvt->setCreatedAt(new \DateTime()); + $newVvt->setCreatedAt(new DateTime()); return $newVvt; } function createForm(VVT $VVT, Team $team) { - $status = $this->em->getRepository(VVTStatus::class)->findActivByTeam($team); + $status = $this->em->getRepository(VVTStatus::class)->findActiveByTeam($team); $personen = $this->em->getRepository(VVTPersonen::class)->findByTeam($team); $kategorien = $this->em->getRepository(VVTDatenkategorie::class)->findByTeam($team); $risiken = $this->em->getRepository(VVTRisiken::class)->findByTeam($team); @@ -71,10 +72,22 @@ function createForm(VVT $VVT, Team $team) $daten = $this->em->getRepository(Datenweitergabe::class)->findBy(array('team' => $team, 'activ' => true)); $tom = $this->em->getRepository(Tom::class)->findBy(array('team' => $team, 'activ' => true)); $abteilung = $this->em->getRepository(AuditTomAbteilung::class)->findBy(array('team' => $team, 'activ' => true)); - $produkte = $this->em->getRepository(Produkte::class)->findActivByTeam($team); - $software = $this->em->getRepository(Software::class)->findActivByTeam($team); - - $form = $this->formBuilder->create(VVTType::class, $VVT, ['personen' => $personen, 'kategorien' => $kategorien, 'risiken' => $risiken, 'status' => $status, 'grundlage' => $grundlagen, 'user' => $team->getMembers(), 'daten' => $daten, 'tom' => $tom, 'abteilung' => $abteilung, 'produkte' => $produkte, 'software' => $software]); + $produkte = $this->em->getRepository(Produkte::class)->findActiveByTeam($team); + $software = $this->em->getRepository(Software::class)->findActiveByTeam($team); + + $form = $this->formBuilder->create(VVTType::class, $VVT, [ + 'personen' => $personen, + 'kategorien' => $kategorien, + 'risiken' => $risiken, + 'status' => $status, + 'grundlage' => $grundlagen, + 'user' => $team->getMembers(), + 'daten' => $daten, + 'tom' => $tom, + 'abteilung' => $abteilung, + 'produkte' => $produkte, + 'software' => $software + ]); return $form; } @@ -83,22 +96,22 @@ function newDsfa(Team $team, User $user, VVT $vvt) { $dsfa = new VVTDsfa(); $dsfa->setVvt($vvt); - $dsfa->setCreatedAt(new \DateTime()); + $dsfa->setCreatedAt(new DateTime()); $dsfa->setActiv(true); $dsfa->setUser($user); return $dsfa; } - function cloneDsfa(VVTDsfa $dsfa, User $user) + function newVvt(Team $team, User $user) { - $newDsfa = clone $dsfa; - $newDsfa->setPrevious($dsfa); - $newDsfa->setVvt($dsfa->getVvt()); - $newDsfa->setActiv(true); - $newDsfa->setCreatedAt(new \DateTime()); - $newDsfa->setUser($user); + $vvt = new VVT(); + $vvt->setTeam($team); + $vvt->setNummer('VVT-' . hexdec(uniqid())); + $vvt->setCreatedAt(new DateTime()); + $vvt->setActiv(true); + $vvt->setUser($user); - return $newDsfa; + return $vvt; } } diff --git a/src/Service/VorfallService.php b/src/Service/VorfallService.php index 409b2a36..32bc181e 100644 --- a/src/Service/VorfallService.php +++ b/src/Service/VorfallService.php @@ -15,6 +15,7 @@ use App\Entity\VVTDatenkategorie; use App\Entity\VVTPersonen; use App\Form\Type\VorfallType; +use DateTime; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Form\FormFactoryInterface; @@ -30,26 +31,13 @@ public function __construct(EntityManagerInterface $entityManager, FormFactoryIn $this->formBuilder = $formBuilder; } - function newVorfall(Team $team, User $user) - { - $vorfall = new Vorfall(); - $vorfall->setTeam($team); - $vorfall->setActiv(true); - $vorfall->setNummer(uniqid()); - $vorfall->setCreatedAt(new \DateTime()); - $vorfall->setUser($user); - $vorfall->setDatum(new \DateTime()); - - return $vorfall; - } - function cloneVorfall(Vorfall $input, User $user) { $data = clone $input; $data->setPrevious($input); $data->setActiv(true); $data->setUser($user); - $data->setCreatedAt(new \DateTime()); + $data->setCreatedAt(new DateTime()); return $data; } @@ -62,4 +50,17 @@ function createForm(Vorfall $vorfall, Team $team) return $form; } + + function newVorfall(Team $team, User $user) + { + $vorfall = new Vorfall(); + $vorfall->setTeam($team); + $vorfall->setActiv(true); + $vorfall->setNummer(uniqid()); + $vorfall->setCreatedAt(new DateTime()); + $vorfall->setUser($user); + $vorfall->setDatum(new DateTime()); + + return $vorfall; + } } diff --git a/symfony.lock b/symfony.lock index 79a36ba1..bfd8884d 100644 --- a/symfony.lock +++ b/symfony.lock @@ -99,9 +99,6 @@ "guzzlehttp/psr7": { "version": "1.7.0" }, - "h2entwicklung/doctrine-encrypt-bundle": { - "version": "4.0.6" - }, "jms/metadata": { "version": "2.1.0" }, @@ -141,6 +138,9 @@ "lorenzo/pinky": { "version": "1.0.5" }, + "michaeldegroot/doctrine-encrypt-bundle": { + "version": "v5.1.0" + }, "monolog/monolog": { "version": "1.25.3" }, @@ -174,18 +174,6 @@ "./config/packages/oneup_flysystem.yaml" ] }, - "paragonie/constant_time_encoding": { - "version": "v2.4.0" - }, - "paragonie/halite": { - "version": "v4.8.0" - }, - "paragonie/hidden-string": { - "version": "v2.0.0" - }, - "paragonie/sodium_compat": { - "version": "v1.17.0" - }, "pclzip/pclzip": { "version": "2.8.2" }, @@ -583,9 +571,6 @@ "symfony/polyfill-php80": { "version": "v1.17.0" }, - "symfony/polyfill-php81": { - "version": "v1.23.0" - }, "symfony/process": { "version": "v4.4.8" }, diff --git a/templates/akademie/index.html.twig b/templates/akademie/index.html.twig index 6441d52d..ffe871a8 100644 --- a/templates/akademie/index.html.twig +++ b/templates/akademie/index.html.twig @@ -1,30 +1,66 @@ {% extends 'base.html.twig' %} +{% trans_default_domain 'academy' %} {% block body %} -

    Akademie Kurse

    +

    {% trans %}academyCourses{% endtrans %}

    - - - - + + + + + {% for b in buchungen %} - + - + - + + {% endfor %} diff --git a/templates/akademie/kurs.html.twig b/templates/akademie/kurs.html.twig index ebc36c5e..53df647d 100644 --- a/templates/akademie/kurs.html.twig +++ b/templates/akademie/kurs.html.twig @@ -1,23 +1,23 @@ {% extends 'base.html.twig' %} +{% trans_default_domain 'academy' %} {% block body %}

    {{ kurs.title }}

    {% if kurs.type == 0 %} - {% if not buchung.abgeschlossen %}

    Dieses Video kann nicht gestoppt werden. Am - Ende des Videos können Sie den Kurs als abgeschlossen markieren.

    {% endif %} + {% if not buchung.abgeschlossen %}

    {% trans %}video.uninterruptible{% endtrans %}

    {% endif %}
    {% elseif kurs.type == 1 %} -

    Dieses Video wird von Vimeo gestreamt.

    +

    {% trans %}video.vimeo{% endtrans %}

    @@ -30,25 +30,23 @@ @@ -66,7 +64,7 @@ + + diff --git a/templates/base/__sidenav.html.twig b/templates/base/__sidenav.html.twig index cc113e9b..eb035543 100644 --- a/templates/base/__sidenav.html.twig +++ b/templates/base/__sidenav.html.twig @@ -1,106 +1,131 @@ +{% trans_default_domain 'base' %} +
    + diff --git a/templates/bericht/__auditBericht.html.twig b/templates/bericht/__auditBericht.html.twig index 11a4ef74..a0c393e2 100644 --- a/templates/bericht/__auditBericht.html.twig +++ b/templates/bericht/__auditBericht.html.twig @@ -1,4 +1,5 @@ -

    {% if not d.activ %}Historie: {% endif %}{{ d.frage }} (id:{{ d.id }})

    +{% trans_default_domain 'audit_tom' %} +

    {% if not d.activ %}{% trans %}history{% endtrans %}: {% endif %}{{ d.frage }} (id:{{ d.id }})

    -

    Interne Dateschutzrichtlinie - von {{ d.team.name }} {% if not d.activ %}Historie {% endif %}

    +

    {% trans %}policies.dataPrivacyBy{% endtrans%} {{ d.team.name }} {% if not d.activ %}{% trans from 'general' %}history{% endtrans %} {% endif %}

    {{ d.title }}

    - Referenz: {{ d.reference }} + {% trans %}reference{% endtrans %}: {{ d.reference }}

    {{ d.scope|raw }}

    - Status: {% if d.approved %}Richtlinie freigegeben von {{ d.approvedBy.username }}{% else %}{{ d.statusString }}{% endif %} + {% trans from 'general' %}state{% endtrans %}: {% if d.approved %}{% trans %}policies.approvedBy{% endtrans %} {{ d.approvedBy.username }}{% else %}{{ d.statusString }}{% endif %}
    - Datum: {{ d.createdAt|date('d.m.Y') }} + {% trans from 'general' %}date{% endtrans %}: {{ d.createdAt|date('d.m.Y') }}

    - Risiken:
    + {% trans %}risks{% endtrans %}:
    {{ d.risk|raw }}

    - Bezug zu Gesetzen, Verordnungen und Standards:
    + {% trans %}referring{% endtrans %}:
    {{ d.foundation|raw }}

    - Zu ergreifende Schutzmaßnahmen:
    + {% trans %}protectiveMeasure{% endtrans %}:
    {{ d.protection|raw }}

    @@ -45,20 +45,20 @@

    - Hinweis:
    + {% trans %}clue{% endtrans %}:
    {{ d.notes|raw }}

    #TitelZugewiesenStartdatumAbgeschlossen{% trans from 'general' %}title{% endtrans %}{% trans %}assigned{% endtrans %}{% trans %}startDate{% endtrans %}{% trans from 'general' %}state{% endtrans %}{% trans from 'general' %}action.words{% endtrans %}
    {{ b.id }}{% if b.zugewiesen > today %}Automatische Wiedervorlage noch nicht geöffnet{% else %}{{ b.kurs.title }} (id: {{ b.kurs.id }}){% endif %} + {% if b.zugewiesen > today %} + {% trans %}noAutomaticResubmission{% endtrans %} + {% else %} + {{ b.kurs.title }} (id: {{ b.kurs.id }}) + {% endif %} + {{ b.zugewiesen|date('d.m.Y') }} {{ b.start|date('d.m.Y') }}{% if b.abgeschlossen %} - Zertifikat{% else %}Nein{% endif %} + {% if b.participations[0].state == 'finished' %} + {% if b.participations[0].passed %} + + {% trans from 'questionnaire' %}passed{% endtrans %} + + {% else %} + + {% trans from 'questionnaire' %}retry{% endtrans %} + + {% endif %} + {% else %} + {{ b.participations[0].state }} + {% endif %} + + {% if b.participations[0].state == 'ongoing' %} + {% trans from 'general' %}continue{% endtrans %} + {% else %} + {% if b.zugewiesen < today and b.user.akademieUser in b.kurs.team and b.participations[0].state == 'assigned' %} + + {% trans from 'general' %}start{% endtrans %} + + {% else %} + {% trans from 'general' %}finished{% endtrans %} + {% endif %} + {% endif %} +
    - Betroffene Arbeitsvorgänge und Fachverfahren + {% trans %}affected.processes{% endtrans %} {% for p in d.processes | filter(p => p.activ) %}{{ p.name }}
    {% endfor %}
    - Betroffene Personen und Datenkategorien + {% trans %}affected.people{% endtrans %} {% for p in d.people %}{{ p.name }},
    {% endfor %}
    @@ -69,7 +69,7 @@

    - Verantwortlichkeiten für die Schutzmaßnahmen:
    + {% trans %}responsibleForProtectiveMeasure{% endtrans %}:
    {{ d.person.username }} ({{ d.createdAt|date('d.m.Y') }})

    @@ -78,4 +78,4 @@ {% if d.previous and all == 1 %} {{ include('bericht/__policyBericht.html.twig', {'d':d.previous}) }} -{% endif %} \ No newline at end of file +{% endif %} diff --git a/templates/bericht/__recoveryBericht.html.twig b/templates/bericht/__recoveryBericht.html.twig index b20dc5a8..d3d5a868 100644 --- a/templates/bericht/__recoveryBericht.html.twig +++ b/templates/bericht/__recoveryBericht.html.twig @@ -1,5 +1,6 @@ -

    {% if not d.activ %}{{ d.approved?'Freigegebene':'' }} Historie: {% endif %}{{ d.nummer }}: {{ d.name }} - (id:{{ d.id }})

    +{% trans_default_domain 'bericht' %} +

    {% if not d.activ %}{{ d.approved?'approved':'' |trans([], 'general') }} {% trans from 'general' %}history{% endtrans %}: {% endif %}{{ d.nummer }}: {{ d.name }} + ({% trans from 'general' %}id{% endtrans %}:{{ d.id }})

    -

    Verarbeitungsverzeichnis {{ d.nummer }} (id:{{ d.id }})

    +

    {% trans %}processingDirectory{% endtrans%} {{ d.nummer }} ({% trans from 'general' %}id{% endtrans %}:{{ d.id }})

    - + - + - + - + - +
    - Nummer + {% trans from 'general' %}number{% endtrans %} {{ d.nummer }}
    - Status + {% trans from 'general' %}state{% endtrans %} {% if d.approved %}Verfahren freigegeben von {{ d.approvedBy.username }}{% else %}{{ d.status.name }}{% endif %}{% if d.approved %}{% trans %}processing.approvedBy{% endtrans%} {{ d.approvedBy.username }}{% else %}{{ d.status.name }}{% endif %}
    - Verantworliche Person für die Verarbeitung (intern) + {% trans %}processing.responsible.internal{% endtrans %} {{ d.userContract.username }} ({{ d.userContract.email }})
    - Verantworliche Person für die Verarbeitung (weitere) + {% trans %}processing.responsible.additional{% endtrans %} {{ d.verantwortlich|nl2br }}
    - Zweck der Verarbeitung + {% trans %}processing.reason{% endtrans %} {{ d.zweck|raw }}
    - Beschreiben Sie, weshalb die Datenverarbeitung erforderlich ist? (Rechtsgrundlage) + {% trans %}processing.describeReason{% endtrans %} {% for g in d.grundlage %}{{ g.name }}{% if not loop.last %},{% endif %}
    {% endfor %}
    - Die Daten welcher Personen werden verarbeitet? + {% trans %}processing.target.person{% endtrans %} {% for p in d.personengruppen %}{{ p.name }}{% if not loop.last %},{% endif %}
    {% endfor %}
    - Welche Datenkategorien (Löschfristen) werden verarbeitet? + {% trans %}processing.target.dataCategory{% endtrans %} {% for k in d.kategorien %}{{ k }}{% if not loop.last %},{% endif %}
    {% endfor %}
    - Die Daten werden an folgenden Stellen gespeichert. + {% trans %}processing.target.saveDirectory{% endtrans %} {{ d.speicherung|raw }}
    - An folgende Unternehmen/Stellen/Funktionen werden die Daten weitergegeben. + {% trans %}dataTransferTo{% endtrans %} {{ d.weitergabe|raw }}
    - Handelt es sich bei der Verarbeitung um ein Joint Control Verarbeitung? + {% trans %}processing.jointControl{% endtrans %} {{ d.jointControl?'Ja':'Nein' }}{{ d.jointControl?'yes':'no' |trans([], 'general') }}
    - Handelt es sich bei der Verarbeitung um ein Auftragsverarbeitung? + {% trans %}processing.requestProcessing{% endtrans %} {{ d.auftragsverarbeitung?'Ja':'Nein' }}{{ d.auftragsverarbeitung?'yes':'no' |trans([], 'general') }}
    - Zugehörige Datenweitergaben + {% trans %}connected.dataTransfer{% endtrans %} {% for dd in d.datenweitergaben %}{% if dd.activ and dd.art == 1 %}{{ dd.gegenstand }}
    {% endif %}{% endfor %}
    - Zugehörige Auftragsdatenverarbeitungen + {% trans %}connected.requestDataProcessing{% endtrans %} {% for dd in d.datenweitergaben %}{% if dd.activ and dd.art == 2 %}{{ dd.gegenstand }}
    {% endif %}{% endfor %}
    - Verwendete Software
    und verbundene Datenweitergaben + {% trans %}usedSoftware{% endtrans %}
    {% for dd in d.software | filter(dd => dd.activ) %} {{ dd.name }}{% if dd.approved %} {% trans %}Freigegeben{% endtrans %}{% endif %} + href="{{ absolute_url(path('software_edit',{'id':dd.id})) }}">{{ dd.name }}{% if dd.approved %} {% trans from 'general' %}approved{% endtrans %}{% endif %}
      {% for d in dd.datenweitergabe | filter(d => d.activ) %}
    • {{ d.gegenstand }}
    • @@ -111,76 +112,76 @@
    - Werden Daten außerhalb der EU verarbeitet? + {% trans %}processing.outsideEU{% endtrans %} {{ d.eu?'Ja':'Nein' }}{{ d.eu?'yes':'no' |trans([], 'general') }}
    - Welche technischen und organisatorischen Maßnahmen werden umgesetzt? + {% trans %}measuresTaken{% endtrans %} {% if d.tomLink %}{{ d.tomLink.titel }} -
    {{ d.tomLink.beschreibung }}{% else %}Keine Zuordnung zu einer bestehenden digitalen TOM vorgenommen.{% endif %} +
    {{ d.tomLink.beschreibung }}{% else %}{% trans %}tom.noLink{% endtrans %}{% endif %}
    - Weitere Hinweise zur TOM + {% trans %}tom.additionalInfo{% endtrans %} {{ d.tom|raw }}
    - Mögliche Risko-Quellen + {% trans %}risk.source{% endtrans %} {% for p in d.risiko %}{{ p.name }}{% if not loop.last %},{% endif %}
    {% endfor %}
    - Risikoabschätzung + {% trans %}risk.evaluation{% endtrans %} - Eintrittswahrscheinlichkeit: {{ d.beurteilungEintrittString }}
    - Schadenspotenzial: {{ d.beurteilungSchadenString }}
    + {% trans %}risk.probability{% endtrans %}: {{ d.beurteilungEintrittString }}
    + {% trans %}risk.damagePotential{% endtrans %}: {{ d.beurteilungSchadenString }}
    - Datenerhebung + {% trans %}dataCollection{% endtrans %} {{ d.source|nl2br }}
    - Informationspflicht + {% trans %}dutyToInform{% endtrans %} {{ d.informationspflicht|raw }}
    - Vorhandene interne Richtlinien + {% trans %}existingInternalRegulations{% endtrans %} {% for p in d.policies | filter(p => p.activ) %}- {{ p.title }}{% if p.approved %} {% trans %}Freigegeben{% endtrans %}{% endif %} + href="{{ absolute_url(path('policy_edit',{'id':p.id})) }}">{{ p.title }}{% if p.approved %} {% trans from 'general' %}approved{% endtrans %}{% endif %}
    {% endfor %}
    - Alte Löschfrist (auf Verarbeitung bezogen) + {% trans %}oldDeletionDeadline{% endtrans %} {{ d.loeschfrist|raw }}
    - Beurteilung und Kommentar des Datenschutzbeauftragten + {% trans %}dataPrivacyResponsibleComment{% endtrans %} {{ d.dsb|raw }}
    - Datenschutzfolgeabschätzung notwendig und vorhanden + {% trans %}dataPrivacyFollowUpEstimation.exists{% endtrans %} {{ d.activDsfa?'Ja':'Nein' }}{{ d.activDsfa?'yes':'no' |trans([], 'general') }}
    @@ -191,4 +192,4 @@ {% if d.activDsfa and min is null %} {{ include('bericht/__vvtDsfaBericht.html.twig', {'dsfa':d.activDsfa, 'd':d}) }} -{% endif %} \ No newline at end of file +{% endif %} diff --git a/templates/bericht/__vvtDsfaBericht.html.twig b/templates/bericht/__vvtDsfaBericht.html.twig index 8f37a0a7..0dc8f26d 100644 --- a/templates/bericht/__vvtDsfaBericht.html.twig +++ b/templates/bericht/__vvtDsfaBericht.html.twig @@ -1,4 +1,5 @@ -

    {% if not d.activ %}Historie: {% endif %} {{ d.name }}

    +{% trans_default_domain 'vvt' %} +

    {% if not d.activ %}{% trans from 'general' %}history{% endtrans %}: {% endif %} {{ d.name }}

    -

    Datenschutzfolgeabschätzung zu {{ d.nummer }} (id:{{ dsfa.id }})

    +

    {% trans %}dataPrivacyFollowUpEstimation.about{% endtrans %} {{ d.nummer }} (id:{{ dsfa.id }})

    @@ -67,4 +68,4 @@ {{ d.createdAt|date('d.m.Y H:i') }} by {{ d.user.email }} {% if dsfa.previous and all == 1 %} {{ include('bericht/__vvtDsfaBericht.html.twig', {'dsfa':dsfa.previous,'d':d}) }} -{% endif %} \ No newline at end of file +{% endif %} diff --git a/templates/bericht/__vvtMinBericht.html.twig b/templates/bericht/__vvtMinBericht.html.twig index a9898590..9d9fe957 100644 --- a/templates/bericht/__vvtMinBericht.html.twig +++ b/templates/bericht/__vvtMinBericht.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'vvt' %}

    -

    Verarbeitungsverzeichnis {{ d.name }}

    +

    {% trans %}processingDirectory{% endtrans %} {{ d.name }}

    - Nummer des Verarbeitungsverzeichnisses + {% trans %}processing.directoryNumber{% endtrans %} {{ d.nummer }}
    - Verantworliche Person für die Verarbeitung + {% trans %}processing.responsible.word{% endtrans %} {{ d.userContract.username }} ({{ d.userContract.email }})
    - Beschreibung der Datenschutzfolgeabschätzung + {% trans %}dataPrivacyFollowUpEstimation.description{% endtrans %} {{ dsfa.beschreibung|raw }}
    - Notwendigkeit der Datenverarbeitung + {% trans %}processing.prerequisite{% endtrans %} {{ dsfa.notwendigkeit|raw }}
    - Risiko der Datenverarbeitung + {% trans %}processing.risk{% endtrans %} {{ dsfa.risiko|raw }}
    - Abhilfe zur Minimierung der Risiken + {% trans %}risk.minimize{% endtrans %} {{ dsfa.abhilfe|raw }}
    - Weitere Standpunkte (z.B. Betriebsrat) + {% trans %}additionalStands{% endtrans %} {{ dsfa.standpunkt|raw }}
    - Stellungnahme des DSB in der Datenschutzfolgeabschätzung + {% trans %}dsbStatement{% endtrans %} {{ dsfa.dsb|raw }}
    - Ergebniss der Datenschutzfolgeabschätzung + {% trans %}dataPrivacyFollowUpEstimation.result{% endtrans %} {{ dsfa.ergebnis|raw }}
    - + - + -
    - Bezeichnung der Verarbeitung + {% trans %}processing.name{% endtrans %} {{ d.name }}
    - Zweck der Verarbeitung + {% trans %}processing.reason{% endtrans %} {{ d.zweck|raw }}
    - Rechtsgrundlage für die Verarbeitung + {% trans %}processing.legalBasis{% endtrans %} {% for g in d.grundlage %}{{ g.name }}{% if not loop.last %},{% endif %}
    {% endfor %}
    - Die Daten welcher Personen werden verarbeitet? + {% trans %}processing.target.person{% endtrans %} {% for p in d.personengruppen %}{{ p.name }}{% if not loop.last %},{% endif %}
    {% endfor %}
    - Verarbeitet Datenkategorien (Löschfristen) + {% trans %}processing.target.dataCategory{% endtrans %} {% for k in d.kategorien %}{{ k }}{% if not loop.last %},{% endif %}
    {% endfor %}
    - Die Daten werden an folgenden Stellen gespeichert/abgelegt. + {% trans %}processing.target.saveDirectory{% endtrans %} {{ d.speicherung|raw }}
    - An folgende Unternehmen/Stellen/Funktionen werden die Daten weitergegeben + {% trans %}dataTransferTo{% endtrans %} {{ d.weitergabe|raw }}
    - Werden Daten außerhalb der EU verarbeitet? + {% trans %}processing.outsideEU{% endtrans %} {{ d.eu?'Ja':'Nein' }}{{ d.eu?'yes':'no' |trans([], 'general') }}
    - Welche technischen und organisatorischen Maßnahmen werden umgesetzt? + {% trans %}measuresTaken{% endtrans %} {% if d.tomLink %}{{ d.tomLink.titel }}{% else %}Keine Zuordnung zu einer bestehenden digitalen TOM vorgenommen.{% endif %}{% if d.tomLink %}{{ d.tomLink.titel }}{% else %}{% trans %}tom.noLink{% endtrans %}{% endif %}
    - Weitere Hinweise zur TOM + {% trans %}tom.additionalInfo{% endtrans %} {{ d.tom|raw }}
    \ No newline at end of file + diff --git a/templates/bericht/akademie.html.twig b/templates/bericht/akademie.html.twig index 1a0bb3dd..888ffed4 100644 --- a/templates/bericht/akademie.html.twig +++ b/templates/bericht/akademie.html.twig @@ -1,20 +1,21 @@ {% extends 'base.html.twig' %} +{% trans_default_domain 'academy' %} {% block body %} -

    Übersicht über alle Akademiebuchungen

    +

    {% trans %}lesson.overview{% endtrans %}

    - - - - - - - - + + + + + + + + @@ -23,7 +24,7 @@ - + @@ -34,4 +35,4 @@
    KursNameZugewiesenAbgeschlossenWiedervorlageStartdatumEnddatumBuchungsID{% trans %}lesson.word{% endtrans %}{% trans from 'general' %}name{% endtrans %}{% trans from 'general' %}assignedTo{% endtrans %}{% trans %}completed{% endtrans %}{% trans %}followUp{% endtrans %}{% trans %}startDate{% endtrans %}{% trans %}endDate{% endtrans %}{% trans %}billingId{% endtrans %}
    {{ b.kurs.title }} (id:{{ b.kurs.id }}) {{ b.user.username }} ({{ b.user.email }}) {{ b.zugewiesen|date('d.m.Y') }}{{ b.abgeschlossen?'Ja':'Nein' }}{{ b.abgeschlossen?'yes':'no' |trans([], 'general') }} {{ b.vorlage }} {% if b.start is not null %}{{ b.start|date('d.m.Y') }}{% endif %} {% if b.ende is not null %}{{ b.ende|date('d.m.Y') }}{% endif %}
    -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/bericht/backup.html.twig b/templates/bericht/backup.html.twig index d1f88167..37064552 100644 --- a/templates/bericht/backup.html.twig +++ b/templates/bericht/backup.html.twig @@ -1,14 +1,15 @@ {% extends 'bericht/berichtBase.html.twig' %} +{% trans_default_domain 'bericht' %} {% block body %}
    -

    Archiviungskonzept nach Software

    +

    {% trans %}archiveConcept.software{% endtrans %}

    {% for d in daten %} {{ include('bericht/__backupBericht.html.twig', {'d':d}) }} {% endfor %}
    -

    Archiviungskonzept nach Verarbeitungen

    +

    {% trans %}archiveConcept.processing{% endtrans %}

    {% for d in vvt %} {{ include('bericht/__backup2Bericht.html.twig', {'d':d}) }} {% endfor %} diff --git a/templates/bericht/berichtBase.html.twig b/templates/bericht/berichtBase.html.twig index be4d783b..b9a3d836 100644 --- a/templates/bericht/berichtBase.html.twig +++ b/templates/bericht/berichtBase.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'bericht' %}
    - Technisch und organisatorische Massnahmen nach Art. 32 DSGVO, § 62 BDSG - {{ team.name }} + {% trans %}lawParagraph.technicalAndOrganizationalMeasures.title{% endtrans %} - {{ team.name }}
    -

    Technisch und organisatorische Massnahmen nach Art. 32 DSGVO, § 62 BDSG

    +

    {% trans %}lawParagraph.technicalAndOrganizationalMeasures.title{% endtrans %}

    {{ team.name }} - {{ team.strasse }} - {{ team.plz }} {{ team.stadt }} - - eMail: {{ team.email }} - Telefon: {{ team.telefon }}
    + {% trans from 'general' %}email{% endtrans %}: {{ team.email }} - + {% trans from 'general' %}phone{% endtrans %}: {{ team.telefon }} +

    - Im Folgenden werden die technischen und organisatorischen Maßnahmen zur Gewährleistung von Datenschutz - und - Datensicherheit festgelegt, die der Auftragnehmer mindestens einzurichten und laufend aufrecht zu - erhalten - hat. + {% trans %}lawParagraph.technicalAndOrganizationalMeasures.excerpt{% endtrans %}

    -

    A. Pseudonymisierung Verschlüsselung (Art. 32 Abs. 1 lit. a) DSGVO)

    +

    {% trans %}lawParagraph.pseudo.title{% endtrans %}

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 1}) }} -

    B. Vertraulichkeit (Art. 32 Abs. 1 lit. b) DSGVO)

    -

    1. Zutrittskontrolle

    -

    Gewährleistung, dass der Zutritt zu den Betriebsarealen und deren Bereichen nur berechtigten Personen möglich - sind:

    +

    {% trans %}lawParagraph.confidentiality.title{% endtrans %}

    +

    {% trans %}lawParagraph.entryControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.entryControl.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 2}) }} -

    2. Zugangskontrolle

    -

    Gewährleistung, dass nur Mitarbeiter der verantwortlichen Stelle oder Arbeitskräfte, die im Rahmen einer - Auftragsverarbeitung verpflichtet sind, in den hierfür vorgesehenen Aufgabenbereich dürfen und mit - Benutzeridentifikation entsprechende Daten verarbeiten:

    +

    {% trans %}lawParagraph.entranceControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.entranceControl.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 3}) }} -

    3. Zugriffskontrolle

    -

    Gewährleistung, dass die zur Benutzung eines automatisierten Verarbeitungssystems Berechtigten - ausschließlich zu den von ihrer Zugangsberechtigung umfassten personenbezogenen Daten Zugriff haben:

    +

    {% trans %}lawParagraph.accessControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.accessControl.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 4}) }} -

    4. Benutzerkontrolle

    -

    Gewährleistung der Verhinderung der Nutzung automatisierter Verarbeitungssysteme mit Hilfe von Einrichtungen - zur Datenübertragung durch Unbefugte:

    +

    {% trans %}lawParagraph.userControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.userControl.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 5}) }} -

    5. Speicherkontrolle

    -

    Verhinderung der unbefugten Eingabe von personenbezogenen Daten sowie der unbefugten Kenntnisnahme, - Veränderung und Löschung von gespeicherten personenbezogenen Daten:

    +

    {% trans %}lawParagraph.saveControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.saveControl.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 6}) }} -

    6. Trennbarkeit

    -

    Gewährleistung, dass zu unterschiedlichen Zwecken erhobene personenbezogene Daten getrennt verarbeitet - werden:

    +

    {% trans %}lawParagraph.separability.title{% endtrans %}

    +

    {% trans %}lawParagraph.separability.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 7}) }} -

    C. Integrität (Art. 32 Abs. 1 lit. c) DSGVO)

    -

    7. Datenintegrität

    -

    Gewährleistung, dass gespeicherte personenbezogene Daten nicht durch Fehlfunktionen des Systems beschädigt - werden können:

    +

    {% trans %}lawParagraph.integrity.title{% endtrans %}

    +

    {% trans %}lawParagraph.dataIntegrity.title{% endtrans %}

    +

    {% trans %}lawParagraph.dataIntegrity.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 8}) }} -

    8. Transportkontrolle

    -

    Gewährleistung, dass bei der Übermittlung personenbezogener Daten sowie beim Transport von Datenträgern die - Vertraulichkeit und Integrität der Daten geschützt werden:

    +

    {% trans %}lawParagraph.transportControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.transportControl.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 9}) }} -

    9. Übertragungskontrolle

    -

    Gewährleistung, dass überprüft und festgestellt werden kann, an welche Stellen personenbezogene Daten mit - Hilfe von Einrichtungen zur Datenübertragung übermittelt oder zur Verfügung gestellt wurden oder werden - können.

    +

    {% trans %}lawParagraph.transmissionControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.transmissionControl.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 10}) }} -

    10. Eingabekontrolle

    -

    Gewährleistung, dass nachträglich überprüft und festgestellt werden kann, welche personenbezogenen Daten zu - welcher Zeit und von wem in automatisierte Verarbeitungssysteme eingegeben oder verändert worden sind:

    +

    {% trans %}lawParagraph.inputControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.inputControl.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 11}) }} -

    11. Zuverlässigkeit

    -

    Gewährleistung, dass alle Funktionen des Systems zur Verfügung stehen und auftretende Fehlfunktionen gemeldet - werden:

    +

    {% trans %}lawParagraph.reliability.title{% endtrans %}

    +

    {% trans %}lawParagraph.reliability.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 12}) }} -

    12. Auftragskontrolle

    -

    Gewährleistung, dass personenbezogene Daten, die im Auftrag verarbeitet werden, nur entsprechend den - Weisungen des Auftraggebers verarbeitet werden können:

    +

    {% trans %}lawParagraph.requestControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.requestControl.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 13}) }} -

    D. Verfügbarkeit und Belastbarkeit (Art. 32 Abs. 1 lit. c) DSGVO)

    -

    13. Verfügbarkeitskontrolle

    -

    Gewährleistung, dass personenbezogene Daten gegen Zerstörung oder Verlust geschützt sind:

    +

    {% trans %}lawParagraph.availability.title{% endtrans %}

    +

    {% trans %}lawParagraph.availabilityControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.availabilityControl.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 14}) }} -

    14. Wiederherstellbarkeit

    -

    Gewährleistung, dass eingesetzte Systeme im Störungsfall wiederhergestellt werden können:

    +

    {% trans %}lawParagraph.recoverability.title{% endtrans %}

    +

    {% trans %}lawParagraph.recoverability.excerpt{% endtrans %}:

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 15}) }} -

    E. Verfahren zur regelmässigen Überprüfung, Bewertung und Evaluierung (Art. 32 Abs. 1 lit. c) DSGVO)

    +

    {% trans %}lawParagraph.evaluation.title{% endtrans %}

    {{ include('bericht/__berichtGlobalTomItems.html.twig', {'item': 16}) }} - -
    {{ include('bericht/__berichtFooter.html.twig') }} - \ No newline at end of file + diff --git a/templates/bericht/berichtTom.html.twig b/templates/bericht/berichtTom.html.twig index b470dba7..6a1eb785 100644 --- a/templates/bericht/berichtTom.html.twig +++ b/templates/bericht/berichtTom.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'tom' %}
    - Technisch und organisatorische Massnahmen nach Art. 32 DSGVO, § 62 BDSG - {{ team.name }} + {% trans %}lawParagraph.technicalAndOrganizationalMeasures.title{% endtrans %} - {{ team.name }}
    -
    -

    Technisch und organisatorische Massnahmen nach Art. 32 DSGVO, § 62 BDSG

    +

    {% trans %}lawParagraph.technicalAndOrganizationalMeasures.title{% endtrans %}

    {{ team.name }} - {{ team.strasse }} - {{ team.plz }} {{ team.stadt }} - - eMail: {{ team.email }} - Telefon: {{ team.telefon }}
    + {% trans from 'general' %}email{% endtrans %}: {{ team.email }} - + {% trans from 'general' %}phone{% endtrans %}: {{ team.telefon }} +

    - Im Folgenden werden die technischen und organisatorischen Maßnahmen zur Gewährleistung von Datenschutz - und - Datensicherheit festgelegt, die der Auftragnehmer mindestens einzurichten und laufend aufrecht zu - erhalten - hat. + {% trans %}lawParagraph.technicalAndOrganizationalMeasures.excerpt{% endtrans %}

    {% for daten in datenAll %} {% if not daten.activ %} -

    Historie

    +

    {% trans from 'general' %}history{% endtrans %}

    {% endif %} -

    A. Pseudonymisierung Verschlüsselung (Art. 32 Abs. 1 lit. a) DSGVO)

    +

    {% trans %}lawParagraph.pseudo.title{% endtrans %}

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomPseudo}) }} - -

    B. Vertraulichkeit (Art. 32 Abs. 1 lit. b) DSGVO)

    -

    1. Zutrittskontrolle

    -

    Gewährleistung, dass der Zutritt zu den Betriebsarealen und deren Bereichen nur berechtigten Personen - möglich - sind:

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomZutrittskontrolle}) }} - -

    2. Zugangskontrolle

    -

    Gewährleistung, dass nur Mitarbeiter der verantwortlichen Stelle oder Arbeitskräfte, die im Rahmen einer - Auftragsverarbeitung verpflichtet sind, in den hierfür vorgesehenen Aufgabenbereich dürfen und mit - Benutzeridentifikation entsprechende Daten verarbeiten:

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomZugangskontrolle}) }} - -

    3. Zugriffskontrolle

    -

    Gewährleistung, dass die zur Benutzung eines automatisierten Verarbeitungssystems Berechtigten - ausschließlich zu den von ihrer Zugangsberechtigung umfassten personenbezogenen Daten Zugriff haben:

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomZugriffskontrolle}) }} - -

    4. Benutzerkontrolle

    -

    Gewährleistung der Verhinderung der Nutzung automatisierter Verarbeitungssysteme mit Hilfe von - Einrichtungen - zur Datenübertragung durch Unbefugte:

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomBenutzerkontrolle}) }} - -

    5. Speicherkontrolle

    -

    Verhinderung der unbefugten Eingabe von personenbezogenen Daten sowie der unbefugten Kenntnisnahme, - Veränderung und Löschung von gespeicherten personenbezogenen Daten:

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomSpeicherkontrolle}) }} - -

    6. Trennbarkeit

    -

    Gewährleistung, dass zu unterschiedlichen Zwecken erhobene personenbezogene Daten getrennt verarbeitet - werden:

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomTrennbarkeit}) }} - -

    C. Integrität (Art. 32 Abs. 1 lit. c) DSGVO)

    -

    7. Datenintegrität

    -

    Gewährleistung, dass gespeicherte personenbezogene Daten nicht durch Fehlfunktionen des Systems - beschädigt - werden können:

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomDatenintegritaet}) }} - -

    8. Transportkontrolle

    -

    Gewährleistung, dass bei der Übermittlung personenbezogener Daten sowie beim Transport von Datenträgern - die - Vertraulichkeit und Integrität der Daten geschützt werden:

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomtransportkontrolle}) }} - -

    9. Übertragungskontrolle

    -

    Gewährleistung, dass überprüft und festgestellt werden kann, an welche Stellen personenbezogene Daten mit - Hilfe von Einrichtungen zur Datenübertragung übermittelt oder zur Verfügung gestellt wurden oder werden - können.

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomUebertragungskontrolle}) }} - -

    10. Eingabekontrolle

    -

    Gewährleistung, dass nachträglich überprüft und festgestellt werden kann, welche personenbezogenen Daten - zu - welcher Zeit und von wem in automatisierte Verarbeitungssysteme eingegeben oder verändert worden - sind:

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomEingabekontrolle}) }} - -

    11. Zuverlässigkeit

    -

    Gewährleistung, dass alle Funktionen des Systems zur Verfügung stehen und auftretende Fehlfunktionen - gemeldet - werden:

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomZuverlaessigkeit}) }} - -

    12. Auftragskontrolle

    -

    Gewährleistung, dass personenbezogene Daten, die im Auftrag verarbeitet werden, nur entsprechend den - Weisungen des Auftraggebers verarbeitet werden können:

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomAuftragskontrolle}) }} - -

    D. Verfügbarkeit und Belastbarkeit (Art. 32 Abs. 1 lit. c) DSGVO)

    -

    13. Verfügbarkeitskontrolle

    -

    Gewährleistung, dass personenbezogene Daten gegen Zerstörung oder Verlust geschützt sind:

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomVerfuegbarkeitskontrolle}) }} - -

    14. Wiederherstellbarkeit

    -

    Gewährleistung, dass eingesetzte Systeme im Störungsfall wiederhergestellt werden können:

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomWiederherstellbarkeit}) }} - -

    E. Verfahren zur regelmässigen Überprüfung, Bewertung und Evaluierung (Art. 32 Abs. 1 lit. c) - DSGVO)

    - {{ include('bericht/__berichtTomItems.html.twig', {'item': daten.tomAudit}) }} + {{ include('bericht/__berichtTomItems.html.twig', {'item': 1}) }} + +

    {% trans %}lawParagraph.confidentiality.title{% endtrans %}

    +

    {% trans %}lawParagraph.entryControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.entryControl.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 2}) }} + +

    {% trans %}lawParagraph.entranceControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.entranceControl.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 3}) }} + +

    {% trans %}lawParagraph.accessControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.accessControl.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 4}) }} + +

    {% trans %}lawParagraph.userControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.userControl.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 5}) }} + +

    {% trans %}lawParagraph.saveControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.saveControl.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 6}) }} + +

    {% trans %}lawParagraph.separability.title{% endtrans %}

    +

    {% trans %}lawParagraph.separability.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 7}) }} + +

    {% trans %}lawParagraph.integrity.title{% endtrans %}

    +

    {% trans %}lawParagraph.dataIntegrity.title{% endtrans %}

    +

    {% trans %}lawParagraph.dataIntegrity.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 8}) }} + +

    {% trans %}lawParagraph.transportControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.transportControl.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 9}) }} + +

    {% trans %}lawParagraph.transmissionControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.transmissionControl.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 10}) }} + +

    {% trans %}lawParagraph.inputControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.inputControl.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 11}) }} + +

    {% trans %}lawParagraph.reliability.title{% endtrans %}

    +

    {% trans %}lawParagraph.reliability.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 12}) }} + +

    {% trans %}lawParagraph.requestControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.requestControl.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 13}) }} + +

    {% trans %}lawParagraph.availability.title{% endtrans %}

    +

    {% trans %}lawParagraph.availabilityControl.title{% endtrans %}

    +

    {% trans %}lawParagraph.availabilityControl.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 14}) }} + +

    {% trans %}lawParagraph.recoverability.title{% endtrans %}

    +

    {% trans %}lawParagraph.recoverability.excerpt{% endtrans %}:

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 15}) }} + +

    {% trans %}lawParagraph.evaluation.title{% endtrans %}

    + {{ include('bericht/__berichtTomItems.html.twig', {'item': 16}) }} {{ daten.createdAt|date('d.m.Y H:i') }} by {{ daten.user.email }} diff --git a/templates/bericht/index.html.twig b/templates/bericht/index.html.twig index 5a6171f8..f8313308 100644 --- a/templates/bericht/index.html.twig +++ b/templates/bericht/index.html.twig @@ -1,124 +1,123 @@ {% extends 'base.html.twig' %} +{% trans_default_domain 'bericht' %} {% block CTA %} - {% endblock %} - {% block body %} -

    Berichte erstellen

    +

    {% trans %}report.create{% endtrans %}

    - {% if app.user.adminUser %} + {% if currentTeam in app.user.adminRoles %} {% endif %}
    -

    Datenschutzrichtlinien

    +

    {% trans %}dataProtectionGuideline.word{% endtrans %}

    - Alle Richtlinien exportieren + {% trans %}dataProtectionGuideline.export{% endtrans %}
    @@ -130,26 +129,24 @@
    - -
    {{ include('base/__snack.html.twig') }} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/bericht/modalView.html.twig b/templates/bericht/modalView.html.twig index cb158908..d518ad23 100644 --- a/templates/bericht/modalView.html.twig +++ b/templates/bericht/modalView.html.twig @@ -1,8 +1,9 @@ +{% trans_default_domein 'bericht' %} diff --git a/templates/bericht/policy.html.twig b/templates/bericht/policy.html.twig index e7445463..c2e1988b 100644 --- a/templates/bericht/policy.html.twig +++ b/templates/bericht/policy.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'policies' %}
    - Interne Datenschutzrichtlinie + {% trans %}internal{% endtrans %}
    {% for d in daten %} diff --git a/templates/bericht/zertifikatAkademie.html.twig b/templates/bericht/zertifikatAkademie.html.twig index 7ebaf9d3..7482078a 100644 --- a/templates/bericht/zertifikatAkademie.html.twig +++ b/templates/bericht/zertifikatAkademie.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'academy' %}
    - Zertifikat für den Abschluss einen Datenschutzkurses von der Open-Datenschutz Akademie + {% trans %}certification.title{% endtrans %}
    -

    Zertifikat für den Abschluss einen Datenschutzkurses von der Open-Datenschutz Akademie

    +

    {% trans %}certification.title{% endtrans %}

    {{ team.name }} - {{ team.strasse }} - {{ team.plz }} {{ team.stadt }} - - eMail: {{ team.email }} - Telefon: {{ team.telefon }}
    + {% trans from 'general' %}email{% endtrans %}: {{ team.email }} - + {% trans from 'general' %}phone{% endtrans %}: {{ team.telefon }} +

    - Hiermit bestätigen wir, dass {{ user.username }} ({{ user.email }}) den Kurs "{{ daten.kurs.title }}" am {{ daten.ende|date('d.m.Y') }} erfolgreich abgeschlossen hat. + {% trans with { + '{username}': user.username, + '{email}': user.email, + '{lessonTitle}': daten.kurs.title, + '{finishedAt}': daten.ende|date('d.m.Y') + } %} + certification.text + {% endtrans %}

    - Dieses Zertifikat wurde automatisch erstellt.
    - Die Gültigkeit kann über die Buchungs ID: -- {{ daten.buchungsID }} -- überprüft werden. + {% trans with {'{billingId}': daten.id} |raw %}certification.disclaimer{% endtrans %}

    @@ -67,4 +76,4 @@
    {{ include('bericht/__berichtFooter.html.twig') }} - \ No newline at end of file + diff --git a/templates/bundles/FOSUserBundle/Profile/show_content.html.twig b/templates/bundles/FOSUserBundle/Profile/show_content.html.twig index a5ec8bf2..49f0ddda 100644 --- a/templates/bundles/FOSUserBundle/Profile/show_content.html.twig +++ b/templates/bundles/FOSUserBundle/Profile/show_content.html.twig @@ -10,11 +10,11 @@ Letzer Login: {{ user.lastLogin|date('d.m.Y H:i') }} Uhr

    - {% if user.team %} + {% if currentTeam is defined %}

    - Team: {% if user.team %}{{ user.team.name }}{% endif %}
    - Akademie: {% if user.akademieuser %}{{ user.akademieuser.name }}{% endif %}
    - Team: {% if user.adminUser %}{{ user.adminUser.name }}{% endif %} + Team: {% if currentTeam %}{{ currentTeam.name }}
    {% endif %} + Akademie: {% if user.akademieuser %}{{ user.akademieuser.name }}
    {% endif %} + Team: {% if currentTeam in user.adminRoles %}{{ currentTeam.name }}{% endif %}

    {% endif %}
    diff --git a/templates/bundles/TwigBundle/Exception/error.html.twig b/templates/bundles/TwigBundle/Exception/error.html.twig index 885fb1d5..52c07556 100644 --- a/templates/bundles/TwigBundle/Exception/error.html.twig +++ b/templates/bundles/TwigBundle/Exception/error.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'error' %} @@ -7,7 +8,7 @@ - Unbekannter {{ 'Fehler'|trans }} + {% trans %}unknownError{% endtrans %} @@ -121,12 +122,15 @@ height: 148px; margin: 0px auto 10px; } + .notfound .notfound-404 h1 { font-size: 86px; } + .notfound .notfound-404 h2 { font-size: 16px; } + .notfound a { padding: 7px 15px; font-size: 14px; @@ -141,10 +145,10 @@
    -

    Oops!

    -

    XXX - {{ 'Unbekannter Fehler'|trans }}

    +

    {% trans %}oops{% endtrans %}

    +

    XXX - {% trans %}unknownError{% endtrans %}

    - Go TO Homepage + {% trans %}toHomepage{% endtrans %}
    diff --git a/templates/bundles/TwigBundle/Exception/error403.html.twig b/templates/bundles/TwigBundle/Exception/error403.html.twig index f258f26f..0e2b9a15 100644 --- a/templates/bundles/TwigBundle/Exception/error403.html.twig +++ b/templates/bundles/TwigBundle/Exception/error403.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'error' %} diff --git a/templates/bundles/TwigBundle/Exception/error404.html.twig b/templates/bundles/TwigBundle/Exception/error404.html.twig index 8ffa121d..93b002ad 100644 --- a/templates/bundles/TwigBundle/Exception/error404.html.twig +++ b/templates/bundles/TwigBundle/Exception/error404.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'error' %} @@ -112,6 +113,7 @@ 75% { top: 100px; left: 40%; opacity:0.6; } 100% { top: 10px; left: 45%; opacity: 1; } } + @keyframes smallmove { 0% { top: 10px; left: 45%; opacity: 1; } 25% { top: 300px; left: 40%; opacity:0.7; } @@ -143,6 +145,7 @@ 75% { top: 100px; right: 35%; opacity:0.6; } 100% { top: 0px; right: 4%; opacity: 0.5; } } + @keyframes bigmove { 0% { top: 0px; right: 4%; opacity: 0.5; } 25% { top: 100px; right: 40%; opacity:0.4; } @@ -153,10 +156,10 @@
    -
    {{ 'Fehler'|trans }}
    +
    {% trans %}error{% endtrans %}

    404
    - {% trans %}Seite nicht gefunden{% endtrans %} + {% trans %}pageNotFound{% endtrans %}

    diff --git a/templates/bundles/TwigBundle/Exception/error500.html.twig b/templates/bundles/TwigBundle/Exception/error500.html.twig index 3d8bd07a..4f768894 100644 --- a/templates/bundles/TwigBundle/Exception/error500.html.twig +++ b/templates/bundles/TwigBundle/Exception/error500.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'error' %} @@ -7,7 +8,7 @@ - 500 {{ 'Fehler'|trans }} + {% trans %}error500{% endtrans %} @@ -121,12 +122,15 @@ height: 148px; margin: 0px auto 10px; } + .notfound .notfound-404 h1 { font-size: 86px; } + .notfound .notfound-404 h2 { font-size: 16px; } + .notfound a { padding: 7px 15px; font-size: 14px; @@ -141,10 +145,10 @@
    -

    Oops!

    -

    500 - {{ 'Interner Serverfehler'|trans }}

    +

    {% trans %}oops{% endtrans %}

    +

    {% trans %}error500{% endtrans %}

    - Go TO Homepage + {% trans %}toHomepage{% endtrans %}
    diff --git a/templates/client_request/base.html.twig b/templates/client_request/base.html.twig index d52ba9f6..067f0185 100644 --- a/templates/client_request/base.html.twig +++ b/templates/client_request/base.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'client_request' %} @@ -17,10 +18,9 @@ src="{{ asset('logo.png') }}" style="height: 50px">
    diff --git a/templates/client_request/index.html.twig b/templates/client_request/index.html.twig index 4276d0e7..f7d22e4f 100644 --- a/templates/client_request/index.html.twig +++ b/templates/client_request/index.html.twig @@ -1,6 +1,7 @@ {% extends 'client_request/base.html.twig' %} +{% trans_default_domain 'client_request' %} -{% block title %}Hello ClientRequestController!{% endblock %} +{% block title %}{% trans %}greeting{% endtrans %}{% endblock %} {% block content %}
    -

    Kundenportal von {{ team.name }}

    +

    {% trans %}customerPortalOf{% endtrans%} {{ team.name }}


    {{ team.name }}

    @@ -30,31 +31,30 @@
    -

    Hier könnne Sie eine neue Anfrage einreichen und Ihre Rechte nach der DSGVO geltend machen. +

    {% trans %}request.create.disclaimer{% endtrans%}

    • - Tragen Sie alle Daten in das Formular ein. + {% trans %}fillInForm{% endtrans%}
    • - Bestätigen Sie Ihre Email Adresse. + {% trans %}confirmEmail{% endtrans%}
    • - Führen Sie die Indentifikation ihrer Person nach den Vorgaben von {{ team.name }} durch. + {% trans with {'{teamName}': team.name} %}identify{% endtrans%}
    • - Kommunizieren Sie mit {{ team.name }} über eine verschlüsselte Verbindung. + {% trans with {'{teamName}': team.name} %}encryptedConnection{% endtrans%}
    • - Erhalten Sie die Antwort auf Ihre Anfrage. + {% trans %}request.response{% endtrans%}
    - Neue Anfrage - erstellen + {% trans %}request.create.link{% endtrans %}

    - Suchen Sie nach Ihrer bestehenden Anfrage. + {% trans %}request.find{% endtrans%}

    {{ form_start(form) }} @@ -62,60 +62,7 @@ {{ form_end(form) }}
    - -

    Ihre Rechte nach der DSGVO

    -

    - Werden personenbezogene Daten von Ihnen verarbeitet, sind Sie Betroffener i.S.d. DSGVO und es stehen Ihnen - die nachfolgenden Rechte gegenüber {{ team.name }} (Im Weiteren uns oder wir) als dem Verantwortlichen zu. -

    -

    - a) Rechte nach Artikel 15 ff. DSGVO
    - Die betroffene Person hat das Recht, von dem Verantwortlichen eine Bestätigung darüber zu verlangen, ob - sie betreffende personenbezogene Daten verarbeitet werden; ist dies der Fall, so hat sie ein Recht auf - Auskunft über diese personenbezogenen Daten und auf die in Artikel 15 DSGVO im einzelnen - aufgeführten - Informationen. Unter bestimmten gesetzlichen Voraussetzungen haben Sie das Recht auf Berichtigung - nach - Artikel 16 DSGVO, das Recht auf Einschränkung der Verarbeitung nach Artikel 18 DSGVO und das Recht - auf - Löschung („Recht auf Vergessenwerden“) nach Artikel 17 DSGVO. Für das Recht auf Auskunft und - Löschung gelten - ergänzend die §§ 34, 35 BDSG. Zudem haben Sie das Recht auf Herausgabe der von Ihnen bereitgestellten - Daten - in einem strukturierten, gängigen und maschinenlesbaren Format (Recht auf Datenübertragbarkeit) nach Artikel - 20 DSGVO, sofern die Verarbeitung mithilfe automatisierter Verfahren erfolgt und auf einer Einwilligung nach - Art. 6 Abs. 1 lit. a) oder Art. 9 Abs. 2 lit. a) oder auf einem Vertrag gem. Art. 6 Abs. 1 lit. b) DSGVO - beruht. -

    -

    - b) Widerruf einer Einwilligung nach Art. 7 Abs. 3 DSGVO
    - Beruht die Verarbeitung auf einer Einwilligung können Sie die Einwilligung in die Verarbeitung - personenbezogener Daten jederzeit uns gegenüber widerrufen. Bitte beachten Sie, dass der Widerruf erst für - die Zukunft wirkt. Verarbeitungen, die vor dem Widerruf erfolgt sind, sind davon nicht betroffen. -

    -

    - c) Beschwerderecht
    - Sie haben die Möglichkeit, sich mit einer Beschwerde an uns oder an eine Datenschutzaufsichtsbehörde - zu - wenden (Artikel 77 DSGVO). -

    -

    - d) Widerspruchsrecht nach Artikel 21 DSGVO
    - Zusätzlich zu den vorgenannten Rechten, steht Ihnen ein Widerspruchsrecht wie folgt zu:
    - Einzelfallbezogenes Widerspruchsrecht
    - Sie haben das Recht aus Gründen, die sich aus Ihrer besonderen Situation ergeben, jederzeit gegen die - Verarbeitung Sie betreffender personenbezogener Daten, die aufgrund von Artikel 6 Abs. 1 S. 1 lit. e) DSGVO - (Datenverarbeitung im öffentlichen Interesse) und Artikel 6 Abs. 1 S.1 lit. f) DSGVO (Datenverarbeitung auf - der - Grundlage einer Interessenabwägung) erfolgt, Widerspruch einzulegen; dies gilt auch für ein auf diese - Bestimmung - gestütztes Profiling im Sinne von Artikel 4 Nr. 4 DSGVO. Legen Sie Widerspruch ein, werden wir Ihre - personenbezogenen Daten nicht mehr verarbeiten, es sei denn, wir können zwingende schutzwürdige Gründe für - die - Verarbeitung nachweisen, die Ihre Interessen, Rechte und Freiheiten überwiegen oder die Verarbeitung dient - der - Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen. -

    + {% trans with {'{teamName}': team.name} | raw %}gdpr{% endtrans %}
    {{ include('base/__snack.html.twig') }} {% endblock %} diff --git a/templates/client_request/indexInternal.html.twig b/templates/client_request/indexInternal.html.twig index ad350080..59c59007 100644 --- a/templates/client_request/indexInternal.html.twig +++ b/templates/client_request/indexInternal.html.twig @@ -1,30 +1,31 @@ {% extends 'base.html.twig' %} +{% trans_default_domain 'client_request' %} {% block CTA %} - {% if team.slug %} - - Neues Anfrage anlegen + {% if currentTeam.slug %} + + {% trans %}request.create.link{% endtrans %} - - Kundenportal + + {% trans %}customerPortal{% endtrans %} {% endif %} {% endblock %} {% block body %} -

    Alle Anfragen

    +

    {% trans %}request.all{% endtrans %}

    - - - - - - - + + + + + + + diff --git a/templates/client_request/internalEdit.html.twig b/templates/client_request/internalEdit.html.twig index fc2ecac1..f0d90630 100644 --- a/templates/client_request/internalEdit.html.twig +++ b/templates/client_request/internalEdit.html.twig @@ -1,7 +1,8 @@ {% extends 'base.html.twig' %} +{% trans_default_domain 'client_request' %} {% block CTA %} - Zurück + {% trans from 'general' %}back{% endtrans %} {% endblock %} {% block body %} diff --git a/templates/client_request/internalShow.html.twig b/templates/client_request/internalShow.html.twig index d92c1fbc..311bd46b 100644 --- a/templates/client_request/internalShow.html.twig +++ b/templates/client_request/internalShow.html.twig @@ -1,22 +1,23 @@ {% extends 'base.html.twig' %} +{% trans_default_domain 'client_request' %} {% block CTA %} - {% if app.user.adminUser == data.team %} + {% if data.team in app.user.adminRoles %} {{ data.validUser?'Nutzervalidierung rückgängig':'Nutzer ist verifiziert' }} + class="btn btn-sm btn-success">{{ (data.validUser?'user.undoValidation':'user.validate') |trans }}{{ data.activ?'Archivieren':'Wiederherstellen' }} + class="btn btn-sm btn-danger">{{ data.activ?'archive':'restore' |trans([], 'general') }} {% if not data.activ %} {{ data.open?'Intern schalten':'Öffentlich schalten' }} + class="btn btn-sm btn-danger">{{ (data.open?'request.publish.private':'request.publish.public') |trans }} {% endif %} Bearbeiten + class="btn btn-sm btn-primary">{% trans from 'general' %}edit{% endtrans %} {% endif %} Interne Bemerkung bearbeiten + class="btn btn-sm btn-primary">{% trans %}editInternalAnnotation{% endtrans %} - PDF erstellen + {% trans from 'general' %}pdf.create{% endtrans %} {% endblock %} @@ -25,42 +26,42 @@

    {{ data.title }}

    {% if not data.activ %}
    - {% trans %}Diese Anfrage ist geschlossen.{% endtrans %} + {% trans %}request.closed{% endtrans %}
    {% endif %} {% if not data.open %}
    - {% trans %}Diese Anfrage ist intern geschalten.{% endtrans %} + {% trans %}request.internal{% endtrans %}
    {% endif %} {% if data.pgp %}
    - {% trans %}Alle Emails werden mit OpenPGP verschlüsselt verschickt. 🔒 {% endtrans %} + {% trans %}openPGP.disclaimer{% endtrans %}
    {% endif %}

    - {% trans %}Ticket ID{% endtrans %}: {{ data.uuid }}
    - {% trans %}Email Adresse{% endtrans %} + {% trans %}issueId{% endtrans %}: {{ data.uuid }}
    + {% trans from 'general' %}email{% endtrans %} : {{ data.email }} {% if data.pgp %}🔒 {% endif %}{% if data.emailValid %}✅{% endif %}
    - {% trans %}Name{% endtrans %} + {% trans from 'general' %}name{% endtrans %} : {{ data.name }} {% if data.validUser %}✅ by {{ data.userValidBy.username }}{% endif %}
    - {% trans %}Erstellt am{% endtrans %}: {{ data.createdAt|date('d.m.Y H:i') }}
    - {% trans %}Grund der Anfrage{% endtrans %}: {{ data.itemstring }} + {% trans from 'general' %}createdAt{% endtrans %}: {{ data.createdAt|date('d.m.Y H:i') }}
    + {% trans %}request.reason{% endtrans %}: {{ data.itemstring }}

    - {% trans %}Weitere Angaben{% endtrans %}
    - {% trans %}Name{% endtrans %}: {{ data.firstname }} {{ data.lastname }}
    - {% trans %}Adresse{% endtrans %}: {{ data.street }}, {{ data.city }}
    - {% if data.birthday %}{% trans %}Geburtstag{% endtrans %}: {{ data.birthday|date('d.m.Y') }}
    {% endif %} + {% trans from 'general' %}additionalInformation{% endtrans %}
    + {% trans from 'general' %}name{% endtrans %}: {{ data.firstname }} {{ data.lastname }}
    + {% trans from 'general' %}address{% endtrans %}: {{ data.street }}, {{ data.city }}
    + {% if data.birthday %}{% trans from 'general' %}birthday{% endtrans %}: {{ data.birthday|date('d.m.Y') }}
    {% endif %}

    - {% trans %}Beschreibung{% endtrans %}:
    + {% trans from 'general' %}description{% endtrans %}:
    {{ data.description|nl2br }}

    - {% trans %}Interne Bemerkungen{% endtrans %}:
    + {% trans %}internalAnnotation{% endtrans %}:
    {{ data.notes|raw }}
    @@ -74,7 +75,7 @@ {% else %}
    - {% trans %}Diese Anfrage ist geschlossen.{% endtrans %} + {% trans %}request.closed{% endtrans %}
    {% endif %} @@ -90,4 +91,4 @@ {{ include('base/__snack.html.twig') }} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/client_request/new.html.twig b/templates/client_request/new.html.twig index 1dab6b48..f6c15034 100644 --- a/templates/client_request/new.html.twig +++ b/templates/client_request/new.html.twig @@ -1,15 +1,16 @@ {% extends 'client_request/base.html.twig' %} +{% trans_default_domain 'client_request' %} {% block title %} - {% trans %}Datenschutzcenter Kundenportal{% endtrans %} + {% trans %}dataPrivacyCenter{% endtrans%} {% trans %}customerPortal{% endtrans %} {% endblock %} {% block content %}
    {% trans %}Zurück zum Portal{% endtrans %} + class="btn btn-primary btn-sm">{% trans %}backToPortal{% endtrans %}
    -

    {% trans %}Neue Anfrage stellen{% endtrans %}

    +

    {% trans %}request.create.link{% endtrans %}

    {{ form_start(form) }} {{ form_row(form.title) }} {{ form_row(form.item) }} @@ -22,12 +23,12 @@
    -

    {% trans %}Weitere Angaben zur Anfrage{% endtrans %}

    +

    {% trans %}request.additionalInformation{% endtrans %}

    - {% trans %}Für eine schnelle und unkomplizierte Identifikation, möchten wir Sie darum bitten, uns folgende Daten zur Verifikation mitzuteilen:{% endtrans %} + {% trans %}askForVerification{% endtrans %}:

    {{ form_row(form.firstname) }} {{ form_row(form.lastname) }} diff --git a/templates/client_request/show.html.twig b/templates/client_request/show.html.twig index ebea233f..0da3e429 100644 --- a/templates/client_request/show.html.twig +++ b/templates/client_request/show.html.twig @@ -1,53 +1,50 @@ {% extends 'client_request/base.html.twig' %} +{% trans_default_domain 'client_request' %} -{% block title %}Hello ClientRequestController!{% endblock %} +{% block title %}{% trans %}greeting{% endtrans %}{% endblock %} {% block content %}
    - Zurück zum Portal + {% trans %}backToPortal{% endtrans %}

    {{ data.title }}

    {% if not data.activ %}
    - {% trans %}Diese Anfrage ist geschlossen.{% endtrans %} + {% trans %}request.closed{% endtrans %}
    {% endif %} {% if not data.emailValid %}
    - {% trans %}ACHTUNG!
    - Bevor wir die Anfrage weiter bearbeiten können, müssen Sie die Email Adresse verifizieren. Wir haben - gerade eine Email mit einem Link an Ihre Email Adresse geschickt. Klicken Sie auf den Link oder - kopieren diesen in eine Browser und bestätigen Sie Ihre Email Adresse.{% endtrans %} + {% trans %}emailVerificationDisclaimer{% endtrans %}
    {% endif %} {% if not data.validUser %}
    - {% trans %}WICHTIG!
    - Zum aktuellen Zeitpunkt konnten wir Ihre Identidät noch nicht verifizieren. Für uns ist der Datenschutz sehr wichtig. Je nach Grund der Anfrage werden wir Sie bitten weitere Informationen zu Ihrer Person zu liefern, damit wir Ihre Identidät zweifelsfrei feststellen können.{% endtrans %} + {% trans %}cannotVerify{% endtrans %}
    {% endif %} {% if data.pgp %}
    - {% trans %}Alle Emails werden mit OpenPGP verschlüsselt verschickt. 🔒{% endtrans %} + {% trans %}openPGP.disclaimer{% endtrans %}
    {% endif %}

    - {% trans %}Ticket ID{% endtrans %}: {{ data.uuid }}
    - {% trans %}Email Adresse{% endtrans %} + {% trans %}issueId{% endtrans %}: {{ data.uuid }}
    + {% trans from 'general' %}email{% endtrans %} : {{ data.email }} {% if data.pgp %}🔒 {% endif %}{% if data.emailValid %}✅{% endif %}
    - {% trans %}Name{% endtrans %}: {{ data.name }} {% if data.validUser %}✅{% endif %}
    - {% trans %}Erstellt am{% endtrans %}: {{ data.createdAt|date('d.m.Y H:i') }}
    - {% trans %}Grund{% endtrans %}: {{ data.itemstring }} + {% trans from 'general' %}name{% endtrans %}: {{ data.name }} {% if data.validUser %}✅{% endif %}
    + {% trans from 'general' %}createdAt{% endtrans %}: {{ data.createdAt|date('d.m.Y H:i') }}
    + {% trans from 'general' %}reason{% endtrans %}: {{ data.itemstring }}

    - {% trans %}Weitere Angaben{% endtrans %}
    - {% trans %}Name{% endtrans %}: {{ data.firstname }} {{ data.lastname }}
    - {% trans %}Adresse{% endtrans %}: {{ data.street }}, {{ data.city }}
    - {% if data.birthday %}{% trans %}Geburtstag{% endtrans %}: {{ data.birthday|date('d.m.Y') }} + {% trans from 'general' %}additionalInformation{% endtrans %}
    + {% trans from 'general' %}name{% endtrans %}: {{ data.firstname }} {{ data.lastname }}
    + {% trans from 'general' %}address{% endtrans %}: {{ data.street }}, {{ data.city }}
    + {% if data.birthday %}{% trans from 'general' %}birthday{% endtrans %}: {{ data.birthday|date('d.m.Y') }}
    {% endif %}

    - {% trans %}Beschreibung{% endtrans %}:
    {{ data.description|nl2br }} + {% trans from 'general' %}description{% endtrans %}:
    {{ data.description|nl2br }}

    @@ -61,14 +58,14 @@
    {% else %}
    - {% trans %}Diese Anfrage ist geschlossen.{% endtrans %} + {% trans %}request.closed{% endtrans %}
    {% endif %}

    - {{ 'Kommentare'|trans }} + {% trans from 'general' %}comments{% endtrans %}

    {% for c in data.clientComments|sort((b, a) => a.createdAt <=> b.createdAt) %} diff --git a/templates/dashboard/__assign.html.twig b/templates/dashboard/__assign.html.twig index e6fe6c65..fba7ba73 100644 --- a/templates/dashboard/__assign.html.twig +++ b/templates/dashboard/__assign.html.twig @@ -1,8 +1,9 @@ +{% trans_default_domain 'dashboard' %}
    - Meine Zuweisungen + {% trans %}myAssignment{% endtrans %}
    @@ -12,38 +13,38 @@ aria-controls="home" aria-selected="true"> Aufgaben + class="d-none d-xl-block">{% trans %}tasks{% endtrans %} @@ -141,7 +142,7 @@
    - {{ a.team.name }}: {{ a.beschreibung }} + {{ a.vvt.team.name }}: {{ a.beschreibung }}
    {{ a.createdAt|date('d.m.Y') }} @@ -174,10 +175,9 @@ {% endfor %}
    - Alle Zuweisungen - anzeigen + {% trans %}showAllAssignments{% endtrans %}
    - \ No newline at end of file + diff --git a/templates/dashboard/__card.html.twig b/templates/dashboard/__card.html.twig index 073d0cc5..eaa5f8aa 100644 --- a/templates/dashboard/__card.html.twig +++ b/templates/dashboard/__card.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'dashboard' %}
    diff --git a/templates/dashboard/__cards.html.twig b/templates/dashboard/__cards.html.twig index e65f3ebb..68658899 100644 --- a/templates/dashboard/__cards.html.twig +++ b/templates/dashboard/__cards.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'dashboard' %}
    diff --git a/templates/dashboard/__critical.html.twig b/templates/dashboard/__critical.html.twig index 43a6b123..89e762d3 100644 --- a/templates/dashboard/__critical.html.twig +++ b/templates/dashboard/__critical.html.twig @@ -1,14 +1,15 @@ +{% trans_default_domain 'dashboard' %}
    - Kritische Vorgänge + {% trans %}criticalProcesses{% endtrans %}
    -
    Auditfragen
    +
    {% trans %}auditQuestions{% endtrans %}
      {% for a in kAudit %}
    • @@ -19,7 +20,7 @@
    -
    VVTs
    +
    {% trans %}vvts{% endtrans %}
      {% for v in kVvt %}
    • @@ -30,13 +31,13 @@
    -
    Offene DSFA
    +
    {% trans %}openDsfa{% endtrans %}
    diff --git a/templates/dashboard/__lastEdit.html.twig b/templates/dashboard/__lastEdit.html.twig index e9a3e63e..9b19f568 100644 --- a/templates/dashboard/__lastEdit.html.twig +++ b/templates/dashboard/__lastEdit.html.twig @@ -1,14 +1,15 @@ +{% trans_default_domain 'dashboard' %}
    - Letzte Änderungen + {% trans %}lastChanges{% endtrans %}
    -
    Auditfragen
    +
    {% trans %}auditQuestions{% endtrans %}

      {% for a in audit|slice(0, 5) %} @@ -19,7 +20,7 @@
    -
    Verarbeitungen
    +
    {% trans %}processing{% endtrans %}

      {% for v in vvt|slice(0, 5) %} @@ -29,8 +30,6 @@
    - -
    \ No newline at end of file diff --git a/templates/dashboard/index.html.twig b/templates/dashboard/index.html.twig index 49ce0536..f6a72abf 100644 --- a/templates/dashboard/index.html.twig +++ b/templates/dashboard/index.html.twig @@ -1,12 +1,12 @@ {% extends 'base.html.twig' %} +{% trans_default_domain 'dashboard' %} -{% block title %}{{ team.name }}{% endblock %} +{% block title %}{{ currentTeam.name }}{% endblock %} {% block CTA %} -

    {{ 'Datenschutzcenter der '|trans }}{{ team.name }}

    +

    {% trans %}privacyCenter{% endtrans %} {{ currentTeam.name }}

    {% endblock %} {% block body %} -
    @@ -25,26 +25,24 @@
    -

    {% trans %}Datenflussplan{% endtrans %}

    +

    {% trans %}flowChart{% endtrans %}

    @@ -112,7 +110,7 @@ {% endif %} title : - '{% if n.approved %}Freigegeben von {{ n.approvedBy.username }}
    {% endif %}Status: {{ n.status.name }}
    {{ n.name }}', + '{% if n.approved %}{% trans %}approvedBy{% endtrans%} {{ n.approvedBy.username }}
    {% endif %}{% trans from 'general' %}state{% endtrans %}: {{ n.status.name }}
    {{ n.name }}', label : '{% if n.approved %}✔ {% endif %}{{ n.name|slice(0,28) }}', @@ -143,10 +141,10 @@ {% endfor %} title : - '{% if s.licenseExpiration < date() and s.licenseExpiration is not null %}LIZENZ ABGELAUFEN
    {% endif %}{% if s.approved %}Freigegeben von {{ s.approvedBy.username }}
    {% endif %}{% if s.licenseExpiration %}Lizenz: {{ s.licenseExpiration|date('d.m.Y') }}
    {% endif %}{{ s.name }}', + '{% if s.licenseExpiration < date() and s.licenseExpiration is not null %}{% trans %}licenseExpired{% endtrans %}
    {% endif %}{% if s.approved %}{% trans %}approvedBy{% endtrans %} {{ s.approvedBy.username }}
    {% endif %}{% if s.licenseExpiration %}{% trans %}license{% endtrans %}: {{ s.licenseExpiration|date('d.m.Y') }}
    {% endif %}{{ s.name }}', label : - '{% if s.licenseExpiration < date() and s.licenseExpiration is not null %}ABGELAUFEN \n{% endif %}{% if s.approved %}✔ {% endif %}Software \n{{ s.name|slice(0,28) }}', + '{% if s.licenseExpiration < date() and s.licenseExpiration is not null %}{% trans %}expired{% endtrans %} \n{% endif %}{% if s.approved %}✔ {% endif %}{% trans %}software{% endtrans %} \n{{ s.name|slice(0,28) }}', color : '#2E9AFE', @@ -186,7 +184,7 @@ {% endfor %} label : - '{% if n.approved %}✔ {% endif %}DW \n{{ n.gegenstand }}', + '{% if n.approved %}✔ {% endif %}{% trans %}dw{% endtrans %} \n{{ n.gegenstand }}', color : '#6f42c1', @@ -226,7 +224,7 @@ {% endfor %} label : - '{% if n.approved %}✔ {% endif %}AV \n{{ n.gegenstand }}', + '{% if n.approved %}✔ {% endif %}{% trans %}av{% endtrans %} \n{{ n.gegenstand }}', color : '#7e57c2', @@ -256,7 +254,7 @@ {% endfor %} label : - '{% if n.approved %}✔ {% endif %}TOM \n{{ n.titel }}', + '{% if n.approved %}✔ {% endif %}{% trans %}tom{% endtrans %} \n{{ n.titel }}', color : '#0e4377', @@ -282,7 +280,7 @@ id: 'pol{{ n.id }}', label : - '{% if n.approved %}✔ {% endif %}Richtlinie \n{{ n.title }}', + '{% if n.approved %}✔ {% endif %}{% trans %}guideline{% endtrans %} \n{{ n.title }}', color : '#4b515d', @@ -315,7 +313,7 @@ id: 'kon{{ n.id }}', label : - '{% if n.approved %}✔ {% endif %}KONTAKT \n{{ n.firma }}', + '{% if n.approved %}✔ {% endif %}{% trans %}contact{% endtrans %} \n{{ n.firma }}', color : '#6a1b9a', @@ -406,7 +404,7 @@ return true; } switch (nodeFilterValue) { - {% for a in app.user.team.abteilungen | filter(a => a.activ) %} + {% for a in currentTeam.abteilungen | filter(a => a.activ) %} case "ab{{ a.id }}": return node.ab{{ a.id }} === "{{ a.id }}"; {% endfor %} diff --git a/templates/dashboard/noteam.html.twig b/templates/dashboard/noteam.html.twig index ff1bafc9..a56651d2 100644 --- a/templates/dashboard/noteam.html.twig +++ b/templates/dashboard/noteam.html.twig @@ -1,17 +1,16 @@ {% extends 'client_request/base.html.twig' %} - +{% trans_default_domain 'dashboard' %} {% block content %}
    -

    {{ 'Kein Team vorhanden'|trans }}

    +

    {% trans %}noTeam{% endtrans %}

    -

    {% trans %}Für Ihren Benutzer ist kein Team vorhanden. -
    Fragen Sie Ihrem Administrator oder beim Support der H2 invent nach.{% endtrans %}

    - Support anfragen - Logout +

    {% trans %}noTeamHelp{% endtrans %}

    + {% trans %}supportRequest{% endtrans %} + {% trans %}logout{% endtrans %}
    diff --git a/templates/datenweitergabe/__form.html.twig b/templates/datenweitergabe/__form.html.twig index 6a721aa7..92bfe637 100644 --- a/templates/datenweitergabe/__form.html.twig +++ b/templates/datenweitergabe/__form.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'datenweitergabe' %} {{ form_start(form) }}
    {% if activNummer %} @@ -87,7 +88,7 @@
    {% if daten.art != 1 %} -

    Einer Auftragsverarbeitung kann keine Software zugewiesen werden.

    +

    requestProcessing.noSoftware

    {% else %} {% endif %} @@ -114,7 +115,7 @@
    - {% trans %}Der Vertrag zur Auftragsverarbeitung nach Art. 28 Abs. 3 DSGVO berücksichtigt folgende Punkte{% endtrans %} + {% trans %}requestProcessing.disclaimer{% endtrans %}
    {{ form_widget(form.checkItems) }} @@ -141,8 +142,7 @@ {{ form_widget(form.uploadFile) }} {% if daten.upload %} - AVV - herunterladen + {% trans %}avvDownload{% endtrans %} {% endif %}
    @@ -154,4 +154,4 @@ {% else %} {{ form_widget(form.save) }} {% endif %} -{{ form_end(form) }} \ No newline at end of file +{{ form_end(form) }} diff --git a/templates/datenweitergabe/__history.html.twig b/templates/datenweitergabe/__history.html.twig index 55b5c5cc..2d424980 100644 --- a/templates/datenweitergabe/__history.html.twig +++ b/templates/datenweitergabe/__history.html.twig @@ -1,6 +1,7 @@ +{% trans_default_domain 'datenweitergabe' %} {{ p.createdAt|date('d.m.Y H:i') }} -- {{ p.nummer }} -- {{ p.stand.name }} -- {{ p.gegenstand }} - -- {{ p.user.email }} {{ p.approved?'(Diese Version war freigegeben)' }} + -- {{ p.user.email }} {{ p.approved? 'versionApproved' | trans }} {% if p.previous %} {{ include('datenweitergabe/__history.html.twig', {'p':p.previous}) }} -{% endif %} \ No newline at end of file +{% endif %} diff --git a/templates/datenweitergabe/__indexTabel.html.twig b/templates/datenweitergabe/__indexTable.html.twig similarity index 57% rename from templates/datenweitergabe/__indexTabel.html.twig rename to templates/datenweitergabe/__indexTable.html.twig index 24d0da0f..61a3c066 100644 --- a/templates/datenweitergabe/__indexTabel.html.twig +++ b/templates/datenweitergabe/__indexTable.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'datenweitergabe' %}

    {{ titel }}

    @@ -5,12 +6,12 @@
    - - - - - - + + + + + + @@ -22,10 +23,10 @@ - + {% endfor %}
    UIDBetreffDatumEmailNameGrundStatus{% trans from 'general' %}uuid{% endtrans %}{% trans from 'general' %}regard{% endtrans %}{% trans from 'general' %}date{% endtrans %}{% trans from 'general' %}email{% endtrans %}{% trans from 'general' %}name{% endtrans %}{% trans from 'general' %}reason{% endtrans %}{% trans from 'general' %}state{% endtrans %}
    #AktenzeichenGegenstandVerantwortlichKontaktZeichnungsdatumFreigegeben{% trans from 'general' %}fileNumber{% endtrans %}{% trans from 'general' %}object{% endtrans %}{% trans from 'general' %}responsible{% endtrans %}{% trans from 'general' %}contact{% endtrans %}{% trans from 'general' %}subscriptionDate{% endtrans %}{% trans from 'general' %}approved{% endtrans %}
    {{ t.verantwortlich }} {{ t.kontakt.firma }} (id:{{ t.kontakt.id }}) {{ t.zeichnungsdatum|date('Y.m.d') }}{{ t.approved?'Ja':'Nein' }}{{ t.approved?'yes':'no' | trans( [], 'general') }}
    -
    \ No newline at end of file +
    diff --git a/templates/datenweitergabe/edit.html.twig b/templates/datenweitergabe/edit.html.twig index 3c343af9..f2622073 100644 --- a/templates/datenweitergabe/edit.html.twig +++ b/templates/datenweitergabe/edit.html.twig @@ -1,12 +1,12 @@ {% extends 'base.html.twig' %} - +{% trans_default_domain 'datenweitergabe' %} {% block CTA %} {% if daten.activ %} - PDF erstellen + {% trans from 'general' %}pdf.create{% endtrans %} - PDF mit Historie erstellen + {% trans from 'general' %}pdf.createWithHistory{% endtrans %} {{ include('base/__approveBtn.html.twig',{'data':daten,'dataLink':'datenweitergabe_approve'}) }} {{ include('base/__disableBtn.html.twig',{'data':daten,'dataLink':'datenweitergabe_disable'}) }} @@ -27,10 +27,10 @@
    {{ include('datenweitergabe/__form.html.twig') }}
    -

    Erstellt von: {{ daten.user.email }}

    +

    {% trans from 'general' %}createdAt{% endtrans %}: {{ daten.user.email }}

    {% if daten.previous %}
    -

    Historie

    +

    {% trans from 'general' %}history{% endtrans %}

    {{ include('datenweitergabe/__history.html.twig', {'p':daten.previous}) }}
    {% endif %} diff --git a/templates/datenweitergabe/index.html.twig b/templates/datenweitergabe/index.html.twig index 91d0447e..91d241ce 100644 --- a/templates/datenweitergabe/index.html.twig +++ b/templates/datenweitergabe/index.html.twig @@ -1,17 +1,17 @@ {% extends 'base.html.twig' %} - +{% trans_default_domain 'datenweitergabe' %} {% block CTA %} - Datenweitergabe anlegen + {% trans %}dataTransfer.create{% endtrans %} {% endblock %} {% block body %} - {{ include('datenweitergabe/__indexTabel.html.twig') }} + {{ include('datenweitergabe/__indexTable.html.twig') }} diff --git a/templates/datenweitergabe/new.html.twig b/templates/datenweitergabe/new.html.twig index 8f60b4df..7545976f 100644 --- a/templates/datenweitergabe/new.html.twig +++ b/templates/datenweitergabe/new.html.twig @@ -1,5 +1,5 @@ {% extends 'base.html.twig' %} - +{% trans_default_domain 'datenweitergabe' %} {% block CTA %} {% endblock %} @@ -9,10 +9,10 @@
    {{ include('datenweitergabe/__form.html.twig') }}
    -

    Erstellt von: {{ daten.user.email }}

    +

    {% trans from 'general' %}createdAt{% endtrans %}: {{ daten.user.email }}

    {% if daten.previous %}
    -

    Historie

    +

    {% trans from 'general' %}history{% endtrans %}

    {{ include('datenweitergabe/__history.html.twig', {'p':daten.previous}) }}
    {% endif %} diff --git a/templates/dsb/index.html.twig b/templates/dsb/index.html.twig index f8cf5f42..d74494a5 100644 --- a/templates/dsb/index.html.twig +++ b/templates/dsb/index.html.twig @@ -1,12 +1,8 @@ {% extends 'base.html.twig' %} - -{% block CTA %} - -{% endblock %} - +{% trans_default_domain 'dsb' %} {% block body %}
    -

    DSB Teams

    +

    {% trans %}dsbTeams{% endtrans %}

    {% for t in teams %} @@ -16,14 +12,14 @@
    {% if app.user.team == t %}Aktuelles Team{% endif %} + class="badge-success z-depth-1 pl-1 pr-1">{% trans %}currentTeam{% endtrans %}{% endif %}

    {% endfor %}
    -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/email/addUser/resetting.html.twig b/templates/email/addUser/resetting.html.twig index 0f32ba63..7765dff9 100644 --- a/templates/email/addUser/resetting.html.twig +++ b/templates/email/addUser/resetting.html.twig @@ -1,22 +1,14 @@ -{% block subject %}Passwort zurücksetzen{% endblock %} +{% trans_default_domain 'email' %} +{% block subject %}{% trans %}subject.passwordReset{% endtrans %}{% endblock %} {% block body_text %} {% autoescape false %} - Passwort neu setzen - -

    - Hallo! -

    - - Sie wurden gerade von einem Administrator zu einem Datenschutz Team auf Ihrem Datenschutz Center hinzugefügt. - - Um ihr Passwort nun festzulegen klicken Sie den nachfolgenden Link. + {% trans %}body.passwordReset{% endtrans %} {{ link }} - Mit freundlichen Grüßen - Ihr Datenschutz Center + {% trans %}salutation{% endtrans %} {% endautoescape %} {% endblock %} @@ -28,4 +20,4 @@ the template inheritance in it #} {% include 'email/addUser/resetting_html.html.twig' %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/email/addUser/resetting_html.html.twig b/templates/email/addUser/resetting_html.html.twig index 9ee3d354..b03270e0 100644 --- a/templates/email/addUser/resetting_html.html.twig +++ b/templates/email/addUser/resetting_html.html.twig @@ -1,20 +1,12 @@ {% extends 'email/base.html.twig' %} +{% trans_default_domain 'email' %} {% block header %} - Open-Datenschutz Center + {% trans %}subject.passwordResetHtml{% endtrans %} {% endblock %} {% block content %} -

    - -- Einladung zum Datenschutz Center Team -- -

    - - Hallo! - -

    - Sie wurden gerade von einem Administrator zu einem Datenschutz Team auf Ihrem Datenschutz Center hinzugefügt. -

    + {% trans %}body.passwordResetHtml{% endtrans %}

    - Mit freundlichen Grüßen
    - Ihr Datenschutz Center -{% endblock %} \ No newline at end of file + {% trans %}salutation.kindRegards{% endtrans %} +{% endblock %} diff --git a/templates/email/assignementDsfa.html.twig b/templates/email/assignementDsfa.html.twig index da042f89..57d0563d 100644 --- a/templates/email/assignementDsfa.html.twig +++ b/templates/email/assignementDsfa.html.twig @@ -26,7 +26,7 @@

    - Sie erhalten diese E-Mail, weil Sie Mitglied des Datenschutzcenterteams {{ data.team.name }} sind. + Sie erhalten diese E-Mail, weil Sie Mitglied des Datenschutzcenterteams {{ data.vvt.team.name }} sind.

    diff --git a/templates/email/base.html.twig b/templates/email/base.html.twig index 8effc9f9..e45ef8d7 100644 --- a/templates/email/base.html.twig +++ b/templates/email/base.html.twig @@ -1,3 +1,4 @@ +{% trans_default_domain 'email' %} {% apply inky_to_html|inline_css(source('@css/foundation-emails.css')) %}