From 3751003188747e6400f4cca812fad3c0ed02d395 Mon Sep 17 00:00:00 2001 From: Tchama Date: Fri, 16 Apr 2021 09:37:45 +0200 Subject: [PATCH] install symfony demo with installer --- .gitignore | 2 +- app/.editorconfig | 10 + app/.env | 34 + app/.env.test | 6 + app/.github/workflows/ci.yaml | 80 + app/.github/workflows/lint.yaml | 88 + app/.gitignore | 24 + app/.php_cs.dist | 42 + app/CONTRIBUTING.md | 7 + app/README.md | 60 + app/assets/js/admin.js | 64 + app/assets/js/app.js | 15 + app/assets/js/doclinks.js | 58 + app/assets/js/highlight.js | 8 + app/assets/js/jquery.instantSearch.js | 106 + app/assets/js/login.js | 11 + app/assets/js/search.js | 9 + app/assets/scss/admin.scss | 26 + app/assets/scss/app.scss | 360 + app/assets/scss/bootstrap-tagsinput.scss | 194 + app/bin/console | 43 + app/bin/phpunit | 13 + app/composer.json | 92 + app/composer.lock | 8273 +++++++++++++++++ app/config/bundles.php | 19 + app/config/packages/assets.yaml | 3 + app/config/packages/cache.yaml | 19 + app/config/packages/dev/debug.yaml | 4 + app/config/packages/dev/mailer.yaml | 4 + app/config/packages/dev/monolog.yaml | 19 + app/config/packages/dev/web_profiler.yaml | 6 + app/config/packages/doctrine.yaml | 18 + app/config/packages/doctrine_migrations.yaml | 5 + app/config/packages/framework.yaml | 27 + app/config/packages/html_sanitizer.yaml | 17 + app/config/packages/mailer.yaml | 3 + app/config/packages/prod/deprecations.yaml | 8 + app/config/packages/prod/doctrine.yaml | 20 + app/config/packages/prod/monolog.yaml | 16 + app/config/packages/prod/routing.yaml | 3 + app/config/packages/prod/webpack_encore.yaml | 4 + app/config/packages/routing.yaml | 7 + app/config/packages/security.yaml | 63 + .../packages/sensio_framework_extra.yaml | 3 + .../test/dama_doctrine_test_bundle.yaml | 4 + app/config/packages/test/framework.yaml | 4 + app/config/packages/test/mailer.yaml | 4 + app/config/packages/test/monolog.yaml | 12 + app/config/packages/test/security.yaml | 6 + app/config/packages/test/twig.yaml | 2 + app/config/packages/test/validator.yaml | 3 + app/config/packages/test/web_profiler.yaml | 6 + app/config/packages/test/webpack_encore.yaml | 2 + app/config/packages/translation.yaml | 6 + app/config/packages/twig.yaml | 5 + app/config/packages/validator.yaml | 9 + app/config/packages/webpack_encore.yaml | 25 + app/config/preload.php | 5 + app/config/routes.yaml | 12 + app/config/routes/annotations.yaml | 8 + app/config/routes/dev/framework.yaml | 3 + app/config/routes/dev/web_profiler.yaml | 7 + app/config/services.yaml | 41 + app/migrations/.gitignore | 0 app/package.json | 27 + app/phpunit.xml.dist | 39 + app/public/.htaccess | 66 + app/public/apple-touch-icon.png | Bin 0 -> 10784 bytes app/public/favicon.ico | Bin 0 -> 1150 bytes app/public/index.php | 30 + app/public/robots.txt | 4 + app/src/Command/AddUserCommand.php | 263 + app/src/Command/DeleteUserCommand.php | 132 + app/src/Command/ListUsersCommand.php | 146 + app/src/Controller/Admin/BlogController.php | 177 + app/src/Controller/BlogController.php | 170 + app/src/Controller/SecurityController.php | 69 + app/src/Controller/UserController.php | 79 + app/src/DataFixtures/AppFixtures.php | 241 + app/src/Entity/Comment.php | 138 + app/src/Entity/Post.php | 226 + app/src/Entity/Tag.php | 75 + app/src/Entity/User.php | 188 + app/src/Event/CommentCreatedEvent.php | 30 + .../CheckRequirementsSubscriber.php | 101 + .../CommentNotificationSubscriber.php | 79 + .../EventSubscriber/ControllerSubscriber.php | 51 + .../RedirectToPreferredLocaleSubscriber.php | 86 + app/src/Form/CommentType.php | 59 + .../TagArrayToStringTransformer.php | 79 + app/src/Form/PostType.php | 100 + app/src/Form/Type/ChangePasswordType.php | 62 + app/src/Form/Type/DateTimePickerType.php | 68 + app/src/Form/Type/TagsInputType.php | 70 + app/src/Form/UserType.php | 65 + app/src/Kernel.php | 47 + app/src/Pagination/Paginator.php | 117 + app/src/Repository/PostRepository.php | 97 + app/src/Repository/TagRepository.php | 33 + app/src/Repository/UserRepository.php | 34 + app/src/Security/PostVoter.php | 63 + app/src/Twig/AppExtension.php | 65 + app/src/Twig/SourceCodeExtension.php | 137 + app/src/Utils/MomentFormatConverter.php | 48 + app/src/Utils/Validator.php | 72 + app/symfony.lock | 572 ++ .../admin/blog/_delete_form.html.twig | 8 + app/templates/admin/blog/_form.html.twig | 26 + app/templates/admin/blog/edit.html.twig | 29 + app/templates/admin/blog/index.html.twig | 55 + app/templates/admin/blog/new.html.twig | 29 + app/templates/admin/blog/show.html.twig | 36 + app/templates/admin/layout.html.twig | 31 + app/templates/base.html.twig | 162 + app/templates/blog/_comment_form.html.twig | 40 + .../blog/_delete_post_confirmation.html.twig | 19 + app/templates/blog/_post_tags.html.twig | 12 + app/templates/blog/_rss.html.twig | 5 + app/templates/blog/about.html.twig | 15 + .../blog/comment_form_error.html.twig | 11 + app/templates/blog/index.html.twig | 59 + app/templates/blog/index.xml.twig | 25 + app/templates/blog/post_show.html.twig | 77 + app/templates/blog/search.html.twig | 32 + .../TwigBundle/Exception/error.html.twig | 30 + .../TwigBundle/Exception/error403.html.twig | 30 + .../TwigBundle/Exception/error404.html.twig | 30 + .../TwigBundle/Exception/error500.html.twig | 35 + app/templates/debug/source_code.html.twig | 35 + .../default/_flash_messages.html.twig | 32 + app/templates/default/homepage.html.twig | 44 + app/templates/form/fields.html.twig | 26 + app/templates/form/layout.html.twig | 16 + app/templates/security/login.html.twig | 94 + app/templates/user/change_password.html.twig | 29 + app/templates/user/edit.html.twig | 27 + app/tests/Command/AddUserCommandTest.php | 124 + .../Controller/Admin/BlogControllerTest.php | 194 + app/tests/Controller/BlogControllerTest.php | 98 + .../Controller/DefaultControllerTest.php | 95 + app/tests/Controller/UserControllerTest.php | 99 + .../TagArrayToStringTransformerTest.php | 128 + app/tests/Utils/ValidatorTest.php | 102 + app/tests/bootstrap.php | 20 + app/translations/messages+intl-icu.ar.xlf | 447 + app/translations/messages+intl-icu.bg.xlf | 368 + app/translations/messages+intl-icu.ca.xlf | 265 + app/translations/messages+intl-icu.cs.xlf | 262 + app/translations/messages+intl-icu.de.xlf | 370 + app/translations/messages+intl-icu.en.xlf | 447 + app/translations/messages+intl-icu.es.xlf | 375 + app/translations/messages+intl-icu.fr.xlf | 443 + app/translations/messages+intl-icu.hr.xlf | 348 + app/translations/messages+intl-icu.id.xlf | 254 + app/translations/messages+intl-icu.it.xlf | 377 + app/translations/messages+intl-icu.ja.xlf | 295 + app/translations/messages+intl-icu.lt.xlf | 443 + app/translations/messages+intl-icu.nl.xlf | 377 + app/translations/messages+intl-icu.pl.xlf | 293 + app/translations/messages+intl-icu.pt_BR.xlf | 448 + app/translations/messages+intl-icu.ro.xlf | 290 + app/translations/messages+intl-icu.ru.xlf | 447 + app/translations/messages+intl-icu.sk.xlf | 443 + app/translations/messages+intl-icu.sl.xlf | 368 + app/translations/messages+intl-icu.tr.xlf | 368 + app/translations/messages+intl-icu.uk.xlf | 447 + app/translations/messages+intl-icu.zh_CN.xlf | 443 + app/translations/validators+intl-icu.ar.xlf | 43 + app/translations/validators+intl-icu.bg.xlf | 39 + app/translations/validators+intl-icu.ca.xlf | 35 + app/translations/validators+intl-icu.cs.xlf | 31 + app/translations/validators+intl-icu.de.xlf | 39 + app/translations/validators+intl-icu.en.xlf | 43 + app/translations/validators+intl-icu.es.xlf | 43 + app/translations/validators+intl-icu.fr.xlf | 35 + app/translations/validators+intl-icu.hr.xlf | 39 + app/translations/validators+intl-icu.id.xlf | 35 + app/translations/validators+intl-icu.it.xlf | 35 + app/translations/validators+intl-icu.ja.xlf | 35 + app/translations/validators+intl-icu.lt.xlf | 39 + app/translations/validators+intl-icu.nl.xlf | 35 + app/translations/validators+intl-icu.pl.xlf | 35 + .../validators+intl-icu.pt_BR.xlf | 39 + app/translations/validators+intl-icu.ro.xlf | 35 + app/translations/validators+intl-icu.ru.xlf | 43 + app/translations/validators+intl-icu.sl.xlf | 39 + app/translations/validators+intl-icu.tr.xlf | 39 + app/translations/validators+intl-icu.uk.xlf | 43 + .../validators+intl-icu.zh_CN.xlf | 39 + app/webpack.config.js | 36 + app/yarn.lock | 7253 +++++++++++++++ 191 files changed, 32965 insertions(+), 1 deletion(-) create mode 100644 app/.editorconfig create mode 100644 app/.env create mode 100644 app/.env.test create mode 100644 app/.github/workflows/ci.yaml create mode 100644 app/.github/workflows/lint.yaml create mode 100644 app/.gitignore create mode 100644 app/.php_cs.dist create mode 100644 app/CONTRIBUTING.md create mode 100644 app/README.md create mode 100644 app/assets/js/admin.js create mode 100644 app/assets/js/app.js create mode 100644 app/assets/js/doclinks.js create mode 100644 app/assets/js/highlight.js create mode 100644 app/assets/js/jquery.instantSearch.js create mode 100644 app/assets/js/login.js create mode 100644 app/assets/js/search.js create mode 100644 app/assets/scss/admin.scss create mode 100644 app/assets/scss/app.scss create mode 100644 app/assets/scss/bootstrap-tagsinput.scss create mode 100755 app/bin/console create mode 100755 app/bin/phpunit create mode 100644 app/composer.json create mode 100644 app/composer.lock create mode 100644 app/config/bundles.php create mode 100644 app/config/packages/assets.yaml create mode 100644 app/config/packages/cache.yaml create mode 100644 app/config/packages/dev/debug.yaml create mode 100644 app/config/packages/dev/mailer.yaml create mode 100644 app/config/packages/dev/monolog.yaml create mode 100644 app/config/packages/dev/web_profiler.yaml create mode 100644 app/config/packages/doctrine.yaml create mode 100644 app/config/packages/doctrine_migrations.yaml create mode 100644 app/config/packages/framework.yaml create mode 100644 app/config/packages/html_sanitizer.yaml create mode 100644 app/config/packages/mailer.yaml create mode 100644 app/config/packages/prod/deprecations.yaml create mode 100644 app/config/packages/prod/doctrine.yaml create mode 100644 app/config/packages/prod/monolog.yaml create mode 100644 app/config/packages/prod/routing.yaml create mode 100644 app/config/packages/prod/webpack_encore.yaml create mode 100644 app/config/packages/routing.yaml create mode 100644 app/config/packages/security.yaml create mode 100644 app/config/packages/sensio_framework_extra.yaml create mode 100644 app/config/packages/test/dama_doctrine_test_bundle.yaml create mode 100644 app/config/packages/test/framework.yaml create mode 100644 app/config/packages/test/mailer.yaml create mode 100644 app/config/packages/test/monolog.yaml create mode 100644 app/config/packages/test/security.yaml create mode 100644 app/config/packages/test/twig.yaml create mode 100644 app/config/packages/test/validator.yaml create mode 100644 app/config/packages/test/web_profiler.yaml create mode 100644 app/config/packages/test/webpack_encore.yaml create mode 100644 app/config/packages/translation.yaml create mode 100644 app/config/packages/twig.yaml create mode 100644 app/config/packages/validator.yaml create mode 100644 app/config/packages/webpack_encore.yaml create mode 100644 app/config/preload.php create mode 100644 app/config/routes.yaml create mode 100644 app/config/routes/annotations.yaml create mode 100644 app/config/routes/dev/framework.yaml create mode 100644 app/config/routes/dev/web_profiler.yaml create mode 100644 app/config/services.yaml create mode 100644 app/migrations/.gitignore create mode 100644 app/package.json create mode 100644 app/phpunit.xml.dist create mode 100644 app/public/.htaccess create mode 100644 app/public/apple-touch-icon.png create mode 100644 app/public/favicon.ico create mode 100644 app/public/index.php create mode 100644 app/public/robots.txt create mode 100644 app/src/Command/AddUserCommand.php create mode 100644 app/src/Command/DeleteUserCommand.php create mode 100644 app/src/Command/ListUsersCommand.php create mode 100644 app/src/Controller/Admin/BlogController.php create mode 100644 app/src/Controller/BlogController.php create mode 100644 app/src/Controller/SecurityController.php create mode 100644 app/src/Controller/UserController.php create mode 100644 app/src/DataFixtures/AppFixtures.php create mode 100644 app/src/Entity/Comment.php create mode 100644 app/src/Entity/Post.php create mode 100644 app/src/Entity/Tag.php create mode 100644 app/src/Entity/User.php create mode 100644 app/src/Event/CommentCreatedEvent.php create mode 100644 app/src/EventSubscriber/CheckRequirementsSubscriber.php create mode 100644 app/src/EventSubscriber/CommentNotificationSubscriber.php create mode 100644 app/src/EventSubscriber/ControllerSubscriber.php create mode 100644 app/src/EventSubscriber/RedirectToPreferredLocaleSubscriber.php create mode 100644 app/src/Form/CommentType.php create mode 100644 app/src/Form/DataTransformer/TagArrayToStringTransformer.php create mode 100644 app/src/Form/PostType.php create mode 100644 app/src/Form/Type/ChangePasswordType.php create mode 100644 app/src/Form/Type/DateTimePickerType.php create mode 100644 app/src/Form/Type/TagsInputType.php create mode 100644 app/src/Form/UserType.php create mode 100644 app/src/Kernel.php create mode 100644 app/src/Pagination/Paginator.php create mode 100644 app/src/Repository/PostRepository.php create mode 100644 app/src/Repository/TagRepository.php create mode 100644 app/src/Repository/UserRepository.php create mode 100644 app/src/Security/PostVoter.php create mode 100644 app/src/Twig/AppExtension.php create mode 100644 app/src/Twig/SourceCodeExtension.php create mode 100644 app/src/Utils/MomentFormatConverter.php create mode 100644 app/src/Utils/Validator.php create mode 100644 app/symfony.lock create mode 100644 app/templates/admin/blog/_delete_form.html.twig create mode 100644 app/templates/admin/blog/_form.html.twig create mode 100644 app/templates/admin/blog/edit.html.twig create mode 100644 app/templates/admin/blog/index.html.twig create mode 100644 app/templates/admin/blog/new.html.twig create mode 100644 app/templates/admin/blog/show.html.twig create mode 100644 app/templates/admin/layout.html.twig create mode 100644 app/templates/base.html.twig create mode 100644 app/templates/blog/_comment_form.html.twig create mode 100644 app/templates/blog/_delete_post_confirmation.html.twig create mode 100644 app/templates/blog/_post_tags.html.twig create mode 100644 app/templates/blog/_rss.html.twig create mode 100644 app/templates/blog/about.html.twig create mode 100644 app/templates/blog/comment_form_error.html.twig create mode 100644 app/templates/blog/index.html.twig create mode 100644 app/templates/blog/index.xml.twig create mode 100644 app/templates/blog/post_show.html.twig create mode 100644 app/templates/blog/search.html.twig create mode 100644 app/templates/bundles/TwigBundle/Exception/error.html.twig create mode 100644 app/templates/bundles/TwigBundle/Exception/error403.html.twig create mode 100644 app/templates/bundles/TwigBundle/Exception/error404.html.twig create mode 100644 app/templates/bundles/TwigBundle/Exception/error500.html.twig create mode 100644 app/templates/debug/source_code.html.twig create mode 100644 app/templates/default/_flash_messages.html.twig create mode 100644 app/templates/default/homepage.html.twig create mode 100644 app/templates/form/fields.html.twig create mode 100644 app/templates/form/layout.html.twig create mode 100644 app/templates/security/login.html.twig create mode 100644 app/templates/user/change_password.html.twig create mode 100644 app/templates/user/edit.html.twig create mode 100644 app/tests/Command/AddUserCommandTest.php create mode 100644 app/tests/Controller/Admin/BlogControllerTest.php create mode 100644 app/tests/Controller/BlogControllerTest.php create mode 100644 app/tests/Controller/DefaultControllerTest.php create mode 100644 app/tests/Controller/UserControllerTest.php create mode 100644 app/tests/Form/DataTransformer/TagArrayToStringTransformerTest.php create mode 100644 app/tests/Utils/ValidatorTest.php create mode 100644 app/tests/bootstrap.php create mode 100644 app/translations/messages+intl-icu.ar.xlf create mode 100644 app/translations/messages+intl-icu.bg.xlf create mode 100644 app/translations/messages+intl-icu.ca.xlf create mode 100644 app/translations/messages+intl-icu.cs.xlf create mode 100644 app/translations/messages+intl-icu.de.xlf create mode 100644 app/translations/messages+intl-icu.en.xlf create mode 100644 app/translations/messages+intl-icu.es.xlf create mode 100644 app/translations/messages+intl-icu.fr.xlf create mode 100644 app/translations/messages+intl-icu.hr.xlf create mode 100644 app/translations/messages+intl-icu.id.xlf create mode 100644 app/translations/messages+intl-icu.it.xlf create mode 100644 app/translations/messages+intl-icu.ja.xlf create mode 100644 app/translations/messages+intl-icu.lt.xlf create mode 100644 app/translations/messages+intl-icu.nl.xlf create mode 100644 app/translations/messages+intl-icu.pl.xlf create mode 100644 app/translations/messages+intl-icu.pt_BR.xlf create mode 100644 app/translations/messages+intl-icu.ro.xlf create mode 100644 app/translations/messages+intl-icu.ru.xlf create mode 100644 app/translations/messages+intl-icu.sk.xlf create mode 100644 app/translations/messages+intl-icu.sl.xlf create mode 100644 app/translations/messages+intl-icu.tr.xlf create mode 100644 app/translations/messages+intl-icu.uk.xlf create mode 100644 app/translations/messages+intl-icu.zh_CN.xlf create mode 100644 app/translations/validators+intl-icu.ar.xlf create mode 100644 app/translations/validators+intl-icu.bg.xlf create mode 100644 app/translations/validators+intl-icu.ca.xlf create mode 100644 app/translations/validators+intl-icu.cs.xlf create mode 100644 app/translations/validators+intl-icu.de.xlf create mode 100644 app/translations/validators+intl-icu.en.xlf create mode 100644 app/translations/validators+intl-icu.es.xlf create mode 100644 app/translations/validators+intl-icu.fr.xlf create mode 100644 app/translations/validators+intl-icu.hr.xlf create mode 100644 app/translations/validators+intl-icu.id.xlf create mode 100644 app/translations/validators+intl-icu.it.xlf create mode 100644 app/translations/validators+intl-icu.ja.xlf create mode 100644 app/translations/validators+intl-icu.lt.xlf create mode 100644 app/translations/validators+intl-icu.nl.xlf create mode 100644 app/translations/validators+intl-icu.pl.xlf create mode 100644 app/translations/validators+intl-icu.pt_BR.xlf create mode 100644 app/translations/validators+intl-icu.ro.xlf create mode 100644 app/translations/validators+intl-icu.ru.xlf create mode 100644 app/translations/validators+intl-icu.sl.xlf create mode 100644 app/translations/validators+intl-icu.tr.xlf create mode 100644 app/translations/validators+intl-icu.uk.xlf create mode 100644 app/translations/validators+intl-icu.zh_CN.xlf create mode 100644 app/webpack.config.js create mode 100644 app/yarn.lock diff --git a/.gitignore b/.gitignore index ec33bba..e2e9730 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Comment to include Symfony project -app/* +#app/* !app/.keep # Ignore Database datas diff --git a/app/.editorconfig b/app/.editorconfig new file mode 100644 index 0000000..153cf3e --- /dev/null +++ b/app/.editorconfig @@ -0,0 +1,10 @@ +; top-most EditorConfig file +root = true + +; Unix-style newlines +[*] +end_of_line = LF + +[*.php] +indent_style = space +indent_size = 4 diff --git a/app/.env b/app/.env new file mode 100644 index 0000000..9274fe8 --- /dev/null +++ b/app/.env @@ -0,0 +1,34 @@ +# In all environments, the following files are loaded if they exist, +# the latter taking precedence over the former: +# +# * .env contains default values for the environment variables needed by the app +# * .env.local uncommitted file with local overrides +# * .env.$APP_ENV committed environment-specific defaults +# * .env.$APP_ENV.local uncommitted environment-specific overrides +# +# Real environment variables win over .env files. +# +# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES. +# +# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). +# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration + +###> symfony/framework-bundle ### +APP_ENV=dev +APP_SECRET=2ca64f8d83b9e89f5f19d672841d6bb8 +#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 +#TRUSTED_HOSTS='^(localhost|example\.com)$' +###< symfony/framework-bundle ### + +###> doctrine/doctrine-bundle ### +# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url +# For a MySQL database, use: "mysql://db_user:db_password@127.0.0.1:3306/db_name" +# For a PostgreSQL database, use: "postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=11&charset=utf8" +# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml +#DATABASE_URL=sqlite:///%kernel.project_dir%/data/database.sqlite +DATABASE_URL="postgresql://postgres:secret@db:5432/postgres?serverVersion=12&charset=utf8" +###< doctrine/doctrine-bundle ### + +###> symfony/mailer ### +# MAILER_DSN=smtp://localhost +###< symfony/mailer ### diff --git a/app/.env.test b/app/.env.test new file mode 100644 index 0000000..dbbb279 --- /dev/null +++ b/app/.env.test @@ -0,0 +1,6 @@ +# define your env variables for the test env here +KERNEL_CLASS='App\Kernel' +APP_SECRET='$ecretf0rt3st' +SYMFONY_DEPRECATIONS_HELPER=999999 +PANTHER_APP_ENV=panther +DATABASE_URL=sqlite:///%kernel.project_dir%/data/database_test.sqlite diff --git a/app/.github/workflows/ci.yaml b/app/.github/workflows/ci.yaml new file mode 100644 index 0000000..6a93847 --- /dev/null +++ b/app/.github/workflows/ci.yaml @@ -0,0 +1,80 @@ +name: "CI" + +on: + pull_request: + push: + branches: + - 'master' + +env: + fail-fast: true + PHPUNIT_FLAGS: "-v" + SYMFONY_PHPUNIT_DIR: "$HOME/symfony-bridge/.phpunit" + SYMFONY_REQUIRE: ">=4.4" + # 40x: Since symfony/monolog-bridge 5.2: + # Passing an actionLevel (int|string) as constructor's 3rd argument of + # "Symfony\Bridge\Monolog\Handler\FingersCrossed\HttpCodeActivationStrategy" + # is deprecated, "Monolog\Handler\FingersCrossed\ActivationStrategyInterface" expected. + SYMFONY_DEPRECATIONS_HELPER: 40 + +jobs: + test: + name: "${{ matrix.operating-system }} / PHP ${{ matrix.php-version }}" + runs-on: ${{ matrix.operating-system }} + continue-on-error: false + + strategy: + matrix: + operating-system: ['ubuntu-latest', 'windows-latest', 'macos-latest'] + php-version: ['7.2.9', '7.3', '7.4', '8.0'] + + steps: + - name: "Checkout code" + uses: actions/checkout@v2.3.3 + + - name: "Install PHP with extensions" + uses: shivammathur/setup-php@2.7.0 + with: + coverage: "none" + extensions: "intl, mbstring, pdo_sqlite" + php-version: ${{ matrix.php-version }} + tools: composer:v2 + + - name: "Add PHPUnit matcher" + run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" + + - name: "Set composer cache directory" + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache composer" + uses: actions/cache@v2.1.2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-${{ matrix.php-version }}-composer-${{ hashFiles('composer.json') }} + restore-keys: ${{ runner.os }}-${{ matrix.php-version }}-composer- + + - name: "Require symfony/flex" + run: composer global require --no-progress --no-scripts --no-plugins symfony/flex dev-main + + - if: matrix.php-version != '8.0' + run: composer update + + - if: matrix.php-version == '8.0' + run: composer update --ignore-platform-req=php + + - if: matrix.php-version != '8.0' + name: "Install PHPUnit" + run: vendor/bin/simple-phpunit install + + - if: matrix.php-version == '8.0' + name: "Install PHPUnit for PHP 8" + run: | + echo 'SYMFONY_PHPUNIT_VERSION=9.4' >> $GITHUB_ENV + vendor/bin/simple-phpunit install + + - name: "PHPUnit version" + run: vendor/bin/simple-phpunit --version + + - name: "Run tests" + run: vendor/bin/simple-phpunit ${{ env.PHPUNIT_FLAGS }} diff --git a/app/.github/workflows/lint.yaml b/app/.github/workflows/lint.yaml new file mode 100644 index 0000000..2a22540 --- /dev/null +++ b/app/.github/workflows/lint.yaml @@ -0,0 +1,88 @@ +name: "Lint" + +on: [push, pull_request] + +env: + fail-fast: true + +jobs: + php-cs-fixer: + name: PHP-CS-Fixer + runs-on: ubuntu-latest + steps: + - name: "Checkout code" + uses: actions/checkout@v2 + + - name: PHP-CS-Fixer + uses: docker://oskarstark/php-cs-fixer-ga + with: + args: --diff --dry-run + + linters: + name: Linters + runs-on: ubuntu-latest + strategy: + matrix: + php-version: ['7.4'] + + steps: + - name: "Checkout code" + uses: actions/checkout@v2.3.3 + + - name: "Install PHP with extensions" + uses: shivammathur/setup-php@2.7.0 + with: + coverage: "none" + extensions: intl + php-version: ${{ matrix.php-version }} + tools: composer:v2 + + - name: "Set composer cache directory" + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache composer" + uses: actions/cache@v2.1.2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-${{ matrix.php-version }}-composer-${{ hashFiles('composer.json') }} + restore-keys: ${{ runner.os }}-${{ matrix.php-version }}-composer- + + - name: "Require symfony/flex" + run: composer global require --no-progress --no-scripts --no-plugins symfony/flex dev-main + + - name: "Composer update" + id: install + run: composer update --no-scripts + + - name: Lint YAML files + if: always() && steps.install.outcome == 'success' + run: ./bin/console lint:yaml config --parse-tags + + - name: Lint Twig templates + if: always() && steps.install.outcome == 'success' + run: ./bin/console lint:twig templates --env=prod + + - name: Lint XLIFF translations + if: always() && steps.install.outcome == 'success' + run: ./bin/console lint:xliff translations + + - name: Lint Parameters and Services + if: always() && steps.install.outcome == 'success' + run: ./bin/console lint:container + + - name: Lint Doctrine entities + if: always() && steps.install.outcome == 'success' + run: ./bin/console doctrine:schema:validate --skip-sync -vvv --no-interaction + + - name: Lint Composer config + if: always() && steps.install.outcome == 'success' + run: composer validate --strict + + - name: Download Symfony CLI + if: always() && steps.install.outcome == 'success' + run: wget https://get.symfony.com/cli/installer -O - | bash + + - name: Check if any dependencies are compromised + if: always() && steps.install.outcome == 'success' + run: /home/runner/.symfony/bin/symfony check:security diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..4715576 --- /dev/null +++ b/app/.gitignore @@ -0,0 +1,24 @@ +/public/build/fonts/glyphicons-* +/public/build/images/glyphicons-* + +###> symfony/framework-bundle ### +/.env.local +/.env.local.php +/.env.*.local +/config/secrets/prod/prod.decrypt.private.php +/public/bundles/ +/var/ +/vendor/ +###< symfony/framework-bundle ### + +###> symfony/phpunit-bridge ### +.phpunit +.phpunit.result.cache +/phpunit.xml +###< symfony/phpunit-bridge ### +###> symfony/webpack-encore-bundle ### +/node_modules/ +/public/build/ +npm-debug.log +yarn-error.log +###< symfony/webpack-encore-bundle ### diff --git a/app/.php_cs.dist b/app/.php_cs.dist new file mode 100644 index 0000000..966772e --- /dev/null +++ b/app/.php_cs.dist @@ -0,0 +1,42 @@ + + +For the full copyright and license information, please view the LICENSE +file that was distributed with this source code. +COMMENT; + +$finder = PhpCsFixer\Finder::create() + ->in(__DIR__) + ->exclude('config') + ->exclude('var') + ->exclude('public/bundles') + ->exclude('public/build') + // exclude files generated by Symfony Flex recipes + ->notPath('bin/console') + ->notPath('public/index.php') +; + +return (new PhpCsFixer\Config()) + ->setRiskyAllowed(true) + ->setRules([ + '@Symfony' => true, + '@Symfony:risky' => true, + 'header_comment' => ['header' => $fileHeaderComment, 'separate' => 'both'], + 'linebreak_after_opening_tag' => true, + 'mb_str_functions' => true, + 'no_php4_constructor' => true, + 'no_unreachable_default_argument_value' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'php_unit_strict' => true, + 'phpdoc_order' => true, + 'strict_comparison' => true, + 'strict_param' => true, + ]) + ->setFinder($finder) + ->setCacheFile(__DIR__.'/var/.php_cs.cache') +; diff --git a/app/CONTRIBUTING.md b/app/CONTRIBUTING.md new file mode 100644 index 0000000..906c46f --- /dev/null +++ b/app/CONTRIBUTING.md @@ -0,0 +1,7 @@ +Contributing +============ + +The Symfony Demo application is an open source project. Contributions made by +the community are welcome. Send us your ideas, code reviews, pull requests and +feature requests to help us improve this project. All contributions must follow +the [usual Symfony contribution requirements](https://symfony.com/doc/current/contributing/index.html). diff --git a/app/README.md b/app/README.md new file mode 100644 index 0000000..1855743 --- /dev/null +++ b/app/README.md @@ -0,0 +1,60 @@ +Symfony Demo Application +======================== + +The "Symfony Demo Application" is a reference application created to show how +to develop applications following the [Symfony Best Practices][1]. + +Requirements +------------ + + * PHP 7.2.9 or higher; + * PDO-SQLite PHP extension enabled; + * and the [usual Symfony application requirements][2]. + +Installation +------------ + +[Download Symfony][4] to install the `symfony` binary on your computer and run +this command: + +```bash +$ symfony new --demo my_project +``` + +Alternatively, you can use Composer: + +```bash +$ composer create-project symfony/symfony-demo my_project +``` + +Usage +----- + +There's no need to configure anything to run the application. If you have +[installed Symfony][4] binary, run this command: + +```bash +$ cd my_project/ +$ symfony serve +``` + +Then access the application in your browser at the given URL ( by default). + +If you don't have the Symfony binary installed, run `php -S localhost:8000 -t public/` +to use the built-in PHP web server or [configure a web server][3] like Nginx or +Apache to run the application. + +Tests +----- + +Execute this command to run tests: + +```bash +$ cd my_project/ +$ ./bin/phpunit +``` + +[1]: https://symfony.com/doc/current/best_practices.html +[2]: https://symfony.com/doc/current/reference/requirements.html +[3]: https://symfony.com/doc/current/cookbook/configuration/web_server_configuration.html +[4]: https://symfony.com/download diff --git a/app/assets/js/admin.js b/app/assets/js/admin.js new file mode 100644 index 0000000..f0a74a8 --- /dev/null +++ b/app/assets/js/admin.js @@ -0,0 +1,64 @@ +import '../scss/admin.scss'; +import 'eonasdan-bootstrap-datetimepicker'; +import 'typeahead.js'; +import Bloodhound from "bloodhound-js"; +import 'bootstrap-tagsinput'; + +$(function() { + // Datetime picker initialization. + // See https://eonasdan.github.io/bootstrap-datetimepicker/ + $('[data-toggle="datetimepicker"]').datetimepicker({ + icons: { + time: 'fa fa-clock-o', + date: 'fa fa-calendar', + up: 'fa fa-chevron-up', + down: 'fa fa-chevron-down', + previous: 'fa fa-chevron-left', + next: 'fa fa-chevron-right', + today: 'fa fa-check-circle-o', + clear: 'fa fa-trash', + close: 'fa fa-remove' + } + }); + + // Bootstrap-tagsinput initialization + // https://bootstrap-tagsinput.github.io/bootstrap-tagsinput/examples/ + var $input = $('input[data-toggle="tagsinput"]'); + if ($input.length) { + var source = new Bloodhound({ + local: $input.data('tags'), + queryTokenizer: Bloodhound.tokenizers.whitespace, + datumTokenizer: Bloodhound.tokenizers.whitespace + }); + source.initialize(); + + $input.tagsinput({ + trimValue: true, + focusClass: 'focus', + typeaheadjs: { + name: 'tags', + source: source.ttAdapter() + } + }); + } +}); + +// Handling the modal confirmation message. +$(document).on('submit', 'form[data-confirmation]', function (event) { + var $form = $(this), + $confirm = $('#confirmationModal'); + + if ($confirm.data('result') !== 'yes') { + //cancel submit event + event.preventDefault(); + + $confirm + .off('click', '#btnYes') + .on('click', '#btnYes', function () { + $confirm.data('result', 'yes'); + $form.find('input[type="submit"]').attr('disabled', 'disabled'); + $form.submit(); + }) + .modal('show'); + } +}); diff --git a/app/assets/js/app.js b/app/assets/js/app.js new file mode 100644 index 0000000..f116c3b --- /dev/null +++ b/app/assets/js/app.js @@ -0,0 +1,15 @@ +import '../scss/app.scss'; + +// loads the Bootstrap jQuery plugins +import 'bootstrap-sass/assets/javascripts/bootstrap/transition.js'; +import 'bootstrap-sass/assets/javascripts/bootstrap/alert.js'; +import 'bootstrap-sass/assets/javascripts/bootstrap/collapse.js'; +import 'bootstrap-sass/assets/javascripts/bootstrap/dropdown.js'; +import 'bootstrap-sass/assets/javascripts/bootstrap/modal.js'; +import 'jquery' + +// loads the code syntax highlighting library +import './highlight.js'; + +// Creates links to the Symfony documentation +import './doclinks.js'; diff --git a/app/assets/js/doclinks.js b/app/assets/js/doclinks.js new file mode 100644 index 0000000..2d5073f --- /dev/null +++ b/app/assets/js/doclinks.js @@ -0,0 +1,58 @@ +'use strict'; + +// Wraps some elements in anchor tags referencing to the Symfony documentation +$(function() { + var $modal = $('#sourceCodeModal'); + var $controllerCode = $modal.find('code.php'); + var $templateCode = $modal.find('code.twig'); + + function anchor(url, content) { + return '' + content + ''; + }; + + // Wraps links to the Symfony documentation + $modal.find('.hljs-comment').each(function() { + $(this).html($(this).html().replace(/https:\/\/symfony.com\/doc\/[\w/.#-]+/g, function(url) { + return anchor(url, url); + })); + }); + + // Wraps Symfony's annotations + var annotations = { + '@Cache': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/cache.html', + '@IsGranted': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html#isgranted', + '@ParamConverter': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html', + '@Route': 'https://symfony.com/doc/current/routing.html#creating-routes-as-annotations', + '@Security': 'https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html#security' + }; + + $controllerCode.find('.hljs-doctag').each(function() { + var annotation = $(this).text(); + + if (annotations[annotation]) { + $(this).html(anchor(annotations[annotation], annotation)); + } + }); + + // Wraps Twig's tags + $templateCode.find('.hljs-template-tag > .hljs-name').each(function() { + var tag = $(this).text(); + + if ('else' === tag || tag.match(/^end/)) { + return; + } + + var url = 'https://twig.symfony.com/doc/3.x/tags/' + tag + '.html#' + tag; + + $(this).html(anchor(url, tag)); + }); + + // Wraps Twig's functions + $templateCode.find('.hljs-template-variable > .hljs-name').each(function() { + var func = $(this).text(); + + var url = 'https://twig.symfony.com/doc/3.x/functions/' + func + '.html#' + func; + + $(this).html(anchor(url, func)); + }); +}); diff --git a/app/assets/js/highlight.js b/app/assets/js/highlight.js new file mode 100644 index 0000000..b20bb11 --- /dev/null +++ b/app/assets/js/highlight.js @@ -0,0 +1,8 @@ +import hljs from 'highlight.js/lib/highlight'; +import php from 'highlight.js/lib/languages/php'; +import twig from 'highlight.js/lib/languages/twig'; + +hljs.registerLanguage('php', php); +hljs.registerLanguage('twig', twig); + +hljs.initHighlightingOnLoad(); diff --git a/app/assets/js/jquery.instantSearch.js b/app/assets/js/jquery.instantSearch.js new file mode 100644 index 0000000..531bca9 --- /dev/null +++ b/app/assets/js/jquery.instantSearch.js @@ -0,0 +1,106 @@ +/** + * jQuery plugin for an instant searching. + * + * @author Oleg Voronkovich + * @author Yonel Ceruto + */ +(function ($) { + 'use strict'; + + String.prototype.render = function (parameters) { + return this.replace(/({{ (\w+) }})/g, function (match, pattern, name) { + return parameters[name]; + }) + }; + + // INSTANTS SEARCH PUBLIC CLASS DEFINITION + // ======================================= + + var InstantSearch = function (element, options) { + this.$input = $(element); + this.$form = this.$input.closest('form'); + this.$preview = $('
    ').appendTo(this.$form); + this.options = $.extend({}, InstantSearch.DEFAULTS, this.$input.data(), options); + + this.$input.keyup(this.debounce()); + }; + + InstantSearch.DEFAULTS = { + minQueryLength: 2, + limit: 10, + delay: 500, + noResultsMessage: 'No results found', + itemTemplate: '\ +
    \ +

    {{ title }}

    \ + \ +

    {{ summary }}

    \ +
    ' + }; + + InstantSearch.prototype.debounce = function () { + var delay = this.options.delay; + var search = this.search; + var timer = null; + var self = this; + + return function () { + clearTimeout(timer); + timer = setTimeout(function () { + search.apply(self); + }, delay); + }; + }; + + InstantSearch.prototype.search = function () { + var query = $.trim(this.$input.val()).replace(/\s{2,}/g, ' '); + if (query.length < this.options.minQueryLength) { + this.$preview.empty(); + return; + } + + var self = this; + var data = this.$form.serializeArray(); + data['l'] = this.limit; + + $.getJSON(this.$form.attr('action'), data, function (items) { + self.show(items); + }); + }; + + InstantSearch.prototype.show = function (items) { + var $preview = this.$preview; + var itemTemplate = this.options.itemTemplate; + + if (0 === items.length) { + $preview.html(this.options.noResultsMessage); + } else { + $preview.empty(); + $.each(items, function (index, item) { + $preview.append(itemTemplate.render(item)); + }); + } + }; + + // INSTANTS SEARCH PLUGIN DEFINITION + // ================================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this); + var instance = $this.data('instantSearch'); + var options = typeof option === 'object' && option; + + if (!instance) $this.data('instantSearch', (instance = new InstantSearch(this, options))); + + if (option === 'search') instance.search(); + }) + } + + $.fn.instantSearch = Plugin; + $.fn.instantSearch.Constructor = InstantSearch; + +})(window.jQuery); diff --git a/app/assets/js/login.js b/app/assets/js/login.js new file mode 100644 index 0000000..931a0c1 --- /dev/null +++ b/app/assets/js/login.js @@ -0,0 +1,11 @@ +$(function() { + var usernameEl = $('#username'); + var passwordEl = $('#password'); + + // in a real application, the user/password should never be hardcoded + // but for the demo application it's very convenient to do so + if (!usernameEl.val() || 'jane_admin' === usernameEl.val()) { + usernameEl.val('jane_admin'); + passwordEl.val('kitten'); + } +}); diff --git a/app/assets/js/search.js b/app/assets/js/search.js new file mode 100644 index 0000000..d89acf0 --- /dev/null +++ b/app/assets/js/search.js @@ -0,0 +1,9 @@ +import './jquery.instantSearch.js'; + +$(function() { + $('.search-field') + .instantSearch({ + delay: 100, + }) + .keyup(); +}); diff --git a/app/assets/scss/admin.scss b/app/assets/scss/admin.scss new file mode 100644 index 0000000..c145f45 --- /dev/null +++ b/app/assets/scss/admin.scss @@ -0,0 +1,26 @@ +@import "~bootswatch/flatly/variables"; +@import "~eonasdan-bootstrap-datetimepicker/src/sass/bootstrap-datetimepicker-build.scss"; +@import "bootstrap-tagsinput.scss"; + +/* Page: 'Backend post index' + ------------------------------------------------------------------------- */ +body#admin_post_index .item-actions { + white-space: nowrap +} + +body#admin_post_index .item-actions a.btn + a.btn { + margin-left: 4px +} + +/* Page: 'Backend post show' + ------------------------------------------------------------------------- */ +body#admin_post_show .post-tags .label-default { + background-color: #e9ecec; + color: #6D8283; + font-size: 16px; + margin-right: 10px; + padding: .4em 1em .5em; +} +body#admin_post_show .post-tags .label-default i { + color: #95A6A7; +} diff --git a/app/assets/scss/app.scss b/app/assets/scss/app.scss new file mode 100644 index 0000000..a30457c --- /dev/null +++ b/app/assets/scss/app.scss @@ -0,0 +1,360 @@ +// setting the value of this variable to an empty data URL is the only working solution +// to load the Bootswatch web fonts locally and avoid loading them from Google servers +// see https://github.com/thomaspark/bootswatch/issues/55#issuecomment-298093182 +$web-font-path: 'data:text/css;base64,'; + +// Make sure the bootstrap-sass and lato fonts are resolved correctly +$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/"; +$lato-font-path: '~lato-font/fonts'; + +@import "~bootswatch/flatly/variables"; +@import "~bootstrap-sass/assets/stylesheets/bootstrap"; +@import "~bootswatch/flatly/bootswatch"; +@import "~@fortawesome/fontawesome-free/css/all.css"; +@import "~@fortawesome/fontawesome-free/css/v4-shims.css"; +@import "~highlight.js/styles/solarized-light.css"; + +// pick the Lato fonts individually to avoid importing the entire font family +@import '~lato-font/scss/public-api'; +@include lato-include-font('normal'); +@include lato-include-font('bold'); + +/* Basic styles + ------------------------------------------------------------------------- */ +p, ul, ol { + font-size: 19px; + margin-bottom: 1.5em +} + +li { + margin-bottom: 0.5em +} + +code { + background: #ecf0f1; + color: #2c3e50 +} + +.text-danger, .text-danger:hover { + color: #e74c3c +} + +i { + margin-right: 0.25em +} + +.table.table-middle-aligned th, +.table.table-middle-aligned td { + vertical-align: middle; +} + +.doclink { + color: inherit +} + +/* Utilities + ------------------------------------------------------------------------- */ +.m-b-0 { margin-bottom: 0 } + +/* Page elements + ------------------------------------------------------------------------- */ +body { + display: flex; + flex-direction: column; + min-height: 100vh +} + +header { + margin-bottom: 2em +} + +header ul.nav li { + margin-bottom: 0 +} + +header .locales { + min-width: 190px; +} +header .locales a { + color: #212529; + padding: 3px 15px; +} +header .locales a small { + border-radius: 4px; + border: 2px solid #dee2e6; + color: #7b8a8b; + float: left; + font-size: 12px; + line-height: 1.1; + margin: 2px 10px 0 0; + min-width: 26px; + padding: 0px 3px; + text-align: center; + text-transform: uppercase; +} +header .locales .active small, +header .locales a:hover small { + color: inherit; +} + +.body-container { + flex: 1; + /* needed to prevent pages with a very small height and browsers not supporting flex */ + min-height: 600px +} + +.body-container #main h1, .body-container #main h2 { + margin-top: 0 +} + +#sidebar .section { + margin-bottom: 2em +} + +#sidebar p { + font-size: 15px +} + +#sidebar p + p { + margin: 1.5em 0 0 +} + +footer { + background: #ecf0f1; + margin-top: 2em; + padding-top: 2em; + padding-bottom: 2em +} + +footer p { + color: #7b8a8b; + font-size: 13px; + margin-bottom: 0.25em +} + +footer #footer-resources { + text-align: right +} + +footer #footer-resources i { + color: #7b8a8b; + font-size: 28.5px; + margin-left: 0.5em +} + +#sourceCodeModal h3 { + font-size: 19px; + margin-top: 0 +} + +#sourceCodeModal h3 small { + color: #7b8a8b; + font-size: 80% +} + +#sourceCodeModal pre { + margin-bottom: 2em; + padding: 0 +} + +#confirmationModal .modal-dialog { + width: 500px +} + +#confirmationModal .modal-footer button { + min-width: 75px +} + +/* Misc. elements + ------------------------------------------------------------------------- */ +.section.rss a { + color: #f39c12; + font-size: 21px; +} + +/* Forms + ------------------------------------------------------------------------- */ +.form-group.has-error .form-control { + border-color: #e74c3c +} + +.form-group.has-error .control-label { + color: #e74c3c +} + +.form-group.has-error .help-block { + background-color: #e74c3c; + color: #fff; + font-size: 15px; + padding: 1em +} + +.form-group.has-error .help-block ul, +.form-group.has-error .help-block li { + margin-bottom: 0 +} +.form-group.has-error .help-block li + li { + margin-top: 0.5em; +} + +textarea { + max-width: 100% +} + +/* Page: 'Technical Requirements Checker' + ------------------------------------------------------------------------- */ +body#requirements_checker header h1 { + margin-bottom: 0; + margin-top: 0 +} + +body#requirements_checker header h1 span { + font-size: 120%; + opacity: 0.7; + padding: 0 5px +} + +body#requirements_checker .panel li { + margin-bottom: 1em +} + +/* Page: 'Homepage' + ------------------------------------------------------------------------- */ +body#homepage { + text-align: center +} + +/* Page: 'Login' + ------------------------------------------------------------------------- */ +body#login #login-users-help p { + font-size: 15px; + line-height: 1.42857 +} + +body#login #login-users-help p:last-child { + margin-bottom: 0 +} + +body#login #login-users-help p .label { + margin-right: 5px +} + +body#login #login-users-help p .console { + display: block; + margin: 5px 0; + padding: 10px +} + +/* Common Blog page elements + ------------------------------------------------------------------------- */ +.post-metadata { + color: #b4bcc2; + font-size: 19px; + margin-bottom: 16px; +} +.post-metadata .metadata { + margin-right: 1.5em; +} + +.post-tags .label { + margin-right: 5px; +} + +/* Page: 'Blog index' + ------------------------------------------------------------------------- */ +body#blog_index #main h1, +body#blog_index #main p { + margin-bottom: 0.5em +} + +body#blog_index article.post { + margin-bottom: 3em; +} + +body#blog_index .post-metadata { + font-size: 16px; + margin-bottom: 8px; +} + +body#blog_index .post-tags .label-default { + background-color: #e9ecec; + color: #6d8283; +} +body#blog_index .post-tags .label-default i { + color: #a3b2b2; +} + +/* Page: 'Blog post show' + ------------------------------------------------------------------------- */ +body#blog_post_show #main h3 { + margin-bottom: 0.75em +} + +body#blog_post_show .post-tags .label-default { + background-color: #e9ecec; + color: #6D8283; + font-size: 16px; + margin-right: 10px; + padding: .4em 1em .5em; +} +body#blog_post_show .post-tags .label-default i { + color: #95A6A7; +} + +body#blog_post_show #post-add-comment { + margin: 2em 0 +} + +body#blog_post_show #post-add-comment p { + margin-bottom: 0 +} + +body#blog_post_show #post-add-comment p a.btn { + margin-right: 0.5em +} + +body#blog_post_show .post-comment { + margin-bottom: 2em +} + +body#blog_post_show .post-comment h4 { + font-size: 13px; + line-height: 1.42857; + margin-top: 0 +} + +body#blog_post_show .post-comment h4 strong { + display: block +} + +/* Page: 'Comment form error' + ------------------------------------------------------------------------- */ +body#comment_form_error h1.text-danger { + margin-bottom: 1em +} + +@media (min-width: 768px) and (max-width: 1200px) { + .container { + width: 98%; + } +} + +/* Page: 'Blog search' + ------------------------------------------------------------------------- */ +body#blog_search #main h1, +body#blog_search #main p { + margin-bottom: 0.5em +} + +body#blog_search article.post:first-child { + margin-top: 2em; +} + +body#blog_search article.post { + margin-bottom: 2em; +} + +body#blog_search .post-metadata { + font-size: 16px; + margin-bottom: 8px; +} diff --git a/app/assets/scss/bootstrap-tagsinput.scss b/app/assets/scss/bootstrap-tagsinput.scss new file mode 100644 index 0000000..1af0e95 --- /dev/null +++ b/app/assets/scss/bootstrap-tagsinput.scss @@ -0,0 +1,194 @@ +/* ------------------------------------------------------------------------------ + * + * # Twiter Typeahead + * + * Styles for tagsinput.js - input suggestion engine + * + * ---------------------------------------------------------------------------- */ +.twitter-typeahead { + width: 100%; +} +.typeahead, +.tt-query, +.tt-hint { + outline: 0; +} +.tt-hint { + color: #999; +} +.tt-menu{ + width: 100%; + margin-top: 1px; + min-width: 180px; + padding: 7px 0; + background-color: #fff; + border: 1px solid rgba(0,0,0,0.15); + border-radius: 4px; + max-height: 300px; + overflow-y: auto; + -webkit-box-shadow: 0 6px 12px rgba(0,0,0,0.175); + box-shadow: 0 6px 12px rgba(0,0,0,0.175); + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +.typeahead-scrollable .tt-menu{ + max-height: 250px; +} +.typeahead-rtl .tt-menu{ + text-align: right; +} +.tt-suggestion { + padding: 8px 15px; + cursor: pointer; +} +.tt-suggestion.tt-cursor { + background-color: #f5f5f5; +} +.tt-suggestion p { + margin: 0; +} +.tt-suggestion.tt-selectable:before { + content: '\f02b'; + font-family: 'Font Awesome 5 Free'; + font-weight: 900; + display: inline-block; + font-size: 15px; + margin-right: 0.5em; + color: inherit; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.tt-dataset-group .tt-suggestion { + padding-left: 24px; + padding-right: 24px; +} +.tt-heading { + font-size: 11px; + line-height: 1.82; + padding: 8px 15px; + text-transform: uppercase; + display: block; + font-weight: 700; + margin-top: 2px; + margin-bottom: 2px; +} +.tt-suggestion:hover, +.tt-suggestion:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #18bc9c; +} +/* ------------------------------------------------------------------------------ +* +* # Bootstrap tags input +* +* Styles for tagsinput.js - tags input for Bootstrap +* +* ---------------------------------------------------------------------------- */ +.bootstrap-tagsinput { + display: table-cell; + vertical-align: middle; + width: 100%; + height: 45px; + padding: 0; + font-size: 15px; + line-height: 1.42857143; + color: #2c3e50; + background-color: #ffffff; + background-image: none; + border: 2px solid #dce4ec; + border-radius: 4px; + border-bottom-right-radius: 0; + border-top-right-radius: 0; + -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; +} +.has-error .bootstrap-tagsinput { + border-color: #e74c3c !important; +} +.bootstrap-tagsinput.focus { + border-color: #2c3e50; + outline: 0; + box-shadow: none; +} +.bootstrap-tagsinput input { + border: 0; + outline: 0; + background-color: transparent; + padding: 5px 11px; + margin-top: 2px; + margin-left: 2px; + width: auto !important; + min-width: 100px; + font-size: 15px; + line-height: 1.6666667; + -webkit-box-shadow: none; + box-shadow: none; +} +.bootstrap-tagsinput input:focus { + border: none; + box-shadow: none; +} +.bootstrap-tagsinput .twitter-typeahead { + width: auto; +} +.bootstrap-tagsinput .tt-menu { + margin-top: 5px; + min-width: 200px; +} +.bootstrap-tagsinput .tag { + margin: 1px 0 0 3px; + border: 0; + border-radius: .25em; + padding: 5px 11px; + padding-right: 30px; + float: left; + font-size: 15px; + line-height: 1.6666667; + font-weight: 400; + text-transform: none; + position: relative; + background-color: #18bc9c; + color: #fff; +} +.has-error .bootstrap-tagsinput .tag { + background-color: #e74c3c !important; +} +.bootstrap-tagsinput .tag [data-role="remove"] { + cursor: pointer; + color: inherit; + position: absolute; + top: 50%; + right: 11px; + line-height: 1; + margin-top: -5.5px; + opacity: 0.7; + filter: alpha(opacity=70); +} +.bootstrap-tagsinput .tag [data-role="remove"]:hover { + opacity: 1; + filter: alpha(opacity=100); +} +.bootstrap-tagsinput .tag:before { + content: '\f02b'; + font-family: 'Font Awesome 5 Free'; + font-weight: 900; + display: inline-block; + font-size: 15px; + margin-right: 0.5em; + color: #fff; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.bootstrap-tagsinput .tag [data-role="remove"]:after { + content: '\f00d'; + font-family: 'Font Awesome 5 Free'; + font-weight: 900; + display: block; + font-size: 13px; + color: #fff; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/app/bin/console b/app/bin/console new file mode 100755 index 0000000..8fe9d49 --- /dev/null +++ b/app/bin/console @@ -0,0 +1,43 @@ +#!/usr/bin/env php +getParameterOption(['--env', '-e'], null, true)) { + putenv('APP_ENV='.$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env); +} + +if ($input->hasParameterOption('--no-debug', true)) { + putenv('APP_DEBUG='.$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0'); +} + +(new Dotenv())->bootEnv(dirname(__DIR__).'/.env'); + +if ($_SERVER['APP_DEBUG']) { + umask(0000); + + if (class_exists(Debug::class)) { + Debug::enable(); + } +} + +$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); +$application = new Application($kernel); +$application->run($input); diff --git a/app/bin/phpunit b/app/bin/phpunit new file mode 100755 index 0000000..4d1ed05 --- /dev/null +++ b/app/bin/phpunit @@ -0,0 +1,13 @@ +#!/usr/bin/env php +2.2,<2.4" + }, + "require-dev": { + "alcaeus/mongo-php-adapter": "^1.1", + "doctrine/coding-standard": "^6.0", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^7.0", + "predis/predis": "~1.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/1.10.x" + }, + "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%2Fcache", + "type": "tidelift" + } + ], + "time": "2020-07-07T18:54:01+00:00" + }, + { + "name": "doctrine/collections", + "version": "1.6.7", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/55f8b799269a1a472457bd1a41b4f379d4cfba4a", + "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a", + "shasum": "" + }, + "require": { + "php": "^7.1.3 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan-shim": "^0.9.2", + "phpunit/phpunit": "^7.0", + "vimeo/psalm": "^3.8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/1.6.7" + }, + "time": "2020-07-27T17:53:49+00:00" + }, + { + "name": "doctrine/common", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "9f3e3f3cc5399604c0325d5ffa92609d694d950d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/9f3e3f3cc5399604c0325d5ffa92609d694d950d", + "reference": "9f3e3f3cc5399604c0325d5ffa92609d694d950d", + "shasum": "" + }, + "require": { + "doctrine/persistence": "^2.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0 || ^8.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.0", + "symfony/phpunit-bridge": "^4.0.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", + "homepage": "https://www.doctrine-project.org/projects/common.html", + "keywords": [ + "common", + "doctrine", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/common/issues", + "source": "https://github.com/doctrine/common/tree/3.1.0" + }, + "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%2Fcommon", + "type": "tidelift" + } + ], + "time": "2020-12-03T21:02:31+00:00" + }, + { + "name": "doctrine/dbal", + "version": "2.10.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "47433196b6390d14409a33885ee42b6208160643" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/47433196b6390d14409a33885ee42b6208160643", + "reference": "47433196b6390d14409a33885ee42b6208160643", + "shasum": "" + }, + "require": { + "doctrine/cache": "^1.0", + "doctrine/event-manager": "^1.0", + "ext-pdo": "*", + "php": "^7.2" + }, + "require-dev": { + "doctrine/coding-standard": "^8.1", + "jetbrains/phpstorm-stubs": "^2019.1", + "nikic/php-parser": "^4.4", + "phpstan/phpstan": "^0.12.40", + "phpunit/phpunit": "^8.5.5", + "psalm/plugin-phpunit": "^0.10.0", + "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", + "vimeo/psalm": "^3.14.2" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.10.x-dev", + "dev-develop": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlanywhere", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/2.10.4" + }, + "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%2Fdbal", + "type": "tidelift" + } + ], + "time": "2020-09-12T21:20:41+00:00" + }, + { + "name": "doctrine/doctrine-bundle", + "version": "2.2.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "044d33eeffdb236d5013b6b4af99f87519e10751" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/044d33eeffdb236d5013b6b4af99f87519e10751", + "reference": "044d33eeffdb236d5013b6b4af99f87519e10751", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^2.9.0|^3.0", + "doctrine/persistence": "^1.3.3|^2.0", + "doctrine/sql-formatter": "^1.0.1", + "php": "^7.1 || ^8.0", + "symfony/cache": "^4.3.3|^5.0", + "symfony/config": "^4.3.3|^5.0", + "symfony/console": "^3.4.30|^4.3.3|^5.0", + "symfony/dependency-injection": "^4.3.3|^5.0", + "symfony/doctrine-bridge": "^4.3.7|^5.0", + "symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0", + "symfony/service-contracts": "^1.1.1|^2.0" + }, + "conflict": { + "doctrine/orm": "<2.6", + "twig/twig": "<1.34|>=2.0,<2.4" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "doctrine/orm": "^2.6", + "ocramius/proxy-manager": "^2.1", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.3", + "symfony/phpunit-bridge": "^4.2", + "symfony/property-info": "^4.3.3|^5.0", + "symfony/proxy-manager-bridge": "^3.4|^4.3.3|^5.0", + "symfony/twig-bridge": "^3.4.30|^4.3.3|^5.0", + "symfony/validator": "^3.4.30|^4.3.3|^5.0", + "symfony/web-profiler-bundle": "^3.4.30|^4.3.3|^5.0", + "symfony/yaml": "^3.4.30|^4.3.3|^5.0", + "twig/twig": "^1.34|^2.12|^3.0" + }, + "suggest": { + "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", + "symfony/web-profiler-bundle": "To use the data collector." + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\DoctrineBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org/" + } + ], + "description": "Symfony DoctrineBundle", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineBundle/issues", + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.2.2" + }, + "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%2Fdoctrine-bundle", + "type": "tidelift" + } + ], + "time": "2020-12-05T15:07:10+00:00" + }, + { + "name": "doctrine/doctrine-migrations-bundle", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", + "reference": "b8de89fe811e62f1dea8cf9aafda0ea45ca6f1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/b8de89fe811e62f1dea8cf9aafda0ea45ca6f1f3", + "reference": "b8de89fe811e62f1dea8cf9aafda0ea45ca6f1f3", + "shasum": "" + }, + "require": { + "doctrine/doctrine-bundle": "~1.0|~2.0", + "doctrine/migrations": "~3.0", + "php": "^7.2|^8.0", + "symfony/framework-bundle": "~3.4|~4.0|~5.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "doctrine/orm": "^2.6", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\MigrationsBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineMigrationsBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "dbal", + "migrations", + "schema" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.0.2" + }, + "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%2Fdoctrine-migrations-bundle", + "type": "tidelift" + } + ], + "time": "2020-12-23T15:13:22+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": "<2.9@dev" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/1.1.x" + }, + "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%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2020-05-29T18:28:51+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^7.0", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.x" + }, + "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%2Finflector", + "type": "tidelift" + } + ], + "time": "2020-05-29T15:13:26+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "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" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "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%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T18:47:58+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.1" + }, + "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%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" + }, + { + "name": "doctrine/migrations", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/migrations.git", + "reference": "6195e836ffc2e1bd5ddea468fa46015fbea00b3a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/6195e836ffc2e1bd5ddea468fa46015fbea00b3a", + "reference": "6195e836ffc2e1bd5ddea468fa46015fbea00b3a", + "shasum": "" + }, + "require": { + "composer/package-versions-deprecated": "^1.8", + "doctrine/dbal": "^2.10", + "doctrine/event-manager": "^1.0", + "friendsofphp/proxy-manager-lts": "^1.0", + "php": "^7.2 || ^8.0", + "psr/log": "^1.1.3", + "symfony/console": "^3.4 || ^4.4.16 || ^5.0", + "symfony/stopwatch": "^3.4 || ^4.0 || ^5.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "doctrine/orm": "^2.6", + "doctrine/persistence": "^1.3 || ^2.0", + "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/process": "^3.4 || ^4.0 || ^5.0", + "symfony/yaml": "^3.4 || ^4.0 || ^5.0" + }, + "suggest": { + "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", + "symfony/yaml": "Allows the use of yaml for migration configuration files." + }, + "bin": [ + "bin/doctrine-migrations" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + }, + "composer-normalize": { + "indent-size": 4, + "indent-style": "space" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Migrations\\": "lib/Doctrine/Migrations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Michael Simonson", + "email": "contact@mikesimonson.com" + } + ], + "description": "PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.", + "homepage": "https://www.doctrine-project.org/projects/migrations.html", + "keywords": [ + "database", + "dbal", + "migrations" + ], + "support": { + "issues": "https://github.com/doctrine/migrations/issues", + "source": "https://github.com/doctrine/migrations/tree/3.0.2" + }, + "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%2Fmigrations", + "type": "tidelift" + } + ], + "time": "2020-12-23T14:08:13+00:00" + }, + { + "name": "doctrine/orm", + "version": "2.8.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/orm.git", + "reference": "242cf1a33df1b8bc5e1b86c3ebd01db07851c833" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/orm/zipball/242cf1a33df1b8bc5e1b86c3ebd01db07851c833", + "reference": "242cf1a33df1b8bc5e1b86c3ebd01db07851c833", + "shasum": "" + }, + "require": { + "composer/package-versions-deprecated": "^1.8", + "doctrine/annotations": "^1.11.1", + "doctrine/cache": "^1.9.1", + "doctrine/collections": "^1.5", + "doctrine/common": "^3.0", + "doctrine/dbal": "^2.10.0", + "doctrine/event-manager": "^1.1", + "doctrine/inflector": "^1.4|^2.0", + "doctrine/instantiator": "^1.3", + "doctrine/lexer": "^1.0", + "doctrine/persistence": "^2.0", + "ext-pdo": "*", + "php": "^7.2|^8.0", + "symfony/console": "^3.0|^4.0|^5.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "phpstan/phpstan": "^0.12.18", + "phpunit/phpunit": "^8.5|^9.4", + "symfony/yaml": "^3.4|^4.0|^5.0", + "vimeo/psalm": "4.1.1" + }, + "suggest": { + "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" + }, + "bin": [ + "bin/doctrine" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\ORM\\": "lib/Doctrine/ORM" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Object-Relational-Mapper for PHP", + "homepage": "https://www.doctrine-project.org/projects/orm.html", + "keywords": [ + "database", + "orm" + ], + "support": { + "issues": "https://github.com/doctrine/orm/issues", + "source": "https://github.com/doctrine/orm/tree/2.8.1" + }, + "time": "2020-12-04T19:53:07+00:00" + }, + { + "name": "doctrine/persistence", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "9899c16934053880876b920a3b8b02ed2337ac1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/9899c16934053880876b920a3b8b02ed2337ac1d", + "reference": "9899c16934053880876b920a3b8b02ed2337ac1d", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "doctrine/cache": "^1.0", + "doctrine/collections": "^1.0", + "doctrine/event-manager": "^1.0", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": "<2.10@dev" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "doctrine/coding-standard": "^6.0 || ^8.0", + "doctrine/common": "^3.0", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5.20 || ^8.0 || ^9.0", + "vimeo/psalm": "^3.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common", + "Doctrine\\Persistence\\": "lib/Doctrine/Persistence" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "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", + "keywords": [ + "mapper", + "object", + "odm", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/2.1.0" + }, + "time": "2020-10-24T22:13:54+00:00" + }, + { + "name": "doctrine/sql-formatter", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/sql-formatter.git", + "reference": "56070bebac6e77230ed7d306ad13528e60732871" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/56070bebac6e77230ed7d306ad13528e60732871", + "reference": "56070bebac6e77230ed7d306ad13528e60732871", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4" + }, + "bin": [ + "bin/sql-formatter" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\SqlFormatter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "http://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/doctrine/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "support": { + "issues": "https://github.com/doctrine/sql-formatter/issues", + "source": "https://github.com/doctrine/sql-formatter/tree/1.1.x" + }, + "time": "2020-07-30T16:57:33+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.25", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2020-12-29T14:50:06+00:00" + }, + { + "name": "erusev/parsedown", + "version": "1.7.4", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "type": "library", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ], + "support": { + "issues": "https://github.com/erusev/parsedown/issues", + "source": "https://github.com/erusev/parsedown/tree/1.7.x" + }, + "time": "2019-12-30T22:54:17+00:00" + }, + { + "name": "friendsofphp/proxy-manager-lts", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", + "reference": "4a66e4e0d3279d3bb3722963b4294331fabe15bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/4a66e4e0d3279d3bb3722963b4294331fabe15bc", + "reference": "4a66e4e0d3279d3bb3722963b4294331fabe15bc", + "shasum": "" + }, + "require": { + "laminas/laminas-code": "~3.4.1|^4.0", + "php": ">=7.1", + "symfony/filesystem": "^4.4.17|^5.0" + }, + "conflict": { + "laminas/laminas-stdlib": "<3.2.1", + "zendframework/zend-stdlib": "<3.2.1" + }, + "replace": { + "ocramius/proxy-manager": "^2.1" + }, + "require-dev": { + "ext-phar": "*", + "symfony/phpunit-bridge": "^5.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "ocramius/proxy-manager", + "url": "https://github.com/Ocramius/ProxyManager" + } + }, + "autoload": { + "psr-4": { + "ProxyManager\\": "src/ProxyManager" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.io/" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + } + ], + "description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager", + "homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts", + "keywords": [ + "aop", + "lazy loading", + "proxy", + "proxy pattern", + "service proxies" + ], + "support": { + "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues", + "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.2" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", + "type": "tidelift" + } + ], + "time": "2021-01-04T11:21:26+00:00" + }, + { + "name": "laminas/laminas-code", + "version": "3.4.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-code.git", + "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/1cb8f203389ab1482bf89c0e70a04849bacd7766", + "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766", + "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" + }, + "require-dev": { + "doctrine/annotations": "^1.7", + "ext-phar": "*", + "laminas/laminas-coding-standard": "^1.0", + "laminas/laminas-stdlib": "^2.7 || ^3.0", + "phpunit/phpunit": "^7.5.16 || ^8.4" + }, + "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/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", + "homepage": "https://laminas.dev", + "keywords": [ + "code", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-code/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-code/issues", + "rss": "https://github.com/laminas/laminas-code/releases.atom", + "source": "https://github.com/laminas/laminas-code" + }, + "time": "2019-12-31T16:28:24+00:00" + }, + { + "name": "laminas/laminas-eventmanager", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-eventmanager.git", + "reference": "ce4dc0bdf3b14b7f9815775af9dfee80a63b4748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/ce4dc0bdf3b14b7f9815775af9dfee80a63b4748", + "reference": "ce4dc0bdf3b14b7f9815775af9dfee80a63b4748", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-eventmanager": "self.version" + }, + "require-dev": { + "athletic/athletic": "^0.1", + "container-interop/container-interop": "^1.1.0", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-stdlib": "^2.7.3 || ^3.0", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "suggest": { + "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", + "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev", + "dev-develop": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Laminas\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://laminas.dev", + "keywords": [ + "event", + "eventmanager", + "events", + "laminas" + ], + "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" + }, + "time": "2019-12-31T16:44:52+00:00" + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", + "squizlabs/php_codesniffer": "^3.5" + }, + "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": "2020-09-14T14:23:00+00:00" + }, + { + "name": "league/uri-parser", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-parser.git", + "reference": "671548427e4c932352d9b9279fdfa345bf63fa00" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-parser/zipball/671548427e4c932352d9b9279fdfa345bf63fa00", + "reference": "671548427e4c932352d9b9279fdfa345bf63fa00", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "phpstan/phpstan": "^0.9.2", + "phpstan/phpstan-phpunit": "^0.9.4", + "phpstan/phpstan-strict-rules": "^0.9.0", + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-intl": "Allow parsing RFC3987 compliant hosts", + "league/uri-schemes": "Allow validating and normalizing URI parsing results" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "src" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "userland URI parser RFC 3986 compliant", + "homepage": "https://github.com/thephpleague/uri-parser", + "keywords": [ + "parse_url", + "parser", + "rfc3986", + "rfc3987", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/thephpleague/uri-parser/issues", + "source": "https://github.com/thephpleague/uri-parser/tree/master" + }, + "time": "2018-11-22T07:55:51+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.7.4", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "9227822783c75406cfe400984b2f095cdf03d417" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/9227822783c75406cfe400984b2f095cdf03d417", + "reference": "9227822783c75406cfe400984b2f095cdf03d417", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "ext-libxml": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "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.4" + }, + "time": "2020-10-01T13:52:52+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7", + "graylog2/gelf-php": "^1.4.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpspec/prophecy": "^1.6.1", + "phpstan/phpstan": "^0.12.59", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90 <7.0.1", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "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" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.2.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2020-12-14T13:15:25+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "sensio/framework-extra-bundle", + "version": "v5.6.1", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", + "reference": "430d14c01836b77c28092883d195a43ce413ee32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/430d14c01836b77c28092883d195a43ce413ee32", + "reference": "430d14c01836b77c28092883d195a43ce413ee32", + "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" + }, + "conflict": { + "doctrine/doctrine-cache-bundle": "<1.3.1", + "doctrine/persistence": "<1.3" + }, + "require-dev": { + "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/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", + "twig/twig": "^1.34|^2.4|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "5.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Sensio\\Bundle\\FrameworkExtraBundle\\": "src/" + }, + "exclude-from-classmap": [ + "/tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "This bundle provides a way to configure your controllers with annotations", + "keywords": [ + "annotations", + "controllers" + ], + "support": { + "issues": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/issues", + "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v5.6.1" + }, + "time": "2020-08-25T19:10:18+00:00" + }, + { + "name": "symfony/apache-pack", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/apache-pack.git", + "reference": "3aa5818d73ad2551281fc58a75afd9ca82622e6c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/apache-pack/zipball/3aa5818d73ad2551281fc58a75afd9ca82622e6c", + "reference": "3aa5818d73ad2551281fc58a75afd9ca82622e6c", + "shasum": "" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for Apache support in Symfony", + "support": { + "issues": "https://github.com/symfony/apache-pack/issues", + "source": "https://github.com/symfony/apache-pack/tree/master" + }, + "time": "2017-12-12T01:46:35+00:00" + }, + { + "name": "symfony/asset", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "d254631bc20fb82a5827602dc2fa84a3118ec3f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/d254631bc20fb82a5827602dc2fa84a3118ec3f5", + "reference": "d254631bc20fb82a5827602dc2fa84a3118ec3f5", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "require-dev": { + "symfony/http-client": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0" + }, + "suggest": { + "symfony/http-foundation": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Asset\\": "" + }, + "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": "Symfony Asset Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/asset/tree/v5.2.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": "2020-12-14T07:03:02+00:00" + }, + { + "name": "symfony/cache", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "5e61d63b1ef4fb4852994038267ad45e12f3ec52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/5e61d63b1ef4fb4852994038267ad45e12f3ec52", + "reference": "5e61d63b1ef4fb4852994038267ad45e12f3ec52", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "~1.0", + "psr/log": "^1.1", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "conflict": { + "doctrine/dbal": "<2.10", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" + }, + "provide": { + "psr/cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0", + "symfony/cache-implementation": "1.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6", + "doctrine/dbal": "^2.10|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/filesystem": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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 Cache component with PSR-6, PSR-16, and tags", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.2.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": "2020-12-10T19:16:15+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/8034ca0b61d4dd967f3698aaa1da2507b631d0cb", + "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "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": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v2.2.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": "2020-09-07T11:33:47+00:00" + }, + { + "name": "symfony/config", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "d0a82d965296083fe463d655a3644cbe49cbaa80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/d0a82d965296083fe463d655a3644cbe49cbaa80", + "reference": "d0a82d965296083fe463d655a3644cbe49cbaa80", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/filesystem": "^4.4|^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/finder": "<4.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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": "Symfony Config Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v5.2.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": "2020-12-09T18:54:12+00:00" + }, + { + "name": "symfony/console", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "47c02526c532fb381374dab26df05e7313978976" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/47c02526c532fb381374dab26df05e7313978976", + "reference": "47c02526c532fb381374dab26df05e7313978976", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" + }, + "conflict": { + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "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": "Symfony Console Component", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.2.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": "2020-12-18T08:03:05+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "7f8a9e9eff0581a33e20f6c5d41096fe22832d25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/7f8a9e9eff0581a33e20f6c5d41096fe22832d25", + "reference": "7f8a9e9eff0581a33e20f6c5d41096fe22832d25", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.0", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1.6|^2" + }, + "conflict": { + "symfony/config": "<5.1", + "symfony/finder": "<4.4", + "symfony/proxy-manager-bridge": "<4.4", + "symfony/yaml": "<4.4" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0" + }, + "require-dev": { + "symfony/config": "^5.1", + "symfony/expression-language": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.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", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "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": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v5.2.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": "2020-12-18T08:03:05+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.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": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/master" + }, + "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": "2020-09-07T11:33:47+00:00" + }, + { + "name": "symfony/doctrine-bridge", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "11c8761e32a94100d67e32500599c5f83ddcaeae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/11c8761e32a94100d67e32500599c5f83ddcaeae", + "reference": "11c8761e32a94100d67e32500599c5f83ddcaeae", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "~1.0", + "doctrine/persistence": "^2", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "doctrine/dbal": "<2.10", + "phpunit/phpunit": "<5.4.3", + "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", + "symfony/validator": "<5.2" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.8", + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.6", + "doctrine/collections": "~1.0", + "doctrine/data-fixtures": "^1.1", + "doctrine/dbal": "^2.10|^3.0", + "doctrine/orm": "^2.7.3", + "symfony/cache": "^5.1", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/doctrine-messenger": "^5.1", + "symfony/expression-language": "^4.4|^5.0", + "symfony/form": "^5.1.3", + "symfony/http-kernel": "^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.0", + "symfony/property-info": "^5.0", + "symfony/proxy-manager-bridge": "^4.4|^5.0", + "symfony/security-core": "^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/uid": "^5.1", + "symfony/validator": "^5.2", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "doctrine/data-fixtures": "", + "doctrine/dbal": "", + "doctrine/orm": "", + "symfony/form": "", + "symfony/property-info": "", + "symfony/validator": "" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "" + }, + "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": "Symfony Doctrine Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-bridge/tree/v5.2.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": "2020-12-16T07:43:23+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "204a9dc6f70a13d9d24ebbf2c5ce51be235f3d7b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/204a9dc6f70a13d9d24ebbf2c5ce51be235f3d7b", + "reference": "204a9dc6f70a13d9d24ebbf2c5ce51be235f3d7b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1" + }, + "require-dev": { + "symfony/process": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Dotenv\\": "" + }, + "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": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "source": "https://github.com/symfony/dotenv/tree/v5.2.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": "2020-12-08T17:02:38+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "59b190ce16ddf32771a22087b60f6dafd3407147" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/59b190ce16ddf32771a22087b60f6dafd3407147", + "reference": "59b190ce16ddf32771a22087b60f6dafd3407147", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/var-dumper": "^4.4|^5.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "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": "Symfony ErrorHandler Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.2.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": "2020-12-09T18:54:12+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "1c93f7a1dff592c252574c79a8635a8a80856042" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1c93f7a1dff592c252574c79a8635a8a80856042", + "reference": "1c93f7a1dff592c252574c79a8635a8a80856042", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "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": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.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": "2020-12-18T08:03:05+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ba7d54483095a198fa51781bc608d17e84dffa2", + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "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": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.2.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": "2020-09-07T11:33:47+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "f9a7c7eb461df6d5d99738346039de71685de6af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/f9a7c7eb461df6d5d99738346039de71685de6af", + "reference": "f9a7c7eb461df6d5d99738346039de71685de6af", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/cache": "^4.4|^5.0", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "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": "Symfony ExpressionLanguage Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/expression-language/tree/v5.2.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": "2020-12-08T17:03:37+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "fa8f8cab6b65e2d99a118e082935344c5ba8c60d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/fa8f8cab6b65e2d99a118e082935344c5ba8c60d", + "reference": "fa8f8cab6b65e2d99a118e082935344c5ba8c60d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.2.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": "2020-11-30T17:05:38+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "0b9231a5922fd7287ba5b411893c0ecd2733e5ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/0b9231a5922fd7287ba5b411893c0ecd2733e5ba", + "reference": "0b9231a5922fd7287ba5b411893c0ecd2733e5ba", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "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": "Symfony Finder Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.2.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": "2020-12-08T17:02:38+00:00" + }, + { + "name": "symfony/flex", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/flex.git", + "reference": "ceb2b4e612bd0b4bb36a4d7fb2e800c861652f48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/flex/zipball/ceb2b4e612bd0b4bb36a4d7fb2e800c861652f48", + "reference": "ceb2b4e612bd0b4bb36a4d7fb2e800c861652f48", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": ">=7.1" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "symfony/dotenv": "^4.4|^5.0", + "symfony/filesystem": "^4.4|^5.0", + "symfony/phpunit-bridge": "^4.4|^5.0", + "symfony/process": "^3.4|^4.4|^5.0" + }, + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-main": "1.9-dev" + }, + "class": "Symfony\\Flex\\Flex" + }, + "autoload": { + "psr-4": { + "Symfony\\Flex\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "description": "Composer plugin for Symfony", + "support": { + "issues": "https://github.com/symfony/flex/issues", + "source": "https://github.com/symfony/flex/tree/v1.11.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": "2020-12-03T10:57:35+00:00" + }, + { + "name": "symfony/form", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/form.git", + "reference": "27b1df421c73a2d219f9f5b203f0ec972f0b1de0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/form/zipball/27b1df421c73a2d219f9f5b203f0ec972f0b1de0", + "reference": "27b1df421c73a2d219f9f5b203f0ec972f0b1de0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/options-resolver": "^5.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/property-access": "^5.0.8", + "symfony/service-contracts": "^1.1|^2" + }, + "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/intl": "<4.4", + "symfony/translation": "<4.4", + "symfony/translation-contracts": "<1.1.7", + "symfony/twig-bridge": "<4.4" + }, + "require-dev": { + "doctrine/collections": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/validator": "^4.4.17|^5.1.9", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "symfony/security-csrf": "For protecting forms against CSRF attacks.", + "symfony/twig-bridge": "For templating with Twig.", + "symfony/validator": "For form validation." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Form\\": "" + }, + "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": "Symfony Form Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/form/tree/v5.2.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": "2020-12-18T08:03:05+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "0663407ca5ad12e2e3fe657b32266904b3dc1e3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/0663407ca5ad12e2e3fe657b32266904b3dc1e3f", + "reference": "0663407ca5ad12e2e3fe657b32266904b3dc1e3f", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=7.2.5", + "symfony/cache": "^5.2", + "symfony/config": "^5.0", + "symfony/dependency-injection": "^5.2", + "symfony/deprecation-contracts": "^2.1", + "symfony/error-handler": "^4.4.1|^5.0.1", + "symfony/event-dispatcher": "^5.1", + "symfony/filesystem": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-foundation": "^5.2.1", + "symfony/http-kernel": "^5.2.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/routing": "^5.2" + }, + "conflict": { + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.0", + "phpdocumentor/type-resolver": "<0.2.1", + "phpunit/phpunit": "<5.4.3", + "symfony/asset": "<5.1", + "symfony/browser-kit": "<4.4", + "symfony/console": "<5.2", + "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": "<4.4", + "symfony/mime": "<4.4", + "symfony/property-access": "<5.2", + "symfony/property-info": "<4.4", + "symfony/serializer": "<5.2", + "symfony/stopwatch": "<4.4", + "symfony/translation": "<5.0", + "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.7", + "doctrine/cache": "~1.0", + "paragonie/sodium_compat": "^1.8", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^5.1", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/console": "^5.2", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/dotenv": "^5.1", + "symfony/expression-language": "^4.4|^5.0", + "symfony/form": "^5.2", + "symfony/http-client": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/mailer": "^5.2", + "symfony/messenger": "^5.2", + "symfony/mime": "^4.4|^5.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^4.4|^5.0", + "symfony/property-info": "^4.4|^5.0", + "symfony/security-bundle": "^5.1", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/security-http": "^4.4|^5.0", + "symfony/serializer": "^5.2", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/string": "^5.0", + "symfony/translation": "^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/validator": "^5.2", + "symfony/web-link": "^4.4|^5.0", + "symfony/workflow": "^5.2", + "symfony/yaml": "^4.4|^5.0", + "twig/twig": "^2.10|^3.0" + }, + "suggest": { + "ext-apcu": "For best performance of the system caches", + "symfony/console": "For using the console commands", + "symfony/form": "For using forms", + "symfony/property-info": "For using the property_info service", + "symfony/serializer": "For using the serializer service", + "symfony/validator": "For using validation", + "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", + "symfony/yaml": "For using the debug:config and lint:yaml commands" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "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": "Symfony FrameworkBundle", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/framework-bundle/tree/v5.2.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": "2020-12-18T11:40:59+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v2.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "41db680a15018f9c1d4b23516059633ce280ca33" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/41db680a15018f9c1d4b23516059633ce280ca33", + "reference": "41db680a15018f9c1d4b23516059633ce280ca33", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-version": "2.3", + "branch-alias": { + "dev-main": "2.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + } + }, + "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": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v2.3.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": "2020-10-14T17:08:19+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "a1f6218b29897ab52acba58cfa905b83625bef8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a1f6218b29897ab52acba58cfa905b83625bef8d", + "reference": "a1f6218b29897ab52acba58cfa905b83625bef8d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.15" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "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": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.2.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": "2020-12-18T10:00:10+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "1feb619286d819180f7b8bc0dc44f516d9c62647" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/1feb619286d819180f7b8bc0dc44f516d9c62647", + "reference": "1feb619286d819180f7b8bc0dc44f516d9c62647", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "~1.0", + "symfony/deprecation-contracts": "^2.1", + "symfony/error-handler": "^4.4|^5.0", + "symfony/event-dispatcher": "^5.0", + "symfony/http-client-contracts": "^1.1|^2", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/browser-kit": "<4.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.1.8", + "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", + "twig/twig": "<2.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/cache": "~1.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/config": "^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dependency-injection": "^5.1.8", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^2.4|^3.0" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "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": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.2.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": "2020-12-18T13:49:39+00:00" + }, + { + "name": "symfony/intl", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/intl.git", + "reference": "53927f98c9201fe5db3cfc4d574b1f4039020297" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/intl/zipball/53927f98c9201fe5db3cfc4d574b1f4039020297", + "reference": "53927f98c9201fe5db3cfc4d574b1f4039020297", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "require-dev": { + "symfony/filesystem": "^4.4|^5.0" + }, + "suggest": { + "ext-intl": "to use the component with locales other than \"en\"" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Intl\\": "" + }, + "classmap": [ + "Resources/stubs" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Eriksen Costa", + "email": "eriksen.costa@infranology.com.br" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A PHP replacement layer for the C intl extension that includes additional data from the ICU library.", + "homepage": "https://symfony.com", + "keywords": [ + "i18n", + "icu", + "internationalization", + "intl", + "l10n", + "localization" + ], + "support": { + "source": "https://github.com/symfony/intl/tree/v5.2.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": "2020-12-14T10:10:03+00:00" + }, + { + "name": "symfony/mailer", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "3f34fa977efca75ad17f1416ecb4605f27dbb75e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/3f34fa977efca75ad17f1416ecb4605f27dbb75e", + "reference": "3f34fa977efca75ad17f1416ecb4605f27dbb75e", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10", + "php": ">=7.2.5", + "psr/log": "~1.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/mime": "^5.2", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/http-kernel": "<4.4" + }, + "require-dev": { + "symfony/amazon-mailer": "^4.4|^5.0", + "symfony/google-mailer": "^4.4|^5.0", + "symfony/http-client-contracts": "^1.1|^2", + "symfony/mailchimp-mailer": "^4.4|^5.0", + "symfony/mailgun-mailer": "^4.4|^5.0", + "symfony/mailjet-mailer": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/postmark-mailer": "^4.4|^5.0", + "symfony/sendgrid-mailer": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "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": "Symfony Mailer Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v5.2.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": "2020-12-18T08:03:05+00:00" + }, + { + "name": "symfony/mime", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "de97005aef7426ba008c46ba840fc301df577ada" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/de97005aef7426ba008c46ba840fc301df577ada", + "reference": "de97005aef7426ba008c46ba840fc301df577ada", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.1", + "symfony/property-info": "^4.4|^5.1", + "symfony/serializer": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "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": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v5.2.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": "2020-12-09T18:54:12+00:00" + }, + { + "name": "symfony/monolog-bridge", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "c024671adcac903b142dd952306a243d35843963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/c024671adcac903b142dd952306a243d35843963", + "reference": "c024671adcac903b142dd952306a243d35843963", + "shasum": "" + }, + "require": { + "monolog/monolog": "^1.25.1|^2", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/console": "<4.4", + "symfony/http-foundation": "<4.4" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/mailer": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/security-core": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings.", + "symfony/http-kernel": "For using the debugging handlers together with the response life cycle of the HTTP kernel.", + "symfony/var-dumper": "For using the debugging handlers like the console handler or the log server handler." + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Monolog\\": "" + }, + "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": "Symfony Monolog Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/monolog-bridge/tree/v5.2.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": "2020-12-10T19:16:15+00:00" + }, + { + "name": "symfony/monolog-bundle", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "e495f5c7e4e672ffef4357d4a4d85f010802f940" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/e495f5c7e4e672ffef4357d4a4d85f010802f940", + "reference": "e495f5c7e4e672ffef4357d4a4d85f010802f940", + "shasum": "" + }, + "require": { + "monolog/monolog": "~1.22 || ~2.0", + "php": ">=5.6", + "symfony/config": "~3.4 || ~4.0 || ^5.0", + "symfony/dependency-injection": "~3.4.10 || ^4.0.10 || ^5.0", + "symfony/http-kernel": "~3.4 || ~4.0 || ^5.0", + "symfony/monolog-bridge": "~3.4 || ~4.0 || ^5.0" + }, + "require-dev": { + "symfony/console": "~3.4 || ~4.0 || ^5.0", + "symfony/phpunit-bridge": "^4.4 || ^5.0", + "symfony/yaml": "~3.4 || ~4.0 || ^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MonologBundle\\": "" + }, + "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 MonologBundle", + "homepage": "http://symfony.com", + "keywords": [ + "log", + "logging" + ], + "support": { + "issues": "https://github.com/symfony/monolog-bundle/issues", + "source": "https://github.com/symfony/monolog-bundle/tree/v3.6.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": "2020-10-06T15:12:11+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "87a2a4a766244e796dd9cb9d6f58c123358cd986" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/87a2a4a766244e796dd9cb9d6f58c123358cd986", + "reference": "87a2a4a766244e796dd9cb9d6f58c123358cd986", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "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": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.2.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": "2020-10-24T12:08:07+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.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": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "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 intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.20.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": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "c44d5bf6a75eed79555c6bf37505c6d39559353e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/c44d5bf6a75eed79555c6bf37505c6d39559353e", + "reference": "c44d5bf6a75eed79555c6bf37505c6d39559353e", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/intl": "~2.3|~3.0|~4.0|~5.0" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "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 intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.20.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": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", + "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.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": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-intl-messageformatter", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-messageformatter.git", + "reference": "2af0ae1f018fb07b415880319c8f0aa8293a53b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-messageformatter/zipball/2af0ae1f018fb07b415880319c8f0aa8293a53b1", + "reference": "2af0ae1f018fb07b415880319c8f0aa8293a53b1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\MessageFormatter\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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 intl's MessageFormatter class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "messageformatter", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-messageformatter/tree/v1.20.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": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "727d1096295d807c309fb01a851577302394c897" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", + "reference": "727d1096295d807c309fb01a851577302394c897", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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 intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.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": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", + "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-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.20.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": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/8ff431c517be11c78c48a39a66d37431e26a6bed", + "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.20.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": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.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": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/property-access", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "243dcdda2f276cb31efa31a015d0fdb5076931ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/243dcdda2f276cb31efa31a015d0fdb5076931ce", + "reference": "243dcdda2f276cb31efa31a015d0fdb5076931ce", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15", + "symfony/property-info": "^5.2" + }, + "require-dev": { + "symfony/cache": "^4.4|^5.0" + }, + "suggest": { + "psr/cache-implementation": "To cache access methods." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "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": "Symfony PropertyAccess Component", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v5.2.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": "2020-12-10T19:16:15+00:00" + }, + { + "name": "symfony/property-info", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "f65694a05eb7742c5f2951f20676de367ffaaaea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/f65694a05eb7742c5f2951f20676de367ffaaaea", + "reference": "f65694a05eb7742c5f2951f20676de367ffaaaea", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15", + "symfony/string": "^5.1" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<0.3.0", + "symfony/dependency-injection": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/cache": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "suggest": { + "phpdocumentor/reflection-docblock": "To use the PHPDoc", + "psr/cache-implementation": "To cache results", + "symfony/doctrine-bridge": "To use Doctrine metadata", + "symfony/serializer": "To use Serializer metadata" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Property Info Component", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v5.2.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": "2020-12-11T23:40:07+00:00" + }, + { + "name": "symfony/routing", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "934ac2720dcc878a47a45c986b483a7ee7193620" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/934ac2720dcc878a47a45c986b483a7ee7193620", + "reference": "934ac2720dcc878a47a45c986b483a7ee7193620", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/config": "<5.0", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.7", + "psr/log": "~1.0", + "symfony/config": "^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "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": "Symfony Routing Component", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v5.2.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": "2020-12-08T17:03:37+00:00" + }, + { + "name": "symfony/security-bundle", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-bundle.git", + "reference": "5a4e431445432c02b88c885c778765b50d92c6d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/5a4e431445432c02b88c885c778765b50d92c6d5", + "reference": "5a4e431445432c02b88c885c778765b50d92c6d5", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^5.2", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher": "^5.1", + "symfony/http-kernel": "^5.0", + "symfony/polyfill-php80": "^1.15", + "symfony/security-core": "^5.2", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/security-guard": "^5.2", + "symfony/security-http": "^5.2" + }, + "conflict": { + "symfony/browser-kit": "<4.4", + "symfony/console": "<4.4", + "symfony/framework-bundle": "<4.4", + "symfony/ldap": "<4.4", + "symfony/twig-bundle": "<4.4" + }, + "require-dev": { + "doctrine/doctrine-bundle": "^2.0", + "symfony/asset": "^4.4|^5.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/form": "^4.4|^5.0", + "symfony/framework-bundle": "^5.2", + "symfony/process": "^4.4|^5.0", + "symfony/rate-limiter": "^5.2", + "symfony/serializer": "^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/yaml": "^4.4|^5.0", + "twig/twig": "^2.10|^3.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\SecurityBundle\\": "" + }, + "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": "Symfony SecurityBundle", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-bundle/tree/v5.2.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": "2020-12-18T07:32:35+00:00" + }, + { + "name": "symfony/security-core", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "d058598fa48e06c3f774450f08fd926b982e33eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/d058598fa48e06c3f774450f08fd926b982e33eb", + "reference": "d058598fa48e06c3f774450f08fd926b982e33eb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^1.1|^2", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1.6|^2" + }, + "conflict": { + "symfony/event-dispatcher": "<4.4", + "symfony/ldap": "<4.4", + "symfony/security-guard": "<4.4", + "symfony/validator": "<5.2" + }, + "require-dev": { + "psr/container": "^1.0", + "psr/log": "~1.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/ldap": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/validator": "^5.2" + }, + "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" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Core\\": "" + }, + "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": "Symfony Security Component - Core Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-core/tree/v5.2.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": "2020-12-18T07:32:35+00:00" + }, + { + "name": "symfony/security-csrf", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-csrf.git", + "reference": "fc91cd67b6fcbeae3e5aff854c722fa05b5d133b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/fc91cd67b6fcbeae3e5aff854c722fa05b5d133b", + "reference": "fc91cd67b6fcbeae3e5aff854c722fa05b5d133b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/security-core": "^4.4|^5.0" + }, + "conflict": { + "symfony/http-foundation": "<4.4" + }, + "require-dev": { + "symfony/http-foundation": "^4.4|^5.0" + }, + "suggest": { + "symfony/http-foundation": "For using the class SessionTokenStorage." + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Csrf\\": "" + }, + "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": "Symfony Security Component - CSRF Library", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-csrf/tree/v5.2.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": "2020-12-08T17:02:38+00:00" + }, + { + "name": "symfony/security-guard", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-guard.git", + "reference": "0fb0e644feac3d6a122c2c27c9ef8823ba7f1c49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-guard/zipball/0fb0e644feac3d6a122c2c27c9ef8823ba7f1c49", + "reference": "0fb0e644feac3d6a122c2c27c9ef8823ba7f1c49", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15", + "symfony/security-core": "^5.0", + "symfony/security-http": "^4.4.1|^5.0.1" + }, + "require-dev": { + "psr/log": "~1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Guard\\": "" + }, + "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": "Symfony Security Component - Guard", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-guard/tree/v5.2.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": "2020-11-27T10:24:53+00:00" + }, + { + "name": "symfony/security-http", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-http.git", + "reference": "40023b8e14e5928b26df6a099cec0bf0c30eb3be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-http/zipball/40023b8e14e5928b26df6a099cec0bf0c30eb3be", + "reference": "40023b8e14e5928b26df6a099cec0bf0c30eb3be", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/http-foundation": "^5.2", + "symfony/http-kernel": "^5.2", + "symfony/polyfill-php80": "^1.15", + "symfony/property-access": "^4.4|^5.0", + "symfony/security-core": "^5.2" + }, + "conflict": { + "symfony/event-dispatcher": "<4.3", + "symfony/security-csrf": "<4.4" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/cache": "^4.4|^5.0", + "symfony/rate-limiter": "^5.2", + "symfony/routing": "^4.4|^5.0", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0" + }, + "suggest": { + "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", + "symfony/security-csrf": "For using tokens to protect authentication/logout attempts" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Http\\": "" + }, + "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": "Symfony Security Component - HTTP Integration", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security-http/tree/v5.2.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": "2020-12-08T17:03:37+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "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": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/master" + }, + "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": "2020-09-07T11:33:47+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "2b105c0354f39a63038a1d8bf776ee92852813af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2b105c0354f39a63038a1d8bf776ee92852813af", + "reference": "2b105c0354f39a63038a1d8bf776ee92852813af", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/service-contracts": "^1.0|^2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "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": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v5.2.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": "2020-11-01T16:14:45+00:00" + }, + { + "name": "symfony/string", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", + "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "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" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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 String component", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.2.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": "2020-12-05T07:33:16+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "a04209ba0d1391c828e5b2373181dac63c52ee70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/a04209ba0d1391c828e5b2373181dac63c52ee70", + "reference": "a04209ba0d1391c828e5b2373181dac63c52ee70", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^2.3" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "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": "Symfony Translation Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v5.2.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": "2020-12-08T17:03:37+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "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": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.3.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": "2020-09-28T13:05:58+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "378a136a41c07b5f2086f753d9756fb018921f86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/378a136a41c07b5f2086f753d9756fb018921f86", + "reference": "378a136a41c07b5f2086f753d9756fb018921f86", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^2.10|^3.0" + }, + "conflict": { + "symfony/console": "<4.4", + "symfony/form": "<5.1", + "symfony/http-foundation": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/translation": "<5.2", + "symfony/workflow": "<5.2" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/form": "^5.1.9", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/mime": "^5.2", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^4.4|^5.1", + "symfony/routing": "^4.4|^5.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^4.4|^5.0", + "symfony/security-csrf": "^4.4|^5.0", + "symfony/security-http": "^4.4|^5.0", + "symfony/serializer": "^5.2", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^5.2", + "symfony/web-link": "^4.4|^5.0", + "symfony/workflow": "^5.2", + "symfony/yaml": "^4.4|^5.0", + "twig/cssinliner-extra": "^2.12", + "twig/inky-extra": "^2.12", + "twig/markdown-extra": "^2.12" + }, + "suggest": { + "symfony/asset": "For using the AssetExtension", + "symfony/expression-language": "For using the ExpressionExtension", + "symfony/finder": "", + "symfony/form": "For using the FormExtension", + "symfony/http-kernel": "For using the HttpKernelExtension", + "symfony/routing": "For using the RoutingExtension", + "symfony/security-core": "For using the SecurityExtension", + "symfony/security-csrf": "For using the CsrfExtension", + "symfony/security-http": "For using the LogoutUrlExtension", + "symfony/stopwatch": "For using the StopwatchExtension", + "symfony/translation": "For using the TranslationExtension", + "symfony/var-dumper": "For using the DumpExtension", + "symfony/web-link": "For using the WebLinkExtension", + "symfony/yaml": "For using the YamlExtension" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "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": "Symfony Twig Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v5.2.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": "2020-12-11T23:40:07+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "8cb3208aec4655ae1495afad7ef3c032a236dfa7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/8cb3208aec4655ae1495afad7ef3c032a236dfa7", + "reference": "8cb3208aec4655ae1495afad7ef3c032a236dfa7", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/twig-bridge": "^5.0", + "twig/twig": "^2.10|^3.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.2", + "symfony/framework-bundle": "<5.0", + "symfony/translation": "<5.0" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.0", + "symfony/asset": "^4.4|^5.0", + "symfony/dependency-injection": "^5.2", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/form": "^4.4|^5.0", + "symfony/framework-bundle": "^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^5.0", + "symfony/web-link": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "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": "Symfony TwigBundle", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bundle/tree/v5.2.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": "2020-12-08T16:43:38+00:00" + }, + { + "name": "symfony/twig-pack", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-pack.git", + "reference": "08a73e833e07921c464336deb7630f93e85ef930" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-pack/zipball/08a73e833e07921c464336deb7630f93e85ef930", + "reference": "08a73e833e07921c464336deb7630f93e85ef930", + "shasum": "" + }, + "require": { + "symfony/twig-bundle": "*", + "twig/extra-bundle": "^2.12|^3.0", + "twig/twig": "^2.12|^3.0" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A Twig pack for Symfony projects", + "support": { + "issues": "https://github.com/symfony/twig-pack/issues", + "source": "https://github.com/symfony/twig-pack/tree/v1.0.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": "2020-10-19T08:46:41+00:00" + }, + { + "name": "symfony/validator", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "312d36715799ca1d195ee8dbf258b31d1a3cbf7b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/312d36715799ca1d195ee8dbf258b31d1a3cbf7b", + "reference": "312d36715799ca1d195ee8dbf258b31d1a3cbf7b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^1.1|^2" + }, + "conflict": { + "doctrine/lexer": "<1.0.2", + "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/translation": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.0", + "egulias/email-validator": "^2.1.10", + "symfony/cache": "^4.4|^5.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^5.1", + "symfony/finder": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.0", + "symfony/property-info": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader.", + "egulias/email-validator": "Strict (RFC compliant) email validation", + "psr/cache-implementation": "For using the mapping cache.", + "symfony/config": "", + "symfony/expression-language": "For using the Expression validator and the ExpressionLanguageSyntax constraints", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/property-access": "For accessing properties within comparison constraints", + "symfony/property-info": "To automatically add NotNull and Type constraints", + "symfony/translation": "For translating validation errors.", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "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": "Symfony Validator Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/v5.2.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": "2020-12-18T07:32:35+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "13e7e882eaa55863faa7c4ad7c60f12f1a8b5089" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/13e7e882eaa55863faa7c4ad7c60f12f1a8b5089", + "reference": "13e7e882eaa55863faa7c4ad7c60f12f1a8b5089", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^2.4|^3.0" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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 mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v5.2.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": "2020-12-16T17:02:19+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "fbc3507f23d263d75417e09a12d77c009f39676c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/fbc3507f23d263d75417e09a12d77c009f39676c", + "reference": "fbc3507f23d263d75417e09a12d77c009f39676c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" + }, + "require-dev": { + "symfony/var-dumper": "^4.4.9|^5.0.9" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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": "A blend of var_export() + serialize() to turn any serializable data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.2.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": "2020-10-28T21:31:18+00:00" + }, + { + "name": "symfony/webpack-encore-bundle", + "version": "v1.8.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/webpack-encore-bundle.git", + "reference": "c879bc50c69f6b4f2984b2bb5fe8190bbc5befdd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/c879bc50c69f6b4f2984b2bb5fe8190bbc5befdd", + "reference": "c879bc50c69f6b4f2984b2bb5fe8190bbc5befdd", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/asset": "^3.4 || ^4.0 || ^5.0", + "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", + "symfony/service-contracts": "^1.0 || ^2.0" + }, + "require-dev": { + "symfony/framework-bundle": "^3.4 || ^4.0 || ^5.0", + "symfony/phpunit-bridge": "^4.3.5 || ^5.0", + "symfony/twig-bundle": "^3.4 || ^4.0 || ^5.0", + "symfony/web-link": "^3.4 || ^4.0 || ^5.0" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "name": "symfony/webpack-encore", + "url": "https://github.com/symfony/webpack-encore" + } + }, + "autoload": { + "psr-4": { + "Symfony\\WebpackEncoreBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "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.8.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": "2020-10-28T17:07:25+00:00" + }, + { + "name": "symfony/yaml", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "290ea5e03b8cf9b42c783163123f54441fb06939" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/290ea5e03b8cf9b42c783163123f54441fb06939", + "reference": "290ea5e03b8cf9b42c783163123f54441fb06939", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "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": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v5.2.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": "2020-12-08T17:02:38+00:00" + }, + { + "name": "tgalopin/html-sanitizer", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/tgalopin/html-sanitizer.git", + "reference": "56cca6b48de4e50d16a4f549e3e677ae0d561e91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tgalopin/html-sanitizer/zipball/56cca6b48de4e50d16a4f549e3e677ae0d561e91", + "reference": "56cca6b48de4e50d16a4f549e3e677ae0d561e91", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "league/uri-parser": "^1.4.1", + "masterminds/html5": "^2.4", + "php": ">=7.1", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.4", + "symfony/var-dumper": "^4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "HtmlSanitizer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + } + ], + "description": "Sanitize untrustworthy HTML user input", + "support": { + "issues": "https://github.com/tgalopin/html-sanitizer/issues", + "source": "https://github.com/tgalopin/html-sanitizer/tree/master" + }, + "time": "2020-02-03T16:51:08+00:00" + }, + { + "name": "tgalopin/html-sanitizer-bundle", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/tgalopin/html-sanitizer-bundle.git", + "reference": "df42087a1b1660eea37032f9ce3dc0997452d3e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tgalopin/html-sanitizer-bundle/zipball/df42087a1b1660eea37032f9ce3dc0997452d3e2", + "reference": "df42087a1b1660eea37032f9ce3dc0997452d3e2", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/framework-bundle": "^3.4|^4.0|^5.0", + "tgalopin/html-sanitizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.4", + "symfony/form": "^4.1|^5.0", + "symfony/twig-bundle": "^4.1|^5.0", + "symfony/var-dumper": "^4.1|^5.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "HtmlSanitizer\\Bundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + } + ], + "description": "Symfony Bundle for https://github.com/tgalopin/html-sanitizer", + "support": { + "issues": "https://github.com/tgalopin/html-sanitizer-bundle/issues", + "source": "https://github.com/tgalopin/html-sanitizer-bundle/tree/master" + }, + "time": "2019-11-23T09:46:29+00:00" + }, + { + "name": "twig/extra-bundle", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/twig-extra-bundle.git", + "reference": "07c94c7dcfe7e49abd45d4083ca5544a34969714" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/07c94c7dcfe7e49abd45d4083ca5544a34969714", + "reference": "07c94c7dcfe7e49abd45d4083ca5544a34969714", + "shasum": "" + }, + "require": { + "php": "^7.1.3|^8.0", + "symfony/framework-bundle": "^4.3|^5.0", + "symfony/twig-bundle": "^4.3|^5.0", + "twig/twig": "^3.2" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4.9|^5.0.9", + "twig/cache-extra": "^3.0", + "twig/cssinliner-extra": "^2.12|^3.0", + "twig/html-extra": "^2.12|^3.0", + "twig/inky-extra": "^2.12|^3.0", + "twig/intl-extra": "^2.12|^3.0", + "twig/markdown-extra": "^2.12|^3.0", + "twig/string-extra": "^2.12|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\Extra\\TwigExtraBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Symfony bundle for extra Twig extensions", + "homepage": "https://twig.symfony.com", + "keywords": [ + "bundle", + "extra", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.2.1" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2021-01-05T15:24:51+00:00" + }, + { + "name": "twig/intl-extra", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/intl-extra.git", + "reference": "919e8f945c30bd3efeb6a4d79722cda538116658" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/919e8f945c30bd3efeb6a4d79722cda538116658", + "reference": "919e8f945c30bd3efeb6a4d79722cda538116658", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/intl": "^4.3|^5.0", + "twig/twig": "^2.4|^3.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4.9|^5.0.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\Extra\\Intl\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Twig extension for Intl", + "homepage": "https://twig.symfony.com", + "keywords": [ + "intl", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/intl-extra/tree/v3.2.1" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2021-01-01T14:58:18+00:00" + }, + { + "name": "twig/markdown-extra", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/markdown-extra.git", + "reference": "48142a7727b2b84691f843056346d534933f1d3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/48142a7727b2b84691f843056346d534933f1d3f", + "reference": "48142a7727b2b84691f843056346d534933f1d3f", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "twig/twig": "^2.4|^3.0" + }, + "require-dev": { + "erusev/parsedown": "^1.7", + "league/commonmark": "^1.0", + "league/html-to-markdown": "^4.8", + "michelf/php-markdown": "^1.8", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\Extra\\Markdown\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Twig extension for Markdown", + "homepage": "https://twig.symfony.com", + "keywords": [ + "html", + "markdown", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/markdown-extra/tree/v3.2.1" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2021-01-01T14:58:18+00:00" + }, + { + "name": "twig/twig", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "f795ca686d38530045859b0350b5352f7d63447d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/f795ca686d38530045859b0350b5352f7d63447d", + "reference": "f795ca686d38530045859b0350b5352f7d63447d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.2.1" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2021-01-05T15:40:36+00:00" + } + ], + "packages-dev": [ + { + "name": "dama/doctrine-test-bundle", + "version": "v6.5.0", + "source": { + "type": "git", + "url": "https://github.com/dmaicher/doctrine-test-bundle.git", + "reference": "a43f79239f446bb85ffa34e799878156a43b590b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/a43f79239f446bb85ffa34e799878156a43b590b", + "reference": "a43f79239f446bb85ffa34e799878156a43b590b", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^2.9.3 || ^3.0", + "doctrine/doctrine-bundle": "^1.11 || ^2.0", + "php": "^7.1 || ^8.0", + "symfony/framework-bundle": "^3.4 || ^4.4 || ^5.1" + }, + "require-dev": { + "behat/behat": "^3.0", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "symfony/phpunit-bridge": "^5.1", + "symfony/process": "^3.4 || ^4.4 || ^5.1", + "symfony/yaml": "^3.4 || ^4.4 || ^5.1" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "7.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "DAMA\\DoctrineTestBundle\\": "src/DAMA/DoctrineTestBundle" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David Maicher", + "email": "mail@dmaicher.de" + } + ], + "description": "Symfony bundle to isolate doctrine database tests and improve test performance", + "keywords": [ + "doctrine", + "isolation", + "performance", + "symfony", + "tests" + ], + "support": { + "issues": "https://github.com/dmaicher/doctrine-test-bundle/issues", + "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v6.5.0" + }, + "time": "2020-12-12T16:34:54+00:00" + }, + { + "name": "doctrine/data-fixtures", + "version": "1.4.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/data-fixtures.git", + "reference": "16a03fadb5473f49aad70384002dfd5012fe680e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/16a03fadb5473f49aad70384002dfd5012fe680e", + "reference": "16a03fadb5473f49aad70384002dfd5012fe680e", + "shasum": "" + }, + "require": { + "doctrine/common": "^2.13|^3.0", + "doctrine/persistence": "^1.3.3|^2.0", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "doctrine/phpcr-odm": "<1.3.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "doctrine/dbal": "^2.5.4", + "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", + "doctrine/orm": "^2.7.0", + "phpunit/phpunit": "^7.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)", + "doctrine/mongodb-odm": "For loading MongoDB ODM fixtures", + "doctrine/orm": "For loading ORM fixtures", + "doctrine/phpcr-odm": "For loading PHPCR ODM fixtures" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\DataFixtures\\": "lib/Doctrine/Common/DataFixtures" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Data Fixtures for all Doctrine Object Managers", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database" + ], + "support": { + "issues": "https://github.com/doctrine/data-fixtures/issues", + "source": "https://github.com/doctrine/data-fixtures/tree/1.4.x" + }, + "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%2Fdata-fixtures", + "type": "tidelift" + } + ], + "time": "2020-09-01T07:13:28+00:00" + }, + { + "name": "doctrine/doctrine-fixtures-bundle", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", + "reference": "870189619a7770f468ffb0b80925302e065a3b34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/870189619a7770f468ffb0b80925302e065a3b34", + "reference": "870189619a7770f468ffb0b80925302e065a3b34", + "shasum": "" + }, + "require": { + "doctrine/data-fixtures": "^1.3", + "doctrine/doctrine-bundle": "^1.11|^2.0", + "doctrine/orm": "^2.6.0", + "doctrine/persistence": "^1.3.7|^2.0", + "php": "^7.1 || ^8.0", + "symfony/config": "^3.4|^4.3|^5.0", + "symfony/console": "^3.4|^4.3|^5.0", + "symfony/dependency-injection": "^3.4|^4.3|^5.0", + "symfony/doctrine-bridge": "^3.4|^4.1|^5.0", + "symfony/http-kernel": "^3.4|^4.3|^5.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpunit/phpunit": "^7.4 || ^8.0 || ^9.2", + "symfony/phpunit-bridge": "^4.1|^5.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\FixturesBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineFixturesBundle", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "Fixture", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.4.0" + }, + "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%2Fdoctrine-fixtures-bundle", + "type": "tidelift" + } + ], + "time": "2020-11-14T09:36:49+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.10.4", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + }, + "time": "2020-12-20T10:01:03+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "87d6f0a7436b03a57d4cf9a6a9cd0c83a355c49a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/87d6f0a7436b03a57d4cf9a6a9cd0c83a355c49a", + "reference": "87d6f0a7436b03a57d4cf9a6a9cd0c83a355c49a", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/dom-crawler": "^4.4|^5.0" + }, + "require-dev": { + "symfony/css-selector": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0" + }, + "suggest": { + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "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": "Symfony BrowserKit Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/browser-kit/tree/v5.2.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": "2020-12-18T08:03:05+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "f789e7ead4c79e04ca9a6d6162fc629c89bd8054" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/f789e7ead4c79e04ca9a6d6162fc629c89bd8054", + "reference": "f789e7ead4c79e04ca9a6d6162fc629c89bd8054", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v5.2.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": "2020-12-08T17:02:38+00:00" + }, + { + "name": "symfony/debug-bundle", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug-bundle.git", + "reference": "c79722fc3d430810d7a764fbc84fe212e532e004" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/c79722fc3d430810d7a764fbc84fe212e532e004", + "reference": "c79722fc3d430810d7a764fbc84fe212e532e004", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": ">=7.2.5", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/twig-bridge": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.2" + }, + "require-dev": { + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/web-profiler-bundle": "^4.4|^5.0" + }, + "suggest": { + "symfony/config": "For service container configuration", + "symfony/dependency-injection": "For using as a service from the container" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\DebugBundle\\": "" + }, + "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": "Symfony DebugBundle", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug-bundle/tree/v5.2.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": "2020-10-24T12:08:07+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "ee7cf316fb0de786cfe5ae32ee79502b290c81ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/ee7cf316fb0de786cfe5ae32ee79502b290c81ea", + "reference": "ee7cf316fb0de786cfe5ae32ee79502b290c81ea", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "masterminds/html5": "<2.6" + }, + "require-dev": { + "masterminds/html5": "^2.6", + "symfony/css-selector": "^4.4|^5.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "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": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v5.2.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": "2020-12-18T08:02:46+00:00" + }, + { + "name": "symfony/maker-bundle", + "version": "v1.26.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/maker-bundle.git", + "reference": "0f1d3ed2584349dc8700d7908e8a92b3742b1c99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/0f1d3ed2584349dc8700d7908e8a92b3742b1c99", + "reference": "0f1d3ed2584349dc8700d7908e8a92b3742b1c99", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.2|^2.0", + "nikic/php-parser": "^4.0", + "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/deprecation-contracts": "^2.2", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/framework-bundle": "^3.4|^4.0|^5.0", + "symfony/http-kernel": "^3.4|^4.0|^5.0" + }, + "require-dev": { + "composer/semver": "^3.0@dev", + "doctrine/doctrine-bundle": "^1.8|^2.0", + "doctrine/orm": "^2.3", + "friendsofphp/php-cs-fixer": "^2.8", + "friendsoftwig/twigcs": "^3.1.2", + "symfony/http-client": "^4.3|^5.0", + "symfony/phpunit-bridge": "^4.3|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/security-core": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-main": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MakerBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.", + "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html", + "keywords": [ + "code generator", + "generator", + "scaffold", + "scaffolding" + ], + "support": { + "issues": "https://github.com/symfony/maker-bundle/issues", + "source": "https://github.com/symfony/maker-bundle/tree/v1.26.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": "2020-12-18T17:08:39+00:00" + }, + { + "name": "symfony/phpunit-bridge", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/phpunit-bridge.git", + "reference": "235823f6d215c9bd930a47a496e62c1354cde55b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/235823f6d215c9bd930a47a496e62c1354cde55b", + "reference": "235823f6d215c9bd930a47a496e62c1354cde55b", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0|<6.4,>=6.0|9.1.2" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1", + "symfony/error-handler": "^4.4|^5.0" + }, + "suggest": { + "symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" + }, + "bin": [ + "bin/simple-phpunit" + ], + "type": "symfony-bridge", + "extra": { + "thanks": { + "name": "phpunit/phpunit", + "url": "https://github.com/sebastianbergmann/phpunit" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Bridge\\PhpUnit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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 PHPUnit Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/phpunit-bridge/tree/v5.2.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": "2020-12-14T22:27:17+00:00" + }, + { + "name": "symfony/web-profiler-bundle", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "6cd2f3d01faf1d77125ec14150a6fbd062dbe211" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/6cd2f3d01faf1d77125ec14150a6fbd062dbe211", + "reference": "6cd2f3d01faf1d77125ec14150a6fbd062dbe211", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/config": "^4.4|^5.0", + "symfony/framework-bundle": "^5.1", + "symfony/http-kernel": "^5.2", + "symfony/routing": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "twig/twig": "^2.10|^3.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.2", + "symfony/form": "<4.4", + "symfony/messenger": "<4.4" + }, + "require-dev": { + "symfony/browser-kit": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\WebProfilerBundle\\": "" + }, + "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": "Symfony WebProfilerBundle", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/web-profiler-bundle/tree/v5.2.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": "2020-12-08T17:03:37+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^7.2.9", + "ext-pdo_sqlite": "*" + }, + "platform-dev": [], + "platform-overrides": { + "php": "7.2.9" + }, + "plugin-api-version": "2.0.0" +} diff --git a/app/config/bundles.php b/app/config/bundles.php new file mode 100644 index 0000000..9c5a0d5 --- /dev/null +++ b/app/config/bundles.php @@ -0,0 +1,19 @@ + ['all' => true], + Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], + Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true], + Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], + DAMA\DoctrineTestBundle\DAMADoctrineTestBundle::class => ['test' => true], + Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], + Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], + Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], + Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], + Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], + HtmlSanitizer\Bundle\HtmlSanitizerBundle::class => ['all' => true], +]; diff --git a/app/config/packages/assets.yaml b/app/config/packages/assets.yaml new file mode 100644 index 0000000..051d36d --- /dev/null +++ b/app/config/packages/assets.yaml @@ -0,0 +1,3 @@ +framework: + assets: + json_manifest_path: '%kernel.project_dir%/public/build/manifest.json' diff --git a/app/config/packages/cache.yaml b/app/config/packages/cache.yaml new file mode 100644 index 0000000..6899b72 --- /dev/null +++ b/app/config/packages/cache.yaml @@ -0,0 +1,19 @@ +framework: + cache: + # Unique name of your app: used to compute stable namespaces for cache keys. + #prefix_seed: your_vendor_name/app_name + + # The "app" cache stores to the filesystem by default. + # The data in this cache should persist between deploys. + # Other options include: + + # Redis + #app: cache.adapter.redis + #default_redis_provider: redis://localhost + + # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) + #app: cache.adapter.apcu + + # Namespaced pools use the above "app" backend by default + #pools: + #my.dedicated.cache: null diff --git a/app/config/packages/dev/debug.yaml b/app/config/packages/dev/debug.yaml new file mode 100644 index 0000000..26d4e53 --- /dev/null +++ b/app/config/packages/dev/debug.yaml @@ -0,0 +1,4 @@ +debug: + # Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser. + # See the "server:dump" command to start a new server. + dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%" diff --git a/app/config/packages/dev/mailer.yaml b/app/config/packages/dev/mailer.yaml new file mode 100644 index 0000000..8f1eb0f --- /dev/null +++ b/app/config/packages/dev/mailer.yaml @@ -0,0 +1,4 @@ +framework: + mailer: + # this disables delivery of messages entirely + dsn: 'null://null' diff --git a/app/config/packages/dev/monolog.yaml b/app/config/packages/dev/monolog.yaml new file mode 100644 index 0000000..b1998da --- /dev/null +++ b/app/config/packages/dev/monolog.yaml @@ -0,0 +1,19 @@ +monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] + # uncomment to get logging in your browser + # you may have to allow bigger header sizes in your Web server configuration + #firephp: + # type: firephp + # level: info + #chromephp: + # type: chromephp + # level: info + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] diff --git a/app/config/packages/dev/web_profiler.yaml b/app/config/packages/dev/web_profiler.yaml new file mode 100644 index 0000000..e92166a --- /dev/null +++ b/app/config/packages/dev/web_profiler.yaml @@ -0,0 +1,6 @@ +web_profiler: + toolbar: true + intercept_redirects: false + +framework: + profiler: { only_exceptions: false } diff --git a/app/config/packages/doctrine.yaml b/app/config/packages/doctrine.yaml new file mode 100644 index 0000000..5e80e77 --- /dev/null +++ b/app/config/packages/doctrine.yaml @@ -0,0 +1,18 @@ +doctrine: + dbal: + url: '%env(resolve:DATABASE_URL)%' + + # IMPORTANT: You MUST configure your server version, + # either here or in the DATABASE_URL env var (see .env file) + #server_version: '5.7' + orm: + auto_generate_proxy_classes: true + naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware + auto_mapping: true + mappings: + App: + is_bundle: false + type: annotation + dir: '%kernel.project_dir%/src/Entity' + prefix: 'App\Entity' + alias: App diff --git a/app/config/packages/doctrine_migrations.yaml b/app/config/packages/doctrine_migrations.yaml new file mode 100644 index 0000000..61e6612 --- /dev/null +++ b/app/config/packages/doctrine_migrations.yaml @@ -0,0 +1,5 @@ +doctrine_migrations: + migrations_paths: + # namespace is arbitrary but should be different from App\Migrations + # as migrations classes should NOT be autoloaded + 'DoctrineMigrations': '%kernel.project_dir%/migrations' diff --git a/app/config/packages/framework.yaml b/app/config/packages/framework.yaml new file mode 100644 index 0000000..8012f41 --- /dev/null +++ b/app/config/packages/framework.yaml @@ -0,0 +1,27 @@ +# see https://symfony.com/doc/current/reference/configuration/framework.html +framework: + secret: '%env(APP_SECRET)%' + csrf_protection: true + http_method_override: true + + # Enables session support. Note that the session will ONLY be started if you read or write from it. + # Remove or comment this section to explicitly disable session support. + session: + handler_id: null + cookie_secure: auto + cookie_samesite: lax + + # When using the HTTP Cache, ESI allows to render page fragments separately + # and with different cache configurations for each fragment + # https://symfony.com/doc/current/http_cache/esi.html + esi: true + fragments: true + + php_errors: + log: true + + # The 'ide' option turns all of the file paths in an exception page + # into clickable links that open the given file using your favorite IDE. + # When 'ide' is set to null the file is opened in your web browser. + # See https://symfony.com/doc/current/reference/configuration/framework.html#ide + ide: null diff --git a/app/config/packages/html_sanitizer.yaml b/app/config/packages/html_sanitizer.yaml new file mode 100644 index 0000000..550bc32 --- /dev/null +++ b/app/config/packages/html_sanitizer.yaml @@ -0,0 +1,17 @@ +html_sanitizer: + default_sanitizer: 'default' + sanitizers: + default: + # Read https://github.com/tgalopin/html-sanitizer/blob/master/docs/1-getting-started.md#extensions + # to learn more about which extensions you would like to enable. + extensions: + - 'basic' + - 'list' + - 'table' + - 'image' + - 'code' + # - 'iframe' + # - 'extra' + + # Read https://github.com/tgalopin/html-sanitizer/blob/master/docs/3-configuration-reference.md + # to discover all the available options for each extension. diff --git a/app/config/packages/mailer.yaml b/app/config/packages/mailer.yaml new file mode 100644 index 0000000..56a650d --- /dev/null +++ b/app/config/packages/mailer.yaml @@ -0,0 +1,3 @@ +framework: + mailer: + dsn: '%env(MAILER_DSN)%' diff --git a/app/config/packages/prod/deprecations.yaml b/app/config/packages/prod/deprecations.yaml new file mode 100644 index 0000000..920a061 --- /dev/null +++ b/app/config/packages/prod/deprecations.yaml @@ -0,0 +1,8 @@ +# As of Symfony 5.1, deprecations are logged in the dedicated "deprecation" channel when it exists +#monolog: +# channels: [deprecation] +# handlers: +# deprecation: +# type: stream +# channels: [deprecation] +# path: "%kernel.logs_dir%/%kernel.environment%.deprecations.log" diff --git a/app/config/packages/prod/doctrine.yaml b/app/config/packages/prod/doctrine.yaml new file mode 100644 index 0000000..084f59a --- /dev/null +++ b/app/config/packages/prod/doctrine.yaml @@ -0,0 +1,20 @@ +doctrine: + orm: + auto_generate_proxy_classes: false + metadata_cache_driver: + type: pool + pool: doctrine.system_cache_pool + query_cache_driver: + type: pool + pool: doctrine.system_cache_pool + result_cache_driver: + type: pool + pool: doctrine.result_cache_pool + +framework: + cache: + pools: + doctrine.result_cache_pool: + adapter: cache.app + doctrine.system_cache_pool: + adapter: cache.system diff --git a/app/config/packages/prod/monolog.yaml b/app/config/packages/prod/monolog.yaml new file mode 100644 index 0000000..bfe69c0 --- /dev/null +++ b/app/config/packages/prod/monolog.yaml @@ -0,0 +1,16 @@ +monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + buffer_size: 50 # How many messages should be saved? Prevent memory leaks + nested: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine"] diff --git a/app/config/packages/prod/routing.yaml b/app/config/packages/prod/routing.yaml new file mode 100644 index 0000000..b3e6a0a --- /dev/null +++ b/app/config/packages/prod/routing.yaml @@ -0,0 +1,3 @@ +framework: + router: + strict_requirements: null diff --git a/app/config/packages/prod/webpack_encore.yaml b/app/config/packages/prod/webpack_encore.yaml new file mode 100644 index 0000000..d0b3ba8 --- /dev/null +++ b/app/config/packages/prod/webpack_encore.yaml @@ -0,0 +1,4 @@ +#webpack_encore: + # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) + # Available in version 1.2 + #cache: true diff --git a/app/config/packages/routing.yaml b/app/config/packages/routing.yaml new file mode 100644 index 0000000..b45c1ce --- /dev/null +++ b/app/config/packages/routing.yaml @@ -0,0 +1,7 @@ +framework: + router: + utf8: true + + # Configure how to generate URLs in non-HTTP contexts, such as CLI commands. + # See https://symfony.com/doc/current/routing.html#generating-urls-in-commands + #default_uri: http://localhost diff --git a/app/config/packages/security.yaml b/app/config/packages/security.yaml new file mode 100644 index 0000000..ea350f6 --- /dev/null +++ b/app/config/packages/security.yaml @@ -0,0 +1,63 @@ +security: + encoders: + # Our user class and the algorithm we'll use to encode passwords + # 'auto' means to let Symfony choose the best possible password hasher (Argon2 or Bcrypt) + # https://symfony.com/doc/current/security.html#c-encoding-passwords + App\Entity\User: 'auto' + + providers: + # https://symfony.com/doc/current/security/user_provider.html + # In this example, users are stored via Doctrine in the database + # To see the users at src/App/DataFixtures/ORM/LoadFixtures.php + # To load users from somewhere else: https://symfony.com/doc/current/security/user_provider.html#creating-a-custom-user-provider + database_users: + entity: { class: App\Entity\User, property: username } + + # https://symfony.com/doc/current/security.html#a-authentication-firewalls + firewalls: + dev: + pattern: ^/(_(profiler|wdt)|css|images|js)/ + security: false + + main: + # this firewall applies to all URLs + pattern: ^/ + + # but the firewall does not require login on every page + # denying access is done in access_control or in your controllers + anonymous: true + lazy: true + + # The user provider to use. + provider: database_users + + # This allows the user to login by submitting a username and password + # Reference: https://symfony.com/doc/current/security/form_login_setup.html + form_login: + # The route name that the login form submits to + check_path: security_login + # The name of the route where the login form lives + # When the user tries to access a protected page, they are redirected here + login_path: security_login + # Secure the login form against CSRF + # Reference: https://symfony.com/doc/current/security/csrf.html#csrf-protection-in-login-forms + csrf_token_generator: security.csrf.token_manager + # The page users are redirect to when there is no previous page stored in the + # session (for example when the users access directly to the login page). + default_target_path: blog_index + + logout: + # The route name the user can go to in order to logout + path: security_logout + # The name of the route to redirect to after logging out + target: homepage + + # Easy way to control access for large sections of your site + # Note: Only the *first* access control that matches will be used + access_control: + # this is a catch-all for the admin area + # additional security lives in the controllers + - { path: '^/(%app_locales%)/admin', roles: ROLE_ADMIN } + + role_hierarchy: + ROLE_ADMIN: ROLE_USER diff --git a/app/config/packages/sensio_framework_extra.yaml b/app/config/packages/sensio_framework_extra.yaml new file mode 100644 index 0000000..1821ccc --- /dev/null +++ b/app/config/packages/sensio_framework_extra.yaml @@ -0,0 +1,3 @@ +sensio_framework_extra: + router: + annotations: false diff --git a/app/config/packages/test/dama_doctrine_test_bundle.yaml b/app/config/packages/test/dama_doctrine_test_bundle.yaml new file mode 100644 index 0000000..80b0091 --- /dev/null +++ b/app/config/packages/test/dama_doctrine_test_bundle.yaml @@ -0,0 +1,4 @@ +dama_doctrine_test: + enable_static_connection: true + enable_static_meta_data_cache: true + enable_static_query_cache: true diff --git a/app/config/packages/test/framework.yaml b/app/config/packages/test/framework.yaml new file mode 100644 index 0000000..d051c84 --- /dev/null +++ b/app/config/packages/test/framework.yaml @@ -0,0 +1,4 @@ +framework: + test: true + session: + storage_id: session.storage.mock_file diff --git a/app/config/packages/test/mailer.yaml b/app/config/packages/test/mailer.yaml new file mode 100644 index 0000000..8f1eb0f --- /dev/null +++ b/app/config/packages/test/mailer.yaml @@ -0,0 +1,4 @@ +framework: + mailer: + # this disables delivery of messages entirely + dsn: 'null://null' diff --git a/app/config/packages/test/monolog.yaml b/app/config/packages/test/monolog.yaml new file mode 100644 index 0000000..fc40641 --- /dev/null +++ b/app/config/packages/test/monolog.yaml @@ -0,0 +1,12 @@ +monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + channels: ["!event"] + nested: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug diff --git a/app/config/packages/test/security.yaml b/app/config/packages/test/security.yaml new file mode 100644 index 0000000..04af7ce --- /dev/null +++ b/app/config/packages/test/security.yaml @@ -0,0 +1,6 @@ +# this configuration simplifies testing URLs protected by the security mechanism +# See https://symfony.com/doc/current/testing/http_authentication.html +security: + firewalls: + main: + http_basic: ~ diff --git a/app/config/packages/test/twig.yaml b/app/config/packages/test/twig.yaml new file mode 100644 index 0000000..8c6e0b4 --- /dev/null +++ b/app/config/packages/test/twig.yaml @@ -0,0 +1,2 @@ +twig: + strict_variables: true diff --git a/app/config/packages/test/validator.yaml b/app/config/packages/test/validator.yaml new file mode 100644 index 0000000..1e5ab78 --- /dev/null +++ b/app/config/packages/test/validator.yaml @@ -0,0 +1,3 @@ +framework: + validation: + not_compromised_password: false diff --git a/app/config/packages/test/web_profiler.yaml b/app/config/packages/test/web_profiler.yaml new file mode 100644 index 0000000..03752de --- /dev/null +++ b/app/config/packages/test/web_profiler.yaml @@ -0,0 +1,6 @@ +web_profiler: + toolbar: false + intercept_redirects: false + +framework: + profiler: { collect: false } diff --git a/app/config/packages/test/webpack_encore.yaml b/app/config/packages/test/webpack_encore.yaml new file mode 100644 index 0000000..02a7651 --- /dev/null +++ b/app/config/packages/test/webpack_encore.yaml @@ -0,0 +1,2 @@ +#webpack_encore: +# strict_mode: false diff --git a/app/config/packages/translation.yaml b/app/config/packages/translation.yaml new file mode 100644 index 0000000..e6b1cd6 --- /dev/null +++ b/app/config/packages/translation.yaml @@ -0,0 +1,6 @@ +framework: + default_locale: '%locale%' + translator: + default_path: '%kernel.project_dir%/translations' + fallbacks: + - '%locale%' diff --git a/app/config/packages/twig.yaml b/app/config/packages/twig.yaml new file mode 100644 index 0000000..946bb04 --- /dev/null +++ b/app/config/packages/twig.yaml @@ -0,0 +1,5 @@ +twig: + default_path: '%kernel.project_dir%/templates' + form_themes: + - 'form/layout.html.twig' + - 'form/fields.html.twig' diff --git a/app/config/packages/validator.yaml b/app/config/packages/validator.yaml new file mode 100644 index 0000000..55ee10f --- /dev/null +++ b/app/config/packages/validator.yaml @@ -0,0 +1,9 @@ +framework: + validation: + enable_annotations: true + email_validation_mode: html5 + + # Enables validator auto-mapping support. + # For instance, basic validation constraints will be inferred from Doctrine's metadata. + auto_mapping: + App\Entity\: [] diff --git a/app/config/packages/webpack_encore.yaml b/app/config/packages/webpack_encore.yaml new file mode 100644 index 0000000..9191f4f --- /dev/null +++ b/app/config/packages/webpack_encore.yaml @@ -0,0 +1,25 @@ +webpack_encore: + # The path where Encore is building the assets - i.e. Encore.setOutputPath() + output_path: '%kernel.project_dir%/public/build' + # If multiple builds are defined (as shown below), you can disable the default build: + # output_path: false + + # if using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials') + # crossorigin: 'anonymous' + + # preload all rendered script and link tags automatically via the http2 Link header + # preload: true + + # Throw an exception if the entrypoints.json file is missing or an entry is missing from the data + # strict_mode: false + + # if you have multiple builds: + # builds: + # pass "frontend" as the 3rg arg to the Twig functions + # {{ encore_entry_script_tags('entry1', null, 'frontend') }} + + # frontend: '%kernel.project_dir%/public/frontend/build' + + # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) + # Put in config/packages/prod/webpack_encore.yaml + # cache: true diff --git a/app/config/preload.php b/app/config/preload.php new file mode 100644 index 0000000..5ebcdb2 --- /dev/null +++ b/app/config/preload.php @@ -0,0 +1,5 @@ + + + + + + + + + + + + + + + tests + + + + + + src + + + + + + + + + + + + diff --git a/app/public/.htaccess b/app/public/.htaccess new file mode 100644 index 0000000..2776637 --- /dev/null +++ b/app/public/.htaccess @@ -0,0 +1,66 @@ +# Use the front controller as index file. It serves as a fallback solution when +# every other rewrite/redirect fails (e.g. in an aliased environment without +# mod_rewrite). Additionally, this reduces the matching process for the +# start page (path "/") because otherwise Apache will apply the rewriting rules +# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl). +DirectoryIndex index.php + +# By default, Apache does not evaluate symbolic links if you did not enable this +# feature in your server configuration. Uncomment the following line if you +# install assets as symlinks or if you experience problems related to symlinks +# when compiling LESS/Sass/CoffeScript assets. +# Options +FollowSymlinks + +# Disabling MultiViews prevents unwanted negotiation, e.g. "/index" should not resolve +# to the front controller "/index.php" but be rewritten to "/index.php/index". + + Options -MultiViews + + + + RewriteEngine On + + # Determine the RewriteBase automatically and set it as environment variable. + # If you are using Apache aliases to do mass virtual hosting or installed the + # project in a subdirectory, the base path will be prepended to allow proper + # resolution of the index.php file and to redirect to the correct URI. It will + # work in environments without path prefix as well, providing a safe, one-size + # fits all solution. But as you do not need it in this case, you can comment + # the following 2 lines to eliminate the overhead. + RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$ + RewriteRule .* - [E=BASE:%1] + + # Sets the HTTP_AUTHORIZATION header removed by Apache + RewriteCond %{HTTP:Authorization} .+ + RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0] + + # Redirect to URI without front controller to prevent duplicate content + # (with and without `/index.php`). Only do this redirect on the initial + # rewrite by Apache and not on subsequent cycles. Otherwise we would get an + # endless redirect loop (request -> rewrite to front controller -> + # redirect -> request -> ...). + # So in case you get a "too many redirects" error or you always get redirected + # to the start page because your Apache does not expose the REDIRECT_STATUS + # environment variable, you have 2 choices: + # - disable this feature by commenting the following 2 lines or + # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the + # following RewriteCond (best solution) + RewriteCond %{ENV:REDIRECT_STATUS} ="" + RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] + + # If the requested filename exists, simply serve it. + # We only want to let Apache serve files and not directories. + # Rewrite all other queries to the front controller. + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ %{ENV:BASE}/index.php [L] + + + + + # When mod_rewrite is not available, we instruct a temporary redirect of + # the start page to the front controller explicitly so that the website + # and the generated links can still be used. + RedirectMatch 307 ^/$ /index.php/ + # RedirectTemp cannot be used instead + + diff --git a/app/public/apple-touch-icon.png b/app/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..11f17e6d89ee3b416218ede42b66ec1dd81507f2 GIT binary patch literal 10784 zcmWkz1yB@S9ACP-8;%mCRJxlZq&uWLq>(-vq`SL2rBgtpyFoxeqy*{a+i!06c5ZIw z?c4YM|6jdG6(w0LbaHe60I=ksQflBm@c#=H8T{VQUr_-7bV(aYNfkLsNm?hDPnI_J z769;hHAmf3C+UV*Wb?)XM@wS)tRc-l5P;BEqyE6vEyPU(OhRz+#fCy7(6tDO@Uo$r zgFy@E(42^0`LEin#J@!7MQIxF{iRti`|9U?dUEox^w71Rz5h7rHH8Di!)HqPU1$sN ztAz>)EYrj(LkCB?VemxIEks(}-(%mbkcI%@48iNOzgxZNBV64l03L8!U}wM|-hK)0 zP+`&rXcK@f2>w0>T)Z0agI(hXA@G9~s8???M+cGtz~0MO0s>TG0mqkeB1ph;MbbJ6 zuv|!4feOUH0U57k8Q{e_0b|WTHCFh(Z$N&v7=#_MuNDrb+wx8p9@dQnc*N?&8*&1LK6zw4j@FCraey{r0D=DF18l-{&>&Gr&1hETg8cDEP_Q#L=TxEp~qlQR1!R z%|89}aA?3&EX&LAREH_| zDYc+{9kcKA{|g5ng{?E|0f_luutk$&BmlTpT<^SY03fONE>7$X959hqyaNDTe@G3= zlSvf6qXK|be&FkRaTLsc!s7?Yl3JU%F)9CI>dEBFw|P zi?x^2kbn7}?>ghgg<}XyEwq~AQ8wG@`kDEx7E1N^?kn!#q?Vp~S9m>5KdOB+Y( zkTVSvo9*dvYsGP!QR(n{5K;8ynw+9Cz(>Idj!{2`;C{0YijSAoQPhzvXFR5F#_vGY zMhgyk`;8frRIc32=#76j_}NsTAznwOn&~ecHC-;_M`mmSqa-K;_DJHc5;`4Y{5v@e zIXmbYl&x63SY#I0CR>r|DBfY@=Pqg^teQ40p*0>SUODk$WMH?IP+%zHmm*prgIaMi zzC5>u=pJH8-aCnm{7Th{irjhB$_RlxJvoPb4;2pe@CpJh_e{o#EMm#AVz#1%=}a3d zn;UD61Gf&ejbLi&wCS{2yFVxg`v<|7o|sr+Si!?k(^q76WIkkNq^)Ee8H%Myb7>hr zG&q;uQDj)9H}>Z6ulsf=cm z%1#B^JaN@R1(jxJ1yAjynx|Tv%9N^6QIFA6(7hQ}V_2w6ei*b!!>si?SqvTV_jeZm zbR-sCv=EM1?b1J(>NnmUD|#S3P4#=nv+KS?)< zHR;2Kz$VJpuxMLjS>s>ByXw8#vub+cazcD^w0i39lp~hInsX)KAaLW3*1^-E+7a5Z z=00^OGG}(=b%1s?dWC(kF(Z5Ba9MOka(KFUIzz+D$%V=jPiFs?&+KeG-t3QEx=q{6 zS;%%d-k5bq!k~50j9d|O8`Ix#s~zsoBqEm8pD0bMxqe!#+XN|#%`XTkE zI$cXd%S-D@YpGgp(cp;n$YD|2UWGzC3o}a~YpkWbCaY%9BgnW;nN_?tCK{r8P7dQ8D4|}JsqvCC@fr`P3fdg$T3abLw zoC|J}Qib?2{4|d=5_N~NFJ+E--eW0yY(fQ>(zLQgyRrc*7exKu`$4A|d58c$tP1#Jji<}NW)&}*ry2pHs1w@1` z?k5irM81o_=XvLa_muWPHidiW{TKZ+{81ir9|Z5mp5ktMx4q7Z|0y9E!}Y`M!F30c z2R0$tAJiBz@{5Ij6WYd%teQnmI!>ikd^DM{&q(d~k3wk<9mR@JulYW8NwS#7Yk%C^AI;kVNN((v5~7|>24cL$dTg(G)d z;rHz`-)HY;YNWcE)$Xkqwv+rmm>kRX6w>9^jrZjXO~+4b6x|D^l~CazRo*Le{6Ix; z9+DNREZtKWQ>fa|+9ofQ_&Y}{<(h9p&`8-<5AWzPf{1;)YJ9^KI{J5g7ivv64OVi zlX$YfHB{>`|7>$M>o;aS)|mRF@=Hfe^W4^J{XAAJc($ZO@=cI7S4u_l$e3g8rCz%k zkx7cV=BaJkg1%P3YmyYBYNzV*+S_`Ww%@*Tv_#TTZ-&ai4I{>AK37&*xQbSv<-y^5V^o*11#;5Okt(I0QAUOO+~DZ2K~2{0Vf zda9{v?O9=3UF_ZP^tr$erXmvjd76CO_4UnXZM$x1zbnVtzd;*uAlAOCcf9tyjkk& zv!n8-U~*u6U}7^Pp!Ev%2 zaoV~0Ij@BO-R%Y??Ub39<>n}f3eRV(d)+8LX4o038g^SrPUVV{xcyaZHM$wO__-fv zc-G}~3Ar&{V{BEZ5v~=M^>=#OhSuqSIN-p4F#AlzW`Rfad20i#~^~TjM_C zsR3P_Q*5;G+~?$%x$x~-*>TwgdKvndxEvZ93M}&ObMwih?Xt!)f~iq|trxE&*Q))^ zr(X{WQ#y~!XBc-;Q@yob6&Eh2RTXst!}P;6U6WqI|4JWgCfEE<+fF++hr4MqUOkFE zt6a?7n+=yuE8mFh`#wK%+=N^_!1x*QKvjussvs)`y!`*k?=DLM0Gcp4DRGU@t0#sw zZW@{`&q`PssJPPrTuMK#B^mh;B6+ruzQzbkiI_!DN6SNUx z^!U182>!SjN1A=4Wx^}U;p7v;&xDe~n~VbH2Z7$6BmBXTO;9nYg*S!+bl;q>tWJqRk*lI3X;v=S9G zFf?E`#jZR?sMzL>oCD8&?M>E3j{vGMGYlRO1PHg)zCbfkjceZRKwX_}u$U%1?*eKs zI&*w2UtEI)B8~tUFR+eA`*)U8K=~hF2`nRTg_OEdz}>PUYY2+TkYos1Nh^Avp0Qjd zT`a==Kshr4I*iEmj^>g2gn*Y>H_IYO`vWHOq&;nnKQn`L5i0IUDz9L@*!zSOvQ^QPr&7aK%Bl?IavZ% znWFKK+<0yZ|A0Y^rK_rQXac~)Pk3FJfjWMeiLmuM%I3_Bi0+`g-?-&cn(mpnqH#zQ z#~2Cr@gxTbL%986x@d$cmA{AE*w;zXS96jAJm-s57dCw0L29{frc7TjWD3Cmh+ls* z?ZkaHg=0-Z-YB!FCphTn#tXcj{e^jIGe1&}M{aRQg}8-5VVy;!ViwNbO02W%#?pY{ z6uEhgkZwQS>yV4^i0*Hfr7Fqc3~#preKbPY>bKrOo#S@mz%fa6$-1kyeBW9wS&S>` z0<#ntVSafQooS?8uPYbSYP!K^c3MPsW{X6Iw?;28NsH+7ZL|(BTGg_EJrFL0*`sQw zAxd5dP~e46!Ekl-X<;km3t{1$K5a2%;yihKJjn5^i)Nh$ER=Ii>g*%jA@zfOv?Ps; z9P@6>urxv;m_2Fqu}a_`e`Cf{@_(zWsv0p7{`#Ew6)1h}kwHukPXfbXxUi~f zfP`DL>IfUMlQ1c!!y*ZoXSe!;S5mY;M(*yK|3A*ozxPjF+{@Cese2dU* z2LYEc@PUksEIB8K4f!2sy6E#Q{f9h}oZ+FNgBFLyYF#)9RW+E4$MLdwnvs8d((`U2 z*?r4zhM?AOT*zOe_QdD_c(Ep{snWy4L)yjX?Qoh|O>IL9z28?$M#}g^i0lceZ2G^8 zCk?*YUIT4~{IKGO0uNLhIo@iX9o<3F9dzccC=!lTtAH)<{T$EF5)wfc8M?Z<1_Nkq zgZQ`4PY+&sB7WJI4VVly(S(JsLZUTpd5sdK9F$m{PfYo7DQVf+W9#%=*=aAGCo3u{ zA_?%Orl$7O3_Zx;XuqeM=nuzIDeO<>;c&u-;%cntmzIVpXS^G-2|$-9M{!bM@Wa*0 zWJMrJQQUHAx8CS*4jo(*uQ0-YZ7?!2&es`< zQd#I|N1>Yf5w+DUod9|y1Inq<>Vp> z@igH6P@v^ivTm&cGY6TEG1N0|6N`Lh2=K z0!yTYGf9Bkk0;F-ij64g@|tuq{jFpP`s-lE5I!X-F84!?P9+v`60>OkyD_8ljQ3XO zx=ofdgOLOloL|2||;EZEXp2&mD_#vnyV*tCC{mc%i+J=@;O9@zPZ z*cCi@3dCn+MU9S*)=x~br(rm@Qm|_e-lTHI{NwnkRQilB@Mq9uF7~~Z6y*mqQ`67k z*i@gvit#cvg~UZgMWq*24DW0Mx9&@ZvcqvS%n*EQTDkI%03=s5z+Ztcb9JT4cqj+0 zk00=~L0K=7M4Tf`UmmZLo=S=k7u8Eoh|6Y4bMD+YyYmHLZEbw1si|SAMKUIre`cx! zUY?;!N;1B_LYbMF<&~A_qED9u9;ZKJKJ`AOrlh7878XKOYS&Jf@}|m2x>>Eib8&O` zpLonk;s}R;VB<8o?eQ?<3c-&J1p4^)n_c&nI-g-4RNm>q84mM#-cww!4Ysg>Pgz8` zD75w zFdRR(+{*?fYHsS62ZT=SZvrw0cu_hLjzOZuRkY{78t-{p*Kv*{3ekK2Ko_d!Y8pE+ewtm++?)!qQniCp0|EyLkxG6FH= ziF!Clp)9r6pvMaXBjZdqzpM2`CU>*#!t0K!MScANMkS}+x58tJ&y#vJ*doeyWV*Ki&tf-)=;kTLcP^-!y4QbE}v`r`{SmmAj`8%ZoAKF zYKawJ+FbVJB@M)?AkV*fdmHv#M9hESj!sT$;i*VUA_za84Y1Wf(2q>{VKa@Lu>6RI zGuf*a0-jpkS680`9n>w#a7P)e$={r2?aOSZj$%OiE(o@1L(wZ%^1ui1-7}(vd|e|H+_Y z0lf=oq%=jqBfu2&{5yVgyfT0#WY359@BZF9lgB~t2Zh@E_wVn1cKaY$B&Vb}+Yr0d zEsgcwAHEq7h)@sRshui}1v6)LLXQ%<+{ z4HDGux?d?EABXC3vMLR7Ahw;hi=H0&)W`^0vis#9)sDO0S!e)_pa*MRMa2vSYvLi{ ztsG1W-r(I~(p$6dXJ9>5G?Qkadi-6Nn-$cP7sQqLrIUd=i$|$bD4mM%opf(+@1XXj zQ6()aOMyzj4Ry_9y4%NdwZ(x#&X!>V>~mkRl3sgqd@wZMP6jFM7TiRA_`bc8;quLo zpSO`D-#42E+Q;m{fX6aL#P`S0_6c#srH?*rVC^Hh$9o9>zqr)G-cp0G`4R;Z@0}Q4 zczWmSV_mxU<)icLC=yyLt)FOUxNVcWUiz9hWnwAi%9L`@A#Qn7vhOX&tv^6?n9Pur z!{rc#=H;jIL`9(-OFM|*;K>;oBkt2J@zoIx4Gq2vm710BE~`V%UnImPCMSQ7jEpcK zs#WF+@q?xp2PBh(hpfOS65e+JenFB)Ac3;dOk0^ zaIX>;edumA5{UJ&7we2ZMNCHO(nsVM6a-FXaw{mH(mBI#zsDsZkzH&3q&?v#yshB@ zJdGJWo341Ijs3r^rTe))v3Y`??5O?YKYm!-1i%+r$#@fvB_7Avn%m3?5=3C0XFSz; z2l)AQ=YB9Eni)LtAlT3L>i*c`d*@PFT|GEV6TrH56$8oQq_Sg4UAFB>ZbGIqKI zY31vP8-j!gc8P4)#dcS##VT!%FEKF|F)=ZS0CikA$SQO!ENGxs;Bx*Y#p88u4$`0M z)y~6d?-aGq@!R9I);P>+e{<7N^LmjwIgYrQTk+_pKb*SCI>)x#-$GNz0$hUJZg^1S@VkDGos-_0+jHsPznFo+A#nQMI&J?dv8_6m zU`j~M_sL6rbI|VF&2S}g@vV|t{zOlthDtbf&O^9K=Ks}iwP)G z9QrE;SpztL&k)RFPDsSI&uMp=Aja2cxJ)Y$BeaeD7Tz-B+OF)5Bq6i_UcB}8Z>B4w zK{1Nm#VaC`3(h~`|7&=7*fnjeWQ|$iW(}Wt`4HYI1G|K;z54vX8Ghjg6kwXvUc`sO zQ>13uuE?;7Y<_|$Vm4Fqf<&@;G$8$#?f2Q)*$}g`7T?l(gcN-;yaogmY($W#pM|O_ zDoj9bJAS;oh<2SMH5=dg#~C+Fu*F_j%Zal;jQN-1Do6Jt^XVUS;K-rSX~I@I`Q(J$ zB)V!(vUa0sI5Oh@WyXXtY;=4d9=`a$+fi9(Q(0VtDl1=S3VFHcqk$(JME?YV<>l2e zIKY4I1Fv(#u#pweCIiJ}#egW=*sx$x@~LdyrKV2L&ujE}o_?GqxNPPNeAQK59es1O zRLA{om1o~Y1^zb9#lc+(fTeO6)t2GA(Bsg=Jn%kU?9BS)!X1_U4@oljYJv8g^?`X)g;Aw6d*T>tHk4IG3NZ@0!!EhboUhN`NG zh4yr%=j9-Qa{8kCY_VMF>3pZQs;W5H+17E{#^DMp&V;HNv}|lKvvYHDeRYshQ8P@D zJmqmWOe%r-2nqlI9aNy`^S?L^ZEX^rhtO!+#J20%cv)(-tM}+{=(p#;k>3N1pfY+DGEDG7~bgz zo4!Uvxl~nIS5-A3Wpz(Vx;ZOu#h16Kz?)pybsTA{9swh@#_iW2S_(A>PA2IYSZ9S@ zUF+C*p!Guj)LYY=r8m$52W$qsbZ>X!6A;XlDd**T{@KPkKLwH5T2{`{sU73Fo{Jg6 zLO?0voBsOsYmMG0cP-RFet!N}930HRAV06S)mHbHZ6;bAs1Dp9GmxB`s%B$TQJ^^8 z>G?@sQITQApt_$5dM*MFfNCV+o8fAdBEW{19em#$tzr&>$?U9}{aOoK#L&I3NSgt> zmYP}+*j(SlsHZKWASxmD2Xo^0XMa0S8_&;O2Hf9)yE-&DSe{B0n)RbG?28~FF>zr> zhd|;x@!}`6C zQW#(iYH>X;+6W}jzbS@&L3*1YLmjWFbiC3Oj=8AOIP=M4$@-mc=ScCCiE63tProyo zLL}fej&ow9QV5<~5enV<)O|%fg4Z7z(R=m{BNkqp&8TPn(g1+`s_Q!cvaC!yisRk8 zcJjN^<79S&#Cliva>H{|b+gA${~=`l_j0`aS)K(Ev=?wv=V#hQfg{iBnAM`x@ zC6J-6B@s|EsM4zW6&V?Me$6!?u;I0z^9U}30dsTL7lI#Q5h&E3#eRNXrREE4tAsPC zGNjScHAf$*kO~W7R!kQI^BcyR_Xl9yQx4KDIy!oJeSN&Vy!H8p!+2V5@oKBshep8owTc?c#a(X8RGA-Mf-HvMi416iCfHixVk zf?iV4#Go;o12j9e9OH3a+^gP}4B{Bv@q}NaLGVh*%ZmdIguJry@N$FMTbEsEad9!N zhzK=Um~X#>{1XDg?AF=#fQEs=cwk80|5X!D%I1U-DF%o=;kqE z^O_;46JukN4h}VxI_h=ZGJb=Y_X%XnHsi;y~)aT1}q$~2~?5e%AsGR z-a^zro2-;YjQap`J||j3_XSN*K-lpr)*SQ%JMVn|CmD`ian1JU*ae-hmYUy1iWRAN zhNn=IDZVJp55>6t-CxIkw2-V7rCVh|=kW5=uoTd?IPLyOu=KhC^R`fT0%RFBGS5EV zP2b?4prF2PkHofji$*NjG=MKVmcj^<6LcH9N5#Y}>LtfsCoo1x>kkD2ED!}_F`&a}N`zqiu`UfxOi4)zIA}KGkAYuKS2#E7IX^&uOo#x3XH%9Wvt?3~&lGE1 zodVn?-**1hgY=oQpxQuG?n@>08q_|gy)XWJh#SNvX5urOESciQ>sLWX0foNb({(z= z5h3UVznk%;9D0>MQ{hkvB;Vhha{R486u;}-!UVxgLrcr@`q?@-#v+iDMyx`!#~kRS zM3-Rm{uyZ4ud)(3Xf=^Jbj8zTt0AQ%)z#RTXykM9RjaI6Hp}?cvnZOe+O+x11sdF0 zyNqz8e1@3rT*ev0`JL}7R#hOQ#QN0aq-AJms8VWa3p>G&J%5ZX3_&RXpa4QVOBLQQ z_g{1LKAyw&RIX{_Kg>e7xwy85NQ|Te6&OYk>-Z-g$@L~r+I6wVVJ<>XBT3BeG1Ay^ zEm7YUs9PaGM}pY6lA&JB3@(Ijmz%jna_kpe?|XUBN^63LD3L(~^Gi!+D~%RxTD`>M z9BRamAI)Ruh$+_dC#Yk|NJz@K&0MB+Zgas$Uy9Ua%{C|pB~n>wsQ^Er5IH9FygPirg1*W@ujE^0Go{7+o{MT4yCIZ+ zO$=LbKLYjlR9+oLt`?;aM-SLC8+vwDTm*sF8NPs=CBkuoIAYZnj_VS^?|%G~^2o3o zKM@)bLlQDFBFD!Si%UvCISdAv{>C)EXK*gAt_6dLK}w26`SYNSP|V`_K;oRFAz{B< z5BEQcc`&P&A3B!*Dc|Vw$eoLwQoHT`{!J+^3nqdG7ggJHZ(A!xy)V#Dd-p9A<7Umd+65lHjJ4-G6!-D;w`NeZ*Ariv(;{4wlN7Q?0S8^C zt=knN7$CH0AaI9|DEKO*1U`mFGRgfV`Dq zl^eKpL_`h{7U2O~-8Vl6KysDo zI8NuhKrZ$&VOLUAELIk|lOh^`qQ{Q#e)>6{l$gjmB_FE><_|_Qvl^|Vh2kv{TcBfJ zYPv!R?Wij+&u39DB}J}Im7E790(*FuVYfH8G88%;*8T}ciZG{v5GJS4Gj(7^lYuDxZoDz>LUpt zgv<70;nnR%)(KZ5W67!Y9QJP4a6u$1K2`-UEY1N{V4~%2kS=p2wHe{0N%WP1L)J8W z_9!_OTvz#licyG_xz8^|Z^THnXD0xR0T55{YHc`}4Awh>@eblt#*b7+yHCCUn4J zO=NuXp75~+e37@XC$@~_nQTa5`*6pLWbxl|#mjz&)DCU&+W5Z-7F`^OnW^V#U6?mC z$;kj@B)$y4(OunbN!LAj1@F+J{*&x>M`RE9OwboM1Id?`992n;dW(KLzqZ{+hLx*Z zuG9IXfz(^&Sy1@=S1dxDjvX(sn-IhJ)nkEf9SWyGJHCEBwg}*pLS~fj`-0tfV6C-K zSkm*YK|)CzfWl47im%NQ!XE^4LfoJg#C^(V`WM#&0rrX+LC%y~A!1bmA0a`O<*f>L z_Oo}waL;V6zb@oMp&jsTnEtl{#LxLZKU(yWC-)0syi_!lZMAN{6#I&nJ!%!H=TeA< f!5M*n+r|-FL<1!X8KKK0Y+4-K|Ip_DgLX_ZFS}O27 zD6VZ4Vy_V55P%DwO+Snf_;2^FO_X=lLt9ZPzz)z@c~ldI{Q@#slCUp96W9qfs%tQ*oXL6(4`+eocJ>~>XTi!Tx6`NE0#k>{2Oo} ztK9}W2EBZ;)|i=(L{i>6UU}sHFa>93DOU?()OGNh>)?K^U==8P)fsB(g!Z`H)Oe2K zAL8V3c}P=UQK;p237iK()-qO$m3q1_)5Uf>)l?g3abZDzzr3uhc^8WX1k|b(vZuwUYd`2nOcXxJ?f6`A^uQ+Js>k0*)1Z4Ms zn^LJ1IeVQ{e)veSS*BUf_2AsdWHfQT>0~mg)MIP0(fZmtg+pPwU~40@=~Q74tpCV* z?ho@%#bU9aI76NxIeHwFNF*?aMWwIcY>?`WCUqU3p`BrU7P-H#KQlGy-*EQ!{qC?| zBHyTwqR}XwX|T}E>o*E#8G_CNzUOjq9hiOEpwp*$E~o3w^mcAenG2uk(7mCIUZ>~% zB=me1mhaCn;Cq#;BX2o}t+|y3?+$Lc6{R^^&pjZF^ literal 0 HcmV?d00001 diff --git a/app/public/index.php b/app/public/index.php new file mode 100644 index 0000000..3f8b90e --- /dev/null +++ b/app/public/index.php @@ -0,0 +1,30 @@ +bootEnv(dirname(__DIR__).'/.env'); + +if ($_SERVER['APP_DEBUG']) { + umask(0000); + + Debug::enable(); +} + +if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? false) { + Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST); +} + +if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? false) { + Request::setTrustedHosts([$trustedHosts]); +} + +$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); +$request = Request::createFromGlobals(); +$response = $kernel->handle($request); +$response->send(); +$kernel->terminate($request, $response); diff --git a/app/public/robots.txt b/app/public/robots.txt new file mode 100644 index 0000000..214e411 --- /dev/null +++ b/app/public/robots.txt @@ -0,0 +1,4 @@ +# www.robotstxt.org/ +# www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449 + +User-agent: * diff --git a/app/src/Command/AddUserCommand.php b/app/src/Command/AddUserCommand.php new file mode 100644 index 0000000..df35af1 --- /dev/null +++ b/app/src/Command/AddUserCommand.php @@ -0,0 +1,263 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Command; + +use App\Entity\User; +use App\Repository\UserRepository; +use App\Utils\Validator; +use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Exception\RuntimeException; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface; +use Symfony\Component\Stopwatch\Stopwatch; +use function Symfony\Component\String\u; + +/** + * A console command that creates users and stores them in the database. + * + * To use this command, open a terminal window, enter into your project + * directory and execute the following: + * + * $ php bin/console app:add-user + * + * To output detailed information, increase the command verbosity: + * + * $ php bin/console app:add-user -vv + * + * See https://symfony.com/doc/current/console.html + * + * We use the default services.yaml configuration, so command classes are registered as services. + * See https://symfony.com/doc/current/console/commands_as_services.html + * + * @author Javier Eguiluz + * @author Yonel Ceruto + */ +class AddUserCommand extends Command +{ + // to make your command lazily loaded, configure the $defaultName static property, + // so it will be instantiated only when the command is actually called. + protected static $defaultName = 'app:add-user'; + + /** + * @var SymfonyStyle + */ + private $io; + + private $entityManager; + private $passwordEncoder; + private $validator; + private $users; + + public function __construct(EntityManagerInterface $em, UserPasswordEncoderInterface $encoder, Validator $validator, UserRepository $users) + { + parent::__construct(); + + $this->entityManager = $em; + $this->passwordEncoder = $encoder; + $this->validator = $validator; + $this->users = $users; + } + + /** + * {@inheritdoc} + */ + protected function configure(): void + { + $this + ->setDescription('Creates users and stores them in the database') + ->setHelp($this->getCommandHelp()) + // commands can optionally define arguments and/or options (mandatory and optional) + // see https://symfony.com/doc/current/components/console/console_arguments.html + ->addArgument('username', InputArgument::OPTIONAL, 'The username of the new user') + ->addArgument('password', InputArgument::OPTIONAL, 'The plain password of the new user') + ->addArgument('email', InputArgument::OPTIONAL, 'The email of the new user') + ->addArgument('full-name', InputArgument::OPTIONAL, 'The full name of the new user') + ->addOption('admin', null, InputOption::VALUE_NONE, 'If set, the user is created as an administrator') + ; + } + + /** + * This optional method is the first one executed for a command after configure() + * and is useful to initialize properties based on the input arguments and options. + */ + protected function initialize(InputInterface $input, OutputInterface $output): void + { + // SymfonyStyle is an optional feature that Symfony provides so you can + // apply a consistent look to the commands of your application. + // See https://symfony.com/doc/current/console/style.html + $this->io = new SymfonyStyle($input, $output); + } + + /** + * This method is executed after initialize() and before execute(). Its purpose + * is to check if some of the options/arguments are missing and interactively + * ask the user for those values. + * + * This method is completely optional. If you are developing an internal console + * command, you probably should not implement this method because it requires + * quite a lot of work. However, if the command is meant to be used by external + * users, this method is a nice way to fall back and prevent errors. + */ + protected function interact(InputInterface $input, OutputInterface $output) + { + if (null !== $input->getArgument('username') && null !== $input->getArgument('password') && null !== $input->getArgument('email') && null !== $input->getArgument('full-name')) { + return; + } + + $this->io->title('Add User Command Interactive Wizard'); + $this->io->text([ + 'If you prefer to not use this interactive wizard, provide the', + 'arguments required by this command as follows:', + '', + ' $ php bin/console app:add-user username password email@example.com', + '', + 'Now we\'ll ask you for the value of all the missing command arguments.', + ]); + + // Ask for the username if it's not defined + $username = $input->getArgument('username'); + if (null !== $username) { + $this->io->text(' > Username: '.$username); + } else { + $username = $this->io->ask('Username', null, [$this->validator, 'validateUsername']); + $input->setArgument('username', $username); + } + + // Ask for the password if it's not defined + $password = $input->getArgument('password'); + if (null !== $password) { + $this->io->text(' > Password: '.u('*')->repeat(u($password)->length())); + } else { + $password = $this->io->askHidden('Password (your type will be hidden)', [$this->validator, 'validatePassword']); + $input->setArgument('password', $password); + } + + // Ask for the email if it's not defined + $email = $input->getArgument('email'); + if (null !== $email) { + $this->io->text(' > Email: '.$email); + } else { + $email = $this->io->ask('Email', null, [$this->validator, 'validateEmail']); + $input->setArgument('email', $email); + } + + // Ask for the full name if it's not defined + $fullName = $input->getArgument('full-name'); + if (null !== $fullName) { + $this->io->text(' > Full Name: '.$fullName); + } else { + $fullName = $this->io->ask('Full Name', null, [$this->validator, 'validateFullName']); + $input->setArgument('full-name', $fullName); + } + } + + /** + * This method is executed after interact() and initialize(). It usually + * contains the logic to execute to complete this command task. + */ + protected function execute(InputInterface $input, OutputInterface $output): int + { + $stopwatch = new Stopwatch(); + $stopwatch->start('add-user-command'); + + $username = $input->getArgument('username'); + $plainPassword = $input->getArgument('password'); + $email = $input->getArgument('email'); + $fullName = $input->getArgument('full-name'); + $isAdmin = $input->getOption('admin'); + + // make sure to validate the user data is correct + $this->validateUserData($username, $plainPassword, $email, $fullName); + + // create the user and encode its password + $user = new User(); + $user->setFullName($fullName); + $user->setUsername($username); + $user->setEmail($email); + $user->setRoles([$isAdmin ? 'ROLE_ADMIN' : 'ROLE_USER']); + + // See https://symfony.com/doc/current/security.html#c-encoding-passwords + $encodedPassword = $this->passwordEncoder->encodePassword($user, $plainPassword); + $user->setPassword($encodedPassword); + + $this->entityManager->persist($user); + $this->entityManager->flush(); + + $this->io->success(sprintf('%s was successfully created: %s (%s)', $isAdmin ? 'Administrator user' : 'User', $user->getUsername(), $user->getEmail())); + + $event = $stopwatch->stop('add-user-command'); + if ($output->isVerbose()) { + $this->io->comment(sprintf('New user database id: %d / Elapsed time: %.2f ms / Consumed memory: %.2f MB', $user->getId(), $event->getDuration(), $event->getMemory() / (1024 ** 2))); + } + + return Command::SUCCESS; + } + + private function validateUserData($username, $plainPassword, $email, $fullName): void + { + // first check if a user with the same username already exists. + $existingUser = $this->users->findOneBy(['username' => $username]); + + if (null !== $existingUser) { + throw new RuntimeException(sprintf('There is already a user registered with the "%s" username.', $username)); + } + + // validate password and email if is not this input means interactive. + $this->validator->validatePassword($plainPassword); + $this->validator->validateEmail($email); + $this->validator->validateFullName($fullName); + + // check if a user with the same email already exists. + $existingEmail = $this->users->findOneBy(['email' => $email]); + + if (null !== $existingEmail) { + throw new RuntimeException(sprintf('There is already a user registered with the "%s" email.', $email)); + } + } + + /** + * The command help is usually included in the configure() method, but when + * it's too long, it's better to define a separate method to maintain the + * code readability. + */ + private function getCommandHelp(): string + { + return <<<'HELP' +The %command.name% command creates new users and saves them in the database: + + php %command.full_name% username password email + +By default the command creates regular users. To create administrator users, +add the --admin option: + + php %command.full_name% username password email --admin + +If you omit any of the three required arguments, the command will ask you to +provide the missing values: + + # command will ask you for the email + php %command.full_name% username password + + # command will ask you for the email and password + php %command.full_name% username + + # command will ask you for all arguments + php %command.full_name% + +HELP; + } +} diff --git a/app/src/Command/DeleteUserCommand.php b/app/src/Command/DeleteUserCommand.php new file mode 100644 index 0000000..8dd3e48 --- /dev/null +++ b/app/src/Command/DeleteUserCommand.php @@ -0,0 +1,132 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Command; + +use App\Entity\User; +use App\Repository\UserRepository; +use App\Utils\Validator; +use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Exception\RuntimeException; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; + +/** + * A console command that deletes users from the database. + * + * To use this command, open a terminal window, enter into your project + * directory and execute the following: + * + * $ php bin/console app:delete-user + * + * Check out the code of the src/Command/AddUserCommand.php file for + * the full explanation about Symfony commands. + * + * See https://symfony.com/doc/current/console.html + * + * @author Oleg Voronkovich + */ +class DeleteUserCommand extends Command +{ + protected static $defaultName = 'app:delete-user'; + + /** @var SymfonyStyle */ + private $io; + private $entityManager; + private $validator; + private $users; + + public function __construct(EntityManagerInterface $em, Validator $validator, UserRepository $users) + { + parent::__construct(); + + $this->entityManager = $em; + $this->validator = $validator; + $this->users = $users; + } + + /** + * {@inheritdoc} + */ + protected function configure(): void + { + $this + ->setDescription('Deletes users from the database') + ->addArgument('username', InputArgument::REQUIRED, 'The username of an existing user') + ->setHelp(<<<'HELP' +The %command.name% command deletes users from the database: + + php %command.full_name% username + +If you omit the argument, the command will ask you to +provide the missing value: + + php %command.full_name% +HELP + ); + } + + protected function initialize(InputInterface $input, OutputInterface $output): void + { + // SymfonyStyle is an optional feature that Symfony provides so you can + // apply a consistent look to the commands of your application. + // See https://symfony.com/doc/current/console/style.html + $this->io = new SymfonyStyle($input, $output); + } + + protected function interact(InputInterface $input, OutputInterface $output) + { + if (null !== $input->getArgument('username')) { + return; + } + + $this->io->title('Delete User Command Interactive Wizard'); + $this->io->text([ + 'If you prefer to not use this interactive wizard, provide the', + 'arguments required by this command as follows:', + '', + ' $ php bin/console app:delete-user username', + '', + 'Now we\'ll ask you for the value of all the missing command arguments.', + '', + ]); + + $username = $this->io->ask('Username', null, [$this->validator, 'validateUsername']); + $input->setArgument('username', $username); + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $username = $this->validator->validateUsername($input->getArgument('username')); + + /** @var User $user */ + $user = $this->users->findOneByUsername($username); + + if (null === $user) { + throw new RuntimeException(sprintf('User with username "%s" not found.', $username)); + } + + // After an entity has been removed its in-memory state is the same + // as before the removal, except for generated identifiers. + // See https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-objects.html#removing-entities + $userId = $user->getId(); + + $this->entityManager->remove($user); + $this->entityManager->flush(); + + $this->io->success(sprintf('User "%s" (ID: %d, email: %s) was successfully deleted.', $user->getUsername(), $userId, $user->getEmail())); + + return Command::SUCCESS; + } +} diff --git a/app/src/Command/ListUsersCommand.php b/app/src/Command/ListUsersCommand.php new file mode 100644 index 0000000..a10daca --- /dev/null +++ b/app/src/Command/ListUsersCommand.php @@ -0,0 +1,146 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Command; + +use App\Entity\User; +use App\Repository\UserRepository; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\BufferedOutput; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\Mailer\MailerInterface; +use Symfony\Component\Mime\Email; + +/** + * A console command that lists all the existing users. + * + * To use this command, open a terminal window, enter into your project directory + * and execute the following: + * + * $ php bin/console app:list-users + * + * Check out the code of the src/Command/AddUserCommand.php file for + * the full explanation about Symfony commands. + * + * See https://symfony.com/doc/current/console.html + * + * @author Javier Eguiluz + */ +class ListUsersCommand extends Command +{ + // a good practice is to use the 'app:' prefix to group all your custom application commands + protected static $defaultName = 'app:list-users'; + + private $mailer; + private $emailSender; + private $users; + + public function __construct(MailerInterface $mailer, string $emailSender, UserRepository $users) + { + parent::__construct(); + + $this->mailer = $mailer; + $this->emailSender = $emailSender; + $this->users = $users; + } + + /** + * {@inheritdoc} + */ + protected function configure(): void + { + $this + ->setDescription('Lists all the existing users') + ->setHelp(<<<'HELP' +The %command.name% command lists all the users registered in the application: + + php %command.full_name% + +By default the command only displays the 50 most recent users. Set the number of +results to display with the --max-results option: + + php %command.full_name% --max-results=2000 + +In addition to displaying the user list, you can also send this information to +the email address specified in the --send-to option: + + php %command.full_name% --send-to=fabien@symfony.com + +HELP + ) + // commands can optionally define arguments and/or options (mandatory and optional) + // see https://symfony.com/doc/current/components/console/console_arguments.html + ->addOption('max-results', null, InputOption::VALUE_OPTIONAL, 'Limits the number of users listed', 50) + ->addOption('send-to', null, InputOption::VALUE_OPTIONAL, 'If set, the result is sent to the given email address') + ; + } + + /** + * This method is executed after initialize(). It usually contains the logic + * to execute to complete this command task. + */ + protected function execute(InputInterface $input, OutputInterface $output): int + { + $maxResults = $input->getOption('max-results'); + // Use ->findBy() instead of ->findAll() to allow result sorting and limiting + $allUsers = $this->users->findBy([], ['id' => 'DESC'], $maxResults); + + // Doctrine query returns an array of objects and we need an array of plain arrays + $usersAsPlainArrays = array_map(function (User $user) { + return [ + $user->getId(), + $user->getFullName(), + $user->getUsername(), + $user->getEmail(), + implode(', ', $user->getRoles()), + ]; + }, $allUsers); + + // In your console commands you should always use the regular output type, + // which outputs contents directly in the console window. However, this + // command uses the BufferedOutput type instead, to be able to get the output + // contents before displaying them. This is needed because the command allows + // to send the list of users via email with the '--send-to' option + $bufferedOutput = new BufferedOutput(); + $io = new SymfonyStyle($input, $bufferedOutput); + $io->table( + ['ID', 'Full Name', 'Username', 'Email', 'Roles'], + $usersAsPlainArrays + ); + + // instead of just displaying the table of users, store its contents in a variable + $usersAsATable = $bufferedOutput->fetch(); + $output->write($usersAsATable); + + if (null !== $email = $input->getOption('send-to')) { + $this->sendReport($usersAsATable, $email); + } + + return Command::SUCCESS; + } + + /** + * Sends the given $contents to the $recipient email address. + */ + private function sendReport(string $contents, string $recipient): void + { + $email = (new Email()) + ->from($this->emailSender) + ->to($recipient) + ->subject(sprintf('app:list-users report (%s)', date('Y-m-d H:i:s'))) + ->text($contents); + + $this->mailer->send($email); + } +} diff --git a/app/src/Controller/Admin/BlogController.php b/app/src/Controller/Admin/BlogController.php new file mode 100644 index 0000000..8454154 --- /dev/null +++ b/app/src/Controller/Admin/BlogController.php @@ -0,0 +1,177 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Controller\Admin; + +use App\Entity\Post; +use App\Form\PostType; +use App\Repository\PostRepository; +use App\Security\PostVoter; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\Form\Extension\Core\Type\SubmitType; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Annotation\Route; + +/** + * Controller used to manage blog contents in the backend. + * + * Please note that the application backend is developed manually for learning + * purposes. However, in your real Symfony application you should use any of the + * existing bundles that let you generate ready-to-use backends without effort. + * + * See http://knpbundles.com/keyword/admin + * + * @Route("/admin/post") + * @IsGranted("ROLE_ADMIN") + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +class BlogController extends AbstractController +{ + /** + * Lists all Post entities. + * + * This controller responds to two different routes with the same URL: + * * 'admin_post_index' is the route with a name that follows the same + * structure as the rest of the controllers of this class. + * * 'admin_index' is a nice shortcut to the backend homepage. This allows + * to create simpler links in the templates. Moreover, in the future we + * could move this annotation to any other controller while maintaining + * the route name and therefore, without breaking any existing link. + * + * @Route("/", methods="GET", name="admin_index") + * @Route("/", methods="GET", name="admin_post_index") + */ + public function index(PostRepository $posts): Response + { + $authorPosts = $posts->findBy(['author' => $this->getUser()], ['publishedAt' => 'DESC']); + + return $this->render('admin/blog/index.html.twig', ['posts' => $authorPosts]); + } + + /** + * Creates a new Post entity. + * + * @Route("/new", methods="GET|POST", name="admin_post_new") + * + * NOTE: the Method annotation is optional, but it's a recommended practice + * to constraint the HTTP methods each controller responds to (by default + * it responds to all methods). + */ + public function new(Request $request): Response + { + $post = new Post(); + $post->setAuthor($this->getUser()); + + // See https://symfony.com/doc/current/form/multiple_buttons.html + $form = $this->createForm(PostType::class, $post) + ->add('saveAndCreateNew', SubmitType::class); + + $form->handleRequest($request); + + // the isSubmitted() method is completely optional because the other + // isValid() method already checks whether the form is submitted. + // However, we explicitly add it to improve code readability. + // See https://symfony.com/doc/current/forms.html#processing-forms + if ($form->isSubmitted() && $form->isValid()) { + $em = $this->getDoctrine()->getManager(); + $em->persist($post); + $em->flush(); + + // Flash messages are used to notify the user about the result of the + // actions. They are deleted automatically from the session as soon + // as they are accessed. + // See https://symfony.com/doc/current/controller.html#flash-messages + $this->addFlash('success', 'post.created_successfully'); + + if ($form->get('saveAndCreateNew')->isClicked()) { + return $this->redirectToRoute('admin_post_new'); + } + + return $this->redirectToRoute('admin_post_index'); + } + + return $this->render('admin/blog/new.html.twig', [ + 'post' => $post, + 'form' => $form->createView(), + ]); + } + + /** + * Finds and displays a Post entity. + * + * @Route("/{id<\d+>}", methods="GET", name="admin_post_show") + */ + public function show(Post $post): Response + { + // This security check can also be performed + // using an annotation: @IsGranted("show", subject="post", message="Posts can only be shown to their authors.") + $this->denyAccessUnlessGranted(PostVoter::SHOW, $post, 'Posts can only be shown to their authors.'); + + return $this->render('admin/blog/show.html.twig', [ + 'post' => $post, + ]); + } + + /** + * Displays a form to edit an existing Post entity. + * + * @Route("/{id<\d+>}/edit", methods="GET|POST", name="admin_post_edit") + * @IsGranted("edit", subject="post", message="Posts can only be edited by their authors.") + */ + public function edit(Request $request, Post $post): Response + { + $form = $this->createForm(PostType::class, $post); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $this->getDoctrine()->getManager()->flush(); + + $this->addFlash('success', 'post.updated_successfully'); + + return $this->redirectToRoute('admin_post_edit', ['id' => $post->getId()]); + } + + return $this->render('admin/blog/edit.html.twig', [ + 'post' => $post, + 'form' => $form->createView(), + ]); + } + + /** + * Deletes a Post entity. + * + * @Route("/{id}/delete", methods="POST", name="admin_post_delete") + * @IsGranted("delete", subject="post") + */ + public function delete(Request $request, Post $post): Response + { + if (!$this->isCsrfTokenValid('delete', $request->request->get('token'))) { + return $this->redirectToRoute('admin_post_index'); + } + + // Delete the tags associated with this blog post. This is done automatically + // by Doctrine, except for SQLite (the database used in this application) + // because foreign key support is not enabled by default in SQLite + $post->getTags()->clear(); + + $em = $this->getDoctrine()->getManager(); + $em->remove($post); + $em->flush(); + + $this->addFlash('success', 'post.deleted_successfully'); + + return $this->redirectToRoute('admin_post_index'); + } +} diff --git a/app/src/Controller/BlogController.php b/app/src/Controller/BlogController.php new file mode 100644 index 0000000..fe7f545 --- /dev/null +++ b/app/src/Controller/BlogController.php @@ -0,0 +1,170 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Controller; + +use App\Entity\Comment; +use App\Entity\Post; +use App\Event\CommentCreatedEvent; +use App\Form\CommentType; +use App\Repository\PostRepository; +use App\Repository\TagRepository; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Annotation\Route; + +/** + * Controller used to manage blog contents in the public part of the site. + * + * @Route("/blog") + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +class BlogController extends AbstractController +{ + /** + * @Route("/", defaults={"page": "1", "_format"="html"}, methods="GET", name="blog_index") + * @Route("/rss.xml", defaults={"page": "1", "_format"="xml"}, methods="GET", name="blog_rss") + * @Route("/page/{page<[1-9]\d*>}", defaults={"_format"="html"}, methods="GET", name="blog_index_paginated") + * @Cache(smaxage="10") + * + * NOTE: For standard formats, Symfony will also automatically choose the best + * Content-Type header for the response. + * See https://symfony.com/doc/current/routing.html#special-parameters + */ + public function index(Request $request, int $page, string $_format, PostRepository $posts, TagRepository $tags): Response + { + $tag = null; + if ($request->query->has('tag')) { + $tag = $tags->findOneBy(['name' => $request->query->get('tag')]); + } + $latestPosts = $posts->findLatest($page, $tag); + + // Every template name also has two extensions that specify the format and + // engine for that template. + // See https://symfony.com/doc/current/templates.html#template-naming + return $this->render('blog/index.'.$_format.'.twig', [ + 'paginator' => $latestPosts, + 'tagName' => $tag ? $tag->getName() : null, + ]); + } + + /** + * @Route("/posts/{slug}", methods="GET", name="blog_post") + * + * NOTE: The $post controller argument is automatically injected by Symfony + * after performing a database query looking for a Post with the 'slug' + * value given in the route. + * See https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html + */ + public function postShow(Post $post): Response + { + // Symfony's 'dump()' function is an improved version of PHP's 'var_dump()' but + // it's not available in the 'prod' environment to prevent leaking sensitive information. + // It can be used both in PHP files and Twig templates, but it requires to + // have enabled the DebugBundle. Uncomment the following line to see it in action: + // + // dump($post, $this->getUser(), new \DateTime()); + + return $this->render('blog/post_show.html.twig', ['post' => $post]); + } + + /** + * @Route("/comment/{postSlug}/new", methods="POST", name="comment_new") + * @IsGranted("IS_AUTHENTICATED_FULLY") + * @ParamConverter("post", options={"mapping": {"postSlug": "slug"}}) + * + * NOTE: The ParamConverter mapping is required because the route parameter + * (postSlug) doesn't match any of the Doctrine entity properties (slug). + * See https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html#doctrine-converter + */ + public function commentNew(Request $request, Post $post, EventDispatcherInterface $eventDispatcher): Response + { + $comment = new Comment(); + $comment->setAuthor($this->getUser()); + $post->addComment($comment); + + $form = $this->createForm(CommentType::class, $comment); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $em = $this->getDoctrine()->getManager(); + $em->persist($comment); + $em->flush(); + + // When an event is dispatched, Symfony notifies it to all the listeners + // and subscribers registered to it. Listeners can modify the information + // passed in the event and they can even modify the execution flow, so + // there's no guarantee that the rest of this controller will be executed. + // See https://symfony.com/doc/current/components/event_dispatcher.html + $eventDispatcher->dispatch(new CommentCreatedEvent($comment)); + + return $this->redirectToRoute('blog_post', ['slug' => $post->getSlug()]); + } + + return $this->render('blog/comment_form_error.html.twig', [ + 'post' => $post, + 'form' => $form->createView(), + ]); + } + + /** + * This controller is called directly via the render() function in the + * blog/post_show.html.twig template. That's why it's not needed to define + * a route name for it. + * + * The "id" of the Post is passed in and then turned into a Post object + * automatically by the ParamConverter. + */ + public function commentForm(Post $post): Response + { + $form = $this->createForm(CommentType::class); + + return $this->render('blog/_comment_form.html.twig', [ + 'post' => $post, + 'form' => $form->createView(), + ]); + } + + /** + * @Route("/search", methods="GET", name="blog_search") + */ + public function search(Request $request, PostRepository $posts): Response + { + $query = $request->query->get('q', ''); + $limit = $request->query->get('l', 10); + + if (!$request->isXmlHttpRequest()) { + return $this->render('blog/search.html.twig', ['query' => $query]); + } + + $foundPosts = $posts->findBySearchQuery($query, $limit); + + $results = []; + foreach ($foundPosts as $post) { + $results[] = [ + 'title' => htmlspecialchars($post->getTitle(), ENT_COMPAT | ENT_HTML5), + 'date' => $post->getPublishedAt()->format('M d, Y'), + 'author' => htmlspecialchars($post->getAuthor()->getFullName(), ENT_COMPAT | ENT_HTML5), + 'summary' => htmlspecialchars($post->getSummary(), ENT_COMPAT | ENT_HTML5), + 'url' => $this->generateUrl('blog_post', ['slug' => $post->getSlug()]), + ]; + } + + return $this->json($results); + } +} diff --git a/app/src/Controller/SecurityController.php b/app/src/Controller/SecurityController.php new file mode 100644 index 0000000..128e92a --- /dev/null +++ b/app/src/Controller/SecurityController.php @@ -0,0 +1,69 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Controller; + +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\Security\Core\Security; +use Symfony\Component\Security\Http\Authentication\AuthenticationUtils; +use Symfony\Component\Security\Http\Util\TargetPathTrait; + +/** + * Controller used to manage the application security. + * See https://symfony.com/doc/current/security/form_login_setup.html. + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +class SecurityController extends AbstractController +{ + use TargetPathTrait; + + /** + * @Route("/login", name="security_login") + */ + public function login(Request $request, Security $security, AuthenticationUtils $helper): Response + { + // if user is already logged in, don't display the login page again + if ($security->isGranted('ROLE_USER')) { + return $this->redirectToRoute('blog_index'); + } + + // this statement solves an edge-case: if you change the locale in the login + // page, after a successful login you are redirected to a page in the previous + // locale. This code regenerates the referrer URL whenever the login page is + // browsed, to ensure that its locale is always the current one. + $this->saveTargetPath($request->getSession(), 'main', $this->generateUrl('admin_index')); + + return $this->render('security/login.html.twig', [ + // last username entered by the user (if any) + 'last_username' => $helper->getLastUsername(), + // last authentication error (if any) + 'error' => $helper->getLastAuthenticationError(), + ]); + } + + /** + * This is the route the user can use to logout. + * + * But, this will never be executed. Symfony will intercept this first + * and handle the logout automatically. See logout in config/packages/security.yaml + * + * @Route("/logout", name="security_logout") + */ + public function logout(): void + { + throw new \Exception('This should never be reached!'); + } +} diff --git a/app/src/Controller/UserController.php b/app/src/Controller/UserController.php new file mode 100644 index 0000000..0de4cd1 --- /dev/null +++ b/app/src/Controller/UserController.php @@ -0,0 +1,79 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Controller; + +use App\Form\Type\ChangePasswordType; +use App\Form\UserType; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; +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\Security\Core\Encoder\UserPasswordEncoderInterface; + +/** + * Controller used to manage current user. + * + * @Route("/profile") + * @IsGranted("ROLE_USER") + * + * @author Romain Monteil + */ +class UserController extends AbstractController +{ + /** + * @Route("/edit", methods="GET|POST", name="user_edit") + */ + public function edit(Request $request): Response + { + $user = $this->getUser(); + + $form = $this->createForm(UserType::class, $user); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $this->getDoctrine()->getManager()->flush(); + + $this->addFlash('success', 'user.updated_successfully'); + + return $this->redirectToRoute('user_edit'); + } + + return $this->render('user/edit.html.twig', [ + 'user' => $user, + 'form' => $form->createView(), + ]); + } + + /** + * @Route("/change-password", methods="GET|POST", name="user_change_password") + */ + public function changePassword(Request $request, UserPasswordEncoderInterface $encoder): Response + { + $user = $this->getUser(); + + $form = $this->createForm(ChangePasswordType::class); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $user->setPassword($encoder->encodePassword($user, $form->get('newPassword')->getData())); + + $this->getDoctrine()->getManager()->flush(); + + return $this->redirectToRoute('security_logout'); + } + + return $this->render('user/change_password.html.twig', [ + 'form' => $form->createView(), + ]); + } +} diff --git a/app/src/DataFixtures/AppFixtures.php b/app/src/DataFixtures/AppFixtures.php new file mode 100644 index 0000000..6d6aeb4 --- /dev/null +++ b/app/src/DataFixtures/AppFixtures.php @@ -0,0 +1,241 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\DataFixtures; + +use App\Entity\Comment; +use App\Entity\Post; +use App\Entity\Tag; +use App\Entity\User; +use Doctrine\Bundle\FixturesBundle\Fixture; +use Doctrine\Persistence\ObjectManager; +use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface; +use Symfony\Component\String\Slugger\SluggerInterface; +use function Symfony\Component\String\u; + +class AppFixtures extends Fixture +{ + private $passwordEncoder; + private $slugger; + + public function __construct(UserPasswordEncoderInterface $passwordEncoder, SluggerInterface $slugger) + { + $this->passwordEncoder = $passwordEncoder; + $this->slugger = $slugger; + } + + public function load(ObjectManager $manager): void + { + $this->loadUsers($manager); + $this->loadTags($manager); + $this->loadPosts($manager); + } + + private function loadUsers(ObjectManager $manager): void + { + foreach ($this->getUserData() as [$fullname, $username, $password, $email, $roles]) { + $user = new User(); + $user->setFullName($fullname); + $user->setUsername($username); + $user->setPassword($this->passwordEncoder->encodePassword($user, $password)); + $user->setEmail($email); + $user->setRoles($roles); + + $manager->persist($user); + $this->addReference($username, $user); + } + + $manager->flush(); + } + + private function loadTags(ObjectManager $manager): void + { + foreach ($this->getTagData() as $index => $name) { + $tag = new Tag(); + $tag->setName($name); + + $manager->persist($tag); + $this->addReference('tag-'.$name, $tag); + } + + $manager->flush(); + } + + private function loadPosts(ObjectManager $manager): void + { + foreach ($this->getPostData() as [$title, $slug, $summary, $content, $publishedAt, $author, $tags]) { + $post = new Post(); + $post->setTitle($title); + $post->setSlug($slug); + $post->setSummary($summary); + $post->setContent($content); + $post->setPublishedAt($publishedAt); + $post->setAuthor($author); + $post->addTag(...$tags); + + foreach (range(1, 5) as $i) { + $comment = new Comment(); + $comment->setAuthor($this->getReference('john_user')); + $comment->setContent($this->getRandomText(random_int(255, 512))); + $comment->setPublishedAt(new \DateTime('now + '.$i.'seconds')); + + $post->addComment($comment); + } + + $manager->persist($post); + } + + $manager->flush(); + } + + private function getUserData(): array + { + return [ + // $userData = [$fullname, $username, $password, $email, $roles]; + ['Jane Doe', 'jane_admin', 'kitten', 'jane_admin@symfony.com', ['ROLE_ADMIN']], + ['Tom Doe', 'tom_admin', 'kitten', 'tom_admin@symfony.com', ['ROLE_ADMIN']], + ['John Doe', 'john_user', 'kitten', 'john_user@symfony.com', ['ROLE_USER']], + ]; + } + + private function getTagData(): array + { + return [ + 'lorem', + 'ipsum', + 'consectetur', + 'adipiscing', + 'incididunt', + 'labore', + 'voluptate', + 'dolore', + 'pariatur', + ]; + } + + private function getPostData() + { + $posts = []; + foreach ($this->getPhrases() as $i => $title) { + // $postData = [$title, $slug, $summary, $content, $publishedAt, $author, $tags, $comments]; + $posts[] = [ + $title, + $this->slugger->slug($title)->lower(), + $this->getRandomText(), + $this->getPostContent(), + new \DateTime('now - '.$i.'days'), + // Ensure that the first post is written by Jane Doe to simplify tests + $this->getReference(['jane_admin', 'tom_admin'][0 === $i ? 0 : random_int(0, 1)]), + $this->getRandomTags(), + ]; + } + + return $posts; + } + + private function getPhrases(): array + { + return [ + 'Lorem ipsum dolor sit amet consectetur adipiscing elit', + 'Pellentesque vitae velit ex', + 'Mauris dapibus risus quis suscipit vulputate', + 'Eros diam egestas libero eu vulputate risus', + 'In hac habitasse platea dictumst', + 'Morbi tempus commodo mattis', + 'Ut suscipit posuere justo at vulputate', + 'Ut eleifend mauris et risus ultrices egestas', + 'Aliquam sodales odio id eleifend tristique', + 'Urna nisl sollicitudin id varius orci quam id turpis', + 'Nulla porta lobortis ligula vel egestas', + 'Curabitur aliquam euismod dolor non ornare', + 'Sed varius a risus eget aliquam', + 'Nunc viverra elit ac laoreet suscipit', + 'Pellentesque et sapien pulvinar consectetur', + 'Ubi est barbatus nix', + 'Abnobas sunt hilotaes de placidus vita', + 'Ubi est audax amicitia', + 'Eposs sunt solems de superbus fortis', + 'Vae humani generis', + 'Diatrias tolerare tanquam noster caesium', + 'Teres talis saepe tractare de camerarius flavum sensorem', + 'Silva de secundus galatae demitto quadra', + 'Sunt accentores vitare salvus flavum parses', + 'Potus sensim ad ferox abnoba', + 'Sunt seculaes transferre talis camerarius fluctuies', + 'Era brevis ratione est', + 'Sunt torquises imitari velox mirabilis medicinaes', + 'Mineralis persuadere omnes finises desiderium', + 'Bassus fatalis classiss virtualiter transferre de flavum', + ]; + } + + private function getRandomText(int $maxLength = 255): string + { + $phrases = $this->getPhrases(); + shuffle($phrases); + + do { + $text = u('. ')->join($phrases)->append('.'); + array_pop($phrases); + } while ($text->length() > $maxLength); + + return $text; + } + + private function getPostContent(): string + { + return <<<'MARKDOWN' +Lorem ipsum dolor sit amet consectetur adipisicing elit, sed do eiusmod tempor +incididunt ut labore et **dolore magna aliqua**: Duis aute irure dolor in +reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia +deserunt mollit anim id est laborum. + + * Ut enim ad minim veniam + * Quis nostrud exercitation *ullamco laboris* + * Nisi ut aliquip ex ea commodo consequat + +Praesent id fermentum lorem. Ut est lorem, fringilla at accumsan nec, euismod at +nunc. Aenean mattis sollicitudin mattis. Nullam pulvinar vestibulum bibendum. +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos +himenaeos. Fusce nulla purus, gravida ac interdum ut, blandit eget ex. Duis a +luctus dolor. + +Integer auctor massa maximus nulla scelerisque accumsan. *Aliquam ac malesuada* +ex. Pellentesque tortor magna, vulputate eu vulputate ut, venenatis ac lectus. +Praesent ut lacinia sem. Mauris a lectus eget felis mollis feugiat. Quisque +efficitur, mi ut semper pulvinar, urna urna blandit massa, eget tincidunt augue +nulla vitae est. + +Ut posuere aliquet tincidunt. Aliquam erat volutpat. **Class aptent taciti** +sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi +arcu orci, gravida eget aliquam eu, suscipit et ante. Morbi vulputate metus vel +ipsum finibus, ut dapibus massa feugiat. Vestibulum vel lobortis libero. Sed +tincidunt tellus et viverra scelerisque. Pellentesque tincidunt cursus felis. +Sed in egestas erat. + +Aliquam pulvinar interdum massa, vel ullamcorper ante consectetur eu. Vestibulum +lacinia ac enim vel placerat. Integer pulvinar magna nec dui malesuada, nec +congue nisl dictum. Donec mollis nisl tortor, at congue erat consequat a. Nam +tempus elit porta, blandit elit vel, viverra lorem. Sed sit amet tellus +tincidunt, faucibus nisl in, aliquet libero. +MARKDOWN; + } + + private function getRandomTags(): array + { + $tagNames = $this->getTagData(); + shuffle($tagNames); + $selectedTags = \array_slice($tagNames, 0, random_int(2, 4)); + + return array_map(function ($tagName) { return $this->getReference('tag-'.$tagName); }, $selectedTags); + } +} diff --git a/app/src/Entity/Comment.php b/app/src/Entity/Comment.php new file mode 100644 index 0000000..2584d0d --- /dev/null +++ b/app/src/Entity/Comment.php @@ -0,0 +1,138 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Entity; + +use Doctrine\ORM\Mapping as ORM; +use function Symfony\Component\String\u; +use Symfony\Component\Validator\Constraints as Assert; + +/** + * @ORM\Entity + * @ORM\Table(name="symfony_demo_comment") + * + * Defines the properties of the Comment entity to represent the blog comments. + * See https://symfony.com/doc/current/doctrine.html#creating-an-entity-class + * + * Tip: if you have an existing database, you can generate these entity class automatically. + * See https://symfony.com/doc/current/doctrine/reverse_engineering.html + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +class Comment +{ + /** + * @var int + * + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") + */ + private $id; + + /** + * @var Post + * + * @ORM\ManyToOne(targetEntity="Post", inversedBy="comments") + * @ORM\JoinColumn(nullable=false) + */ + private $post; + + /** + * @var string + * + * @ORM\Column(type="text") + * @Assert\NotBlank(message="comment.blank") + * @Assert\Length( + * min=5, + * minMessage="comment.too_short", + * max=10000, + * maxMessage="comment.too_long" + * ) + */ + private $content; + + /** + * @var \DateTime + * + * @ORM\Column(type="datetime") + */ + private $publishedAt; + + /** + * @var User + * + * @ORM\ManyToOne(targetEntity="App\Entity\User") + * @ORM\JoinColumn(nullable=false) + */ + private $author; + + public function __construct() + { + $this->publishedAt = new \DateTime(); + } + + /** + * @Assert\IsTrue(message="comment.is_spam") + */ + public function isLegitComment(): bool + { + $containsInvalidCharacters = null !== u($this->content)->indexOf('@'); + + return !$containsInvalidCharacters; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getContent(): ?string + { + return $this->content; + } + + public function setContent(string $content): void + { + $this->content = $content; + } + + public function getPublishedAt(): \DateTime + { + return $this->publishedAt; + } + + public function setPublishedAt(\DateTime $publishedAt): void + { + $this->publishedAt = $publishedAt; + } + + public function getAuthor(): ?User + { + return $this->author; + } + + public function setAuthor(User $author): void + { + $this->author = $author; + } + + public function getPost(): ?Post + { + return $this->post; + } + + public function setPost(Post $post): void + { + $this->post = $post; + } +} diff --git a/app/src/Entity/Post.php b/app/src/Entity/Post.php new file mode 100644 index 0000000..9c4e963 --- /dev/null +++ b/app/src/Entity/Post.php @@ -0,0 +1,226 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Entity; + +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use Doctrine\ORM\Mapping as ORM; +use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; +use Symfony\Component\Validator\Constraints as Assert; + +/** + * @ORM\Entity(repositoryClass="App\Repository\PostRepository") + * @ORM\Table(name="symfony_demo_post") + * @UniqueEntity(fields={"slug"}, errorPath="title", message="post.slug_unique") + * + * Defines the properties of the Post entity to represent the blog posts. + * + * See https://symfony.com/doc/current/doctrine.html#creating-an-entity-class + * + * Tip: if you have an existing database, you can generate these entity class automatically. + * See https://symfony.com/doc/current/doctrine/reverse_engineering.html + * + * @author Ryan Weaver + * @author Javier Eguiluz + * @author Yonel Ceruto + */ +class Post +{ + /** + * @var int + * + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") + */ + private $id; + + /** + * @var string + * + * @ORM\Column(type="string") + * @Assert\NotBlank + */ + private $title; + + /** + * @var string + * + * @ORM\Column(type="string") + */ + private $slug; + + /** + * @var string + * + * @ORM\Column(type="string") + * @Assert\NotBlank(message="post.blank_summary") + * @Assert\Length(max=255) + */ + private $summary; + + /** + * @var string + * + * @ORM\Column(type="text") + * @Assert\NotBlank(message="post.blank_content") + * @Assert\Length(min=10, minMessage="post.too_short_content") + */ + private $content; + + /** + * @var \DateTime + * + * @ORM\Column(type="datetime") + */ + private $publishedAt; + + /** + * @var User + * + * @ORM\ManyToOne(targetEntity="App\Entity\User") + * @ORM\JoinColumn(nullable=false) + */ + private $author; + + /** + * @var Comment[]|Collection + * + * @ORM\OneToMany( + * targetEntity="Comment", + * mappedBy="post", + * orphanRemoval=true, + * cascade={"persist"} + * ) + * @ORM\OrderBy({"publishedAt": "DESC"}) + */ + private $comments; + + /** + * @var Tag[]|Collection + * + * @ORM\ManyToMany(targetEntity="App\Entity\Tag", cascade={"persist"}) + * @ORM\JoinTable(name="symfony_demo_post_tag") + * @ORM\OrderBy({"name": "ASC"}) + * @Assert\Count(max="4", maxMessage="post.too_many_tags") + */ + private $tags; + + public function __construct() + { + $this->publishedAt = new \DateTime(); + $this->comments = new ArrayCollection(); + $this->tags = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getTitle(): ?string + { + return $this->title; + } + + public function setTitle(?string $title): void + { + $this->title = $title; + } + + public function getSlug(): ?string + { + return $this->slug; + } + + public function setSlug(string $slug): void + { + $this->slug = $slug; + } + + public function getContent(): ?string + { + return $this->content; + } + + public function setContent(?string $content): void + { + $this->content = $content; + } + + public function getPublishedAt(): \DateTime + { + return $this->publishedAt; + } + + public function setPublishedAt(\DateTime $publishedAt): void + { + $this->publishedAt = $publishedAt; + } + + public function getAuthor(): ?User + { + return $this->author; + } + + public function setAuthor(User $author): void + { + $this->author = $author; + } + + public function getComments(): Collection + { + return $this->comments; + } + + public function addComment(Comment $comment): void + { + $comment->setPost($this); + if (!$this->comments->contains($comment)) { + $this->comments->add($comment); + } + } + + public function removeComment(Comment $comment): void + { + $this->comments->removeElement($comment); + } + + public function getSummary(): ?string + { + return $this->summary; + } + + public function setSummary(?string $summary): void + { + $this->summary = $summary; + } + + public function addTag(Tag ...$tags): void + { + foreach ($tags as $tag) { + if (!$this->tags->contains($tag)) { + $this->tags->add($tag); + } + } + } + + public function removeTag(Tag $tag): void + { + $this->tags->removeElement($tag); + } + + public function getTags(): Collection + { + return $this->tags; + } +} diff --git a/app/src/Entity/Tag.php b/app/src/Entity/Tag.php new file mode 100644 index 0000000..11e29df --- /dev/null +++ b/app/src/Entity/Tag.php @@ -0,0 +1,75 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Entity; + +use Doctrine\ORM\Mapping as ORM; + +/** + * @ORM\Entity() + * @ORM\Table(name="symfony_demo_tag") + * + * Defines the properties of the Tag entity to represent the post tags. + * + * See https://symfony.com/doc/current/doctrine.html#creating-an-entity-class + * + * @author Yonel Ceruto + */ +class Tag implements \JsonSerializable +{ + /** + * @var int + * + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") + */ + private $id; + + /** + * @var string + * + * @ORM\Column(type="string", unique=true) + */ + private $name; + + public function getId(): ?int + { + return $this->id; + } + + public function setName(string $name): void + { + $this->name = $name; + } + + public function getName(): ?string + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize(): string + { + // This entity implements JsonSerializable (http://php.net/manual/en/class.jsonserializable.php) + // so this method is used to customize its JSON representation when json_encode() + // is called, for example in tags|json_encode (templates/form/fields.html.twig) + + return $this->name; + } + + public function __toString(): string + { + return $this->name; + } +} diff --git a/app/src/Entity/User.php b/app/src/Entity/User.php new file mode 100644 index 0000000..8e696ed --- /dev/null +++ b/app/src/Entity/User.php @@ -0,0 +1,188 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Entity; + +use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Security\Core\User\UserInterface; +use Symfony\Component\Validator\Constraints as Assert; + +/** + * @ORM\Entity(repositoryClass="App\Repository\UserRepository") + * @ORM\Table(name="symfony_demo_user") + * + * Defines the properties of the User entity to represent the application users. + * See https://symfony.com/doc/current/doctrine.html#creating-an-entity-class + * + * Tip: if you have an existing database, you can generate these entity class automatically. + * See https://symfony.com/doc/current/doctrine/reverse_engineering.html + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +class User implements UserInterface, \Serializable +{ + /** + * @var int + * + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") + */ + private $id; + + /** + * @var string + * + * @ORM\Column(type="string") + * @Assert\NotBlank() + */ + private $fullName; + + /** + * @var string + * + * @ORM\Column(type="string", unique=true) + * @Assert\NotBlank() + * @Assert\Length(min=2, max=50) + */ + private $username; + + /** + * @var string + * + * @ORM\Column(type="string", unique=true) + * @Assert\Email() + */ + private $email; + + /** + * @var string + * + * @ORM\Column(type="string") + */ + private $password; + + /** + * @var array + * + * @ORM\Column(type="json") + */ + private $roles = []; + + public function getId(): ?int + { + return $this->id; + } + + public function setFullName(string $fullName): void + { + $this->fullName = $fullName; + } + + public function getFullName(): ?string + { + return $this->fullName; + } + + public function getUsername(): ?string + { + return $this->username; + } + + public function setUsername(string $username): void + { + $this->username = $username; + } + + public function getEmail(): ?string + { + return $this->email; + } + + public function setEmail(string $email): void + { + $this->email = $email; + } + + public function getPassword(): ?string + { + return $this->password; + } + + public function setPassword(string $password): void + { + $this->password = $password; + } + + /** + * Returns the roles or permissions granted to the user for security. + */ + public function getRoles(): array + { + $roles = $this->roles; + + // guarantees that a user always has at least one role for security + if (empty($roles)) { + $roles[] = 'ROLE_USER'; + } + + return array_unique($roles); + } + + public function setRoles(array $roles): void + { + $this->roles = $roles; + } + + /** + * Returns the salt that was originally used to encode the password. + * + * {@inheritdoc} + */ + public function getSalt(): ?string + { + // We're using bcrypt in security.yaml to encode the password, so + // the salt value is built-in and and you don't have to generate one + // See https://en.wikipedia.org/wiki/Bcrypt + + return null; + } + + /** + * Removes sensitive data from the user. + * + * {@inheritdoc} + */ + public function eraseCredentials(): void + { + // if you had a plainPassword property, you'd nullify it here + // $this->plainPassword = null; + } + + /** + * {@inheritdoc} + */ + public function serialize(): string + { + // add $this->salt too if you don't use Bcrypt or Argon2i + return serialize([$this->id, $this->username, $this->password]); + } + + /** + * {@inheritdoc} + */ + public function unserialize($serialized): void + { + // add $this->salt too if you don't use Bcrypt or Argon2i + [$this->id, $this->username, $this->password] = unserialize($serialized, ['allowed_classes' => false]); + } +} diff --git a/app/src/Event/CommentCreatedEvent.php b/app/src/Event/CommentCreatedEvent.php new file mode 100644 index 0000000..97360dc --- /dev/null +++ b/app/src/Event/CommentCreatedEvent.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Event; + +use App\Entity\Comment; +use Symfony\Contracts\EventDispatcher\Event; + +class CommentCreatedEvent extends Event +{ + protected $comment; + + public function __construct(Comment $comment) + { + $this->comment = $comment; + } + + public function getComment(): Comment + { + return $this->comment; + } +} diff --git a/app/src/EventSubscriber/CheckRequirementsSubscriber.php b/app/src/EventSubscriber/CheckRequirementsSubscriber.php new file mode 100644 index 0000000..aada2be --- /dev/null +++ b/app/src/EventSubscriber/CheckRequirementsSubscriber.php @@ -0,0 +1,101 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\EventSubscriber; + +use Doctrine\DBAL\Exception\DriverException; +use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\Console\ConsoleEvents; +use Symfony\Component\Console\Event\ConsoleErrorEvent; +use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; +use Symfony\Component\HttpKernel\KernelEvents; + +/** + * This application uses by default an SQLite database to store its information. + * That's why the 'sqlite3' extension must be enabled in PHP. This event + * subscriber listens to console events and in case of an exception caused by + * a disabled 'sqlite3' extension, it displays a meaningful error message. + * + * @author Javier Eguiluz + */ +class CheckRequirementsSubscriber implements EventSubscriberInterface +{ + private $entityManager; + + public function __construct(EntityManagerInterface $entityManager) + { + $this->entityManager = $entityManager; + } + + // Event Subscribers must define this method to declare the events they + // listen to. You can listen to several events, execute more than one method + // for each event and set the priority of each event too. + // See https://symfony.com/doc/current/event_dispatcher.html#creating-an-event-subscriber + public static function getSubscribedEvents(): array + { + return [ + // Errors are one of the events defined by the Console. See the + // rest here: https://symfony.com/doc/current/components/console/events.html + ConsoleEvents::ERROR => 'handleConsoleError', + // See: https://symfony.com/doc/current/components/http_kernel.html#component-http-kernel-event-table + KernelEvents::EXCEPTION => 'handleKernelException', + ]; + } + + /** + * This method checks if there has been an error in a command related to + * the database and then, it checks if the 'sqlite3' PHP extension is enabled + * or not to display a better error message. + */ + public function handleConsoleError(ConsoleErrorEvent $event): void + { + $commandNames = ['doctrine:fixtures:load', 'doctrine:database:create', 'doctrine:schema:create', 'doctrine:database:drop']; + + if ($event->getCommand() && \in_array($event->getCommand()->getName(), $commandNames, true)) { + if ($this->isSQLitePlatform() && !\extension_loaded('sqlite3')) { + $io = new SymfonyStyle($event->getInput(), $event->getOutput()); + $io->error('This command requires to have the "sqlite3" PHP extension enabled because, by default, the Symfony Demo application uses SQLite to store its information.'); + } + } + } + + /** + * This method checks if the triggered exception is related to the database + * and then, it checks if the required 'sqlite3' PHP extension is enabled. + */ + public function handleKernelException(ExceptionEvent $event): void + { + $exception = $event->getThrowable(); + // Since any exception thrown during a Twig template rendering is wrapped + // in a Twig_Error_Runtime, we must get the original exception. + $previousException = $exception->getPrevious(); + + // Driver exception may happen in controller or in twig template rendering + $isDriverException = ($exception instanceof DriverException || $previousException instanceof DriverException); + + // Check if SQLite is enabled + if ($isDriverException && $this->isSQLitePlatform() && !\extension_loaded('sqlite3')) { + $event->setThrowable(new \Exception('PHP extension "sqlite3" must be enabled because, by default, the Symfony Demo application uses SQLite to store its information.')); + } + } + + /** + * Checks if the application is using SQLite as its database. + */ + private function isSQLitePlatform(): bool + { + $databasePlatform = $this->entityManager->getConnection()->getDatabasePlatform(); + + return $databasePlatform ? 'sqlite' === $databasePlatform->getName() : false; + } +} diff --git a/app/src/EventSubscriber/CommentNotificationSubscriber.php b/app/src/EventSubscriber/CommentNotificationSubscriber.php new file mode 100644 index 0000000..07675e7 --- /dev/null +++ b/app/src/EventSubscriber/CommentNotificationSubscriber.php @@ -0,0 +1,79 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\EventSubscriber; + +use App\Entity\Comment; +use App\Event\CommentCreatedEvent; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\Mailer\MailerInterface; +use Symfony\Component\Mime\Email; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; + +/** + * Notifies post's author about new comments. + * + * @author Oleg Voronkovich + */ +class CommentNotificationSubscriber implements EventSubscriberInterface +{ + private $mailer; + private $translator; + private $urlGenerator; + private $sender; + + public function __construct(MailerInterface $mailer, UrlGeneratorInterface $urlGenerator, TranslatorInterface $translator, string $sender) + { + $this->mailer = $mailer; + $this->urlGenerator = $urlGenerator; + $this->translator = $translator; + $this->sender = $sender; + } + + public static function getSubscribedEvents(): array + { + return [ + CommentCreatedEvent::class => 'onCommentCreated', + ]; + } + + public function onCommentCreated(CommentCreatedEvent $event): void + { + /** @var Comment $comment */ + $comment = $event->getComment(); + $post = $comment->getPost(); + + $linkToPost = $this->urlGenerator->generate('blog_post', [ + 'slug' => $post->getSlug(), + '_fragment' => 'comment_'.$comment->getId(), + ], UrlGeneratorInterface::ABSOLUTE_URL); + + $subject = $this->translator->trans('notification.comment_created'); + $body = $this->translator->trans('notification.comment_created.description', [ + '%title%' => $post->getTitle(), + '%link%' => $linkToPost, + ]); + + // See https://symfony.com/doc/current/mailer.html + $email = (new Email()) + ->from($this->sender) + ->to($post->getAuthor()->getEmail()) + ->subject($subject) + ->html($body) + ; + + // In config/packages/dev/mailer.yaml the delivery of messages is disabled. + // That's why in the development environment you won't actually receive any email. + // However, you can inspect the contents of those unsent emails using the debug toolbar. + $this->mailer->send($email); + } +} diff --git a/app/src/EventSubscriber/ControllerSubscriber.php b/app/src/EventSubscriber/ControllerSubscriber.php new file mode 100644 index 0000000..1e68a59 --- /dev/null +++ b/app/src/EventSubscriber/ControllerSubscriber.php @@ -0,0 +1,51 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\EventSubscriber; + +use App\Twig\SourceCodeExtension; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpKernel\Event\ControllerEvent; +use Symfony\Component\HttpKernel\KernelEvents; + +/** + * Defines the method that 'listens' to the 'kernel.controller' event, which is + * triggered whenever a controller is executed in the application. + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +class ControllerSubscriber implements EventSubscriberInterface +{ + private $twigExtension; + + public function __construct(SourceCodeExtension $twigExtension) + { + $this->twigExtension = $twigExtension; + } + + public static function getSubscribedEvents(): array + { + return [ + KernelEvents::CONTROLLER => 'registerCurrentController', + ]; + } + + public function registerCurrentController(ControllerEvent $event): void + { + // this check is needed because in Symfony a request can perform any + // number of sub-requests. See + // https://symfony.com/doc/current/components/http_kernel.html#sub-requests + if ($event->isMasterRequest()) { + $this->twigExtension->setController($event->getController()); + } + } +} diff --git a/app/src/EventSubscriber/RedirectToPreferredLocaleSubscriber.php b/app/src/EventSubscriber/RedirectToPreferredLocaleSubscriber.php new file mode 100644 index 0000000..d5434dd --- /dev/null +++ b/app/src/EventSubscriber/RedirectToPreferredLocaleSubscriber.php @@ -0,0 +1,86 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\EventSubscriber; + +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpFoundation\RedirectResponse; +use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\KernelEvents; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use function Symfony\Component\String\u; + +/** + * When visiting the homepage, this listener redirects the user to the most + * appropriate localized version according to the browser settings. + * + * See https://symfony.com/doc/current/components/http_kernel.html#the-kernel-request-event + * + * @author Oleg Voronkovich + */ +class RedirectToPreferredLocaleSubscriber implements EventSubscriberInterface +{ + private $urlGenerator; + private $locales; + private $defaultLocale; + + public function __construct(UrlGeneratorInterface $urlGenerator, string $locales, string $defaultLocale = null) + { + $this->urlGenerator = $urlGenerator; + + $this->locales = explode('|', trim($locales)); + if (empty($this->locales)) { + throw new \UnexpectedValueException('The list of supported locales must not be empty.'); + } + + $this->defaultLocale = $defaultLocale ?: $this->locales[0]; + + if (!\in_array($this->defaultLocale, $this->locales, true)) { + throw new \UnexpectedValueException(sprintf('The default locale ("%s") must be one of "%s".', $this->defaultLocale, $locales)); + } + + // Add the default locale at the first position of the array, + // because Symfony\HttpFoundation\Request::getPreferredLanguage + // returns the first element when no an appropriate language is found + array_unshift($this->locales, $this->defaultLocale); + $this->locales = array_unique($this->locales); + } + + public static function getSubscribedEvents(): array + { + return [ + KernelEvents::REQUEST => 'onKernelRequest', + ]; + } + + public function onKernelRequest(RequestEvent $event): void + { + $request = $event->getRequest(); + + // Ignore sub-requests and all URLs but the homepage + if (!$event->isMasterRequest() || '/' !== $request->getPathInfo()) { + return; + } + // Ignore requests from referrers with the same HTTP host in order to prevent + // changing language for users who possibly already selected it for this application. + $referrer = $request->headers->get('referer'); + if (null !== $referrer && u($referrer)->ignoreCase()->startsWith($request->getSchemeAndHttpHost())) { + return; + } + + $preferredLanguage = $request->getPreferredLanguage($this->locales); + + if ($preferredLanguage !== $this->defaultLocale) { + $response = new RedirectResponse($this->urlGenerator->generate('homepage', ['_locale' => $preferredLanguage])); + $event->setResponse($response); + } + } +} diff --git a/app/src/Form/CommentType.php b/app/src/Form/CommentType.php new file mode 100644 index 0000000..38ad43c --- /dev/null +++ b/app/src/Form/CommentType.php @@ -0,0 +1,59 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Form; + +use App\Entity\Comment; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\TextareaType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\OptionsResolver\OptionsResolver; + +/** + * Defines the form used to create and manipulate blog comments. Although in this + * case the form is trivial and we could build it inside the controller, a good + * practice is to always define your forms as classes. + * + * See https://symfony.com/doc/current/forms.html#creating-form-classes + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +class CommentType extends AbstractType +{ + /** + * {@inheritdoc} + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + // By default, form fields include the 'required' attribute, which enables + // the client-side form validation. This means that you can't test the + // server-side validation errors from the browser. To temporarily disable + // this validation, set the 'required' attribute to 'false': + // $builder->add('content', null, ['required' => false]); + + $builder + ->add('content', TextareaType::class, [ + 'help' => 'help.comment_content', + ]) + ; + } + + /** + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Comment::class, + ]); + } +} diff --git a/app/src/Form/DataTransformer/TagArrayToStringTransformer.php b/app/src/Form/DataTransformer/TagArrayToStringTransformer.php new file mode 100644 index 0000000..9538e12 --- /dev/null +++ b/app/src/Form/DataTransformer/TagArrayToStringTransformer.php @@ -0,0 +1,79 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Form\DataTransformer; + +use App\Entity\Tag; +use App\Repository\TagRepository; +use Symfony\Component\Form\DataTransformerInterface; +use function Symfony\Component\String\u; + +/** + * This data transformer is used to translate the array of tags into a comma separated format + * that can be displayed and managed by Bootstrap-tagsinput js plugin (and back on submit). + * + * See https://symfony.com/doc/current/form/data_transformers.html + * + * @author Yonel Ceruto + * @author Jonathan Boyer + */ +class TagArrayToStringTransformer implements DataTransformerInterface +{ + private $tags; + + public function __construct(TagRepository $tags) + { + $this->tags = $tags; + } + + /** + * {@inheritdoc} + */ + public function transform($tags): string + { + // The value received is an array of Tag objects generated with + // Symfony\Bridge\Doctrine\Form\DataTransformer\CollectionToArrayTransformer::transform() + // The value returned is a string that concatenates the string representation of those objects + + /* @var Tag[] $tags */ + return implode(',', $tags); + } + + /** + * {@inheritdoc} + */ + public function reverseTransform($string): array + { + if (null === $string || u($string)->isEmpty()) { + return []; + } + + $names = array_filter(array_unique(array_map('trim', u($string)->split(',')))); + + // Get the current tags and find the new ones that should be created. + $tags = $this->tags->findBy([ + 'name' => $names, + ]); + $newNames = array_diff($names, $tags); + foreach ($newNames as $name) { + $tag = new Tag(); + $tag->setName($name); + $tags[] = $tag; + + // There's no need to persist these new tags because Doctrine does that automatically + // thanks to the cascade={"persist"} option in the App\Entity\Post::$tags property. + } + + // Return an array of tags to transform them back into a Doctrine Collection. + // See Symfony\Bridge\Doctrine\Form\DataTransformer\CollectionToArrayTransformer::reverseTransform() + return $tags; + } +} diff --git a/app/src/Form/PostType.php b/app/src/Form/PostType.php new file mode 100644 index 0000000..3f52e09 --- /dev/null +++ b/app/src/Form/PostType.php @@ -0,0 +1,100 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Form; + +use App\Entity\Post; +use App\Form\Type\DateTimePickerType; +use App\Form\Type\TagsInputType; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\TextareaType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\Form\FormEvent; +use Symfony\Component\Form\FormEvents; +use Symfony\Component\OptionsResolver\OptionsResolver; +use Symfony\Component\String\Slugger\SluggerInterface; + +/** + * Defines the form used to create and manipulate blog posts. + * + * @author Ryan Weaver + * @author Javier Eguiluz + * @author Yonel Ceruto + */ +class PostType extends AbstractType +{ + private $slugger; + + // Form types are services, so you can inject other services in them if needed + public function __construct(SluggerInterface $slugger) + { + $this->slugger = $slugger; + } + + /** + * {@inheritdoc} + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + // For the full reference of options defined by each form field type + // see https://symfony.com/doc/current/reference/forms/types.html + + // By default, form fields include the 'required' attribute, which enables + // the client-side form validation. This means that you can't test the + // server-side validation errors from the browser. To temporarily disable + // this validation, set the 'required' attribute to 'false': + // $builder->add('title', null, ['required' => false, ...]); + + $builder + ->add('title', null, [ + 'attr' => ['autofocus' => true], + 'label' => 'label.title', + ]) + ->add('summary', TextareaType::class, [ + 'help' => 'help.post_summary', + 'label' => 'label.summary', + ]) + ->add('content', null, [ + 'attr' => ['rows' => 20], + 'help' => 'help.post_content', + 'label' => 'label.content', + ]) + ->add('publishedAt', DateTimePickerType::class, [ + 'label' => 'label.published_at', + 'help' => 'help.post_publication', + ]) + ->add('tags', TagsInputType::class, [ + 'label' => 'label.tags', + 'required' => false, + ]) + // form events let you modify information or fields at different steps + // of the form handling process. + // See https://symfony.com/doc/current/form/events.html + ->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) { + /** @var Post */ + $post = $event->getData(); + if (null !== $postTitle = $post->getTitle()) { + $post->setSlug($this->slugger->slug($postTitle)->lower()); + } + }) + ; + } + + /** + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Post::class, + ]); + } +} diff --git a/app/src/Form/Type/ChangePasswordType.php b/app/src/Form/Type/ChangePasswordType.php new file mode 100644 index 0000000..fbee1a7 --- /dev/null +++ b/app/src/Form/Type/ChangePasswordType.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Form\Type; + +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\PasswordType; +use Symfony\Component\Form\Extension\Core\Type\RepeatedType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\Security\Core\Validator\Constraints\UserPassword; +use Symfony\Component\Validator\Constraints\Length; +use Symfony\Component\Validator\Constraints\NotBlank; + +/** + * Defines the custom form field type used to change user's password. + * + * @author Romain Monteil + */ +class ChangePasswordType extends AbstractType +{ + /** + * {@inheritdoc} + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('currentPassword', PasswordType::class, [ + 'constraints' => [ + new UserPassword(), + ], + 'label' => 'label.current_password', + 'attr' => [ + 'autocomplete' => 'off', + ], + ]) + ->add('newPassword', RepeatedType::class, [ + 'type' => PasswordType::class, + 'constraints' => [ + new NotBlank(), + new Length([ + 'min' => 5, + 'max' => 128, + ]), + ], + 'first_options' => [ + 'label' => 'label.new_password', + ], + 'second_options' => [ + 'label' => 'label.new_password_confirm', + ], + ]) + ; + } +} diff --git a/app/src/Form/Type/DateTimePickerType.php b/app/src/Form/Type/DateTimePickerType.php new file mode 100644 index 0000000..59aca6c --- /dev/null +++ b/app/src/Form/Type/DateTimePickerType.php @@ -0,0 +1,68 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Form\Type; + +use App\Utils\MomentFormatConverter; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\DateTimeType; +use Symfony\Component\Form\FormInterface; +use Symfony\Component\Form\FormView; +use Symfony\Component\OptionsResolver\OptionsResolver; +use function Symfony\Component\String\u; + +/** + * Defines the custom form field type used to manipulate datetime values across + * Bootstrap Date\Time Picker javascript plugin. + * + * See https://symfony.com/doc/current/form/create_custom_field_type.html + * + * @author Yonel Ceruto + */ +class DateTimePickerType extends AbstractType +{ + private $formatConverter; + + public function __construct(MomentFormatConverter $converter) + { + $this->formatConverter = $converter; + } + + /** + * {@inheritdoc} + */ + public function buildView(FormView $view, FormInterface $form, array $options): void + { + $view->vars['attr']['data-date-format'] = $this->formatConverter->convert($options['format']); + $view->vars['attr']['data-date-locale'] = u(\Locale::getDefault())->replace('_', '-')->lower(); + } + + /** + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'widget' => 'single_text', + // if true, the browser will display the native date picker widget + // however, this app uses a custom JavaScript widget, so it must be set to false + 'html5' => false, + ]); + } + + /** + * {@inheritdoc} + */ + public function getParent(): ?string + { + return DateTimeType::class; + } +} diff --git a/app/src/Form/Type/TagsInputType.php b/app/src/Form/Type/TagsInputType.php new file mode 100644 index 0000000..5cc4b4e --- /dev/null +++ b/app/src/Form/Type/TagsInputType.php @@ -0,0 +1,70 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Form\Type; + +use App\Form\DataTransformer\TagArrayToStringTransformer; +use App\Repository\TagRepository; +use Symfony\Bridge\Doctrine\Form\DataTransformer\CollectionToArrayTransformer; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\Form\FormInterface; +use Symfony\Component\Form\FormView; + +/** + * Defines the custom form field type used to manipulate tags values across + * Bootstrap-tagsinput javascript plugin. + * + * See https://symfony.com/doc/current/form/create_custom_field_type.html + * + * @author Yonel Ceruto + */ +class TagsInputType extends AbstractType +{ + private $tags; + + public function __construct(TagRepository $tags) + { + $this->tags = $tags; + } + + /** + * {@inheritdoc} + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + // The Tag collection must be transformed into a comma separated string. + // We could create a custom transformer to do Collection <-> string in one step, + // but here we're doing the transformation in two steps (Collection <-> array <-> string) + // and reuse the existing CollectionToArrayTransformer. + ->addModelTransformer(new CollectionToArrayTransformer(), true) + ->addModelTransformer(new TagArrayToStringTransformer($this->tags), true) + ; + } + + /** + * {@inheritdoc} + */ + public function buildView(FormView $view, FormInterface $form, array $options): void + { + $view->vars['tags'] = $this->tags->findAll(); + } + + /** + * {@inheritdoc} + */ + public function getParent(): ?string + { + return TextType::class; + } +} diff --git a/app/src/Form/UserType.php b/app/src/Form/UserType.php new file mode 100644 index 0000000..835d6ad --- /dev/null +++ b/app/src/Form/UserType.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Form; + +use App\Entity\User; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\EmailType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\OptionsResolver\OptionsResolver; + +/** + * Defines the form used to edit an user. + * + * @author Romain Monteil + */ +class UserType extends AbstractType +{ + /** + * {@inheritdoc} + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + // For the full reference of options defined by each form field type + // see https://symfony.com/doc/current/reference/forms/types.html + + // By default, form fields include the 'required' attribute, which enables + // the client-side form validation. This means that you can't test the + // server-side validation errors from the browser. To temporarily disable + // this validation, set the 'required' attribute to 'false': + // $builder->add('title', null, ['required' => false, ...]); + + $builder + ->add('username', TextType::class, [ + 'label' => 'label.username', + 'disabled' => true, + ]) + ->add('fullName', TextType::class, [ + 'label' => 'label.fullname', + ]) + ->add('email', EmailType::class, [ + 'label' => 'label.email', + ]) + ; + } + + /** + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => User::class, + ]); + } +} diff --git a/app/src/Kernel.php b/app/src/Kernel.php new file mode 100644 index 0000000..f36b8bc --- /dev/null +++ b/app/src/Kernel.php @@ -0,0 +1,47 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App; + +use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait; +use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; +use Symfony\Component\HttpKernel\Kernel as BaseKernel; +use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator; + +class Kernel extends BaseKernel +{ + use MicroKernelTrait; + + protected function configureContainer(ContainerConfigurator $container): void + { + $container->import('../config/{packages}/*.yaml'); + $container->import('../config/{packages}/'.$this->environment.'/*.yaml'); + + if (is_file(\dirname(__DIR__).'/config/services.yaml')) { + $container->import('../config/services.yaml'); + $container->import('../config/{services}_'.$this->environment.'.yaml'); + } elseif (is_file($path = \dirname(__DIR__).'/config/services.php')) { + (require $path)($container->withPath($path), $this); + } + } + + protected function configureRoutes(RoutingConfigurator $routes): void + { + $routes->import('../config/{routes}/'.$this->environment.'/*.yaml'); + $routes->import('../config/{routes}/*.yaml'); + + if (is_file(\dirname(__DIR__).'/config/routes.yaml')) { + $routes->import('../config/routes.yaml'); + } elseif (is_file($path = \dirname(__DIR__).'/config/routes.php')) { + (require $path)($routes->withPath($path), $this); + } + } +} diff --git a/app/src/Pagination/Paginator.php b/app/src/Pagination/Paginator.php new file mode 100644 index 0000000..d308dc4 --- /dev/null +++ b/app/src/Pagination/Paginator.php @@ -0,0 +1,117 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Pagination; + +use Doctrine\ORM\QueryBuilder as DoctrineQueryBuilder; +use Doctrine\ORM\Tools\Pagination\CountWalker; +use Doctrine\ORM\Tools\Pagination\Paginator as DoctrinePaginator; + +/** + * @author Javier Eguiluz + */ +class Paginator +{ + /** + * Use constants to define configuration options that rarely change instead + * of specifying them under parameters section in config/services.yaml file. + * + * See https://symfony.com/doc/current/best_practices.html#use-constants-to-define-options-that-rarely-change + */ + public const PAGE_SIZE = 10; + + private $queryBuilder; + private $currentPage; + private $pageSize; + private $results; + private $numResults; + + public function __construct(DoctrineQueryBuilder $queryBuilder, int $pageSize = self::PAGE_SIZE) + { + $this->queryBuilder = $queryBuilder; + $this->pageSize = $pageSize; + } + + public function paginate(int $page = 1): self + { + $this->currentPage = max(1, $page); + $firstResult = ($this->currentPage - 1) * $this->pageSize; + + $query = $this->queryBuilder + ->setFirstResult($firstResult) + ->setMaxResults($this->pageSize) + ->getQuery(); + + if (0 === \count($this->queryBuilder->getDQLPart('join'))) { + $query->setHint(CountWalker::HINT_DISTINCT, false); + } + + $paginator = new DoctrinePaginator($query, true); + + $useOutputWalkers = \count($this->queryBuilder->getDQLPart('having') ?: []) > 0; + $paginator->setUseOutputWalkers($useOutputWalkers); + + $this->results = $paginator->getIterator(); + $this->numResults = $paginator->count(); + + return $this; + } + + public function getCurrentPage(): int + { + return $this->currentPage; + } + + public function getLastPage(): int + { + return (int) ceil($this->numResults / $this->pageSize); + } + + public function getPageSize(): int + { + return $this->pageSize; + } + + public function hasPreviousPage(): bool + { + return $this->currentPage > 1; + } + + public function getPreviousPage(): int + { + return max(1, $this->currentPage - 1); + } + + public function hasNextPage(): bool + { + return $this->currentPage < $this->getLastPage(); + } + + public function getNextPage(): int + { + return min($this->getLastPage(), $this->currentPage + 1); + } + + public function hasToPaginate(): bool + { + return $this->numResults > $this->pageSize; + } + + public function getNumResults(): int + { + return $this->numResults; + } + + public function getResults(): \Traversable + { + return $this->results; + } +} diff --git a/app/src/Repository/PostRepository.php b/app/src/Repository/PostRepository.php new file mode 100644 index 0000000..d5e3474 --- /dev/null +++ b/app/src/Repository/PostRepository.php @@ -0,0 +1,97 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Repository; + +use App\Entity\Post; +use App\Entity\Tag; +use App\Pagination\Paginator; +use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\Persistence\ManagerRegistry; +use function Symfony\Component\String\u; + +/** + * This custom Doctrine repository contains some methods which are useful when + * querying for blog post information. + * + * See https://symfony.com/doc/current/doctrine.html#querying-for-objects-the-repository + * + * @author Ryan Weaver + * @author Javier Eguiluz + * @author Yonel Ceruto + */ +class PostRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Post::class); + } + + public function findLatest(int $page = 1, Tag $tag = null): Paginator + { + $qb = $this->createQueryBuilder('p') + ->addSelect('a', 't') + ->innerJoin('p.author', 'a') + ->leftJoin('p.tags', 't') + ->where('p.publishedAt <= :now') + ->orderBy('p.publishedAt', 'DESC') + ->setParameter('now', new \DateTime()) + ; + + if (null !== $tag) { + $qb->andWhere(':tag MEMBER OF p.tags') + ->setParameter('tag', $tag); + } + + return (new Paginator($qb))->paginate($page); + } + + /** + * @return Post[] + */ + public function findBySearchQuery(string $query, int $limit = Paginator::PAGE_SIZE): array + { + $searchTerms = $this->extractSearchTerms($query); + + if (0 === \count($searchTerms)) { + return []; + } + + $queryBuilder = $this->createQueryBuilder('p'); + + foreach ($searchTerms as $key => $term) { + $queryBuilder + ->orWhere('p.title LIKE :t_'.$key) + ->setParameter('t_'.$key, '%'.$term.'%') + ; + } + + return $queryBuilder + ->orderBy('p.publishedAt', 'DESC') + ->setMaxResults($limit) + ->getQuery() + ->getResult(); + } + + /** + * Transforms the search string into an array of search terms. + */ + private function extractSearchTerms(string $searchQuery): array + { + $searchQuery = u($searchQuery)->replaceMatches('/[[:space:]]+/', ' ')->trim(); + $terms = array_unique($searchQuery->split(' ')); + + // ignore the search terms that are too short + return array_filter($terms, function ($term) { + return 2 <= $term->length(); + }); + } +} diff --git a/app/src/Repository/TagRepository.php b/app/src/Repository/TagRepository.php new file mode 100644 index 0000000..a79dc95 --- /dev/null +++ b/app/src/Repository/TagRepository.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Repository; + +use App\Entity\Tag; +use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\Persistence\ManagerRegistry; + +/** + * This custom Doctrine repository is empty because so far we don't need any custom + * method to query for application user information. But it's always a good practice + * to define a custom repository that will be used when the application grows. + * + * See https://symfony.com/doc/current/doctrine.html#querying-for-objects-the-repository + * + * @author Yonel Ceruto + */ +class TagRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Tag::class); + } +} diff --git a/app/src/Repository/UserRepository.php b/app/src/Repository/UserRepository.php new file mode 100644 index 0000000..1ac2bcd --- /dev/null +++ b/app/src/Repository/UserRepository.php @@ -0,0 +1,34 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Repository; + +use App\Entity\User; +use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\Persistence\ManagerRegistry; + +/** + * This custom Doctrine repository is empty because so far we don't need any custom + * method to query for application user information. But it's always a good practice + * to define a custom repository that will be used when the application grows. + * + * See https://symfony.com/doc/current/doctrine.html#querying-for-objects-the-repository + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +class UserRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, User::class); + } +} diff --git a/app/src/Security/PostVoter.php b/app/src/Security/PostVoter.php new file mode 100644 index 0000000..d4af08a --- /dev/null +++ b/app/src/Security/PostVoter.php @@ -0,0 +1,63 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Security; + +use App\Entity\Post; +use App\Entity\User; +use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\Security\Core\Authorization\Voter\Voter; + +/** + * It grants or denies permissions for actions related to blog posts (such as + * showing, editing and deleting posts). + * + * See https://symfony.com/doc/current/security/voters.html + * + * @author Yonel Ceruto + */ +class PostVoter extends Voter +{ + // Defining these constants is overkill for this simple application, but for real + // applications, it's a recommended practice to avoid relying on "magic strings" + public const DELETE = 'delete'; + public const EDIT = 'edit'; + public const SHOW = 'show'; + + /** + * {@inheritdoc} + */ + protected function supports(string $attribute, $subject): bool + { + // this voter is only executed for three specific permissions on Post objects + return $subject instanceof Post && \in_array($attribute, [self::SHOW, self::EDIT, self::DELETE], true); + } + + /** + * {@inheritdoc} + * + * @param Post $post + */ + protected function voteOnAttribute(string $attribute, $post, TokenInterface $token): bool + { + $user = $token->getUser(); + + // the user must be logged in; if not, deny permission + if (!$user instanceof User) { + return false; + } + + // the logic of this voter is pretty simple: if the logged user is the + // author of the given blog post, grant permission; otherwise, deny it. + // (the supports() method guarantees that $post is a Post object) + return $user === $post->getAuthor(); + } +} diff --git a/app/src/Twig/AppExtension.php b/app/src/Twig/AppExtension.php new file mode 100644 index 0000000..5180d5c --- /dev/null +++ b/app/src/Twig/AppExtension.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Twig; + +use Symfony\Component\Intl\Locales; +use Twig\Extension\AbstractExtension; +use Twig\TwigFunction; + +/** + * See https://symfony.com/doc/current/templating/twig_extension.html. + * + * @author Ryan Weaver + * @author Javier Eguiluz + * @author Julien ITARD + */ +class AppExtension extends AbstractExtension +{ + private $localeCodes; + private $locales; + + public function __construct(string $locales) + { + $localeCodes = explode('|', $locales); + sort($localeCodes); + $this->localeCodes = $localeCodes; + } + + /** + * {@inheritdoc} + */ + public function getFunctions(): array + { + return [ + new TwigFunction('locales', [$this, 'getLocales']), + ]; + } + + /** + * Takes the list of codes of the locales (languages) enabled in the + * application and returns an array with the name of each locale written + * in its own language (e.g. English, Français, Español, etc.). + */ + public function getLocales(): array + { + if (null !== $this->locales) { + return $this->locales; + } + + $this->locales = []; + foreach ($this->localeCodes as $localeCode) { + $this->locales[] = ['code' => $localeCode, 'name' => Locales::getName($localeCode, $localeCode)]; + } + + return $this->locales; + } +} diff --git a/app/src/Twig/SourceCodeExtension.php b/app/src/Twig/SourceCodeExtension.php new file mode 100644 index 0000000..0fc8bca --- /dev/null +++ b/app/src/Twig/SourceCodeExtension.php @@ -0,0 +1,137 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Twig; + +use function Symfony\Component\String\u; +use Twig\Environment; +use Twig\Extension\AbstractExtension; +use Twig\Template; +use Twig\TemplateWrapper; +use Twig\TwigFunction; + +/** + * CAUTION: this is an extremely advanced Twig extension. It's used to get the + * source code of the controller and the template used to render the current + * page. If you are starting with Symfony, don't look at this code and consider + * studying instead the code of the src/App/Twig/AppExtension.php extension. + * + * @author Ryan Weaver + * @author Javier Eguiluz + */ +class SourceCodeExtension extends AbstractExtension +{ + private $controller; + + public function setController(?callable $controller) + { + $this->controller = $controller; + } + + /** + * {@inheritdoc} + */ + public function getFunctions(): array + { + return [ + new TwigFunction('show_source_code', [$this, 'showSourceCode'], ['is_safe' => ['html'], 'needs_environment' => true]), + ]; + } + + /** + * @param string|TemplateWrapper|array $template + */ + public function showSourceCode(Environment $twig, $template): string + { + return $twig->render('debug/source_code.html.twig', [ + 'controller' => $this->getController(), + 'template' => $this->getTemplateSource($twig->resolveTemplate($template)), + ]); + } + + private function getController(): ?array + { + // this happens for example for exceptions (404 errors, etc.) + if (null === $this->controller) { + return null; + } + + $method = $this->getCallableReflector($this->controller); + + $classCode = file($method->getFileName()); + $methodCode = \array_slice($classCode, $method->getStartLine() - 1, $method->getEndLine() - $method->getStartLine() + 1); + $controllerCode = ' '.$method->getDocComment()."\n".implode('', $methodCode); + + return [ + 'file_path' => $method->getFileName(), + 'starting_line' => $method->getStartLine(), + 'source_code' => $this->unindentCode($controllerCode), + ]; + } + + /** + * Gets a reflector for a callable. + * + * This logic is copied from Symfony\Component\HttpKernel\Controller\ControllerResolver::getArguments + */ + private function getCallableReflector(callable $callable): \ReflectionFunctionAbstract + { + if (\is_array($callable)) { + return new \ReflectionMethod($callable[0], $callable[1]); + } + + if (\is_object($callable) && !$callable instanceof \Closure) { + $r = new \ReflectionObject($callable); + + return $r->getMethod('__invoke'); + } + + return new \ReflectionFunction($callable); + } + + private function getTemplateSource(TemplateWrapper $template): array + { + $templateSource = $template->getSourceContext(); + + return [ + // Twig templates are not always stored in files (they can be stored + // in a database for example). However, for the needs of the Symfony + // Demo app, we consider that all templates are stored in files and + // that their file paths can be obtained through the source context. + 'file_path' => $templateSource->getPath(), + 'starting_line' => 1, + 'source_code' => $templateSource->getCode(), + ]; + } + + /** + * Utility method that "unindents" the given $code when all its lines start + * with a tabulation of four white spaces. + */ + private function unindentCode(string $code): string + { + $codeLines = u($code)->split("\n"); + + $indentedOrBlankLines = array_filter($codeLines, function ($lineOfCode) { + return u($lineOfCode)->isEmpty() || u($lineOfCode)->startsWith(' '); + }); + + $codeIsIndented = \count($indentedOrBlankLines) === \count($codeLines); + if ($codeIsIndented) { + $unindentedLines = array_map(function ($lineOfCode) { + return u($lineOfCode)->after(' '); + }, $codeLines); + $code = u("\n")->join($unindentedLines); + } + + return $code; + } +} diff --git a/app/src/Utils/MomentFormatConverter.php b/app/src/Utils/MomentFormatConverter.php new file mode 100644 index 0000000..11d208f --- /dev/null +++ b/app/src/Utils/MomentFormatConverter.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Utils; + +/** + * This class is used to convert PHP date format to moment.js format. + * + * @author Yonel Ceruto + */ +class MomentFormatConverter +{ + /** + * This defines the mapping between PHP ICU date format (key) and moment.js date format (value) + * For ICU formats see http://userguide.icu-project.org/formatparse/datetime#TOC-Date-Time-Format-Syntax + * For Moment formats see https://momentjs.com/docs/#/displaying/format/. + * + * @var array + */ + private static $formatConvertRules = [ + // year + 'yyyy' => 'YYYY', 'yy' => 'YY', 'y' => 'YYYY', + // day + 'dd' => 'DD', 'd' => 'D', + // day of week + 'EE' => 'ddd', 'EEEEEE' => 'dd', + // timezone + 'ZZZZZ' => 'Z', 'ZZZ' => 'ZZ', + // letter 'T' + '\'T\'' => 'T', + ]; + + /** + * Returns associated moment.js format. + */ + public function convert(string $format): string + { + return strtr($format, self::$formatConvertRules); + } +} diff --git a/app/src/Utils/Validator.php b/app/src/Utils/Validator.php new file mode 100644 index 0000000..f1fc565 --- /dev/null +++ b/app/src/Utils/Validator.php @@ -0,0 +1,72 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Utils; + +use Symfony\Component\Console\Exception\InvalidArgumentException; +use function Symfony\Component\String\u; + +/** + * This class is used to provide an example of integrating simple classes as + * services into a Symfony application. + * + * @author Javier Eguiluz + */ +class Validator +{ + public function validateUsername(?string $username): string + { + if (empty($username)) { + throw new InvalidArgumentException('The username can not be empty.'); + } + + if (1 !== preg_match('/^[a-z_]+$/', $username)) { + throw new InvalidArgumentException('The username must contain only lowercase latin characters and underscores.'); + } + + return $username; + } + + public function validatePassword(?string $plainPassword): string + { + if (empty($plainPassword)) { + throw new InvalidArgumentException('The password can not be empty.'); + } + + if (u($plainPassword)->trim()->length() < 6) { + throw new InvalidArgumentException('The password must be at least 6 characters long.'); + } + + return $plainPassword; + } + + public function validateEmail(?string $email): string + { + if (empty($email)) { + throw new InvalidArgumentException('The email can not be empty.'); + } + + if (null === u($email)->indexOf('@')) { + throw new InvalidArgumentException('The email should look like a real email.'); + } + + return $email; + } + + public function validateFullName(?string $fullName): string + { + if (empty($fullName)) { + throw new InvalidArgumentException('The full name can not be empty.'); + } + + return $fullName; + } +} diff --git a/app/symfony.lock b/app/symfony.lock new file mode 100644 index 0000000..1f3d97e --- /dev/null +++ b/app/symfony.lock @@ -0,0 +1,572 @@ +{ + "composer/package-versions-deprecated": { + "version": "1.8.0" + }, + "dama/doctrine-test-bundle": { + "version": "4.0", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "4.0", + "ref": "56eaa387b5e48ebcc7c95a893b47dfa1ad51449c" + }, + "files": [ + "config/packages/test/dama_doctrine_test_bundle.yaml" + ] + }, + "doctrine/annotations": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "a2759dd6123694c8d901d0ec80006e044c2e6457" + }, + "files": [ + "config/routes/annotations.yaml" + ] + }, + "doctrine/cache": { + "version": "1.10.0" + }, + "doctrine/collections": { + "version": "1.6.4" + }, + "doctrine/common": { + "version": "2.13.0" + }, + "doctrine/data-fixtures": { + "version": "1.4.2" + }, + "doctrine/dbal": { + "version": "2.10.2" + }, + "doctrine/doctrine-bundle": { + "version": "2.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "2.0", + "ref": "a9f2463b9f73efe74482f831f03a204a41328555" + }, + "files": [ + "config/packages/doctrine.yaml", + "config/packages/prod/doctrine.yaml", + "src/Entity/.gitignore", + "src/Repository/.gitignore" + ] + }, + "doctrine/doctrine-fixtures-bundle": { + "version": "3.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.0", + "ref": "e5b542d4ef47d8a003c91beb35650c76907f7e53" + }, + "files": [ + "src/DataFixtures/AppFixtures.php" + ] + }, + "doctrine/doctrine-migrations-bundle": { + "version": "2.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "2.2", + "ref": "baaa439e3e3179e69e3da84b671f0a3e4a2f56ad" + }, + "files": [ + "config/packages/doctrine_migrations.yaml", + "migrations/.gitignore" + ] + }, + "doctrine/event-manager": { + "version": "1.1.0" + }, + "doctrine/inflector": { + "version": "1.4.1" + }, + "doctrine/instantiator": { + "version": "1.3.0" + }, + "doctrine/lexer": { + "version": "1.2.0" + }, + "doctrine/migrations": { + "version": "2.2.1" + }, + "doctrine/orm": { + "version": "v2.7.2" + }, + "doctrine/persistence": { + "version": "1.3.7" + }, + "doctrine/sql-formatter": { + "version": "1.0.1" + }, + "egulias/email-validator": { + "version": "2.1.17" + }, + "erusev/parsedown": { + "version": "1.7.4" + }, + "friendsofphp/proxy-manager-lts": { + "version": "v1.0.2" + }, + "laminas/laminas-code": { + "version": "3.4.1" + }, + "laminas/laminas-eventmanager": { + "version": "3.2.1" + }, + "laminas/laminas-zendframework-bridge": { + "version": "1.1.1" + }, + "league/uri-parser": { + "version": "1.4.1" + }, + "masterminds/html5": { + "version": "2.7.0" + }, + "monolog/monolog": { + "version": "2.1.0" + }, + "nikic/php-parser": { + "version": "v4.4.0" + }, + "php": { + "version": "7.2.9" + }, + "phpdocumentor/reflection-common": { + "version": "2.2.0" + }, + "phpdocumentor/reflection-docblock": { + "version": "5.2.2" + }, + "phpdocumentor/type-resolver": { + "version": "1.4.0" + }, + "psr/cache": { + "version": "1.0.1" + }, + "psr/container": { + "version": "1.0.0" + }, + "psr/event-dispatcher": { + "version": "1.0.0" + }, + "psr/log": { + "version": "1.1.3" + }, + "sensio/framework-extra-bundle": { + "version": "5.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.2", + "ref": "fb7e19da7f013d0d422fa9bce16f5c510e27609b" + }, + "files": [ + "config/packages/sensio_framework_extra.yaml" + ] + }, + "symfony/apache-pack": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "1.0", + "ref": "71599f5b0fdeeeec0fb90e9b17c85e6f5e1350c1" + }, + "files": [ + "public/.htaccess" + ] + }, + "symfony/asset": { + "version": "v5.1.0-rc1" + }, + "symfony/browser-kit": { + "version": "v5.1.0-rc1" + }, + "symfony/cache": { + "version": "v5.1.0-rc1" + }, + "symfony/cache-contracts": { + "version": "v2.0.1" + }, + "symfony/config": { + "version": "v5.1.0-rc1" + }, + "symfony/console": { + "version": "5.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.1", + "ref": "c6d02bdfba9da13c22157520e32a602dbee8a75c" + }, + "files": [ + "bin/console" + ] + }, + "symfony/css-selector": { + "version": "v5.1.0-rc1" + }, + "symfony/debug-bundle": { + "version": "4.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.1", + "ref": "f8863cbad2f2e58c4b65fa1eac892ab189971bea" + }, + "files": [ + "config/packages/dev/debug.yaml" + ] + }, + "symfony/dependency-injection": { + "version": "v5.1.0-rc1" + }, + "symfony/deprecation-contracts": { + "version": "v2.1.0" + }, + "symfony/doctrine-bridge": { + "version": "v5.1.0-rc1" + }, + "symfony/dom-crawler": { + "version": "v5.1.0-rc1" + }, + "symfony/dotenv": { + "version": "v5.1.0-rc1" + }, + "symfony/error-handler": { + "version": "v5.1.0-rc1" + }, + "symfony/event-dispatcher": { + "version": "v5.1.0-rc1" + }, + "symfony/event-dispatcher-contracts": { + "version": "v2.0.1" + }, + "symfony/expression-language": { + "version": "v5.1.0-rc1" + }, + "symfony/filesystem": { + "version": "v5.1.0-rc1" + }, + "symfony/finder": { + "version": "v5.1.0-rc1" + }, + "symfony/flex": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "c0eeb50665f0f77226616b6038a9b06c03752d8e" + }, + "files": [ + ".env" + ] + }, + "symfony/form": { + "version": "v5.1.0-rc1" + }, + "symfony/framework-bundle": { + "version": "5.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.1", + "ref": "6ee1194b036378b21884e7f57b6a2ac721167f16" + }, + "files": [ + "config/packages/cache.yaml", + "config/packages/framework.yaml", + "config/packages/test/framework.yaml", + "config/preload.php", + "config/routes/dev/framework.yaml", + "config/services.yaml", + "public/index.php", + "src/Controller/.gitignore", + "src/Kernel.php" + ] + }, + "symfony/http-client-contracts": { + "version": "v2.2.0" + }, + "symfony/http-foundation": { + "version": "v5.1.0-rc1" + }, + "symfony/http-kernel": { + "version": "v5.1.0-rc1" + }, + "symfony/intl": { + "version": "v5.1.0-rc1" + }, + "symfony/mailer": { + "version": "4.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.3", + "ref": "15658c2a0176cda2e7dba66276a2030b52bd81b2" + }, + "files": [ + "config/packages/mailer.yaml" + ] + }, + "symfony/maker-bundle": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f" + } + }, + "symfony/mime": { + "version": "v5.1.0-rc1" + }, + "symfony/monolog-bridge": { + "version": "v5.1.0-rc1" + }, + "symfony/monolog-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "d7249f7d560f6736115eee1851d02a65826f0a56" + }, + "files": [ + "config/packages/dev/monolog.yaml", + "config/packages/prod/deprecations.yaml", + "config/packages/prod/monolog.yaml", + "config/packages/test/monolog.yaml" + ] + }, + "symfony/options-resolver": { + "version": "v5.1.0-rc1" + }, + "symfony/phpunit-bridge": { + "version": "4.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.3", + "ref": "6d0e35f749d5f4bfe1f011762875275cd3f9874f" + }, + "files": [ + ".env.test", + "bin/phpunit", + "phpunit.xml.dist", + "tests/bootstrap.php" + ] + }, + "symfony/polyfill-ctype": { + "version": "v1.17.0" + }, + "symfony/polyfill-intl-grapheme": { + "version": "v1.17.0" + }, + "symfony/polyfill-intl-icu": { + "version": "v1.17.0" + }, + "symfony/polyfill-intl-idn": { + "version": "v1.17.0" + }, + "symfony/polyfill-intl-messageformatter": { + "version": "v1.17.0" + }, + "symfony/polyfill-intl-normalizer": { + "version": "v1.17.0" + }, + "symfony/polyfill-mbstring": { + "version": "v1.17.0" + }, + "symfony/polyfill-php73": { + "version": "v1.17.0" + }, + "symfony/polyfill-php80": { + "version": "v1.17.0" + }, + "symfony/property-access": { + "version": "v5.1.0-rc1" + }, + "symfony/property-info": { + "version": "v5.1.0-rc1" + }, + "symfony/routing": { + "version": "5.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.1", + "ref": "b4f3e7c95e38b606eef467e8a42a8408fc460c43" + }, + "files": [ + "config/packages/prod/routing.yaml", + "config/packages/routing.yaml", + "config/routes.yaml" + ] + }, + "symfony/security-bundle": { + "version": "5.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.1", + "ref": "0a4bae19389d3b9cba1ca0102e3b2bccea724603" + }, + "files": [ + "config/packages/security.yaml" + ] + }, + "symfony/security-core": { + "version": "v5.1.0-rc1" + }, + "symfony/security-csrf": { + "version": "v5.1.0-rc1" + }, + "symfony/security-guard": { + "version": "v5.1.0-rc1" + }, + "symfony/security-http": { + "version": "v5.1.0-rc1" + }, + "symfony/serializer": { + "version": "v5.2.0-beta1" + }, + "symfony/service-contracts": { + "version": "v2.0.1" + }, + "symfony/stopwatch": { + "version": "v5.1.0-rc1" + }, + "symfony/string": { + "version": "v5.1.0-rc1" + }, + "symfony/translation": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "2ad9d2545bce8ca1a863e50e92141f0b9d87ffcd" + }, + "files": [ + "config/packages/translation.yaml", + "translations/.gitignore" + ] + }, + "symfony/translation-contracts": { + "version": "v2.0.1" + }, + "symfony/twig-bridge": { + "version": "v5.1.0-rc1" + }, + "symfony/twig-bundle": { + "version": "5.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "5.0", + "ref": "fab9149bbaa4d5eca054ed93f9e1b66cc500895d" + }, + "files": [ + "config/packages/test/twig.yaml", + "config/packages/twig.yaml", + "templates/base.html.twig" + ] + }, + "symfony/twig-pack": { + "version": "v1.0.0" + }, + "symfony/validator": { + "version": "4.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.3", + "ref": "d902da3e4952f18d3bf05aab29512eb61cabd869" + }, + "files": [ + "config/packages/test/validator.yaml", + "config/packages/validator.yaml" + ] + }, + "symfony/var-dumper": { + "version": "v5.1.0-rc1" + }, + "symfony/var-exporter": { + "version": "v5.1.0-rc1" + }, + "symfony/web-profiler-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "6bdfa1a95f6b2e677ab985cd1af2eae35d62e0f6" + }, + "files": [ + "config/packages/dev/web_profiler.yaml", + "config/packages/test/web_profiler.yaml", + "config/routes/dev/web_profiler.yaml" + ] + }, + "symfony/webpack-encore-bundle": { + "version": "1.6", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.6", + "ref": "69e1d805ad95964088bd510c05995e87dc391564" + }, + "files": [ + "assets/css/app.css", + "assets/js/app.js", + "config/packages/assets.yaml", + "config/packages/prod/webpack_encore.yaml", + "config/packages/test/webpack_encore.yaml", + "config/packages/webpack_encore.yaml", + "package.json", + "webpack.config.js" + ] + }, + "symfony/yaml": { + "version": "v5.1.0-rc1" + }, + "tgalopin/html-sanitizer": { + "version": "1.4.0" + }, + "tgalopin/html-sanitizer-bundle": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "1.0", + "ref": "26a72f38eede2c53b5d3ccbed5c150e10a93268d" + }, + "files": [ + "config/packages/html_sanitizer.yaml" + ] + }, + "twig/extra-bundle": { + "version": "v3.0.3" + }, + "twig/intl-extra": { + "version": "v3.0.3" + }, + "twig/markdown-extra": { + "version": "v3.0.3" + }, + "twig/twig": { + "version": "v3.0.3" + }, + "webmozart/assert": { + "version": "1.9.1" + } +} diff --git a/app/templates/admin/blog/_delete_form.html.twig b/app/templates/admin/blog/_delete_form.html.twig new file mode 100644 index 0000000..257d4d8 --- /dev/null +++ b/app/templates/admin/blog/_delete_form.html.twig @@ -0,0 +1,8 @@ +{{ include('blog/_delete_post_confirmation.html.twig') }} +
    + + +
    diff --git a/app/templates/admin/blog/_form.html.twig b/app/templates/admin/blog/_form.html.twig new file mode 100644 index 0000000..13fe034 --- /dev/null +++ b/app/templates/admin/blog/_form.html.twig @@ -0,0 +1,26 @@ +{# + By default, forms enable client-side validation. This means that you can't + test the server-side validation errors from the browser. To temporarily + disable this validation, add the 'novalidate' attribute: + + {{ form_start(form, {attr: {novalidate: 'novalidate'}}) }} +#} + +{% if show_confirmation|default(false) %} + {% set attr = {'data-confirmation': 'true'} %} + {{ include('blog/_delete_post_confirmation.html.twig') }} +{% endif %} + +{{ form_start(form, {attr: attr|default({})}) }} + {{ form_widget(form) }} + + + + {% if include_back_to_home_link|default(false) %} + + {{ 'action.back_to_list'|trans }} + + {% endif %} +{{ form_end(form) }} diff --git a/app/templates/admin/blog/edit.html.twig b/app/templates/admin/blog/edit.html.twig new file mode 100644 index 0000000..106c952 --- /dev/null +++ b/app/templates/admin/blog/edit.html.twig @@ -0,0 +1,29 @@ +{% extends 'admin/layout.html.twig' %} + +{% block body_id 'admin_post_edit' %} + +{% block main %} +

    {{ 'title.edit_post'|trans({'%id%': post.id}) }}

    + + {{ include('admin/blog/_form.html.twig', { + form: form, + button_label: 'action.save'|trans, + include_back_to_home_link: true, + }, with_context = false) }} +{% endblock %} + +{% block sidebar %} + + +
    + {{ include('admin/blog/_delete_form.html.twig', {post: post}, with_context = false) }} +
    + + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/app/templates/admin/blog/index.html.twig b/app/templates/admin/blog/index.html.twig new file mode 100644 index 0000000..ddcefb9 --- /dev/null +++ b/app/templates/admin/blog/index.html.twig @@ -0,0 +1,55 @@ +{% extends 'admin/layout.html.twig' %} + +{% block body_id 'admin_post_index' %} + +{% block main %} +

    {{ 'title.post_list'|trans }}

    + + + + + + + + + + + {% for post in posts %} + + + {# it's not mandatory to set the timezone in localizeddate(). This is done to + avoid errors when the 'intl' PHP extension is not available and the application + is forced to use the limited "intl polyfill", which only supports UTC and GMT #} + + + + {% else %} + + + + {% endfor %} + +
    {{ 'label.title'|trans }} {{ 'label.published_at'|trans }} {{ 'label.actions'|trans }}
    {{ post.title }}{{ post.publishedAt|format_datetime('medium', 'short', '', 'UTC') }} + +
    {{ 'post.no_posts_found'|trans }}
    +{% endblock %} + +{% block sidebar %} + + + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/app/templates/admin/blog/new.html.twig b/app/templates/admin/blog/new.html.twig new file mode 100644 index 0000000..de1dc47 --- /dev/null +++ b/app/templates/admin/blog/new.html.twig @@ -0,0 +1,29 @@ +{% extends 'admin/layout.html.twig' %} + +{% block body_id 'admin_post_new' %} + +{% block main %} +

    {{ 'title.post_new'|trans }}

    + + {{ form_start(form) }} + {{ form_row(form.title) }} + {{ form_row(form.summary) }} + {{ form_row(form.content) }} + {{ form_row(form.publishedAt) }} + {{ form_row(form.tags) }} + + + {{ form_widget(form.saveAndCreateNew, {label: 'label.save_and_create_new', attr: {class: 'btn btn-primary'}}) }} + + {{ 'action.back_to_list'|trans }} + + {{ form_end(form) }} +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/app/templates/admin/blog/show.html.twig b/app/templates/admin/blog/show.html.twig new file mode 100644 index 0000000..c891e17 --- /dev/null +++ b/app/templates/admin/blog/show.html.twig @@ -0,0 +1,36 @@ +{% extends 'admin/layout.html.twig' %} + +{% block body_id 'admin_post_show' %} + +{% block main %} +

    {{ post.title }}

    + + + +
    +

    {{ 'label.summary'|trans }}: {{ post.summary }}

    +
    + + {{ post.content|markdown_to_html|sanitize_html }} + + {{ include('blog/_post_tags.html.twig') }} +{% endblock %} + +{% block sidebar %} + + +
    + {{ include('admin/blog/_delete_form.html.twig', {post: post}, with_context = false) }} +
    + + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/app/templates/admin/layout.html.twig b/app/templates/admin/layout.html.twig new file mode 100644 index 0000000..92e55c1 --- /dev/null +++ b/app/templates/admin/layout.html.twig @@ -0,0 +1,31 @@ +{# + This is the base template of the all backend pages. Since this layout is similar + to the global layout, we inherit from it to just change the contents of some + blocks. In practice, backend templates are using a three-level inheritance, + showing how powerful, yet easy to use, is Twig's inheritance mechanism. + See https://symfony.com/doc/current/templates.html#template-inheritance-and-layouts +#} +{% extends 'base.html.twig' %} + +{% block stylesheets %} + {{ parent() }} + {{ encore_entry_link_tags('admin') }} +{% endblock %} + +{% block header_navigation_links %} +
  • + + {{ 'menu.post_list'|trans }} + +
  • +
  • + + {{ 'menu.back_to_blog'|trans }} + +
  • +{% endblock %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('admin') }} +{% endblock %} diff --git a/app/templates/base.html.twig b/app/templates/base.html.twig new file mode 100644 index 0000000..4a7a709 --- /dev/null +++ b/app/templates/base.html.twig @@ -0,0 +1,162 @@ +{# + This is the base template used as the application layout which contains the + common elements and decorates all the other templates. + See https://symfony.com/doc/current/templates.html#template-inheritance-and-layouts +#} + + + + + + {% block title %}Symfony Demo application{% endblock %} + + {% block stylesheets %} + {{ encore_entry_link_tags('app') }} + {% endblock %} + + + + + + + {% block header %} +
    + +
    + {% endblock %} + +
    + {% block body %} +
    +
    + {{ include('default/_flash_messages.html.twig') }} + + {% block main %}{% endblock %} +
    + + +
    + {% endblock %} +
    + + {% block footer %} +
    +
    +
    + + +
    +
    +
    + {% endblock %} + + {% block javascripts %} + {{ encore_entry_script_tags('app') }} + {% endblock %} + + {# it's not mandatory to set the timezone in localizeddate(). This is done to + avoid errors when the 'intl' PHP extension is not available and the application + is forced to use the limited "intl polyfill", which only supports UTC and GMT #} + + + diff --git a/app/templates/blog/_comment_form.html.twig b/app/templates/blog/_comment_form.html.twig new file mode 100644 index 0000000..5a91e49 --- /dev/null +++ b/app/templates/blog/_comment_form.html.twig @@ -0,0 +1,40 @@ +{# + By default, forms enable client-side validation. This means that you can't + test the server-side validation errors from the browser. To temporarily + disable this validation, add the 'novalidate' attribute: + + {{ form_start(form, {method: ..., action: ..., attr: {novalidate: 'novalidate'}}) }} +#} + +{{ form_start(form, {method: 'POST', action: path('comment_new', {'postSlug': post.slug})}) }} + {# instead of displaying form fields one by one, you can also display them + all with their default options and styles just by calling to this function: + + {{ form_widget(form) }} + #} + +
    + + {{ 'title.add_comment'|trans }} + + + {# Render any global form error (e.g. when a constraint on a public getter method failed) #} + {{ form_errors(form) }} + +
    + {{ form_label(form.content, 'label.content', {label_attr: {class: 'sr-only'}}) }} + + {# Render any errors for the "content" field (e.g. when a class property constraint failed) #} + {{ form_errors(form.content) }} + + {{ form_widget(form.content, {attr: {rows: 10}}) }} + {{ form_help(form.content) }} +
    + +
    + +
    +
    +{{ form_end(form) }} diff --git a/app/templates/blog/_delete_post_confirmation.html.twig b/app/templates/blog/_delete_post_confirmation.html.twig new file mode 100644 index 0000000..3832c5e --- /dev/null +++ b/app/templates/blog/_delete_post_confirmation.html.twig @@ -0,0 +1,19 @@ +{# Bootstrap modal, see https://getbootstrap.com/docs/3.4/javascript/#modals #} + diff --git a/app/templates/blog/_post_tags.html.twig b/app/templates/blog/_post_tags.html.twig new file mode 100644 index 0000000..9a82151 --- /dev/null +++ b/app/templates/blog/_post_tags.html.twig @@ -0,0 +1,12 @@ +{% if not post.tags.empty %} + +{% endif %} + diff --git a/app/templates/blog/_rss.html.twig b/app/templates/blog/_rss.html.twig new file mode 100644 index 0000000..69d778b --- /dev/null +++ b/app/templates/blog/_rss.html.twig @@ -0,0 +1,5 @@ + diff --git a/app/templates/blog/about.html.twig b/app/templates/blog/about.html.twig new file mode 100644 index 0000000..2b0a629 --- /dev/null +++ b/app/templates/blog/about.html.twig @@ -0,0 +1,15 @@ +
    +
    +

    + {{ 'help.app_description'|trans|raw }} +

    +

    + {{ 'help.more_information'|trans|raw }} +

    +
    +
    + +{# it's not mandatory to set the timezone in localizeddate(). This is done to + avoid errors when the 'intl' PHP extension is not available and the application + is forced to use the limited "intl polyfill", which only supports UTC and GMT #} + diff --git a/app/templates/blog/comment_form_error.html.twig b/app/templates/blog/comment_form_error.html.twig new file mode 100644 index 0000000..67c2517 --- /dev/null +++ b/app/templates/blog/comment_form_error.html.twig @@ -0,0 +1,11 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'comment_form_error' %} + +{% block main %} +

    {{ 'title.comment_error'|trans }}

    + +
    + {{ include('blog/_comment_form.html.twig') }} +
    +{% endblock %} diff --git a/app/templates/blog/index.html.twig b/app/templates/blog/index.html.twig new file mode 100644 index 0000000..52e8874 --- /dev/null +++ b/app/templates/blog/index.html.twig @@ -0,0 +1,59 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'blog_index' %} + +{% block main %} + {% for post in paginator.results %} +
    +

    + + {{ post.title }} + +

    + + + +

    {{ post.summary }}

    + + {{ include('blog/_post_tags.html.twig') }} +
    + {% else %} +
    {{ 'post.no_posts_found'|trans }}
    + {% endfor %} + + {% if paginator.hasToPaginate %} + + {% endif %} +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} + {{ include('blog/_rss.html.twig') }} +{% endblock %} diff --git a/app/templates/blog/index.xml.twig b/app/templates/blog/index.xml.twig new file mode 100644 index 0000000..9ed0331 --- /dev/null +++ b/app/templates/blog/index.xml.twig @@ -0,0 +1,25 @@ + + + + {{ 'rss.title'|trans }} + {{ 'rss.description'|trans }} + {{ 'now'|date('r', timezone='GMT') }} + {{ (paginator.results|last).publishedAt|default('now')|date('r', timezone='GMT') }} + {{ url('blog_index') }} + {{ app.request.locale }} + + {% for post in paginator.results %} + + {{ post.title }} + {{ post.summary }} + {{ url('blog_post', {'slug': post.slug}) }} + {{ url('blog_post', {'slug': post.slug}) }} + {{ post.publishedAt|date(format='r', timezone='GMT') }} + {{ post.author.email }} + {% for tag in post.tags %} + {{ tag.name }} + {% endfor %} + + {% endfor %} + + diff --git a/app/templates/blog/post_show.html.twig b/app/templates/blog/post_show.html.twig new file mode 100644 index 0000000..2bd8607 --- /dev/null +++ b/app/templates/blog/post_show.html.twig @@ -0,0 +1,77 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'blog_post_show' %} + +{% block main %} +

    {{ post.title }}

    + + + + {{ post.content|markdown_to_html|sanitize_html }} + + {{ include('blog/_post_tags.html.twig') }} + +
    + {# The 'IS_AUTHENTICATED_FULLY' role ensures that the user has entered + their credentials (login + password) during this session. If they + are automatically logged via the 'Remember Me' functionality, they won't + be able to add a comment. + See https://symfony.com/doc/current/security/remember_me.html#forcing-the-user-to-re-authenticate-before-accessing-certain-resources + #} + {% if is_granted('IS_AUTHENTICATED_FULLY') %} + {{ render(controller('App\\Controller\\BlogController::commentForm', {'id': post.id})) }} + {% else %} +

    + + {{ 'action.sign_in'|trans }} + + {{ 'post.to_publish_a_comment'|trans }} +

    + {% endif %} +
    + +

    + {{ 'post.num_comments'|trans({ 'count': post.comments|length }) }} +

    + + {% for comment in post.comments %} +
    + +

    + {{ comment.author.fullName }} {{ 'post.commented_on'|trans }} + {# it's not mandatory to set the timezone in localizeddate(). This is done to + avoid errors when the 'intl' PHP extension is not available and the application + is forced to use the limited "intl polyfill", which only supports UTC and GMT #} + {{ comment.publishedAt|format_datetime('medium', 'short', '', 'UTC') }} +

    +
    + {{ comment.content|markdown_to_html|sanitize_html }} +
    +
    + {% else %} +
    +

    {{ 'post.no_comments'|trans }}

    +
    + {% endfor %} +{% endblock %} + +{% block sidebar %} + {% if is_granted('edit', post) %} + + {% endif %} + + {# the parent() function includes the contents defined by the parent template + ('base.html.twig') for this block ('sidebar'). This is a very convenient way + to share common contents in different templates #} + {{ parent() }} + + {{ show_source_code(_self) }} + {{ include('blog/_rss.html.twig') }} +{% endblock %} diff --git a/app/templates/blog/search.html.twig b/app/templates/blog/search.html.twig new file mode 100644 index 0000000..98472d1 --- /dev/null +++ b/app/templates/blog/search.html.twig @@ -0,0 +1,32 @@ +{% extends 'base.html.twig' %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('search') }} +{% endblock %} + +{% block body_id 'blog_search' %} + +{% block main %} +
    +
    + +
    +
    + +
    +
    +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/app/templates/bundles/TwigBundle/Exception/error.html.twig b/app/templates/bundles/TwigBundle/Exception/error.html.twig new file mode 100644 index 0000000..d76c3a7 --- /dev/null +++ b/app/templates/bundles/TwigBundle/Exception/error.html.twig @@ -0,0 +1,30 @@ +{# + This template is used to render any error different from 403, 404 and 500. + + This is the simplest way to customize error pages in Symfony applications. + In case you need it, you can also hook into the internal exception handling + made by Symfony. This allows you to perform advanced tasks and even recover + your application from some errors. + See https://symfony.com/doc/current/controller/error_pages.html +#} + +{% extends 'base.html.twig' %} + +{% block body_id 'error' %} + +{% block main %} +

    {{ 'http_error.name'|trans({ '%status_code%': status_code }) }}

    + +

    + {{ 'http_error.description'|trans({ '%status_code%': status_code }) }} +

    +

    + {{ 'http_error.suggestion'|trans({ '%url%': path('blog_index') })|raw }} +

    +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/app/templates/bundles/TwigBundle/Exception/error403.html.twig b/app/templates/bundles/TwigBundle/Exception/error403.html.twig new file mode 100644 index 0000000..a7bf8f6 --- /dev/null +++ b/app/templates/bundles/TwigBundle/Exception/error403.html.twig @@ -0,0 +1,30 @@ +{# + This template is used to render errors of type HTTP 403 (Forbidden) + + This is the simplest way to customize error pages in Symfony applications. + In case you need it, you can also hook into the internal exception handling + made by Symfony. This allows you to perform advanced tasks and even recover + your application from some errors. + See https://symfony.com/doc/current/controller/error_pages.html +#} + +{% extends 'base.html.twig' %} + +{% block body_id 'error' %} + +{% block main %} +

    {{ 'http_error.name'|trans({ '%status_code%': 403 }) }}

    + +

    + {{ 'http_error_403.description'|trans }} +

    +

    + {{ 'http_error_403.suggestion'|trans }} +

    +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/app/templates/bundles/TwigBundle/Exception/error404.html.twig b/app/templates/bundles/TwigBundle/Exception/error404.html.twig new file mode 100644 index 0000000..03e4316 --- /dev/null +++ b/app/templates/bundles/TwigBundle/Exception/error404.html.twig @@ -0,0 +1,30 @@ +{# + This template is used to render errors of type HTTP 404 (Not Found) + + This is the simplest way to customize error pages in Symfony applications. + In case you need it, you can also hook into the internal exception handling + made by Symfony. This allows you to perform advanced tasks and even recover + your application from some errors. + See https://symfony.com/doc/current/controller/error_pages.html +#} + +{% extends 'base.html.twig' %} + +{% block body_id 'error' %} + +{% block main %} +

    {{ 'http_error.name'|trans({ '%status_code%': 404 }) }}

    + +

    + {{ 'http_error_404.description'|trans }} +

    +

    + {{ 'http_error_404.suggestion'|trans({ '%url%': path('blog_index') })|raw }} +

    +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/app/templates/bundles/TwigBundle/Exception/error500.html.twig b/app/templates/bundles/TwigBundle/Exception/error500.html.twig new file mode 100644 index 0000000..6f34bce --- /dev/null +++ b/app/templates/bundles/TwigBundle/Exception/error500.html.twig @@ -0,0 +1,35 @@ +{# + This template is used to render errors of type HTTP 500 (Internal Server Error) + + This is the simplest way to customize error pages in Symfony applications. + In case you need it, you can also hook into the internal exception handling + made by Symfony. This allows you to perform advanced tasks and even recover + your application from some errors. + See https://symfony.com/doc/current/controller/error_pages.html +#} + +{% extends 'base.html.twig' %} + +{% block stylesheets %} + {{ parent() }} + +{% endblock %} + +{% block body_id 'error' %} + +{% block main %} +

    {{ 'http_error.name'|trans({ '%status_code%': 500 }) }}

    + +

    + {{ 'http_error_500.description'|trans }} +

    +

    + {{ 'http_error_500.suggestion'|trans({ '%url%': path('blog_index') })|raw }} +

    +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/app/templates/debug/source_code.html.twig b/app/templates/debug/source_code.html.twig new file mode 100644 index 0000000..f628bc6 --- /dev/null +++ b/app/templates/debug/source_code.html.twig @@ -0,0 +1,35 @@ +
    +

    + {{ 'help.show_code'|trans|raw }} +

    + + + + +
    diff --git a/app/templates/default/_flash_messages.html.twig b/app/templates/default/_flash_messages.html.twig new file mode 100644 index 0000000..eb67327 --- /dev/null +++ b/app/templates/default/_flash_messages.html.twig @@ -0,0 +1,32 @@ +{# + This is a template fragment designed to be included in other templates + See https://symfony.com/doc/current/templates.html#including-templates + + A common practice to better distinguish between templates and fragments is to + prefix fragments with an underscore. That's why this template is called + '_flash_messages.html.twig' instead of 'flash_messages.html.twig' +#} + +{# + The check is needed to prevent starting the session when looking for "flash messages": + https://symfony.com/doc/current/session.html#avoid-starting-sessions-for-anonymous-users + + TIP: With FOSHttpCache you can also adapt this to make it cache safe: + https://foshttpcachebundle.readthedocs.io/en/latest/features/helpers/flash-message.html +#} +{% if app.request.hasPreviousSession %} +
    + {% for type, messages in app.flashes %} + {% for message in messages %} + {# Bootstrap alert, see https://getbootstrap.com/docs/3.4/components/#alerts #} + + {% endfor %} + {% endfor %} +
    +{% endif %} diff --git a/app/templates/default/homepage.html.twig b/app/templates/default/homepage.html.twig new file mode 100644 index 0000000..354a70b --- /dev/null +++ b/app/templates/default/homepage.html.twig @@ -0,0 +1,44 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'homepage' %} + +{# + the homepage is a special page which displays neither a header nor a footer. + this is done with the 'trick' of defining empty Twig blocks without any content +#} +{% block header %}{% endblock %} +{% block footer %}{% endblock %} + +{% block body %} + + +
    +
    +
    +

    + {{ 'help.browse_app'|trans|raw }} +

    +

    + + {{ 'action.browse_app'|trans }} + +

    +
    +
    + +
    +
    +

    + {{ 'help.browse_admin'|trans|raw }} +

    +

    + + {{ 'action.browse_admin'|trans }} + +

    +
    +
    +
    +{% endblock %} diff --git a/app/templates/form/fields.html.twig b/app/templates/form/fields.html.twig new file mode 100644 index 0000000..f66070c --- /dev/null +++ b/app/templates/form/fields.html.twig @@ -0,0 +1,26 @@ +{# + Each field type is rendered by a template fragment, which is determined + by the name of your form type class (DateTimePickerType -> date_time_picker) + and the suffix "_widget". This can be controlled by overriding getBlockPrefix() + in DateTimePickerType. + + See https://symfony.com/doc/current/form/create_custom_field_type.html#creating-the-form-type-template +#} + +{% block date_time_picker_widget %} +
    + {{ block('datetime_widget') }} + + + +
    +{% endblock %} + +{% block tags_input_widget %} +
    + {{ form_widget(form, {'attr': {'data-toggle': 'tagsinput', 'data-tags': tags|json_encode}}) }} + + + +
    +{% endblock %} diff --git a/app/templates/form/layout.html.twig b/app/templates/form/layout.html.twig new file mode 100644 index 0000000..272bc28 --- /dev/null +++ b/app/templates/form/layout.html.twig @@ -0,0 +1,16 @@ +{% extends 'bootstrap_3_layout.html.twig' %} + +{# Errors #} + +{% block form_errors -%} + {% if errors|length > 0 -%} + {% if form is not rootform %}{% else %}
    {% endif %} +
      + {%- for error in errors -%} + {# use font-awesome icon library #} +
    • {{ error.message }}
    • + {%- endfor -%} +
    + {% if form is not rootform %}{% else %}
    {% endif %} + {%- endif %} +{%- endblock form_errors %} diff --git a/app/templates/security/login.html.twig b/app/templates/security/login.html.twig new file mode 100644 index 0000000..67465b2 --- /dev/null +++ b/app/templates/security/login.html.twig @@ -0,0 +1,94 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'login' %} + +{% block javascripts %} + {{ parent() }} + {{ encore_entry_script_tags('login') }} +{% endblock %} + +{% block main %} + {% if error %} +
    + {{ error.messageKey|trans(error.messageData, 'security') }} +
    + {% endif %} + +
    +
    +
    +
    +
    + {{ 'title.login'|trans }} +
    + + +
    +
    + + +
    + + + +
    +
    +
    +
    + +
    +

    + + {{ 'help.login_users'|trans }} +

    + + + + + + + + + + + + + + + + + + + + + +
    {{ 'label.username'|trans }}{{ 'label.password'|trans }}{{ 'label.role'|trans }}
    john_userkittenROLE_USER ({{ 'help.role_user'|trans }})
    jane_adminkittenROLE_ADMIN ({{ 'help.role_admin'|trans }})
    + +
    +
    +

    + {{ 'note'|trans }} + {{ 'help.reload_fixtures'|trans }}
    + + $ php bin/console doctrine:fixtures:load +

    + +

    + {{ 'tip'|trans }} + {{ 'help.add_user'|trans }}
    + + $ php bin/console app:add-user +

    +
    +
    +
    +
    +{% endblock %} + +{% block sidebar %} + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/app/templates/user/change_password.html.twig b/app/templates/user/change_password.html.twig new file mode 100644 index 0000000..82421c7 --- /dev/null +++ b/app/templates/user/change_password.html.twig @@ -0,0 +1,29 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'user_password' %} + +{% block main %} +

    {{ 'title.change_password'|trans }}

    + + + + {{ form_start(form) }} + {{ form_widget(form) }} + + + {{ form_end(form) }} +{% endblock %} + +{% block sidebar %} + + + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/app/templates/user/edit.html.twig b/app/templates/user/edit.html.twig new file mode 100644 index 0000000..126635e --- /dev/null +++ b/app/templates/user/edit.html.twig @@ -0,0 +1,27 @@ +{% extends 'base.html.twig' %} + +{% block body_id 'user_edit' %} + +{% block main %} +

    {{ 'title.edit_user'|trans }}

    + + {{ form_start(form) }} + {{ form_widget(form) }} + + + {{ form_end(form) }} +{% endblock %} + +{% block sidebar %} + + + {{ parent() }} + + {{ show_source_code(_self) }} +{% endblock %} diff --git a/app/tests/Command/AddUserCommandTest.php b/app/tests/Command/AddUserCommandTest.php new file mode 100644 index 0000000..bbf3b93 --- /dev/null +++ b/app/tests/Command/AddUserCommandTest.php @@ -0,0 +1,124 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Command; + +use App\Command\AddUserCommand; +use App\Repository\UserRepository; +use Symfony\Bundle\FrameworkBundle\Console\Application; +use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; +use Symfony\Component\Console\Tester\CommandTester; + +class AddUserCommandTest extends KernelTestCase +{ + private $userData = [ + 'username' => 'chuck_norris', + 'password' => 'foobar', + 'email' => 'chuck@norris.com', + 'full-name' => 'Chuck Norris', + ]; + + protected function setUp(): void + { + exec('stty 2>&1', $output, $exitcode); + $isSttySupported = 0 === $exitcode; + + if ('Windows' === PHP_OS_FAMILY || !$isSttySupported) { + $this->markTestSkipped('`stty` is required to test this command.'); + } + } + + /** + * @dataProvider isAdminDataProvider + * + * This test provides all the arguments required by the command, so the + * command runs non-interactively and it won't ask for any argument. + */ + public function testCreateUserNonInteractive(bool $isAdmin): void + { + $input = $this->userData; + if ($isAdmin) { + $input['--admin'] = 1; + } + $this->executeCommand($input); + + $this->assertUserCreated($isAdmin); + } + + /** + * @dataProvider isAdminDataProvider + * + * This test doesn't provide all the arguments required by the command, so + * the command runs interactively and it will ask for the value of the missing + * arguments. + * See https://symfony.com/doc/current/components/console/helpers/questionhelper.html#testing-a-command-that-expects-input + */ + public function testCreateUserInteractive(bool $isAdmin): void + { + $this->executeCommand( + // these are the arguments (only 1 is passed, the rest are missing) + $isAdmin ? ['--admin' => 1] : [], + // these are the responses given to the questions asked by the command + // to get the value of the missing required arguments + array_values($this->userData) + ); + + $this->assertUserCreated($isAdmin); + } + + /** + * This is used to execute the same test twice: first for normal users + * (isAdmin = false) and then for admin users (isAdmin = true). + */ + public function isAdminDataProvider(): ?\Generator + { + yield [false]; + yield [true]; + } + + /** + * This helper method checks that the user was correctly created and saved + * in the database. + */ + private function assertUserCreated(bool $isAdmin): void + { + $container = self::$container; + + /** @var \App\Entity\User $user */ + $user = $container->get(UserRepository::class)->findOneByEmail($this->userData['email']); + $this->assertNotNull($user); + + $this->assertSame($this->userData['full-name'], $user->getFullName()); + $this->assertSame($this->userData['username'], $user->getUsername()); + $this->assertTrue($container->get('security.password_encoder')->isPasswordValid($user, $this->userData['password'])); + $this->assertSame($isAdmin ? ['ROLE_ADMIN'] : ['ROLE_USER'], $user->getRoles()); + } + + /** + * This helper method abstracts the boilerplate code needed to test the + * execution of a command. + * + * @param array $arguments All the arguments passed when executing the command + * @param array $inputs The (optional) answers given to the command when it asks for the value of the missing arguments + */ + private function executeCommand(array $arguments, array $inputs = []): void + { + self::bootKernel(); + + // this uses a special testing container that allows you to fetch private services + $command = self::$container->get(AddUserCommand::class); + $command->setApplication(new Application(self::$kernel)); + + $commandTester = new CommandTester($command); + $commandTester->setInputs($inputs); + $commandTester->execute($arguments); + } +} diff --git a/app/tests/Controller/Admin/BlogControllerTest.php b/app/tests/Controller/Admin/BlogControllerTest.php new file mode 100644 index 0000000..722452f --- /dev/null +++ b/app/tests/Controller/Admin/BlogControllerTest.php @@ -0,0 +1,194 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Controller\Admin; + +use App\Repository\PostRepository; +use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; +use Symfony\Component\HttpFoundation\Response; + +/** + * Functional test for the controllers defined inside the BlogController used + * for managing the blog in the backend. + * + * See https://symfony.com/doc/current/testing.html#functional-tests + * + * Whenever you test resources protected by a firewall, consider using the + * technique explained in: + * https://symfony.com/doc/current/testing/http_authentication.html + * + * Execute the application tests using this command (requires PHPUnit to be installed): + * + * $ cd your-symfony-project/ + * $ ./vendor/bin/phpunit + */ +class BlogControllerTest extends WebTestCase +{ + /** + * @dataProvider getUrlsForRegularUsers + */ + public function testAccessDeniedForRegularUsers(string $httpMethod, string $url): void + { + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'john_user', + 'PHP_AUTH_PW' => 'kitten', + ]); + + $client->request($httpMethod, $url); + + $this->assertResponseStatusCodeSame(Response::HTTP_FORBIDDEN); + } + + public function getUrlsForRegularUsers(): ?\Generator + { + yield ['GET', '/en/admin/post/']; + yield ['GET', '/en/admin/post/1']; + yield ['GET', '/en/admin/post/1/edit']; + yield ['POST', '/en/admin/post/1/delete']; + } + + public function testAdminBackendHomePage(): void + { + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->request('GET', '/en/admin/post/'); + + $this->assertResponseIsSuccessful(); + $this->assertSelectorExists( + 'body#admin_post_index #main tbody tr', + 'The backend homepage displays all the available posts.' + ); + } + + /** + * This test changes the database contents by creating a new blog post. However, + * thanks to the DAMADoctrineTestBundle and its PHPUnit listener, all changes + * to the database are rolled back when this test completes. This means that + * all the application tests begin with the same database contents. + */ + public function testAdminNewPost(): void + { + $postTitle = 'Blog Post Title '.mt_rand(); + $postSummary = $this->generateRandomString(255); + $postContent = $this->generateRandomString(1024); + + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->request('GET', '/en/admin/post/new'); + $client->submitForm('Create post', [ + 'post[title]' => $postTitle, + 'post[summary]' => $postSummary, + 'post[content]' => $postContent, + ]); + + $this->assertResponseRedirects('/en/admin/post/', Response::HTTP_FOUND); + + /** @var \App\Entity\Post $post */ + $post = self::$container->get(PostRepository::class)->findOneByTitle($postTitle); + $this->assertNotNull($post); + $this->assertSame($postSummary, $post->getSummary()); + $this->assertSame($postContent, $post->getContent()); + } + + public function testAdminNewDuplicatedPost(): void + { + $postTitle = 'Blog Post Title '.mt_rand(); + $postSummary = $this->generateRandomString(255); + $postContent = $this->generateRandomString(1024); + + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $crawler = $client->request('GET', '/en/admin/post/new'); + $form = $crawler->selectButton('Create post')->form([ + 'post[title]' => $postTitle, + 'post[summary]' => $postSummary, + 'post[content]' => $postContent, + ]); + $client->submit($form); + + // post titles must be unique, so trying to create the same post twice should result in an error + $client->submit($form); + + $this->assertSelectorTextSame('form .form-group.has-error label', 'Title'); + $this->assertSelectorTextContains('form .form-group.has-error .help-block', 'This title was already used in another blog post, but they must be unique.'); + } + + public function testAdminShowPost(): void + { + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->request('GET', '/en/admin/post/1'); + + $this->assertResponseIsSuccessful(); + } + + /** + * This test changes the database contents by editing a blog post. However, + * thanks to the DAMADoctrineTestBundle and its PHPUnit listener, all changes + * to the database are rolled back when this test completes. This means that + * all the application tests begin with the same database contents. + */ + public function testAdminEditPost(): void + { + $newBlogPostTitle = 'Blog Post Title '.mt_rand(); + + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->request('GET', '/en/admin/post/1/edit'); + $client->submitForm('Save changes', [ + 'post[title]' => $newBlogPostTitle, + ]); + + $this->assertResponseRedirects('/en/admin/post/1/edit', Response::HTTP_FOUND); + + /** @var \App\Entity\Post $post */ + $post = self::$container->get(PostRepository::class)->find(1); + $this->assertSame($newBlogPostTitle, $post->getTitle()); + } + + /** + * This test changes the database contents by deleting a blog post. However, + * thanks to the DAMADoctrineTestBundle and its PHPUnit listener, all changes + * to the database are rolled back when this test completes. This means that + * all the application tests begin with the same database contents. + */ + public function testAdminDeletePost(): void + { + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $crawler = $client->request('GET', '/en/admin/post/1'); + $client->submit($crawler->filter('#delete-form')->form()); + + $this->assertResponseRedirects('/en/admin/post/', Response::HTTP_FOUND); + + $post = self::$container->get(PostRepository::class)->find(1); + $this->assertNull($post); + } + + private function generateRandomString(int $length): string + { + $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + + return mb_substr(str_shuffle(str_repeat($chars, ceil($length / mb_strlen($chars)))), 1, $length); + } +} diff --git a/app/tests/Controller/BlogControllerTest.php b/app/tests/Controller/BlogControllerTest.php new file mode 100644 index 0000000..5602d61 --- /dev/null +++ b/app/tests/Controller/BlogControllerTest.php @@ -0,0 +1,98 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Controller; + +use App\Entity\Post; +use App\Pagination\Paginator; +use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; + +/** + * Functional test for the controllers defined inside BlogController. + * + * See https://symfony.com/doc/current/testing.html#functional-tests + * + * Execute the application tests using this command (requires PHPUnit to be installed): + * + * $ cd your-symfony-project/ + * $ ./vendor/bin/phpunit + */ +class BlogControllerTest extends WebTestCase +{ + public function testIndex(): void + { + $client = static::createClient(); + $crawler = $client->request('GET', '/en/blog/'); + + $this->assertResponseIsSuccessful(); + + $this->assertCount( + Paginator::PAGE_SIZE, + $crawler->filter('article.post'), + 'The homepage displays the right number of posts.' + ); + } + + public function testRss(): void + { + $client = static::createClient(); + $crawler = $client->request('GET', '/en/blog/rss.xml'); + + $this->assertResponseHeaderSame('Content-Type', 'text/xml; charset=UTF-8'); + + $this->assertCount( + Paginator::PAGE_SIZE, + $crawler->filter('item'), + 'The xml file displays the right number of posts.' + ); + } + + /** + * This test changes the database contents by creating a new comment. However, + * thanks to the DAMADoctrineTestBundle and its PHPUnit listener, all changes + * to the database are rolled back when this test completes. This means that + * all the application tests begin with the same database contents. + */ + public function testNewComment(): void + { + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'john_user', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->followRedirects(); + + // Find first blog post + $crawler = $client->request('GET', '/en/blog/'); + $postLink = $crawler->filter('article.post > h2 a')->link(); + + $client->click($postLink); + $crawler = $client->submitForm('Publish comment', [ + 'comment[content]' => 'Hi, Symfony!', + ]); + + $newComment = $crawler->filter('.post-comment')->first()->filter('div > p')->text(); + + $this->assertSame('Hi, Symfony!', $newComment); + } + + public function testAjaxSearch(): void + { + $client = static::createClient(); + $client->xmlHttpRequest('GET', '/en/blog/search', ['q' => 'lorem']); + + $results = json_decode($client->getResponse()->getContent(), true); + + $this->assertResponseHeaderSame('Content-Type', 'application/json'); + $this->assertCount(1, $results); + $this->assertSame('Lorem ipsum dolor sit amet consectetur adipiscing elit', $results[0]['title']); + $this->assertSame('Jane Doe', $results[0]['author']); + } +} diff --git a/app/tests/Controller/DefaultControllerTest.php b/app/tests/Controller/DefaultControllerTest.php new file mode 100644 index 0000000..0ffb8bb --- /dev/null +++ b/app/tests/Controller/DefaultControllerTest.php @@ -0,0 +1,95 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Controller; + +use App\Entity\Post; +use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; +use Symfony\Component\HttpFoundation\Response; + +/** + * Functional test that implements a "smoke test" of all the public and secure + * URLs of the application. + * See https://symfony.com/doc/current/best_practices.html#smoke-test-your-urls. + * + * Execute the application tests using this command (requires PHPUnit to be installed): + * + * $ cd your-symfony-project/ + * $ ./vendor/bin/phpunit + */ +class DefaultControllerTest extends WebTestCase +{ + /** + * PHPUnit's data providers allow to execute the same tests repeated times + * using a different set of data each time. + * See https://symfony.com/doc/current/testing.html#testing-against-different-sets-of-data. + * + * @dataProvider getPublicUrls + */ + public function testPublicUrls(string $url): void + { + $client = static::createClient(); + $client->request('GET', $url); + + $this->assertResponseIsSuccessful(sprintf('The %s public URL loads correctly.', $url)); + } + + /** + * A good practice for tests is to not use the service container, to make + * them more robust. However, in this example we must access to the container + * to get the entity manager and make a database query. The reason is that + * blog post fixtures are randomly generated and there's no guarantee that + * a given blog post slug will be available. + */ + public function testPublicBlogPost(): void + { + $client = static::createClient(); + // the service container is always available via the test client + $blogPost = $client->getContainer()->get('doctrine')->getRepository(Post::class)->find(1); + $client->request('GET', sprintf('/en/blog/posts/%s', $blogPost->getSlug())); + + $this->assertResponseIsSuccessful(); + } + + /** + * The application contains a lot of secure URLs which shouldn't be + * publicly accessible. This tests ensures that whenever a user tries to + * access one of those pages, a redirection to the login form is performed. + * + * @dataProvider getSecureUrls + */ + public function testSecureUrls(string $url): void + { + $client = static::createClient(); + $client->request('GET', $url); + + $this->assertResponseRedirects( + 'http://localhost/en/login', + Response::HTTP_FOUND, + sprintf('The %s secure URL redirects to the login form.', $url) + ); + } + + public function getPublicUrls(): ?\Generator + { + yield ['/']; + yield ['/en/blog/']; + yield ['/en/login']; + } + + public function getSecureUrls(): ?\Generator + { + yield ['/en/admin/post/']; + yield ['/en/admin/post/new']; + yield ['/en/admin/post/1']; + yield ['/en/admin/post/1/edit']; + } +} diff --git a/app/tests/Controller/UserControllerTest.php b/app/tests/Controller/UserControllerTest.php new file mode 100644 index 0000000..47eb0de --- /dev/null +++ b/app/tests/Controller/UserControllerTest.php @@ -0,0 +1,99 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Controller; + +use App\Repository\UserRepository; +use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; +use Symfony\Component\HttpFoundation\Response; + +/** + * Functional test for the controllers defined inside the UserController used + * for managing the current logged user. + * + * See https://symfony.com/doc/current/testing.html#functional-tests + * + * Whenever you test resources protected by a firewall, consider using the + * technique explained in: + * https://symfony.com/doc/current/testing/http_authentication.html + * + * Execute the application tests using this command (requires PHPUnit to be installed): + * + * $ cd your-symfony-project/ + * $ ./vendor/bin/phpunit + */ +class UserControllerTest extends WebTestCase +{ + /** + * @dataProvider getUrlsForAnonymousUsers + */ + public function testAccessDeniedForAnonymousUsers(string $httpMethod, string $url): void + { + $client = static::createClient(); + $client->request($httpMethod, $url); + + $this->assertResponseRedirects( + 'http://localhost/en/login', + Response::HTTP_FOUND, + sprintf('The %s secure URL redirects to the login form.', $url) + ); + } + + public function getUrlsForAnonymousUsers(): ?\Generator + { + yield ['GET', '/en/profile/edit']; + yield ['GET', '/en/profile/change-password']; + } + + public function testEditUser(): void + { + $newUserEmail = 'admin_jane@symfony.com'; + + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->request('GET', '/en/profile/edit'); + $client->submitForm('Save changes', [ + 'user[email]' => $newUserEmail, + ]); + + $this->assertResponseRedirects('/en/profile/edit', Response::HTTP_FOUND); + + /** @var \App\Entity\User $user */ + $user = self::$container->get(UserRepository::class)->findOneByEmail($newUserEmail); + + $this->assertNotNull($user); + $this->assertSame($newUserEmail, $user->getEmail()); + } + + public function testChangePassword(): void + { + $newUserPassword = 'new-password'; + + $client = static::createClient([], [ + 'PHP_AUTH_USER' => 'jane_admin', + 'PHP_AUTH_PW' => 'kitten', + ]); + $client->request('GET', '/en/profile/change-password'); + $client->submitForm('Save changes', [ + 'change_password[currentPassword]' => 'kitten', + 'change_password[newPassword][first]' => $newUserPassword, + 'change_password[newPassword][second]' => $newUserPassword, + ]); + + $this->assertResponseRedirects( + '/en/logout', + Response::HTTP_FOUND, + 'Changing password logout the user.' + ); + } +} diff --git a/app/tests/Form/DataTransformer/TagArrayToStringTransformerTest.php b/app/tests/Form/DataTransformer/TagArrayToStringTransformerTest.php new file mode 100644 index 0000000..f826dd4 --- /dev/null +++ b/app/tests/Form/DataTransformer/TagArrayToStringTransformerTest.php @@ -0,0 +1,128 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Form\DataTransformer; + +use App\Entity\Tag; +use App\Form\DataTransformer\TagArrayToStringTransformer; +use App\Repository\TagRepository; +use PHPUnit\Framework\TestCase; + +/** + * Tests that tags are transformed correctly using the data transformer. + * + * See https://symfony.com/doc/current/testing/database.html + */ +class TagArrayToStringTransformerTest extends TestCase +{ + /** + * Ensures that tags are created correctly. + */ + public function testCreateTheRightAmountOfTags(): void + { + $tags = $this->getMockedTransformer()->reverseTransform('Hello, Demo, How'); + + $this->assertCount(3, $tags); + $this->assertSame('Hello', $tags[0]->getName()); + } + + /** + * Ensures that empty tags and errors in the number of commas are + * dealt correctly. + */ + public function testCreateTheRightAmountOfTagsWithTooManyCommas(): void + { + $transformer = $this->getMockedTransformer(); + + $this->assertCount(3, $transformer->reverseTransform('Hello, Demo,, How')); + $this->assertCount(3, $transformer->reverseTransform('Hello, Demo, How,')); + } + + /** + * Ensures that leading/trailing spaces are ignored for tag names. + */ + public function testTrimNames(): void + { + $tags = $this->getMockedTransformer()->reverseTransform(' Hello '); + + $this->assertSame('Hello', $tags[0]->getName()); + } + + /** + * Ensures that duplicated tag names are ignored. + */ + public function testDuplicateNames(): void + { + $tags = $this->getMockedTransformer()->reverseTransform('Hello, Hello, Hello'); + + $this->assertCount(1, $tags); + } + + /** + * Ensures that the transformer uses tags already persisted in the database. + */ + public function testUsesAlreadyDefinedTags(): void + { + $persistedTags = [ + $this->createTag('Hello'), + $this->createTag('World'), + ]; + $tags = $this->getMockedTransformer($persistedTags)->reverseTransform('Hello, World, How, Are, You'); + + $this->assertCount(5, $tags); + $this->assertSame($persistedTags[0], $tags[0]); + $this->assertSame($persistedTags[1], $tags[1]); + } + + /** + * Ensures that the transformation from Tag instances to a simple string + * works as expected. + */ + public function testTransform(): void + { + $persistedTags = [ + $this->createTag('Hello'), + $this->createTag('World'), + ]; + $transformed = $this->getMockedTransformer()->transform($persistedTags); + + $this->assertSame('Hello,World', $transformed); + } + + /** + * This helper method mocks the real TagArrayToStringTransformer class to + * simplify the tests. See https://phpunit.de/manual/current/en/test-doubles.html. + * + * @param array $findByReturnValues The values returned when calling to the findBy() method + */ + private function getMockedTransformer(array $findByReturnValues = []): TagArrayToStringTransformer + { + $tagRepository = $this->getMockBuilder(TagRepository::class) + ->disableOriginalConstructor() + ->getMock(); + $tagRepository->expects($this->any()) + ->method('findBy') + ->willReturn($findByReturnValues); + + return new TagArrayToStringTransformer($tagRepository); + } + + /** + * This helper method creates a Tag instance for the given tag name. + */ + private function createTag(string $name): Tag + { + $tag = new Tag(); + $tag->setName($name); + + return $tag; + } +} diff --git a/app/tests/Utils/ValidatorTest.php b/app/tests/Utils/ValidatorTest.php new file mode 100644 index 0000000..32efe9b --- /dev/null +++ b/app/tests/Utils/ValidatorTest.php @@ -0,0 +1,102 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Tests\Utils; + +use App\Utils\Validator; +use PHPUnit\Framework\TestCase; + +class ValidatorTest extends TestCase +{ + private $validator; + + protected function setUp(): void + { + $this->validator = new Validator(); + } + + public function testValidateUsername(): void + { + $test = 'username'; + + $this->assertSame($test, $this->validator->validateUsername($test)); + } + + public function testValidateUsernameEmpty(): void + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The username can not be empty.'); + $this->validator->validateUsername(null); + } + + public function testValidateUsernameInvalid(): void + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The username must contain only lowercase latin characters and underscores.'); + $this->validator->validateUsername('INVALID'); + } + + public function testValidatePassword(): void + { + $test = 'password'; + + $this->assertSame($test, $this->validator->validatePassword($test)); + } + + public function testValidatePasswordEmpty(): void + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The password can not be empty.'); + $this->validator->validatePassword(null); + } + + public function testValidatePasswordInvalid(): void + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The password must be at least 6 characters long.'); + $this->validator->validatePassword('12345'); + } + + public function testValidateEmail(): void + { + $test = '@'; + + $this->assertSame($test, $this->validator->validateEmail($test)); + } + + public function testValidateEmailEmpty(): void + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The email can not be empty.'); + $this->validator->validateEmail(null); + } + + public function testValidateEmailInvalid(): void + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The email should look like a real email.'); + $this->validator->validateEmail('invalid'); + } + + public function testValidateFullName(): void + { + $test = 'Full Name'; + + $this->assertSame($test, $this->validator->validateFullName($test)); + } + + public function testValidateFullNameEmpty() + { + $this->expectException('Exception'); + $this->expectExceptionMessage('The full name can not be empty.'); + $this->validator->validateFullName(null); + } +} diff --git a/app/tests/bootstrap.php b/app/tests/bootstrap.php new file mode 100644 index 0000000..d75b711 --- /dev/null +++ b/app/tests/bootstrap.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Component\Dotenv\Dotenv; + +require dirname(__DIR__).'/vendor/autoload.php'; + +if (file_exists(dirname(__DIR__).'/config/bootstrap.php')) { + require dirname(__DIR__).'/config/bootstrap.php'; +} elseif (method_exists(Dotenv::class, 'bootEnv')) { + (new Dotenv())->bootEnv(dirname(__DIR__).'/.env'); +} diff --git a/app/translations/messages+intl-icu.ar.xlf b/app/translations/messages+intl-icu.ar.xlf new file mode 100644 index 0000000..ae4cabe --- /dev/null +++ b/app/translations/messages+intl-icu.ar.xlf @@ -0,0 +1,447 @@ + + + + + + note + ملاحظه + + + tip + ارشاد + + + not_available + غير متاح + + + mit_license + رخصة MIT + + + + http_error.name + خطأ {status_code, number} + + + http_error.description + يوجد خطأ غير معروف (HTTP {status_code, number}) الذى يمنع طلبك. + + + http_error.suggestion + ارجع الى الصفحه الرئيسيه.]]> + + + http_error_403.description + ليس لديك إذن للوصول إلى هذا المورد. + + + http_error_403.suggestion + اطلب من مديرك أو مسؤول النظام منحك حق الوصول إلى هذا المورد. + + + http_error_404.description + لم نتمكن من العثور على الصفحة التي طلبتها. + + + http_error_404.suggestion + ارجع الى الصفحه الرئيسيه.]]> + + + http_error_500.description + There was an internal server error. + + + http_error_500.suggestion + ارجع الى الصفحه الرئيسيه.]]> + + + + title.homepage + سيمفوني التجريبى]]> + + + title.source_code + رمز المصدر المستخدم لتقديم هذه الصفحة + + + title.controller_code + كود المضبط + + + title.twig_template_code + Twig كود قالب + + + title.login + تسجيل دخول امن + + + title.post_list + قائمه المنشورات + + + title.edit_post + تعديل منشور #{id, number} + + + title.add_comment + اضافه تعليق + + + title.comment_error + يوجد خطأفى نشر هذا التعليق + + + title.edit_user + تعديل المستخدم + + + title.change_password + تغير الباسوورد + + + + action.show + عرض + + + action.show_post + عرض المنشور + + + action.show_code + عرض الكود + + + action.edit + تعديل + + + action.edit_post + تعديل المنشور + + + action.save + حفظ التغيرات + + + action.delete_post + حذف المنشور + + + delete_post_modal.title + هل انت متاكد من حذف هذا المنشور؟ + + + delete_post_modal.body + هذا الاجراء لايمكن ان لا يتم. + + + label.delete_post + حذف منشور + + + label.cancel + الغاء + + + action.create_post + انشاء منشور جديد + + + label.create_post + انشاء منشور + + + label.save_and_create_new + حفظ وانشاء جديد + + + action.back_to_list + الرجوع لقائمه المنشورات + + + action.publish_comment + نشر تعليق + + + action.sign_in + تسجيل الدخول + + + action.browse_app + تصفح التطبيق + + + action.browse_admin + تصفح لوحه تحكم الاداره + + + action.edit_user + تعديل المستخدم + + + action.change_password + تغير الباسوورد + + + action.close + أغلق + + + + label.title + لقب + + + label.author + المؤلف + + + label.author_email + ايميل المؤلف + + + label.username + اسم المستخدم + + + label.fullname + الاسم الكامل + + + label.email + ايميل + + + label.password + باسوورد + + + label.current_password + الباسوورد الحالى + + + label.new_password + باسوورد جديد + + + label.new_password_confirm + تاكيد الباسوورد + + + label.role + دور + + + label.content + محتوى + + + label.summary + ملخص + + + label.published_at + نشر فى + + + label.tags + العلامات + + + label.actions + أجراءات + + + title.post_new + انشاء المنشور + + + action.edit_contents + عدل المحتويات + + + + menu.toggle_nav + تبديل التنقل + + + menu.choose_language + اختر لغه + + + menu.post_list + قائمه المنشورات + + + menu.back_to_blog + الرجوع الى المدونه + + + menu.homepage + الرئيسيه + + + menu.admin + لوحه التحكم + + + menu.user + الحساب + + + menu.logout + تسجيل الخروج + + + menu.rss + منشورات المدونه RSS + + + menu.search + بحث + + + + post.to_publish_a_comment + لنشر تعليق + + + post.num_comments + {count, plural, one {# comment} اخرى {# comments}} + + + post.commented_on + علق على + + + post.no_comments + كن اول من يعلق على هذا المنشور. + + + post.no_posts_found + لا يوجد منشورات. + + + post.created_successfully + تم انشاء المنشور بنجاح! + + + post.updated_successfully + تم تحديث المنشور بنجاح! + + + post.deleted_successfully + تم حدف المنشور بنجاح! + + + post.search_for + بحث عن... + + + post.search_no_results + لا يوجد نتائج + + + + user.updated_successfully + تم تحديث المستخدم بنجاح! + + + + notification.comment_created + منشورك استقبل تعليق! + + + notification.comment_created.description + هذا الرابط]]> + + + + help.app_description + تطبيق تجريبى تم بناءه بواسطه اطار سيمفوني لتوضيح الطريقة الموصى بها لتطوير تطبيقات سيمفوني.]]> + + + help.show_code + المتحكم و القالب المستخدم لعرض هذه الصفحه.]]> + + + help.browse_app + جزئ العام لدى هذا التطبيق التجريبى.]]> + + + help.browse_admin + لوحه تحكم الاداره لدى هذا التطبيق التجريبى.]]> + + + help.login_users + حاول أي من المستخدمين التاليين + + + help.role_user + مستخدم عادى + + + help.role_admin + مدير + + + help.reload_fixtures + إذا لم يعمل هؤلاء المستخدمون ، فأعد تحميل تركيبات التطبيق عن طريق تشغيل هذا الأمر من خلال محرر الاوامر: + + + help.add_user + إذا كنت ترغب في إنشاء مستخدمين جدد ، فقم بتشغيل هذا الأمر الآخر: + + + help.more_information + مستند سيمفوني.]]> + + + help.post_summary + لا يمكن أن تحتوي الملخصات على محتويات Markdown أو HTML; فقط نص عادي. + + + help.post_publication + حدد التاريخ في المستقبل لجدولة نشر منشور المدونة. + + + help.post_content + استخدم Markdown لتنسيق محتويات مشاركة المدونة. HTML مسموح به أيضًا. + + + help.comment_content + سيتم الإشراف على التعليقات التي لا تلتزم بمدونة قواعد السلوك الخاصة بنا. + + + + info.change_password + بعد تغيير كلمة المرور الخاصة بك ، سيتم تسجيل خروجك من التطبيق. + + + + rss.title + مدونه سيمفوني التجريبيه + + + rss.description + أحدث المشاركات المنشورة على مدونه سيمفوني التجريبيه + + + + paginator.previous + السابق + + + paginator.next + التالى + + + paginator.current + (الحالى) + + + + diff --git a/app/translations/messages+intl-icu.bg.xlf b/app/translations/messages+intl-icu.bg.xlf new file mode 100644 index 0000000..c3f764e --- /dev/null +++ b/app/translations/messages+intl-icu.bg.xlf @@ -0,0 +1,368 @@ + + + + + + note + БЕЛЕЖКА + + + tip + СЪВЕТ + + + not_available + Не е налично + + + mit_license + MIT лиценз + + + http_error.name + Грешка {status_code, number} + + + http_error.description + Има неизвестна грешка (HTTP {status_code, number}) , която спира изпълнението на заявката. + + + http_error.suggestion + се върни в началната страница.]]> + + + http_error_403.description + Нямате права за да достъпите този ресурс. + + + http_error_403.suggestion + Попитайте вашият мениджър или системен администратор да ви позволи достъп до този ресурс. + + + http_error_404.description + Страницата която търсите не е намерена. + + + http_error_404.suggestion + се върнете в началната страница.]]> + + + http_error_500.description + Възникна вътрешно сървърна грешка. + + + http_error_500.suggestion + се върнете в началната страница.]]> + + + title.homepage + Symfony Demo приложението]]> + + + title.source_code + Изходен код, използван за изобразяване на тази страница + + + title.controller_code + Код на контролера + + + title.twig_template_code + Twig темплейт код + + + title.login + Сигурен вход + + + title.post_list + Списък с публикации + + + title.edit_post + Редактиране на публикация #{id, number} + + + title.add_comment + Добавяне на коментар + + + title.comment_error + Възникна грешка докато се публикуваше вашият коментар + + + action.show + Покажи + + + action.show_post + Покажи публикацията + + + action.show_code + Покажи кода + + + action.edit + Редактирай + + + action.edit_post + Редактиране на публикация + + + action.save + Запази промените + + + action.delete_post + Изтрии публикацията + + + delete_post_modal.title + Сигурни ли сте, че искате да изтриете тази публикация? + + + delete_post_modal.body + Това действие не може да бъде отменено. + + + label.delete_post + Изтрии публикация + + + label.cancel + Отказ + + + action.create_post + Нова публикация + + + label.create_post + Създайте публикация + + + label.save_and_create_new + Запазване и създаване на нова + + + action.back_to_list + Върнете се в списъка с публикации + + + action.publish_comment + Публикуване на коментара + + + action.sign_in + Вход + + + action.browse_app + Прегледайте приложението + + + action.browse_admin + Прегледайте бекенда + + + label.title + Заглавие + + + action.close + затварям + + + label.author + Автор + + + label.author_email + Автор email + + + label.username + Потребителско има + + + label.password + Парола + + + label.role + Роля + + + label.content + Съдържание + + + label.summary + Обобщение + + + label.published_at + Публикувано на + + + label.tags + Тагове + + + label.actions + Деиствия + + + title.post_new + Създаване на публикация + + + action.edit_contents + Редактиране + + + menu.toggle_nav + Превключване на менюто + + + menu.choose_language + Изберете език + + + menu.post_list + Списък с публикации + + + menu.back_to_blog + Назад към блога + + + menu.homepage + Начална страница + + + menu.admin + Бекенд + + + menu.logout + Изход + + + menu.rss + Блог публикации RSS + + + menu.search + Търсене + + + post.to_publish_a_comment + за да публикувате коментар + + + post.num_comments + {count, plural, one {# коментар} other {# коментари}} + + + post.commented_on + коментирано на + + + post.no_comments + Бъдете първият, който ще напише коментар към публикациата. + + + post.no_posts_found + Не са намерени публикации. + + + post.created_successfully + Публикацията беше създадена успешно! + + + post.updated_successfully + Публикацията беше редактирана успешно! + + + post.deleted_successfully + Публикацията беше изтрита успешно! + + + post.search_for + Търсене за... + + + post.search_no_results + Няма намерени резултати + + + notification.comment_created + Публикацията ви получи коментар! + + + notification.comment_created.description + този линк]]> + + + help.app_description + примерно приложение създатено със Symfony Framework за да илюстрира препоръчителния начин за разработка със Symfony.]]> + + + help.show_code + Контролера и темплейта използвани за показването на тази страница.]]> + + + help.browse_app + публичната секция на примерното приложение.]]> + + + help.browse_admin + административният панел на примерното приложение.]]> + + + help.login_users + Опитайте някой от следните потребители + + + help.role_user + обикновен потребител + + + help.role_admin + администратор + + + help.reload_fixtures + Ако тези потребители не работят, презаредете приложението като използвате следната команда от терминала: + + + help.add_user + Ако искате да създадете нови потребители, изпълнете тази друга команда: + + + help.more_information + Symfony документацията.]]> + + + rss.title + Symfony Demo блог + + + rss.description + Най-новите публикации, публикувани на блога на Symfony Demo + + + + paginator.previous + Предишна + + + paginator.next + Следваща + + + + diff --git a/app/translations/messages+intl-icu.ca.xlf b/app/translations/messages+intl-icu.ca.xlf new file mode 100644 index 0000000..6339669 --- /dev/null +++ b/app/translations/messages+intl-icu.ca.xlf @@ -0,0 +1,265 @@ + + + + + + note + NOTA + + + tip + TRUC + + + not_available + No disponible + + + mit_license + Llicència MIT + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Codi font utilitzat per mostrar aquesta pàgina + + + title.controller_code + Codi del controlador + + + title.twig_template_code + Codi de la plantilla Twig + + + title.login + Accés segur + + + title.post_list + LListat d'articles + + + title.edit_post + Editar article #{id, number} + + + title.add_comment + Afegir un comentari + + + title.comment_error + S'ha produït un error al publicar el teu comentari + + + + action.show + Veure + + + action.show_code + Veure codi + + + action.edit + Editar + + + action.edit_post + Editar article + + + action.save + Guardar canvis + + + action.delete_post + Borrar article + + + delete_post_modal.title + Estas segur que vols eliminar aquest article? + + + delete_post_modal.body + Aquesta acció no es pot desfer. + + + label.delete_post + Borrar article + + + label.cancel + Cancel·lar + + + action.create_post + Crear un nou article + + + label.create_post + Crear article + + + action.back_to_list + Tornar al llistat d'articles + + + action.publish_comment + Publicar comentari + + + action.sign_in + Iniciar sessió + + + action.browse_app + Accedir a l'aplicació + + + action.browse_admin + Accedir al backend + + + + label.title + Títol + + + action.close + Tancar + + + label.author + Autor + + + label.author_email + Email de l'autor + + + label.username + Nom d'usuari + + + label.password + Contrasenya + + + label.role + Rol + + + label.content + Contingut + + + label.summary + Resum + + + label.published_at + Publicat el + + + label.actions + Accions + + + title.post_new + Nou article + + + action.edit_contents + Editar contingut + + + + menu.post_list + Llistat d'articles + + + menu.back_to_blog + Tornar al blog + + + menu.homepage + Inici + + + menu.admin + Backend + + + menu.logout + Desconnectar-se + + + + post.to_publish_a_comment + per a publicar un comentari + + + post.num_comments + {count, plural, one {# comentari} other {# comentaris}} + + + post.commented_on + comentat el + + + post.no_comments + Sigues el primer en afegir un comentari a aquest article. + + + post.no_posts_found + No s'ha trobat cap article. + + + + help.app_description + aplicació demo ha estat programada amb el framework Symfony per mostrar la forma recomenada de programar aplicacions Symfony.]]> + + + help.show_code + controlador i de la plantilla utilitzats per crear aquesta pàgina.]]> + + + help.browse_app + part pública de l'aplicació de demostració.]]> + + + help.browse_admin + part d'administració de l'aplicació de demostració.]]> + + + help.login_users + Prova a accedir amb aquests usuaris + + + help.role_user + usuari normal + + + help.role_admin + administrador + + + help.reload_fixtures + Si cap d'aquests usuaris funciona, carrega de nou les dades de l'aplicació executant la següent ordre a la teva consola: + + + help.add_user + Si vols crear nous usuaris, executa aquesta altra ordre: + + + help.more_information + documentació de Symfony.]]> + + + + diff --git a/app/translations/messages+intl-icu.cs.xlf b/app/translations/messages+intl-icu.cs.xlf new file mode 100644 index 0000000..c8f9562 --- /dev/null +++ b/app/translations/messages+intl-icu.cs.xlf @@ -0,0 +1,262 @@ + + + + + + note + POZNÁMKA + + + tip + TIP + + + not_available + není dostupný + + + mit_license + MIT licence + + + + title.homepage + Symfony Demo aplikaci]]> + + + title.source_code + Zdrojové kódy použité při vykreslení této stránky + + + title.controller_code + Kód kontroleru + + + title.twig_template_code + Kód Twig šablony + + + title.login + Přihlášení + + + title.post_list + Seznam příspěvků + + + title.edit_post + Upravit příspěvek #{id, number} + + + title.add_comment + Přidat komentář + + + title.comment_error + Při vytváření komentáře došlo k chybě + + + + action.show + Zobrazit + + + action.show_code + Zobrazit zdrojáky + + + action.edit + Upravit + + + action.edit_post + Upravit příspěvek + + + action.save + Uložit změny + + + action.delete_post + Odstranit příspěvek + + + action.create_post + Nový příspěvek + + + label.create_post + Vytvořit příspěvek + + + action.back_to_list + Zpět na seznam příspěvků + + + action.publish_comment + Zveřejnit komentář + + + action.sign_in + Přihlásit + + + action.browse_app + Přejít do aplikace + + + action.browse_admin + Přejít do administrace + + + + label.title + Název + + + action.close + Zavřít + + + label.author + Autor + + + label.author_email + Email autora + + + label.username + Login + + + label.password + Heslo + + + label.role + Role + + + label.content + Obsah + + + label.summary + Shrnutí + + + label.published_at + Publikován + + + label.actions + Akce + + + title.post_new + Nový příspěvek + + + action.edit_contents + Upravit příspěvek + + + + menu.toggle_nav + Přepnout navigaci + + + menu.post_list + Seznam příspěvků + + + menu.back_to_blog + Zpět na blog + + + menu.homepage + Hlavní stránka + + + menu.admin + Administrace + + + menu.logout + Odhlásit + + + + post.to_publish_a_comment + se pro přidání komentáře + + + post.num_comments + {count, plural, one {# komentář} few {# komentáře} other {# komentářů}} + + + post.commented_on + přidal komentář v + + + post.no_comments + Buďte první, kdo napíše komentář k tomuto příspěvku. + + + post.no_posts_found + Nebyly nalezeny žádné příspěvky. + + + + help.app_description + demo aplikace vytvořena Symfony frameworkem s využitím doporučených způsobů vývoje Symfony aplikací.]]> + + + help.show_code + kontroleru a šablony použitých při vykreslení této stránky.]]> + + + help.browse_app + veřejnou část demo aplikace.]]> + + + help.browse_admin + administrační část demo aplikace.]]> + + + help.login_users + Zkuste následující uživatele + + + help.role_user + běžný uživatel + + + help.role_admin + administrátor + + + help.reload_fixtures + Pokud přihlášení s těmito uživateli nefunguje, spusťte z terminálu příkaz pro načtení výchozích dat: + + + help.add_user + Pokud chcete vytvořit nového uživatele, spusťte příkaz: + + + help.more_information + Symfony dokumentace.]]> + + + + paginator.previous + Předchozí + + + paginator.next + Další + + + + diff --git a/app/translations/messages+intl-icu.de.xlf b/app/translations/messages+intl-icu.de.xlf new file mode 100644 index 0000000..8824edc --- /dev/null +++ b/app/translations/messages+intl-icu.de.xlf @@ -0,0 +1,370 @@ + + + + + + note + HINWEIS + + + tip + TIPP + + + not_available + Nicht verfügbar + + + mit_license + MIT-Lizenz + + + + title.homepage + Symfony Demo Anwendung]]> + + + title.source_code + Benutzter Source Code um diese Seite zu rendern. + + + title.controller_code + Controller Code + + + title.twig_template_code + Twig Template Code + + + title.login + Sicherer Login + + + title.post_list + Beitragsliste + + + title.edit_post + Bearbeite Beitrag #{id, number} + + + title.add_comment + Kommentar hinzufügen + + + title.comment_error + Beim Veröffentlichen deines Kommentares ist ein Fehler aufgetreten + + + + action.show + Anzeigen + + + action.show_code + Code anzeigen + + + action.edit + Bearbeiten + + + action.edit_post + Beitrag bearbeiten + + + action.save + Änderungen speichern + + + action.delete_post + Beitrag löschen + + + delete_post_modal.title + Bist du sicher, dass du diesen Beitrag löschen möchtest? + + + delete_post_modal.body + Diese Aktion kann nicht rückgängig gemacht werden. + + + label.delete_post + Beitrag löschen + + + label.cancel + Abbrechen + + + action.create_post + Neuen Beitrag erstellen + + + label.create_post + Beitrag erstellen + + + label.save_and_create_new + Speichern und neuen Beitrag erstellen + + + action.back_to_list + Zurück zur Beitragsliste + + + action.publish_comment + Kommentar veröffentlichen + + + action.sign_in + Login + + + action.browse_app + Zum Frontend + + + action.browse_admin + Zum Backend + + + action.close + Schliessen + + + + label.title + Titel + + + label.author + Autor + + + label.author_email + Autor E-Mail + + + label.username + Benutzername + + + label.password + Passwort + + + label.role + Rolle + + + label.content + Inhalt + + + label.summary + Zusammenfassung + + + label.published_at + Veröffentlicht am + + + label.actions + Aktionen + + + title.post_new + Beitrag erstellen + + + action.edit_contents + Inhalt bearbeiten + + + + menu.toggle_nav + Navigation ein-/ausblenden + + + menu.post_list + Beitragsliste + + + menu.back_to_blog + Zurück zum Blog + + + menu.homepage + Homepage + + + menu.admin + Backend + + + menu.logout + Logout + + + + post.to_publish_a_comment + um einen Kommentar zu veröffentlichen + + + post.num_comments + {count, plural, one {# Kommentar} other {# Kommentare}} + + + post.commented_on + kommentierte + + + post.no_comments + Hinterlasse als Erste/r einen Kommentar zu diesem Beitrag. + + + post.no_posts_found + Keine Beiträge gefunden. + + + post.created_successfully + Der Beitrag wurde erfolgreich erstellt! + + + post.updated_successfully + Der Beitrag wurde erfolgreich bearbeitet! + + + post.deleted_successfully + Der Beitrag wurde erfolgreich gelöscht! + + + post.search_for + Suchen nach... + + + + help.app_description + Demo Applikation, die mit dem Symfony Framework gebaut wurde um eine Empfehlung für die Entwicklung auszusprechen.]]> + + + help.show_code + Controller und Template zu sehen der für das Rendern dieser Seite benutzt wird.]]> + + + help.browse_app + Frontend der Demo Applikation.]]> + + + help.browse_admin + Backend der Demo Applikation.]]> + + + help.login_users + Versuche einen der folgenden Benutzer + + + help.role_user + Normaler Benutzer + + + help.role_admin + Administrator + + + help.reload_fixtures + Wenn keiner der Benutzer funktioniert versuche bitte die Fixtures mit folgendem Befehl auf der Kommandozeile neu einzuspielen: + + + help.add_user + Wenn du einen neuen Benutzer erstellen willst benutzte diesen Befehl: + + + help.more_information + Symfony Dokumentation.]]> + + + action.show_post + Beitrag anzeigen + + + rss.title + Blog + + + menu.choose_language + Sprache wählen + + + rss.description + Die neuesten Posts, die auf dem Symfony Blog veröffentlicht wurden. + + + menu.rss + Blog Posts RSS + + + menu.search + Suchen + + + label.tags + Tags + + + http_error.name + Fehler {status_code, number} + + + http_error.description + Ein unbekannter Fehler (HTTP {status_code, number}) ist aufgetreten. Deine Anfrage konnte deswegen nicht ausgeführt werden. + + + http_error.suggestion + gehe zurück zur Homepage.]]> + + + http_error_403.description + Du hast keine Berechtigung, auf diese Ressource zuzugreifen. + + + http_error_403.suggestion + Frage deinen Manager oder Systemadministrator, um dir Zugriff auf diese Ressource zu gewähren. + + + http_error_404.description + Wir konnten die von dir angeforderte Seite nicht finden. + + + http_error_404.suggestion + gehe zurück zur Homepage.]]> + + + http_error_500.description + Es gab einen internen Serverfehler. + + + http_error_500.suggestion + gehe zurück zur Homepage.]]> + + + notification.comment_created + Dein Beitrag hat einen Kommentar erhalten! + + + notification.comment_created.description + diesem Link folgst.]]> + + + + paginator.previous + Vorherige + + + paginator.next + Nächste + + + + diff --git a/app/translations/messages+intl-icu.en.xlf b/app/translations/messages+intl-icu.en.xlf new file mode 100644 index 0000000..8e7fb9e --- /dev/null +++ b/app/translations/messages+intl-icu.en.xlf @@ -0,0 +1,447 @@ + + + + + + note + NOTE + + + tip + TIP + + + not_available + Not available + + + mit_license + MIT License + + + + http_error.name + Error {status_code, number} + + + http_error.description + There was an unknown error (HTTP {status_code, number}) that prevented to complete your request. + + + http_error.suggestion + go back to the homepage.]]> + + + http_error_403.description + You don't have permission to access to this resource. + + + http_error_403.suggestion + Ask your manager or system administrator to grant you access to this resource. + + + http_error_404.description + We couldn't find the page you requested. + + + http_error_404.suggestion + go back to the homepage.]]> + + + http_error_500.description + There was an internal server error. + + + http_error_500.suggestion + go back to the homepage.]]> + + + + title.homepage + Symfony Demo application]]> + + + title.source_code + Source code used to render this page + + + title.controller_code + Controller code + + + title.twig_template_code + Twig template code + + + title.login + Secure Sign in + + + title.post_list + Post List + + + title.edit_post + Edit post #{id, number} + + + title.add_comment + Add a comment + + + title.comment_error + There was an error publishing your comment + + + title.edit_user + Edit user + + + title.change_password + Change password + + + + action.show + Show + + + action.show_post + Show post + + + action.show_code + Show code + + + action.edit + Edit + + + action.edit_post + Edit post + + + action.save + Save changes + + + action.delete_post + Delete post + + + delete_post_modal.title + Are you sure you want to delete this post? + + + delete_post_modal.body + This action cannot be undone. + + + label.delete_post + Delete post + + + label.cancel + Cancel + + + action.create_post + Create a new post + + + label.create_post + Create post + + + label.save_and_create_new + Save and create new + + + action.back_to_list + Back to the post list + + + action.publish_comment + Publish comment + + + action.sign_in + Sign in + + + action.browse_app + Browse application + + + action.browse_admin + Browse backend + + + action.edit_user + Edit user + + + action.change_password + Change password + + + action.close + Close + + + + label.title + Title + + + label.author + Author + + + label.author_email + Author email + + + label.username + Username + + + label.fullname + Fullname + + + label.email + Email + + + label.password + Password + + + label.current_password + Current password + + + label.new_password + New password + + + label.new_password_confirm + Confirm password + + + label.role + Role + + + label.content + Content + + + label.summary + Summary + + + label.published_at + Published at + + + label.tags + Tags + + + label.actions + Actions + + + title.post_new + Post creation + + + action.edit_contents + Edit contents + + + + menu.toggle_nav + Toggle navigation + + + menu.choose_language + Choose language + + + menu.post_list + Post list + + + menu.back_to_blog + Back to blog + + + menu.homepage + Homepage + + + menu.admin + Backend + + + menu.user + Account + + + menu.logout + Logout + + + menu.rss + Blog Posts RSS + + + menu.search + Search + + + + post.to_publish_a_comment + to publish a comment + + + post.num_comments + {count, plural, one {# comment} other {# comments}} + + + post.commented_on + commented on + + + post.no_comments + Be the first to comment on this post. + + + post.no_posts_found + No posts found. + + + post.created_successfully + Post created successfully! + + + post.updated_successfully + Post updated successfully! + + + post.deleted_successfully + Post deleted successfully! + + + post.search_for + Search for... + + + post.search_no_results + No results found + + + + user.updated_successfully + User updated successfully! + + + + notification.comment_created + Your post received a comment! + + + notification.comment_created.description + this link]]> + + + + help.app_description + demo application built in the Symfony Framework to illustrate the recommended way of developing Symfony applications.]]> + + + help.show_code + Controller and template used to render this page.]]> + + + help.browse_app + public section of the demo application.]]> + + + help.browse_admin + admin backend of the demo application.]]> + + + help.login_users + Try either of the following users + + + help.role_user + regular user + + + help.role_admin + administrator + + + help.reload_fixtures + If these users don't work, reload application fixtures by running this command from the terminal: + + + help.add_user + If you want to create new users, run this other command: + + + help.more_information + Symfony doc.]]> + + + help.post_summary + Summaries can't contain Markdown or HTML contents; only plain text. + + + help.post_publication + Set the date in the future to schedule the blog post publication. + + + help.post_content + Use Markdown to format the blog post contents. HTML is allowed too. + + + help.comment_content + Comments not complying with our Code of Conduct will be moderated. + + + + info.change_password + After changing your password, you will be logged out of the application. + + + + rss.title + Symfony Demo blog + + + rss.description + Most recent posts published on the Symfony Demo blog + + + + paginator.previous + Previous + + + paginator.next + Next + + + paginator.current + (current) + + + + diff --git a/app/translations/messages+intl-icu.es.xlf b/app/translations/messages+intl-icu.es.xlf new file mode 100644 index 0000000..1c69bd8 --- /dev/null +++ b/app/translations/messages+intl-icu.es.xlf @@ -0,0 +1,375 @@ + + + + + + note + NOTA + + + tip + TRUCO + + + not_available + No disponible + + + mit_license + Licencia MIT + + + + http_error.name + Error {status_code, number} + + + http_error.description + Se ha producido un error desconocido (HTTP {status_code, number}) que ha impedido completar tu petición. + + + http_error.suggestion + vuelve a la portada del sitio.]]> + + + http_error_403.description + No tienes permiso para acceder a este recurso. + + + http_error_403.suggestion + Solicita a los administradores de este sitio que te concedan permiso para acceder al recurso solicitado. + + + http_error_404.description + No hemos podido encontrar la página solicitada. + + + http_error_404.suggestion + vuelve a la portada del sitio.]]> + + + http_error_500.description + Se ha producido un error grave en el servidor. + + + http_error_500.suggestion + vuelve a la portada del sitio.]]> + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Código fuente utilizado para mostrar esta página + + + title.controller_code + Código del controlador + + + title.twig_template_code + Código de la plantilla Twig + + + title.login + Acceso seguro + + + title.post_list + Listado de artículos + + + title.edit_post + Editar artículo #{id, number} + + + title.add_comment + Añadir un comentario + + + title.comment_error + Se ha producido un error al publicar tu comentario + + + + action.show + Ver + + + action.show_code + Ver código + + + action.edit + Editar + + + action.edit_post + Editar artículo + + + action.save + Guardar cambios + + + action.delete_post + Borrar artículo + + + delete_post_modal.title + ¿Está seguro que quiere eliminar este artículo? + + + delete_post_modal.body + Esta acción no se puede deshacer. + + + label.delete_post + Borrar artículo + + + label.cancel + Cancelar + + + action.create_post + Crear un nuevo artículo + + + label.create_post + Crear artículo + + + label.save_and_create_new + Guardar artículo y crear otro + + + action.back_to_list + Volver al listado de artículos + + + action.publish_comment + Publicar comentario + + + action.sign_in + Iniciar sesión + + + action.browse_app + Acceder a la aplicación + + + action.browse_admin + Acceder al backend + + + + label.title + Título + + + action.close + Cerrar + + + label.author + Autor + + + label.author_email + Email del autor + + + label.username + Nombre de usuario + + + label.password + Contraseña + + + label.role + Rol + + + label.content + Contenido + + + label.summary + Resumen + + + label.published_at + Publicado el + + + label.tags + Etiquetas + + + label.actions + Acciones + + + title.post_new + Nuevo artículo + + + action.edit_contents + Editar contenidos + + + + menu.toggle_nav + Turnar navegación + + + menu.choose_language + Seleccionar idioma + + + menu.post_list + Listado de artículos + + + menu.back_to_blog + Volver al blog + + + menu.homepage + Inicio + + + menu.admin + Backend + + + menu.logout + Desconectarse + + + + post.to_publish_a_comment + para publicar un comentario + + + post.num_comments + {count, plural, one {# comentario} other {# comentarios}} + + + post.commented_on + comentado el + + + post.no_comments + Se el primero en añadir un comentario en este artículo. + + + post.no_posts_found + No se ha encontrado ningún artículo. + + + + help.app_description + aplicación demo ha sido programada con el framework Symfony para mostrar la forma recomendada de programar aplicaciones Symfony.]]> + + + help.show_code + controlador y de la plantilla utilizados para crear esta página.]]> + + + help.browse_app + parte pública de la aplicación de demostración.]]> + + + help.browse_admin + parte de administración de la aplicación.]]> + + + help.login_users + Prueba a acceder con estos usuarios + + + help.role_user + usuario normal + + + help.role_admin + administrador + + + help.reload_fixtures + Si ninguno de estos usuarios funciona, carga de nuevo los datos de la aplicación ejecutando el siguiente comando en tu consola: + + + help.add_user + Si quieres crear nuevos usuarios, ejecuta este otro comando: + + + help.more_information + documentación de Symfony.]]> + + + action.show_post + Mostrar artículo + + + menu.rss + RSS del blog + + + menu.search + Buscar + + + post.created_successfully + ¡Artículo creado con éxito! + + + post.updated_successfully + ¡Artículo actualizado con éxito! + + + post.deleted_successfully + ¡Artículo eliminado con éxito! + + + post.search_for + Buscar... + + + post.search_no_results + No se encontraron resultados + + + notification.comment_created + ¡Su artículo recibió un comentario! + + + notification.comment_created.description + este enlace]]> + + + rss.title + Blog de Symfony Demo + + + rss.description + Publicaciones más recientes publicadas en el blog de Symfony Demo + + + + paginator.previous + Anterior + + + paginator.next + Siguiente + + + + diff --git a/app/translations/messages+intl-icu.fr.xlf b/app/translations/messages+intl-icu.fr.xlf new file mode 100644 index 0000000..fcf96e2 --- /dev/null +++ b/app/translations/messages+intl-icu.fr.xlf @@ -0,0 +1,443 @@ + + + + + + note + NOTE + + + tip + ASTUCE + + + not_available + Indisponible + + + mit_license + Licence MIT + + + + http_error.name + Erreur {status_code, number} + + + http_error.description + Il y a eu une erreur inconnue (HTTP {status_code, number}) qui a empêché l'aboutissement de votre requête. + + + http_error.suggestion + retournez sur la page principale.]]> + + + http_error_403.description + Vous n'avez pas les droits pour accéder à cette ressource. + + + http_error_403.suggestion + Demandez à votre manager ou à votre administrateur système de vous donner les droits pour accéder à cette ressource. + + + http_error_404.description + Nous n'avons pas pu trouver la page demandée. + + + http_error_404.suggestion + retournez sur la page principale.]]> + + + http_error_500.description + Il y a eu une erreur interne du serveur. + + + http_error_500.suggestion + retournez sur la page principale.]]> + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Le code source utilisé pour afficher cette page + + + title.controller_code + Code du contrôleur + + + title.twig_template_code + Code du template Twig + + + title.login + Connexion sécurisée + + + title.post_list + Liste des articles + + + title.edit_post + Modifier l'article #{id, number} + + + title.add_comment + Laisser un commentaire + + + title.comment_error + Il y a eu une erreur lors de la publication de votre commentaire. + + + title.edit_user + Modifier l'utilisateur + + + title.change_password + Modifier le mot de passe + + + + action.show + Voir + + + action.show_post + Voir l'article + + + action.show_code + Voir le code + + + action.edit + Editer + + + action.edit_post + Modifier l'article + + + action.save + Enregistrer + + + action.delete_post + Supprimer l'article + + + delete_post_modal.title + Êtes-vous sûr de vouloir supprimer ce post ? + + + delete_post_modal.body + Cette action ne peut pas être annulée. + + + label.delete_post + Supprimer l'article + + + label.cancel + Annuler + + + label.create_post + Créer un article + + + action.create_post + Créer un nouvel article + + + label.save_and_create_new + Enregistrer et créer un nouveau + + + action.back_to_list + Retour à la liste des articles + + + action.publish_comment + Publier + + + action.sign_in + Connectez-vous + + + action.browse_app + Naviguer sur l'application + + + action.browse_admin + Naviguer sur l'admin + + + action.edit_user + Modifier l'utilisateur + + + action.change_password + Modifier le mot de passe + + + + label.title + Titre + + + action.close + Fermer + + + label.author + Auteur + + + label.author_email + Mail de l'auteur + + + label.username + Identifiant + + + label.fullname + Nom complet + + + label.email + Mail + + + label.password + Mot de passe + + + label.current_password + Mot de passe actuel + + + label.new_password + Nouveau mot de passe + + + label.new_password_confirm + Confirmer le mot de passe + + + label.role + Rôle + + + label.content + Contenu + + + label.summary + Résumé + + + label.published_at + Publié le + + + label.tags + Tags + + + label.actions + Actions + + + title.post_new + Ajouter un nouvel article + + + action.edit_contents + Modifier le contenu + + + + menu.toggle_nav + Activer ou désactiver la navigation + + + menu.choose_language + Choisir la langue + + + menu.post_list + Liste des articles + + + menu.back_to_blog + Retour au blog + + + menu.homepage + Accueil + + + menu.admin + Admin + + + menu.user + Compte + + + menu.logout + Déconnexion + + + menu.rss + Blog Posts RSS + + + menu.search + Recherche + + + + post.to_publish_a_comment + pour publier un commentaire + + + post.num_comments + {count, plural, one {# commentaire} other {# commentaires}} + + + post.commented_on + commenté le + + + post.no_comments + Soyez le premier à commenter cet article. + + + post.no_posts_found + Aucun article trouvé. + + + post.created_successfully + Article créé avec succès ! + + + post.updated_successfully + Article mis à jour avec succès ! + + + post.deleted_successfully + Article supprimé avec succès ! + + + post.search_for + Rechercher... + + + post.search_no_results + Aucun résultat + + + + user.updated_successfully + Informations mises à jour avec succès ! + + + + notification.comment_created + Votre article a reçu un commentaire ! + + + notification.comment_created.description + ce lien]]> + + + + help.app_description + application de démonstration construite avec le framework Symfony pour illustrer la façon recommandée de développer des applications Symfony.]]> + + + help.show_code + contrôleur et du template utilisé pour afficher cette page.]]> + + + help.browse_app + section publique de l'application de démonstration.]]> + + + help.browse_admin + interface d'administration de l'application de démonstration.]]> + + + help.login_users + Essayez l'un des utilisateurs suivants + + + help.role_user + utilisateur normal + + + help.role_admin + administrateur + + + help.reload_fixtures + Si ces utilisateurs ne fonctionnent pas, rechargez les fixtures de l'application en exécutant cette commande depuis le terminal : + + + help.add_user + Si vous voulez créer de nouveaux utilisateurs, exécutez cette autre commande : + + + help.more_information + documentation de Symfony.]]> + + + help.post_summary + Les résumés ne peuvent pas contenir de contenu Markdown ou HTML ; seulement du texte brut. + + + help.post_publication + Sélectionnez une date future pour programmer la publication de l'article. + + + help.post_content + Utilisez du Markdown pour formater le contenu de l'article. Le HTML est également autorisé. + + + help.comment_content + Les commentaires non conformes à notre code de conduite seront modérés. + + + + info.change_password + Après avoir modifié votre mot de passe, vous serez déconnecté de l'application. + + + + rss.title + Blog de démo Symfony + + + rss.description + Derniers articles publiés sur le blog de démo Symfony + + + + paginator.previous + Précédent + + + paginator.next + Suivant + + + + diff --git a/app/translations/messages+intl-icu.hr.xlf b/app/translations/messages+intl-icu.hr.xlf new file mode 100644 index 0000000..66ae1b6 --- /dev/null +++ b/app/translations/messages+intl-icu.hr.xlf @@ -0,0 +1,348 @@ + + + + + + note + BILJEŠKA + + + tip + SAVJET + + + not_available + Nedostupno + + + mit_license + Licenca MIT + + + + http_error.name + Greška {status_code, number} + + + http_error.description + Desila se nepoznata greška (HTTP {status_code, number}), koja je spriječila završetak zahtjeva. + + + http_error.suggestion + se vratite na početnu stranicu.]]> + + + http_error_403.description + Nemate pravo pristupa ovom izvoru. + + + http_error_403.suggestion + Zatražite dozvolu od vašeg menadžera ili administratora sustava kako bi pristupili ovom izvoru. + + + http_error_404.description + Nismo pronašli zatraženu stranicu. + + + http_error_404.suggestion + se vratite na početnu stranicu.]]> + + + http_error_500.description + Došlo je do unutarnje greške kod poslužitelja. + + + http_error_500.suggestion + se vratite na početnu stranicu.]]> + + + title.homepage + Symfony Demo web aplikaciju]]> + + + title.source_code + Izvorni kod korišten tokom izvršavanja ove stranice + + + title.controller_code + Izvorni kod kontrolora + + + title.twig_template_code + Izvorni kod Twig predloška + + + title.login + Prijava korisnika + + + title.post_list + Popis članaka + + + title.edit_post + Uredi članak #{id, number} + + + title.add_comment + Dodaj komentar + + + title.comment_error + Došlo je do greške kod objave vašeg komentara + + + action.show + Prikaži + + + action.show_code + Prikaži izvorni kod + + + action.edit + Uredi + + + action.edit_post + Uredi članak + + + action.save + Spremi promjene + + + action.delete_post + Izbriši članak + + + delete_post_modal.title + Jeste li sigurni da želite pobrisati odabrani članak? + + + delete_post_modal.body + Ova radnja nemože biti poništena. + + + label.delete_post + Izbriši članak + + + label.cancel + Otkaži + + + action.create_post + Stvori novi članak + + + label.create_post + Stvori članak + + + label.save_and_create_new + Ažuriraj i napravi novi + + + action.back_to_list + Nazad na izlist + + + action.publish_comment + Objavi komentar + + + action.sign_in + Prijavi se + + + action.browse_app + Posjeti aplikaciju + + + action.browse_admin + Posjeti pozadinu + + + label.title + Naslov + + + action.close + Zatvoriti + + + label.author + Autor + + + label.author_email + E-mail adresa autora + + + label.username + Korisničko ime + + + label.password + Lozinka + + + label.role + Uloga + + + label.content + Sadržaj + + + label.summary + Sažetak + + + label.published_at + Objavljeno + + + label.tags + Oznake + + + label.actions + Radnje + + + title.post_new + Novi članak + + + action.edit_contents + Uredi sadržaj + + + menu.toggle_nav + Sakrij/Pokaži navigaciju + + + menu.choose_language + Odaberi jezik + + + menu.post_list + Izlist članaka + + + menu.back_to_blog + Nazad na blog + + + menu.homepage + Početna stranica + + + menu.admin + Pozadina + + + menu.logout + Odjavi se + + + menu.rss + RSS Blog Članaka + + + + post.to_publish_a_comment + u svrhu objave komentara + + + post.num_comments + {count, plural, one {# komentar} few {# komentara} other {# komentara}} + + + post.commented_on + komentirao dana + + + post.no_comments + Budi prvi koji će kometirati ovaj članak. + + + post.no_posts_found + Niti jedan članak pronađen. + + + post.created_successfully + Članak uspješno napravljen! + + + post.updated_successfully + Članak uspješno ažuriran! + + + post.deleted_successfully + Članak uspješno pobrisan! + + + + notification.comment_created + Vaš članak je komentiran! + + + notification.comment_created.description + ovu poveznicu]]> + + + + help.app_description + demo web aplikacija napravljena unutar Symfony okvirne tehnologije, služi kako bi pokazala preporučeni način korištenja Symfony okvirne tehnologije.]]> + + + help.show_code + Kontrolora i Predloška korištenog prilikom stvaranja ove stranice.]]> + + + help.browse_app + javni odjeljak demo aplikacije.]]> + + + help.browse_admin + administrativni odjeljak demo aplikacije.]]> + + + help.login_users + Pokušaj sa jednim od sljedećih korisnika + + + help.role_user + uobičajen korisnik + + + help.role_admin + administrator + + + help.reload_fixtures + Ukoliko ovi korisnici ne funkcioniraju, ponovno učitajte fixture/instalaciju podataka aplikacije tako što ćete pokrenuti sljedeću naredbu unutar konzole: + + + help.add_user + Ukoliko želite stvoriti nove korisnike, pokrenite sljedeću naredbu: + + + help.more_information + Symfony dokumentaciju.]]> + + + + rss.title + Symfony Demo blog + + + rss.description + Najnoviji članci objavljeni na Symfony Demo Blog aplikaciji + + + + diff --git a/app/translations/messages+intl-icu.id.xlf b/app/translations/messages+intl-icu.id.xlf new file mode 100644 index 0000000..d5531f9 --- /dev/null +++ b/app/translations/messages+intl-icu.id.xlf @@ -0,0 +1,254 @@ + + + + + + note + CATATAN + + + tip + TIPS + + + not_available + Tidak tersedia + + + mit_license + MIT License + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Kode yang digunakan untuk membuat halaman ini + + + title.controller_code + Kode di Controller + + + title.twig_template_code + Kode Twig template + + + title.login + Secure Sign in + + + title.post_list + Daftar Posting + + + title.edit_post + Sunting posting #{id, number} + + + title.add_comment + Tambahkan komentar + + + title.comment_error + Ada kesalahan penerbitan komentar Anda + + + + action.show + Tampilkan + + + action.show_code + Tampilkan Kode + + + action.edit + Sunting + + + action.edit_post + Sunting Posting + + + action.save + Simpan perubahan + + + action.delete_post + Hapus posting + + + action.create_post + Buat posting baru + + + label.create_post + Buat posting + + + action.back_to_list + Kembali Ke daftar posting + + + action.publish_comment + Terbitkan komentar + + + action.sign_in + Masuk + + + action.browse_app + Jelajah aplikasi + + + action.browse_admin + Jelajah backend + + + + label.title + Judul + + + action.close + Menutup + + + label.author + Penulis + + + label.author_email + Email penulis + + + label.username + Nama Pengguna + + + label.password + Kata Sandi + + + label.role + Peranan + + + label.content + Konten + + + label.summary + Ringkasan + + + label.published_at + Diterbitkan pada + + + label.actions + Tindakan + + + title.post_new + Pembuatan Posting + + + action.edit_contents + Sunting konten + + + + menu.post_list + Daftar posting + + + menu.back_to_blog + Kembali ke blog + + + menu.homepage + Beranda + + + menu.admin + Backend + + + menu.logout + Keluar + + + + post.to_publish_a_comment + untuk menerbitkan komentar + + + post.num_comments + {count} komentar + + + post.commented_on + Komentar pada + + + post.no_comments + Jadilah yang pertama yang mengomentari posting ini. + + + + help.app_description + aplikasi demo dibangun di dalam Symfony Framework sebagai ilustrasi cara-cara yang direkomendasikan untuk membangun aplikasi Symfony.]]> + + + help.show_code + Controller dan template yang digunakan untuk membuat halaman ini.]]> + + + help.browse_app + bagian publik dari aplikasi demo ini.]]> + + + help.browse_admin + admin backend dari aplikasi demo ini.]]> + + + help.login_users + Coba salah satu dari pengguna berikut + + + help.role_user + Pengguna umum + + + help.role_admin + administrator + + + help.reload_fixtures + Jika pengguna-pengguna tersebut tidak dapat digunakan, muat ulang fixtur aplikasi dengan menjalankan perintah berikut dari terminal: + + + help.add_user + Jika anda ingin membuat user baru, jalankan perintah berikut: + + + help.more_information + Symfony doc.]]> + + + + paginator.previous + Sebelumnya + + + paginator.next + Berikutnya + + + + diff --git a/app/translations/messages+intl-icu.it.xlf b/app/translations/messages+intl-icu.it.xlf new file mode 100644 index 0000000..b37e362 --- /dev/null +++ b/app/translations/messages+intl-icu.it.xlf @@ -0,0 +1,377 @@ + + + + + + note + NOTE + + + tip + SUGGERIMENTO + + + not_available + Non disponibile + + + mit_license + Licenza MIT + + + + http_error.name + Errore {status_code, number} + + + http_error.description + Un errore sconosciuto (HTTP {status_code, number}) ha impedito di completare la richiesta. + + + http_error.suggestion + tornare alla homepage.]]> + + + http_error_403.description + Non si dispone dei permessi per accedere a questa risorsa. + + + http_error_403.suggestion + Chiedere a un amministratore di fornire un accesso a questa risorsa. + + + http_error_404.description + La pagina richiesta non è stata trovata. + + + http_error_404.suggestion + tornare alla homepage.]]> + + + http_error_500.description + Si è verificato un errore interno del server. + + + http_error_500.suggestion + tornare alla homepage.]]> + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Codice sorgente usato per effettuare il render di questa pagina + + + title.controller_code + Codice del controllore + + + title.twig_template_code + Codice del template Twig + + + title.login + Accesso sicuro + + + title.post_list + Lista dei post + + + title.edit_post + Modifica post #{id, number} + + + title.add_comment + Aggiungi un commento + + + title.comment_error + C'è stato un errore nella pubblicazione del tuo commento + + + + action.show + Mostra + + + action.show_post + Mostra post + + + action.show_code + Mostra codice + + + action.edit + Modifica + + + action.edit_post + Modifica post + + + action.save + Salva cambiamenti + + + action.delete_post + Elimina post + + + delete_post_modal.title + Sicuro di voler eliminare questo post? + + + delete_post_modal.body + Non si può annullare questa azione. + + + label.delete_post + Elimina post + + + label.cancel + Annulla + + + action.create_post + Crea un nuovo post + + + label.create_post + Crea post + + + label.save_and_create_new + Salva e crea nuovo + + + action.back_to_list + Ritorna alla lista dei post + + + action.publish_comment + Pubblica commento + + + action.sign_in + Accedi + + + action.browse_app + Naviga nell'applicazione + + + action.browse_admin + Naviga nel pannello di controllo + + + + label.title + Titolo + + + action.close + Chiudere + + + label.author + Autore + + + label.author_email + Email dell'autore + + + label.username + Nome utente + + + label.password + Password + + + label.role + Ruolo + + + label.content + Contenuto + + + label.summary + Descrizione + + + label.published_at + Data pubblicazione + + + label.tags + Tag + + + label.actions + Azioni + + + title.post_new + Creazione post + + + action.edit_contents + Modifica contenuti + + + + menu.toggle_nav + Navigazione + + + menu.choose_language + Lingua + + + menu.post_list + Lista post + + + menu.back_to_blog + Ritorna al blog + + + menu.homepage + Homepage + + + menu.admin + Pannello di controllo + + + menu.logout + Esci + + + menu.rss + RSS del blog + + + menu.search + Ricercare + + + + post.to_publish_a_comment + per pubblicare un commento + + + post.num_comments + {count, plural, one {# commento} other {# commenti}} + + + post.commented_on + ha commentato il + + + post.no_comments + Commenta per primo. + + + post.no_posts_found + Nessun post trovato. + + + post.created_successfully + Post creato! + + + post.updated_successfully + Post aggiornato! + + + post.deleted_successfully + Post eliminato! + + + post.search_for + Ricercare... + + + post.search_no_results + Nessun risultato trovato + + + + notification.comment_created + Il post ha ricevuto un commento! + + + notification.comment_created.description + collegamento]]> + + + + help.app_description + applicazione demo creata con il Framework Symfony per illustrare il modo raccomandato per sviluppare applicazioni con Symfony.]]> + + + help.show_code + controllori e template usati per effettuare il render di questa pagina.]]> + + + help.browse_app + sezione pubblica dell'applicazione demo.]]> + + + help.browse_admin + pannello di controllo dell'applicazione demo.]]> + + + help.login_users + Prova uno dei seguenti utenti + + + help.role_user + utente normale + + + help.role_admin + amministratore + + + help.reload_fixtures + Se questi utenti non dovessero funzionare, ricarica i dati dell'applicazione eseguendo questo comando dal terminale: + + + help.add_user + Se vuoi aggiungere nuovi utenti, esegui quest'altro comando: + + + help.more_information + documentazione di Symfony.]]> + + + + rss.title + Symfony Demo blog + + + rss.description + Post più recenti pubblicati su Symfony Demo blog + + + + paginator.previous + Precedente + + + paginator.next + Successivo + + + + diff --git a/app/translations/messages+intl-icu.ja.xlf b/app/translations/messages+intl-icu.ja.xlf new file mode 100644 index 0000000..f611ee6 --- /dev/null +++ b/app/translations/messages+intl-icu.ja.xlf @@ -0,0 +1,295 @@ + + + + + + note + ノート + + + tip + ヒント + + + not_available + 利用できません + + + mit_license + MIT ライセンス + + + + title.homepage + Symfony Demo アプリケーションへ]]> + + + title.source_code + このページを表示するのに使われたソースコード + + + title.controller_code + Controller コード + + + title.twig_template_code + Twig テンプレートコード + + + title.login + 安全なログイン + + + title.post_list + 記事一覧 + + + title.edit_post + #{id, number} この記事を編集 + + + title.add_comment + コメントを追加 + + + title.comment_error + コメント投稿時にエラーが起きました + + + + action.show + 確認 + + + action.show_code + コードを見る + + + action.edit + 編集 + + + action.edit_post + 記事を編集 + + + action.save + 変更を保存 + + + action.delete_post + 記事を削除 + + + action.create_post + 新たに記事を作成 + + + label.create_post + 記事を作成 + + + action.back_to_list + 記事一覧に戻る + + + action.publish_comment + コメントを投稿 + + + action.sign_in + ログイン + + + action.browse_app + アプリケーションへ + + + action.browse_admin + バックエンドへ + + + + label.title + タイトル + + + action.close + 閉じる + + + label.author + 投稿者 + + + label.author_email + 投稿者メールアドレス + + + label.username + ユーザー名 + + + label.password + パスワード + + + label.role + ロール + + + label.content + 本文 + + + label.summary + 要約 + + + label.published_at + 投稿日時 + + + label.actions + アクション + + + title.post_new + 記事を作成 + + + action.edit_contents + 内容を編集 + + + + menu.post_list + 記事一覧 + + + menu.back_to_blog + ブログへ戻る + + + menu.homepage + ホームページ + + + menu.admin + バックエンド + + + menu.logout + ログアウト + + + menu.rss + ブログ投稿RSS + + + menu.search + サーチ + + + + post.to_publish_a_comment + コメントを投稿する + + + post.num_comments + {count} コメント + + + post.commented_on + コメント投稿日時 + + + post.no_comments + この記事へのコメントはまだ投稿されていません。 + + + post.no_posts_found + 投稿は見つかりませんでした。 + + + post.created_successfully + 投稿は正常に作成されました! + + + post.updated_successfully + 投稿は正常に更新されました! + + + post.deleted_successfully + 投稿は正常に削除されました! + + + post.search_for + 検索する... + + + post.search_no_results + 結果が見つかりません + + + + notification.comment_created + あなたの投稿はコメントを受け取った! + + + notification.comment_created.description + このリンクに沿ってコメントを読むことができます]]> + + + + help.app_description + デモアプリケーションで、Symfonyアプリケーションを開発する際に推奨される方法を説明するためのものです。]]> + + + help.show_code + Controller と template のソースコードが表示されます。]]> + + + help.browse_app + 公開セクション を確認する。]]> + + + help.browse_admin + 管理セクション を確認する。]]> + + + help.login_users + 以下のユーザーのどれかを試す + + + help.role_user + 通常ユーザー + + + help.role_admin + 管理者 + + + help.reload_fixtures + もしこれらのユーザーが利用できない場合、このコマンドをターミナルで実行してアプリケーション設定を再読み込みしてください: + + + help.add_user + もし新しいユーザーを作成したければ、このコマンドを実行してください: + + + help.more_information + Symfony docを参照してください。]]> + + + + paginator.previous + 前へ + + + paginator.next + 次へ + + + + diff --git a/app/translations/messages+intl-icu.lt.xlf b/app/translations/messages+intl-icu.lt.xlf new file mode 100644 index 0000000..f169c26 --- /dev/null +++ b/app/translations/messages+intl-icu.lt.xlf @@ -0,0 +1,443 @@ + + + + + + note + PASTABA + + + tip + PATARIMAS + + + not_available + Nepasiekiama + + + mit_license + MIT Licencija + + + + http_error.name + Klaida {status_code, number} + + + http_error.description + Įvyko nežinoma klaida (HTTP {status_code, number}), kuri neleido užbaigti užklausos. + + + http_error.suggestion + grįžti į pagrindinį puslapį.]]> + + + http_error_403.description + Neturite teisės peržiūrėti šito turinio. + + + http_error_403.suggestion + Parašykite sistemos administratoriaus, kad suteiktu prieigą prie šio turinio. + + + http_error_404.description + Puslapis nerastas. + + + http_error_404.suggestion + grįžti į pagrindinį puslapį.]]> + + + http_error_500.description + Įvyko vidinė serverio klaida. + + + http_error_500.suggestion + grįžti į pagrindinį puslapį.]]> + + + + title.homepage + Symfony Demo puslapį]]> + + + title.source_code + Pirminis kodas + + + title.controller_code + Controller kodas + + + title.twig_template_code + Twig šablono kodas + + + title.login + Prisijungimas + + + title.post_list + Įrašų sąrašas + + + title.edit_post + Redaguoti įrašą #{id, number} + + + title.add_comment + Pridėti komentarą + + + title.comment_error + Įvyko klaida skelbiant komentarą + + + title.edit_user + Redaguoti vartotoją + + + title.change_password + Pakeisti slaptažodį + + + + action.show + Rodyti + + + action.show_post + Rodyti įrašą + + + action.show_code + Rodyti kodą + + + action.edit + Redaguoti + + + action.edit_post + Redaguoti įrašą + + + action.save + Išsaugoti + + + action.delete_post + Ištrinti įrašą + + + delete_post_modal.title + Ar tirkai norite ištrinti įrašą? + + + delete_post_modal.body + Šio veiksmo negalima atšaukti. + + + label.delete_post + Ištrinti įrašą + + + label.cancel + Atšaukti + + + action.create_post + Sukurti naują įrašą + + + label.create_post + Sukurti įrašą + + + label.save_and_create_new + Išsaugoti ir sukurti naują + + + action.back_to_list + Grįžti atgal į įrašų sąrašą + + + action.publish_comment + Paskelbti komentarą + + + action.sign_in + Prisijungti + + + action.browse_app + Naršyti + + + action.browse_admin + Naršyti admin dalį + + + action.edit_user + Redaguoti vartotoją + + + action.change_password + Pakeisti slaptažodį + + + + label.title + Pavadinimas + + + action.close + Uždaryti + + + label.author + Autorius + + + label.author_email + Autoriaus el. paštas + + + label.username + Vartotojas vardas + + + label.fullname + Pilnas vardas + + + label.email + El. paštas + + + label.password + Slaptažodis + + + label.current_password + Dabartinis slaptažodis + + + label.new_password + Naujas slaptažodis + + + label.new_password_confirm + Patvirtinti slaptažodį + + + label.role + Rolė + + + label.content + Turinys + + + label.summary + Santrauka + + + label.published_at + Publikuota + + + label.tags + Žymos + + + label.actions + Veiksmai + + + title.post_new + Įrašo sukūrimas + + + action.edit_contents + Redaguoti turinį + + + + menu.toggle_nav + Perjungti navigaciją + + + menu.choose_language + Pasirinkti kalbą + + + menu.post_list + Įrašų sąrašas + + + menu.back_to_blog + Atgal į blogą + + + menu.homepage + Pagrindinis puslapis + + + menu.admin + Backend + + + menu.user + Paskyra + + + menu.logout + Atsijungti + + + menu.rss + Blogo Įrašai RSS + + + menu.search + Paieška + + + + post.to_publish_a_comment + kad paskelbti komentarą + + + post.num_comments + {count, plural, one {# komentaras} other {# komentarai}} + + + post.commented_on + kada komentuota + + + post.no_comments + Būkite pirmas, pakomentavęs šį įrašą. + + + post.no_posts_found + Nerasta įrašų. + + + post.created_successfully + Įrašas sukurtas sėkmingai! + + + post.updated_successfully + Įrašas atnaujintas sėkmingai! + + + post.deleted_successfully + Įrašas ištrintas sėkmingai! + + + post.search_for + Ieškoti... + + + post.search_no_results + Nieko nerasta + + + + user.updated_successfully + Vartotojas atnaujintas sėkmingai! + + + + notification.comment_created + Jūsų įrašas gavo komentarą! + + + notification.comment_created.description + nuorodą]]> + + + + help.app_description + demo puslapis sukurtas su Symfony Framework parodydant tinkamą Symfony panaudojimą.]]> + + + help.show_code + Controller ir šabloną panaudoti atvaizduojant šį puslapį.]]> + + + help.browse_app + public dalį demo puslapio.]]> + + + help.browse_admin + admin dalį demo puslapio.]]> + + + help.login_users + išbandykite vieną iš šių vartotojų + + + help.role_user + nuolatinis vartotojas + + + help.role_admin + administratorius + + + help.reload_fixtures + Jei vartotojai neveikia, perleiskite šia komandą: + + + help.add_user + Jei norite sukurti naują vartotoją paleiskite šia komandą: + + + help.more_information + Symfony dokumentciją.]]> + + + help.post_summary + Santrauka negali būti su Markdown ar HTML žymom, tiktai paprastas tekstas + + + help.post_publication + Nustatykite datą ateityje, kad planuotumėte blogo įrašo paskelbimą. + + + help.post_content + Turinį galima formatuoti su Markdown ir HTML žymom. + + + help.comment_content + Komentarai, kurie neatitinka Elgesio kodekso, bus moderuojami. + + + + info.change_password + Pakeitus slaptažodį, būsite atjungti nuo puslapio. + + + + rss.title + Symfony Demo blogas + + + rss.description + Naujausi įrašai paskelbti Symfony Demo bloge + + + + paginator.previous + Ankstesnis + + + paginator.next + Sekantis + + + + diff --git a/app/translations/messages+intl-icu.nl.xlf b/app/translations/messages+intl-icu.nl.xlf new file mode 100644 index 0000000..dbeaa48 --- /dev/null +++ b/app/translations/messages+intl-icu.nl.xlf @@ -0,0 +1,377 @@ + + + + + + note + NOTITIE + + + tip + TIP + + + not_available + Niet beschikbaar + + + mit_license + MIT Licentie + + + + http_error.name + Fout {status_code, number} + + + http_error.description + Een onbekende fout (HTTP {status_code, number}) is opgetreden, waardoor de aanvraag niet gelukt is. + + + http_error.suggestion + ga terug naar de beginpagina.]]> + + + http_error_403.description + Je hebt geen toestemming om deze bron op te vragen. + + + http_error_403.suggestion + Vraag je manager of systeembeheerder om toegang tot deze bron te krijgen. + + + http_error_404.description + We konden de pagina die je opvroeg niet vinden. + + + http_error_404.suggestion + ga terug naar de beginpagina.]]> + + + http_error_500.description + Er is een interne serverfout opgetreden. + + + http_error_500.suggestion + ga terug naar de beginpagina.]]> + + + title.homepage + Symfony Demo applicatie]]> + + + title.source_code + Broncode van deze pagina + + + title.controller_code + Controller code + + + title.twig_template_code + Twig template code + + + title.login + Veilig inloggen + + + title.post_list + Berichtenlijst + + + title.edit_post + Bewerk bericht #{id, number} + + + title.add_comment + Voeg een reactie toe + + + title.comment_error + Er is een fout opgetreden bij het opslaan van je reactie + + + + action.show + Weergeven + + + action.show_post + Bericht weergeven + + + action.show_code + Code weergeven + + + action.edit + Bewerken + + + action.edit_post + Bericht bewerken + + + action.save + Opslaan + + + action.delete_post + Bericht verwijderen + + + delete_post_modal.title + Weet je zeker dat je dit bericht wilt verwijderen? + + + delete_post_modal.body + Deze actie kan niet ongedaan gemaakt worden. + + + label.delete_post + Bericht verwijderen + + + label.cancel + Annuleren + + + + action.create_post + Maak nieuw bericht + + + label.create_post + Bericht maken + + + label.save_and_create_new + Opslaan en nieuwe maken + + + action.back_to_list + Terug naar de berichtenlijst + + + action.publish_comment + Reactie opslaan + + + action.sign_in + Inloggen + + + action.browse_app + Applicatie bekijken + + + action.browse_admin + Beheerpaneel bekijken + + + + label.title + Titel + + + action.close + Dichtbij + + + label.author + Auteur + + + label.author_email + Auteur e-mail + + + label.username + Gebruikersnaam + + + label.password + Wachtwoord + + + label.role + Rol + + + label.content + Inhoud + + + label.summary + Samenvatting + + + label.published_at + Geplaatst op + + + label.tags + Tags + + + label.actions + Acties + + + title.post_new + Bericht aanmaken + + + action.edit_contents + Inhoud bewerken + + + + menu.toggle_nav + Wissel navigatie + + + menu.choose_language + Taalkeuze + + + menu.post_list + Berichtenlijst + + + menu.back_to_blog + Terug naar de blog + + + menu.homepage + Beginpagina + + + menu.admin + Beheerpaneel + + + menu.logout + Uitloggen + + + menu.rss + Blogberichten RSS + + + menu.search + Zoek + + + + post.to_publish_a_comment + om een reactie toe te voegen + + + post.num_comments + {count, plural, one {# reactie} other {# reacties}} + + + post.commented_on + gereageerd op + + + post.no_comments + Reageer als eerste op dit bericht. + + + post.no_posts_found + Geen berichten gevonden. + + + post.created_successfully + Bericht met succes aangemaakt! + + + post.updated_successfully + Bericht met succes bijgewerkt! + + + post.deleted_successfully + Bericht met succes verwijderd! + + + post.search_for + Zoek naar... + + + post.search_no_results + No results found + + + + notification.comment_created + Er is een reactie bij je bericht geplaatst! + + + notification.comment_created.description + deze link]]> + + + + help.app_description + voorbeeld applicatie, gemaakt met het Symfony Framework, die je een indruk geeft van de aanbevolen manier om een Symfony applicatie te ontwikkelen.]]> + + + help.show_code + Controller en template, die gebruikt zijn bij het weergeven van deze pagina.]]> + + + help.browse_app + publieke gedeelte van de demo applicatie.]]> + + + help.browse_admin + Beheerpaneel van de demo applicatie.]]> + + + help.login_users + Probeer één van de volgende gebruikers + + + help.role_user + normale gebruiker + + + help.role_admin + beheerder + + + help.reload_fixtures + Als het niet lukt om in te loggen met deze gebruikers, herlaad dan de applicatie instellingen door dit commando in de terminal uit te voeren: + + + help.add_user + Als u een nieuwe gebruiker wilt toevoegen, voer dan dit commando uit: + + + help.more_information + Symfony documentatie.]]> + + + + rss.title + Symfony Demo blog + + + rss.description + De meest recente berichten, gepubliceerd op De Symfony Demo blog + + + + paginator.previous + Vorige + + + paginator.next + Volgende + + + + diff --git a/app/translations/messages+intl-icu.pl.xlf b/app/translations/messages+intl-icu.pl.xlf new file mode 100644 index 0000000..dca6220 --- /dev/null +++ b/app/translations/messages+intl-icu.pl.xlf @@ -0,0 +1,293 @@ + + + + + + note + UWAGA + + + tip + PORADA + + + not_available + Niedostępne + + + mit_license + Licencja MIT + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Kod źródłowy użyty do wygenerowania tej podstrony + + + title.controller_code + Kod kontrolera + + + title.twig_template_code + Kod szablonu Twig + + + title.login + Bezpieczne logowanie + + + title.post_list + Lista artykułów + + + title.edit_post + Edytuj artykuł #{id, number} + + + title.add_comment + Dodaj komentarz + + + title.comment_error + Podczas publikacji Twojego komentarza wystąpił błąd + + + + action.show + Pokaż + + + action.show_code + Pokaż kod + + + action.edit + Edytuj + + + action.edit_post + Edytuj artykuł + + + action.save + Zapisz + + + action.delete_post + Usuń artykuł + + + delete_post_modal.title + Czy na pewno chcesz usunąć ten artykuł? + + + delete_post_modal.body + Ta akcja nie może zostać cofnięta. + + + label.delete_post + Usuń artykuł + + + label.cancel + Anuluj + + + action.create_post + Dodaj nowy artykuł + + + label.create_post + Dodaj artykuł + + + label.save_and_create_new + Zapisz i dodaj kolejny + + + action.back_to_list + Powrót do listy artykułów + + + action.publish_comment + Publikuj komentarz + + + action.sign_in + Zaloguj się + + + action.browse_app + Przeglądaj aplikację + + + action.browse_admin + Przeglądaj panel administracyjny + + + + label.title + Tytuł + + + action.close + Blisko + + + label.author + Autor + + + label.author_email + Adres e-mail autora + + + label.username + Użytkownik + + + label.password + Hasło + + + label.role + Rola + + + label.content + Treść + + + label.summary + Podsumowanie + + + label.published_at + Opublikowano + + + label.actions + Akcje + + + title.post_new + Tworzenie nowego artykułu + + + action.edit_contents + Edycja treści + + + + menu.toggle_nav + Przełącz nawigację + + + menu.post_list + Lista artykułów + + + menu.back_to_blog + Powrót do bloga + + + menu.homepage + Strona główna + + + menu.admin + Panel administracyjny + + + menu.logout + Wyloguj się + + + + post.to_publish_a_comment + aby dodać komentarz + + + post.num_comments + {count, plural, one {# komentarz} many {# komentarze} other {# komentarzy}} + + + post.commented_on + skomentował + + + post.no_comments + Bądź pierwszym, który skomentuje. + + + post.no_posts_found + Brak artykułów + + + post.created_successfully + Artykuł został utworzony! + + + post.updated_successfully + Artykuł został zaktualizowany! + + + post.deleted_successfully + Artykuł został usunięty! + + + help.app_description + przykładowa aplikacja zbudowana przy pomocy frameworka Symfony, dla zademonstrowania polecanego sposobu tworzenia aplikacji przy jego użyciu.]]> + + + help.show_code + kontrolera oraz szablonu użytych podczas generowania tej podstrony.]]> + + + help.browse_app + publiczną część aplikacji demonstracyjnej.]]> + + + help.browse_admin + panel administracyjny aplikacji demonstracyjnej.]]> + + + help.login_users + Użyj dowolnego z poniższych użytkowników + + + help.role_user + zwykły użytkownik + + + help.role_admin + administrator + + + help.reload_fixtures + Jeśli powyższe dane logowania nie działają, załaduj ponownie przykładowe dane dla tej aplikacji. Uruchom następującą komendę: + + + help.add_user + Jeśli chcesz dodać nowego użytkownika, uruchom następującą komendę: + + + help.more_information + dokumentację Symfony, aby uzyskać więcej informacji.]]> + + + + paginator.previous + Poprzednia + + + paginator.next + Następna + + + + diff --git a/app/translations/messages+intl-icu.pt_BR.xlf b/app/translations/messages+intl-icu.pt_BR.xlf new file mode 100644 index 0000000..357356c --- /dev/null +++ b/app/translations/messages+intl-icu.pt_BR.xlf @@ -0,0 +1,448 @@ + + + + + + note + NOTA + + + tip + DICA + + + not_available + Não disponível + + + mit_license + Licença MIT + + + + http_error.name + Erro {status_code, number} + + + http_error.description + Ocorreu um erro desconhecido (HTTP {status_code, number}) que impediu a sua requisição de ser completada. + + + http_error.suggestion + volte para a página inicial.]]> + + + http_error_403.description + Você não tem permissão para acessar esse recurso. + + + http_error_403.suggestion + Peça ao seu gerente ou administrador de sistemas para lhe dar acesso a esse recurso. + + + http_error_404.description + Não podemos encontrar a página que você requisitou. + + + http_error_404.suggestion + volte para a página inicial.]]> + + + http_error_500.description + Houve um erro interno no servidor. + + + http_error_500.suggestion + volte para a página inicial.]]> + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Código fonte utilizado para renderizar esta página + + + title.controller_code + Código do Controller + + + title.twig_template_code + Código do template Twig + + + title.login + Login seguro + + + title.post_list + Lista de Posts + + + title.edit_post + Editar o post #{id, number} + + + title.add_comment + Adicionar um comentário + + + title.comment_error + Houve um erro ao publicar o seu comentário + + + title.edit_user + Editar usuário + + + title.change_password + Alterar senha + + + + action.show + Exibir + + + action.show_post + Exibir o post + + + action.show_code + Mostrar o código + + + action.edit + Editar + + + action.edit_post + Editar o post + + + action.save + Salvar alterações + + + action.delete_post + Excluir o post + + + delete_post_modal.title + Tem certeza que deseja excluir esse post? + + + delete_post_modal.body + Essa ação não pode ser desfeita. + + + label.delete_post + Excluir o post + + + label.cancel + Cancelar + + + action.create_post + Criar um novo post + + + label.create_post + Criar um post + + + label.save_and_create_new + Salvar e criar novo + + + action.back_to_list + Voltar para a lista de posts + + + action.publish_comment + Publicar comentário + + + action.sign_in + Entrar + + + action.browse_app + Navegar na aplicação + + + action.browse_admin + Navegar na área administrativa + + + action.edit_user + Editar usuário + + + action.change_password + Alterar senha + + + + label.title + Título + + + action.close + Perto + + + label.author + Autor + + + label.author_email + Email do autor + + + label.username + Usuário + + + label.fullname + Nome completo + + + label.email + Email + + + label.password + Senha + + + label.current_password + Senha atual + + + label.new_password + Nova senha + + + label.new_password_confirm + Confirmar senha + + + label.role + Perfil + + + label.content + Conteúdo + + + label.summary + Sumário + + + label.published_at + Publicado em + + + label.tags + Tags + + + label.actions + Ações + + + title.post_new + Criação do post + + + action.edit_contents + Editar conteúdo + + + + menu.toggle_nav + Alternar navegação + + + menu.choose_language + Escolha o idioma + + + menu.post_list + Lista de posts + + + menu.back_to_blog + Voltar para o blog + + + menu.homepage + Página inicial + + + menu.admin + Área Administrativa + + + menu.user + Conta + + + menu.logout + Sair + + + menu.rss + RSS do Blog + + + menu.search + Pesquisar + + + + post.to_publish_a_comment + para publicar um comentário + + + post.num_comments + {count, plural, one {# comentário} other {# comentários}} + + + post.commented_on + comentou em + + + post.no_comments + Seja o primeiro a comentar nesse post. + + + post.no_posts_found + Nenhum post encontrado. + + + post.created_successfully + Post criado com sucesso! + + + post.updated_successfully + Post atualizado com sucesso! + + + post.deleted_successfully + Post excluído com sucesso! + + + post.search_for + Pesquisar por... + + + post.search_no_results + Nenhum resultado encontrado + + + + user.updated_successfully + Usuário atualizado com sucesso! + + + + notification.comment_created + Seu post recebeu um comentário! + + + notification.comment_created.description + deste link]]> + + + + help.app_description + aplicação de demonstração construída com o Symfony Framework para ilustrar a maneira recomendada de se desenvolver aplicações Symfony.]]> + + + help.show_code + Controller e do template utilizados para renderizar esta página.]]> + + + help.browse_app + área pública da aplicação de demonstração.]]> + + + help.browse_admin + área administrativa da aplicação de demonstração.]]> + + + help.login_users + Experimente um dos usuários abaixo + + + help.role_user + usuário comum + + + help.role_admin + administrador + + + help.reload_fixtures + Se esses usuários não funcionarem, recarregue as fixtures da aplicação executando esse comando no terminal: + + + help.add_user + Se quiser criar novos usuários, execute esse outro comando: + + + help.more_information + documentação do Symfony.]]> + + + + help.post_summary + Sumários não podem conter Markdown ou HTML; apenas texto simples. + + + help.post_publication + Para agendar a publicação do post, informe uma data no futuro. + + + help.post_content + Utilize Markdown para formatar o conteúdo do post. HTML também é permitido. + + + help.comment_content + Comentários que não estiverem de acordo com o nosso Código de Conduta serão moderados. + + + + info.change_password + Após alterar a sua senha, você será deslogado da aplicação. + + + + rss.title + Symfony Demo blog + + + rss.description + Posts mais recentes publicados no blog Symfony Demo + + + + paginator.previous + Anterior + + + paginator.next + Próxima + + + paginator.current + (atual) + + + + diff --git a/app/translations/messages+intl-icu.ro.xlf b/app/translations/messages+intl-icu.ro.xlf new file mode 100644 index 0000000..2608ea5 --- /dev/null +++ b/app/translations/messages+intl-icu.ro.xlf @@ -0,0 +1,290 @@ + + + + + + note + NOTĂ + + + tip + SFAT + + + not_available + Indisponibil + + + mit_license + Licenţă MIT + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Codul sursă folosit în această pagină + + + title.controller_code + Codul din controler + + + title.twig_template_code + Codul din şablonul Twig + + + title.login + Autentificare securizată + + + title.post_list + Lista de articole + + + title.edit_post + Modifică articolul #{id, number} + + + title.add_comment + Adaugă un comentariu + + + title.comment_error + A intervenit o eroare la publicarea comentariului tău + + + + action.show + Vezi + + + action.show_code + Vezi codul sursă + + + action.edit + Modifică + + + action.edit_post + Modifică articolul + + + action.save + Salvează modificările + + + action.delete_post + Şterge articolul + + + delete_post_modal.title + Sunteți sigur că doriți ștergerea acestui articol? + + + delete_post_modal.body + Această acțiune nu poate fi anulată. + + + label.delete_post + Șterge articolul + + + label.cancel + Anulează + + + action.create_post + Creează un articol nou + + + label.create_post + Creează un articol nou + + + label.save_and_create_new + Salvează și creează unul nou + + + action.back_to_list + Înapoi la lista de articole + + + action.publish_comment + Publică comentariu + + + action.sign_in + Autentifică-te + + + action.browse_app + Mergi la aplicaţie + + + action.browse_admin + Mergi la administrare + + + + label.title + Titlu + + + action.close + Închide + + + label.author + Autor + + + label.author_email + Email autor + + + label.username + Utilizator + + + label.password + Parolă + + + label.role + Rol + + + label.content + Conţinut + + + label.summary + Rezumat + + + label.published_at + Publicat la + + + label.actions + Acţiuni + + + title.post_new + Crearea unui articol nou + + + action.edit_contents + Modifică articolul + + + + menu.post_list + Lista de articole + + + menu.back_to_blog + Înapoi la blog + + + menu.homepage + Prima pagină + + + menu.admin + Administrare + + + menu.logout + Ieşire + + + + post.to_publish_a_comment + pentru a publica un comentariu + + + post.num_comments + {count, plural, one {# comentariu} other {# comentarii}} + + + post.commented_on + comentat la + + + post.no_comments + Fii primul care comentează acest articol. + + + post.no_posts_found + Nu s-au găsit articole. + + + post.created_successfully + Articol creat cu succes! + + + post.updated_successfully + Articol modificat cu succes! + + + post.deleted_successfully + Articol șters cu succes! + + + + help.app_description + aplicaţie demonstrativă construită pe Platforma Symfony pentru a ilustra modul recomandat de a dezvolta aplicaţii Symfony.]]> + + + help.show_code + controlerul şi şablonul folosite în acestă pagină.]]> + + + help.browse_app + secţiunea publică a aplicaţiei demonstrative.]]> + + + help.browse_admin + secţiunea administrativă a aplicaţiei demonstrative.]]> + + + help.login_users + Încearcă oricare dintre următorii utilizatori + + + help.role_user + utilizator simplu + + + help.role_admin + administrator + + + help.reload_fixtures + Dacă aceşti utilizatori nu funcţionează, reîncarcă datele fixe ale aplicaţiei (fixtures) prin executarea acestei comenzi în terminal: + + + help.add_user + Dacă doreşti să creezi utilizatori noi, execută această comandă în terminal: + + + help.more_information + documentaţia Symfony.]]> + + + + paginator.previous + Pagina anterioara + + + paginator.next + Pagina urmatoare + + + + diff --git a/app/translations/messages+intl-icu.ru.xlf b/app/translations/messages+intl-icu.ru.xlf new file mode 100644 index 0000000..4c2db7a --- /dev/null +++ b/app/translations/messages+intl-icu.ru.xlf @@ -0,0 +1,447 @@ + + + + + + note + ПРИМЕЧАНИЕ + + + tip + СОВЕТ + + + not_available + Недоступно + + + mit_license + MIT Лицензия + + + + http_error.name + Ошибка {status_code, number} + + + http_error.description + Произошла неизвестная ошибка (HTTP {status_code, number}), которая помешала выполнить ваш запрос. + + + http_error.suggestion + вернитесь на главную страницу.]]> + + + http_error_403.description + У вас нет разрешения на доступ к этому ресурсу. + + + http_error_403.suggestion + Запросите доступ к этому ресурсу у вашего менеджера или системного администратора. + + + http_error_404.description + Мы не смогли найти запрашиваемую вами страницу. + + + http_error_404.suggestion + вернитесь на главную страницу.]]> + + + http_error_500.description + Произошла внутренняя ошибка сервера. + + + http_error_500.suggestion + вернитесь на главную страницу.]]> + + + + title.homepage + Symfony Demo приложение]]> + + + title.source_code + Исходный код, который использовался для отображения этой страницы + + + title.controller_code + Код контроллера + + + title.twig_template_code + Код шаблона Twig + + + title.login + Авторизация + + + title.post_list + Список записей + + + title.edit_post + Изменение записи #{id, number} + + + title.add_comment + Добавить комментарий + + + title.comment_error + Произошла ошибка во время публикации вашего комментария + + + title.edit_user + Изменить пользователя + + + title.change_password + Изменить пароль + + + + action.show + Показать + + + action.show_post + Показать запись + + + action.show_code + Показать код + + + action.edit + Изменить + + + action.edit_post + Изменить запись + + + action.save + Сохранить изменения + + + action.delete_post + Удалить запись + + + delete_post_modal.title + Вы уверены, что хотите удалить эту запись? + + + delete_post_modal.body + Это действие не может быть отменено. + + + label.delete_post + Удалить запись + + + label.cancel + Отменить + + + action.create_post + Создать новую запись + + + label.create_post + Создать запись + + + label.save_and_create_new + Сохранить и создать новую + + + action.back_to_list + Назад к списку записей + + + action.publish_comment + Опубликовать комментарий + + + action.sign_in + Войти + + + action.browse_app + Перейти в публичный раздел + + + action.browse_admin + Перейти в панель управления + + + action.edit_user + Изменить пользователя + + + action.change_password + Изменить пароль + + + + label.title + Название + + + action.close + Закрыть + + + label.author + Автор + + + label.author_email + Email автора + + + label.username + Логин + + + label.fullname + Полное имя + + + label.email + Email + + + label.password + Пароль + + + label.current_password + Текущий пароль + + + label.new_password + Новый пароль + + + label.new_password_confirm + Подтвердите пароль + + + label.role + Роль + + + label.content + Содержание + + + label.summary + Краткое содержание + + + label.published_at + Опубликовано + + + label.tags + Теги + + + label.actions + Действия + + + title.post_new + Создание записи + + + action.edit_contents + Изменить содержание + + + + menu.toggle_nav + Переключить навигацию + + + menu.choose_language + Выбрать язык + + + menu.post_list + Список записей + + + menu.back_to_blog + Назад к блогу + + + menu.homepage + Главная страница + + + menu.admin + Панель управления + + + menu.user + Аккаунт + + + menu.logout + Выйти + + + menu.rss + RSS Записей Блога + + + menu.search + Поиск + + + + post.to_publish_a_comment + опубликовать комментарий + + + post.num_comments + {count, plural, one {# комментарий} few {# комментария} other {# комментариев}} + + + post.commented_on + прокомментировано + + + post.no_comments + Будьте первыми кто прокомментирует эту запись. + + + post.no_posts_found + Ни одной записи не найдено. + + + post.created_successfully + Запись успешно создана! + + + post.updated_successfully + Запись успешно обновлена! + + + post.deleted_successfully + Запись успешно удалена! + + + post.search_for + Искать запись... + + + post.search_no_results + Ничего не найдено + + + + user.updated_successfully + Информация о пользователе успешно обновлена! + + + + notification.comment_created + Ваша запись получила комментарий! + + + notification.comment_created.description + этой ссылке]]> + + + + help.app_description + демо приложение создано на основе Symfony фреймворка для того, чтобы показать рекомендованный способ разработки Symfony приложений.]]> + + + help.show_code + Контроллера и шаблона, которые использовались для отображения этой страницы.]]> + + + help.browse_app + публичный раздел демо приложения.]]> + + + help.browse_admin + панель управления демо приложения.]]> + + + help.login_users + Используйте любого из следующих пользователей + + + help.role_user + обычный пользователь + + + help.role_admin + администратор + + + help.reload_fixtures + Если эти пользователи не работают, перезагрузите фикстуры приложения, выполнив в консоли следующую команду: + + + help.add_user + Если вы хотите создать новых пользователей, воспользуйтесь следующей командой: + + + help.more_information + Symfony документации.]]> + + + help.post_summary + В кратком содержании не допускается использование Markdown разметки и HTML-тегов, только простой текст. + + + help.post_publication + Установите дату в будущем, чтобы запланировать публикацию поста в блоге. + + + help.post_content + Используйте Markdown разметку для оформления записи. HTML тоже разрешён. + + + help.comment_content + Комментарии, не соответствующие нашему Кодексу поведения, будут модерироваться. + + + + info.change_password + После изменения пароля Вам потребуется заново авторизоваться в приложении. + + + + rss.title + Symfony Demo блог + + + rss.description + Самые последние записи, опубликованные в Symfony Demo блоге + + + + paginator.previous + Назад + + + paginator.next + Вперед + + + paginator.current + (текущая) + + + + diff --git a/app/translations/messages+intl-icu.sk.xlf b/app/translations/messages+intl-icu.sk.xlf new file mode 100644 index 0000000..5e28581 --- /dev/null +++ b/app/translations/messages+intl-icu.sk.xlf @@ -0,0 +1,443 @@ + + + + + + note + POZNÁMKA + + + tip + TIP + + + not_available + nie je dostupný + + + mit_license + MIT licencia + + + + http_error.name + Chyba {status_code, number} + + + http_error.description + Vyskytla sa neznáma chyba (HTTP {status_code, number}), ktorá zabránila dokončiť vašu požiadavku. + + + http_error.suggestion + sa vráťte späť na domovskú stránku.]]> + + + http_error_403.description + Nemáte povolenie na prístup k tomuto zdroju. + + + http_error_403.suggestion + Požiadajte svojho nadriadeného alebo správcu systému, aby Vám udelil prístup k tomuto zdroju. + + + http_error_404.description + Nemohli sme nájsť požadovanú stránku. + + + http_error_404.suggestion + sa vráťte späť na domovskú stránku.]]> + + + http_error_500.description + Vyskytla sa interná chyba servera. + + + http_error_500.suggestion + sa vráťte späť na domovskú stránku.]]> + + + + title.homepage + Symfony Demo aplikácii]]> + + + title.source_code + Zdrojové kódy použité pri vykreslení tejto stránky + + + title.controller_code + Kód kontroléra + + + title.twig_template_code + Kód Twig šablóny + + + title.login + Prihlásenie + + + title.post_list + Zoznam príspevkov + + + title.edit_post + Upraviť príspevok #{id, number} + + + title.add_comment + Pridať komentár + + + title.comment_error + Pri vytváraní komentára došlo k chybe + + + title.edit_user + Upraviť užívateľa + + + title.change_password + Zmeniť heslo + + + + action.show + Zobraziť + + + action.show_post + Zobraziť príspevok + + + action.show_code + Zobraziť zdrojáky + + + action.edit + Upraviť + + + action.edit_post + Upraviť príspevok + + + action.save + Uložiť zmeny + + + action.delete_post + Odstrániť príspevok + + + delete_post_modal.title + Naozaj chcete odstrániť tento príspevok? + + + delete_post_modal.body + Túto akciu nie je možné vrátiť späť. + + + label.delete_post + Odstrániť príspevok + + + label.cancel + Zrušiť + + + action.create_post + Nový príspevok + + + label.create_post + Vytvoriť príspevok + + + label.save_and_create_new + Uložiť a vytvoriť nový + + + action.back_to_list + Späť na zoznam príspevkov + + + action.publish_comment + Zverejniť komentár + + + action.sign_in + Prihlásiť + + + action.browse_app + Prejsť do aplikácie + + + action.browse_admin + Prejsť do administrácie + + + action.edit_user + Upraviť užívateľa + + + action.change_password + Zmeniť heslo + + + + label.title + Názov + + + label.author + Autor + + + label.author_email + Email autora + + + label.username + Login + + + label.fullname + Celé meno + + + label.email + Email + + + label.password + Heslo + + + label.current_password + Aktuálne heslo + + + label.new_password + Nové heslo + + + label.new_password_confirm + Potvrďte nové heslo + + + label.role + Rola + + + label.content + Obsah + + + label.summary + Zhrnutie + + + label.published_at + Publikované + + + label.tags + Tágy + + + label.actions + Akcia + + + title.post_new + Nový príspevok + + + action.edit_contents + Upraviť príspevok + + + + menu.toggle_nav + Prepnúť navigáciu + + + menu.choose_language + Vyberte si jazyk + + + menu.post_list + Zoznam príspevkov + + + menu.back_to_blog + Späť na blog + + + menu.homepage + Hlavná stránka + + + menu.admin + Administrácia + + + menu.user + Účet + + + menu.logout + Odhlásiť + + + menu.rss + Blogové príspevky RSS + + + menu.search + Vyhľadávanie + + + + post.to_publish_a_comment + sa pre pridanie komentára + + + post.num_comments + {count, plural, one {# komentár} few {# komentáre} other {# komentárov}} + + + post.commented_on + pridal komentár v + + + post.no_comments + Buďte prví, kto napíše komentár k tomuto príspevku. + + + post.no_posts_found + Neboli nájdené žiadne príspevky. + + + post.created_successfully + Príspevok bol úspešne vytvorený! + + + post.updated_successfully + Príspevok bol úspešne aktualizovaný! + + + post.deleted_successfully + Príspevok bol úspešne odstránený! + + + post.search_for + Hľadať... + + + post.search_no_results + Neboli nájdené žiadne výsledky + + + + user.updated_successfully + Užívateľ bol úspešne aktualizovaný! + + + + notification.comment_created + Váš príspevok dostal komentár! + + + notification.comment_created.description + tento odkaz]]> + + + + help.app_description + demo aplikácie vytvorenej Symfony frameworkom s využitím doporučených spôsobov vývoja Symfony aplikácií.]]> + + + help.show_code + kontroléra a šablóny použitých pri vykreslení tejto stránky.]]> + + + help.browse_app + verejnú časť demo aplikácie.]]> + + + help.browse_admin + administračnú časť demo aplikácie.]]> + + + help.login_users + Skúste nasledujúcich užívateľov + + + help.role_user + bežný užívateľ + + + help.role_admin + administrátor + + + help.reload_fixtures + Ak prihlásenie s týmito užívateľmi nefunguje, spusťte z terminálu príkaz pre načítanie predvolených dát: + + + help.add_user + Ak chcete vytvoriť nového užívateľa, spusťte príkaz: + + + help.more_information + Symfony dokumentácie.]]> + + + help.post_summary + Zhrnutia nemôžu obsahovať Markdown alebo HTML obsah; iba obyčajný text. + + + help.post_publication + Nastavením budúceho dátumu naplánujete zverejnenie blogového príspevku. + + + help.post_content + Pomocou Markdown naformátujte obsah blogového príspevku. HTML je tiež povolené. + + + help.comment_content + Komentáre, ktoré nie sú v súlade s našim Kódexom správania, budú moderované. + + + + info.change_password + Po zmene hesla budete odhlásení z aplikácie. + + + + rss.title + Symfony Demo blog + + + rss.description + Najnovšie príspevky zverejnené na blogu Symfony Demo + + + + paginator.previous + Predošlá + + + paginator.next + Ďalšia + + + paginator.current + (aktuálna) + + + + diff --git a/app/translations/messages+intl-icu.sl.xlf b/app/translations/messages+intl-icu.sl.xlf new file mode 100644 index 0000000..85b9ca6 --- /dev/null +++ b/app/translations/messages+intl-icu.sl.xlf @@ -0,0 +1,368 @@ + + + + + + note + OPOMBA + + + tip + NASVET + + + not_available + Ni na voljo + + + mit_license + Licenca MIT + + + + http_error.name + Napaka {status_code, number} + + + http_error.description + Prišlo je do neznane napake (HTTP {status_code, number}), ki preprečuje zaključiti vaš zahtevek. + + + http_error.suggestion + se vrnite na domačo stran.]]> + + + http_error_403.description + Nimate pravic za dostop do tega vira. + + + http_error_403.suggestion + Vprašajte vašega upravitelja ali sistemskega administratorja, da vam omogoči dostop do tega vira. + + + http_error_404.description + Strani, ki ste jo zahtevali, ni mogoče najti. + + + http_error_404.suggestion + se vrnite na domačo stran.]]> + + + http_error_500.description + Prišlo je do interne napake na strežniku. + + + http_error_500.suggestion + se vrnite na domačo stran.]]> + + + + title.homepage + Symfony Demo]]> + + + title.source_code + Izvorna koda uporabljena za izpis te strani + + + title.controller_code + Koda krmilnika + + + title.twig_template_code + Koda predloge Twig + + + title.login + Varna prijava + + + title.post_list + Seznam objav + + + title.edit_post + Uredi objavo #{id, number} + + + title.add_comment + Dodaj komentar + + + title.comment_error + Pri objavi vašega komentarja je prišlo do napake + + + + action.show + Prikaži + + + action.show_post + Prikaži objavo + + + action.show_code + Prikaži kodo + + + action.edit + Uredi + + + action.edit_post + Uredi objavo + + + action.save + Shrani spremembe + + + action.delete_post + Izbriši objavo + + + delete_post_modal.title + Ali ste prepričani, da želite izbrisati to objavo? + + + delete_post_modal.body + Tega dejanja ni mogoče razveljaviti. + + + label.delete_post + Izbriši objavo + + + label.cancel + Prekliči + + + action.create_post + Ustvari novo objavo + + + label.create_post + Ustvari objavo + + + label.save_and_create_new + Shrani in ustvari novo + + + action.back_to_list + Nazaj na seznam objav + + + action.publish_comment + Objavi komentar + + + action.sign_in + Prijava + + + action.browse_app + Ogled aplikacije + + + action.browse_admin + Ogled ozadja + + + + label.title + Naslov + + + action.close + Zapri + + + label.author + Avtor + + + label.author_email + E-pošta avtorja + + + label.username + uporabniško ime + + + label.password + Geslo + + + label.role + Vloga + + + label.content + Vsebina + + + label.summary + Povzetek + + + label.published_at + Objavljeno + + + label.tags + Značke + + + label.actions + Dejanja + + + title.post_new + Nova objava + + + action.edit_contents + Uredi vsebine + + + + menu.toggle_nav + Preklop navigacije + + + menu.choose_language + Izbira jezika + + + menu.post_list + Seznam objav + + + menu.back_to_blog + Nazaj na blog + + + menu.homepage + Domača stran + + + menu.admin + Ozadje + + + menu.logout + Odjava + + + menu.rss + RSS objav bloga + + + menu.search + Iskanje + + + + post.to_publish_a_comment + za objavo komentarja + + + post.num_comments + {count, plural, one {# komentar} two {# komentarja} few {# komentarji} other {# komentarjev}} + + + post.commented_on + komentirano dne + + + post.no_comments + Bodite prvi, da komentirate to objavo. + + + post.no_posts_found + Na voljo ni nobene objave. + + + post.created_successfully + Objava uspešno ustvarjena! + + + post.updated_successfully + Objava uspešno posodobljena! + + + post.deleted_successfully + Objava uspešno izbrisana! + + + post.search_for + Iskanje za ... + + + post.search_no_results + Ni najdenih rezultatov + + + + notification.comment_created + Vaša objava je prejela komentar! + + + notification.comment_created.description + tej povezavi]]> + + + + help.app_description + demo aplikacija zgrajena z ogrodjem Symfony za prikaz priporočenega načina razvoja aplikacij Symfony.]]> + + + help.show_code + krmilnika in predloge uporabljene za izpis te strani.]]> + + + help.browse_app + javne sekcije demo aplikacije.]]> + + + help.browse_admin + administracije demo aplikacije.]]> + + + help.login_users + Poskusite enega izmed sledečih uporabnikov + + + help.role_user + splošni uporabnik + + + help.role_admin + administrator + + + help.reload_fixtures + Če uporabniki ne delujejo, ponovno naložite podatke aplikacije s pogonom tega ukaza v ukazni vrstici: + + + help.add_user + Če želite dodati nove uporabnike, poženite sledeči ukaz: + + + help.more_information + dokumentacijo Symfony.]]> + + + + rss.title + Symfony Demo blog + + + rss.description + Najnovejše objave objavljene na Symfony Demo blogu + + + + diff --git a/app/translations/messages+intl-icu.tr.xlf b/app/translations/messages+intl-icu.tr.xlf new file mode 100644 index 0000000..00b8532 --- /dev/null +++ b/app/translations/messages+intl-icu.tr.xlf @@ -0,0 +1,368 @@ + + + + + + note + NOT + + + tip + TÜYO + + + not_available + Uygun değil + + + mit_license + MİT Lisansı + + + + http_error.name + Hata {status_code, number} + + + http_error.description + İsteğinizi tamamlamayı engelleyen bilinmeyen bir hata oluştu (HTTP {status_code}). + + + http_error.suggestion + ana sayfaya geri dönmeyi deneyin.]]> + + + http_error_403.description + Bu kaynağa erişim izniniz yok. + + + http_error_403.suggestion + Yöneticinize veya sistem yöneticinize bu kaynağa erişim izni vermesini isteyin. + + + http_error_404.description + İstediğiniz sayfayı bulamadık. + + + http_error_404.suggestion + ana sayfaya geri dönün.]]> + + + http_error_500.description + Bir iç sunucu hatası vardı. + + + http_error_500.suggestion + ana sayfaya geri dönmeyi deneyin.]]> + + + + title.homepage + Symfony Demo uygulamasına hoş geldiniz]]> + + + title.source_code + Bu sayfayı oluşturmak için kullanılan kaynak kodu + + + title.controller_code + Denetleyici kodu + + + title.twig_template_code + Twig şablon kodu + + + title.login + Güvenli Giriş + + + title.post_list + Gönderi Listesi + + + title.edit_post + Gönderiyi düzenle #{id, number} + + + title.add_comment + Yorum ekle + + + title.comment_error + Yorumunuz yayınlanırken bir hata oluştu + + + + action.show + Göster + + + action.show_post + Gönderiyi göster + + + action.show_code + Kodu göster + + + action.edit + Düzenle + + + action.edit_post + Gönderiyi düzenle + + + action.save + Değişiklikleri kaydet + + + action.delete_post + Gönderiyi sil + + + delete_post_modal.title + Bu gönderiyi silmek istediğinizden emin misiniz? + + + delete_post_modal.body + Bu işlem geri alınamaz. + + + label.delete_post + Gönderiyi sil + + + label.cancel + İptal + + + action.create_post + Yeni bir gönderi oluştur + + + label.create_post + Gönderi oluştur + + + label.save_and_create_new + Kaydet ve yeni oluştur + + + action.back_to_list + Gönderi listesine geri dön + + + action.publish_comment + Yorumu yayınla + + + action.sign_in + Giriş yap + + + action.browse_app + Uygulamaya göz at + + + action.browse_admin + Yönetim paneline göz at + + + + label.title + Başlık + + + action.close + Kapat + + + label.author + Yazar + + + label.author_email + Yazar e-postası + + + label.username + Kullanıcı adı + + + label.password + Şifre + + + label.role + Rol + + + label.content + İçerik + + + label.summary + Özet + + + label.published_at + Yayınlandı + + + label.tags + Etiketler + + + label.actions + İşlemler + + + title.post_new + Gönderi oluluşturma + + + action.edit_contents + İçeriği düzenle + + + + menu.toggle_nav + Navigasyonu değiştir + + + menu.choose_language + Dil seç + + + menu.post_list + Gönderi listesi + + + menu.back_to_blog + Blog'a dön + + + menu.homepage + Anasayfa + + + menu.admin + Yönetim paneli + + + menu.logout + Çıkış + + + menu.rss + Blog Yazıları RSS + + + menu.search + Arama + + + + post.to_publish_a_comment + yorum ekle + + + post.num_comments + {count} yorum + + + post.commented_on + yorum yaptı + + + post.no_comments + Bu yazıya ilk yorum yapan siz olun. + + + post.no_posts_found + Gönderi bulunamadı. + + + post.created_successfully + Gönderi başarıyla oluşturuldu! + + + post.updated_successfully + Gönderi başarıyla güncellendi! + + + post.deleted_successfully + Gönderi başarıyla silindi! + + + post.search_for + Arama... + + + post.search_no_results + Sonuç bulunamadı + + + + notification.comment_created + Gönderiniz bir yorum aldı! + + + notification.comment_created.description + bu bağlantıyı takip ederek okuyabilirsiniz.]]> + + + + help.app_description + demo uygulamasıdır.]]> + + + help.show_code + Denetleyici ve şablon kaynak kodunu göstermek için bu butona tıklayın.]]> + + + help.browse_app + genel bölümüne göz atın.]]> + + + help.browse_admin + yönetim paneline göz atın.]]> + + + help.login_users + Aşağıdaki kullanıcılardan birini deneyin + + + help.role_user + normal kullanıcı + + + help.role_admin + yönetici + + + help.reload_fixtures + Bu kullanıcılar işe yaramazsa, bu komutu terminalden çalıştırarak uygulama datasını yeniden yükleyin: + + + help.add_user + Yeni kullanıcılar oluşturmak isterseniz, bu komutu çalıştırın: + + + help.more_information + Symfony doc sayfasına bakın..]]> + + + + rss.title + Symfony Demo blogu + + + rss.description + Symfony Demo blogunda yayınlanan son yazılar + + + + diff --git a/app/translations/messages+intl-icu.uk.xlf b/app/translations/messages+intl-icu.uk.xlf new file mode 100644 index 0000000..cba9037 --- /dev/null +++ b/app/translations/messages+intl-icu.uk.xlf @@ -0,0 +1,447 @@ + + + + + + note + ПРИМІТКА + + + tip + ПОРАДА + + + not_available + Недоступно + + + mit_license + MIT Ліцензія + + + + http_error.name + Помилка {status_code, number} + + + http_error.description + Виникла невідма помилка (HTTP {status_code, number}), котра завадила виконати ваш запит. + + + http_error.suggestion + поверніться на головну сторінку.]]> + + + http_error_403.description + У вас немає дозволу на доступ до цього ресурсу. + + + http_error_403.suggestion + Зробіть запит на доступ до цього ресурсу у вашого менеджера або системного адміністратора. + + + http_error_404.description + Ми не змогли знайти сторінку що ви запросили. + + + http_error_404.suggestion + поверніться на головну сторінку.]]> + + + http_error_500.description + Виникла внутрішня помилка сервера. + + + http_error_500.suggestion + поверніться на головну сторінку.]]> + + + + title.homepage + Symfony Demo додатку]]> + + + title.source_code + Вихідний код, який використовувався для побудови цієї сторінки + + + title.controller_code + Код контролеру + + + title.twig_template_code + Код шаблону Twig + + + title.login + Авторизація + + + title.post_list + Список записів + + + title.edit_post + Редагування запису #{id, number} + + + title.add_comment + Додати коментар + + + title.comment_error + Виникла помилка під час публікації вашого коментаря + + + title.edit_user + Редагувати користувача + + + title.change_password + Змінити пароль + + + + action.show + Показати + + + action.show_post + Показати запис + + + action.show_code + Показати код + + + action.edit + Редагувати + + + action.edit_post + Редагувати запис + + + action.save + Зберегти зміни + + + action.delete_post + Видалити запис + + + delete_post_modal.title + Ви впевнені, що хочете видалити цей запис? + + + delete_post_modal.body + Ця дія не може бути скасована. + + + label.delete_post + Видалити запис + + + label.cancel + Скасувати + + + action.create_post + Створити новий запис + + + label.create_post + Створити запис + + + label.save_and_create_new + Зберегти та створити новий + + + action.back_to_list + Назад до списку записів + + + action.publish_comment + Опублікувати коментар + + + action.sign_in + Ввійти + + + action.browse_app + Перейти до публічного розділу + + + action.browse_admin + Перейти до панелі керування + + + action.edit_user + Редагувати користувача + + + action.change_password + Змінити пароль + + + + label.title + Назва + + + action.close + Закрити + + + label.author + Автор + + + label.author_email + Email автора + + + label.username + Логін + + + label.fullname + Повне ім'я + + + label.email + Email + + + label.password + Пароль + + + label.current_password + Поточний пароль + + + label.new_password + Новий пароль + + + label.new_password_confirm + Підтвердіть пароль + + + label.role + Роль + + + label.content + Зміст + + + label.summary + Короткий зміст + + + label.published_at + Опубліковано + + + label.tags + Теги + + + label.actions + Дії + + + title.post_new + Створення запису + + + action.edit_contents + Редагувати зміст + + + + menu.toggle_nav + Переключити навігацію + + + menu.choose_language + Вибрати мову + + + menu.post_list + Список записів + + + menu.back_to_blog + Назад до блогу + + + menu.homepage + Головна сторінка + + + menu.admin + Панель керування + + + menu.user + Обліковий запис + + + menu.logout + Вийти + + + menu.rss + RSS Записів Блогу + + + menu.search + Пошук + + + + post.to_publish_a_comment + опублікувати коментар + + + post.num_comments + {count, plural, one {# коментар} many {# коментаря} other {# коментарів}} + + + post.commented_on + прокоментовано + + + post.no_comments + Будьте першими, хто прокоментує цей запис. + + + post.no_posts_found + Жодного запису не знайдено. + + + post.created_successfully + Запис успішно створений! + + + post.updated_successfully + Запис успішно оновлений! + + + post.deleted_successfully + Запис успішно видалений! + + + post.search_for + Шукати... + + + post.search_no_results + Нічого не знайдено + + + + user.updated_successfully + Користувача оновлено успішно! + + + + notification.comment_created + Ваш запис отримав коментар! + + + notification.comment_created.description + цим посиланням]]> + + + + help.app_description + демо додаток створено на основі Symfony фреймворку для того, щоб показати рекомендований спосіб розробки Symfony додатків.]]> + + + help.show_code + контролеру та шаблону, які використовувалися для побудови цієї сторінки.]]> + + + help.browse_app + публічного розділу демо додатку.]]> + + + help.browse_admin + панелі керування демо додатку.]]> + + + help.login_users + Використовуйте будь-якого з наступних користувачів + + + help.role_user + звичайний користувач + + + help.role_admin + адміністратор + + + help.reload_fixtures + Якщо ці користувачі не працюють, перезавантажте фікстури додатку, виконавши в консолі наступну команду: + + + help.add_user + Якщо ви хочете створити нових користувачів, скористайтеся наступною командою: + + + help.more_information + Symfony документації.]]> + + + help.post_summary + Короткий зміст не може містити Markdown розмітку або HTML контент; лише звичайний текст. + + + help.post_publication + Встановіть дату в майбутньому, щоб запланувати публікацію запису. + + + help.post_content + Використовуйте Markdown розмітку для форматування змісту запису. HTML також дозволений. + + + help.comment_content + Коментарі, які не відповідають нашому Кодексу поведінки, будуть модеровані. + + + + info.change_password + Після зміни пароля, ви вийдете із програми. + + + + rss.title + Symfony Demo блог + + + rss.description + Найновіші записи, опубліковані в Symfony Demo блозі + + + + paginator.previous + Назад + + + paginator.next + Далі + + + paginator.current + (поточна) + + + + diff --git a/app/translations/messages+intl-icu.zh_CN.xlf b/app/translations/messages+intl-icu.zh_CN.xlf new file mode 100644 index 0000000..1110991 --- /dev/null +++ b/app/translations/messages+intl-icu.zh_CN.xlf @@ -0,0 +1,443 @@ + + + + + + note + 注意 + + + tip + 提示 + + + not_available + 不可用 + + + mit_license + MIT License + + + + http_error.name + 错误 {status_code, number} + + + http_error.description + 有未知错误 (HTTP {status_code, number}) 阻止你的请求. + + + http_error.suggestion + 返回首页.]]> + + + http_error_403.description + 你没有权限访问这个资源. + + + http_error_403.suggestion + 请联系系统管理员给你访问这个资源的权限. + + + http_error_404.description + 无法找到请求的页面. + + + http_error_404.suggestion + 返回首页.]]> + + + http_error_500.description + 服务器错误. + + + http_error_500.suggestion + 返回首页.]]> + + + + title.homepage + Symfony 示例 应用]]> + + + title.source_code + 渲染此页面的源代码 + + + title.controller_code + Controller 控制器代码 + + + title.twig_template_code + Twig 模板代码 + + + title.login + 登录 + + + title.post_list + 文章列表 + + + title.edit_post + 编辑文章 #{id, number} + + + title.add_comment + 发表评论 + + + title.comment_error + 发表评论出错 + + + title.edit_user + 编辑用户 + + + + action.show + 展示 + + + action.show_post + 展示文章 + + + action.show_code + 展示代码 + + + action.edit + 编辑 + + + action.edit_post + 编辑文章 + + + action.save + 保存修改 + + + action.delete_post + 删除文章 + + + delete_post_modal.title + 确定要删除此文章吗? + + + delete_post_modal.body + 这个操作无法撤销. + + + label.delete_post + 删除文章 + + + label.cancel + 取消 + + + action.create_post + 添加一篇新文章 + + + label.create_post + 保存文章 + + + label.save_and_create_new + 保存并添加新文章 + + + label.fullname + 全名 + + + label.email + 邮箱 + + + label.current_password + 当前密码 + + + label.new_password + 新密码 + + + label.new_password_confirm + 确认密码 + + + + action.back_to_list + 返回文章列表 + + + action.publish_comment + 发表评论 + + + action.sign_in + 登录 + + + action.browse_app + 浏览博客前台 + + + action.browse_admin + 浏览管理后台 + + + action.change_password + 修改密码 + + + + label.title + 标题 + + + action.close + + + + label.author + 作者 + + + label.author_email + 作者邮箱 + + + label.username + 用户名 + + + label.password + 密码 + + + label.role + 角色 + + + label.content + 内容 + + + label.summary + 摘要 + + + label.published_at + 发布于 + + + label.tags + 标签 + + + label.actions + 操作 + + + title.post_new + 文章创建者 + + + title.change_password + 修改密码 + + + action.edit_contents + 编辑内容 + + + action.edit_user + 编辑用户 + + + + menu.toggle_nav + 切换导航 + + + menu.choose_language + 选择语言 + + + menu.post_list + 文章列表 + + + menu.back_to_blog + 返回博客 + + + menu.homepage + 主页 + + + menu.admin + 后台 + + + menu.logout + 登出 + + + menu.rss + 博客文章 RSS + + + menu.search + 搜索 + + + menu.user + 帐户 + + + + post.to_publish_a_comment + 发表评论 + + + post.num_comments + {count} 评论 + + + post.commented_on + 评论于 + + + post.no_comments + 成为文章的第一个评论者. + + + post.no_posts_found + 没有评论. + + + post.created_successfully + 评论发表成功! + + + post.updated_successfully + 评论更新成功! + + + post.deleted_successfully + 评论删除成功! + + + post.search_for + 输入关键字... + + + post.search_no_results + 没有匹配到结果! + + + + notification.comment_created + 收到一条新评论! + + + notification.comment_created.description + 查看评论]]> + + + + help.app_description + 示例应用 , 用以介绍开发Symfony应用的推荐方式.]]> + + + help.show_code + Controller 控制器 和 Twig 模板 的源代码.]]> + + + help.browse_app + 公共部分 .]]> + + + help.browse_admin + 管理后台 .]]> + + + help.login_users + 使用以下用户登录 + + + help.role_user + 普通用户 + + + help.role_admin + 管理员 + + + help.reload_fixtures + 如果这些用户无法使用, 在终端中使用以下命令来重新加载应用数据: + + + help.add_user + 如果你想要创建用户, 使用命令: + + + help.more_information + Symfony 文档 .]]> + + + help.comment_content + 不符合我们行为准则的评论将被审核。 + + + help.post_summary + 摘要不能包含 Markdown 或 HTML 内容,仅纯文本。 + + + help.post_content + 使用 Markdown 格式化博客文章内容,也允许 HTML。 + + + help.post_publication + 设置博客文章的发布日期。 + + + + rss.title + Symfony Demo blog + + + rss.description + Symfony 示例博客上发布的最新文章 + + + + paginator.previous + 上一页 + + + paginator.current + 当前页 + + + paginator.next + 下一页 + + + + info.change_password + 更改密码后,您将退出应用程序。 + + + + diff --git a/app/translations/validators+intl-icu.ar.xlf b/app/translations/validators+intl-icu.ar.xlf new file mode 100644 index 0000000..602f342 --- /dev/null +++ b/app/translations/validators+intl-icu.ar.xlf @@ -0,0 +1,43 @@ + + + + + + post.slug_unique + تم استخدام هذا العنوان بالفعل في مشاركة مدونة أخرى، ولكن يجب أن يكون فريدًا. + + + post.blank_summary + اعطى لمنشورك تلخيصا! + + + post.blank_content + منشورك يجب ان يحتوى على محتوى! + + + post.too_short_content + محتوى منشورك صغير جدا ({ limit } اقل عدد احرف مطلوب) + + + post.too_many_tags + علامات كثيره جدا (اضف { limit } علامات او اقل) + + + comment.blank + من فضلك لا تترك تعليقك فارغا! + + + comment.too_short + التعليق صغير جدا ({ limit }اقل عدد احرف مطلوب) + + + comment.too_long + التعليق كبير جدا ({ limit } اقصى عدد احرف مسموح به) + + + comment.is_spam + يعتبر محتوى هذا التعليق غير مرغوب فيه. + + + + diff --git a/app/translations/validators+intl-icu.bg.xlf b/app/translations/validators+intl-icu.bg.xlf new file mode 100644 index 0000000..72aa1ce --- /dev/null +++ b/app/translations/validators+intl-icu.bg.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Напишете обобщение на публикацията си! + + + post.blank_content + Публикацията трябва да има съдържание! + + + post.too_short_content + Съдержанието на публикацията е прекалено малко ({ limit } минимум символа) + + + post.too_many_tags + Прекалено много тагове (добави { limit } тага или по-малко) + + + comment.blank + Моля не оставяйте коментара празен! + + + comment.too_short + Коментара е пркалено кратък ({ limit } симвала минимум) + + + comment.too_long + Коментара е прекалено дълъг ({ limit } симвала максимум) + + + comment.is_spam + Съдържанието на коментара се разглежда като спам. + + + + diff --git a/app/translations/validators+intl-icu.ca.xlf b/app/translations/validators+intl-icu.ca.xlf new file mode 100644 index 0000000..b1e0f80 --- /dev/null +++ b/app/translations/validators+intl-icu.ca.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + No és possible deixar buit el resum de l'article. + + + post.blank_content + No és possible deixar buit el contingut de l'article. + + + post.too_short_content + El contingut de l'article és massa curt ({ limit } caràcters com a mínim) + + + comment.blank + No és possible deixar buit el contingut del comentari. + + + comment.too_short + El comentari és massa curt ({ limit } caràcters com a mínim) + + + comment.too_long + El comentari és massa llarg ({ limit } caràcters com a màxim) + + + comment.is_spam + El contingut del comentari es considera spam. + + + + diff --git a/app/translations/validators+intl-icu.cs.xlf b/app/translations/validators+intl-icu.cs.xlf new file mode 100644 index 0000000..10d404b --- /dev/null +++ b/app/translations/validators+intl-icu.cs.xlf @@ -0,0 +1,31 @@ + + + + + + post.blank_summary + Napište shrnutí příspěvku! + + + post.too_short_content + Příspěvek je příliš krátký (musí mít minimálně { limit } znak)|Příspěvek je příliš krátký (musí mít minimálně { limit } znaky)|Příspěvek je příliš krátký (musí mít minimálně { limit } znaků) + + + comment.blank + Prosím, napište text komentáře! + + + comment.too_short + Komentář je příliš krátký (musí mít minimálně { limit } znak)|Komentář je příliš krátký (musí mít minimálně { limit } znaky)|Komentář je příliš krátký (musí mít minimálně { limit } znaků) + + + comment.too_long + Komentář je příliš dlouhý (musí mít maximálně { limit } znak)|Komentář je příliš dlouhý (musí mít maximálně { limit } znaky)|Komentář je příliš dlouhý (musí mít maximálně { limit } znaků) + + + comment.is_spam + Obsah tohoto komentáře je považován za spam. + + + + diff --git a/app/translations/validators+intl-icu.de.xlf b/app/translations/validators+intl-icu.de.xlf new file mode 100644 index 0000000..0da643f --- /dev/null +++ b/app/translations/validators+intl-icu.de.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Gib deinem Beitrag eine Zusammenfassung! + + + post.blank_content + Dein Beitrag sollte einen Inhalt haben! + + + post.too_short_content + Der Beitragsinhalt ist zu kurz (mindestens { limit } Zeichen) + + + comment.blank + Bitte gib einen Kommentar ein! + + + comment.too_short + Der Kommentar ist zu kurz (mindestens { limit } Zeichen) + + + comment.too_long + Der Kommentar ist zu lang (maximal { limit } Zeichen) + + + comment.is_spam + Der Inhalt des Kommentars wird als Spam eingestuft. + + + post.too_many_tags + Zu viele Tags (höchstens { limit } Tags sind erlaubt) + + + + diff --git a/app/translations/validators+intl-icu.en.xlf b/app/translations/validators+intl-icu.en.xlf new file mode 100644 index 0000000..d27c627 --- /dev/null +++ b/app/translations/validators+intl-icu.en.xlf @@ -0,0 +1,43 @@ + + + + + + post.slug_unique + This title was already used in another blog post, but they must be unique. + + + post.blank_summary + Give your post a summary! + + + post.blank_content + Your post should have some content! + + + post.too_short_content + Post content is too short ({ limit } characters minimum) + + + post.too_many_tags + Too many tags (add { limit } tags or less) + + + comment.blank + Please don't leave your comment blank! + + + comment.too_short + Comment is too short ({ limit } characters minimum) + + + comment.too_long + Comment is too long ({ limit } characters maximum) + + + comment.is_spam + The content of this comment is considered spam. + + + + diff --git a/app/translations/validators+intl-icu.es.xlf b/app/translations/validators+intl-icu.es.xlf new file mode 100644 index 0000000..3e02e5b --- /dev/null +++ b/app/translations/validators+intl-icu.es.xlf @@ -0,0 +1,43 @@ + + + + + + post.slug_unique + Este título ya se usó en otro artículo y ambos deben ser únicos. + + + post.blank_summary + No es posible dejar el resumen del artículo vacío. + + + post.blank_content + No es posible dejar el contenido del artículo vacío. + + + post.too_short_content + El contenido del artículo es demasiado corto ({ limit } caracteres como mínimo) + + + post.too_many_tags + Demasiadas etiquetas (añade { limit } como máximo) + + + comment.blank + No es posible dejar el contenido del comentario vacío. + + + comment.too_short + El comentario es demasiado corto ({ limit } caracteres como mínimo) + + + comment.too_long + El comentario es demasiado largo ({ limit } caracteres como máximo) + + + comment.is_spam + El contenido del comentario se considera spam. + + + + diff --git a/app/translations/validators+intl-icu.fr.xlf b/app/translations/validators+intl-icu.fr.xlf new file mode 100644 index 0000000..09b37ec --- /dev/null +++ b/app/translations/validators+intl-icu.fr.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + Veuillez donner un résumé à votre post. + + + post.blank_content + Veuillez donner un contenu à votre post. + + + post.too_short_content + Le contenu de votre post est trop court ({ limit } caractères minimum) + + + comment.blank + Veuillez ne pas laisser votre commentaire vide. + + + comment.too_short + Votre commentaire est trop court ({ limit } caractères minimum) + + + comment.too_long + Votre commentaire est trop long ({ limit } caractères maximum) + + + comment.is_spam + Le contenu de votre commentaire est considéré comme du spam. + + + + diff --git a/app/translations/validators+intl-icu.hr.xlf b/app/translations/validators+intl-icu.hr.xlf new file mode 100644 index 0000000..76b02c7 --- /dev/null +++ b/app/translations/validators+intl-icu.hr.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Dodajte sažetak svojem članku! + + + post.blank_content + Vaš članak treba imati sadržaj! + + + post.too_short_content + Sadržaj članka je prekratak (koristiti minimalno { limit } slova ili simbola) + + + post.too_many_tags + Previše oznaka (dodaj najviše { limit } oznaka ili manje) + + + comment.blank + Molim ne ostavljajte svoj komentar praznim! + + + comment.too_short + Komentar je prekratak (potrebno je minimalno { limit } slova ili simbola) + + + comment.too_long + Komentar je predugačak (koristiti maksimalno { limit } slova ili simbola) + + + comment.is_spam + Sadržaj ovog komentara smatra se spam sadržajem. + + + + diff --git a/app/translations/validators+intl-icu.id.xlf b/app/translations/validators+intl-icu.id.xlf new file mode 100644 index 0000000..50df8cc --- /dev/null +++ b/app/translations/validators+intl-icu.id.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + Beri posting anda ringkasan! + + + post.blank_content + Posting anda harus mempunyai konten! + + + post.too_short_content + Konten terlalu singkat (Minimal { limit } karakter) + + + comment.blank + Mohon jangan tinggalkan komentar kosong! + + + comment.too_short + Komentar terlalu singkat (Minimal { limit } karakter) + + + comment.too_long + Komentar terlalu panjang (Maksimal { limit } karakter) + + + comment.is_spam + Konten komentar ini dianggap sebagai spam. + + + + diff --git a/app/translations/validators+intl-icu.it.xlf b/app/translations/validators+intl-icu.it.xlf new file mode 100644 index 0000000..401ca52 --- /dev/null +++ b/app/translations/validators+intl-icu.it.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + Da' una descrizione al tuo post! + + + post.blank_content + Da' un contenuto al tuo post! + + + post.too_short_content + Il contenuto del post è troppo breve (minimo { limit } caratteri) + + + comment.blank + Per favore non lasciare in bianco il tuo commento! + + + comment.too_short + Il commento è troppo breve (minimo { limit } caratteri) + + + comment.too_long + Il commento è troppo lungo (massimo { limit } caratteri) + + + comment.is_spam + Il contenuto di questo commento è considerato come spam. + + + + diff --git a/app/translations/validators+intl-icu.ja.xlf b/app/translations/validators+intl-icu.ja.xlf new file mode 100644 index 0000000..4eea7d9 --- /dev/null +++ b/app/translations/validators+intl-icu.ja.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + 要約を入力してください。 + + + post.blank_content + 本文を入力してください。 + + + post.too_short_content + 本文が短すぎます ({ limit } 文字以上必要です) + + + comment.blank + コメントを入力してください。 + + + comment.too_short + コメントが短すぎます ({ limit } 文字以上必要です) + + + comment.too_long + コメントが長すぎます ({ limit } 文字以下にしてください) + + + comment.is_spam + コメントの内容がスパムと判定されました。 + + + + diff --git a/app/translations/validators+intl-icu.lt.xlf b/app/translations/validators+intl-icu.lt.xlf new file mode 100644 index 0000000..9f6a45b --- /dev/null +++ b/app/translations/validators+intl-icu.lt.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Įrašo santrauka negali būti tuščia + + + post.blank_content + Įrašo turinys negali būti tuščias + + + post.too_short_content + Per trumpas įrašo turinys (nesiekia { limit } simbolių) + + + post.too_many_tags + Per daug žymų (viršyja { limit }) + + + comment.blank + Komentaras negali būti tuščias + + + comment.too_short + Per trumpas komentaras (nesiekia { limit } simbolių) + + + comment.too_long + Per ilgas komentaras (viršyja { limit } simbolių) + + + comment.is_spam + Komentaras traktuojamas kaip brukalas. + + + + diff --git a/app/translations/validators+intl-icu.nl.xlf b/app/translations/validators+intl-icu.nl.xlf new file mode 100644 index 0000000..19a7c64 --- /dev/null +++ b/app/translations/validators+intl-icu.nl.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + Geef uw bericht een samenvatting. + + + post.blank_content + Uw bericht heeft nog geen inhoud. + + + post.too_short_content + Bericht inhoud is te kort (minimaal { limit } karakters) + + + comment.blank + Vul alstublieft een reactie in. + + + comment.too_short + Reactie is te kort (minimaal { limit } karakters) + + + comment.too_long + Reactie is te lang (maximaal { limit } karakters) + + + comment.is_spam + De inhoud van deze reactie wordt als spam gemarkeerd. + + + + diff --git a/app/translations/validators+intl-icu.pl.xlf b/app/translations/validators+intl-icu.pl.xlf new file mode 100644 index 0000000..68bb9ee --- /dev/null +++ b/app/translations/validators+intl-icu.pl.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + Dodaj podsumowanie Twojego artykułu! + + + post.blank_content + Treść artykułu nie może być pusta! + + + post.too_short_content + Treść artykułu jest za krótka (minimum: { limit } znak)|Treść artykułu jest za krótka (minimum: { limit } znaki)|Treść artykułu jest za krótka (minimum: { limit } znaków) + + + comment.blank + Pole komentarza nie może być puste! + + + comment.too_short + Twój komentarz jest za krótki (minimum: { limit } znak)|Twój komentarz jest za krótki (minimum: { limit } znaki)|Twój komentarz jest za krótki (minimum: { limit } znaków) + + + comment.too_long + Twój komentarz jest za długi (maksimum: { limit } znak)|Twój komentarz jest za długi (maksimum: { limit } znaki)|Twój komentarz jest za długi (maksimum: { limit } znaków) + + + comment.is_spam + Twój komentarz został uznany za spam. + + + + diff --git a/app/translations/validators+intl-icu.pt_BR.xlf b/app/translations/validators+intl-icu.pt_BR.xlf new file mode 100644 index 0000000..f6e2ac6 --- /dev/null +++ b/app/translations/validators+intl-icu.pt_BR.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Informe um sumário para o seu post! + + + post.blank_content + Informe um conteúdo para o seu post! + + + post.too_short_content + O conteúdo do post está muito curto (mínimo de { limit } caracteres) + + + post.too_many_tags + Tags demais (adicione { limit } tags ou menos) + + + comment.blank + Por favor, não deixe seu comentário vazio! + + + comment.too_short + O comentário está muito curto (mínimo de { limit } caracteres) + + + comment.too_long + O comentário está muito grande (máximo de { limit } caracteres) + + + comment.is_spam + O conteúdo desse comentário é considerado spam. + + + + diff --git a/app/translations/validators+intl-icu.ro.xlf b/app/translations/validators+intl-icu.ro.xlf new file mode 100644 index 0000000..087ef1e --- /dev/null +++ b/app/translations/validators+intl-icu.ro.xlf @@ -0,0 +1,35 @@ + + + + + + post.blank_summary + Dă articolului tău un rezumat! + + + post.blank_content + Articolul ar trebui să aibe conținut! + + + post.too_short_content + Conţinutul articolului este prea scurt (minimum { limit } caractere) + + + comment.blank + Te rugăm nu lăsa comentariul tău necompletat! + + + comment.too_short + Comentariul este prea scurt (minimum { limit } caractere) + + + comment.too_long + Comentariul este prea lung (maximum { limit } caractere) + + + comment.is_spam + Conţinutul acestui comentariu este considerat spam. + + + + diff --git a/app/translations/validators+intl-icu.ru.xlf b/app/translations/validators+intl-icu.ru.xlf new file mode 100644 index 0000000..3cca24d --- /dev/null +++ b/app/translations/validators+intl-icu.ru.xlf @@ -0,0 +1,43 @@ + + + + + + post.slug_unique + Такой заголовок уже используется в другой записи в блоге. Пожалуйста, используйте уникальный заголовок. + + + post.blank_summary + Введите краткое содержание вашей записи! + + + post.blank_content + Ваша запись должна содержать хоть какое-то содержание! + + + post.too_short_content + Содержание записи слишком короткое (минимум { limit } символов). + + + post.too_many_tags + Слишком много тегов (добавьте { limit } тегов или меньше) + + + comment.blank + Пожалуйста, не оставляйте текст комментария пустым! + + + comment.too_short + Комментарий слишком короткий, (минимум { limit } символов). + + + comment.too_long + Комментарий слишком длинный, (максимум { limit } символов). + + + comment.is_spam + Содержание этого комментария было расценено как спам. + + + + diff --git a/app/translations/validators+intl-icu.sl.xlf b/app/translations/validators+intl-icu.sl.xlf new file mode 100644 index 0000000..c9aaec0 --- /dev/null +++ b/app/translations/validators+intl-icu.sl.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Dodajte vaši objavi povzetek! + + + post.blank_content + Vaša objava mora imeti nekaj vsebine! + + + post.too_short_content + Vsebina objave je prekratka (vsaj { limit } znakov) + + + post.too_many_tags + Preveč značk (dodajte { limit } ali manj značk) + + + comment.blank + Ne pustite vašega komentarja praznega! + + + comment.too_short + Komentar je prekratek (vsaj { limit } znakov) + + + comment.too_long + Komentar je predolg (največ { limit } znakov) + + + comment.is_spam + Vsebina tega komentarja se smatra za spam. + + + + diff --git a/app/translations/validators+intl-icu.tr.xlf b/app/translations/validators+intl-icu.tr.xlf new file mode 100644 index 0000000..04dfff7 --- /dev/null +++ b/app/translations/validators+intl-icu.tr.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + Gönderiniz için bir özet giriniz! + + + post.blank_content + Gönderiniz bir içeriğe sahip olmalı! + + + post.too_short_content + Yayın içeriği çok kısa ({ limit } minimum karakter) + + + post.too_many_tags + Çok fazla etiket var ({ limit } etiketini veya daha azını ekleyin) + + + comment.blank + Lütfen yorumunuzu boş bırakmayın! + + + comment.too_short + Yorum çok kısa ({ limit } minimum karakter) + + + comment.too_long + Yorum çok uzun ({ limit } maksimum karakter) + + + comment.is_spam + Bu yorumun içeriği spam olarak kabul edilir. + + + + diff --git a/app/translations/validators+intl-icu.uk.xlf b/app/translations/validators+intl-icu.uk.xlf new file mode 100644 index 0000000..d1c22d3 --- /dev/null +++ b/app/translations/validators+intl-icu.uk.xlf @@ -0,0 +1,43 @@ + + + + + + post.slug_unique + Цей заголовок вже використовується в іншому записі, але повинен бути унікальним. + + + post.blank_summary + Введіть короткий зміст вашого запису! + + + post.blank_content + Ваш запис повинен містити хоч якийсь зміст! + + + post.too_short_content + Зміст запису занадто короткий (мінімум { limit } символів). + + + post.too_many_tags + Занадто багато тегів (додайте { limit } тегів або менше) + + + comment.blank + Будь ласка, не залишайте текст коментаря порожнім! + + + comment.too_short + Коментар занадто короткий, (мінімум { limit } символів). + + + comment.too_long + Коментар занадто довгий, (максимум { limit } символів). + + + comment.is_spam + Зміст цього коментаря було розцінено як спам. + + + + diff --git a/app/translations/validators+intl-icu.zh_CN.xlf b/app/translations/validators+intl-icu.zh_CN.xlf new file mode 100644 index 0000000..b7676c9 --- /dev/null +++ b/app/translations/validators+intl-icu.zh_CN.xlf @@ -0,0 +1,39 @@ + + + + + + post.blank_summary + 请填写文章摘要! + + + post.blank_content + 请填写文章内容! + + + post.too_short_content + 文章内容太少 最少 ({ limit } 个字 ) + + + post.too_many_tags + 标签太多 (最多 { limit } 个标签) + + + comment.blank + 评论内容不能为空! + + + comment.too_short + 评论内容太少 (最少 { limit } 个字) + + + comment.too_long + 评论内容太多 (最多 { limit } 个字) + + + comment.is_spam + 非法评论. + + + + diff --git a/app/webpack.config.js b/app/webpack.config.js new file mode 100644 index 0000000..bd77614 --- /dev/null +++ b/app/webpack.config.js @@ -0,0 +1,36 @@ +// This project uses "Yarn" package manager for managing JavaScript dependencies along +// with "Webpack Encore" library that helps working with the CSS and JavaScript files +// that are stored in the "assets/" directory. +// +// Read https://symfony.com/doc/current/frontend.html to learn more about how +// to manage CSS and JavaScript files in Symfony applications. +var Encore = require('@symfony/webpack-encore'); + +Encore + .setOutputPath('public/build/') + .setPublicPath('/build') + .cleanupOutputBeforeBuild() + .autoProvidejQuery() + .autoProvideVariables({ + "window.Bloodhound": require.resolve('bloodhound-js'), + "jQuery.tagsinput": "bootstrap-tagsinput" + }) + .enableSassLoader() + // when versioning is enabled, each filename will include a hash that changes + // whenever the contents of that file change. This allows you to use aggressive + // caching strategies. Use Encore.isProduction() to enable it only for production. + .enableVersioning(false) + .addEntry('app', './assets/js/app.js') + .addEntry('login', './assets/js/login.js') + .addEntry('admin', './assets/js/admin.js') + .addEntry('search', './assets/js/search.js') + .splitEntryChunks() + .enableSingleRuntimeChunk() + .enableIntegrityHashes(Encore.isProduction()) + .configureBabel(null, { + useBuiltIns: 'usage', + corejs: 3, + }) +; + +module.exports = Encore.getWebpackConfig(); diff --git a/app/yarn.lock b/app/yarn.lock new file mode 100644 index 0000000..7c236dc --- /dev/null +++ b/app/yarn.lock @@ -0,0 +1,7253 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== + +"@babel/core@^7.7.0": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.7.tgz#bf55363c08c8352a37691f7216ec30090bf7e3bf" + integrity sha512-tRKx9B53kJe8NCGGIxEQb2Bkr0riUIEuN7Sc1fxhs5H8lKlCWUvQCSNMVIB0Meva7hcbCRJ76de15KoLltdoqw== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.7" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" + integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== + dependencies: + "@babel/types" "^7.12.5" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== + dependencies: + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" + integrity sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + regexpu-core "^4.7.1" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== + dependencies: + "@babel/types" "^7.12.7" + +"@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c" + integrity sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw== + dependencies: + "@babel/types" "^7.12.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-remap-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/types" "^7.12.1" + +"@babel/helper-replace-supers@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" + integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-validator-option@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" + integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== + +"@babel/helper-wrap-function@^7.10.4": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" + integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== + +"@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" + integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-namespace-from@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-optional-catch-binding@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + +"@babel/plugin-transform-block-scoped-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" + integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== + 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.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.12.1" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + +"@babel/plugin-transform-new-target@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + +"@babel/plugin-transform-parameters@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-shorthand-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a" + integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.4.0": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.7.tgz#54ea21dbe92caf6f10cb1a0a576adc4ebf094b55" + integrity sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew== + dependencies: + "@babel/compat-data" "^7.12.7" + "@babel/helper-compilation-targets" "^7.12.5" + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.7" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@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.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.1" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.7" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.1" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.7" + core-js-compat "^3.7.0" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@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/runtime@^7.8.4": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4", "@babel/template@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + +"@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.7.tgz#572a722408681cef17d6b0bef69ef2e728ca69f1" + integrity sha512-nMWaqsQEeSvMNypswUDzjqQ+0rR6pqCtoQpsqGJC4/Khm9cISwPTSpai57F6/jDaOoEGz8yE/WxcO3PV6tKSmQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.4.4": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" + integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@fortawesome/fontawesome-free@^5.8.1": + version "5.15.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.1.tgz#ccfef6ddbe59f8fe8f694783e1d3eb88902dc5eb" + integrity sha512-OEdH7SyC1suTdhBGW91/zBfR6qaIhThbcN8PUXtXilY4GYnSBbVqOntdHbC1vXwsDnX0Qix2m2+DSU1J51ybOQ== + +"@symfony/webpack-encore@^0.31.0": + version "0.31.0" + resolved "https://registry.yarnpkg.com/@symfony/webpack-encore/-/webpack-encore-0.31.0.tgz#fe2d6de2c46f72a0020ae10738c4112e71db6fcf" + integrity sha512-EBYk8YYi26izrBBeH3mPFIQjvZY8ga1e+Rwm9Awc99ZXlU4oF6upppR301xesoCQxoSw2Rx7N8X42zyVcgMt6g== + dependencies: + "@babel/core" "^7.7.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/preset-env" "^7.4.0" + assets-webpack-plugin "^5.1.1" + 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.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "14.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.9.tgz#04afc9a25c6ff93da14deabd65dc44485b53c8d6" + integrity sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw== + +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/tapable@*": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" + integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + +"@types/uglify-js@*": + version "3.11.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.11.1.tgz#97ff30e61a0aa6876c270b5f538737e2d6ab8ceb" + integrity sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q== + dependencies: + source-map "^0.6.1" + +"@types/webpack-sources@*": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.0.0.tgz#08216ab9be2be2e1499beaebc4d469cec81e82a7" + integrity sha512-a5kPx98CNFRKQ+wqawroFunvFqv7GHm/3KOI52NY9xWADgc8smu4R6prt4EU/M4QfVjvgBkMqU4fBhw3QfMVkg== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@^4.4.31": + version "4.41.25" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.25.tgz#4d3b5aecc4e44117b376280fbfd2dc36697968c4" + integrity sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@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@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + 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/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + 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/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + 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/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + 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/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + 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/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + 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" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +adjust-sourcemap-loader@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz#5ae12fb5b7b1c585e80bbb5a63ec163a1a45e61e" + integrity sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw== + dependencies: + loader-utils "^2.0.0" + regex-parser "^2.2.11" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + 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" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arity-n@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" + integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assets-webpack-plugin@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/assets-webpack-plugin/-/assets-webpack-plugin-5.1.2.tgz#aad63438a7203d3b9d2013673d59ceaa1ff90cba" + integrity sha512-B8bOVw6Tj3jdQ6UesO7/XUCdRjXj5N4258WkaBInbGCY5Vuwnec0Tm/RGxQS8vCnbWAFS1OBx8aABDBtjkJ2bA== + dependencies: + camelcase "^6.0.0" + escape-string-regexp "^4.0.0" + lodash "^4.17.20" + mkdirp "^1.0.4" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +babel-loader@^8.0.0: + version "8.2.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.1.tgz#e53313254677e86f27536f5071d807e01d24ec00" + integrity sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw== + dependencies: + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + make-dir "^2.1.0" + pify "^4.0.1" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + 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" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= + dependencies: + inherits "~2.0.0" + +bloodhound-js@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bloodhound-js/-/bloodhound-js-1.2.3.tgz#702c175f7488a14cdfedb6c0fba2dba577964d49" + integrity sha512-gpcHaO8SqK/bLwWgobLGQvIVpSdTX4fKZFjfh6ltori5aULXJxC/ndrNRf3PYGOdyD4mFIqjySXLWX4pE88VmA== + dependencies: + es6-promise "^3.0.2" + object-assign "^4.0.1" + storage2 "^0.1.0" + superagent "^3.8.3" + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + 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" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + 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@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +bootstrap-sass@^3.3.7: + version "3.4.1" + resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.4.1.tgz#6843c73b1c258a0ac5cb2cc6f6f5285b664a8e9a" + integrity sha512-p5rxsK/IyEDQm2CwiHxxUi0MZZtvVFbhWmyMOt4lLkA4bujDA1TGoKT0i1FKIWiugAdP+kK8T5KMDFIKQCLYIA== + +bootstrap-tagsinput@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/bootstrap-tagsinput/-/bootstrap-tagsinput-0.7.1.tgz#ffe3b06bbe2a106945ef2814568005a94f211937" + integrity sha1-/+Owa74qEGlF7ygUVoAFqU8hGTc= + +bootstrap@^3.3: + version "3.4.1" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.4.1.tgz#c3a347d419e289ad11f4033e3c4132b87c081d72" + integrity sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA== + +bootswatch@^3.3.7: + version "3.4.1" + resolved "https://registry.yarnpkg.com/bootswatch/-/bootswatch-3.4.1.tgz#50aed16fb04ec791c3dd8831515c29d4a757fdb9" + integrity sha512-0hL4A8OUiqABgPipGrojf/hyhr5RS257xCNARlbK34HaMfhV5fXvwEooN4/ri9+jgX47J4Wg24ZPmfZ2xD2cKw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + 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" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + 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" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.14.6: + version "4.14.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.7.tgz#c071c1b3622c1c2e790799a37bb09473a4351cb6" + integrity sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ== + dependencies: + caniuse-lite "^1.0.30001157" + colorette "^1.2.1" + electron-to-chromium "^1.3.591" + escalade "^3.1.1" + node-releases "^1.1.66" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + 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" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + 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" + +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001157: + version "1.0.30001159" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz#bebde28f893fa9594dadcaa7d6b8e2aa0299df20" + integrity sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + 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" + +chokidar@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz#a99d8ec34c1c628a4541567aa7b457446460c62b" + integrity sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A== + dependencies: + "@types/webpack" "^4.4.31" + del "^4.1.1" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" + integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.0, component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compose-function@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" + integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= + dependencies: + arity-n "^1.0.4" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + 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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@1.7.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +convert-source-map@^0.3.3: + version "0.3.5" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookiejar@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + 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" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-compat@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.7.0.tgz#8479c5d3d672d83f1f5ab94cf353e57113e065ed" + integrity sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg== + dependencies: + browserslist "^4.14.6" + semver "7.0.0" + +core-js@^3.0.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.7.0.tgz#b0a761a02488577afbf97179e4681bf49568520f" + integrity sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + 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@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + 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" + +cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + 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" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-loader@^3.5.2: + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== + 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" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.1.tgz#30b8c0161d9fb4e9e2141d762589b6ec2faebd2e" + integrity sha512-NVN42M2fjszcUNpDbdkvutgQSlFYsr1z7kqeuCagHnNLBfYor6uP1WL1KrkmdYZ5Y1vTBCIOI/C/+8T98fJ71w== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +css@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + 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" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.1.1" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.1.1.tgz#e0cb02d6eb3af1df719222048e4359efd662af13" + integrity sha512-Rvq+e1e0TFB8E8X+8MQjHSY6vtol45s5gxtLI/018UsAn2IBMmwNEZRM/h+HVnAJRHjasLIKKUO3uvoMM28LvA== + dependencies: + css-tree "^1.0.0" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + 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" + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@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" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" + integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.591: + version "1.3.603" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.603.tgz#1b71bec27fb940eccd79245f6824c63d5f7e8abf" + integrity sha512-J8OHxOeJkoSLgBXfV9BHgKccgfLMHh+CoeRo6wJsi6m0k3otaxS/5vrHpMNSEYY4MISwewqanPOuhAtuE8riQQ== + +elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + 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" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== + +eonasdan-bootstrap-datetimepicker@^4.17.47: + version "4.17.47" + resolved "https://registry.yarnpkg.com/eonasdan-bootstrap-datetimepicker/-/eonasdan-bootstrap-datetimepicker-4.17.47.tgz#7a49970044065276e7965efd16f822735219e735" + integrity sha1-ekmXAEQGUnbnll79Fvgic1IZ5zU= + dependencies: + bootstrap "^3.3" + jquery "^1.8.3 || ^2.0 || ^3.0" + moment "^2.10" + moment-timezone "^0.4.0" + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.2: + version "2.0.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + dependencies: + stackframe "^1.1.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: + version "1.17.7" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" + integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== + 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.2" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== + 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.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^3.0.2: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM= + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + 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" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + 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" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + 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" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + 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" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +file-loader@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + 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" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +findup-sync@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" + integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@^2.3.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +formidable@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" + integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +friendly-errors-webpack-plugin@^2.0.0-beta.1: + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.0.0-beta.2.tgz#69987c67c2ed3e93847248f8ba1920f75f6ff45c" + integrity sha512-0x14cdjGx5q0yZc3Cy9sgAF/szWUFx1WxH/IX88UuKbM5Z+7FCk/Z/6hFbXMcz3qqK0mp7WrHKX3cxhUAL2aqQ== + dependencies: + chalk "^2.4.2" + error-stack-parser "^2.0.2" + string-width "^2.0.0" + strip-ansi "^5" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +fstream@^1.0.0, fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== + dependencies: + globule "^1.0.0" + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" + integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + 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" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globule@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.2.tgz#d8bdd9e9e4eef8f96e245999a5dee7eb5d8529c4" + integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== + dependencies: + glob "~7.1.1" + lodash "~4.17.10" + minimatch "~3.0.2" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +highlight.js@^10.4.1: + version "10.4.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.4.1.tgz#d48fbcf4a9971c4361b3f95f302747afe19dbad0" + integrity sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg== + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + 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" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imports-loader@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.8.0.tgz#030ea51b8ca05977c40a3abfd9b4088fe0be9a69" + integrity sha512-kXWL7Scp8KQ4552ZcdVTeaQCZSLW+e6nJfp3cwUMB673T7Hr98Xjx5JK+ql7ADlJUvj1JS5O01RLbKoutN5QDQ== + dependencies: + loader-utils "^1.0.2" + source-map "^0.6.1" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +in-publish@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz#948b1a535c8030561cea522f73f78f4be357e00c" + integrity sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ== + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4, ini@^1.3.5: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +interpret@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + 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" + +is-core-module@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946" + integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" + integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +jquery@>=1.7, "jquery@^1.8.3 || ^2.0 || ^3.0", jquery@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" + integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== + +js-base64@^2.1.8: + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klona@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/klona/-/klona-1.1.2.tgz#a79e292518a5a5412ec8d097964bff1571a64db0" + integrity sha512-xf88rTeHiXk+XE2Vhi6yj8Wm3gMZrygGdKjJqN8HkV+PwF/t50/LdAKHoHpPcxFAlmQszTZ1CugrK25S7qDRLA== + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + +lato-font@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lato-font/-/lato-font-3.0.0.tgz#91b837e2374b668fb7331d44c894d37a2d9f8e11" + integrity sha1-kbg34jdLZo+3Mx1EyJTTei2fjhE= + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.5, lodash@~4.17.10: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +loglevel@^1.6.8: + version "1.7.0" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" + integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +methods@^1.1.1, methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + 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" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +"mime-db@>= 1.43.0 < 2": + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +"mini-css-extract-plugin@>=0.4.0 <0.4.3": + version "0.4.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.2.tgz#b3ecc0d6b1bbe5ff14add42b946a7b200cf78651" + integrity sha512-ots7URQH4wccfJq9Ssrzu2+qupbncAce4TmTzunI9CIwlQMp2XI+WNUw6xWF6MMAGAm1cbUVINrSjATaVMyKXg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + 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" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +moment-timezone@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.4.1.tgz#81f598c3ad5e22cdad796b67ecd8d88d0f5baa06" + integrity sha1-gfWYw61eIs2teWtn7NjYjQ9bqgY= + dependencies: + moment ">= 2.6.0" + +"moment@>= 2.6.0", moment@^2.10: + version "2.29.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + 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" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +nan@^2.12.1, nan@^2.13.2: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + 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" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-gyp@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "^2.87.0" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + 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-releases@^1.1.66: + version "1.1.67" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" + integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== + +node-sass@^4.9.3: + version "4.14.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5" + integrity sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g== + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash "^4.17.15" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.13.2" + node-gyp "^3.8.0" + npmlog "^4.0.0" + request "^2.88.0" + sass-graph "2.2.5" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + +"nopt@2 || 3": + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@^1.0.2, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + +object-is@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" + integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" + integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + has "^1.0.3" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimize-css-assets-webpack-plugin@^5.0.1: + version "5.0.4" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz#85883c6528aaa02e30bbad9908c92926bb52dc90" + integrity sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A== + dependencies: + cssnano "^4.1.10" + last-call-webpack-plugin "^3.0.0" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@0: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + 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" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + 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" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + 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" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + 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-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss@7.0.21: + version "7.0.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" + integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +pretty-error@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.4" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + 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" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@^6.5.1: + version "6.9.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" + integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + 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" + +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regex-parser@^2.2.11: + version "2.2.11" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + 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" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.4.tgz#d325e532afb28d3f8796ffee306be8ffd6fc864c" + integrity sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + lodash "^4.17.20" + strip-ansi "^3.0.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request@^2.87.0, request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-url-loader@^3.0.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz#235e2c28e22e3e432ba7a5d4e305c59a58edfc08" + integrity sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ== + dependencies: + adjust-sourcemap-loader "3.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" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.3.2: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +rework-visit@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" + integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + +rework@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" + integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + dependencies: + convert-source-map "^0.3.3" + css "^2.0.0" + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@2, rimraf@^2.5.4, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-graph@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" + integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^13.3.2" + +sass-loader@^9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-9.0.3.tgz#086adcf0bfdcc9d920413e2cdc3ba3321373d547" + integrity sha512-fOwsP98ac1VMme+V3+o0HaaMHp8Q/C9P+MUazLFVi3Jl7ORGHQXL1XeRZt3zLSGZQQPC8xE42Y2WptItvGjDQg== + dependencies: + klona "^1.1.2" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^2.7.0" + semver "^7.3.2" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.5, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + dependencies: + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + dependencies: + node-forge "^0.10.0" + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + 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" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + 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" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + 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" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + 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" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + 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" + +source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" + integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + 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" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + 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" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stackframe@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" + integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stdout-stream@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" + integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== + dependencies: + readable-stream "^2.0.1" + +storage2@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/storage2/-/storage2-0.1.1.tgz#c6bcc8c66254860a7dda70156dbb3508885eb997" + integrity sha512-WvgkYqQnpy0ElxtJfekp/I8evoafc8iZ57efcV+m74JjTJTksWHwF5RXnK2WMOUN61oeuV9buxP6PkldpbWb2g== + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + 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" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.trimend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +style-loader@^1.1.3: + version "1.3.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" + integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.7.0" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +superagent@^3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" + integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.2.0" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.3.5" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + 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" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== + dependencies: + block-stream "*" + fstream "^1.0.12" + inherits "2" + +terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +"true-case-path@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" + integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== + dependencies: + glob "^7.1.2" + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" + integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== + +typeahead.js@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/typeahead.js/-/typeahead.js-0.11.1.tgz#4e64e671b22310a8606f4aec805924ba84b015b8" + integrity sha1-TmTmcbIjEKhgb0rsgFkkuoSwFbg= + dependencies: + jquery ">=1.7" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +webpack-cli@^3.0.0: + version "3.3.12" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" + integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== + 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" + +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.1.14: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + 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" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-manifest-plugin@^2.0.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16" + integrity sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ== + dependencies: + fs-extra "^7.0.0" + lodash ">=3.5 <5" + object.entries "^1.1.0" + tapable "^1.0.0" + +webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.36.0: + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== + 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.3.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.7.4" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@1, which@^1.2.14, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.3: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + 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"