From 1e95b0ace31e4b4ad5f224839f608d6fed91ea0a Mon Sep 17 00:00:00 2001 From: Quentin Renard Date: Sun, 5 Jul 2020 14:01:15 -0400 Subject: [PATCH] Add self-contained blocks commit bba7ed9383c887d74a0f9c1f9e677e00d7072c1f Author: Quentin Renard Date: Mon Jun 29 01:45:31 2020 -0400 Fix make:block test commit 7cae1da046d9fa9d8c3cddddacb38159d958e1a8 Author: Quentin Renard Date: Mon Jun 29 01:34:07 2020 -0400 Add defaults to block generator commit 9705310e6c581222ecd0746504cf6ce92eaf1e5a Author: Quentin Renard Date: Mon Jun 29 01:33:30 2020 -0400 Raname blocks annotations, support compiled blocks and prevent BC for users of Twill default blocks - Favor @twillBlockProperty syntax for clarity and to preserve syntax highlighting - Support new @twillBlockCompiled and @twillBlockCompoment for custom Vue compiled blocks which are not inlined in the response but in the build - Restore default compiled text and image blocks when a developer did not create any blocks yet and uses the block_editor form fields without specifying a blocks list or a group - Use new text snd image block fields when generating a new block using them as template commit 52962a0feadc1e65011e00cdfaa88e3aafcb26a5 Author: Quentin Renard Date: Mon Jun 22 01:27:09 2020 -0400 Remove yarn.lock as Twill is using npm internally commit 50e241d5148e240c3799f9b0a3a7c30224abc3d7 Author: Quentin Renard Date: Mon Jun 22 01:26:42 2020 -0400 Add back twill:module command as deprecated Will be removed in Twill 3.0 in favor of twill:make:module commit 04d671dcad72bb24ac2835a821eb4e7a38881012 Author: Quentin Renard Date: Mon Jun 22 00:08:50 2020 -0400 Revert "Remove generate blocks command" This reverts commit a329ee40e0bc99b07c14a0cc1a532c297e07b9d0. commit 4e759cdc86a28e9174e4ee726e95ebc40543b9d1 Author: Quentin Renard Date: Tue May 26 16:09:29 2020 -0400 Revert "Try only switching the PHPUnit printer through CLI to avoid duplicating the whole configuration file" This reverts commit d338140030122524c3a5ce78d874ac801dbb1f34. commit 9fc6ed9aab80d4e6d1b772e8f136574cf233b873 Author: Quentin Renard Date: Tue May 26 15:58:40 2020 -0400 Fix PHPUnit CLI option commit d338140030122524c3a5ce78d874ac801dbb1f34 Author: Quentin Renard Date: Tue May 26 15:52:03 2020 -0400 Try only switching the PHPUnit printer through CLI to avoid duplicating the whole configuration file commit a576a1ca2e34010d65511d52a6a735403e60b786 Author: Quentin Renard Date: Tue May 26 15:45:20 2020 -0400 Fix PHP 7.1 tests and Collision issue commit fcac8c2b6274185b312c2c8e03fe2320e4cc4dbb Author: Quentin Renard Date: Tue May 26 03:22:11 2020 -0400 Unskip test on Travis commit 8b18a29e76589f08bebce40db9074d529fabb6bd Author: Quentin Renard Date: Tue May 26 03:19:10 2020 -0400 Allow older version of Collision for PHP 7.1 compat commit bb654fcd9e7cbb6a6f028f8a4272252fcefe79ba Author: Quentin Renard Date: Tue May 26 03:11:59 2020 -0400 Fix tests See 1bf93ada. Login has its own test so we do not need to check the status of the login request on every test. It appears that on a first run the Testbench created Laravel app does not pick up the admin.php file resulting in a route missing when being redirected to the dashboard after login. commit 1bf93ada9bc7ca854eeef297c195ac44341698eb Author: Quentin Renard Date: Tue May 26 02:55:21 2020 -0400 Attempt to fix tests on TravisCI and add Collision output Our issue does not seem to be a Travis issue but more likely a Testbench one related to the fact that we copy files in the Laravel project it uses. It seems like added files are not being picked up on first run. To reproduce locally, rm -rf vendor/orchestra/testbench-core && composer install. commit b3d5cd62dec1c405549f9f4ca48b64459e8ac172 Author: Quentin Renard Date: Mon May 25 16:41:16 2020 -0400 Fix module authors test commit 1606afbc4a3b0a97c2f1246fffe617a3c9599377 Author: Antonio Carlos Ribeiro Date: Thu Mar 19 00:36:49 2020 +0100 Skip test on Travis for now commit 961dcefd2593d5d9416144dfa1f0cdf581e74854 Author: Antonio Carlos Ribeiro Date: Wed Mar 18 23:45:32 2020 +0100 Move test to a different file commit 0ac062aa49aa98c7957919ed729d3bc53819cad7 Author: Antonio Carlos Ribeiro Date: Wed Mar 18 10:30:57 2020 +0100 Rollback to not stop on all errors and failures commit 789c8889283f29467ffd00c5f69570a12e0df1af Author: Antonio Carlos Ribeiro Date: Wed Mar 18 10:15:36 2020 +0100 Fix test errors with translatable commit 2171b55bf90279ca9954eae8807948179c29108b Author: Antonio Carlos Ribeiro Date: Wed Mar 18 10:15:15 2020 +0100 Prevent phpunit from showing .blade.php stub files on terminal commit 08764474339639683899d3dc507a79ae1ed44e9e Author: Antonio Ribeiro Date: Wed Mar 18 03:15:58 2020 +0100 Update packages commit e86a3ba392e561274e324cdbfef17e77e2582461 Author: Antonio Ribeiro Date: Mon Mar 16 02:10:51 2020 +0100 Load translatable config file commit d0c4782abcb52545c82801580618a7bd60a1bb55 Author: Antonio Ribeiro Date: Mon Mar 16 00:51:10 2020 +0100 Add group to repeater commit 151f6ea5edb997e7216ded9213358ad4ee29c32d Author: Antonio Ribeiro Date: Mon Mar 16 00:42:58 2020 +0100 Update composer packages commit 75db16b9da1c8b381f7f53894d39f7ae2929f4c5 Author: Antonio Ribeiro Date: Mon Mar 16 00:36:53 2020 +0100 Create tests for the new block services commit 6e9712f60f6a96717be0b68071a32350548c24de Author: Antonio Ribeiro Date: Sun Mar 15 20:54:52 2020 +0100 Remove legacy array commit 2707be155cd14935e991bd1b47da91fd2e8fa97d Author: Antonio Ribeiro Date: Sun Mar 15 13:11:40 2020 +0100 Split commands tests commit a329ee40e0bc99b07c14a0cc1a532c297e07b9d0 Author: Antonio Ribeiro Date: Sun Mar 15 13:11:04 2020 +0100 Remove generate blocks command commit 4fd23c88a2aff4c3be2ac4c4f6864fba5e02781a Author: Antonio Ribeiro Date: Sun Mar 15 12:44:27 2020 +0100 Use destination directory commit ce946555fbfe741ca6bc401f1d12dac5d527becb Author: Antonio Ribeiro Date: Sun Mar 15 12:17:49 2020 +0100 Remove uneeded method commit 03eaf56c82a9e2f2f45707983c3f9941f5c8b423 Author: Antonio Ribeiro Date: Sun Mar 15 12:11:10 2020 +0100 Refactor parser commit 00d39e51133438f0c7b89486e83fbe35630296b6 Author: Antonio Ribeiro Date: Sun Mar 15 12:06:43 2020 +0100 Remove old parser commit 6bb19e34b6141175d30ba6a7fd4015674bc07496 Author: Antonio Ribeiro Date: Sat Mar 14 19:12:30 2020 +0100 Correctly filter groups commit 8fb8939a22b37c2a0d5cb4e67afb8656f5c967c8 Author: Antonio Ribeiro Date: Sat Mar 14 19:04:49 2020 +0100 Add group and correctly filter blocks for module commit 257e679b70a8c64e04f5a7ea38c44726376e2a24 Author: Antonio Ribeiro Date: Sat Mar 14 18:24:02 2020 +0100 Make directories configurable commit 0aa4ea68205df8002c5fca75c605b1058e9d22f6 Author: Antonio Carlos Ribeiro Date: Mon Mar 9 12:37:33 2020 +0100 Fix missing block list commit 28c787f1e44e00b26d1db367b42b62e9e36c69a0 Author: Antonio Carlos Ribeiro Date: Mon Mar 9 00:41:49 2020 +0100 Move logic to a service class commit 99168cfdc37a5d27ac5cd6da89167d0aec9bc002 Author: Antonio Carlos Ribeiro Date: Sun Mar 8 18:37:35 2020 +0100 Fix coding style commit 53ddb75534de6e1b166817229824ae1e895c6a7f Author: Antonio Carlos Ribeiro Date: Sun Mar 8 18:36:22 2020 +0100 Correctly render repeaters commit 505397784c885412e61162e50595a2923c1ecae2 Author: Antonio Carlos Ribeiro Date: Sun Mar 8 15:59:38 2020 +0100 Refactor blade string compiler commit 4fff6bdcafc4e95f99afce8843aee7580a4129b5 Merge: 27da77c6 f0a8822a Author: Antonio Carlos Ribeiro Date: Sun Mar 8 15:20:39 2020 +0100 Add footnote block commit edd186f95ef40c845c889f51615f379b6b3be9a3 Author: Antonio Carlos Ribeiro Date: Sun Mar 8 09:32:11 2020 +0100 Fix block rendering commit 42820321a174e64dc33e859fc5b8a55f05df1542 Author: Antonio Carlos Ribeiro Date: Sun Mar 8 08:26:10 2020 +0100 Render blocks and add them to the view commit 0f07334f57fc7f92e7d59827750cd4266129285e Author: Antonio Carlos Ribeiro Date: Thu Mar 5 23:43:51 2020 +0100 Generate and compile block commit 9e33013b1bd186870f79b0d33e3c1bc15dbd9c3e Author: Antonio Carlos Ribeiro Date: Thu Mar 5 01:24:17 2020 +0100 Rename block properties to AREA 17 commit 377116b656299f004642193d62e3098f254f0a9d Author: Antonio Carlos Ribeiro Date: Thu Mar 5 00:53:12 2020 +0100 Add some docblocks and type hints commit 7e4116c6c363d91a0d792165e5a3a64140b8f03f Author: Antonio Carlos Ribeiro Date: Thu Mar 5 00:49:20 2020 +0100 Properly export a list of blocks commit 6334b7f0668a52fff6936505e926ea35c68170fa Author: Antonio Carlos Ribeiro Date: Thu Mar 5 00:13:53 2020 +0100 Add docblocks commit 82ef4262b481b5007618a562c8d5b30f0b025af7 Author: Antonio Carlos Ribeiro Date: Thu Mar 5 00:03:44 2020 +0100 Move parser to Block class commit 42053e220b5b570665141c908619994f051478b2 Author: Antonio Carlos Ribeiro Date: Wed Mar 4 22:50:11 2020 +0100 Coding style commit 3a14fb426ddf44c091f8bd4507655677368978c4 Author: Antonio Carlos Ribeiro Date: Wed Mar 4 01:12:36 2020 +0100 Dinamically load list of blocks commit c8b5f7c3da1379cd0001e221e0764e5d64db5cad Author: Antonio Carlos Ribeiro Date: Wed Mar 4 00:43:41 2020 +0100 Add repeaters folder to repository commit 0e1a2f6512bb074b044f4f7b677bb3abfe0dda90 Author: Antonio Carlos Ribeiro Date: Wed Mar 4 00:34:30 2020 +0100 Refactor block create and create block class commit 6ed3e5b1e61c223217444b86226ba2b5ff5c0087 Author: Antonio Carlos Ribeiro Date: Mon Mar 2 00:12:00 2020 +0100 Parse file blocks commit 14c51f3ec5307493f45c96c01b8bec5b109408cd Author: Antonio Carlos Ribeiro Date: Mon Feb 24 23:56:29 2020 +0100 Create block command Co-Authored-By: Antonio Carlos Ribeiro --- .travis.yml | 10 +- composer.json | 5 +- composer.lock | 2555 +++++++++++------ config/blocks.php | 52 +- frontend/js/components/blocks/BlockImage.vue | 4 +- phpunit-7.1.xml | 66 + phpunit.xml | 6 +- routes/admin.php | 2 + src/Commands/BlockMake.php | 67 + src/Commands/Build.php | 1 - src/Commands/Command.php | 32 + src/Commands/CreateSuperAdmin.php | 1 - src/Commands/Dev.php | 2 - src/Commands/Install.php | 1 - src/Commands/ListBlocks.php | 166 ++ src/Commands/ListIcons.php | 103 + src/Commands/ModuleMake.php | 3 +- src/Commands/ModuleMakeDeprecated.php | 44 + src/Commands/RefreshLQIP.php | 1 - src/Commands/Update.php | 2 - src/Commands/stubs/blocks/carousel.blade.php | 15 + src/Commands/stubs/blocks/footnote.blade.php | 21 + src/Commands/stubs/blocks/gallery.blade.php | 27 + src/Commands/stubs/blocks/image.blade.php | 26 + src/Commands/stubs/blocks/quote.blade.php | 16 + src/Commands/stubs/blocks/text.blade.php | 28 + .../stubs/repeaters/carousel-item.blade.php | 14 + src/Helpers/helpers.php | 40 + .../Controllers/Admin/IconsController.php | 27 + .../Controllers/Admin/ModuleController.php | 12 + src/Repositories/Behaviors/HandleBlocks.php | 5 +- src/Repositories/BlockRepository.php | 5 +- src/Services/Blocks/BladeCompiler.php | 82 + src/Services/Blocks/Block.php | 292 ++ src/Services/Blocks/BlockCollection.php | 240 ++ src/Services/Blocks/BlockMaker.php | 540 ++++ src/TwillServiceProvider.php | 8 + tests/integration/Behaviors/CopyBlocks.php | 46 + tests/integration/Commands/BuildTest.php | 20 + tests/integration/Commands/ListBlocksTest.php | 57 + tests/integration/Commands/ListIconsTest.php | 37 + tests/integration/Commands/MakeBlockTest.php | 134 + tests/integration/Commands/MakeModuleTest.php | 32 + tests/integration/Commands/SuperadminTest.php | 33 + tests/integration/Commands/UpdateTest.php | 13 + tests/integration/CommandsTest.php | 96 - tests/integration/DashboardTest.php | 100 - tests/integration/ModulesAuthorsTest.php | 37 +- tests/integration/ModulesTestBase.php | 18 +- tests/integration/RoutesTest.php | 10 +- tests/integration/TestCase.php | 68 +- tests/stubs/blocks/BlockQuote.vue | 21 - tests/stubs/blocks/quote.blade.php | 7 - tests/stubs/modules/authors/twill.php | 85 +- tests/stubs/modules/dashboard/twill.php | 36 - views/layouts/form.blade.php | 2 +- views/partials/form/_block_editor.blade.php | 14 +- .../form/utils/_blocks_templates.blade.php | 31 +- 58 files changed, 4261 insertions(+), 1157 deletions(-) create mode 100644 phpunit-7.1.xml create mode 100644 src/Commands/BlockMake.php create mode 100644 src/Commands/Command.php create mode 100644 src/Commands/ListBlocks.php create mode 100644 src/Commands/ListIcons.php create mode 100644 src/Commands/ModuleMakeDeprecated.php create mode 100644 src/Commands/stubs/blocks/carousel.blade.php create mode 100644 src/Commands/stubs/blocks/footnote.blade.php create mode 100644 src/Commands/stubs/blocks/gallery.blade.php create mode 100644 src/Commands/stubs/blocks/image.blade.php create mode 100644 src/Commands/stubs/blocks/quote.blade.php create mode 100644 src/Commands/stubs/blocks/text.blade.php create mode 100644 src/Commands/stubs/repeaters/carousel-item.blade.php create mode 100644 src/Http/Controllers/Admin/IconsController.php create mode 100644 src/Services/Blocks/BladeCompiler.php create mode 100644 src/Services/Blocks/Block.php create mode 100644 src/Services/Blocks/BlockCollection.php create mode 100644 src/Services/Blocks/BlockMaker.php create mode 100644 tests/integration/Behaviors/CopyBlocks.php create mode 100644 tests/integration/Commands/BuildTest.php create mode 100644 tests/integration/Commands/ListBlocksTest.php create mode 100644 tests/integration/Commands/ListIconsTest.php create mode 100644 tests/integration/Commands/MakeBlockTest.php create mode 100644 tests/integration/Commands/MakeModuleTest.php create mode 100644 tests/integration/Commands/SuperadminTest.php create mode 100644 tests/integration/Commands/UpdateTest.php delete mode 100644 tests/integration/CommandsTest.php delete mode 100644 tests/integration/DashboardTest.php delete mode 100644 tests/stubs/blocks/BlockQuote.vue delete mode 100644 tests/stubs/blocks/quote.blade.php delete mode 100644 tests/stubs/modules/dashboard/twill.php diff --git a/.travis.yml b/.travis.yml index 57dd31a4f..d670f984e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,11 +32,17 @@ install: script: - vendor/bin/php-cs-fixer --dry-run --config=./.php_cs.travis fix src/ tests/ || travis_terminate 1; - - vendor/bin/phpunit --coverage-text --coverage-clover=coverage.clover + - | + if [[ "$TRAVIS_PHP_VERSION" == '7.1' ]]; then + vendor/bin/phpunit --configuration phpunit-7.1.xml + else + vendor/bin/phpunit --coverage-text --coverage-clover=coverage.clover + fi + after_script: - | - if [[ "$TRAVIS_PHP_VERSION" == '7.3' ]]; then + if [[ "$TRAVIS_PHP_VERSION" == '7.4' ]]; then wget https://scrutinizer-ci.com/ocular.phar php ocular.phar code-coverage:upload --format=php-clover coverage.clover fi diff --git a/composer.json b/composer.json index 589482db2..4882ac283 100644 --- a/composer.json +++ b/composer.json @@ -46,8 +46,9 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^2.16", "kalnoy/nestedset": "^5.0", + "nunomaduro/collision": "^3.0|^4.2", "orchestra/testbench": "~3.3|~3.4|~3.5|~3.6|~3.7|~3.8|^4.0|^5.0", - "phpunit/phpunit": "~5.0|~6.0|~7.0|~8.0" + "phpunit/phpunit": "~5.0|~6.0|~7.0|~8.0|~9.0" }, "autoload": { "psr-4": { @@ -58,7 +59,7 @@ } }, "scripts": { - "test:phpunit": "vendor/bin/phpunit --colors=always", + "test:phpunit": "vendor/bin/phpunit", "test:analyse": "php -d memory_limit=-1 vendor/bin/phpstan analyse", "test:syntax": "vendor/bin/php-cs-fixer --dry-run --rules=-@PSR1 fix src", "test": [ diff --git a/composer.lock b/composer.lock index bea71b9a0..7e9abb475 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9a10e1aea9e5a52b92aab864dc0c7ba0", + "content-hash": "684baa15a30164c337f4c1f2f0b5a8a3", "packages": [ { "name": "astrotomic/laravel-translatable", - "version": "v11.8.0", + "version": "v11.8.2", "source": { "type": "git", "url": "https://github.com/Astrotomic/laravel-translatable.git", - "reference": "8bd84a30381dfd9e2e1f24252b54279899959a7b" + "reference": "29d409f5fca2209252c9b6dc135b0994b2cadca0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Astrotomic/laravel-translatable/zipball/8bd84a30381dfd9e2e1f24252b54279899959a7b", - "reference": "8bd84a30381dfd9e2e1f24252b54279899959a7b", + "url": "https://api.github.com/repos/Astrotomic/laravel-translatable/zipball/29d409f5fca2209252c9b6dc135b0994b2cadca0", + "reference": "29d409f5fca2209252c9b6dc135b0994b2cadca0", "shasum": "" }, "require": { @@ -81,26 +81,22 @@ { "url": "https://issuehunt.io/r/astrotomic", "type": "issuehunt" - }, - { - "url": "https://opencollective.com/astrotomic", - "type": "open_collective" } ], - "time": "2020-03-03T10:43:26+00:00" + "time": "2020-06-23T15:40:25+00:00" }, { "name": "aws/aws-sdk-php", - "version": "3.134.1", + "version": "3.145.0", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "aefab57896b558634d24342bdc3c6814e8e533f6" + "reference": "df5406b49f4f5774045e51e8fecc75717c4d6454" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/aefab57896b558634d24342bdc3c6814e8e533f6", - "reference": "aefab57896b558634d24342bdc3c6814e8e533f6", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/df5406b49f4f5774045e51e8fecc75717c4d6454", + "reference": "df5406b49f4f5774045e51e8fecc75717c4d6454", "shasum": "" }, "require": { @@ -123,6 +119,7 @@ "ext-pcntl": "*", "ext-sockets": "*", "nette/neon": "^2.3", + "paragonie/random_compat": ">= 2", "phpunit/phpunit": "^4.8.35|^5.4.3", "psr/cache": "^1.0", "psr/simple-cache": "^1.0", @@ -171,7 +168,7 @@ "s3", "sdk" ], - "time": "2020-04-01T18:14:23+00:00" + "time": "2020-07-02T18:12:35+00:00" }, { "name": "bacon/bacon-qr-code", @@ -224,25 +221,26 @@ }, { "name": "brick/math", - "version": "0.8.14", + "version": "0.8.15", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "6f7a46b5c3d487b277f38fbd17df57d348cace8a" + "reference": "9b08d412b9da9455b210459ff71414de7e6241cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/6f7a46b5c3d487b277f38fbd17df57d348cace8a", - "reference": "6f7a46b5c3d487b277f38fbd17df57d348cace8a", + "url": "https://api.github.com/repos/brick/math/zipball/9b08d412b9da9455b210459ff71414de7e6241cd", + "reference": "9b08d412b9da9455b210459ff71414de7e6241cd", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-json": "*", + "php": "^7.1|^8.0" }, "require-dev": { - "php-coveralls/php-coveralls": "2.*", - "phpunit/phpunit": "7.*", - "vimeo/psalm": "3.*" + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15|^8.5", + "vimeo/psalm": "^3.5" }, "type": "library", "autoload": { @@ -265,7 +263,13 @@ "brick", "math" ], - "time": "2020-02-17T13:57:43+00:00" + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/brick/math", + "type": "tidelift" + } + ], + "time": "2020-04-15T15:59:35+00:00" }, { "name": "cartalyst/tags", @@ -372,20 +376,20 @@ }, { "name": "doctrine/cache", - "version": "1.10.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62" + "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/382e7f4db9a12dc6c19431743a2b096041bcdd62", - "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62", + "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3", + "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3", "shasum": "" }, "require": { - "php": "~7.1" + "php": "~7.1 || ^8.0" }, "conflict": { "doctrine/common": ">2.2,<2.4" @@ -450,20 +454,34 @@ "redis", "xcache" ], - "time": "2019-11-29T15:36:20+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2020-05-27T16:24:54+00:00" }, { "name": "doctrine/dbal", - "version": "v2.10.1", + "version": "2.10.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8" + "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8", - "reference": "c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/aab745e7b6b2de3b47019da81e7225e14dcfdac8", + "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8", "shasum": "" }, "require": { @@ -475,9 +493,11 @@ "require-dev": { "doctrine/coding-standard": "^6.0", "jetbrains/phpstorm-stubs": "^2019.1", - "phpstan/phpstan": "^0.11.3", + "nikic/php-parser": "^4.4", + "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^8.4.1", - "symfony/console": "^2.0.5|^3.0|^4.0|^5.0" + "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", + "vimeo/psalm": "^3.11" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -542,7 +562,21 @@ "sqlserver", "sqlsrv" ], - "time": "2020-01-04T12:56:21+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2020-04-20T17:19:26+00:00" }, { "name": "doctrine/event-manager", @@ -622,33 +656,37 @@ }, { "name": "doctrine/inflector", - "version": "1.3.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1" + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1", - "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "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": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -677,32 +715,52 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", + "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", - "pluralize", - "singularize", - "string" + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "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": "2019-10-30T19:59:35+00:00" + "time": "2020-05-29T15:13:26+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", "shasum": "" }, "require": { - "php": "^7.2" + "php": "^7.2 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -747,7 +805,21 @@ "parser", "php" ], - "time": "2019-10-30T14:39:59+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" }, { "name": "dragonmantank/cron-expression", @@ -805,16 +877,16 @@ }, { "name": "egulias/email-validator", - "version": "2.1.17", + "version": "2.1.18", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" + "reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/cfa3d44471c7f5bfb684ac2b0da7114283d78441", + "reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441", "shasum": "" }, "require": { @@ -838,7 +910,7 @@ }, "autoload": { "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" + "Egulias\\EmailValidator\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -859,7 +931,7 @@ "validation", "validator" ], - "time": "2020-02-13T22:36:52+00:00" + "time": "2020-06-16T20:11:17+00:00" }, { "name": "firebase/php-jwt", @@ -913,22 +985,22 @@ }, { "name": "google/apiclient", - "version": "v2.4.1", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client.git", - "reference": "1fdfe942f9aaf3064e621834a5e3047fccb3a6da" + "reference": "9ab9cc07f66e2c7274ea2753f102ae24d1271410" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/1fdfe942f9aaf3064e621834a5e3047fccb3a6da", - "reference": "1fdfe942f9aaf3064e621834a5e3047fccb3a6da", + "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/9ab9cc07f66e2c7274ea2753f102ae24d1271410", + "reference": "9ab9cc07f66e2c7274ea2753f102ae24d1271410", "shasum": "" }, "require": { "firebase/php-jwt": "~2.0||~3.0||~4.0||~5.0", "google/apiclient-services": "~0.13", - "google/auth": "^1.0", + "google/auth": "^1.9", "guzzlehttp/guzzle": "~5.3.1||~6.0", "guzzlehttp/psr7": "^1.2", "monolog/monolog": "^1.17|^2.0", @@ -970,20 +1042,20 @@ "keywords": [ "google" ], - "time": "2020-03-26T15:30:32+00:00" + "time": "2020-05-26T22:29:38+00:00" }, { "name": "google/apiclient-services", - "version": "v0.128", + "version": "v0.139", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "d6425891e72439bbec9d9dcb0c8b9fca49ca017e" + "reference": "84e99f792cae7bd92b8b54c75b0ad3502d628db6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/d6425891e72439bbec9d9dcb0c8b9fca49ca017e", - "reference": "d6425891e72439bbec9d9dcb0c8b9fca49ca017e", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/84e99f792cae7bd92b8b54c75b0ad3502d628db6", + "reference": "84e99f792cae7bd92b8b54c75b0ad3502d628db6", "shasum": "" }, "require": { @@ -1007,20 +1079,20 @@ "keywords": [ "google" ], - "time": "2020-04-01T00:24:15+00:00" + "time": "2020-06-08T00:24:31+00:00" }, { "name": "google/auth", - "version": "v1.8.0", + "version": "v1.9.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "c7b295feb248f138f462a1e6b7d635e4244204c5" + "reference": "af4abf63988b8c74f589bee1e69ba310d3e43c6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/c7b295feb248f138f462a1e6b7d635e4244204c5", - "reference": "c7b295feb248f138f462a1e6b7d635e4244204c5", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/af4abf63988b8c74f589bee1e69ba310d3e43c6c", + "reference": "af4abf63988b8c74f589bee1e69ba310d3e43c6c", "shasum": "" }, "require": { @@ -1032,12 +1104,12 @@ "psr/http-message": "^1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^1.11", "guzzlehttp/promises": "0.1.1|^1.3", "kelvinmo/simplejwt": "^0.2.5", "phpseclib/phpseclib": "^2", "phpunit/phpunit": "^4.8.36|^5.7", - "sebastian/comparator": ">=1.2.3" + "sebastian/comparator": ">=1.2.3", + "squizlabs/php_codesniffer": "^3.5" }, "suggest": { "phpseclib/phpseclib": "May be used in place of OpenSSL for signing strings or for token management. Please require version ^2." @@ -1059,27 +1131,28 @@ "google", "oauth2" ], - "time": "2020-03-26T19:47:36+00:00" + "time": "2020-05-18T17:02:59+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "6.5.2", + "version": "6.5.5", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.0", "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5" + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17.0" }, "require-dev": { "ext-curl": "*", @@ -1087,7 +1160,6 @@ "psr/log": "^1.1" }, "suggest": { - "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", @@ -1126,7 +1198,7 @@ "rest", "web service" ], - "time": "2019-12-23T11:57:10+00:00" + "time": "2020-06-16T21:01:06+00:00" }, { "name": "guzzlehttp/promises", @@ -1252,16 +1324,16 @@ }, { "name": "imgix/imgix-php", - "version": "3.2.0", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/imgix/imgix-php.git", - "reference": "d95a5937c4a5e1ffc6b2c64e51215a7262d4eb09" + "reference": "6995ca3440fe442b1175c12dc63b41617568b606" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/imgix/imgix-php/zipball/d95a5937c4a5e1ffc6b2c64e51215a7262d4eb09", - "reference": "d95a5937c4a5e1ffc6b2c64e51215a7262d4eb09", + "url": "https://api.github.com/repos/imgix/imgix-php/zipball/6995ca3440fe442b1175c12dc63b41617568b606", + "reference": "6995ca3440fe442b1175c12dc63b41617568b606", "shasum": "" }, "require": { @@ -1284,7 +1356,7 @@ "keywords": [ "imgix" ], - "time": "2020-04-01T22:48:20+00:00" + "time": "2020-06-05T21:57:36+00:00" }, { "name": "intervention/image", @@ -1358,27 +1430,27 @@ }, { "name": "laravel/framework", - "version": "v7.4.0", + "version": "v7.18.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "dafdd1e19f86add02e48fa9f6cac9be2c5329772" + "reference": "116b508bafd81de97b1c09744445d32a91076b60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/dafdd1e19f86add02e48fa9f6cac9be2c5329772", - "reference": "dafdd1e19f86add02e48fa9f6cac9be2c5329772", + "url": "https://api.github.com/repos/laravel/framework/zipball/116b508bafd81de97b1c09744445d32a91076b60", + "reference": "116b508bafd81de97b1c09744445d32a91076b60", "shasum": "" }, "require": { - "doctrine/inflector": "^1.1", + "doctrine/inflector": "^1.4|^2.0", "dragonmantank/cron-expression": "^2.0", "egulias/email-validator": "^2.1.10", "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", "league/commonmark": "^1.3", - "league/flysystem": "^1.0.8", + "league/flysystem": "^1.0.34", "monolog/monolog": "^2.0", "nesbot/carbon": "^2.17", "opis/closure": "^3.1", @@ -1393,6 +1465,7 @@ "symfony/http-foundation": "^5.0", "symfony/http-kernel": "^5.0", "symfony/mime": "^5.0", + "symfony/polyfill-php73": "^1.17", "symfony/process": "^5.0", "symfony/routing": "^5.0", "symfony/var-dumper": "^5.0", @@ -1403,6 +1476,9 @@ "conflict": { "tightenco/collect": "<5.5.33" }, + "provide": { + "psr/container-implementation": "1.0" + }, "replace": { "illuminate/auth": "self.version", "illuminate/broadcasting": "self.version", @@ -1451,6 +1527,7 @@ "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-memcached": "Required to use the memcache cache driver.", "ext-pcntl": "Required to use all features of the queue worker.", @@ -1471,6 +1548,7 @@ "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", "symfony/cache": "Required to PSR-6 cache bridge (^5.0).", + "symfony/filesystem": "Required to create relative storage directory symbolic links (^5.0).", "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." }, @@ -1505,33 +1583,34 @@ "framework", "laravel" ], - "time": "2020-03-31T15:01:12+00:00" + "time": "2020-06-30T13:52:36+00:00" }, { "name": "laravel/socialite", - "version": "v4.3.2", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "4bd66ee416fea04398dee5b8c32d65719a075db4" + "reference": "80951df0d93435b773aa00efe1fad6d5015fac75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/4bd66ee416fea04398dee5b8c32d65719a075db4", - "reference": "4bd66ee416fea04398dee5b8c32d65719a075db4", + "url": "https://api.github.com/repos/laravel/socialite/zipball/80951df0d93435b773aa00efe1fad6d5015fac75", + "reference": "80951df0d93435b773aa00efe1fad6d5015fac75", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/guzzle": "~6.0", + "guzzlehttp/guzzle": "^6.0|^7.0", "illuminate/http": "~5.7.0|~5.8.0|^6.0|^7.0", "illuminate/support": "~5.7.0|~5.8.0|^6.0|^7.0", - "league/oauth1-client": "~1.0", + "league/oauth1-client": "^1.0", "php": "^7.1.3" }, "require-dev": { "illuminate/contracts": "~5.7.0|~5.8.0|^6.0|^7.0", "mockery/mockery": "^1.0", + "orchestra/testbench": "^3.7|^3.8|^4.0|^5.0", "phpunit/phpunit": "^7.0|^8.0" }, "type": "library", @@ -1569,20 +1648,20 @@ "laravel", "oauth" ], - "time": "2020-02-04T15:30:01+00:00" + "time": "2020-06-03T13:30:03+00:00" }, { "name": "laravel/ui", - "version": "v2.0.1", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83" + "reference": "da9350533d0da60d5dc42fb7de9c561c72129bba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83", - "reference": "47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83", + "url": "https://api.github.com/repos/laravel/ui/zipball/da9350533d0da60d5dc42fb7de9c561c72129bba", + "reference": "da9350533d0da60d5dc42fb7de9c561c72129bba", "shasum": "" }, "require": { @@ -1624,25 +1703,25 @@ "laravel", "ui" ], - "time": "2020-03-03T20:16:46+00:00" + "time": "2020-06-30T20:56:33+00:00" }, { "name": "league/commonmark", - "version": "1.3.2", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "75542a366ccbe1896ed79fcf3e8e68206d6c4257" + "reference": "6d74caf6abeed5fd85d6ec20da23d7269cd0b46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/75542a366ccbe1896ed79fcf3e8e68206d6c4257", - "reference": "75542a366ccbe1896ed79fcf3e8e68206d6c4257", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/6d74caf6abeed5fd85d6ec20da23d7269cd0b46f", + "reference": "6d74caf6abeed5fd85d6ec20da23d7269cd0b46f", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "conflict": { "scrutinizer/ocular": "1.7.*" @@ -1655,7 +1734,7 @@ "github/gfm": "0.29.0", "michelf/php-markdown": "~1.4", "mikehaertl/php-shellcommand": "^1.4", - "phpstan/phpstan-shim": "^0.11.5", + "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5", "scrutinizer/ocular": "^1.5", "symfony/finder": "^4.2" @@ -1664,11 +1743,6 @@ "bin/commonmark" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, "autoload": { "psr-4": { "League\\CommonMark\\": "src" @@ -1699,6 +1773,18 @@ "parser" ], "funding": [ + { + "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", + "type": "custom" + }, + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, { "url": "https://github.com/colinodell", "type": "github" @@ -1708,24 +1794,24 @@ "type": "patreon" }, { - "url": "https://tidelift.com/funding/github/packagist/league%2fcommonmark", + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", "type": "tidelift" } ], - "time": "2020-03-25T19:55:28+00:00" + "time": "2020-06-27T12:50:08+00:00" }, { "name": "league/flysystem", - "version": "1.0.66", + "version": "1.0.69", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "021569195e15f8209b1c4bebb78bd66aa4f08c21" + "reference": "7106f78428a344bc4f643c233a94e48795f10967" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/021569195e15f8209b1c4bebb78bd66aa4f08c21", - "reference": "021569195e15f8209b1c4bebb78bd66aa4f08c21", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/7106f78428a344bc4f643c233a94e48795f10967", + "reference": "7106f78428a344bc4f643c233a94e48795f10967", "shasum": "" }, "require": { @@ -1802,20 +1888,20 @@ "type": "other" } ], - "time": "2020-03-17T18:58:12+00:00" + "time": "2020-05-18T15:13:39+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "1.0.24", + "version": "1.0.25", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "4382036bde5dc926f9b8b337e5bdb15e5ec7b570" + "reference": "d409b97a50bf85fbde30cbc9fc10237475e696ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/4382036bde5dc926f9b8b337e5bdb15e5ec7b570", - "reference": "4382036bde5dc926f9b8b337e5bdb15e5ec7b570", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/d409b97a50bf85fbde30cbc9fc10237475e696ea", + "reference": "d409b97a50bf85fbde30cbc9fc10237475e696ea", "shasum": "" }, "require": { @@ -1849,7 +1935,7 @@ } ], "description": "Flysystem adapter for the AWS S3 SDK v3.x", - "time": "2020-02-23T13:31:58+00:00" + "time": "2020-06-02T18:41:58+00:00" }, { "name": "league/flysystem-azure-blob-storage", @@ -2247,20 +2333,20 @@ }, { "name": "monolog/monolog", - "version": "2.0.2", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8" + "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c861fcba2ca29404dc9e617eedd9eff4616986b8", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/38914429aac460e8e4616c8cb486ecb40ec90bb1", + "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1", "shasum": "" }, "require": { - "php": "^7.2", + "php": ">=7.2", "psr/log": "^1.0.1" }, "provide": { @@ -2271,11 +2357,11 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^6.0", "graylog2/gelf-php": "^1.4.2", - "jakub-onderka/php-parallel-lint": "^0.9", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", + "php-parallel-lint/php-parallel-lint": "^1.0", "phpspec/prophecy": "^1.6.1", - "phpunit/phpunit": "^8.3", + "phpunit/phpunit": "^8.5", "predis/predis": "^1.1", "rollbar/rollbar": "^1.3", "ruflin/elastica": ">=0.90 <3.0", @@ -2324,7 +2410,17 @@ "logging", "psr-3" ], - "time": "2019-12-20T14:22:59+00:00" + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2020-05-22T08:12:19+00:00" }, { "name": "mtdowling/jmespath.php", @@ -2431,29 +2527,31 @@ }, { "name": "nesbot/carbon", - "version": "2.32.2", + "version": "2.36.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc" + "reference": "d0b65958d9942fd1b501fdb0800c67e8323aa08d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/f10e22cf546704fab1db4ad4b9dedbc5c797a0dc", - "reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d0b65958d9942fd1b501fdb0800c67e8323aa08d", + "reference": "d0b65958d9942fd1b501fdb0800c67e8323aa08d", "shasum": "" }, "require": { "ext-json": "*", "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", "symfony/translation": "^3.4 || ^4.0 || ^5.0" }, "require-dev": { "doctrine/orm": "^2.7", "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", - "kylekatarnls/multi-tester": "^1.1", + "kylekatarnls/multi-tester": "^2.0", "phpmd/phpmd": "^2.8", - "phpstan/phpstan": "^0.11", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.30", "phpunit/phpunit": "^7.5 || ^8.0", "squizlabs/php_codesniffer": "^3.4" }, @@ -2463,12 +2561,18 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "2.x-dev", + "dev-3.x": "3.x-dev" }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -2508,20 +2612,20 @@ "type": "tidelift" } ], - "time": "2020-03-31T13:43:19+00:00" + "time": "2020-06-25T20:20:01+00:00" }, { "name": "opis/closure", - "version": "3.5.1", + "version": "3.5.5", "source": { "type": "git", "url": "https://github.com/opis/closure.git", - "reference": "93ebc5712cdad8d5f489b500c59d122df2e53969" + "reference": "dec9fc5ecfca93f45cd6121f8e6f14457dff372c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/93ebc5712cdad8d5f489b500c59d122df2e53969", - "reference": "93ebc5712cdad8d5f489b500c59d122df2e53969", + "url": "https://api.github.com/repos/opis/closure/zipball/dec9fc5ecfca93f45cd6121f8e6f14457dff372c", + "reference": "dec9fc5ecfca93f45cd6121f8e6f14457dff372c", "shasum": "" }, "require": { @@ -2569,7 +2673,7 @@ "serialization", "serialize" ], - "time": "2019-11-29T22:36:02+00:00" + "time": "2020-06-17T14:59:55+00:00" }, { "name": "paragonie/constant_time_encoding", @@ -2633,63 +2737,18 @@ ], "time": "2019-11-06T19:20:29+00:00" }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "time": "2018-07-02T15:55:56+00:00" - }, { "name": "phpoption/phpoption", - "version": "1.7.3", + "version": "1.7.4", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "4acfd6a4b33a509d8c88f50e5222f734b6aeebae" + "reference": "b2ada2ad5d8a32b89088b8adc31ecd2e3a13baf3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/4acfd6a4b33a509d8c88f50e5222f734b6aeebae", - "reference": "4acfd6a4b33a509d8c88f50e5222f734b6aeebae", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/b2ada2ad5d8a32b89088b8adc31ecd2e3a13baf3", + "reference": "b2ada2ad5d8a32b89088b8adc31ecd2e3a13baf3", "shasum": "" }, "require": { @@ -2731,20 +2790,30 @@ "php", "type" ], - "time": "2020-03-21T18:07:53+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2020-06-07T10:40:07+00:00" }, { "name": "phpseclib/phpseclib", - "version": "2.0.26", + "version": "2.0.27", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "09655fcc1f8bab65727be036b28f6f20311c126c" + "reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/09655fcc1f8bab65727be036b28f6f20311c126c", - "reference": "09655fcc1f8bab65727be036b28f6f20311c126c", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc", + "reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc", "shasum": "" }, "require": { @@ -2837,42 +2906,34 @@ "type": "tidelift" } ], - "time": "2020-03-13T04:15:39+00:00" + "time": "2020-04-04T23:17:33+00:00" }, { "name": "pragmarx/google2fa", - "version": "v7.0.0", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/antonioribeiro/google2fa.git", - "reference": "0afb47f8a686bd203fe85a05bab85139f3c1971e" + "reference": "26c4c5cf30a2844ba121760fd7301f8ad240100b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/0afb47f8a686bd203fe85a05bab85139f3c1971e", - "reference": "0afb47f8a686bd203fe85a05bab85139f3c1971e", + "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/26c4c5cf30a2844ba121760fd7301f8ad240100b", + "reference": "26c4c5cf30a2844ba121760fd7301f8ad240100b", "shasum": "" }, "require": { - "paragonie/constant_time_encoding": "~1.0|~2.0", - "paragonie/random_compat": ">=1", - "php": ">=5.4", - "symfony/polyfill-php56": "~1.2" + "paragonie/constant_time_encoding": "^1.0|^2.0", + "php": "^7.1|^8.0" }, "require-dev": { - "phpunit/phpunit": "~4|~5|~6|~7|~8" + "phpstan/phpstan": "^0.12.18", + "phpunit/phpunit": "^7.5.15|^8.5|^9.0" }, "type": "library", - "extra": { - "component": "package", - "branch-alias": { - "dev-master": "2.0-dev" - } - }, "autoload": { "psr-4": { - "PragmaRX\\Google2FA\\": "src/", - "PragmaRX\\Google2FA\\Tests\\": "tests/" + "PragmaRX\\Google2FA\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2893,7 +2954,7 @@ "Two Factor Authentication", "google2fa" ], - "time": "2019-10-21T17:49:22+00:00" + "time": "2020-04-05T10:47:18+00:00" }, { "name": "pragmarx/google2fa-qrcode", @@ -3429,16 +3490,16 @@ }, { "name": "spatie/laravel-activitylog", - "version": "3.14.1", + "version": "3.14.2", "source": { "type": "git", "url": "https://github.com/spatie/laravel-activitylog.git", - "reference": "08a128edbfc96493f45d785381ab0be4479cd763" + "reference": "f1261c461ee4a92fd1e72012b516147ba28a91bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-activitylog/zipball/08a128edbfc96493f45d785381ab0be4479cd763", - "reference": "08a128edbfc96493f45d785381ab0be4479cd763", + "url": "https://api.github.com/repos/spatie/laravel-activitylog/zipball/f1261c461ee4a92fd1e72012b516147ba28a91bb", + "reference": "f1261c461ee4a92fd1e72012b516147ba28a91bb", "shasum": "" }, "require": { @@ -3505,22 +3566,26 @@ { "url": "https://spatie.be/open-source/support-us", "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" } ], - "time": "2020-03-23T17:09:07+00:00" + "time": "2020-05-19T14:31:33+00:00" }, { "name": "spatie/laravel-analytics", - "version": "3.9.0", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-analytics.git", - "reference": "77a5af95e468f9a4064ac6179dd03c5752081132" + "reference": "88f20f0a82dfb2263aca082df41011ce46128d69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-analytics/zipball/77a5af95e468f9a4064ac6179dd03c5752081132", - "reference": "77a5af95e468f9a4064ac6179dd03c5752081132", + "url": "https://api.github.com/repos/spatie/laravel-analytics/zipball/88f20f0a82dfb2263aca082df41011ce46128d69", + "reference": "88f20f0a82dfb2263aca082df41011ce46128d69", "shasum": "" }, "require": { @@ -3580,7 +3645,7 @@ "type": "custom" } ], - "time": "2020-03-03T13:11:12+00:00" + "time": "2020-06-26T07:32:16+00:00" }, { "name": "spatie/once", @@ -3699,23 +3764,24 @@ }, { "name": "symfony/cache", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "7c229da093cb0c630e5d16b99fd253e20f979ac2" + "reference": "787eb05e137ad74fa5e51857b9884719760c7b2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/7c229da093cb0c630e5d16b99fd253e20f979ac2", - "reference": "7c229da093cb0c630e5d16b99fd253e20f979ac2", + "url": "https://api.github.com/repos/symfony/cache/zipball/787eb05e137ad74fa5e51857b9884719760c7b2f", + "reference": "787eb05e137ad74fa5e51857b9884719760c7b2f", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/cache": "~1.0", "psr/log": "~1.0", "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" }, @@ -3732,9 +3798,9 @@ }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/cache": "~1.6", - "doctrine/dbal": "~2.5", - "predis/predis": "~1.1", + "doctrine/cache": "^1.6", + "doctrine/dbal": "^2.5|^3.0", + "predis/predis": "^1.1", "psr/simple-cache": "^1.0", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", @@ -3743,7 +3809,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -3788,24 +3854,24 @@ "type": "tidelift" } ], - "time": "2020-03-27T16:56:45+00:00" + "time": "2020-06-09T14:15:34+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.0.1", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16" + "reference": "87c92f62c494626598e9148208aaa6d1716b8e3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16", - "reference": "23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/87c92f62c494626598e9148208aaa6d1716b8e3c", + "reference": "87c92f62c494626598e9148208aaa6d1716b8e3c", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/cache": "^1.0" }, "suggest": { @@ -3814,7 +3880,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -3846,30 +3912,47 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "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-05-20T17:43:50+00:00" }, { "name": "symfony/console", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935" + "reference": "34ac555a3627e324b660e318daa07572e1140123" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", - "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", + "url": "https://api.github.com/repos/symfony/console/zipball/34ac555a3627e324b660e318daa07572e1140123", + "reference": "34ac555a3627e324b660e318daa07572e1140123", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1|^2" + "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" @@ -3895,7 +3978,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -3936,29 +4019,29 @@ "type": "tidelift" } ], - "time": "2020-03-30T11:42:42+00:00" + "time": "2020-06-15T12:59:21+00:00" }, { "name": "symfony/css-selector", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "5f8d5271303dad260692ba73dfa21777d38e124e" + "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/5f8d5271303dad260692ba73dfa21777d38e124e", - "reference": "5f8d5271303dad260692ba73dfa21777d38e124e", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/e544e24472d4c97b2d11ade7caacd446727c6bf9", + "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -4003,43 +4086,34 @@ "type": "tidelift" } ], - "time": "2020-03-27T16:56:45+00:00" + "time": "2020-05-20T17:43:50+00:00" }, { - "name": "symfony/error-handler", - "version": "v5.0.7", + "name": "symfony/deprecation-contracts", + "version": "v2.1.2", "source": { "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "949ffc17c3ac3a9f8e6232220e2da33913c04ea4" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/949ffc17c3ac3a9f8e6232220e2da33913c04ea4", - "reference": "949ffc17c3ac3a9f8e6232220e2da33913c04ea4", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", + "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", "shasum": "" }, "require": { - "php": "^7.2.5", - "psr/log": "^1.0", - "symfony/var-dumper": "^4.4|^5.0" - }, - "require-dev": { - "symfony/http-kernel": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "function.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4048,15 +4122,15 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony ErrorHandler Component", + "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "funding": [ { @@ -4072,55 +4146,42 @@ "type": "tidelift" } ], - "time": "2020-03-30T14:14:32+00:00" + "time": "2020-05-27T08:34:37+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v5.0.7", + "name": "symfony/error-handler", + "version": "v5.1.2", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc" + "url": "https://github.com/symfony/error-handler.git", + "reference": "7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/24f40d95385774ed5c71dbf014edd047e2f2f3dc", - "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896", + "reference": "7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/event-dispatcher-contracts": "^2" - }, - "conflict": { - "symfony/dependency-injection": "<4.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "php": ">=7.2.5", + "psr/log": "^1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/var-dumper": "^4.4|^5.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^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/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^4.4|^5.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/deprecation-contracts": "^2.1", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" + "Symfony\\Component\\ErrorHandler\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -4140,7 +4201,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", "funding": [ { @@ -4156,24 +4217,110 @@ "type": "tidelift" } ], - "time": "2020-03-27T16:56:45+00:00" + "time": "2020-05-30T20:35:19+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/cc0d059e2e997e79ca34125a52f3e33de4424ac7", + "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7", + "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/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", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "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", + "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-05-20T17:43:50+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.0.1", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "af23c2584d4577d54661c434446fb8fbed6025dd" + "reference": "405952c4e90941a17e52ef7489a2bd94870bb290" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd", - "reference": "af23c2584d4577d54661c434446fb8fbed6025dd", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/405952c4e90941a17e52ef7489a2bd94870bb290", + "reference": "405952c4e90941a17e52ef7489a2bd94870bb290", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/event-dispatcher": "^1" }, "suggest": { @@ -4182,7 +4329,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -4214,29 +4361,43 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "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-05-20T17:43:50+00:00" }, { "name": "symfony/finder", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d" + "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/600a52c29afc0d1caa74acbec8d3095ca7e9910d", - "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d", + "url": "https://api.github.com/repos/symfony/finder/zipball/4298870062bfc667cb78d2b379be4bf5dec5f187", + "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -4277,35 +4438,41 @@ "type": "tidelift" } ], - "time": "2020-03-27T16:56:45+00:00" + "time": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "26fb006a2c7b6cdd23d52157b05f8414ffa417b6" + "reference": "f93055171b847915225bd5b0a5792888419d8d75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/26fb006a2c7b6cdd23d52157b05f8414ffa417b6", - "reference": "26fb006a2c7b6cdd23d52157b05f8414ffa417b6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f93055171b847915225bd5b0a5792888419d8d75", + "reference": "f93055171b847915225bd5b0a5792888419d8d75", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/mime": "^4.4|^5.0", - "symfony/polyfill-mbstring": "~1.1" + "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/expression-language": "^4.4|^5.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", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -4346,35 +4513,38 @@ "type": "tidelift" } ], - "time": "2020-03-30T14:14:32+00:00" + "time": "2020-06-15T06:52:54+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ad574c55d451127cab1c45b4ac51bf283e340cf0" + "reference": "a18c27ace1ef344ffcb129a5b089bad7643b387a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ad574c55d451127cab1c45b4ac51bf283e340cf0", - "reference": "ad574c55d451127cab1c45b4ac51bf283e340cf0", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a18c27ace1ef344ffcb129a5b089bad7643b387a", + "reference": "a18c27ace1ef344ffcb129a5b089bad7643b387a", "shasum": "" }, "require": { - "php": "^7.2.5", + "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-foundation": "^4.4|^5.0", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9" + "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": "<4.4", "symfony/doctrine-bridge": "<5.0", "symfony/form": "<5.0", @@ -4415,7 +4585,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -4456,26 +4626,27 @@ "type": "tidelift" } ], - "time": "2020-03-30T15:04:59+00:00" + "time": "2020-06-15T13:51:38+00:00" }, { "name": "symfony/mime", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "481b7d6da88922fb1e0d86a943987722b08f3955" + "reference": "c0c418f05e727606e85b482a8591519c4712cf45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/481b7d6da88922fb1e0d86a943987722b08f3955", - "reference": "481b7d6da88922fb1e0d86a943987722b08f3955", + "url": "https://api.github.com/repos/symfony/mime/zipball/c0c418f05e727606e85b482a8591519c4712cf45", + "reference": "c0c418f05e727606e85b482a8591519c4712cf45", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/mailer": "<4.4" @@ -4487,7 +4658,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -4532,20 +4703,20 @@ "type": "tidelift" } ], - "time": "2020-03-27T16:56:45+00:00" + "time": "2020-06-09T15:07:35+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.15.0", + "version": "v1.17.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" + "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", + "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", "shasum": "" }, "require": { @@ -4557,7 +4728,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4604,20 +4779,20 @@ "type": "tidelift" } ], - "time": "2020-02-27T09:26:54+00:00" + "time": "2020-06-06T08:46:27+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.15.0", + "version": "v1.17.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8" + "reference": "ba6c9c18db36235b859cc29b8372d1c01298c035" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/ad6d62792bfbcfc385dd34b424d4fcf9712a32c8", - "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/ba6c9c18db36235b859cc29b8372d1c01298c035", + "reference": "ba6c9c18db36235b859cc29b8372d1c01298c035", "shasum": "" }, "require": { @@ -4629,7 +4804,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4677,20 +4856,98 @@ "type": "tidelift" } ], - "time": "2020-03-09T19:04:49+00:00" + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "6e4dbcf5e81eba86e36731f94fe56b1726835846" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/6e4dbcf5e81eba86e36731f94fe56b1726835846", + "reference": "6e4dbcf5e81eba86e36731f94fe56b1726835846", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-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" + ], + "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-06-06T08:46:27+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.15.0", + "version": "v1.17.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf" + "reference": "a57f8161502549a742a63c09f0a604997bf47027" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", - "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a57f8161502549a742a63c09f0a604997bf47027", + "reference": "a57f8161502549a742a63c09f0a604997bf47027", "shasum": "" }, "require": { @@ -4704,7 +4961,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4753,40 +5014,47 @@ "type": "tidelift" } ], - "time": "2020-03-09T19:04:49+00:00" + "time": "2020-06-06T08:46:27+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.15.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.17.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "40309d1700e8f72447bb9e7b54af756eeea35620" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/40309d1700e8f72447bb9e7b54af756eeea35620", + "reference": "40309d1700e8f72447bb9e7b54af756eeea35620", "shasum": "" }, "require": { "php": ">=5.3.3" }, "suggest": { - "ext-mbstring": "For best performance" + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, "files": [ "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4803,11 +5071,12 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", + "intl", + "normalizer", "polyfill", "portable", "shim" @@ -4826,35 +5095,41 @@ "type": "tidelift" } ], - "time": "2020-03-09T19:04:49+00:00" + "time": "2020-06-14T14:40:37+00:00" }, { - "name": "symfony/polyfill-php56", - "version": "v1.15.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.17.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "d51ec491c8ddceae7dca8dd6c7e30428f543f37d" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "7110338d81ce1cbc3e273136e4574663627037a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/d51ec491c8ddceae7dca8dd6c7e30428f543f37d", - "reference": "d51ec491c8ddceae7dca8dd6c7e30428f543f37d", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7110338d81ce1cbc3e273136e4574663627037a7", + "reference": "7110338d81ce1cbc3e273136e4574663627037a7", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php56\\": "" + "Symfony\\Polyfill\\Mbstring\\": "" }, "files": [ "bootstrap.php" @@ -4874,10 +5149,11 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "mbstring", "polyfill", "portable", "shim" @@ -4896,20 +5172,20 @@ "type": "tidelift" } ], - "time": "2020-03-09T19:04:49+00:00" + "time": "2020-06-06T08:46:27+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.15.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "37b0976c78b94856543260ce09b460a7bc852747" + "reference": "f048e612a3905f34931127360bdd2def19a5e582" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747", - "reference": "37b0976c78b94856543260ce09b460a7bc852747", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", + "reference": "f048e612a3905f34931127360bdd2def19a5e582", "shasum": "" }, "require": { @@ -4918,7 +5194,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -4965,20 +5241,20 @@ "type": "tidelift" } ], - "time": "2020-02-27T09:26:54+00:00" + "time": "2020-05-12T16:47:27+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.15.0", + "version": "v1.17.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7" + "reference": "fa0837fe02d617d31fbb25f990655861bb27bd1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", - "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fa0837fe02d617d31fbb25f990655861bb27bd1a", + "reference": "fa0837fe02d617d31fbb25f990655861bb27bd1a", "shasum": "" }, "require": { @@ -4987,7 +5263,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -5037,41 +5317,55 @@ "type": "tidelift" } ], - "time": "2020-02-27T09:26:54+00:00" + "time": "2020-06-06T08:46:27+00:00" }, { - "name": "symfony/polyfill-util", - "version": "v1.15.0", + "name": "symfony/polyfill-php80", + "version": "v1.17.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "d8e76c104127675d0ea3df3be0f2ae24a8619027" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/d8e76c104127675d0ea3df3be0f2ae24a8619027", - "reference": "d8e76c104127675d0ea3df3be0f2ae24a8619027", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4a5b6bba3259902e386eb80dd1956181ee90b5b2", + "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Util\\": "" - } + "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" @@ -5081,12 +5375,12 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony utilities for portability of PHP codes", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ - "compat", "compatibility", "polyfill", + "portable", "shim" ], "funding": [ @@ -5103,29 +5397,30 @@ "type": "tidelift" } ], - "time": "2020-03-02T11:55:35+00:00" + "time": "2020-06-06T08:46:27+00:00" }, { "name": "symfony/process", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "c5ca4a0fc16a0c888067d43fbcfe1f8a53d8e70e" + "reference": "7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c5ca4a0fc16a0c888067d43fbcfe1f8a53d8e70e", - "reference": "c5ca4a0fc16a0c888067d43fbcfe1f8a53d8e70e", + "url": "https://api.github.com/repos/symfony/process/zipball/7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1", + "reference": "7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -5166,24 +5461,26 @@ "type": "tidelift" } ], - "time": "2020-03-27T16:56:45+00:00" + "time": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/routing", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "d98a95d0a684caba47a47c1c50c602a669dc973b" + "reference": "bbd0ba121d623f66d165a55a108008968911f3eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/d98a95d0a684caba47a47c1c50c602a669dc973b", - "reference": "d98a95d0a684caba47a47c1c50c602a669dc973b", + "url": "https://api.github.com/repos/symfony/routing/zipball/bbd0ba121d623f66d165a55a108008968911f3eb", + "reference": "bbd0ba121d623f66d165a55a108008968911f3eb", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/config": "<5.0", @@ -5209,7 +5506,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -5256,24 +5553,24 @@ "type": "tidelift" } ], - "time": "2020-03-30T11:42:42+00:00" + "time": "2020-06-10T11:49:58+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.0.1", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "144c5e51266b281231e947b51223ba14acf1a749" + "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", - "reference": "144c5e51266b281231e947b51223ba14acf1a749", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/66a8f0957a3ca54e4f724e49028ab19d75a8918b", + "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/container": "^1.0" }, "suggest": { @@ -5282,7 +5579,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -5314,31 +5611,131 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "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-05-20T17:43:50+00:00" }, { - "name": "symfony/translation", - "version": "v5.0.7", + "name": "symfony/string", + "version": "v5.1.2", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "99b831770e10807dca0979518e2c89edffef5978" + "url": "https://github.com/symfony/string.git", + "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/99b831770e10807dca0979518e2c89edffef5978", - "reference": "99b831770e10807dca0979518e2c89edffef5978", + "url": "https://api.github.com/repos/symfony/string/zipball/ac70459db781108db7c6d8981dd31ce0e29e3298", + "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298", "shasum": "" }, "require": { - "php": "^7.2.5", + "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/translation-contracts": "^2" + "symfony/polyfill-php80": "~1.15" }, - "conflict": { - "symfony/config": "<4.4", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", + "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", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "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" + ], + "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-06-11T12:16:36+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2", + "reference": "d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^2" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", "symfony/twig-bundle": "<5.0", "symfony/yaml": "<4.4" }, @@ -5364,7 +5761,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -5405,24 +5802,24 @@ "type": "tidelift" } ], - "time": "2020-03-27T16:56:45+00:00" + "time": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.0.1", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed" + "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed", - "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e5ca07c8f817f865f618aa072c2fe8e0e637340e", + "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "suggest": { "symfony/translation-implementation": "" @@ -5430,7 +5827,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -5462,25 +5859,40 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "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-05-20T17:43:50+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "f74a126acd701392eef2492a17228d42552c86b5" + "reference": "46a942903059b0b05e601f00eb64179e05578c0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f74a126acd701392eef2492a17228d42552c86b5", - "reference": "f74a126acd701392eef2492a17228d42552c86b5", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/46a942903059b0b05e601f00eb64179e05578c0f", + "reference": "46a942903059b0b05e601f00eb64179e05578c0f", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "phpunit/phpunit": "<5.4.3", @@ -5503,7 +5915,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -5551,32 +5963,33 @@ "type": "tidelift" } ], - "time": "2020-03-27T16:56:45+00:00" + "time": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "ffd29a70370e466343e33154b5df197a07a13afa" + "reference": "eabaabfe1485ca955c5b53307eade15ccda57a15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/ffd29a70370e466343e33154b5df197a07a13afa", - "reference": "ffd29a70370e466343e33154b5df197a07a13afa", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/eabaabfe1485ca955c5b53307eade15ccda57a15", + "reference": "eabaabfe1485ca955c5b53307eade15ccda57a15", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "symfony/var-dumper": "^4.4|^5.0" + "symfony/var-dumper": "^4.4.9|^5.0.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -5625,7 +6038,7 @@ "type": "tidelift" } ], - "time": "2020-03-27T16:56:45+00:00" + "time": "2020-06-07T15:42:22+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -5678,28 +6091,28 @@ }, { "name": "vlucas/phpdotenv", - "version": "v4.1.3", + "version": "v4.1.7", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "88f7acc95150bca002a498899f8b52f318e444c2" + "reference": "db63b2ea280fdcf13c4ca392121b0b2450b51193" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/88f7acc95150bca002a498899f8b52f318e444c2", - "reference": "88f7acc95150bca002a498899f8b52f318e444c2", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/db63b2ea280fdcf13c4ca392121b0b2450b51193", + "reference": "db63b2ea280fdcf13c4ca392121b0b2450b51193", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0", - "phpoption/phpoption": "^1.7.2", - "symfony/polyfill-ctype": "^1.9" + "php": "^5.5.9 || ^7.0 || ^8.0", + "phpoption/phpoption": "^1.7.3", + "symfony/polyfill-ctype": "^1.16" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.3", + "bamarni/composer-bin-plugin": "^1.4.1", "ext-filter": "*", "ext-pcre": "*", - "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0" }, "suggest": { "ext-filter": "Required to use the boolean validator.", @@ -5739,25 +6152,29 @@ "environment" ], "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", "type": "tidelift" } ], - "time": "2020-03-27T23:37:15+00:00" + "time": "2020-06-07T18:25:35+00:00" }, { "name": "voku/portable-ascii", - "version": "1.4.10", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "240e93829a5f985fab0984a6e55ae5e26b78a334" + "reference": "618631dc601d8eb6ea0a9fbf654ec82f066c4e97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/240e93829a5f985fab0984a6e55ae5e26b78a334", - "reference": "240e93829a5f985fab0984a6e55ae5e26b78a334", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/618631dc601d8eb6ea0a9fbf654ec82f066c4e97", + "reference": "618631dc601d8eb6ea0a9fbf654ec82f066c4e97", "shasum": "" }, "require": { @@ -5772,8 +6189,7 @@ "type": "library", "autoload": { "psr-4": { - "voku\\": "src/voku/", - "voku\\tests\\": "tests/" + "voku\\": "src/voku/" } }, "notification-url": "https://packagist.org/downloads/", @@ -5811,7 +6227,7 @@ "type": "tidelift" } ], - "time": "2020-03-13T01:23:26+00:00" + "time": "2020-06-15T23:49:30+00:00" } ], "packages-dev": [ @@ -5878,16 +6294,16 @@ }, { "name": "composer/xdebug-handler", - "version": "1.4.1", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7" + "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/1ab9842d69e64fb3a01be6b656501032d1b78cb7", - "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51", + "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51", "shasum": "" }, "require": { @@ -5922,27 +6338,36 @@ { "url": "https://packagist.com", "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2020-03-01T12:26:26+00:00" + "time": "2020-06-04T11:16:35+00:00" }, { "name": "doctrine/annotations", - "version": "v1.8.0", + "version": "1.10.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc" + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/904dca4eb10715b92569fbcd79e201d5c349b6bc", - "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d", + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d", "shasum": "" }, "require": { "doctrine/lexer": "1.*", - "php": "^7.1" + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/cache": "1.*", @@ -5951,7 +6376,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7.x-dev" + "dev-master": "1.9.x-dev" } }, "autoload": { @@ -5992,24 +6417,24 @@ "docblock", "parser" ], - "time": "2019-10-01T18:55:10+00:00" + "time": "2020-05-25T17:24:27+00:00" }, { "name": "doctrine/instantiator", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -6048,20 +6473,139 @@ "constructor", "instantiate" ], - "time": "2019-10-21T16:45:58+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-05-29T17:27:14+00:00" + }, + { + "name": "facade/ignition-contracts", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "f445db0fb86f48e205787b2592840dd9c80ded28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/f445db0fb86f48e205787b2592840dd9c80ded28", + "reference": "f445db0fb86f48e205787b2592840dd9c80ded28", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "time": "2019-08-30T14:06:08+00:00" + }, + { + "name": "filp/whoops", + "version": "2.7.3", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/5d5fe9bb3d656b514d455645b3addc5f7ba7714d", + "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0", + "psr/log": "^1.0.1" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "time": "2020-06-14T09:00:00+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v2.16.1", + "version": "v2.16.4", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "c8afb599858876e95e8ebfcd97812d383fa23f02" + "reference": "1023c3458137ab052f6ff1e09621a721bfdeca13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/c8afb599858876e95e8ebfcd97812d383fa23f02", - "reference": "c8afb599858876e95e8ebfcd97812d383fa23f02", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/1023c3458137ab052f6ff1e09621a721bfdeca13", + "reference": "1023c3458137ab052f6ff1e09621a721bfdeca13", "shasum": "" }, "require": { @@ -6093,11 +6637,12 @@ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.1", "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.1", "phpunitgoodpractices/traits": "^1.8", - "symfony/phpunit-bridge": "^4.3 || ^5.0", + "symfony/phpunit-bridge": "^5.1", "symfony/yaml": "^3.0 || ^4.0 || ^5.0" }, "suggest": { - "ext-mbstring": "For handling non-UTF8 characters in cache signature.", + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters.", "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." @@ -6119,6 +6664,7 @@ "tests/Test/IntegrationCaseFactory.php", "tests/Test/IntegrationCaseFactoryInterface.php", "tests/Test/InternalIntegrationCaseFactory.php", + "tests/Test/IsIdenticalConstraint.php", "tests/TestCase.php" ] }, @@ -6137,7 +6683,13 @@ } ], "description": "A tool to automatically fix PHP code style", - "time": "2019-11-25T22:10:32+00:00" + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2020-06-27T23:57:46+00:00" }, { "name": "fzaninotto/faker", @@ -6298,30 +6850,33 @@ }, { "name": "mockery/mockery", - "version": "1.3.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be" + "reference": "6c6a7c533469873deacf998237e7649fc6b36223" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", - "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", + "url": "https://api.github.com/repos/mockery/mockery/zipball/6c6a7c533469873deacf998237e7649fc6b36223", + "reference": "6c6a7c533469873deacf998237e7649fc6b36223", "shasum": "" }, "require": { "hamcrest/hamcrest-php": "~2.0", "lib-pcre": ">=7.0", - "php": ">=5.6.0" + "php": "^7.3.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0" + "phpunit/phpunit": "^8.0.0 || ^9.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { @@ -6359,24 +6914,24 @@ "test double", "testing" ], - "time": "2019-12-26T09:49:15+00:00" + "time": "2020-05-19T14:25:16+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.9.5", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", - "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "replace": { "myclabs/deep-copy": "self.version" @@ -6407,33 +6962,57 @@ "object", "object graph" ], - "time": "2020-01-17T21:11:47+00:00" + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-06-29T13:22:24+00:00" }, { - "name": "orchestra/testbench", - "version": "v5.1.0", + "name": "nunomaduro/collision", + "version": "v4.2.0", "source": { "type": "git", - "url": "https://github.com/orchestral/testbench.git", - "reference": "e36bdb5fc599495f46a8b2fd3a5e6ffed044e095" + "url": "https://github.com/nunomaduro/collision.git", + "reference": "d50490417eded97be300a92cd7df7badc37a9018" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/e36bdb5fc599495f46a8b2fd3a5e6ffed044e095", - "reference": "e36bdb5fc599495f46a8b2fd3a5e6ffed044e095", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/d50490417eded97be300a92cd7df7badc37a9018", + "reference": "d50490417eded97be300a92cd7df7badc37a9018", "shasum": "" }, "require": { - "laravel/framework": "^7.1", - "mockery/mockery": "^1.3.1", - "orchestra/testbench-core": "^5.1", - "php": ">=7.2.5", - "phpunit/phpunit": "^8.4 || ^9.0" + "facade/ignition-contracts": "^1.0", + "filp/whoops": "^2.4", + "php": "^7.2.5", + "symfony/console": "^5.0" + }, + "require-dev": { + "facade/ignition": "^2.0", + "fideloper/proxy": "^4.2", + "friendsofphp/php-cs-fixer": "^2.16", + "fruitcake/laravel-cors": "^1.0", + "laravel/framework": "^7.0", + "laravel/tinker": "^2.0", + "nunomaduro/larastan": "^0.5", + "orchestra/testbench": "^5.0", + "phpstan/phpstan": "^0.12.3", + "phpunit/phpunit": "^8.5.1 || ^9.0" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "6.0-dev" + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6442,45 +7021,111 @@ ], "authors": [ { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "Laravel Testing Helper for Packages Development", - "homepage": "http://orchestraplatform.com/docs/latest/components/testbench/", + "description": "Cli error handling for console/command-line PHP applications.", "keywords": [ - "BDD", - "TDD", + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", "laravel", - "orchestra-platform", - "orchestral", - "testing" + "laravel-zero", + "php", + "symfony" ], "funding": [ { - "url": "https://paypal.me/crynobone", + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", "type": "custom" }, { - "url": "https://www.patreon.com/crynobone", + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", "type": "patreon" } ], - "time": "2020-03-10T17:14:11+00:00" + "time": "2020-04-04T19:56:08+00:00" }, { - "name": "orchestra/testbench-core", - "version": "v5.1.2", + "name": "orchestra/testbench", + "version": "v5.3.0", "source": { "type": "git", - "url": "https://github.com/orchestral/testbench-core.git", - "reference": "ca909601ac743dbdf6807608bcb33e78a0c3f80a" + "url": "https://github.com/orchestral/testbench.git", + "reference": "57129325ae77e9e3fa6a577b4c3544398af1620e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/ca909601ac743dbdf6807608bcb33e78a0c3f80a", - "reference": "ca909601ac743dbdf6807608bcb33e78a0c3f80a", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/57129325ae77e9e3fa6a577b4c3544398af1620e", + "reference": "57129325ae77e9e3fa6a577b4c3544398af1620e", + "shasum": "" + }, + "require": { + "laravel/framework": "^7.10", + "mockery/mockery": "^1.3.1", + "orchestra/testbench-core": "^5.1.4", + "php": ">=7.2.5", + "phpunit/phpunit": "^8.4 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.0-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com", + "homepage": "https://github.com/crynobone" + } + ], + "description": "Laravel Testing Helper for Packages Development", + "homepage": "http://orchestraplatform.com/docs/latest/components/testbench/", + "keywords": [ + "BDD", + "TDD", + "laravel", + "orchestra-platform", + "orchestral", + "testing" + ], + "funding": [ + { + "url": "https://paypal.me/crynobone", + "type": "custom" + }, + { + "url": "https://www.patreon.com/crynobone", + "type": "patreon" + } + ], + "time": "2020-05-30T01:04:58+00:00" + }, + { + "name": "orchestra/testbench-core", + "version": "v5.1.4", + "source": { + "type": "git", + "url": "https://github.com/orchestral/testbench-core.git", + "reference": "41ebd765f5b3f1aba366cc6b2f5b3856a1715519" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/41ebd765f5b3f1aba366cc6b2f5b3856a1715519", + "reference": "41ebd765f5b3f1aba366cc6b2f5b3856a1715519", "shasum": "" }, "require": { @@ -6543,7 +7188,52 @@ "type": "patreon" } ], - "time": "2020-03-31T01:45:21+00:00" + "time": "2020-05-02T13:35:10+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "time": "2018-07-02T15:55:56+00:00" }, { "name": "phar-io/manifest", @@ -6700,28 +7390,25 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "2.0.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~6" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -6748,7 +7435,7 @@ "reflection", "static analysis" ], - "time": "2018-08-07T13:53:10+00:00" + "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", @@ -6805,30 +7492,29 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.1.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", "shasum": "" }, "require": { - "php": "^7.2", + "php": "^7.2 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "^7.2", - "mockery/mockery": "~1" + "ext-tokenizer": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { @@ -6847,7 +7533,7 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-02-18T18:59:58+00:00" + "time": "2020-06-27T10:12:23+00:00" }, { "name": "phpspec/prophecy", @@ -6914,40 +7600,41 @@ }, { "name": "phpunit/php-code-coverage", - "version": "7.0.10", + "version": "8.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf" + "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf", - "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca6647ffddd2add025ab3f21644a441d7c146cdc", + "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.2", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.1.1", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^4.2.2", - "sebastian/version": "^2.0.1", + "php": "^7.3", + "phpunit/php-file-iterator": "^3.0", + "phpunit/php-text-template": "^2.0", + "phpunit/php-token-stream": "^4.0", + "sebastian/code-unit-reverse-lookup": "^2.0", + "sebastian/environment": "^5.0", + "sebastian/version": "^3.0", "theseer/tokenizer": "^1.1.3" }, "require-dev": { - "phpunit/phpunit": "^8.2.2" + "phpunit/phpunit": "^9.0" }, "suggest": { - "ext-xdebug": "^2.7.2" + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-master": "8.0-dev" } }, "autoload": { @@ -6973,32 +7660,38 @@ "testing", "xunit" ], - "time": "2019-11-20T13:55:58+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-05-23T08:02:54+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.2", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "050bedf145a257b1ff02746c31894800e5122946" + "reference": "8e282e5f5e2db5fb2271b3962ad69875c34a6f41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", - "reference": "050bedf145a257b1ff02746c31894800e5122946", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/8e282e5f5e2db5fb2271b3962ad69875c34a6f41", + "reference": "8e282e5f5e2db5fb2271b3962ad69875c34a6f41", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -7023,26 +7716,99 @@ "filesystem", "iterator" ], - "time": "2018-09-13T20:33:42+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:50:37+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f6eedfed1085dd1f4c599629459a0277d25f9a66", + "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:53:53+00:00" }, { "name": "phpunit/php-text-template", - "version": "1.2.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", + "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -7064,32 +7830,38 @@ "keywords": [ "template" ], - "time": "2015-06-21T13:50:34+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:55:37+00:00" }, { "name": "phpunit/php-timer", - "version": "2.1.2", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/cc49734779cbb302bf51a44297dab8c4bbf941e7", + "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -7113,33 +7885,39 @@ "keywords": [ "timer" ], - "time": "2019-06-07T04:22:29+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:58:13+00:00" }, { "name": "phpunit/php-token-stream", - "version": "3.1.1", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/5672711b6b07b14d5ab694e700c62eeb82fcf374", + "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.1" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -7162,20 +7940,26 @@ "keywords": [ "tokenizer" ], - "time": "2019-09-17T06:23:10+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-27T06:36:25+00:00" }, { "name": "phpunit/phpunit", - "version": "8.5.3", + "version": "9.2.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "67750516bc02f300e2742fed2f50177f8f37bedf" + "reference": "ad7cc5ec3ab2597b329880e30442d9054526023b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/67750516bc02f300e2742fed2f50177f8f37bedf", - "reference": "67750516bc02f300e2742fed2f50177f8f37bedf", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ad7cc5ec3ab2597b329880e30442d9054526023b", + "reference": "ad7cc5ec3ab2597b329880e30442d9054526023b", "shasum": "" }, "require": { @@ -7189,29 +7973,31 @@ "myclabs/deep-copy": "^1.9.1", "phar-io/manifest": "^1.0.3", "phar-io/version": "^2.0.1", - "php": "^7.2", + "php": "^7.3", "phpspec/prophecy": "^1.8.1", - "phpunit/php-code-coverage": "^7.0.7", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1.2", - "sebastian/comparator": "^3.0.2", - "sebastian/diff": "^3.0.2", - "sebastian/environment": "^4.2.2", - "sebastian/exporter": "^3.1.1", - "sebastian/global-state": "^3.0.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0.1", - "sebastian/type": "^1.1.3", - "sebastian/version": "^2.0.1" + "phpunit/php-code-coverage": "^8.0.1", + "phpunit/php-file-iterator": "^3.0", + "phpunit/php-invoker": "^3.0", + "phpunit/php-text-template": "^2.0", + "phpunit/php-timer": "^5.0", + "sebastian/code-unit": "^1.0.2", + "sebastian/comparator": "^4.0", + "sebastian/diff": "^4.0", + "sebastian/environment": "^5.0.1", + "sebastian/exporter": "^4.0", + "sebastian/global-state": "^4.0", + "sebastian/object-enumerator": "^4.0", + "sebastian/resource-operations": "^3.0", + "sebastian/type": "^2.1", + "sebastian/version": "^3.0" }, "require-dev": { - "ext-pdo": "*" + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0" }, "suggest": { "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0.0" + "ext-xdebug": "*" }, "bin": [ "phpunit" @@ -7219,12 +8005,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "8.5-dev" + "dev-master": "9.2-dev" } }, "autoload": { "classmap": [ "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -7255,32 +8044,84 @@ "type": "github" } ], - "time": "2020-03-31T08:52:04+00:00" + "time": "2020-06-22T07:10:55+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "c1e2df332c905079980b119c4db103117e5e5c90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/c1e2df332c905079980b119c4db103117e5e5c90", + "reference": "c1e2df332c905079980b119c4db103117e5e5c90", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:50:45+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ee51f9bb0c6d8a43337055db3120829fa14da819", + "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -7300,34 +8141,40 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:04:00+00:00" }, { "name": "sebastian/comparator", - "version": "3.0.2", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", + "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", "shasum": "" }, "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "php": "^7.3 || ^8.0", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -7340,6 +8187,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -7351,10 +8202,6 @@ { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", @@ -7364,33 +8211,39 @@ "compare", "equality" ], - "time": "2018-07-12T15:12:46+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:05:46+00:00" }, { "name": "sebastian/diff", - "version": "3.0.2", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", + "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^9.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -7403,13 +8256,13 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", @@ -7420,27 +8273,33 @@ "unidiff", "unified diff" ], - "time": "2019-02-04T06:01:07+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-30T04:46:02+00:00" }, { "name": "sebastian/environment", - "version": "4.2.3", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", + "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^9.0" }, "suggest": { "ext-posix": "*" @@ -7448,7 +8307,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -7473,34 +8332,40 @@ "environment", "hhvm" ], - "time": "2019-11-20T08:46:58+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:07:24+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.2", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + "reference": "571d721db4aec847a0e59690b954af33ebf9f023" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/571d721db4aec847a0e59690b954af33ebf9f023", + "reference": "571d721db4aec847a0e59690b954af33ebf9f023", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" + "php": "^7.3 || ^8.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -7540,30 +8405,36 @@ "export", "exporter" ], - "time": "2019-09-14T09:02:43+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:08:55+00:00" }, { "name": "sebastian/global-state", - "version": "3.0.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" + "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", - "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bdb1e7c79e592b8c82cb1699be3c8743119b8a72", + "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72", "shasum": "" }, "require": { - "php": "^7.2", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": "^7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^8.0" + "phpunit/phpunit": "^9.0" }, "suggest": { "ext-uopz": "*" @@ -7571,7 +8442,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -7594,34 +8465,34 @@ "keywords": [ "global state" ], - "time": "2019-02-01T05:30:01+00:00" + "time": "2020-02-07T06:11:37+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.3", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/074fed2d0a6d08e1677dd8ce9d32aecb384917b8", + "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": "^7.3 || ^8.0", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -7641,32 +8512,38 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:11:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "1.1.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" + "reference": "127a46f6b057441b201253526f81d5406d6c7840" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/127a46f6b057441b201253526f81d5406d6c7840", + "reference": "127a46f6b057441b201253526f81d5406d6c7840", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -7686,32 +8563,38 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:12:55+00:00" }, { "name": "sebastian/recursion-context", - "version": "3.0.0", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/062231bf61d2b9448c4fa5a7643b5e1829c11d63", + "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -7724,14 +8607,14 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, { "name": "Adam Harvey", "email": "aharvey@php.net" @@ -7739,29 +8622,38 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:14:17+00:00" }, { "name": "sebastian/resource-operations", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + "reference": "0653718a5a629b065e91f774595267f8dc32e213" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0653718a5a629b065e91f774595267f8dc32e213", + "reference": "0653718a5a629b065e91f774595267f8dc32e213", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -7781,32 +8673,38 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2018-10-04T04:07:39+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:16:22+00:00" }, { "name": "sebastian/type", - "version": "1.1.3", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" + "reference": "56b3ba194e0cbaaf3de7ccd353c289d7a84ed022" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", - "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/56b3ba194e0cbaaf3de7ccd353c289d7a84ed022", + "reference": "56b3ba194e0cbaaf3de7ccd353c289d7a84ed022", "shasum": "" }, "require": { - "php": "^7.2" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^8.2" + "phpunit/phpunit": "^9.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -7827,29 +8725,35 @@ ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", - "time": "2019-07-02T08:10:15+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:17:54+00:00" }, { "name": "sebastian/version", - "version": "2.0.1", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "reference": "626586115d0ed31cb71483be55beb759b5af5a3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/626586115d0ed31cb71483be55beb759b5af5a3c", + "reference": "626586115d0ed31cb71483be55beb759b5af5a3c", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^7.3 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -7870,30 +8774,36 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:18:43+00:00" }, { "name": "symfony/filesystem", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "ca3b87dd09fff9b771731637f5379965fbfab420" + "reference": "6e4320f06d5f2cce0d96530162491f4465179157" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/ca3b87dd09fff9b771731637f5379965fbfab420", - "reference": "ca3b87dd09fff9b771731637f5379965fbfab420", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/6e4320f06d5f2cce0d96530162491f4465179157", + "reference": "6e4320f06d5f2cce0d96530162491f4465179157", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -7934,29 +8844,31 @@ "type": "tidelift" } ], - "time": "2020-03-27T16:56:45+00:00" + "time": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "09dccfffd24b311df7f184aa80ee7b61ad61ed8d" + "reference": "663f5dd5e14057d1954fe721f9709d35837f2447" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/09dccfffd24b311df7f184aa80ee7b61ad61ed8d", - "reference": "09dccfffd24b311df7f184aa80ee7b61ad61ed8d", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/663f5dd5e14057d1954fe721f9709d35837f2447", + "reference": "663f5dd5e14057d1954fe721f9709d35837f2447", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -8002,20 +8914,20 @@ "type": "tidelift" } ], - "time": "2020-03-27T16:56:45+00:00" + "time": "2020-05-23T13:08:13+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.15.0", + "version": "v1.17.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "2a18e37a489803559284416df58c71ccebe50bf0" + "reference": "471b096aede7025bace8eb356b9ac801aaba7e2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/2a18e37a489803559284416df58c71ccebe50bf0", - "reference": "2a18e37a489803559284416df58c71ccebe50bf0", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/471b096aede7025bace8eb356b9ac801aaba7e2d", + "reference": "471b096aede7025bace8eb356b9ac801aaba7e2d", "shasum": "" }, "require": { @@ -8025,7 +8937,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -8061,30 +8977,44 @@ "portable", "shim" ], - "time": "2020-02-27T09:26:54+00:00" + "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-06-06T08:46:27+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.0.7", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "a1d86d30d4522423afc998f32404efa34fcf5a73" + "reference": "0f7c58cf81dbb5dd67d423a89d577524a2ec0323" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a1d86d30d4522423afc998f32404efa34fcf5a73", - "reference": "a1d86d30d4522423afc998f32404efa34fcf5a73", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0f7c58cf81dbb5dd67d423a89d577524a2ec0323", + "reference": "0f7c58cf81dbb5dd67d423a89d577524a2ec0323", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/service-contracts": "^1.0|^2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -8125,7 +9055,7 @@ "type": "tidelift" } ], - "time": "2020-03-27T16:56:45+00:00" + "time": "2020-05-20T17:43:50+00:00" }, { "name": "theseer/tokenizer", @@ -8169,16 +9099,16 @@ }, { "name": "webmozart/assert", - "version": "1.7.0", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "aed98a490f9a8f78468232db345ab9cf606cf598" + "reference": "9dc4f203e36f2b486149058bade43c851dd97451" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598", - "reference": "aed98a490f9a8f78468232db345ab9cf606cf598", + "url": "https://api.github.com/repos/webmozart/assert/zipball/9dc4f203e36f2b486149058bade43c851dd97451", + "reference": "9dc4f203e36f2b486149058bade43c851dd97451", "shasum": "" }, "require": { @@ -8186,7 +9116,8 @@ "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "vimeo/psalm": "<3.6.0" + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" }, "require-dev": { "phpunit/phpunit": "^4.8.36 || ^7.5.13" @@ -8213,7 +9144,7 @@ "check", "validate" ], - "time": "2020-02-14T12:15:55+00:00" + "time": "2020-06-16T10:16:42+00:00" } ], "aliases": [], diff --git a/config/blocks.php b/config/blocks.php index a5ee646bc..80eb050ee 100644 --- a/config/blocks.php +++ b/config/blocks.php @@ -19,18 +19,7 @@ // When setting to false, make sure to build Twill with your all your custom blocks. 'inline_blocks_templates' => true, 'custom_vue_blocks_resource_path' => 'assets/js/blocks', - 'blocks' => [ - 'text' => [ - 'title' => 'Body text', - 'icon' => 'text', - 'component' => 'a17-block-wysiwyg', - ], - 'image' => [ - 'title' => 'Image', - 'icon' => 'image', - 'component' => 'a17-block-image', - ], - ], + 'use_twill_blocks' => ['text', 'image'], 'crops' => [ 'image' => [ 'desktop' => [ @@ -66,4 +55,43 @@ ], ], 'repeaters' => [], + + 'directories' => [ + 'source' => [ + 'blocks' => [ + [ + 'path' => base_path('vendor/area17/twill/src/Commands/stubs/blocks'), + 'source' => A17\Twill\Services\Blocks\Block::SOURCE_TWILL, + ], + [ + 'path' => resource_path('views/admin/blocks'), + 'source' => A17\Twill\Services\Blocks\Block::SOURCE_APP, + ], + ], + + 'repeaters' => [ + [ + 'path' => resource_path('views/admin/repeaters'), + 'source' => A17\Twill\Services\Blocks\Block::SOURCE_APP, + ], + [ + 'path' => base_path('vendor/area17/twill/src/Commands/stubs/repeaters'), + 'source' => A17\Twill\Services\Blocks\Block::SOURCE_TWILL, + ], + ], + + 'icons' => [ + base_path('vendor/area17/twill/frontend/icons'), + resource_path('views/admin/icons'), + ], + ], + + 'destination' => [ + 'make_dir' => true, + + 'blocks' => resource_path('views/admin/blocks'), + + 'repeaters' => resource_path('views/admin/repeaters'), + ], + ], ]; diff --git a/frontend/js/components/blocks/BlockImage.vue b/frontend/js/components/blocks/BlockImage.vue index 86cb98255..5d8b5be4d 100755 --- a/frontend/js/components/blocks/BlockImage.vue +++ b/frontend/js/components/blocks/BlockImage.vue @@ -1,6 +1,8 @@ diff --git a/phpunit-7.1.xml b/phpunit-7.1.xml new file mode 100644 index 000000000..9da3b5121 --- /dev/null +++ b/phpunit-7.1.xml @@ -0,0 +1,66 @@ + + + + + + + + ./tests + + + + + ./src + + ./tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/phpunit.xml b/phpunit.xml index 87a234d24..5a24777e2 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -6,6 +6,7 @@ convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" + printerClass="NunoMaduro\Collision\Adapters\Phpunit\Printer" processIsolation="false" stopOnError="false" stopOnFailure="false" @@ -17,8 +18,11 @@ - + ./src + + ./tests + diff --git a/routes/admin.php b/routes/admin.php index 7e6fdfae9..f953a14d0 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -63,3 +63,5 @@ if (config('twill.enabled.search')) { Route::name('search')->get('search', 'DashboardController@search'); } + +Route::name('icons.show')->get('/admin/icons/{file}', 'IconsController@show'); diff --git a/src/Commands/BlockMake.php b/src/Commands/BlockMake.php new file mode 100644 index 000000000..308085967 --- /dev/null +++ b/src/Commands/BlockMake.php @@ -0,0 +1,67 @@ +blockMaker = $blockMaker; + } + + /** + * @return \A17\Twill\Services\Blocks\BlockMaker + */ + public function getBlockMaker(): \A17\Twill\Services\Blocks\BlockMaker + { + return $this->blockMaker; + } + + /** + * Executes the console command. + * + * @return mixed + * @throws \Exception + */ + public function handle() + { + $this->blockMaker + ->setCommand($this) + ->make( + $this->argument('name'), + $this->argument('base') ?? 'text', + $this->argument('icon') ?? 'text' + ); + + return parent::handle(); + } +} diff --git a/src/Commands/Build.php b/src/Commands/Build.php index be6041384..e993cf08a 100644 --- a/src/Commands/Build.php +++ b/src/Commands/Build.php @@ -2,7 +2,6 @@ namespace A17\Twill\Commands; -use Illuminate\Console\Command; use Illuminate\Filesystem\Filesystem; use Symfony\Component\Process\Process; diff --git a/src/Commands/Command.php b/src/Commands/Command.php new file mode 100644 index 000000000..feca184dd --- /dev/null +++ b/src/Commands/Command.php @@ -0,0 +1,32 @@ +exitCode = 1; + } + + call_user_func_array([$this, $method], $parameters); + } + } + + /** + * Executes the console command. + */ + public function handle() + { + return $this->exitCode; + } +} diff --git a/src/Commands/CreateSuperAdmin.php b/src/Commands/CreateSuperAdmin.php index 257d99562..33a97211b 100644 --- a/src/Commands/CreateSuperAdmin.php +++ b/src/Commands/CreateSuperAdmin.php @@ -5,7 +5,6 @@ use A17\Twill\Models\User; use Illuminate\Support\Facades\Hash; use Illuminate\Config\Repository as Config; -use Illuminate\Console\Command; use Illuminate\Validation\Factory as ValidatorFactory; class CreateSuperAdmin extends Command diff --git a/src/Commands/Dev.php b/src/Commands/Dev.php index d5fdda99d..6d28c960f 100644 --- a/src/Commands/Dev.php +++ b/src/Commands/Dev.php @@ -2,8 +2,6 @@ namespace A17\Twill\Commands; -use Illuminate\Console\Command; - class Dev extends Command { /** diff --git a/src/Commands/Install.php b/src/Commands/Install.php index 8b8acf532..2b8064a14 100644 --- a/src/Commands/Install.php +++ b/src/Commands/Install.php @@ -2,7 +2,6 @@ namespace A17\Twill\Commands; -use Illuminate\Console\Command; use Illuminate\Database\DatabaseManager; use Illuminate\Filesystem\Filesystem; diff --git a/src/Commands/ListBlocks.php b/src/Commands/ListBlocks.php new file mode 100644 index 000000000..ee0661f42 --- /dev/null +++ b/src/Commands/ListBlocks.php @@ -0,0 +1,166 @@ +blockCollection = $blockCollection; + } + + protected function displayMissingDirectories(): void + { + $this->blockCollection + ->getMissingDirectories() + ->each(function ($directory) { + $this->error("Directory not found: {$directory}"); + }); + } + + /** + * @param \Illuminate\Support\Collection $blockCollection + * @return mixed + */ + protected function generateHeaders($blockCollection) + { + return $blockCollection + ->first() + ->keys() + ->map(function ($key) { + return Str::studly($key); + }) + ->toArray(); + } + + /** + * @return \Illuminate\Support\Collection + */ + protected function getBlocks() + { + $sourceFiltered = + $this->option('twill') || + $this->option('custom') || + $this->option('app'); + + $typeFiltered = $this->option('blocks') || $this->option('repeaters'); + + return $this->blockCollection + ->collect() + ->reject(function (Block $block) use ($sourceFiltered) { + return $sourceFiltered && !$this->option($block->source); + }) + ->reject(function (Block $block) use ($typeFiltered) { + return $this->dontPassTextFilter($block) || + ($typeFiltered && + !$this->option(Str::plural($block->type))); + }) + ->map(function (Block $block) { + return $this->colorize( + $this->option('short') ? $block->toShortList() : $block->toList() + ); + }) + ->sortBy(function ($block) { + return [$block['group'], $block['title']]; + }); + } + + /** + * @return \A17\Twill\Services\Blocks\BlockCollection + */ + public function getBlockCollection() + { + return $this->blockCollection; + } + + /** + * Executes the console command. + * + * @return void + */ + public function handle() + { + $blockCollection = $this->getBlocks(); + + $this->displayMissingDirectories(); + + if ($blockCollection->isEmpty()) { + $this->error('No blocks found.'); + + return; + } + + $this->table( + $this->generateHeaders($blockCollection), + $blockCollection->toArray() + ); + } + + /** + * @param $block + * @return mixed + */ + public function colorize($block) + { + $color = $block['type'] === 'repeater' ? 'green' : 'yellow'; + + $block['type'] = "{$block['type']}"; + + return $block; + } + + /** + * @param \A17\Twill\Services\Blocks\Block $block + * @return bool + */ + public function dontPassTextFilter(Block $block) + { + if (filled($filter = $this->argument('filter'))) { + return !$block + ->toList() + ->reduce(function ($keep, $element) use ($filter) { + return $keep || + Str::contains( + Str::lower($element), + Str::lower($filter) + ); + }, false); + } + + return false; + } +} diff --git a/src/Commands/ListIcons.php b/src/Commands/ListIcons.php new file mode 100644 index 000000000..ebffcc711 --- /dev/null +++ b/src/Commands/ListIcons.php @@ -0,0 +1,103 @@ +files = $files; + $this->config = $config; + } + + private function isAllowed($icon) + { + if (filled($filter = $this->argument('filter'))) { + return Str::contains( + Str::lower($icon['name']), + Str::lower($filter) + ); + } + + return true; + } + + /** + * @return \Illuminate\Support\Collection + */ + protected function getIconList() + { + return collect( + config('twill.block_editor.directories.source.icons') + )->reduce(function (Collection $keep, $path) { + if (!$this->files->exists($path)) { + $this->displayError("Directory not found: {$path}"); + + return $keep; + } + + $files = collect($this->files->files($path))->map(function ( + SplFileInfo $file + ) { + return [ + 'name' => Str::before($file->getFilename(), '.svg'), + 'url' => route('admin.icons.show', [ + 'file' => $file->getFilename(), + ]), + ]; + }); + + return $keep->merge($files); + }, collect()); + } + + /** + * Executes the console command. + */ + public function handle() + { + $icons = $this->getIconList()->filter(function ($icon) { + return $this->isAllowed($icon); + }); + + $this->table(['Icon', 'Preview URL'], $icons->toArray()); + + return parent::handle(); + } +} diff --git a/src/Commands/ModuleMake.php b/src/Commands/ModuleMake.php index 86ca72558..a75565347 100644 --- a/src/Commands/ModuleMake.php +++ b/src/Commands/ModuleMake.php @@ -3,7 +3,6 @@ namespace A17\Twill\Commands; use Illuminate\Config\Repository as Config; -use Illuminate\Console\Command; use Illuminate\Filesystem\Filesystem; use Illuminate\Support\Collection; use Illuminate\Support\Composer; @@ -16,7 +15,7 @@ class ModuleMake extends Command * * @var string */ - protected $signature = 'twill:module {moduleName} + protected $signature = 'twill:make:module {moduleName} {--B|hasBlocks} {--T|hasTranslation} {--S|hasSlug} diff --git a/src/Commands/ModuleMakeDeprecated.php b/src/Commands/ModuleMakeDeprecated.php new file mode 100644 index 000000000..f737ba133 --- /dev/null +++ b/src/Commands/ModuleMakeDeprecated.php @@ -0,0 +1,44 @@ +call('twill:make:module', [ + 'moduleName' => $this->argument('moduleName'), + ] + collect($this->options())->mapWithKeys(function ($value, $key) { + return ["--{$key}" => $value]; + })->toArray()); + } +} diff --git a/src/Commands/RefreshLQIP.php b/src/Commands/RefreshLQIP.php index 6debf7436..542129273 100755 --- a/src/Commands/RefreshLQIP.php +++ b/src/Commands/RefreshLQIP.php @@ -4,7 +4,6 @@ use A17\Twill\Models\Media; use Illuminate\Config\Repository as Config; -use Illuminate\Console\Command; use Illuminate\Database\DatabaseManager; use Illuminate\Support\Arr; use ImageService; diff --git a/src/Commands/Update.php b/src/Commands/Update.php index 4797262e1..740be1580 100644 --- a/src/Commands/Update.php +++ b/src/Commands/Update.php @@ -2,8 +2,6 @@ namespace A17\Twill\Commands; -use Illuminate\Console\Command; - class Update extends Command { protected $signature = 'twill:update'; diff --git a/src/Commands/stubs/blocks/carousel.blade.php b/src/Commands/stubs/blocks/carousel.blade.php new file mode 100644 index 000000000..e6a04d70c --- /dev/null +++ b/src/Commands/stubs/blocks/carousel.blade.php @@ -0,0 +1,15 @@ +@twillBlockTitle('Carousel') +@twillBlockIcon('flex-grid') +@twillBlockGroup('twill') + +@formField('select', [ + 'name' => 'variation', + 'label' => 'Carousel variation', + 'options' => [ + [ 'value' => 'fixed-width', 'label' => 'Fixed width' ], + [ 'value' => 'variable-width', 'label' => 'Variable width' ] + ], + 'default' => 0 +]) + +@formField('repeater', ['type' => 'carousel-item']) diff --git a/src/Commands/stubs/blocks/footnote.blade.php b/src/Commands/stubs/blocks/footnote.blade.php new file mode 100644 index 000000000..b178a7666 --- /dev/null +++ b/src/Commands/stubs/blocks/footnote.blade.php @@ -0,0 +1,21 @@ +@twillBlockTitle('Footnote') +@twillBlockIcon('text') +@twillBlockGroup('twill') + +@formField('input', [ + 'name' => 'anchor', + 'label' => 'Anchor', +]) + +@formField('wysiwyg', [ + 'name' => 'description', + 'label' => 'Text', + 'toolbarOptions' => [ + 'bold', + 'italic', + [ 'script' => 'super' ], + [ 'script' => 'sub' ], + 'link', + 'clean' + ], +]) diff --git a/src/Commands/stubs/blocks/gallery.blade.php b/src/Commands/stubs/blocks/gallery.blade.php new file mode 100644 index 000000000..800e9a0b7 --- /dev/null +++ b/src/Commands/stubs/blocks/gallery.blade.php @@ -0,0 +1,27 @@ +@twillBlockTitle('Gallery') +@twillBlockIcon('editor') +@twillBlockGroup('twill') + +@formField('select', [ + 'name' => 'variation', + 'label' => 'Gallery variation', + 'options' => [ + [ 'value' => 'fixed-width', 'label' => 'Fixed width' ], + [ 'value' => 'variable-width', 'label' => 'Variable width' ] + ], + 'default' => 0 +]) + +@formField('medias', [ + 'name' => 'image', + 'label' => 'Images', + 'max' => 20, + 'withVideoUrl' => false, + 'extraMetadatas' => [ + [ + 'name' => 'show_info', + 'label' => 'Show info', + 'type' => 'checkbox' + ], + ], +]) diff --git a/src/Commands/stubs/blocks/image.blade.php b/src/Commands/stubs/blocks/image.blade.php new file mode 100644 index 000000000..f020e22dd --- /dev/null +++ b/src/Commands/stubs/blocks/image.blade.php @@ -0,0 +1,26 @@ +@twillBlockCompiled('true') +@twillBlockComponent('a17-block-image') +@twillBlockTitle('Image') +@twillBlockIcon('image') +@twillBlockGroup('twill') + +@formField('medias', [ + 'name' => 'image', // role + 'label' => 'Image', + 'withVideoUrl' => false, + 'translated' => false, +]) + +@formField('input', [ + 'name' => 'author', + 'label' => 'Author', + 'translated' => false, +]) + +@formField('radios', [ + 'name' => 'ratio', + 'label' => "Ratio", + 'options' => collect(['full' => 'Full', 'half' => 'Half']), + 'default' => 'full', + 'inline' => true +]) diff --git a/src/Commands/stubs/blocks/quote.blade.php b/src/Commands/stubs/blocks/quote.blade.php new file mode 100644 index 000000000..844bdc1d8 --- /dev/null +++ b/src/Commands/stubs/blocks/quote.blade.php @@ -0,0 +1,16 @@ +@twillBlockTitle('Quote') +@twillBlockIcon('text') +@twillBlockGroup('twill') + +@formField('input', [ + 'name' => 'quote', + 'type' => 'textarea', + 'label' => 'Quote text', + 'maxlength' => 250, + 'rows' => 4 +]) + +@formField('input', [ + 'name' => 'author', + 'label' => 'Quote author', +]) diff --git a/src/Commands/stubs/blocks/text.blade.php b/src/Commands/stubs/blocks/text.blade.php new file mode 100644 index 000000000..b170c6938 --- /dev/null +++ b/src/Commands/stubs/blocks/text.blade.php @@ -0,0 +1,28 @@ +@twillBlockCompiled('true') +@twillBlockComponent('a17-block-wysiwyg') +@twillBlockTitle('Body text') +@twillBlockIcon('text') +@twillBlockGroup('twill') + +@formField('input', [ + 'name' => 'title', + 'label' => 'Title', + 'translated' => true, +]) + +@formField('wysiwyg', [ + 'name' => 'text', + 'label' => 'Text', + 'placeholder' => 'Text', + 'toolbarOptions' => [ + 'bold', + 'italic', + ['list' => 'bullet'], + ['list' => 'ordered'], + [ 'script' => 'super' ], + [ 'script' => 'sub' ], + 'link', + 'clean' + ], + 'translated' => true +]) diff --git a/src/Commands/stubs/repeaters/carousel-item.blade.php b/src/Commands/stubs/repeaters/carousel-item.blade.php new file mode 100644 index 000000000..0d65a5b58 --- /dev/null +++ b/src/Commands/stubs/repeaters/carousel-item.blade.php @@ -0,0 +1,14 @@ +@twillRepeaterTitle('Carousel item') +@twillRepeaterTrigger('Add carousel item') +@twillRepeaterGroup('twill') + +@formField('input', [ + 'name' => 'description', + 'label' => 'Description', +]) + +@formField('medias', [ + 'name' => 'image', + 'label' => 'Image', + 'withVideoUrl' => false, +]) diff --git a/src/Helpers/helpers.php b/src/Helpers/helpers.php index 891a26135..399056dbb 100644 --- a/src/Helpers/helpers.php +++ b/src/Helpers/helpers.php @@ -1,5 +1,6 @@ getBlockList(); + + $appBlocksList = $blockList->filter(function ($block) { + return $block['source'] !== A17\Twill\Services\Blocks\Block::SOURCE_TWILL; + }); + + return $blockList->filter( + function ($block) use ($blocks, $groups, $appBlocksList) { + if ($block['group'] === A17\Twill\Services\Blocks\Block::SOURCE_TWILL) { + if (!collect( + config('twill.block_editor.use_twill_blocks') + )->contains($block['name'])) { + return false; + } + + if (count($appBlocksList) > 0 && $appBlocksList->contains( + function ($appBlock) use ($block) { + return $appBlock['name'] === $block['name']; + }) + ) { + return false; + } + } + + return (filled($blocks) ? collect($blocks)->contains($block['name']) : true) + && (filled($groups) ? collect($groups)->contains($block['group']) : true); + } + )->toArray(); + } +} diff --git a/src/Http/Controllers/Admin/IconsController.php b/src/Http/Controllers/Admin/IconsController.php new file mode 100644 index 000000000..35ea9f8d9 --- /dev/null +++ b/src/Http/Controllers/Admin/IconsController.php @@ -0,0 +1,27 @@ +files = $files; + } + + public function show($file) + { + $file = __DIR__ . "/../../../../frontend/icons/{$file}"; + + if (!$this->files->exists($file)) { + abort(404); + } + + return response()->stream(function () use ($file) { + echo $this->files->get($file); + }); + } +} diff --git a/src/Http/Controllers/Admin/ModuleController.php b/src/Http/Controllers/Admin/ModuleController.php index 325eed7f0..3349d6dbc 100644 --- a/src/Http/Controllers/Admin/ModuleController.php +++ b/src/Http/Controllers/Admin/ModuleController.php @@ -3,6 +3,7 @@ namespace A17\Twill\Http\Controllers\Admin; use A17\Twill\Helpers\FlashLevel; +use A17\Twill\Services\Blocks\BlockCollection; use Illuminate\Contracts\Foundation\Application; use Illuminate\Http\Request; use Illuminate\Support\Arr; @@ -1369,6 +1370,7 @@ protected function form($id, $item = null) 'saveUrl' => $this->getModuleRoute($item->id, 'update'), 'editor' => Config::get('twill.enabled.block-editor') && $this->moduleHas('blocks') && !$this->disableEditor, 'blockPreviewUrl' => Route::has('admin.blocks.preview') ? URL::route('admin.blocks.preview') : '#', + 'availableRepeaters' => $this->getRepeaterList()->toJson(), 'revisions' => $this->moduleHas('revisions') ? $item->revisionsArray() : null, ] + (Route::has($previewRouteName) ? [ 'previewUrl' => moduleRoute($this->moduleName, $this->routePrefix, 'preview', $item->id), @@ -1680,4 +1682,14 @@ protected function fireEvent($input = []) { fireCmsEvent('cms-module.saved', $input); } + + /** + * @return Collection + */ + public function getRepeaterList() + { + return app(BlockCollection::class)->getRepeaterList()->mapWithKeys(function ($repeater) { + return [$repeater['name'] => $repeater]; + }); + } } diff --git a/src/Repositories/Behaviors/HandleBlocks.php b/src/Repositories/Behaviors/HandleBlocks.php index 2366aba2b..f12e99d81 100644 --- a/src/Repositories/Behaviors/HandleBlocks.php +++ b/src/Repositories/Behaviors/HandleBlocks.php @@ -4,6 +4,7 @@ use A17\Twill\Models\Behaviors\HasMedias; use A17\Twill\Repositories\BlockRepository; +use A17\Twill\Services\Blocks\BlockCollection; use Illuminate\Support\Collection; use Schema; @@ -169,13 +170,13 @@ public function getFormFieldsHandleBlocks($object, $fields) if ($object->has('blocks')) { - $blocksConfig = config('twill.block_editor'); + $blocksList = app(BlockCollection::class)->getBlockList()->keyBy('name'); foreach ($object->blocks as $block) { $isInRepeater = isset($block->parent_id); $configKey = $isInRepeater ? 'repeaters' : 'blocks'; - $blockTypeConfig = $blocksConfig[$configKey][$block->type] ?? null; + $blockTypeConfig = $blocksList[$block->type] ?? null; if (is_null($blockTypeConfig)) { continue; diff --git a/src/Repositories/BlockRepository.php b/src/Repositories/BlockRepository.php index 41726bbe0..81d0d1d05 100644 --- a/src/Repositories/BlockRepository.php +++ b/src/Repositories/BlockRepository.php @@ -7,6 +7,7 @@ use A17\Twill\Models\Block; use A17\Twill\Repositories\Behaviors\HandleFiles; use A17\Twill\Repositories\Behaviors\HandleMedias; +use A17\Twill\Services\Blocks\BlockCollection; use Illuminate\Config\Repository as Config; use Illuminate\Support\Collection; use Log; @@ -100,9 +101,9 @@ public function afterDelete($object) */ public function buildFromCmsArray($block, $repeater = false) { - $blocksFromConfig = $this->config->get('twill.block_editor.' . ($repeater ? 'repeaters' : 'blocks')); + $blocksList = app(BlockCollection::class)->getBlockList(); - $block['type'] = Collection::make($blocksFromConfig)->search(function ($blockConfig) use ($block) { + $block['type'] = $blocksList->keyBy('name')->search(function ($blockConfig) use ($block) { return $blockConfig['component'] === $block['type']; }); diff --git a/src/Services/Blocks/BladeCompiler.php b/src/Services/Blocks/BladeCompiler.php new file mode 100644 index 000000000..883c3b689 --- /dev/null +++ b/src/Services/Blocks/BladeCompiler.php @@ -0,0 +1,82 @@ +' . $php); + } catch (Exception $e) { + while (ob_get_level() > $obLevel) { + ob_end_clean(); + } + throw $e; + } catch (Throwable $e) { + while (ob_get_level() > $obLevel) { + ob_end_clean(); + } + throw new FatalThrowableError($e); + } + } + + /** + * @return false|string + */ + protected static function getRendered() + { + return ob_get_clean(); + } + + /** + * @return int + */ + protected static function initializeOutputBuffering() + { + $obLevel = ob_get_level(); + + ob_start(); + + return $obLevel; + } + + /** + * @param $string + * @param $data + * @return false|string + * @throws \Symfony\Component\Debug\Exception\FatalThrowableError + */ + public static function render($string, $data) + { + self::compile(Blade::compileString($string), $data); + + return self::getRendered(); + } +} diff --git a/src/Services/Blocks/Block.php b/src/Services/Blocks/Block.php new file mode 100644 index 000000000..70060d0e7 --- /dev/null +++ b/src/Services/Blocks/Block.php @@ -0,0 +1,292 @@ +file = $file; + + $this->type = $type; + + $this->source = $source; + + $this->fileName = $this->getFilename(); + + $this->name = $name = Str::before( + $this->file->getFilename(), + '.blade.php' + ); + + if ($type === self::TYPE_BLOCK + && config('twill.block_editor.repeaters.' . $this->name) !== null + ) { + $this->type = self::TYPE_REPEATER; + } + + $this->parse(); + } + + /** + * @param $source + * @return $this + */ + public function setSource($source) + { + $this->source = $source; + + return $this; + } + + /** + * @return \Illuminate\Support\Collection + */ + public function toList() + { + return collect([ + 'title' => $this->title, + 'trigger' => $this->trigger, + 'name' => $this->name, + 'group' => $this->group, + 'type' => $this->type, + 'icon' => $this->icon, + 'compiled' => $this->compiled ? 'yes' : '-', + 'source' => $this->source, + 'new_format' => $this->isNewFormat ? 'yes' : '-', + 'file' => $this->file->getFilename(), + 'component' => $this->component, + 'max' => $this->type === self::TYPE_REPEATER ? $this->max : null, + ]); + } + + /** + * @return \Illuminate\Support\Collection + */ + public function toShortList() + { + return collect([ + 'title' => $this->title, + 'name' => $this->name, + 'group' => $this->group, + 'type' => $this->type, + 'icon' => $this->icon, + ]); + } + + /** + * @param $name + * @return string + */ + public function makeName($name) + { + return Str::kebab($name); + } + + /** + * @return $this + * @throws \Exception + */ + public function parse() + { + $contents = file_get_contents((string) $this->file->getPathName()); + + $this->title = $this->parseProperty('title', $contents, $this->name); + $this->trigger = $this->parseProperty('trigger', $contents, $this->name); + $this->max = (int) $this->parseProperty('max', $contents, $this->name, 999); + $this->group = $this->parseProperty('group', $contents, $this->name, 'app'); + $this->icon = $this->parseProperty('icon', $contents, $this->name); + $this->compiled = (boolean) $this->parseProperty('compiled', $contents, $this->name, false); + $this->component = $this->parseProperty('component', $contents, $this->name, "a17-block-{$this->name}"); + $this->isNewFormat = $this->isNewFormat($contents); + $this->contents = $contents; + + return $this; + } + + /** + * @param $property + * @param $block + * @param $blockName + * @param null $default + * @return array + * @throws \Exception + */ + public function parseProperty( + $property, + $block, + $blockName, + $default = null + ) { + $bladeProperty = ucfirst($property); + + foreach (['twillProp', 'twillBlock', 'twillRepeater'] as $pattern) { + preg_match("/@{$pattern}{$bladeProperty}\('(.*)'\)/", $block, $matches); + + if (filled($matches)) { + return $matches[1]; + } + }; + + if ( + $value = config( + "twill.block_editor.blocks.{$blockName}.{$property}" + ) + ) { + return $value; + } + + if ( + $value = config( + "twill.block_editor.repeaters.{$blockName}.{$property}" + ) + ) { + return $value; + } + + if ($property !== 'title') { + return $default; + } + + // Title is mandatory + throw new Exception( + "Property '{$property}' not found on block {$blockName}." + ); + } + + /** + * @param $block + * @return bool + */ + public function isNewFormat($block) + { + preg_match("/@twill(Prop|Block|Repeater).*\('(.*)'\)/", $block, $propMatches); + + return filled($propMatches); + } + + /** + * @return string + */ + public function getFileName() + { + return $this->file->getFileName(); + } + + /** + * @return string + * @throws \Symfony\Component\Debug\Exception\FatalThrowableError + */ + public function render() + { + return BladeCompiler::render( + $this->removeSpecialBladeTags($this->contents), + [ + 'renderForBlocks' => true, + ] + ); + } + + /** + * @param $contents + * @return string + */ + public function removeSpecialBladeTags($contents) + { + return preg_replace([ + "/@twillProp.*\('(.*)'\)/", + "/@twillBlock.*\('(.*)'\)/", + "/@twillRepeater.*\('(.*)'\)/", + ], '', $contents); + } +} diff --git a/src/Services/Blocks/BlockCollection.php b/src/Services/Blocks/BlockCollection.php new file mode 100644 index 000000000..a028e58fa --- /dev/null +++ b/src/Services/Blocks/BlockCollection.php @@ -0,0 +1,240 @@ +fileSystem = app(Filesystem::class); + + $this->missingDirectories = collect(); + + $this->load(); + } + + private function addMissingDirectory($directory) + { + $this->missingDirectories->push($directory); + } + + /** + * @param $search + * @param array $sources + * @return mixed + * @throws \Exception + */ + public function findByName($search, $sources = []) + { + return $this->collect() + ->filter(function ($block) use ($search, $sources) { + return $block->name == $search && + (blank($sources) || + collect($sources)->contains($block->source)); + }) + ->sortBy(function ($block) { + return $block->source === 'app' ? 0 : 1; + }) + ->first(); + } + + /** + * @return \Illuminate\Support\Collection + */ + public function getBlocks() + { + return $this->collect() + ->filter(function ($block) { + return $block->type === Block::TYPE_BLOCK; + }) + ->values(); + } + + /** + * @return \Illuminate\Support\Collection + */ + public function getBlockList() + { + return $this->getBlocks()->map(function (Block $block) { + return $block->toList(); + }); + } + + /** + * @return \Illuminate\Support\Collection + */ + public function getMissingDirectories() + { + return $this->missingDirectories; + } + + /** + * @param $directory + * @param $source + * @param null $type + * @return \Illuminate\Support\Collection + */ + public function readBlocks($directory, $source, $type = null) + { + if (!$this->fileSystem->exists($directory)) { + $this->addMissingDirectory($directory); + + return collect(); + } + + return collect($this->fileSystem->files($directory))->map(function ( + $file + ) use ($source, $type) { + return new Block($file, $type, $source); + }); + } + + /** + * @return $this + */ + public function generatePaths() + { + $this->paths = collect( + config('twill.block_editor.directories.source.blocks') + ) + ->map(function ($path) { + $path['type'] = Block::TYPE_BLOCK; + + return $path; + }) + ->merge( + collect( + config('twill.block_editor.directories.source.repeaters') + )->map(function ($path) { + $path['type'] = Block::TYPE_REPEATER; + + return $path; + }) + ); + + return $this; + } + + /** + * @param Block $block + * @return string + */ + public function detectCustomSources(Block $block) + { + if ($block->source === Block::SOURCE_APP) { + if ( + $this->collect() + ->where('fileName', $block->getFileName()) + ->where('source', Block::SOURCE_TWILL) + ->isNotEmpty() + ) { + return Block::SOURCE_CUSTOM; + } + } + + return $block->source; + } + + /** + * @return $this + */ + public function load() + { + $this->generatePaths(); + + $this->items = collect($this->paths) + ->reduce(function (Collection $keep, $path) { + $this->readBlocks( + $path['path'], + $path['source'], + $path['type'] + )->each(function ($block) use ($keep) { + $keep->push($block); + + return $keep; + }); + + return $keep; + }, collect()) + ->toArray(); + + $this->items = $this->collect() + ->each(function (Block $block) { + $block->setSource($this->detectCustomSources($block)); + }) + ->toArray(); + + return $this; + } + + /** + * @return array + */ + public function toArray() + { + return $this->list()->toArray(); + } + + /** + * @return \Illuminate\Support\Collection + */ + public function list() + { + return $this->collect()->map(function (Block $block) { + return $block->toList(); + }); + } + + /** + * @return \Illuminate\Support\Collection + */ + public function collect() + { + return collect($this); + } + + /** + * @return \Illuminate\Support\Collection + */ + public function getRepeaters() + { + return $this->collect() + ->filter(function ($block) { + return $block->type === Block::TYPE_REPEATER; + }) + ->values(); + } + + /** + * @return \Illuminate\Support\Collection + */ + public function getRepeaterList() + { + return $this->getRepeaters()->map(function (Block $block) { + return $block->toList(); + }); + } +} diff --git a/src/Services/Blocks/BlockMaker.php b/src/Services/Blocks/BlockMaker.php new file mode 100644 index 000000000..fb84f74d7 --- /dev/null +++ b/src/Services/Blocks/BlockMaker.php @@ -0,0 +1,540 @@ +files = $files; + + $this->blockCollection = $blockCollection; + } + + /** + * @return \A17\Twill\Services\Blocks\BlockCollection + */ + public function getBlockCollection() + { + return $this->blockCollection; + } + + /** + * Make a new block. + * + * @param $blockName + * @param $baseName + * @param $iconName + * @return mixed + * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException + * @throws \Exception + */ + public function make($blockName, $baseName, $iconName) + { + $this->info('Creating block...'); + + if ( + !$this->checkBlockStub($baseName) || + !$this->checkIconFile($iconName) || + !$this->checkBlockBaseFormat( + $stubFileName = $this->blockBase->file->getPathName() + ) + ) { + return false; + } + + if ( + !$this->checkBlockFile( + $blockFile = $this->makeBlockPath( + $blockIdentifier = $this->makeBlockIdentifier($blockName) + ) + ) + ) { + return false; + } + + $this->blockBase = $this->makeBlock( + $blockName, + $iconName, + $stubFileName + ); + + if ( + !$this->checkRepeaters( + $repeaters = $this->generateRepeaters( + $baseName, + $blockIdentifier, + $this->blockBase + ) + ) + ) { + return false; + } + + return $this->saveAllFiles( + $blockName, + $blockFile, + $repeaters, + $blockIdentifier + ); + } + + /** + * @param $baseName + * @return bool + * @throws \Exception + */ + protected function checkBlockStub($baseName) + { + if (blank($this->blockBase = $this->getBlockByName($baseName))) { + $this->error("Block '{$baseName}' doesn't exists."); + + return false; + } + + return true; + } + + /** + * @param $iconName + * @return bool + */ + protected function checkIconFile($iconName) + { + if (blank($this->icon = $this->getIconFile($iconName))) { + $this->error("Icon '{$iconName}' doesn't exists."); + + return false; + } + + return true; + } + + /** + * @param $blockFile + * @return bool + */ + protected function checkBlockFile($blockFile) + { + $this->info("File: {$blockFile}"); + + if ($this->files->exists($blockFile)) { + $this->error('A file with the same name already exists.'); + + return false; + } + + return true; + } + + protected function checkBlockBaseFormat($stubFileName) + { + if (!$this->blockBase->isNewFormat) { + $this->error( + "The block file '{$stubFileName}' format is the old one." + ); + + $this->error('Please upgrade it before using as template.'); + + return false; + } + + return true; + } + + protected function checkRepeaters($repeaters) + { + foreach ($repeaters as $repeater) { + $this->info("Repeater file: {$repeater['newRepeaterPath']}"); + + if ($this->files->exists($repeater['newRepeaterPath'])) { + $this->error( + 'A repeater file with the same name already exists.' + ); + + return false; + } + } + + return true; + } + + /** + * @param $blockName + * @param $iconName + * @param $stubFileName + * @param null|string $stub + * @return string|string[]|null + * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException + */ + public function makeBlock( + $blockName, + $iconName, + $stubFileName = null, + $stub = null + ) { + $stub = $stub ?? $this->files->get($stubFileName); + + $title = $this->makeBlockTitle($blockName); + + $stub = preg_replace( + [ + "/@twillPropTitle\('(.*)'\)/", + "/@twillBlockTitle\('(.*)'\)/", + "/@twillRepeaterTitle\('(.*)'\)/", + ], + [ + "@twillPropTitle('{$title}')", + "@twillBlockTitle('{$title}')", + "@twillRepeaterTitle('{$title}')", + ], + $stub + ); + + $stub = preg_replace( + [ + "/@twillPropGroup\('twill'\)/", + "/@twillBlockGroup\('twill'\)/", + "/@twillRepeaterGroup\('twill'\)/", + ], + [ + "@twillPropGroup('app')", + "@twillBlockGroup('app')", + "@twillRepeaterGroup('app')", + ], + $stub + ); + + $stub = preg_replace( + [ + "/@twillPropIcon\('(.*)'\)/", + "/@twillBlockIcon\('(.*)'\)/", + ], + [ + "@twillPropIcon('{$iconName}')", + "@twillBlockIcon('{$iconName}')", + ], + $stub + ); + + $stub = preg_replace( + [ + "/@twillPropCompiled\('(.*)'\)\n/", + "/@twillBlockCompiled\('(.*)'\)\n/", + "/@twillRepeaterCompiled\('(.*)'\)\n/", + ], + "", + $stub + ); + + $stub = preg_replace( + [ + "/@twillPropComponent\('(.*)'\)\n/", + "/@twillBlockComponent\('(.*)'\)\n/", + "/@twillRepeaterComponent\('(.*)'\)\n/", + ], + "", + $stub + ); + + return $stub; + } + + /** + * @param $blockName + * @return string + * @throws \Exception + */ + protected function makeBlockIdentifier($blockName) + { + return (new Block( + $this->blockBase->file, + $this->blockBase->type, + $this->blockBase->source + ))->makeName($blockName); + } + + /** + * @param string $blockIdentifier + * @param string $type + * @return string + */ + protected function makeBlockPath(string $blockIdentifier, $type = 'block') + { + $destination = config( + "twill.block_editor.directories.destination.{$type}s" + ); + + if (!$this->files->exists($destination)) { + if ( + !config('twill.block_editor.directories.destination.make_dir') + ) { + throw new Exception( + "Destination directory does not exists: {$destination}" + ); + } + + $this->files->makeDirectory($destination, 0755, true); + } + + return "{$destination}/{$blockIdentifier}.blade.php"; + } + + /** + * @param $string + * @return string + */ + public function makeBlockTitle($string) + { + $string = Str::kebab($string); + + $string = str_replace(['-', '_'], ' ', $string); + + return Str::title($string); + } + + /** + * @param $block + * @param array $sources + * @return mixed + * @throws \Exception + */ + public function getBlockByName($block, $sources = []) + { + return $this->blockCollection->findByName($block, $sources); + } + + /** + * @param $icon + * @return mixed + */ + public function getIconFile($icon) + { + $icon .= '.svg'; + + return collect( + $this->files->files(__DIR__ . '/../../../frontend/icons') + )->reduce(function ($keep, SplFileInfo $file) use ($icon) { + if ($keep) { + return $keep; + } + + return $file->getFilename() === $icon ? $file->getPathName() : null; + }, null); + } + + /** + * @param $baseName + * @param $blockName + * @param $blockBase + * @return \Illuminate\Support\Collection + * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException + */ + public function generateRepeaters($baseName, $blockName, &$blockBase) + { + preg_match_all( + '/@formField(.*\'repeater\'.*\[.*=>.*\'(.*)\'].*)/', + $blockBase, + $matches + ); + + $repeaters = collect(); + + if (count($matches) === 0) { + return null; + } + + foreach ($matches[2] as $index => $repeaterName) { + if (Str::startsWith($repeaterName, $baseName)) { + $newRepeater = $this->createRepeater( + $repeaterName, + $baseName, + $blockName, + $blockBase, + $matches[0][$index] + ); + + // Get the update version of the block stub, to be used on next repeaters + $blockBase = $newRepeater['newBlockStub']; + + $oldRepeaterTag = $matches[0][0]; + $newRepeaterTag = str_replace( + "'{$repeaterName}'", + "'{$newRepeater['newRepeaterName']}'", + $oldRepeaterTag + ); + + $blockBase = str_replace( + $oldRepeaterTag, + $newRepeaterTag, + $blockBase + ); + + $repeaters->push($newRepeater); + } + } + + return $repeaters; + } + + /** + * @param $repeaterName + * @param $baseName + * @param $blockName + * @param $blockBase + * @param $blockString + * @return array + * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException + * @throws \Exception + */ + public function createRepeater( + $repeaterName, + $baseName, + $blockName, + $blockBase, + $blockString + ) { + $baseRepeater = $this->blockCollection->findByName($repeaterName); + + return [ + 'baseRepeater' => $baseRepeater, + + 'newRepeaterName' => ($newRepeaterName = + $blockName . Str::after($repeaterName, $baseName)), + + 'newRepeaterStub' => $this->makeBlock( + $newRepeaterName, + null, + null, + $baseRepeater->contents + ), + + 'newRepeaterTitle' => $this->makeBlockTitle($newRepeaterName), + + 'newRepeaterPath' => $this->makeBlockPath( + $newRepeaterName, + Block::TYPE_REPEATER + ), + + 'newBlockString' => ($newBlockString = str_replace( + "'{$repeaterName}'", + "'{$newRepeaterName}'", + $blockString + )), + + 'newBlockStub' => str_replace( + $blockString, + $newBlockString, + $blockBase + ), + ]; + } + + public function put($filePath, $contents) + { + $directory = dirname($filePath); + + if (!$this->files->exists($directory)) { + $this->files->makeDirectory($directory, 0755, true); + } + + $this->files->put($filePath, $contents); + } + + /** + * @param $blockName + * @param string $blockFile + * @param \Illuminate\Support\Collection $repeaters + * @param string $blockIdentifier + * @return bool + */ + protected function saveAllFiles( + $blockName, + string $blockFile, + $repeaters, + string $blockIdentifier + ) { + $this->put($blockFile, $this->blockBase); + + $this->info("Block {$blockName} was created."); + + foreach ($repeaters as $repeater) { + $this->put( + $repeater['newRepeaterPath'], + $repeater['newRepeaterStub'] + ); + } + + $this->info("Block is ready to use with the name '{$blockIdentifier}'"); + + return true; + } + + /** + * @param \Illuminate\Console\Command $command + * @return BlockMaker + */ + public function setCommand(Command $command) + { + $this->command = $command; + + return $this; + } + + /** + * @param $message + */ + public function info($message) + { + if ($this->command) { + $this->command->displayInfo($message); + } + } + + /** + * @param $message + */ + public function error($message) + { + if ($this->command) { + $this->command->displayError($message); + } + } +} diff --git a/src/TwillServiceProvider.php b/src/TwillServiceProvider.php index 548c51c98..778d9e536 100644 --- a/src/TwillServiceProvider.php +++ b/src/TwillServiceProvider.php @@ -2,12 +2,16 @@ namespace A17\Twill; +use A17\Twill\Commands\BlockMake; use A17\Twill\Commands\Build; use A17\Twill\Commands\CreateSuperAdmin; use A17\Twill\Commands\Dev; use A17\Twill\Commands\GenerateBlocks; use A17\Twill\Commands\Install; +use A17\Twill\Commands\ListBlocks; +use A17\Twill\Commands\ListIcons; use A17\Twill\Commands\ModuleMake; +use A17\Twill\Commands\ModuleMakeDeprecated; use A17\Twill\Commands\RefreshLQIP; use A17\Twill\Commands\Update; use A17\Twill\Http\ViewComposers\ActiveNavigation; @@ -290,6 +294,10 @@ private function registerCommands() $this->commands([ Install::class, ModuleMake::class, + ModuleMakeDeprecated::class, + BlockMake::class, + ListIcons::class, + ListBlocks::class, CreateSuperAdmin::class, RefreshLQIP::class, GenerateBlocks::class, diff --git a/tests/integration/Behaviors/CopyBlocks.php b/tests/integration/Behaviors/CopyBlocks.php new file mode 100644 index 000000000..1acfc9d9f --- /dev/null +++ b/tests/integration/Behaviors/CopyBlocks.php @@ -0,0 +1,46 @@ +mapWithKeys(function ($block) { + return [ + "{\$tests}/../../src/Commands/stubs/blocks/{$block}" => collect( + config('twill.block_editor.directories.source.blocks') + )->map(function ($path) { + return $this->normalizeDir($path['path']); + }), + ]; + }) + ->merge([ + "{\$tests}/../../src/Commands/stubs/repeaters/carousel-item.blade.php" => collect( + config('twill.block_editor.directories.source.repeaters') + )->map(function ($path) { + return $this->normalizeDir($path['path']); + }), + ]); + + $this->copyFiles($allFiles); + } + + protected function normalizeDir($directory) + { + if (!Str::endsWith($directory, DIRECTORY_SEPARATOR)) { + $directory .= DIRECTORY_SEPARATOR; + } + + return $directory; + } +} diff --git a/tests/integration/Commands/BuildTest.php b/tests/integration/Commands/BuildTest.php new file mode 100644 index 000000000..d8bdcf673 --- /dev/null +++ b/tests/integration/Commands/BuildTest.php @@ -0,0 +1,20 @@ +assertExitCodeIsGood($this->artisan($command = 'twill:build')->run()); + + $this->assertTrue(!false); + } +} diff --git a/tests/integration/Commands/ListBlocksTest.php b/tests/integration/Commands/ListBlocksTest.php new file mode 100644 index 000000000..be50a6f97 --- /dev/null +++ b/tests/integration/Commands/ListBlocksTest.php @@ -0,0 +1,57 @@ +copyBlocks(); + } + + public function testCanListAllBlocks() + { + $this->execute(); + + $this->assertFileExists( + resource_path('views/admin/blocks/carousel.blade.php') + ); + } + + public function testCanFilter() + { + $this->execute([ + 'filter' => 'text', + ]); + } + + public function testWorksFineWithZeroBlocks() + { + $this->execute([ + 'filter' => 'there-are-no-blocks-here', + ]); + } + + public function execute($parameters = []) + { + $pendingCommand = $this->artisan( + $command = 'twill:list:blocks', + $parameters + ); + + $this->getCommand($command) + ->getBlockCollection() + ->load(); + + $this->assertExitCodeIsGood($pendingCommand->run()); + } +} diff --git a/tests/integration/Commands/ListIconsTest.php b/tests/integration/Commands/ListIconsTest.php new file mode 100644 index 000000000..2c7a13732 --- /dev/null +++ b/tests/integration/Commands/ListIconsTest.php @@ -0,0 +1,37 @@ + [ + '{$vendor}/area17/twill/frontend/icons/', + '{$resources}/views/admin/icons/', + ], + + '{$tests}/../../frontend/icons/video.svg' => [ + '{$vendor}/area17/twill/frontend/icons/', + '{$resources}/views/admin/icons/', + ], + + '{$tests}/../../frontend/icons/text.svg' => [ + '{$vendor}/area17/twill/frontend/icons/', + '{$resources}/views/admin/icons/', + ], + ]; + + public function setup(): void + { + parent::setUp(); + + $this->copyFiles($this->allFiles); + } + + public function testCanListIcons() + { + $this->assertExitCodeIsGood($this->artisan('twill:list:icons')->run()); + } +} diff --git a/tests/integration/Commands/MakeBlockTest.php b/tests/integration/Commands/MakeBlockTest.php new file mode 100644 index 000000000..489cfb090 --- /dev/null +++ b/tests/integration/Commands/MakeBlockTest.php @@ -0,0 +1,134 @@ +copyBlocks(); + } + + public function testRaiseExceptionWhenMissingArguments() + { + $this->expectException(RuntimeException::class); + + $this->artisan('twill:make:block')->run(); + } + + public function testCanExecuteModuleCommand() + { + $pendingCommand = $this->artisan($command = 'twill:make:block', [ + 'name' => 'SuperQuote', + 'base' => 'quote', + 'icon' => 'text', + ]); + + $this->getCommand($command) + ->getBlockMaker() + ->getBlockCollection() + ->load(); + + $this->assertExitCodeIsGood($pendingCommand->run()); + + $this->assertFileExists( + config('twill.block_editor.directories.destination.blocks') . + '/super-quote.blade.php' + ); + } + + public function testCanMakeBlockWithRepeater() + { + $pendingCommand = $this->artisan($command = 'twill:make:block', [ + 'name' => 'SuperCarousel', + 'base' => 'carousel', + 'icon' => 'text', + ]); + + $this->getCommand($command) + ->getBlockMaker() + ->getBlockCollection() + ->load(); + + $this->assertExitCodeIsGood($pendingCommand->run()); + + $this->assertFileExists( + config('twill.block_editor.directories.destination.blocks') . + '/super-carousel.blade.php' + ); + + $this->assertFileExists( + config('twill.block_editor.directories.destination.repeaters') . + '/super-carousel-item.blade.php' + ); + } + + public function testCannotMakeBlockWithMissingBase() + { + $pendingCommand = $this->artisan($command = 'twill:make:block', [ + 'name' => 'WillBeMissed', + 'base' => 'missing-block', + 'icon' => 'text', + ]); + + $this->getCommand($command) + ->getBlockMaker() + ->getBlockCollection() + ->load(); + + $this->assertExitCodeIsNotGood($pendingCommand->run()); + } + + public function testCannotMakeBlockWithMissingIcon() + { + $pendingCommand = $this->artisan($command = 'twill:make:block', [ + 'name' => 'IconWillBeMissed', + 'base' => 'quote', + 'icon' => 'missing-icon', + ]); + + $this->getCommand($command) + ->getBlockMaker() + ->getBlockCollection() + ->load(); + + $this->assertExitCodeIsNotGood($pendingCommand->run()); + } + + public function testCannotMakeAlreadyExistingBlock() + { + $pendingCommand = $this->artisan($command = 'twill:make:block', [ + 'name' => 'SuperQuote', + 'base' => 'quote', + 'icon' => 'text', + ]); + + $this->getCommand($command) + ->getBlockMaker() + ->getBlockCollection() + ->load(); + + $this->assertExitCodeIsGood($pendingCommand->run()); + + $pendingCommand = $this->artisan($command = 'twill:make:block', [ + 'name' => 'SuperQuote', + 'base' => 'quote', + 'icon' => 'text', + ]); + + $this->getCommand($command) + ->getBlockMaker() + ->getBlockCollection() + ->load(); + + $this->assertExitCodeIsNotGood($pendingCommand->run()); + } +} diff --git a/tests/integration/Commands/MakeModuleTest.php b/tests/integration/Commands/MakeModuleTest.php new file mode 100644 index 000000000..0a3760ee8 --- /dev/null +++ b/tests/integration/Commands/MakeModuleTest.php @@ -0,0 +1,32 @@ +assertExitCodeIsGood( + $this->artisan('twill:make:module', [ + 'moduleName' => 'Posts', + '--hasBlocks' => true, + '--hasTranslation' => true, + '--hasSlug' => true, + '--hasMedias' => true, + '--hasFiles' => true, + '--hasPosition' => true, + '--hasRevisions' => true, + ])->run() + ); + + $this->assertFileExists( + twill_path('Http/Controllers/Admin/PostController.php') + ); + + $this->assertIsObject( + $this->app->make(\App\Http\Controllers\Admin\PostController::class) + ); + } +} diff --git a/tests/integration/Commands/SuperadminTest.php b/tests/integration/Commands/SuperadminTest.php new file mode 100644 index 000000000..8c5a42afb --- /dev/null +++ b/tests/integration/Commands/SuperadminTest.php @@ -0,0 +1,33 @@ +assertExitCodeIsGood( + $this->artisan('twill:superadmin') + ->expectsQuestion( + 'Enter an email', + $this->superAdmin(true)->email + ) + ->expectsQuestion( + 'Enter a password', + $this->superAdmin()->password + ) + ->expectsQuestion( + 'Confirm the password', + $this->superAdmin()->password + ) + ->run() + ); + + $this->assertNotNull( + User::where('email', $this->superAdmin()->email)->first() + ); + } +} diff --git a/tests/integration/Commands/UpdateTest.php b/tests/integration/Commands/UpdateTest.php new file mode 100644 index 000000000..4b8b0a41d --- /dev/null +++ b/tests/integration/Commands/UpdateTest.php @@ -0,0 +1,13 @@ +assertExitCodeIsGood($this->artisan('twill:update')->run()); + } +} diff --git a/tests/integration/CommandsTest.php b/tests/integration/CommandsTest.php deleted file mode 100644 index d20120694..000000000 --- a/tests/integration/CommandsTest.php +++ /dev/null @@ -1,96 +0,0 @@ -artisan('twill:module', [ - 'moduleName' => 'Posts', - '--hasBlocks' => true, - '--hasTranslation' => true, - '--hasSlug' => true, - '--hasMedias' => true, - '--hasFiles' => true, - '--hasPosition' => true, - '--hasRevisions' => true, - ]); - - $this->assertFileExists( - twill_path('Http/Controllers/Admin/PostController.php') - ); - - $this->assertIsObject( - $this->app->make(\App\Http\Controllers\Admin\PostController::class) - ); - } - - public function testCanExecuteBlocksCommand() - { - $this->deleteDirectory($path = resource_path('views/admin/blocks')); - $this->deleteDirectory(resource_path(config('twill.custom_vue_blocks_resource_path', 'assets/js/blocks'))); - - $this->artisan('twill:blocks')->expectsOutput( - GenerateBlocks::NO_BLOCKS_DEFINED - ); - - $this->files->makeDirectory( - resource_path('views/admin/blocks'), - 0755, - true - ); - $this->files->makeDirectory( - resource_path(config('twill.custom_vue_blocks_resource_path', 'assets/js/blocks')), - 0755, - true - ); - - $this->artisan('twill:blocks')->expectsOutput( - GenerateBlocks::SCANNING_BLOCKS - ); - - $this->files->copy( - stubs('blocks/quote.blade.php'), - $path . '/quote.blade.php' - ); - - $this->artisan('twill:blocks')->expectsOutput( - 'Block Quote generated successfully' - ); - - $this->assertFileExists( - resource_path(config('twill.custom_vue_blocks_resource_path', 'assets/js/blocks') . '/BlockQuote.vue') - ); - - $this->assertEquals( - read_file(stubs('blocks/BlockQuote.vue')), - read_file(resource_path(config('twill.custom_vue_blocks_resource_path', 'assets/js/blocks') . '/BlockQuote.vue')) - ); - } - - public function testCanExecuteSuperadminCommand() - { - $this->artisan('twill:superadmin') - ->expectsQuestion('Enter an email', $this->superAdmin(true)->email) - ->expectsQuestion('Enter a password', $this->superAdmin()->password) - ->expectsQuestion( - 'Confirm the password', - $this->superAdmin()->password - ); - - $this->assertNotNull( - User::where('email', $this->superAdmin()->email)->first() - ); - } - - public function testCanExecuteUpdateCommand() - { - $this->artisan('twill:update'); - - $this->assertTrue(true); - } -} diff --git a/tests/integration/DashboardTest.php b/tests/integration/DashboardTest.php deleted file mode 100644 index c0ec87567..000000000 --- a/tests/integration/DashboardTest.php +++ /dev/null @@ -1,100 +0,0 @@ -skipOnTravis(); - - $this->loadConfig('{$stubs}/modules/dashboard/twill.php'); /// commenting this line it start working - } - - /** - * This test produce an unknown failure which happens only on Travis. - * - * Please check: https://travis-ci.org/antonioribeiro/twill/jobs/604677960 - * - * moved to ModulesAuthorsTest - */ - public function testCanDisplayDashboard() - { - $this->request('/twill')->assertStatus(200); - - $this->assertSee('Personnel'); - $this->assertSee('Categories'); - - $this->request('/twill/personnel/authors')->assertStatus(200); - - $this->assertSee('Name'); - $this->assertSee('Languages'); - $this->assertSee('Mine'); - $this->assertSee('Add new'); - - $this->request('/twill/categories')->assertStatus(200); - } - - /** - * This test produce an unknown failure which happens only on Travis. - * - * Please check: https://travis-ci.org/antonioribeiro/twill/jobs/604677960 - */ - public function testCanSearchString() - { - $this->createAuthor(3); - - $this->ajax("/twill/search?search={$this->name_en}")->assertStatus(200); - - $this->assertJson($this->content()); - - $result = json_decode($this->content(), true); - - $this->assertGreaterThan(0, count($result)); - - $this->assertEquals( - $this->now->format('Y-m-d\TH:i:s+00:00'), - $result[0]['date'] - ); - } - - /** - * Trying to debug those tests - */ - - // public function testCanDisplayDashboard() - // { - // require $this->makeFileName('{$base}/routes/admin.php'); - // - // dump( - // file_get_contents($this->makeFileName('{$base}/routes/admin.php')) - // ); - // - // try { - // dump(route('admin.personnel.authors.index')); - // } catch (\Exception $e) { - // dump('route admin.personnel.authors.index NOT FOUND'); - // } - // - // dump($this->getUriWithNames()); - // - // $this->request('/twill')->assertStatus(200); - // - // $this->assertSee('Personnel'); - // $this->assertSee('Categories'); - // - // $this->request('/twill/personnel/authors')->assertStatus(200); - // - // $this->assertSee('Name'); - // $this->assertSee('Languages'); - // $this->assertSee('Mine'); - // $this->assertSee('Add new'); - // - // $this->request('/twill/categories')->assertStatus(200); - // } -} diff --git a/tests/integration/ModulesAuthorsTest.php b/tests/integration/ModulesAuthorsTest.php index 1722b0538..f1cc093fa 100644 --- a/tests/integration/ModulesAuthorsTest.php +++ b/tests/integration/ModulesAuthorsTest.php @@ -3,8 +3,8 @@ namespace A17\Twill\Tests\Integration; use App\Models\Author; -use Illuminate\Support\Facades\Schema; use App\Models\Revisions\AuthorRevision; +use Illuminate\Support\Facades\Schema; class ModulesAuthorsTest extends ModulesTestBase { @@ -72,6 +72,24 @@ public function testCanDisplayDashboard() $this->request('/twill/categories')->assertStatus(200); } + public function testCanSearchString() + { + $this->createAuthor(3); + + $this->ajax("/twill/search?search={$this->name_en}")->assertStatus(200); + + $this->assertJson($this->content()); + + $result = json_decode($this->content(), true); + + $this->assertGreaterThan(0, count($result)); + + $this->assertEquals( + $this->now->format('Y-m-d\TH:i:s+00:00'), + $result[0]['date'] + ); + } + public function testCanStartRestoringRevision() { $this->createAuthor(); @@ -342,4 +360,21 @@ public function testCanShowEditFormInModal() $this->assertSee('v-svg symbol="close_modal"'); } + + public function testCanSeeRenderedBlocks() + { + $this->createAuthor(); + $this->editAuthor(); + + putenv('EDIT_IN_MODAL=false'); + + $this->request( + "/twill/personnel/authors/{$this->author->id}/edit" + )->assertStatus(200); + + // Check if it can see a rendered block + $this->assertSee( + '' + ); + } } diff --git a/tests/integration/ModulesTestBase.php b/tests/integration/ModulesTestBase.php index acb72ba1b..cb23491fa 100644 --- a/tests/integration/ModulesTestBase.php +++ b/tests/integration/ModulesTestBase.php @@ -119,11 +119,21 @@ protected function assertNothingWrongHappened() protected function loadConfig($file = null) { - $config = require $this->makeFileName( - $file ?? '{$stubs}/modules/authors/twill.php' - ); + if (blank($file) || Str::contains($file, 'twill.php')) { + $config = require $this->makeFileName( + $file ?? '{$stubs}/modules/authors/twill.php' + ); + + config(['twill' => $config + config('twill')]); + } - config(['twill' => $config + config('twill')]); + if (blank($file) || Str::contains($file, 'translatable.php')) { + $config = require $this->makeFileName( + $file ?? '{$stubs}/modules/authors/translatable.php' + ); + + config(['translatable' => $config]); + } } /** diff --git a/tests/integration/RoutesTest.php b/tests/integration/RoutesTest.php index b1b4b15bc..9f3b8ebc4 100644 --- a/tests/integration/RoutesTest.php +++ b/tests/integration/RoutesTest.php @@ -7,6 +7,7 @@ class RoutesTest extends TestCase const ROUTES = [ 'storage/media-library/{path}', 'twill', + 'twill/admin/icons/{file}', 'twill/blocks/preview', 'twill/categories', 'twill/categories/browser', @@ -98,7 +99,14 @@ class RoutesTest extends TestCase public function testCanListAllRoutes() { - $this->assertEquals(static::ROUTES, $this->getAllUris()->toArray()); + $this->assertEquals( + collect(static::ROUTES) + ->sort() + ->toArray(), + $this->getAllUris() + ->sort() + ->toArray() + ); } /** diff --git a/tests/integration/TestCase.php b/tests/integration/TestCase.php index 8f2c512e4..e7389353e 100644 --- a/tests/integration/TestCase.php +++ b/tests/integration/TestCase.php @@ -14,9 +14,12 @@ use Illuminate\Contracts\Console\Kernel; use A17\Twill\ValidationServiceProvider; use Orchestra\Testbench\TestCase as OrchestraTestCase; +use A17\Twill\Tests\Integration\Behaviors\CopyBlocks; abstract class TestCase extends OrchestraTestCase { + use CopyBlocks; + const DATABASE_MEMORY = ':memory:'; const DEFAULT_PASSWORD = 'secret'; const DEFAULT_LOCALE = 'en_US'; @@ -95,6 +98,8 @@ public function setUp(): void $this->instantiateFaker(); + $this->copyBlocks(); + $this->installTwill(); } @@ -111,6 +116,7 @@ public function configTwill($app) $app['config']->set('twill.enabled.users-2fa', true); $app['config']->set('twill.enabled.users-image', true); $app['config']->set('twill.auth_login_redirect_path', '/twill'); + $app['config']->set('translatable.locales', ['en', 'fr', 'pt-BR']); } /** @@ -176,7 +182,7 @@ protected function login() $this->request('/twill/login', 'POST', [ 'email' => $this->superAdmin()->email, 'password' => $this->superAdmin()->unencrypted_password, - ])->assertStatus(200); + ]); return $this->crawler; } @@ -489,12 +495,19 @@ public function freezeTime() public function copyFiles($files) { collect($files)->each(function ($destination, $source) { - $this->files->copy( - $this->makeFileName($source), - $this->makeFileName($destination, $source) - ); + collect($destination)->each(function ($destination) use ($source) { + $source = $this->makeFileName($source); - usleep(1000 * 100); // 100ms + $destination = $this->makeFileName($destination, $source); + + if (!$this->files->exists($directory = dirname($destination))) { + $this->files->makeDirectory($directory, 0755, true); + } + + $this->files->copy($source, $destination); + + usleep(1000 * 100); // 100ms + }); }); } @@ -515,6 +528,8 @@ public function makeFileName($file, $source = null) '{$app}', '{$resources}', '{$config}', + '{$vendor}', + '{$tests}', ], [ stubs(), @@ -523,11 +538,15 @@ public function makeFileName($file, $source = null) app_path(), resource_path(), config_path(), + base_path('vendor'), + __DIR__, ], $file ); - if (filled($source) && !Str::endsWith($file, '.php')) { + $extension = pathinfo($file, PATHINFO_EXTENSION); + + if (filled($source) && !Str::endsWith($file, ".{$extension}")) { $file = $file . basename($source); } @@ -579,4 +598,39 @@ public function skipOnTravis() $this->markTestSkipped('This test cannot be execute on Travis'); } } + + /** + * Skip test if running on Travis + * + * @param int $exitCode + * @throws \Exception + */ + public function assertExitCodeIsGood($exitCode) + { + if ($exitCode !== 0) { + throw new \Exception( + "Test ended with exit code {$exitCode}. Non-fatal errors possibly happened during tests." + ); + } + } + + /** + * Skip test if running on Travis + * + * @param int $exitCode + * @throws \Exception + */ + public function assertExitCodeIsNotGood($exitCode) + { + if ($exitCode === 0) { + throw new \Exception( + "Test ended with exit code 0, but this wasn't supposed to happen!" + ); + } + } + + public function getCommand($commandName) + { + return $this->app->make(Kernel::class)->all()[$commandName]; + } } diff --git a/tests/stubs/blocks/BlockQuote.vue b/tests/stubs/blocks/BlockQuote.vue deleted file mode 100644 index 38081970b..000000000 --- a/tests/stubs/blocks/BlockQuote.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/tests/stubs/blocks/quote.blade.php b/tests/stubs/blocks/quote.blade.php deleted file mode 100644 index 01facc345..000000000 --- a/tests/stubs/blocks/quote.blade.php +++ /dev/null @@ -1,7 +0,0 @@ -@formField('input', [ - 'name' => 'quote', - 'type' => 'textarea', - 'label' => 'Quote text', - 'maxlength' => 250, - 'rows' => 4 -]) diff --git a/tests/stubs/modules/authors/twill.php b/tests/stubs/modules/authors/twill.php index 8640f1875..186279e72 100644 --- a/tests/stubs/modules/authors/twill.php +++ b/tests/stubs/modules/authors/twill.php @@ -7,14 +7,6 @@ 'block_views_mappings' => [], 'block_preview_render_childs' => true, - 'blocks' => [ - 'quote' => [ - 'title' => 'Quote', - 'icon' => 'text', - 'component' => 'a17-block-quote', - ], - ], - 'crops' => [ 'avatar' => [ 'default' => [ @@ -29,5 +21,82 @@ ], ], ], + + 'directories' => [ + 'source' => [ + 'blocks' => [ + [ + 'path' => base_path( + 'vendor/area17/twill/src/Commands/stubs/blocks' + ), + 'source' => + A17\Twill\Services\Blocks\Block::SOURCE_TWILL, + ], + [ + 'path' => resource_path('views/admin/blocks'), + 'source' => A17\Twill\Services\Blocks\Block::SOURCE_APP, + ], + ], + + 'repeaters' => [ + [ + 'path' => resource_path('views/admin/repeaters'), + 'source' => A17\Twill\Services\Blocks\Block::SOURCE_APP, + ], + [ + 'path' => base_path( + 'vendor/area17/twill/src/Commands/stubs/repeaters' + ), + 'source' => + A17\Twill\Services\Blocks\Block::SOURCE_TWILL, + ], + ], + + 'icons' => [ + base_path('vendor/area17/twill/frontend/icons'), + resource_path('views/admin/icons'), + ], + ], + + 'destination' => [ + 'make_dir' => true, + + 'blocks' => resource_path('views/admin/blocks'), + + 'repeaters' => resource_path('views/admin/repeaters'), + ], + ], + ], + 'dashboard' => [ + 'modules' => [ + App\Models\Author::class => [ + 'name' => 'authors', // module name + 'label' => 'authors', // optional, if the name of your module above does not work as a label + 'label_singular' => 'author', // optional, if the automated singular version of your name/label above does not work as a label + 'routePrefix' => 'personnel', // optional, if the module is living under a specific routes group + 'count' => true, // show total count with link to index of this module + 'create' => true, // show link in create new dropdown + 'activity' => true, // show activities on this module in actities list + 'draft' => true, // show drafts of this module for current user + 'search' => true, // show results for this module in global search + 'search_fields' => ['name'], + ], + + App\Models\Category::class => [ + 'name' => 'categories', // module name + 'label' => 'categories', // optional, if the name of your module above does not work as a label + 'label_singular' => 'category', // optional, if the automated singular version of your name/label above does not work as a label + 'routePrefix' => '', // optional, if the module is living under a specific routes group + 'count' => true, // show total count with link to index of this module + 'create' => true, // show link in create new dropdown + 'activity' => true, // show activities on this module in actities list + 'draft' => true, // show drafts of this module for current user + 'search' => true, // show results for this module in global search + ], + ], + + 'analytics' => ['enabled' => false], + + 'search_endpoint' => 'admin.search', ], ]; diff --git a/tests/stubs/modules/dashboard/twill.php b/tests/stubs/modules/dashboard/twill.php deleted file mode 100644 index e3f78f19f..000000000 --- a/tests/stubs/modules/dashboard/twill.php +++ /dev/null @@ -1,36 +0,0 @@ - [ - 'modules' => [ - App\Models\Author::class => [ - 'name' => 'authors', // module name - 'label' => 'authors', // optional, if the name of your module above does not work as a label - 'label_singular' => 'author', // optional, if the automated singular version of your name/label above does not work as a label - 'routePrefix' => 'personnel', // optional, if the module is living under a specific routes group - 'count' => true, // show total count with link to index of this module - 'create' => true, // show link in create new dropdown - 'activity' => true, // show activities on this module in actities list - 'draft' => true, // show drafts of this module for current user - 'search' => true, // show results for this module in global search - 'search_fields' => ['name'], - ], - - App\Models\Category::class => [ - 'name' => 'categories', // module name - 'label' => 'categories', // optional, if the name of your module above does not work as a label - 'label_singular' => 'category', // optional, if the automated singular version of your name/label above does not work as a label - 'routePrefix' => '', // optional, if the module is living under a specific routes group - 'count' => true, // show total count with link to index of this module - 'create' => true, // show link in create new dropdown - 'activity' => true, // show activities on this module in actities list - 'draft' => true, // show drafts of this module for current user - 'search' => true, // show results for this module in global search - ], - ], - - 'analytics' => ['enabled' => false], - - 'search_endpoint' => 'admin.search', - ], -]; diff --git a/views/layouts/form.blade.php b/views/layouts/form.blade.php index 738d64b1c..e2090936c 100644 --- a/views/layouts/form.blade.php +++ b/views/layouts/form.blade.php @@ -119,7 +119,7 @@ previewUrl: '{{ $previewUrl ?? '' }}', restoreUrl: '{{ $restoreUrl ?? '' }}', blockPreviewUrl: '{{ $blockPreviewUrl ?? '' }}', - availableRepeaters: {!! json_encode(config('twill.block_editor.repeaters')) !!}, + availableRepeaters: {!! $availableRepeaters !!}, repeaters: {!! json_encode(($form_fields['repeaters'] ?? []) + ($form_fields['blocksRepeaters'] ?? [])) !!}, fields: [], editor: {{ $editor ? 'true' : 'false' }}, diff --git a/views/partials/form/_block_editor.blade.php b/views/partials/form/_block_editor.blade.php index 5c21362a8..ac726a5f2 100644 --- a/views/partials/form/_block_editor.blade.php +++ b/views/partials/form/_block_editor.blade.php @@ -8,19 +8,7 @@ @php - if (isset($blocks)) { - $allowedBlocks = collect($blocks)->mapWithKeys(function ($block) { - return [$block => config('twill.block_editor.blocks.' . $block)]; - })->filter()->toArray(); - } elseif (isset($group)) { - $blocks = config('twill.block_editor.blocks'); - - $allowedBlocks = array_filter($blocks, function ($block) use ($group) { - return isset($block['group']) && $block['group'] === $group; - }); - } else { - $allowedBlocks = config('twill.block_editor.blocks'); - } + $allowedBlocks = generate_list_of_available_blocks($blocks ?? null, $groups ?? null); @endphp @push('vuexStore') diff --git a/views/partials/form/utils/_blocks_templates.blade.php b/views/partials/form/utils/_blocks_templates.blade.php index fe6963e12..71bfe1725 100644 --- a/views/partials/form/utils/_blocks_templates.blade.php +++ b/views/partials/form/utils/_blocks_templates.blade.php @@ -1,26 +1,21 @@ - - @php - $allBlocks = (config('twill.block_editor.blocks') ?? []) + (config('twill.block_editor.repeaters') ?? []); + $blocks = app(\A17\Twill\Services\Blocks\BlockCollection::class) + ->collect() + ->reject(function ($block) { + return $block->compiled ?? false; + }); - $blocksForInlineTemplates = collect($allBlocks)->reject(function ($block) { - return $block['compiled'] ?? false; - })->filter(function ($block, $blockName) { - return View::exists('admin.blocks.'.$blockName); - }); + $names = $blocks->pluck('name')->values()->toJson(); @endphp -@foreach($blocksForInlineTemplates as $blockName => $block) - - + +@foreach($blocks as $block) + @endforeach