From e5135f6719ee253b314258963dd5c4e841fbdafd Mon Sep 17 00:00:00 2001 From: Simon Baese Date: Sat, 15 Apr 2023 17:05:16 +0200 Subject: [PATCH 1/4] Upgrade to Drupal 9.4.13 and dependencies --- composer.json | 3 +- composer.lock | 2292 +++++++++-------- .../exclude_consumer_entity_type.patch | 26 +- .../jsonapi_include/JAI8x-14-3238138-1.patch | 11 +- patches/simple_oauth/SO52-3082984-12.patch | 359 +-- .../custom-token-revoke-profile-update.patch | 506 +++- 6 files changed, 1942 insertions(+), 1255 deletions(-) diff --git a/composer.json b/composer.json index 9f8d440b..b90ce008 100644 --- a/composer.json +++ b/composer.json @@ -35,6 +35,7 @@ "drupal/multivalue_form_element": "^1.0@beta", "drupal/simple_oauth": "^5.2", "drupal/subrequests": "^3.0", + "drupal/upgrade_status": "^4.0", "drupal/user_bundle": "^1.1", "drush/drush": "^10.6" }, @@ -115,7 +116,7 @@ "enable-patching": true, "patchLevel": { "drupal/core": "-p2", - "drupal/simple_oauth": "-p4", + "drupal/simple_oauth": "-p1", "drupal/image_style_warmer": "-p4", "drupal/jsonapi_include": "-p4", "drupal/jsonapi_boost": "-p4", diff --git a/composer.lock b/composer.lock index 87401ff3..a6ec6e0e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d1ca8a1a747c54f04e6e7f606d98f997", + "content-hash": "54f508387b71f8a360015f4bd8f09e61", "packages": [ { "name": "asm89/stack-cors", @@ -348,16 +348,16 @@ }, { "name": "consolidation/annotated-command", - "version": "4.5.6", + "version": "4.8.2", "source": { "type": "git", "url": "https://github.com/consolidation/annotated-command.git", - "reference": "3968070538761628546270935f0733a0cc408e1f" + "reference": "7f5dd1aafb93a10593ed70f3caa6a0cd5a32f0e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/3968070538761628546270935f0733a0cc408e1f", - "reference": "3968070538761628546270935f0733a0cc408e1f", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/7f5dd1aafb93a10593ed70f3caa6a0cd5a32f0e3", + "reference": "7f5dd1aafb93a10593ed70f3caa6a0cd5a32f0e3", "shasum": "" }, "require": { @@ -398,9 +398,9 @@ "description": "Initialize Symfony Console commands from annotated command class methods.", "support": { "issues": "https://github.com/consolidation/annotated-command/issues", - "source": "https://github.com/consolidation/annotated-command/tree/4.5.6" + "source": "https://github.com/consolidation/annotated-command/tree/4.8.2" }, - "time": "2022-06-22T20:17:12+00:00" + "time": "2023-03-11T19:32:28+00:00" }, { "name": "consolidation/config", @@ -611,41 +611,36 @@ }, { "name": "consolidation/output-formatters", - "version": "4.2.2", + "version": "4.2.4", "source": { "type": "git", "url": "https://github.com/consolidation/output-formatters.git", - "reference": "d57992bf81ead908ee21cd94b46ed65afa2e785b" + "reference": "b377db7e9435c50c4e019c26ec164b547e754ca0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/d57992bf81ead908ee21cd94b46ed65afa2e785b", - "reference": "d57992bf81ead908ee21cd94b46ed65afa2e785b", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/b377db7e9435c50c4e019c26ec164b547e754ca0", + "reference": "b377db7e9435c50c4e019c26ec164b547e754ca0", "shasum": "" }, "require": { "dflydev/dot-access-data": "^1.1.0 || ^2 || ^3", "php": ">=7.1.3", - "symfony/console": "^4|^5|^6", - "symfony/finder": "^4|^5|^6" + "symfony/console": "^4 || ^5 || ^6", + "symfony/finder": "^4 || ^5 || ^6" }, "require-dev": { "php-coveralls/php-coveralls": "^2.4.2", - "phpunit/phpunit": ">=7", + "phpunit/phpunit": "^7 || ^8 || ^9", "squizlabs/php_codesniffer": "^3", - "symfony/var-dumper": "^4|^5|^6", - "symfony/yaml": "^4|^5|^6", - "yoast/phpunit-polyfills": "^0.2.0" + "symfony/var-dumper": "^4 || ^5 || ^6", + "symfony/yaml": "^4 || ^5 || ^6", + "yoast/phpunit-polyfills": "^1" }, "suggest": { "symfony/var-dumper": "For using the var_dump formatter" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.x-dev" - } - }, "autoload": { "psr-4": { "Consolidation\\OutputFormatters\\": "src" @@ -664,22 +659,22 @@ "description": "Format text by applying transformations provided by plug-in formatters.", "support": { "issues": "https://github.com/consolidation/output-formatters/issues", - "source": "https://github.com/consolidation/output-formatters/tree/4.2.2" + "source": "https://github.com/consolidation/output-formatters/tree/4.2.4" }, - "time": "2022-02-13T15:28:30+00:00" + "time": "2023-02-24T03:39:10+00:00" }, { "name": "consolidation/robo", - "version": "3.0.10", + "version": "3.0.11", "source": { "type": "git", "url": "https://github.com/consolidation/robo.git", - "reference": "206bbe23b34081a36bfefc4de2abbc1abcd29ef4" + "reference": "820fa0f164f77887e268b7dbfb2283416c7334c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/robo/zipball/206bbe23b34081a36bfefc4de2abbc1abcd29ef4", - "reference": "206bbe23b34081a36bfefc4de2abbc1abcd29ef4", + "url": "https://api.github.com/repos/consolidation/robo/zipball/820fa0f164f77887e268b7dbfb2283416c7334c1", + "reference": "820fa0f164f77887e268b7dbfb2283416c7334c1", "shasum": "" }, "require": { @@ -763,22 +758,22 @@ "description": "Modern task runner", "support": { "issues": "https://github.com/consolidation/robo/issues", - "source": "https://github.com/consolidation/robo/tree/3.0.10" + "source": "https://github.com/consolidation/robo/tree/3.0.11" }, - "time": "2022-02-21T17:19:14+00:00" + "time": "2022-12-07T15:18:26+00:00" }, { "name": "consolidation/self-update", - "version": "2.0.5", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/consolidation/self-update.git", - "reference": "8a64bdd8daf5faa8e85f56534dd99caf928164b3" + "reference": "714b09fdf0513f83292874bb12de0566066040c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/self-update/zipball/8a64bdd8daf5faa8e85f56534dd99caf928164b3", - "reference": "8a64bdd8daf5faa8e85f56534dd99caf928164b3", + "url": "https://api.github.com/repos/consolidation/self-update/zipball/714b09fdf0513f83292874bb12de0566066040c2", + "reference": "714b09fdf0513f83292874bb12de0566066040c2", "shasum": "" }, "require": { @@ -818,28 +813,30 @@ "description": "Provides a self:update command for Symfony Console applications.", "support": { "issues": "https://github.com/consolidation/self-update/issues", - "source": "https://github.com/consolidation/self-update/tree/2.0.5" + "source": "https://github.com/consolidation/self-update/tree/2.1.0" }, - "time": "2022-02-09T22:44:24+00:00" + "time": "2023-02-21T19:33:55+00:00" }, { "name": "consolidation/site-alias", - "version": "3.1.5", + "version": "3.1.7", "source": { "type": "git", "url": "https://github.com/consolidation/site-alias.git", - "reference": "ef2eb7d37e59b3d837b4556d4d8070cb345b378c" + "reference": "3b6519592c7e8557423f935806cd73adf69ed6c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/site-alias/zipball/ef2eb7d37e59b3d837b4556d4d8070cb345b378c", - "reference": "ef2eb7d37e59b3d837b4556d4d8070cb345b378c", + "url": "https://api.github.com/repos/consolidation/site-alias/zipball/3b6519592c7e8557423f935806cd73adf69ed6c7", + "reference": "3b6519592c7e8557423f935806cd73adf69ed6c7", "shasum": "" }, "require": { "consolidation/config": "^1.2.1 || ^2", "php": ">=5.5.0", - "symfony/finder": "~2.3 || ^3 || ^4.4 || ^5 || ^6" + "symfony/filesystem": "^4.4 || ^5.4 || ^6", + "symfony/finder": "~2.3 || ^3 || ^4.4 || ^5 || ^6", + "webmozart/path-util": "^2.3" }, "require-dev": { "php-coveralls/php-coveralls": "^2.4.2", @@ -876,33 +873,33 @@ "description": "Manage alias records for local and remote sites.", "support": { "issues": "https://github.com/consolidation/site-alias/issues", - "source": "https://github.com/consolidation/site-alias/tree/3.1.5" + "source": "https://github.com/consolidation/site-alias/tree/3.1.7" }, - "time": "2022-02-23T23:59:18+00:00" + "time": "2022-10-15T01:21:09+00:00" }, { "name": "consolidation/site-process", - "version": "4.2.0", + "version": "4.2.1", "source": { "type": "git", "url": "https://github.com/consolidation/site-process.git", - "reference": "9ef08d471573d6a56405b06ef6830dd70c883072" + "reference": "ee3bf69001694b2117cc2f96c2ef70d8d45f1234" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/site-process/zipball/9ef08d471573d6a56405b06ef6830dd70c883072", - "reference": "9ef08d471573d6a56405b06ef6830dd70c883072", + "url": "https://api.github.com/repos/consolidation/site-process/zipball/ee3bf69001694b2117cc2f96c2ef70d8d45f1234", + "reference": "ee3bf69001694b2117cc2f96c2ef70d8d45f1234", "shasum": "" }, "require": { - "consolidation/config": "^1.2.1|^2", - "consolidation/site-alias": "^3", + "consolidation/config": "^1.2.1 || ^2", + "consolidation/site-alias": "^3 || ^4", "php": ">=7.1.3", - "symfony/console": "^2.8.52|^3|^4.4|^5", - "symfony/process": "^4.3.4|^5" + "symfony/console": "^2.8.52 || ^3 || ^4.4 || ^5", + "symfony/process": "^4.3.4 || ^5" }, "require-dev": { - "phpunit/phpunit": "^7.5.20|^8.5.14", + "phpunit/phpunit": "^7.5.20 || ^8.5.14", "squizlabs/php_codesniffer": "^3", "yoast/phpunit-polyfills": "^0.2.0" }, @@ -934,22 +931,22 @@ "description": "A thin wrapper around the Symfony Process Component that allows applications to use the Site Alias library to specify the target for a remote call.", "support": { "issues": "https://github.com/consolidation/site-process/issues", - "source": "https://github.com/consolidation/site-process/tree/4.2.0" + "source": "https://github.com/consolidation/site-process/tree/4.2.1" }, - "time": "2022-02-19T04:09:55+00:00" + "time": "2022-10-18T13:19:35+00:00" }, { "name": "cweagans/composer-patches", - "version": "1.7.2", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/cweagans/composer-patches.git", - "reference": "e9969cfc0796e6dea9b4e52f77f18e1065212871" + "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/e9969cfc0796e6dea9b4e52f77f18e1065212871", - "reference": "e9969cfc0796e6dea9b4e52f77f18e1065212871", + "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/e190d4466fe2b103a55467dfa83fc2fecfcaf2db", + "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db", "shasum": "" }, "require": { @@ -982,9 +979,9 @@ "description": "Provides a way to patch Composer packages.", "support": { "issues": "https://github.com/cweagans/composer-patches/issues", - "source": "https://github.com/cweagans/composer-patches/tree/1.7.2" + "source": "https://github.com/cweagans/composer-patches/tree/1.7.3" }, - "time": "2022-01-25T19:21:20+00:00" + "time": "2022-12-20T22:53:13+00:00" }, { "name": "defuse/php-encryption", @@ -1344,28 +1341,28 @@ }, { "name": "drupal/consumer_image_styles", - "version": "4.0.7", + "version": "4.0.8", "source": { "type": "git", "url": "https://git.drupalcode.org/project/consumer_image_styles.git", - "reference": "4.0.7" + "reference": "4.0.8" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/consumer_image_styles-4.0.7.zip", - "reference": "4.0.7", - "shasum": "662458f51f558765d6a5bf98df670a7254dec310" + "url": "https://ftp.drupal.org/files/projects/consumer_image_styles-4.0.8.zip", + "reference": "4.0.8", + "shasum": "b68f5981cb243edc0c13081100b90b03a00e107e" }, "require": { - "drupal/consumers": "^1.11", - "drupal/core": "^8 || ^9", - "drupal/jsonapi_extras": "^3.16" + "drupal/consumers": "^1.15", + "drupal/core": "^8 || ^9 || ^10", + "drupal/jsonapi_extras": "^3.23" }, "type": "drupal-module", "extra": { "drupal": { - "version": "4.0.7", - "datestamp": "1650559369", + "version": "4.0.8", + "datestamp": "1670566326", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -1391,17 +1388,17 @@ }, { "name": "drupal/consumers", - "version": "1.13.0", + "version": "1.17.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/consumers.git", - "reference": "8.x-1.13" + "reference": "8.x-1.17" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/consumers-8.x-1.13.zip", - "reference": "8.x-1.13", - "shasum": "6cb3a738e09698c539c0cf77c651fe4384eb359f" + "url": "https://ftp.drupal.org/files/projects/consumers-8.x-1.17.zip", + "reference": "8.x-1.17", + "shasum": "8e7efc2c8386ead8ca459a1a5e0558fb66cde142" }, "require": { "drupal/core": "^8 || ^9 || ^10" @@ -1409,8 +1406,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.13", - "datestamp": "1657809825", + "version": "8.x-1.17", + "datestamp": "1679920063", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -1439,16 +1436,16 @@ }, { "name": "drupal/core", - "version": "9.4.6", + "version": "9.4.13", "source": { "type": "git", "url": "https://github.com/drupal/core.git", - "reference": "a5c83e4ac0d8eb46f06a97a8b85bcbfa08a70701" + "reference": "8ad87c86ce88504a0f8b3f8a5f8cc350da48dc4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core/zipball/a5c83e4ac0d8eb46f06a97a8b85bcbfa08a70701", - "reference": "a5c83e4ac0d8eb46f06a97a8b85bcbfa08a70701", + "url": "https://api.github.com/repos/drupal/core/zipball/8ad87c86ce88504a0f8b3f8a5f8cc350da48dc4d", + "reference": "8ad87c86ce88504a0f8b3f8a5f8cc350da48dc4d", "shasum": "" }, "require": { @@ -1494,7 +1491,7 @@ "symfony/translation": "^4.4", "symfony/validator": "^4.4", "symfony/yaml": "^4.4.19", - "twig/twig": "^2.15", + "twig/twig": "^2.15.3", "typo3/phar-stream-wrapper": "^3.1.3" }, "conflict": { @@ -1600,13 +1597,13 @@ ], "description": "Drupal is an open source content management platform powering millions of websites and applications.", "support": { - "source": "https://github.com/drupal/core/tree/9.4.6" + "source": "https://github.com/drupal/core/tree/9.4.13" }, - "time": "2022-09-20T13:22:39+00:00" + "time": "2023-03-24T13:11:03+00:00" }, { "name": "drupal/core-composer-scaffold", - "version": "9.4.6", + "version": "9.4.13", "source": { "type": "git", "url": "https://github.com/drupal/core-composer-scaffold.git", @@ -1650,13 +1647,13 @@ "drupal" ], "support": { - "source": "https://github.com/drupal/core-composer-scaffold/tree/9.4.6" + "source": "https://github.com/drupal/core-composer-scaffold/tree/9.4.13" }, "time": "2022-06-19T16:14:23+00:00" }, { "name": "drupal/core-project-message", - "version": "9.4.6", + "version": "9.4.13", "source": { "type": "git", "url": "https://github.com/drupal/core-project-message.git", @@ -1691,22 +1688,22 @@ "drupal" ], "support": { - "source": "https://github.com/drupal/core-project-message/tree/9.5.0-beta1" + "source": "https://github.com/drupal/core-project-message/tree/9.5.6" }, "time": "2022-02-24T17:40:53+00:00" }, { "name": "drupal/core-recommended", - "version": "9.4.6", + "version": "9.4.13", "source": { "type": "git", "url": "https://github.com/drupal/core-recommended.git", - "reference": "d8b7fa96de13d4e7c9ec3c5d9769cc87b74d7986" + "reference": "b598c6eab4af86049360db98794e6ee25ba01c61" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core-recommended/zipball/d8b7fa96de13d4e7c9ec3c5d9769cc87b74d7986", - "reference": "d8b7fa96de13d4e7c9ec3c5d9769cc87b74d7986", + "url": "https://api.github.com/repos/drupal/core-recommended/zipball/b598c6eab4af86049360db98794e6ee25ba01c61", + "reference": "b598c6eab4af86049360db98794e6ee25ba01c61", "shasum": "" }, "require": { @@ -1715,7 +1712,7 @@ "doctrine/annotations": "~1.13.2", "doctrine/lexer": "~1.2.3", "doctrine/reflection": "~1.2.3", - "drupal/core": "9.4.6", + "drupal/core": "9.4.13", "egulias/email-validator": "~3.2", "guzzlehttp/guzzle": "~6.5.8", "guzzlehttp/promises": "~1.5.1", @@ -1737,34 +1734,34 @@ "ralouphie/getallheaders": "~3.0.3", "stack/builder": "~v1.0.6", "symfony-cmf/routing": "~2.3.4", - "symfony/console": "~v4.4.42", - "symfony/debug": "~v4.4.41", - "symfony/dependency-injection": "~v4.4.42", - "symfony/deprecation-contracts": "~v2.5.1", - "symfony/error-handler": "~v4.4.41", - "symfony/event-dispatcher": "~v4.4.42", - "symfony/event-dispatcher-contracts": "~v1.1.12", - "symfony/http-client-contracts": "~v2.5.1", - "symfony/http-foundation": "~v4.4.41", - "symfony/http-kernel": "~v4.4.42", - "symfony/mime": "~v5.4.9", - "symfony/polyfill-ctype": "~v1.25.0", - "symfony/polyfill-iconv": "~v1.25.0", - "symfony/polyfill-intl-idn": "~v1.25.0", - "symfony/polyfill-intl-normalizer": "~v1.25.0", - "symfony/polyfill-mbstring": "~v1.25.0", - "symfony/polyfill-php80": "~v1.25.0", - "symfony/process": "~v4.4.41", - "symfony/psr-http-message-bridge": "~v2.1.2", - "symfony/routing": "~v4.4.41", - "symfony/serializer": "~v4.4.42", - "symfony/service-contracts": "~v2.5.1", - "symfony/translation": "~v4.4.41", - "symfony/translation-contracts": "~v2.5.1", - "symfony/validator": "~v4.4.41", - "symfony/var-dumper": "~v5.4.9", - "symfony/yaml": "~v4.4.37", - "twig/twig": "~v2.15.1", + "symfony/console": "~v4.4.49", + "symfony/debug": "~v4.4.44", + "symfony/dependency-injection": "~v4.4.49", + "symfony/deprecation-contracts": "~v2.5.2", + "symfony/error-handler": "~v4.4.44", + "symfony/event-dispatcher": "~v4.4.44", + "symfony/event-dispatcher-contracts": "~v1.1.13", + "symfony/http-client-contracts": "~v2.5.2", + "symfony/http-foundation": "~v4.4.49", + "symfony/http-kernel": "~v4.4.50", + "symfony/mime": "~v5.4.13", + "symfony/polyfill-ctype": "~v1.27.0", + "symfony/polyfill-iconv": "~v1.27.0", + "symfony/polyfill-intl-idn": "~v1.27.0", + "symfony/polyfill-intl-normalizer": "~v1.27.0", + "symfony/polyfill-mbstring": "~v1.27.0", + "symfony/polyfill-php80": "~v1.27.0", + "symfony/process": "~v4.4.44", + "symfony/psr-http-message-bridge": "~v2.1.4", + "symfony/routing": "~v4.4.44", + "symfony/serializer": "~v4.4.47", + "symfony/service-contracts": "~v2.5.2", + "symfony/translation": "~v4.4.47", + "symfony/translation-contracts": "~v2.5.2", + "symfony/validator": "~v4.4.48", + "symfony/var-dumper": "~v5.4.19", + "symfony/yaml": "~v4.4.45", + "twig/twig": "~v2.15.3", "typo3/phar-stream-wrapper": "~v3.1.7" }, "conflict": { @@ -1777,13 +1774,13 @@ ], "description": "Core and its dependencies with known-compatible minor versions. Require this project INSTEAD OF drupal/core.", "support": { - "source": "https://github.com/drupal/core-recommended/tree/9.4.6" + "source": "https://github.com/drupal/core-recommended/tree/9.4.13" }, - "time": "2022-09-20T13:22:39+00:00" + "time": "2023-03-24T13:11:03+00:00" }, { "name": "drupal/core-vendor-hardening", - "version": "9.4.6", + "version": "9.4.13", "source": { "type": "git", "url": "https://github.com/drupal/core-vendor-hardening.git", @@ -1818,7 +1815,7 @@ "drupal" ], "support": { - "source": "https://github.com/drupal/core-vendor-hardening/tree/9.5.0-beta1" + "source": "https://github.com/drupal/core-vendor-hardening/tree/9.5.0-rc1" }, "time": "2022-02-24T17:40:53+00:00" }, @@ -1943,20 +1940,20 @@ }, { "name": "drupal/filefield_paths", - "version": "1.0.0-beta5", + "version": "1.0.0-beta6", "source": { "type": "git", "url": "https://git.drupalcode.org/project/filefield_paths.git", - "reference": "8.x-1.0-beta5" + "reference": "8.x-1.0-beta6" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/filefield_paths-8.x-1.0-beta5.zip", - "reference": "8.x-1.0-beta5", - "shasum": "06719aaeee87bf5abdfb75e0079fcaf0bbd996a6" + "url": "https://ftp.drupal.org/files/projects/filefield_paths-8.x-1.0-beta6.zip", + "reference": "8.x-1.0-beta6", + "shasum": "fc28e2e228c0afc59aede549a76eba9801657b2a" }, "require": { - "drupal/core": "^8.8 || ^9" + "drupal/core": "^9.3 || ^10" }, "require-dev": { "drupal/ctools": "*", @@ -1967,8 +1964,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.0-beta5", - "datestamp": "1606806673", + "version": "8.x-1.0-beta6", + "datestamp": "1671040487", "security-coverage": { "status": "not-covered", "message": "Beta releases are not covered by Drupal security advisories." @@ -1977,7 +1974,7 @@ }, "notification-url": "https://packages.drupal.org/8/downloads", "license": [ - "GPL-2.0-or-later" + "GPL-2.0+" ], "authors": [ { @@ -1989,8 +1986,15 @@ "homepage": "https://www.drupal.org/user/3260314" } ], - "description": "Adds improved Token based file sorting and renaming functionalities.", + "description": "File (Field) Paths. Adds improved Token based file sorting and renaming functionalities.", "homepage": "https://www.drupal.org/project/filefield_paths", + "keywords": [ + "drupal", + "field", + "file", + "path", + "token" + ], "support": { "source": "https://git.drupalcode.org/project/filefield_paths" } @@ -2137,28 +2141,28 @@ }, { "name": "drupal/jsonapi_boost", - "version": "2.0.2", + "version": "2.0.4", "source": { "type": "git", "url": "https://git.drupalcode.org/project/jsonapi_boost.git", - "reference": "2.0.2" + "reference": "2.0.4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/jsonapi_boost-2.0.2.zip", - "reference": "2.0.2", - "shasum": "6ef25e73786e277451efea6b46d90dd4a6db3957" + "url": "https://ftp.drupal.org/files/projects/jsonapi_boost-2.0.4.zip", + "reference": "2.0.4", + "shasum": "7a884a31cc71d3dd60f6222e7427be34847a1456" }, "require": { - "drupal/core": "^8 || ^9", + "drupal/core": "^9 || ^10", "drupal/jsonapi_extras": "*", "drupal/warmer": "*" }, "type": "drupal-module", "extra": { "drupal": { - "version": "2.0.2", - "datestamp": "1643795517", + "version": "2.0.4", + "datestamp": "1674562984", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2239,20 +2243,20 @@ }, { "name": "drupal/jsonapi_extras", - "version": "3.21.0", + "version": "3.23.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/jsonapi_extras.git", - "reference": "8.x-3.21" + "reference": "8.x-3.23" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/jsonapi_extras-8.x-3.21.zip", - "reference": "8.x-3.21", - "shasum": "8919207269fa9e36ba0353380988ed933c957e0f" + "url": "https://ftp.drupal.org/files/projects/jsonapi_extras-8.x-3.23.zip", + "reference": "8.x-3.23", + "shasum": "2f3518bc1372f01a1ccebcffaa4e7e08478103e0" }, "require": { - "drupal/core": "^8 || ^9", + "drupal/core": "^9.2 || ^10", "e0ipso/shaper": "^1" }, "require-dev": { @@ -2261,8 +2265,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-3.21", - "datestamp": "1659004732", + "version": "8.x-3.23", + "datestamp": "1669374477", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2300,26 +2304,26 @@ }, { "name": "drupal/jsonapi_include", - "version": "1.5.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/jsonapi_include.git", - "reference": "8.x-1.5" + "reference": "8.x-1.6" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/jsonapi_include-8.x-1.5.zip", - "reference": "8.x-1.5", - "shasum": "74a5c7d0cd0ed07bcf3204e0de5258007cb54403" + "url": "https://ftp.drupal.org/files/projects/jsonapi_include-8.x-1.6.zip", + "reference": "8.x-1.6", + "shasum": "cca6bb93c9daa5cc45b0cb38d432361764a24bf2" }, "require": { - "drupal/core": "^8 || ^9" + "drupal/core": "^8 || ^9 || ^10" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.5", - "datestamp": "1659750821", + "version": "8.x-1.6", + "datestamp": "1672039988", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2348,26 +2352,26 @@ }, { "name": "drupal/mail_login", - "version": "2.6.0", + "version": "2.7.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/mail_login.git", - "reference": "8.x-2.6" + "reference": "8.x-2.7" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/mail_login-8.x-2.6.zip", - "reference": "8.x-2.6", - "shasum": "1cb038bba09f5c8b9e6972b6f09caef773255a7a" + "url": "https://ftp.drupal.org/files/projects/mail_login-8.x-2.7.zip", + "reference": "8.x-2.7", + "shasum": "2a56e1c0dd10d42afaa117a290b0de1c837563cb" }, "require": { - "drupal/core": "^8 || ^9" + "drupal/core": "^8 || ^9 || ^10" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.6", - "datestamp": "1640215989", + "version": "8.x-2.7", + "datestamp": "1676507580", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2400,83 +2404,34 @@ }, { "name": "drupal/multivalue_form_element", - "version": "1.0.0-beta4", + "version": "1.0.0-beta6", "source": { "type": "git", "url": "https://git.drupalcode.org/project/multivalue_form_element.git", - "reference": "1.0.0-beta4" + "reference": "1.0.0-beta6" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/multivalue_form_element-1.0.0-beta4.zip", - "reference": "1.0.0-beta4", - "shasum": "e44990d002988c734e65551cf3534d57801a96a5" + "url": "https://ftp.drupal.org/files/projects/multivalue_form_element-1.0.0-beta6.zip", + "reference": "1.0.0-beta6", + "shasum": "653214124be45f11bb76c76871355a30651dd6fe" }, "require": { - "drupal/core": "^9.3", + "drupal/core": "^9.3 || ^10", "php": ">=7.4" }, - "require-dev": { - "composer/installers": "^1.11", - "drupal/core-composer-scaffold": "^9.3", - "drupal/core-dev": "^9.3", - "drupal/drupal-extension": "^4.1", - "drush/drush": "^10.3", - "openeuropa/code-review": "^2.0", - "openeuropa/task-runner-drupal-project-symlink": "^1.0.0-beta5", - "phpspec/prophecy-phpunit": "^2" - }, "type": "drupal-module", "extra": { "drupal": { - "version": "1.0.0-beta4", - "datestamp": "1659428979", + "version": "1.0.0-beta6", + "datestamp": "1678886197", "security-coverage": { "status": "not-covered", "message": "Project has not opted into security advisory coverage!" } - }, - "composer-exit-on-patch-failure": true, - "enable-patching": true, - "drupal-scaffold": { - "locations": { - "web-root": "./build" - } - }, - "installer-paths": { - "build/core": [ - "type:drupal-core" - ], - "build/profiles/contrib/{$name}": [ - "type:drupal-profile" - ], - "build/modules/contrib/{$name}": [ - "type:drupal-module" - ], - "build/themes/contrib/{$name}": [ - "type:drupal-theme" - ] - } - }, - "autoload": { - "psr-4": { - "Drupal\\multivalue_form_element\\": "./src/" - } - }, - "autoload-dev": { - "psr-4": { - "Drupal\\Tests\\multivalue_form_element\\": "./tests/src/" } }, "notification-url": "https://packages.drupal.org/8/downloads", - "scripts": { - "post-install-cmd": [ - "./vendor/bin/run drupal:site-setup" - ], - "post-update-cmd": [ - "./vendor/bin/run drupal:site-setup" - ] - }, "license": [ "EUPL-1.2" ], @@ -2497,26 +2452,27 @@ "description": "Provides a form element that wraps existing form elements, making them multi-value.", "homepage": "https://www.drupal.org/project/multivalue_form_element", "support": { - "source": "https://git.drupalcode.org/project/multivalue_form_element" + "source": "https://git.drupalcode.org/project/multivalue_form_element", + "issues": "https://www.drupal.org/project/issues/multivalue_form_element" } }, { "name": "drupal/simple_oauth", - "version": "5.2.0", + "version": "5.2.3", "source": { "type": "git", "url": "https://git.drupalcode.org/project/simple_oauth.git", - "reference": "5.2.0" + "reference": "5.2.3" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/simple_oauth-5.2.0.zip", - "reference": "5.2.0", - "shasum": "3d2b0f38284190a59e4ac99d6f5d4af424c4d19f" + "url": "https://ftp.drupal.org/files/projects/simple_oauth-5.2.3.zip", + "reference": "5.2.3", + "shasum": "9dae165101c0cff5e1f792457ec6a8eff5c1faf4" }, "require": { - "drupal/consumers": "^1.2", - "drupal/core": "^8 || ^9", + "drupal/consumers": "^1.14", + "drupal/core": "^9 || ^10", "lcobucci/jwt": "^4", "league/oauth2-server": "^8.3", "php": ">=7.4", @@ -2528,8 +2484,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "5.2.0", - "datestamp": "1641403293", + "version": "5.2.3", + "datestamp": "1670908048", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2543,13 +2499,12 @@ }, "notification-url": "https://packages.drupal.org/8/downloads", "license": [ - "GPL-2.0+" + "GPL-2.0-or-later" ], "authors": [ { - "name": "Mateu Aguiló Bosch", - "homepage": "https://www.drupal.org/user/2801849", - "email": "mateu.aguilo.bosch@gmail.com" + "name": "bojan_dev", + "homepage": "https://www.drupal.org/user/2801849" }, { "name": "bradjones1", @@ -2622,20 +2577,20 @@ }, { "name": "drupal/subrequests", - "version": "3.0.5", + "version": "3.0.6", "source": { "type": "git", "url": "https://git.drupalcode.org/project/subrequests.git", - "reference": "3.0.5" + "reference": "3.0.6" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/subrequests-3.0.5.zip", - "reference": "3.0.5", - "shasum": "5d0a61bdd5e5e3229c4e1c4be1adde4b26863e39" + "url": "https://ftp.drupal.org/files/projects/subrequests-3.0.6.zip", + "reference": "3.0.6", + "shasum": "426a4cb77829648e3b67ec15ded57eb4b97a8e78" }, "require": { - "drupal/core": "^8 || ^9", + "drupal/core": "^8 || ^9 || ^10", "galbar/jsonpath": "^1.0" }, "require-dev": { @@ -2644,8 +2599,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "3.0.5", - "datestamp": "1663142852", + "version": "3.0.6", + "datestamp": "1664452852", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2673,28 +2628,103 @@ "source": "https://git.drupalcode.org/project/subrequests" } }, + { + "name": "drupal/upgrade_status", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/upgrade_status.git", + "reference": "4.0.0" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/upgrade_status-4.0.0.zip", + "reference": "4.0.0", + "shasum": "013afdb46a03c9db0119cb1ce60ca49631d64368" + }, + "require": { + "drupal/core": "^9 || ^10", + "mathieuviossat/arraytotexttable": "~1.0.0", + "mglaman/phpstan-drupal": "^1.0.0", + "nikic/php-parser": "^4.0.0", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "symfony/process": "^3.4|^4.0|^5.0|^6.0", + "webflo/drupal-finder": "^1.2" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "4.0.0", + "datestamp": "1678815090", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "colan", + "homepage": "https://www.drupal.org/user/58704" + }, + { + "name": "Gábor Hojtsy", + "homepage": "https://www.drupal.org/user/4166" + }, + { + "name": "herczogzoltan", + "homepage": "https://www.drupal.org/user/3528391" + }, + { + "name": "sun", + "homepage": "https://www.drupal.org/user/54136" + }, + { + "name": "webchick", + "homepage": "https://www.drupal.org/user/24967" + }, + { + "name": "xjm", + "homepage": "https://www.drupal.org/user/65776" + } + ], + "description": "Review Drupal major upgrade readiness of the environment and components of the site.", + "homepage": "http://drupal.org/project/upgrade_status", + "support": { + "source": "https://git.drupalcode.org/project/upgrade_status" + } + }, { "name": "drupal/user_bundle", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/user_bundle.git", - "reference": "8.x-1.1" + "reference": "8.x-1.2" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/user_bundle-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "ae2238f94b4e8702c330ffea3187caeb019f9a38" + "url": "https://ftp.drupal.org/files/projects/user_bundle-8.x-1.2.zip", + "reference": "8.x-1.2", + "shasum": "56f21ed3eb05b16cbfa986e2fe311647c453d421" }, "require": { - "drupal/core": "^8.7.7 || ^9" + "drupal/core": "^8.7.7 || ^9 || ^10" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.1", - "datestamp": "1634943861", + "version": "8.x-1.2", + "datestamp": "1681470412", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2974,25 +3004,24 @@ }, { "name": "egulias/email-validator", - "version": "3.2.1", + "version": "3.2.5", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715" + "reference": "b531a2311709443320c786feb4519cfaf94af796" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715", - "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b531a2311709443320c786feb4519cfaf94af796", + "reference": "b531a2311709443320c786feb4519cfaf94af796", "shasum": "" }, "require": { - "doctrine/lexer": "^1.2", + "doctrine/lexer": "^1.2|^2", "php": ">=7.2", "symfony/polyfill-intl-idn": "^1.15" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^8.5.8|^9.3.3", "vimeo/psalm": "^4" }, @@ -3030,7 +3059,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/3.2.1" + "source": "https://github.com/egulias/EmailValidator/tree/3.2.5" }, "funding": [ { @@ -3038,7 +3067,7 @@ "type": "github" } ], - "time": "2022-06-18T20:57:19+00:00" + "time": "2023-01-02T17:26:14+00:00" }, { "name": "enlightn/security-checker", @@ -3108,16 +3137,16 @@ }, { "name": "fileeye/mimemap", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/FileEye/MimeMap.git", - "reference": "24144b7dc84168e14e4fc893d654c4fb40628346" + "reference": "58fbd11312a8f69e0824a640b86b33a9d096fe7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FileEye/MimeMap/zipball/24144b7dc84168e14e4fc893d654c4fb40628346", - "reference": "24144b7dc84168e14e4fc893d654c4fb40628346", + "url": "https://api.github.com/repos/FileEye/MimeMap/zipball/58fbd11312a8f69e0824a640b86b33a9d096fe7f", + "reference": "58fbd11312a8f69e0824a640b86b33a9d096fe7f", "shasum": "" }, "require": { @@ -3164,9 +3193,9 @@ ], "support": { "issues": "https://github.com/FileEye/MimeMap/issues", - "source": "https://github.com/FileEye/MimeMap/tree/2.0.0" + "source": "https://github.com/FileEye/MimeMap/tree/2.0.1" }, - "time": "2022-07-17T13:00:20+00:00" + "time": "2023-02-11T19:58:58+00:00" }, { "name": "galbar/jsonpath", @@ -3940,6 +3969,96 @@ ], "time": "2022-03-24T10:26:04+00:00" }, + { + "name": "laminas/laminas-servicemanager", + "version": "3.20.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-servicemanager.git", + "reference": "bc2c2cbe2dd90db8b9d16b0618f542692b76ab59" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/bc2c2cbe2dd90db8b9d16b0618f542692b76ab59", + "reference": "bc2c2cbe2dd90db8b9d16b0618f542692b76ab59", + "shasum": "" + }, + "require": { + "laminas/laminas-stdlib": "^3.2.1", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "psr/container": "^1.0" + }, + "conflict": { + "ext-psr": "*", + "laminas/laminas-code": "<3.3.1", + "zendframework/zend-code": "<3.3.1", + "zendframework/zend-servicemanager": "*" + }, + "provide": { + "psr/container-implementation": "^1.0" + }, + "replace": { + "container-interop/container-interop": "^1.2.0" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11.99.5", + "laminas/laminas-coding-standard": "~2.4.0", + "laminas/laminas-container-config-test": "^0.8", + "laminas/laminas-dependency-plugin": "^2.2", + "mikey179/vfsstream": "^1.6.11@alpha", + "ocramius/proxy-manager": "^2.14.1", + "phpbench/phpbench": "^1.2.7", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", + "vimeo/psalm": "^5.0.0" + }, + "suggest": { + "ocramius/proxy-manager": "ProxyManager ^2.1.1 to handle lazy initialization of services" + }, + "bin": [ + "bin/generate-deps-for-config-factory", + "bin/generate-factory-for-class" + ], + "type": "library", + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ServiceManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Factory-Driven Dependency Injection Container", + "homepage": "https://laminas.dev", + "keywords": [ + "PSR-11", + "dependency-injection", + "di", + "dic", + "laminas", + "service-manager", + "servicemanager" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-servicemanager/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-servicemanager/issues", + "rss": "https://github.com/laminas/laminas-servicemanager/releases.atom", + "source": "https://github.com/laminas/laminas-servicemanager" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-12-01T17:03:38+00:00" + }, { "name": "laminas/laminas-stdlib", "version": "3.7.1", @@ -3999,33 +4118,96 @@ ], "time": "2022-01-21T15:50:46+00:00" }, + { + "name": "laminas/laminas-text", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-text.git", + "reference": "40f7acdb284d41553d32db811e704d6e15e415b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-text/zipball/40f7acdb284d41553d32db811e704d6e15e415b4", + "reference": "40f7acdb284d41553d32db811e704d6e15e415b4", + "shasum": "" + }, + "require": { + "laminas/laminas-servicemanager": "^3.19.0", + "laminas/laminas-stdlib": "^3.7.1", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + }, + "conflict": { + "zendframework/zend-text": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.4.0", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Text\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Create FIGlets and text-based tables", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "text" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-text/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-text/issues", + "rss": "https://github.com/laminas/laminas-text/releases.atom", + "source": "https://github.com/laminas/laminas-text" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-12-11T15:36:27+00:00" + }, { "name": "lcobucci/clock", - "version": "2.2.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3" + "reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/fb533e093fd61321bfcbac08b131ce805fe183d3", - "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/039ef98c6b57b101d10bd11d8fdfda12cbd996dc", + "reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc", "shasum": "" }, "require": { - "php": "^8.0", - "stella-maris/clock": "^0.1.4" + "php": "~8.1.0 || ~8.2.0", + "psr/clock": "^1.0" + }, + "provide": { + "psr/clock-implementation": "1.0" }, "require-dev": { "infection/infection": "^0.26", - "lcobucci/coding-standard": "^8.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^9.5" + "lcobucci/coding-standard": "^9.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-deprecation-rules": "^1.1.1", + "phpstan/phpstan-phpunit": "^1.3.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^9.5.27" }, "type": "library", "autoload": { @@ -4046,7 +4228,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/2.2.0" + "source": "https://github.com/lcobucci/clock/tree/3.0.0" }, "funding": [ { @@ -4058,20 +4240,20 @@ "type": "patreon" } ], - "time": "2022-04-19T19:34:17+00:00" + "time": "2022-12-19T15:00:24+00:00" }, { "name": "lcobucci/jwt", - "version": "4.1.5", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/lcobucci/jwt.git", - "reference": "fe2d89f2eaa7087af4aa166c6f480ef04e000582" + "reference": "4d7de2fe0d51a96418c0d04004986e410e87f6b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/fe2d89f2eaa7087af4aa166c6f480ef04e000582", - "reference": "fe2d89f2eaa7087af4aa166c6f480ef04e000582", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/4d7de2fe0d51a96418c0d04004986e410e87f6b4", + "reference": "4d7de2fe0d51a96418c0d04004986e410e87f6b4", "shasum": "" }, "require": { @@ -4080,19 +4262,19 @@ "ext-mbstring": "*", "ext-openssl": "*", "ext-sodium": "*", - "lcobucci/clock": "^2.0", + "lcobucci/clock": "^2.0 || ^3.0", "php": "^7.4 || ^8.0" }, "require-dev": { "infection/infection": "^0.21", "lcobucci/coding-standard": "^6.0", "mikey179/vfsstream": "^1.6.7", - "phpbench/phpbench": "^1.0", + "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", "phpunit/php-invoker": "^3.1", "phpunit/phpunit": "^9.5" }, @@ -4120,7 +4302,7 @@ ], "support": { "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/4.1.5" + "source": "https://github.com/lcobucci/jwt/tree/4.3.0" }, "funding": [ { @@ -4132,7 +4314,7 @@ "type": "patreon" } ], - "time": "2021-09-28T19:34:56+00:00" + "time": "2023-01-02T13:28:00+00:00" }, { "name": "league/container", @@ -4269,26 +4451,27 @@ }, { "name": "league/oauth2-server", - "version": "8.3.5", + "version": "8.5.1", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth2-server.git", - "reference": "7aeb7c42b463b1a6fe4d084d3145e2fa22436876" + "reference": "43cd4d406906c6be5c8de2cee9bd3ad3753544ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/7aeb7c42b463b1a6fe4d084d3145e2fa22436876", - "reference": "7aeb7c42b463b1a6fe4d084d3145e2fa22436876", + "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/43cd4d406906c6be5c8de2cee9bd3ad3753544ef", + "reference": "43cd4d406906c6be5c8de2cee9bd3ad3753544ef", "shasum": "" }, "require": { - "defuse/php-encryption": "^2.2.1", + "defuse/php-encryption": "^2.3", "ext-json": "*", "ext-openssl": "*", - "lcobucci/jwt": "^3.4.6 || ^4.0.4", + "lcobucci/clock": "^2.2 || ^3.0", + "lcobucci/jwt": "^4.3 || ^5.0", "league/event": "^2.2", - "league/uri": "^6.4", - "php": "^7.2 || ^8.0", + "league/uri": "^6.7", + "php": "^8.0", "psr/http-message": "^1.0.1" }, "replace": { @@ -4296,10 +4479,10 @@ "lncd/oauth2": "*" }, "require-dev": { - "laminas/laminas-diactoros": "^2.4.1", + "laminas/laminas-diactoros": "^2.24.0", "phpstan/phpstan": "^0.12.57", "phpstan/phpstan-phpunit": "^0.12.16", - "phpunit/phpunit": "^8.5.13", + "phpunit/phpunit": "^9.6.6", "roave/security-advisories": "dev-master" }, "type": "library", @@ -4345,7 +4528,7 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth2-server/issues", - "source": "https://github.com/thephpleague/oauth2-server/tree/8.3.5" + "source": "https://github.com/thephpleague/oauth2-server/tree/8.5.1" }, "funding": [ { @@ -4353,7 +4536,7 @@ "type": "github" } ], - "time": "2022-05-03T21:21:28+00:00" + "time": "2023-04-04T10:20:16+00:00" }, { "name": "league/uri", @@ -4656,72 +4839,227 @@ "time": "2022-08-18T16:18:26+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.15.1", + "name": "mathieuviossat/arraytotexttable", + "version": "v1.0.9", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" + "url": "https://github.com/viossat/arraytotexttable.git", + "reference": "518ec338fe62e92c064a9d3d3bc8c64fb6e77d1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "url": "https://api.github.com/repos/viossat/arraytotexttable/zipball/518ec338fe62e92c064a9d3d3bc8c64fb6e77d1c", + "reference": "518ec338fe62e92c064a9d3d3bc8c64fb6e77d1c", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "laminas/laminas-text": "^2.9", + "php": ">=5.3.0" }, - "bin": [ - "bin/php-parse" - ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, "autoload": { "psr-4": { - "PhpParser\\": "lib/PhpParser" + "MathieuViossat\\Util\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Nikita Popov" + "name": "Mathieu Viossat", + "email": "mathieu@viossat.fr", + "homepage": "https://viossat.fr" } ], - "description": "A PHP parser written in PHP", + "description": "Display arrays in terminal", + "homepage": "https://github.com/viossat/arraytotexttable", "keywords": [ - "parser", - "php" + "array", + "ascii", + "table", + "terminal", + "text", + "unicode" ], "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" + "issues": "https://github.com/viossat/arraytotexttable/issues", + "source": "https://github.com/viossat/arraytotexttable/tree/v1.0.9" }, - "time": "2022-09-04T07:30:47+00:00" + "time": "2022-08-30T15:33:10+00:00" }, { - "name": "paragonie/random_compat", - "version": "v9.99.100", + "name": "mglaman/phpstan-drupal", + "version": "1.1.29", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + "url": "https://github.com/mglaman/phpstan-drupal.git", + "reference": "e6f6191c53b159013fcbd186d7f85511f3f96ff8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "url": "https://api.github.com/repos/mglaman/phpstan-drupal/zipball/e6f6191c53b159013fcbd186d7f85511f3f96ff8", + "reference": "e6f6191c53b159013fcbd186d7f85511f3f96ff8", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^1.9.0", + "symfony/finder": "~3.4.5 ||^4.2 || ^5.0 || ^6.0", + "symfony/yaml": "~3.4.5 || ^4.2|| ^5.0 || ^6.0", + "webflo/drupal-finder": "^1.2" + }, + "require-dev": { + "behat/mink": "^1.8", + "composer/installers": "^1.9", + "drupal/core-recommended": "^8.8@alpha || ^9.0", + "drush/drush": "^9.6 || ^10.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^6.5 || ^7.5 || ^8.0 || ^9", + "slevomat/coding-standard": "^7.1", + "squizlabs/php_codesniffer": "^3.3", + "symfony/phpunit-bridge": "^3.4.3 || ^4.4 || ^5.4 || ^6.0" + }, + "suggest": { + "jangregor/phpstan-prophecy": "Provides a prophecy/prophecy extension for phpstan/phpstan.", + "phpstan/phpstan-deprecation-rules": "For catching deprecations, especially in Drupal core.", + "phpstan/phpstan-phpunit": "PHPUnit extensions and rules for PHPStan." + }, + "type": "phpstan-extension", + "extra": { + "branch-alias": { + "dev-main": "1.0-dev" + }, + "installer-paths": { + "tests/fixtures/drupal/core": [ + "type:drupal-core" + ], + "tests/fixtures/drupal/libraries/{$name}": [ + "type:drupal-library" + ], + "tests/fixtures/drupal/modules/contrib/{$name}": [ + "type:drupal-module" + ], + "tests/fixtures/drupal/profiles/contrib/{$name}": [ + "type:drupal-profile" + ], + "tests/fixtures/drupal/themes/contrib/{$name}": [ + "type:drupal-theme" + ] + }, + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "mglaman\\PHPStanDrupal\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Glaman", + "email": "nmd.matt@gmail.com" + } + ], + "description": "Drupal extension and rules for PHPStan", + "support": { + "issues": "https://github.com/mglaman/phpstan-drupal/issues", + "source": "https://github.com/mglaman/phpstan-drupal/tree/1.1.29" + }, + "funding": [ + { + "url": "https://github.com/mglaman", + "type": "github" + }, + { + "url": "https://opencollective.com/phpstan-drupal", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/mglaman/phpstan-drupal", + "type": "tidelift" + } + ], + "time": "2023-02-08T21:44:03+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.15.4", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" + }, + "time": "2023-03-05T19:49:14+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", "shasum": "" }, @@ -5043,6 +5381,116 @@ }, "time": "2021-12-17T19:44:54+00:00" }, + { + "name": "phpstan/phpstan", + "version": "1.10.13", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "f07bf8c6980b81bf9e49d44bd0caf2e737614a70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f07bf8c6980b81bf9e49d44bd0caf2e737614a70", + "reference": "f07bf8c6980b81bf9e49d44bd0caf2e737614a70", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2023-04-12T19:29:52+00:00" + }, + { + "name": "phpstan/phpstan-deprecation-rules", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", + "reference": "a22b36b955a2e9a3d39fe533b6c1bb5359f9c319" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/a22b36b955a2e9a3d39fe533b6c1bb5359f9c319", + "reference": "a22b36b955a2e9a3d39fe533b6c1bb5359f9c319", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.10" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-php-parser": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", + "support": { + "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", + "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/1.1.3" + }, + "time": "2023-03-17T07:50:08+00:00" + }, { "name": "psr/cache", "version": "1.0.1", @@ -5092,6 +5540,54 @@ }, "time": "2016-08-06T20:24:11+00:00" }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, { "name": "psr/container", "version": "1.1.2", @@ -5142,21 +5638,21 @@ }, { "name": "psr/http-factory", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + "reference": "e616d01114759c4c489f93b099585439f795fe35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", "shasum": "" }, "require": { "php": ">=7.0.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -5176,7 +5672,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interfaces for PSR-7 HTTP message factories", @@ -5191,9 +5687,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" }, - "time": "2019-04-30T12:38:16+00:00" + "time": "2023-04-10T20:10:41+00:00" }, { "name": "psr/http-message", @@ -5471,65 +5967,22 @@ }, "time": "2020-01-30T12:17:27+00:00" }, - { - "name": "stella-maris/clock", - "version": "0.1.5", - "source": { - "type": "git", - "url": "git@gitlab.com:stella-maris/clock.git", - "reference": "447879c53ca0b2a762cdbfba5e76ccf4deca9158" - }, - "dist": { - "type": "zip", - "url": "https://gitlab.com/api/v4/projects/stella-maris%2Fclock/repository/archive.zip?sha=447879c53ca0b2a762cdbfba5e76ccf4deca9158", - "reference": "447879c53ca0b2a762cdbfba5e76ccf4deca9158", - "shasum": "" - }, - "require": { - "php": "^7.0|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "StellaMaris\\Clock\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andreas Heigl", - "role": "Maintainer" - } - ], - "description": "A pre-release of the proposed PSR-20 Clock-Interface", - "homepage": "https://gitlab.com/stella-maris/clock", - "keywords": [ - "clock", - "datetime", - "point in time", - "psr20" - ], - "time": "2022-08-05T07:21:25+00:00" - }, { "name": "steverhoades/oauth2-openid-connect-server", - "version": "v2.4.0", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/steverhoades/oauth2-openid-connect-server.git", - "reference": "5f8f0246c1507dcc4d9dbcad32d651fe276c4409" + "reference": "23381585ebb410ffa11ca9eb0fdba3895fb23119" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/steverhoades/oauth2-openid-connect-server/zipball/5f8f0246c1507dcc4d9dbcad32d651fe276c4409", - "reference": "5f8f0246c1507dcc4d9dbcad32d651fe276c4409", + "url": "https://api.github.com/repos/steverhoades/oauth2-openid-connect-server/zipball/23381585ebb410ffa11ca9eb0fdba3895fb23119", + "reference": "23381585ebb410ffa11ca9eb0fdba3895fb23119", "shasum": "" }, "require": { - "lcobucci/jwt": "4.1.5", + "lcobucci/jwt": "4.1.5|^4.2", "league/oauth2-server": "^5.1|^6.0|^7.0|^8.0" }, "require-dev": { @@ -5555,9 +6008,9 @@ "description": "An OpenID Connect Server that sites on The PHP League's OAuth2 Server", "support": { "issues": "https://github.com/steverhoades/oauth2-openid-connect-server/issues", - "source": "https://github.com/steverhoades/oauth2-openid-connect-server/tree/v2.4.0" + "source": "https://github.com/steverhoades/oauth2-openid-connect-server/tree/v2.5.0" }, - "time": "2021-10-28T13:38:28+00:00" + "time": "2023-01-19T16:49:09+00:00" }, { "name": "symfony-cmf/routing", @@ -5624,16 +6077,16 @@ }, { "name": "symfony/console", - "version": "v4.4.45", + "version": "v4.4.49", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "28b77970939500fb04180166a1f716e75a871ef8" + "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/28b77970939500fb04180166a1f716e75a871ef8", - "reference": "28b77970939500fb04180166a1f716e75a871ef8", + "url": "https://api.github.com/repos/symfony/console/zipball/33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", + "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", "shasum": "" }, "require": { @@ -5694,7 +6147,7 @@ "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/console/tree/v4.4.45" + "source": "https://github.com/symfony/console/tree/v4.4.49" }, "funding": [ { @@ -5710,7 +6163,7 @@ "type": "tidelift" } ], - "time": "2022-08-17T14:50:19+00:00" + "time": "2022-11-05T17:10:16+00:00" }, { "name": "symfony/debug", @@ -5783,16 +6236,16 @@ }, { "name": "symfony/dependency-injection", - "version": "v4.4.44", + "version": "v4.4.49", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "25502a57182ba1e15da0afd64c975cae4d0a1471" + "reference": "9065fe97dbd38a897e95ea254eb5ddfe1310f734" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/25502a57182ba1e15da0afd64c975cae4d0a1471", - "reference": "25502a57182ba1e15da0afd64c975cae4d0a1471", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/9065fe97dbd38a897e95ea254eb5ddfe1310f734", + "reference": "9065fe97dbd38a897e95ea254eb5ddfe1310f734", "shasum": "" }, "require": { @@ -5849,7 +6302,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v4.4.44" + "source": "https://github.com/symfony/dependency-injection/tree/v4.4.49" }, "funding": [ { @@ -5865,7 +6318,7 @@ "type": "tidelift" } ], - "time": "2022-07-20T09:59:04+00:00" + "time": "2022-11-16T16:18:09+00:00" }, { "name": "symfony/deprecation-contracts", @@ -6370,16 +6823,16 @@ }, { "name": "symfony/http-foundation", - "version": "v4.4.45", + "version": "v4.4.49", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b2f2e3cb66349d89cb46c939cea03c62ad71cf00" + "reference": "191413c7b832c015bb38eae963f2e57498c3c173" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b2f2e3cb66349d89cb46c939cea03c62ad71cf00", - "reference": "b2f2e3cb66349d89cb46c939cea03c62ad71cf00", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/191413c7b832c015bb38eae963f2e57498c3c173", + "reference": "191413c7b832c015bb38eae963f2e57498c3c173", "shasum": "" }, "require": { @@ -6418,7 +6871,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v4.4.45" + "source": "https://github.com/symfony/http-foundation/tree/v4.4.49" }, "funding": [ { @@ -6434,20 +6887,20 @@ "type": "tidelift" } ], - "time": "2022-08-17T15:29:03+00:00" + "time": "2022-11-04T16:17:57+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.4.45", + "version": "v4.4.50", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "4f2d38e9a3c6997ea0886ede5aaf337dfd0fc938" + "reference": "aa6df6c045f034aa13ac752fc234bb300b9488ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4f2d38e9a3c6997ea0886ede5aaf337dfd0fc938", - "reference": "4f2d38e9a3c6997ea0886ede5aaf337dfd0fc938", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/aa6df6c045f034aa13ac752fc234bb300b9488ef", + "reference": "aa6df6c045f034aa13ac752fc234bb300b9488ef", "shasum": "" }, "require": { @@ -6522,7 +6975,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v4.4.45" + "source": "https://github.com/symfony/http-kernel/tree/v4.4.50" }, "funding": [ { @@ -6538,20 +6991,20 @@ "type": "tidelift" } ], - "time": "2022-08-26T14:34:48+00:00" + "time": "2023-02-01T08:01:31+00:00" }, { "name": "symfony/mime", - "version": "v5.4.12", + "version": "v5.4.13", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "03876e9c5a36f5b45e7d9a381edda5421eff8a90" + "reference": "bb2ccf759e2b967dcd11bdee5bdf30dddd2290bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/03876e9c5a36f5b45e7d9a381edda5421eff8a90", - "reference": "03876e9c5a36f5b45e7d9a381edda5421eff8a90", + "url": "https://api.github.com/repos/symfony/mime/zipball/bb2ccf759e2b967dcd11bdee5bdf30dddd2290bd", + "reference": "bb2ccf759e2b967dcd11bdee5bdf30dddd2290bd", "shasum": "" }, "require": { @@ -6605,7 +7058,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.12" + "source": "https://github.com/symfony/mime/tree/v5.4.13" }, "funding": [ { @@ -6621,20 +7074,20 @@ "type": "tidelift" } ], - "time": "2022-08-19T14:24:03+00:00" + "time": "2022-09-01T18:18:29+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { @@ -6649,7 +7102,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6687,7 +7140,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -6703,20 +7156,20 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40" + "reference": "927013f3aac555983a5059aada98e1907d842695" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695", + "reference": "927013f3aac555983a5059aada98e1907d842695", "shasum": "" }, "require": { @@ -6731,7 +7184,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6770,7 +7223,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.0" }, "funding": [ { @@ -6786,20 +7239,20 @@ "type": "tidelift" } ], - "time": "2022-01-04T09:04:05+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", "shasum": "" }, "require": { @@ -6813,7 +7266,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6857,7 +7310,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" }, "funding": [ { @@ -6873,20 +7326,20 @@ "type": "tidelift" } ], - "time": "2021-09-14T14:02:44+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -6898,7 +7351,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6941,7 +7394,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -6957,20 +7410,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { @@ -6985,7 +7438,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7024,7 +7477,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -7040,20 +7493,20 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", "shasum": "" }, "require": { @@ -7062,7 +7515,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7100,7 +7553,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" }, "funding": [ { @@ -7116,20 +7569,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", "shasum": "" }, "require": { @@ -7138,7 +7591,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7179,7 +7632,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" }, "funding": [ { @@ -7195,20 +7648,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -7217,7 +7670,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7262,7 +7715,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -7278,7 +7731,7 @@ "type": "tidelift" } ], - "time": "2022-03-04T08:16:47+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/process", @@ -7344,16 +7797,16 @@ }, { "name": "symfony/psr-http-message-bridge", - "version": "v2.1.3", + "version": "v2.1.4", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "d444f85dddf65c7e57c58d8e5b3a4dbb593b1840" + "reference": "a125b93ef378c492e274f217874906fb9babdebb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/d444f85dddf65c7e57c58d8e5b3a4dbb593b1840", - "reference": "d444f85dddf65c7e57c58d8e5b3a4dbb593b1840", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/a125b93ef378c492e274f217874906fb9babdebb", + "reference": "a125b93ef378c492e274f217874906fb9babdebb", "shasum": "" }, "require": { @@ -7412,7 +7865,7 @@ ], "support": { "issues": "https://github.com/symfony/psr-http-message-bridge/issues", - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.3" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.4" }, "funding": [ { @@ -7428,7 +7881,7 @@ "type": "tidelift" } ], - "time": "2022-09-05T10:34:54+00:00" + "time": "2022-11-28T22:46:34+00:00" }, { "name": "symfony/routing", @@ -7521,16 +7974,16 @@ }, { "name": "symfony/serializer", - "version": "v4.4.45", + "version": "v4.4.47", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "d19621a350491f76e2faed2afb982e0706f63252" + "reference": "6e01d63c55657930a6de03d6e36aae50af98888d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/d19621a350491f76e2faed2afb982e0706f63252", - "reference": "d19621a350491f76e2faed2afb982e0706f63252", + "url": "https://api.github.com/repos/symfony/serializer/zipball/6e01d63c55657930a6de03d6e36aae50af98888d", + "reference": "6e01d63c55657930a6de03d6e36aae50af98888d", "shasum": "" }, "require": { @@ -7595,7 +8048,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v4.4.45" + "source": "https://github.com/symfony/serializer/tree/v4.4.47" }, "funding": [ { @@ -7611,7 +8064,7 @@ "type": "tidelift" } ], - "time": "2022-08-17T14:28:21+00:00" + "time": "2022-09-19T08:38:33+00:00" }, { "name": "symfony/service-contracts", @@ -7698,16 +8151,16 @@ }, { "name": "symfony/translation", - "version": "v4.4.45", + "version": "v4.4.47", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "4e6b4c0dbeb04d6f004ed7f43eb0905ce8396def" + "reference": "45036b1d53accc48fe9bab71ccd86d57eba0dd94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/4e6b4c0dbeb04d6f004ed7f43eb0905ce8396def", - "reference": "4e6b4c0dbeb04d6f004ed7f43eb0905ce8396def", + "url": "https://api.github.com/repos/symfony/translation/zipball/45036b1d53accc48fe9bab71ccd86d57eba0dd94", + "reference": "45036b1d53accc48fe9bab71ccd86d57eba0dd94", "shasum": "" }, "require": { @@ -7767,7 +8220,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v4.4.45" + "source": "https://github.com/symfony/translation/tree/v4.4.47" }, "funding": [ { @@ -7783,7 +8236,7 @@ "type": "tidelift" } ], - "time": "2022-08-02T12:44:49+00:00" + "time": "2022-10-03T15:15:11+00:00" }, { "name": "symfony/translation-contracts", @@ -7865,16 +8318,16 @@ }, { "name": "symfony/validator", - "version": "v4.4.45", + "version": "v4.4.48", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "06db9bfca8fefea4dfe8e804bbcd0aa79a414d0c" + "reference": "54781a4c41efbd283b779110bf8ae7f263737775" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/06db9bfca8fefea4dfe8e804bbcd0aa79a414d0c", - "reference": "06db9bfca8fefea4dfe8e804bbcd0aa79a414d0c", + "url": "https://api.github.com/repos/symfony/validator/zipball/54781a4c41efbd283b779110bf8ae7f263737775", + "reference": "54781a4c41efbd283b779110bf8ae7f263737775", "shasum": "" }, "require": { @@ -7951,7 +8404,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v4.4.45" + "source": "https://github.com/symfony/validator/tree/v4.4.48" }, "funding": [ { @@ -7967,20 +8420,20 @@ "type": "tidelift" } ], - "time": "2022-08-04T16:19:35+00:00" + "time": "2022-10-25T13:54:11+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.4.11", + "version": "v5.4.22", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "b8f306d7b8ef34fb3db3305be97ba8e088fb4861" + "reference": "e2edac9ce47e6df07e38143c7cfa6bdbc1a6dcc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8f306d7b8ef34fb3db3305be97ba8e088fb4861", - "reference": "b8f306d7b8ef34fb3db3305be97ba8e088fb4861", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e2edac9ce47e6df07e38143c7cfa6bdbc1a6dcc4", + "reference": "e2edac9ce47e6df07e38143c7cfa6bdbc1a6dcc4", "shasum": "" }, "require": { @@ -8040,7 +8493,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.11" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.22" }, "funding": [ { @@ -8056,7 +8509,7 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:00:38+00:00" + "time": "2023-03-25T09:27:28+00:00" }, { "name": "symfony/yaml", @@ -8131,16 +8584,16 @@ }, { "name": "twig/twig", - "version": "v2.15.2", + "version": "v2.15.4", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "3e43405a9a8b578809426339cc3780e16fba0c52" + "reference": "3e059001d6d597dd50ea7c74dd2464b4adea48d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/3e43405a9a8b578809426339cc3780e16fba0c52", - "reference": "3e43405a9a8b578809426339cc3780e16fba0c52", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3e059001d6d597dd50ea7c74dd2464b4adea48d3", + "reference": "3e059001d6d597dd50ea7c74dd2464b4adea48d3", "shasum": "" }, "require": { @@ -8195,7 +8648,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v2.15.2" + "source": "https://github.com/twigphp/Twig/tree/v2.15.4" }, "funding": [ { @@ -8207,7 +8660,7 @@ "type": "tidelift" } ], - "time": "2022-08-12T06:43:37+00:00" + "time": "2022-12-27T12:26:20+00:00" }, { "name": "typo3/phar-stream-wrapper", @@ -8266,16 +8719,16 @@ }, { "name": "vipnytt/sitemapparser", - "version": "v1.1.5", + "version": "v1.1.7", "source": { "type": "git", "url": "https://github.com/VIPnytt/SitemapParser.git", - "reference": "f05d00702304e35859ea524553a3229f27c00476" + "reference": "c263e1f0fdcc8be541e805d52acab801a43be358" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/VIPnytt/SitemapParser/zipball/f05d00702304e35859ea524553a3229f27c00476", - "reference": "f05d00702304e35859ea524553a3229f27c00476", + "url": "https://api.github.com/repos/VIPnytt/SitemapParser/zipball/c263e1f0fdcc8be541e805d52acab801a43be358", + "reference": "c263e1f0fdcc8be541e805d52acab801a43be358", "shasum": "" }, "require": { @@ -8322,9 +8775,9 @@ ], "support": { "issues": "https://github.com/VIPnytt/SitemapParser/issues", - "source": "https://github.com/VIPnytt/SitemapParser/tree/v1.1.5" + "source": "https://github.com/VIPnytt/SitemapParser/tree/v1.1.7" }, - "time": "2021-10-20T15:06:45+00:00" + "time": "2023-03-27T16:06:46+00:00" }, { "name": "webflo/drupal-finder", @@ -8615,16 +9068,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.3.3", + "version": "1.3.5", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "30897edbfb15e784fe55587b4f73ceefd3c4d98c" + "reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/30897edbfb15e784fe55587b4f73ceefd3c4d98c", - "reference": "30897edbfb15e784fe55587b4f73ceefd3c4d98c", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/74780ccf8c19d6acb8d65c5f39cd72110e132bbd", + "reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd", "shasum": "" }, "require": { @@ -8671,7 +9124,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.3.3" + "source": "https://github.com/composer/ca-bundle/tree/1.3.5" }, "funding": [ { @@ -8687,20 +9140,20 @@ "type": "tidelift" } ], - "time": "2022-07-20T07:14:26+00:00" + "time": "2023-01-11T08:27:00+00:00" }, { "name": "composer/composer", - "version": "2.2.18", + "version": "2.2.21", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "84175907664ca8b73f73f4883e67e886dfefb9f5" + "reference": "978198befc71de0b18fc1fc5a472c03b184b504a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/84175907664ca8b73f73f4883e67e886dfefb9f5", - "reference": "84175907664ca8b73f73f4883e67e886dfefb9f5", + "url": "https://api.github.com/repos/composer/composer/zipball/978198befc71de0b18fc1fc5a472c03b184b504a", + "reference": "978198befc71de0b18fc1fc5a472c03b184b504a", "shasum": "" }, "require": { @@ -8770,7 +9223,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/2.2.18" + "source": "https://github.com/composer/composer/tree/2.2.21" }, "funding": [ { @@ -8786,7 +9239,7 @@ "type": "tidelift" } ], - "time": "2022-08-20T09:33:38+00:00" + "time": "2023-02-15T12:07:40+00:00" }, { "name": "composer/metadata-minifier", @@ -9250,16 +9703,16 @@ }, { "name": "doctrine/collections", - "version": "1.7.3", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "09dde3eb237756190f2de738d3c97cff10a8407b" + "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/09dde3eb237756190f2de738d3c97cff10a8407b", - "reference": "09dde3eb237756190f2de738d3c97cff10a8407b", + "url": "https://api.github.com/repos/doctrine/collections/zipball/2b44dd4cbca8b5744327de78bafef5945c7e7b5e", + "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e", "shasum": "" }, "require": { @@ -9314,9 +9767,9 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/1.7.3" + "source": "https://github.com/doctrine/collections/tree/1.8.0" }, - "time": "2022-09-01T19:34:23+00:00" + "time": "2022-09-01T20:12:10+00:00" }, { "name": "doctrine/common", @@ -9464,34 +9917,35 @@ }, { "name": "doctrine/event-manager", - "version": "1.1.2", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683" + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/eb2ecf80e3093e8f3c2769ac838e27d8ede8e683", - "reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", "shasum": "" }, "require": { + "doctrine/deprecations": "^0.5.3 || ^1", "php": "^7.1 || ^8.0" }, "conflict": { "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "~1.4.10 || ^1.5.4", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.8", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "vimeo/psalm": "^4.24" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -9535,7 +9989,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.2" + "source": "https://github.com/doctrine/event-manager/tree/1.2.0" }, "funding": [ { @@ -9551,7 +10005,7 @@ "type": "tidelift" } ], - "time": "2022-07-27T22:18:11+00:00" + "time": "2022-10-12T20:51:15+00:00" }, { "name": "doctrine/inflector", @@ -9651,30 +10105,30 @@ }, { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -9701,7 +10155,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -9717,7 +10171,7 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "doctrine/persistence", @@ -9823,20 +10277,20 @@ }, { "name": "drupal/admin_toolbar", - "version": "3.1.1", + "version": "3.3.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/admin_toolbar.git", - "reference": "3.1.1" + "reference": "3.3.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/admin_toolbar-3.1.1.zip", - "reference": "3.1.1", - "shasum": "a66ce69cd7e56f1cc43797dc2a58d6eab367d353" + "url": "https://ftp.drupal.org/files/projects/admin_toolbar-3.3.0.zip", + "reference": "3.3.0", + "shasum": "8e61fba9c9d83a94a844cff96d00871878a7eb98" }, "require": { - "drupal/core": "^8.8.0 || ^9.0 || ^10.0" + "drupal/core": "^9.2 || ^10" }, "require-dev": { "drupal/admin_toolbar_tools": "*" @@ -9844,8 +10298,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "3.1.1", - "datestamp": "1658802262", + "version": "3.3.0", + "datestamp": "1669567837", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -9904,14 +10358,20 @@ }, { "name": "drupal/coder", - "version": "8.3.16", + "version": "8.3.17", "source": { "type": "git", - "url": "https://git.drupalcode.org/project/coder.git", - "reference": "d6f6112e5e84ff4f6baaada223c93dadbd6d3887" + "url": "https://github.com/pfrenssen/coder.git", + "reference": "1c4662337418ab88c9ddf40348f0638e35d49182" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pfrenssen/coder/zipball/1c4662337418ab88c9ddf40348f0638e35d49182", + "reference": "1c4662337418ab88c9ddf40348f0638e35d49182", + "shasum": "" }, "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1 || ^1.0.0", "ext-mbstring": "*", "php": ">=7.1", "sirbrillig/phpcs-variable-analysis": "^2.11.7", @@ -9945,11 +10405,11 @@ "issues": "https://www.drupal.org/project/issues/coder", "source": "https://www.drupal.org/project/coder" }, - "time": "2022-08-20T17:31:46+00:00" + "time": "2023-02-19T21:05:01+00:00" }, { "name": "drupal/core-dev", - "version": "9.4.6", + "version": "9.4.13", "source": { "type": "git", "url": "https://github.com/drupal/core-dev.git", @@ -9993,23 +10453,23 @@ ], "description": "require-dev dependencies from drupal/drupal; use in addition to drupal/core-recommended to run tests from drupal/core.", "support": { - "source": "https://github.com/drupal/core-dev/tree/9.4.6" + "source": "https://github.com/drupal/core-dev/tree/9.4.13" }, "time": "2022-04-14T00:37:13+00:00" }, { "name": "drupal/devel", - "version": "4.2.0", + "version": "4.2.1", "source": { "type": "git", "url": "https://git.drupalcode.org/project/devel.git", - "reference": "4.2.0" + "reference": "4.2.1" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/devel-4.2.0.zip", - "reference": "4.2.0", - "shasum": "8beda0a39f412aa593f489d9c6c52d49162c7b30" + "url": "https://ftp.drupal.org/files/projects/devel-4.2.1.zip", + "reference": "4.2.1", + "shasum": "aa08379bad81cb2e604ee9a0b9e2aabd86fae13f" }, "require": { "doctrine/common": "^2.7", @@ -10028,8 +10488,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "4.2.0", - "datestamp": "1663879913", + "version": "4.2.1", + "datestamp": "1664317444", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -10222,29 +10682,29 @@ }, { "name": "drupal/openapi", - "version": "2.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/openapi.git", - "reference": "8.x-2.0" + "reference": "8.x-2.1" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/openapi-8.x-2.0.zip", - "reference": "8.x-2.0", - "shasum": "4562a072dde9d1b5f3249b292d49ee0c489ace7a" + "url": "https://ftp.drupal.org/files/projects/openapi-8.x-2.1.zip", + "reference": "8.x-2.1", + "shasum": "c0ce4095f555dad31c442f2354453ee4f6e9fadc" }, "require": { - "drupal/core": "^8.7.0 || ^9" + "drupal/core": "^8 || ^9 || ^10" }, - "require-dev": { - "vijaycs85/drupal-quality-checker": "^1.2" + "conflict": { + "drupal/core": "<8.7" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.0", - "datestamp": "1632637188", + "version": "8.x-2.1", + "datestamp": "1669682974", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -10256,6 +10716,10 @@ "GPL-2.0-or-later" ], "authors": [ + { + "name": "bradjones1", + "homepage": "https://www.drupal.org/user/405824" + }, { "name": "e0ipso", "homepage": "https://www.drupal.org/user/550110" @@ -10283,9 +10747,6 @@ ], "description": "Creates OpenAPI specification for Drupal resources.", "homepage": "https://www.drupal.org/project/openapi", - "keywords": [ - "Drupal" - ], "support": { "source": "http://cgit.drupalcode.org/openapi", "issues": "http://drupal.org/project/issues/openapi" @@ -10293,20 +10754,20 @@ }, { "name": "drupal/openapi_jsonapi", - "version": "3.0.2", + "version": "3.0.4", "source": { "type": "git", "url": "https://git.drupalcode.org/project/openapi_jsonapi.git", - "reference": "3.0.2" + "reference": "3.0.4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/openapi_jsonapi-3.0.2.zip", - "reference": "3.0.2", - "shasum": "8e027d581270702fc3ed075759336457cc567a92" + "url": "https://ftp.drupal.org/files/projects/openapi_jsonapi-3.0.4.zip", + "reference": "3.0.4", + "shasum": "439f3bb99281fd666e26732de9db55bf6846b6f7" }, "require": { - "drupal/core": "^8 || ^9", + "drupal/core": "^9.1 || ^10", "drupal/openapi": "^2", "drupal/schemata": "^1", "drupal/schemata_json_schema": "*" @@ -10314,8 +10775,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "3.0.2", - "datestamp": "1632062730", + "version": "3.0.4", + "datestamp": "1670513664", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -10332,6 +10793,10 @@ "homepage": "https://www.drupal.org/user/3616626", "email": "mateu.aguilo.bosch@gmail.com" }, + { + "name": "bradjones1", + "homepage": "https://www.drupal.org/user/405824" + }, { "name": "e0ipso", "homepage": "https://www.drupal.org/user/550110" @@ -10349,26 +10814,26 @@ }, { "name": "drupal/openapi_ui", - "version": "1.0.0-rc3", + "version": "1.0.0-rc4", "source": { "type": "git", "url": "https://git.drupalcode.org/project/openapi_ui.git", - "reference": "8.x-1.0-rc3" + "reference": "8.x-1.0-rc4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/openapi_ui-8.x-1.0-rc3.zip", - "reference": "8.x-1.0-rc3", - "shasum": "31f0dee0242b29aa90310b486c3d5fb441ceb44d" + "url": "https://ftp.drupal.org/files/projects/openapi_ui-8.x-1.0-rc4.zip", + "reference": "8.x-1.0-rc4", + "shasum": "11f8cc945a2e6eb45dad512077a42ea9024fb4fc" }, "require": { - "drupal/core": "^8 || ^9" + "drupal/core": "^8.8 || ^9 || ^10" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.0-rc3", - "datestamp": "1598462015", + "version": "8.x-1.0-rc4", + "datestamp": "1670512625", "security-coverage": { "status": "not-covered", "message": "RC releases are not covered by Drupal security advisories." @@ -10386,34 +10851,34 @@ } ], "description": "Provides plugin system for OpenAPI/Swagger Interface libraries.", - "homepage": "https://www.drupal.org/project/openapi_ui", + "homepage": "http://drupal.org/project/openapi_ui", "support": { "source": "https://git.drupalcode.org/project/openapi_ui" } }, { "name": "drupal/openapi_ui_redoc", - "version": "1.0.0-rc3", + "version": "1.0.0-rc4", "source": { "type": "git", "url": "https://git.drupalcode.org/project/openapi_ui_redoc.git", - "reference": "8.x-1.0-rc3" + "reference": "8.x-1.0-rc4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/openapi_ui_redoc-8.x-1.0-rc3.zip", - "reference": "8.x-1.0-rc3", - "shasum": "453028a4c5474ed9e372d1bc435952ea90133902" + "url": "https://ftp.drupal.org/files/projects/openapi_ui_redoc-8.x-1.0-rc4.zip", + "reference": "8.x-1.0-rc4", + "shasum": "34415abbf0e2d58eb7f8c21f54e797f13713234a" }, "require": { - "drupal/core": "^8 || ^9", + "drupal/core": "^8.8 || ^9 || ^10", "drupal/openapi_ui": "*" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.0-rc3", - "datestamp": "1598462000", + "version": "8.x-1.0-rc4", + "datestamp": "1670344278", "security-coverage": { "status": "not-covered", "message": "RC releases are not covered by Drupal security advisories." @@ -10422,7 +10887,7 @@ }, "notification-url": "https://packages.drupal.org/8/downloads", "license": [ - "GPL-2.0-or-later" + "GPL-2.0+" ], "authors": [ { @@ -10432,6 +10897,9 @@ ], "description": "Provides display of OpenAPI docs using the ReDoc library.", "homepage": "https://www.drupal.org/project/openapi_ui_redoc", + "keywords": [ + "Drupal" + ], "support": { "source": "https://git.drupalcode.org/project/openapi_ui_redoc" } @@ -10494,32 +10962,32 @@ }, { "name": "drupal/schemata", - "version": "1.0.0-beta2", + "version": "1.0.0-beta3", "source": { "type": "git", "url": "https://git.drupalcode.org/project/schemata.git", - "reference": "8.x-1.0-beta2" + "reference": "8.x-1.0-beta3" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/schemata-8.x-1.0-beta2.zip", - "reference": "8.x-1.0-beta2", - "shasum": "c50bc45c370073224877a8c72e6d8d5b2ec732d3" + "url": "https://ftp.drupal.org/files/projects/schemata-8.x-1.0-beta3.zip", + "reference": "8.x-1.0-beta3", + "shasum": "be2cbbf357c3f4d126c8ffbf926432b5fe44e4ff" }, "require": { - "drupal/core": "^8 || ^9" + "drupal/core": "^8 || ^9 || ^10" }, "require-dev": { "drupal/coder": "^8.2", + "drupal/hal": "^1 || ^2", "jakub-onderka/php-parallel-lint": "^0.9.2", - "league/json-guard": "^1.0", - "league/json-reference": "^1.0" + "justinrainbow/json-schema": "^5.2" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.0-beta2", - "datestamp": "1585777919", + "version": "8.x-1.0-beta3", + "datestamp": "1670337727", "security-coverage": { "status": "not-covered", "message": "Beta releases are not covered by Drupal security advisories." @@ -10543,25 +11011,25 @@ ] }, "license": [ - "GPL-2.0+" + "GPL-2.0-or-later" ], "authors": [ { "name": "Adam Ross", - "homepage": "https://www.drupal.org/user/346868", + "homepage": "https://www.drupal.org/user/550110", "email": "grayside@gmail.com" }, { - "name": "HalfChem", - "homepage": "https://www.drupal.org/user/1608382" + "name": "febbraro", + "homepage": "https://www.drupal.org/user/43670" }, { - "name": "e0ipso", - "homepage": "https://www.drupal.org/user/550110" + "name": "Grayside", + "homepage": "https://www.drupal.org/user/346868" }, { - "name": "febbraro", - "homepage": "https://www.drupal.org/user/43670" + "name": "HalfChem", + "homepage": "https://www.drupal.org/user/1608382" }, { "name": "jhedstrom", @@ -10594,16 +11062,16 @@ }, { "name": "drupal/schemata_json_schema", - "version": "1.0.0-beta2", + "version": "1.0.0-beta3", "require": { - "drupal/core": "^8 || ^9", + "drupal/core": "^8 || ^9 || ^10", "drupal/schemata": "*" }, "type": "metapackage", "extra": { "drupal": { - "version": "8.x-1.0-beta2", - "datestamp": "1585777919", + "version": "8.x-1.0-beta3", + "datestamp": "1670337727", "security-coverage": { "status": "not-covered", "message": "Beta releases are not covered by Drupal security advisories." @@ -10615,14 +11083,6 @@ "GPL-2.0-or-later" ], "authors": [ - { - "name": "Grayside", - "homepage": "https://www.drupal.org/user/346868" - }, - { - "name": "HalfChem", - "homepage": "https://www.drupal.org/user/1608382" - }, { "name": "e0ipso", "homepage": "https://www.drupal.org/user/550110" @@ -10631,6 +11091,14 @@ "name": "febbraro", "homepage": "https://www.drupal.org/user/43670" }, + { + "name": "Grayside", + "homepage": "https://www.drupal.org/user/346868" + }, + { + "name": "HalfChem", + "homepage": "https://www.drupal.org/user/1608382" + }, { "name": "jhedstrom", "homepage": "https://www.drupal.org/user/208732" @@ -10731,20 +11199,20 @@ }, { "name": "fakerphp/faker", - "version": "v1.20.0", + "version": "v1.21.0", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b" + "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/37f751c67a5372d4e26353bd9384bc03744ec77b", - "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/92efad6a967f0b79c499705c69b662f738cc9e4d", + "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", + "php": "^7.4 || ^8.0", "psr/container": "^1.0 || ^2.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" }, @@ -10755,7 +11223,8 @@ "bamarni/composer-bin-plugin": "^1.4.1", "doctrine/persistence": "^1.3 || ^2.0", "ext-intl": "*", - "symfony/phpunit-bridge": "^4.4 || ^5.2" + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" }, "suggest": { "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", @@ -10767,7 +11236,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "v1.20-dev" + "dev-main": "v1.21-dev" } }, "autoload": { @@ -10792,9 +11261,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.20.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.21.0" }, - "time": "2022-07-20T13:12:54+00:00" + "time": "2022-12-13T13:54:32+00:00" }, { "name": "friends-of-behat/mink-browserkit-driver", @@ -10860,16 +11329,16 @@ }, { "name": "instaclick/php-webdriver", - "version": "1.4.15", + "version": "1.4.16", "source": { "type": "git", "url": "https://github.com/instaclick/php-webdriver.git", - "reference": "ed8f7741a0952db42686aae0780a0935138a7cf8" + "reference": "a39a1f6dc0f4ddd8b2438fa5eb1f67755730d606" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/instaclick/php-webdriver/zipball/ed8f7741a0952db42686aae0780a0935138a7cf8", - "reference": "ed8f7741a0952db42686aae0780a0935138a7cf8", + "url": "https://api.github.com/repos/instaclick/php-webdriver/zipball/a39a1f6dc0f4ddd8b2438fa5eb1f67755730d606", + "reference": "a39a1f6dc0f4ddd8b2438fa5eb1f67755730d606", "shasum": "" }, "require": { @@ -10917,113 +11386,9 @@ ], "support": { "issues": "https://github.com/instaclick/php-webdriver/issues", - "source": "https://github.com/instaclick/php-webdriver/tree/1.4.15" - }, - "time": "2022-08-09T14:26:29+00:00" - }, - { - "name": "mglaman/phpstan-drupal", - "version": "1.1.25", - "source": { - "type": "git", - "url": "https://github.com/mglaman/phpstan-drupal.git", - "reference": "480245d5d0bd1858e01c43d738718dab85be0ad2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mglaman/phpstan-drupal/zipball/480245d5d0bd1858e01c43d738718dab85be0ad2", - "reference": "480245d5d0bd1858e01c43d738718dab85be0ad2", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^1.6.0", - "symfony/finder": "~3.4.5 ||^4.2 || ^5.0 || ^6.0", - "symfony/yaml": "~3.4.5 || ^4.2|| ^5.0 || ^6.0", - "webflo/drupal-finder": "^1.2" - }, - "require-dev": { - "behat/mink": "^1.8", - "composer/installers": "^1.9", - "drupal/core-recommended": "^8.8@alpha || ^9.0", - "drush/drush": "^9.6 || ^10.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^6.5 || ^7.5 || ^8.0 || ^9", - "slevomat/coding-standard": "^7.1", - "squizlabs/php_codesniffer": "^3.3", - "symfony/phpunit-bridge": "^3.4.3 || ^4.4 || ^5.4 || ^6.0" - }, - "suggest": { - "jangregor/phpstan-prophecy": "Provides a prophecy/prophecy extension for phpstan/phpstan.", - "phpstan/phpstan-deprecation-rules": "For catching deprecations, especially in Drupal core.", - "phpstan/phpstan-phpunit": "PHPUnit extensions and rules for PHPStan." - }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-main": "1.0-dev" - }, - "installer-paths": { - "tests/fixtures/drupal/core": [ - "type:drupal-core" - ], - "tests/fixtures/drupal/libraries/{$name}": [ - "type:drupal-library" - ], - "tests/fixtures/drupal/modules/contrib/{$name}": [ - "type:drupal-module" - ], - "tests/fixtures/drupal/profiles/contrib/{$name}": [ - "type:drupal-profile" - ], - "tests/fixtures/drupal/themes/contrib/{$name}": [ - "type:drupal-theme" - ] - }, - "phpstan": { - "includes": [ - "extension.neon", - "rules.neon" - ] - } - }, - "autoload": { - "psr-4": { - "mglaman\\PHPStanDrupal\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matt Glaman", - "email": "nmd.matt@gmail.com" - } - ], - "description": "Drupal extension and rules for PHPStan", - "support": { - "issues": "https://github.com/mglaman/phpstan-drupal/issues", - "source": "https://github.com/mglaman/phpstan-drupal/tree/1.1.25" + "source": "https://github.com/instaclick/php-webdriver/tree/1.4.16" }, - "funding": [ - { - "url": "https://github.com/mglaman", - "type": "github" - }, - { - "url": "https://opencollective.com/phpstan-drupal", - "type": "open_collective" - }, - { - "url": "https://tidelift.com/funding/github/packagist/mglaman/phpstan-drupal", - "type": "tidelift" - } - ], - "time": "2022-07-18T17:17:55+00:00" + "time": "2022-10-28T13:30:35+00:00" }, { "name": "mikey179/vfsstream", @@ -11078,16 +11443,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -11125,7 +11490,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -11133,7 +11498,7 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "phar-io/manifest", @@ -11420,25 +11785,33 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.1", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" + "reference": "dfc078e8af9c99210337325ff5aa152872c98714" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/dfc078e8af9c99210337325ff5aa152872c98714", + "reference": "dfc078e8af9c99210337325ff5aa152872c98714", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "doctrine/deprecations": "^1.0", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -11464,33 +11837,34 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.1" }, - "time": "2022-03-15T21:29:03+00:00" + "time": "2023-03-27T19:02:04+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.15.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + "reference": "15873c65b207b07765dbc3c95d20fdf4a320cbe2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/15873c65b207b07765dbc3c95d20fdf4a320cbe2", + "reference": "15873c65b207b07765dbc3c95d20fdf4a320cbe2", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", + "doctrine/instantiator": "^1.2 || ^2.0", + "php": "^7.2 || 8.0.* || 8.1.* || 8.2.*", "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { "phpspec/phpspec": "^6.0 || ^7.0", + "phpstan/phpstan": "^1.9", "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", @@ -11531,9 +11905,9 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.17.0" }, - "time": "2021-12-08T12:19:24+00:00" + "time": "2023-02-02T15:41:36+00:00" }, { "name": "phpspec/prophecy-phpunit", @@ -11589,28 +11963,27 @@ }, { "name": "phpstan/extension-installer", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/phpstan/extension-installer.git", - "reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051" + "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/66c7adc9dfa38b6b5838a9fb728b68a7d8348051", - "reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f06dbb052ddc394e7896fcd1cfcd533f9f6ace40", + "reference": "f06dbb052ddc394e7896fcd1cfcd533f9f6ace40", "shasum": "" }, "require": { - "composer-plugin-api": "^1.1 || ^2.0", - "php": "^7.1 || ^8.0", - "phpstan/phpstan": ">=0.11.6" + "composer-plugin-api": "^2.0", + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.8.0" }, "require-dev": { - "composer/composer": "^1.8", - "phing/phing": "^2.16.3", + "composer/composer": "^2.0", "php-parallel-lint/php-parallel-lint": "^1.2.0", - "phpstan/phpstan-strict-rules": "^0.11 || ^0.12" + "phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0" }, "type": "composer-plugin", "extra": { @@ -11628,22 +12001,22 @@ "description": "Composer plugin for automatic installation of PHPStan extensions", "support": { "issues": "https://github.com/phpstan/extension-installer/issues", - "source": "https://github.com/phpstan/extension-installer/tree/1.1.0" + "source": "https://github.com/phpstan/extension-installer/tree/1.2.0" }, - "time": "2020-12-13T13:06:13+00:00" + "time": "2022-10-17T12:59:16+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.8.0", + "version": "1.18.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "8dd908dd6156e974b9a0f8bb4cd5ad0707830f04" + "reference": "22dcdfd725ddf99583bfe398fc624ad6c5004a0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/8dd908dd6156e974b9a0f8bb4cd5ad0707830f04", - "reference": "8dd908dd6156e974b9a0f8bb4cd5ad0707830f04", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/22dcdfd725ddf99583bfe398fc624ad6c5004a0f", + "reference": "22dcdfd725ddf99583bfe398fc624ad6c5004a0f", "shasum": "" }, "require": { @@ -11673,138 +12046,29 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.8.0" - }, - "time": "2022-09-04T18:59:06+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "1.8.6", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "c386ab2741e64cc9e21729f891b28b2b10fe6618" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c386ab2741e64cc9e21729f891b28b2b10fe6618", - "reference": "c386ab2741e64cc9e21729f891b28b2b10fe6618", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "keywords": [ - "dev", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.8.6" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" - } - ], - "time": "2022-09-23T09:54:39+00:00" - }, - { - "name": "phpstan/phpstan-deprecation-rules", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", - "reference": "e5ccafb0dd8d835dd65d8d7a1a0d2b1b75414682" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/e5ccafb0dd8d835dd65d8d7a1a0d2b1b75414682", - "reference": "e5ccafb0dd8d835dd65d8d7a1a0d2b1b75414682", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "phpstan/phpstan": "^1.0" - }, - "require-dev": { - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^9.5" - }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "phpstan": { - "includes": [ - "rules.neon" - ] - } - }, - "autoload": { - "psr-4": { - "PHPStan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", - "support": { - "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", - "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/1.0.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.18.1" }, - "time": "2021-09-23T11:02:21+00:00" + "time": "2023-04-07T11:51:11+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.17", + "version": "9.2.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", + "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -11819,8 +12083,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -11853,7 +12117,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" }, "funding": [ { @@ -11861,7 +12125,7 @@ "type": "github" } ], - "time": "2022-08-30T12:24:04+00:00" + "time": "2023-03-06T12:58:08+00:00" }, { "name": "phpunit/php-file-iterator", @@ -12106,20 +12370,20 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.24", + "version": "9.6.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5" + "reference": "c993f0d3b0489ffc42ee2fe0bd645af1538a63b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", - "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c993f0d3b0489ffc42ee2fe0bd645af1538a63b2", + "reference": "c993f0d3b0489ffc42ee2fe0bd645af1538a63b2", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -12137,19 +12401,19 @@ "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.1", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -12157,7 +12421,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { @@ -12188,7 +12452,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.24" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.7" }, "funding": [ { @@ -12198,9 +12463,13 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-08-30T07:42:16+00:00" + "time": "2023-04-14T08:58:40+00:00" }, { "name": "react/promise", @@ -12644,16 +12913,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -12695,7 +12964,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -12703,7 +12972,7 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", @@ -13017,16 +13286,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -13065,10 +13334,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -13076,7 +13345,7 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", @@ -13135,16 +13404,16 @@ }, { "name": "sebastian/type", - "version": "3.2.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { @@ -13179,7 +13448,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -13187,7 +13456,7 @@ "type": "github" } ], - "time": "2022-09-12T14:47:03+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -13356,16 +13625,16 @@ }, { "name": "sirbrillig/phpcs-variable-analysis", - "version": "v2.11.8", + "version": "v2.11.16", "source": { "type": "git", "url": "https://github.com/sirbrillig/phpcs-variable-analysis.git", - "reference": "aaf902277f2889fddbdb37046ae02b9965e2cf0f" + "reference": "dc5582dc5a93a235557af73e523c389aac9a8e88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/aaf902277f2889fddbdb37046ae02b9965e2cf0f", - "reference": "aaf902277f2889fddbdb37046ae02b9965e2cf0f", + "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/dc5582dc5a93a235557af73e523c389aac9a8e88", + "reference": "dc5582dc5a93a235557af73e523c389aac9a8e88", "shasum": "" }, "require": { @@ -13373,7 +13642,7 @@ "squizlabs/php_codesniffer": "^3.5.6" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.0", "phpcsstandards/phpcsdevcs": "^1.1", "phpstan/phpstan": "^1.7", "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.5 || ^7.0 || ^8.0 || ^9.0", @@ -13410,36 +13679,36 @@ "source": "https://github.com/sirbrillig/phpcs-variable-analysis", "wiki": "https://github.com/sirbrillig/phpcs-variable-analysis/wiki" }, - "time": "2022-09-08T18:35:53+00:00" + "time": "2023-03-31T16:46:32+00:00" }, { "name": "slevomat/coding-standard", - "version": "8.5.1", + "version": "8.10.0", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "971f489404350bf4608b7e59381e603c47700366" + "reference": "c4e213e6e57f741451a08e68ef838802eec92287" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/971f489404350bf4608b7e59381e603c47700366", - "reference": "971f489404350bf4608b7e59381e603c47700366", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/c4e213e6e57f741451a08e68ef838802eec92287", + "reference": "c4e213e6e57f741451a08e68ef838802eec92287", "shasum": "" }, "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0", "php": "^7.2 || ^8.0", - "phpstan/phpdoc-parser": ">=1.7.0 <1.9.0", + "phpstan/phpdoc-parser": ">=1.18.0 <1.19.0", "squizlabs/php_codesniffer": "^3.7.1" }, "require-dev": { "phing/phing": "2.17.4", "php-parallel-lint/php-parallel-lint": "1.3.2", - "phpstan/phpstan": "1.4.10|1.8.5", - "phpstan/phpstan-deprecation-rules": "1.0.0", - "phpstan/phpstan-phpunit": "1.0.0|1.1.1", - "phpstan/phpstan-strict-rules": "1.4.3", - "phpunit/phpunit": "7.5.20|8.5.21|9.5.24" + "phpstan/phpstan": "1.4.10|1.10.11", + "phpstan/phpstan-deprecation-rules": "1.1.3", + "phpstan/phpstan-phpunit": "1.0.0|1.3.11", + "phpstan/phpstan-strict-rules": "1.5.1", + "phpunit/phpunit": "7.5.20|8.5.21|9.6.6|10.0.19" }, "type": "phpcodesniffer-standard", "extra": { @@ -13449,7 +13718,7 @@ }, "autoload": { "psr-4": { - "SlevomatCodingStandard\\": "SlevomatCodingStandard" + "SlevomatCodingStandard\\": "SlevomatCodingStandard/" } }, "notification-url": "https://packagist.org/downloads/", @@ -13457,9 +13726,13 @@ "MIT" ], "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", + "keywords": [ + "dev", + "phpcs" + ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.5.1" + "source": "https://github.com/slevomat/coding-standard/tree/8.10.0" }, "funding": [ { @@ -13471,20 +13744,20 @@ "type": "tidelift" } ], - "time": "2022-09-23T05:34:53+00:00" + "time": "2023-04-10T07:39:29+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.7.1", + "version": "3.7.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" + "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", + "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", "shasum": "" }, "require": { @@ -13520,14 +13793,15 @@ "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ "phpcs", - "standards" + "standards", + "static analysis" ], "support": { "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", "source": "https://github.com/squizlabs/PHP_CodeSniffer", "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, - "time": "2022-06-18T07:21:10+00:00" + "time": "2023-02-22T23:07:41+00:00" }, { "name": "symfony/browser-kit", @@ -13743,16 +14017,16 @@ }, { "name": "symfony/lock", - "version": "v4.4.40", + "version": "v4.4.46", "source": { "type": "git", "url": "https://github.com/symfony/lock.git", - "reference": "ec23fb51d9b531f7fcd2279afe5b474e624c2445" + "reference": "8b060dd4e10f05219698ceb3a4ad735b19c1be4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/lock/zipball/ec23fb51d9b531f7fcd2279afe5b474e624c2445", - "reference": "ec23fb51d9b531f7fcd2279afe5b474e624c2445", + "url": "https://api.github.com/repos/symfony/lock/zipball/8b060dd4e10f05219698ceb3a4ad735b19c1be4f", + "reference": "8b060dd4e10f05219698ceb3a4ad735b19c1be4f", "shasum": "" }, "require": { @@ -13761,10 +14035,10 @@ "symfony/polyfill-php80": "^1.16" }, "conflict": { - "doctrine/dbal": "<2.6" + "doctrine/dbal": "<2.7" }, "require-dev": { - "doctrine/dbal": "^2.6|^3.0", + "doctrine/dbal": "^2.7|^3.0", "predis/predis": "~1.0" }, "type": "library", @@ -13801,7 +14075,7 @@ "semaphore" ], "support": { - "source": "https://github.com/symfony/lock/tree/v4.4.40" + "source": "https://github.com/symfony/lock/tree/v4.4.46" }, "funding": [ { @@ -13817,20 +14091,20 @@ "type": "tidelift" } ], - "time": "2022-03-22T11:09:53+00:00" + "time": "2022-09-19T08:41:12+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v5.4.11", + "version": "v5.4.21", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "31b1549f54b1a1890e725a0c1c8c2de6ef2205b3" + "reference": "28d8a15a0b4c7186042fa4e0ddea94d561e7ea9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/31b1549f54b1a1890e725a0c1c8c2de6ef2205b3", - "reference": "31b1549f54b1a1890e725a0c1c8c2de6ef2205b3", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/28d8a15a0b4c7186042fa4e0ddea94d561e7ea9e", + "reference": "28d8a15a0b4c7186042fa4e0ddea94d561e7ea9e", "shasum": "" }, "require": { @@ -13884,7 +14158,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v5.4.11" + "source": "https://github.com/symfony/phpunit-bridge/tree/v5.4.21" }, "funding": [ { @@ -13900,7 +14174,7 @@ "type": "tidelift" } ], - "time": "2022-07-28T13:33:28+00:00" + "time": "2023-02-16T09:33:00+00:00" }, { "name": "theseer/tokenizer", diff --git a/patches/filefield_paths/exclude_consumer_entity_type.patch b/patches/filefield_paths/exclude_consumer_entity_type.patch index fad88039..8811c2ac 100644 --- a/patches/filefield_paths/exclude_consumer_entity_type.patch +++ b/patches/filefield_paths/exclude_consumer_entity_type.patch @@ -1,14 +1,12 @@ -diff --git a/modules/contrib/filefield_paths/filefield_paths.module b/web/modules/filefield_paths/filefield_paths.module -index dd207c5..dcfb440 100644 ---- a/modules/contrib/filefield_paths/filefield_paths.module -+++ b/modules/contrib/filefield_paths/filefield_paths.module -@@ -211,7 +211,7 @@ function filefield_paths_form_field_config_edit_form_alter(array &$form, FormSta - function filefield_paths_field_widget_form_alter(&$element, FormStateInterface $form_state, $context) { - // Force all File (Field) Paths uploads to go to the temporary file system - // prior to being processed. -- if (isset($element['#type']) && $element['#type'] == 'managed_file') { -+ if (isset($element['#type']) && $element['#type'] == 'managed_file' && $element['#entity_type'] != 'consumer') { - $settings = $context['items']->getFieldDefinition() - ->getThirdPartySettings('filefield_paths'); - if (isset($settings['enabled']) && $settings['enabled']) { - +diff --git a/modules/contrib/filefield_paths/src/Utility/FieldItem.php b/modules/contrib/filefield_paths/src/Utility/FieldItem.php +--- a/modules/contrib/filefield_paths/src/Utility/FieldItem.php ++++ b/modules/contrib/filefield_paths/src/Utility/FieldItem.php +@@ -54,7 +54,7 @@ + * Returns Field Item List instance. Null if widget type is not supported. + */ + public static function getFromSupportedWidget(array $element, array $context): ?FileFieldItemList { +- if(isset($element['#type']) && $element['#type'] === 'managed_file') { ++ if (isset($element['#type']) && $element['#type'] == 'managed_file' && $element['#entity_type'] != 'consumer') { + return $context['items'] ?? NULL; + } + return NULL; diff --git a/patches/jsonapi_include/JAI8x-14-3238138-1.patch b/patches/jsonapi_include/JAI8x-14-3238138-1.patch index fc5656fd..be396481 100644 --- a/patches/jsonapi_include/JAI8x-14-3238138-1.patch +++ b/patches/jsonapi_include/JAI8x-14-3238138-1.patch @@ -3,9 +3,9 @@ index b86e251..e4788b0 100644 --- a/modules/contrib/jsonapi_include/README.md +++ b/modules/contrib/jsonapi_include/README.md @@ -46,7 +46,7 @@ Install module and module auto parse include and relationship of jsonapi. - + **Advanced use:** - + - 1. Navigate to Administration>Configuration>Web services>JSON:API Include + 1. Navigate to Administration>Configuration>Web services>JSON:API>JSON:API Include 2. Enable "Use jsonapi_include query in url" @@ -15,18 +15,17 @@ diff --git a/modules/contrib/jsonapi_include/jsonapi_include.info.yml b/modules/ index 709b221..74d5e65 100644 --- a/modules/contrib/jsonapi_include/jsonapi_include.info.yml +++ b/modules/contrib/jsonapi_include/jsonapi_include.info.yml -@@ -1,9 +1,9 @@ +@@ -1,8 +1,8 @@ -name: 'JSON API Include' +name: 'JSON:API Include' type: module description: 'Add include data to json output' - core: '8.x' - core_version_requirement: ^8 || ^9 + core_version_requirement: ^8 || ^9 || ^10 package: 'Web services' -configure: jsonapi_include.jsonapi_include_settings +configure: jsonapi_include.settings dependencies: - - jsonapi:jsonapi + - drupal:jsonapi diff --git a/modules/contrib/jsonapi_include/jsonapi_include.links.menu.yml b/modules/contrib/jsonapi_include/jsonapi_include.links.menu.yml deleted file mode 100644 index f5daaf8..0000000 diff --git a/patches/simple_oauth/SO52-3082984-12.patch b/patches/simple_oauth/SO52-3082984-12.patch index b7a135fc..f64be556 100644 --- a/patches/simple_oauth/SO52-3082984-12.patch +++ b/patches/simple_oauth/SO52-3082984-12.patch @@ -1,86 +1,49 @@ -diff --git a/modules/contrib/simple_oauth/simple_oauth.services.yml b/modules/contrib/simple_oauth/simple_oauth.services.yml -index 0455a1a..2e296f8 100644 ---- a/modules/contrib/simple_oauth/simple_oauth.services.yml -+++ b/modules/contrib/simple_oauth/simple_oauth.services.yml +diff --git a/simple_oauth.services.yml b/simple_oauth.services.yml +index 0455a1a..0058616 100644 +--- a/simple_oauth.services.yml ++++ b/simple_oauth.services.yml @@ -17,6 +17,7 @@ services: - '@simple_oauth.server.resource_server' - '@entity_type.manager' - '@simple_oauth.page_cache_request_policy.disallow_oauth2_token_requests' -+ - '@simple_oauth.logger.channel' ++ - '@logger.channel.simple_oauth' tags: - { name: authentication_provider, provider_id: oauth2, global: TRUE, priority: 35 } simple_oauth.page_cache_request_policy.disallow_oauth2_token_requests: -@@ -24,7 +25,13 @@ services: +@@ -24,7 +25,14 @@ services: public: false tags: - { name: page_cache_request_policy } - -+ simple_oauth.logger.channel: ++ logger.channel.simple_oauth: + parent: logger.channel_base -+ arguments: [ 'simple_oauth' ] -+ simple_oauth.unauthorized_exception.subscriber: -+ class: Drupal\simple_oauth\EventSubscriber\UnauthorizedExceptionSubscriber -+ tags: -+ - { name: event_subscriber } ++ arguments: ['simple_oauth'] ++ Drupal\simple_oauth\EventSubscriber\ExceptionLoggingSubscriber: ++ decorates: 'exception.logger' ++ arguments: ++ - '@Drupal\simple_oauth\EventSubscriber\ExceptionLoggingSubscriber.inner' ++ - '@logger.channel.simple_oauth' simple_oauth.normalizer.oauth2_token: class: Drupal\simple_oauth\Normalizer\TokenEntityNormalizer arguments: [ '@entity_type.manager' ] -diff --git a/modules/contrib/simple_oauth/src/Authentication/Provider/SimpleOauthAuthenticationProvider.php b/modules/contrib/simple_oauth/src/Authentication/Provider/SimpleOauthAuthenticationProvider.php -index b55b3ce..828c5fe 100644 ---- a/modules/contrib/simple_oauth/src/Authentication/Provider/SimpleOauthAuthenticationProvider.php -+++ b/modules/contrib/simple_oauth/src/Authentication/Provider/SimpleOauthAuthenticationProvider.php -@@ -2,14 +2,16 @@ - - namespace Drupal\simple_oauth\Authentication\Provider; - -+use Drupal\Component\Render\FormattableMarkup; - use Drupal\Core\Authentication\AuthenticationProviderInterface; +diff --git a/src/Authentication/Provider/SimpleOauthAuthenticationProvider.php b/src/Authentication/Provider/SimpleOauthAuthenticationProvider.php +index cf93cb9..c8978ae 100644 +--- a/src/Authentication/Provider/SimpleOauthAuthenticationProvider.php ++++ b/src/Authentication/Provider/SimpleOauthAuthenticationProvider.php +@@ -6,11 +6,11 @@ use Drupal\Core\Authentication\AuthenticationProviderInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; + use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\simple_oauth\Authentication\TokenAuthUser; ++use Drupal\simple_oauth\Exception\OAuthUnauthorizedHttpException; use Drupal\simple_oauth\PageCache\SimpleOauthRequestPolicyInterface; use Drupal\simple_oauth\Server\ResourceServerInterface; use League\OAuth2\Server\Exception\OAuthServerException; -+use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpKernel\Exception\HttpException; -+use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException; /** * @internal -@@ -31,6 +33,11 @@ class SimpleOauthAuthenticationProvider implements AuthenticationProviderInterfa - */ - protected $oauthPageCacheRequestPolicy; - -+ /** -+ * @var \Psr\Log\LoggerInterface -+ */ -+ protected $logger; -+ - /** - * Constructs a HTTP basic authentication provider object. - * -@@ -40,15 +47,19 @@ class SimpleOauthAuthenticationProvider implements AuthenticationProviderInterfa - * The entity type manager service. - * @param \Drupal\simple_oauth\PageCache\SimpleOauthRequestPolicyInterface $page_cache_request_policy - * The page cache request policy. -+ * @param \Psr\Log\LoggerInterface $logger -+ * The logger channel. - */ - public function __construct( - ResourceServerInterface $resource_server, - EntityTypeManagerInterface $entity_type_manager, -- SimpleOauthRequestPolicyInterface $page_cache_request_policy -+ SimpleOauthRequestPolicyInterface $page_cache_request_policy, -+ LoggerInterface $logger - ) { - $this->resourceServer = $resource_server; - $this->entityTypeManager = $entity_type_manager; - $this->oauthPageCacheRequestPolicy = $page_cache_request_policy; -+ $this->logger = $logger; - } - - /** -@@ -75,12 +86,12 @@ public function authenticate(Request $request) { +@@ -78,12 +78,10 @@ class SimpleOauthAuthenticationProvider implements AuthenticationProviderInterfa $auth_request = $this->resourceServer->validateAuthenticatedRequest($request); } catch (OAuthServerException $exception) { @@ -90,22 +53,14 @@ index b55b3ce..828c5fe 100644 - throw new HttpException( - $exception->getHttpStatusCode(), - $exception->getHint(), -+ // $this->logger->notice($exception->getMessage() . -+ // ' Hint: ' . $exception->getHint() . '.'); + // Forward authentication challenge to be interpreted by the requester. -+ throw new UnauthorizedHttpException( ++ throw new OAuthUnauthorizedHttpException( + $this->getUnauthorizedExceptionChallenge($request, $exception), + $exception->getMessage(), $exception ); } -@@ -97,15 +108,18 @@ public function authenticate(Request $request) { - $token->revoke(); - $token->save(); - $exception = OAuthServerException::accessDenied( -- t( -+ new FormattableMarkup( - '%name is blocked or has not been activated yet.', +@@ -106,10 +104,9 @@ class SimpleOauthAuthenticationProvider implements AuthenticationProviderInterfa ['%name' => $account->getAccountName()] ) ); @@ -113,17 +68,13 @@ index b55b3ce..828c5fe 100644 - throw new HttpException( - $exception->getHttpStatusCode(), - $exception->getHint(), -+ -+ $this->logger->notice($exception->getMessage() . -+ ' Hint: ' . $exception->getHint() . '.'); -+ // Forward authentication challenge to be interpreted by the requester. -+ throw new UnauthorizedHttpException( ++ throw new OAuthUnauthorizedHttpException( + $this->getUnauthorizedExceptionChallenge($request, $exception), + $exception->getMessage(), $exception ); } -@@ -120,4 +134,27 @@ public function authenticate(Request $request) { +@@ -124,4 +121,25 @@ class SimpleOauthAuthenticationProvider implements AuthenticationProviderInterfa return $account; } @@ -132,38 +83,44 @@ index b55b3ce..828c5fe 100644 + * Formats challenge for unauthorized exception. + * + * @param \Symfony\Component\HttpFoundation\Request $request ++ * Request. + * @param \League\OAuth2\Server\Exception\OAuthServerException $exception ++ * Exception. + * -+ * @return \Drupal\Component\Render\FormattableMarkup ++ * @return string ++ * Formatted challenge for result. + */ + protected function getUnauthorizedExceptionChallenge(Request $request, OAuthServerException $exception) { -+ $error = match ($exception->getHint()) { -+ 'Access token could not be verified' => 'token_invalid', -+ 'Access token has been revoked' => 'token_revoked', -+ default => $exception->getErrorType(), -+ }; -+ return new FormattableMarkup( -+ '@auth_scheme realm="OAuth", error="@error", error_description="@hint"', [ -+ '@auth_scheme' => strpos($request->headers->get('Authorization'), 'Bearer') === 0 ? 'Bearer' : 'Basic', -+ '@error' => $error, -+ '@hint' => $exception->getHint() -+ ]); ++ return sprintf( ++ '%s realm="OAuth", error="%s", error_description="%s"', ++ strpos($request->headers->get('Authorization'), 'Bearer') === 0 ? 'Bearer' : 'Basic', ++ $exception->getErrorType(), ++ $exception->getHint() ++ ); + } + } -diff --git a/modules/contrib/simple_oauth/src/Controller/Oauth2AuthorizeController.php b/modules/contrib/simple_oauth/src/Controller/Oauth2AuthorizeController.php -index 6646036..7f3eddc 100644 ---- a/modules/contrib/simple_oauth/src/Controller/Oauth2AuthorizeController.php -+++ b/modules/contrib/simple_oauth/src/Controller/Oauth2AuthorizeController.php -@@ -16,6 +16,7 @@ - use League\OAuth2\Server\Entities\ScopeEntityInterface; +diff --git a/src/Controller/Oauth2AuthorizeController.php b/src/Controller/Oauth2AuthorizeController.php +index 13dde1d..0bbb6e3 100644 +--- a/src/Controller/Oauth2AuthorizeController.php ++++ b/src/Controller/Oauth2AuthorizeController.php +@@ -17,13 +17,14 @@ use League\OAuth2\Server\Entities\ScopeEntityInterface; use League\OAuth2\Server\Exception\OAuthServerException; + use League\OAuth2\Server\Repositories\ClientRepositoryInterface; use League\OAuth2\Server\RequestTypes\AuthorizationRequest; +use Psr\Log\LoggerInterface; use Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\RedirectResponse; -@@ -54,6 +55,13 @@ class Oauth2AuthorizeController extends ControllerBase { + use Symfony\Component\HttpFoundation\Request; + + /** +- * Oauth2AuthorizeController. ++ * Controller for authorization code grant. + */ + class Oauth2AuthorizeController extends ControllerBase { + +@@ -55,13 +56,20 @@ class Oauth2AuthorizeController extends ControllerBase { */ protected $knownClientRepository; @@ -175,112 +132,131 @@ index 6646036..7f3eddc 100644 + protected $logger; + /** - * Oauth2AuthorizeController construct. + * @var \League\OAuth2\Server\Repositories\ClientRepositoryInterface + */ + protected $clientRepository; + + /** +- * Oauth2AuthorizeController construct. ++ * Oauth2AuthorizeController constructor. * -@@ -65,17 +73,21 @@ class Oauth2AuthorizeController extends ControllerBase { - * The config factory. - * @param \Drupal\simple_oauth\KnownClientsRepositoryInterface $known_clients_repository + * @param \Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface $message_factory + * The PSR-7 converter. +@@ -73,19 +81,23 @@ class Oauth2AuthorizeController extends ControllerBase { * The known client repository service. + * @param \League\OAuth2\Server\Repositories\ClientRepositoryInterface $client_repository + * The client repository service. + * @param \Psr\Log\LoggerInterface $logger -+ * The logger channel. ++ * Logger channel. */ public function __construct( HttpMessageFactoryInterface $message_factory, Oauth2GrantManagerInterface $grant_manager, ConfigFactoryInterface $config_factory, -- KnownClientsRepositoryInterface $known_clients_repository -+ KnownClientsRepositoryInterface $known_clients_repository, + KnownClientsRepositoryInterface $known_clients_repository, +- ClientRepositoryInterface $client_repository ++ ClientRepositoryInterface $client_repository, + LoggerInterface $logger ) { $this->messageFactory = $message_factory; $this->grantManager = $grant_manager; $this->configFactory = $config_factory; $this->knownClientRepository = $known_clients_repository; + $this->clientRepository = $client_repository; + $this->logger = $logger; } /** -@@ -86,7 +98,8 @@ public static function create(ContainerInterface $container) { - $container->get('psr7.http_message_factory'), +@@ -97,7 +109,8 @@ class Oauth2AuthorizeController extends ControllerBase { $container->get('plugin.manager.oauth2_grant.processor'), $container->get('config.factory'), -- $container->get('simple_oauth.known_clients') -+ $container->get('simple_oauth.known_clients'), -+ $container->get('simple_oauth.logger.channel') + $container->get('simple_oauth.known_clients'), +- $container->get('simple_oauth.repositories.client') ++ $container->get('simple_oauth.repositories.client'), ++ $container->get('logger.channel.simple_oauth') ); } -@@ -158,7 +171,8 @@ public function authorize(Request $request) { +@@ -166,8 +179,9 @@ class Oauth2AuthorizeController extends ControllerBase { } catch (OAuthServerException $exception) { $this->messenger()->addError($this->t('Fatal error. Unable to get the authorization server.')); - watchdog_exception('simple_oauth', $exception); +- return new RedirectResponse(Url::fromRoute('')->toString()); + $this->logger->error($exception->getMessage() . + ' Hint: ' . $exception->getHint() . '.'); - return RedirectResponse::create(Url::fromRoute('')->toString()); ++ return RedirectResponse::create(Url::fromRoute('')->toString()); } if ($auth_request) { -diff --git a/modules/contrib/simple_oauth/src/Controller/Oauth2Token.php b/modules/contrib/simple_oauth/src/Controller/Oauth2Token.php -index 1341fc8..a820268 100644 ---- a/modules/contrib/simple_oauth/src/Controller/Oauth2Token.php -+++ b/modules/contrib/simple_oauth/src/Controller/Oauth2Token.php -@@ -8,6 +8,7 @@ - use League\OAuth2\Server\AuthorizationServer; + $can_grant_codes = $this->currentUser() +diff --git a/src/Controller/Oauth2Token.php b/src/Controller/Oauth2Token.php +index 286d073..93822b5 100644 +--- a/src/Controller/Oauth2Token.php ++++ b/src/Controller/Oauth2Token.php +@@ -9,6 +9,8 @@ use League\OAuth2\Server\AuthorizationServer; use League\OAuth2\Server\Exception\OAuthServerException; + use League\OAuth2\Server\Repositories\ClientRepositoryInterface; use Psr\Http\Message\ServerRequestInterface; +use Psr\Log\LoggerInterface; ++use Psr\Log\LogLevel; use Symfony\Component\DependencyInjection\ContainerInterface; class Oauth2Token extends ControllerBase { -@@ -17,14 +18,22 @@ class Oauth2Token extends ControllerBase { +@@ -23,6 +25,11 @@ class Oauth2Token extends ControllerBase { */ - protected $grantManager; + protected $clientRepository; + /** -+ * @var \Psr\Log\LoggerInterface ++ * Logger channel. + */ -+ protected $logger; ++ protected LoggerInterface $logger; + /** * Oauth2Token constructor. * - * @param \Drupal\simple_oauth\Plugin\Oauth2GrantManagerInterface $grant_manager - * The grant manager. -+ * @param \Psr\Log\LoggerInterface $logger -+ * The logger channel. +@@ -31,9 +38,14 @@ class Oauth2Token extends ControllerBase { + * @param \League\OAuth2\Server\Repositories\ClientRepositoryInterface $client_repository + * The client repository service. */ -- public function __construct(Oauth2GrantManagerInterface $grant_manager) { -+ public function __construct(Oauth2GrantManagerInterface $grant_manager, LoggerInterface $logger) { +- public function __construct(Oauth2GrantManagerInterface $grant_manager, ClientRepositoryInterface $client_repository) { ++ public function __construct( ++ Oauth2GrantManagerInterface $grant_manager, ++ ClientRepositoryInterface $client_repository, ++ LoggerInterface $logger ++ ) { $this->grantManager = $grant_manager; + $this->clientRepository = $client_repository; + $this->logger = $logger; } /** -@@ -32,7 +41,8 @@ public function __construct(Oauth2GrantManagerInterface $grant_manager) { - */ +@@ -42,7 +54,8 @@ class Oauth2Token extends ControllerBase { public static function create(ContainerInterface $container) { return new static( -- $container->get('plugin.manager.oauth2_grant.processor') -+ $container->get('plugin.manager.oauth2_grant.processor'), -+ $container->get('simple_oauth.logger.channel') + $container->get('plugin.manager.oauth2_grant.processor'), +- $container->get('simple_oauth.repositories.client') ++ $container->get('simple_oauth.repositories.client'), ++ $container->get('logger.channel.simple_oauth') ); } -@@ -63,7 +73,8 @@ public function token(ServerRequestInterface $request) { +@@ -69,7 +82,10 @@ class Oauth2Token extends ControllerBase { $response = $this->handleToken($request, $auth_server); } catch (OAuthServerException $exception) { - watchdog_exception('simple_oauth', $exception); -+ $this->logger->error($exception->getMessage() . -+ ' Hint: ' . $exception->getHint() . '.'); ++ $this->logger->log( ++ $exception->getCode() < 500 ? LogLevel::NOTICE : LogLevel::ERROR, ++ $exception->getMessage() . ' Hint: ' . $exception->getHint() . '.' ++ ); $response = $exception->generateHttpResponse(new Response()); } return $response; -diff --git a/modules/contrib/simple_oauth/src/Entity/Form/Oauth2GenerateKeyForm.php b/modules/contrib/simple_oauth/src/Entity/Form/Oauth2GenerateKeyForm.php -index a51b22a..eff0cb0 100755 ---- a/modules/contrib/simple_oauth/src/Entity/Form/Oauth2GenerateKeyForm.php -+++ b/modules/contrib/simple_oauth/src/Entity/Form/Oauth2GenerateKeyForm.php -@@ -8,7 +8,9 @@ +diff --git a/src/Entity/Form/Oauth2GenerateKeyForm.php b/src/Entity/Form/Oauth2GenerateKeyForm.php +index a51b22a..b55deea 100755 +--- a/src/Entity/Form/Oauth2GenerateKeyForm.php ++++ b/src/Entity/Form/Oauth2GenerateKeyForm.php +@@ -8,7 +8,9 @@ use Drupal\Core\Ajax\HtmlCommand; use Drupal\Core\Ajax\InvokeCommand; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; @@ -312,17 +288,17 @@ index a51b22a..eff0cb0 100755 } /** -@@ -35,7 +44,8 @@ public function __construct(KeyGeneratorService $key_generator_service) { +@@ -35,7 +44,8 @@ class Oauth2GenerateKeyForm extends FormBase { */ public static function create(ContainerInterface $container) { return new static( - $container->get('simple_oauth.key.generator') + $container->get('simple_oauth.key.generator'), -+ $container->get('simple_oauth.logger.channel') ++ $container->get('logger.channel.simple_oauth') ); } -@@ -126,7 +136,8 @@ public function generateKeys(&$form, FormStateInterface $form_state) { +@@ -126,7 +136,8 @@ class Oauth2GenerateKeyForm extends FormBase { } catch (\Exception $exception) { // If exception log it and return an error message. @@ -332,74 +308,103 @@ index a51b22a..eff0cb0 100755 $response->addCommand(new InvokeCommand('#key-error-message', 'show')); return $response->addCommand(new HtmlCommand('#key-error-message', $exception->getMessage())); } -diff --git a/modules/contrib/simple_oauth/src/EventSubscriber/UnauthorizedExceptionSubscriber.php b/modules/contrib/simple_oauth/src/EventSubscriber/UnauthorizedExceptionSubscriber.php +diff --git a/src/EventSubscriber/ExceptionLoggingSubscriber.php b/src/EventSubscriber/ExceptionLoggingSubscriber.php new file mode 100644 -index 0000000..a0d8e6f +index 0000000..cf351d3 --- /dev/null -+++ b/modules/contrib/simple_oauth/src/EventSubscriber/UnauthorizedExceptionSubscriber.php -@@ -0,0 +1,49 @@ ++++ b/src/EventSubscriber/ExceptionLoggingSubscriber.php +@@ -0,0 +1,65 @@ +inner = $inner; ++ $this->logger = $logger; ++ } + + /** -+ * Try to catch unauthorized requests and forward the exception to the -+ * requester. Triggers before the core exception logging service. ++ * Log exceptions. + * -+ * @param \Symfony\Component\HttpKernel\Event\RequestEvent $event ++ * @param \Symfony\Component\HttpKernel\Event\ExceptionEvent $event + * The event to process. + */ -+ public function onUnauthorizedException(RequestEvent $event) { -+ /** @var \Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent $event */ -+ $exception = $event->getThrowable(); -+ if ($exception instanceof UnauthorizedHttpException) { -+ $headers = $exception->getHeaders(); -+ if (array_key_exists('WWW-Authenticate', $headers) && -+ strpos($headers['WWW-Authenticate'], 'OAuth') !== FALSE) { -+ $response = new Response( -+ $exception->getMessage(), -+ $exception->getStatusCode(), -+ $exception->getHeaders() -+ ); -+ $event->setResponse($response); -+ } ++ public function onException(ExceptionEvent $event): void { ++ if ($event->getThrowable() instanceof OAuthUnauthorizedHttpException) { ++ $throwable = $event->getThrowable(); ++ $this->logger->notice($throwable->getMessage() . ++ ' Hint: ' . $throwable->getPrevious()->getHint() . '.'); ++ return; + } ++ $this->inner->onException($event); + } + + /** -+ * {@inheritdoc} ++ * {@inheritDoc} + */ + public static function getSubscribedEvents() { -+ // Triggers before ExceptionLoggingSubscriber with priority 50. -+ $events[KernelEvents::EXCEPTION][] = ['onUnauthorizedException', 55]; -+ return $events; ++ return CoreExceptionLoggingSubscriber::getSubscribedEvents(); + } + +} -diff --git a/modules/contrib/simple_oauth/tests/src/Unit/Authentication/Provider/SimpleOauthAuthenticationTest.php b/modules/contrib/simple_oauth/tests/src/Unit/Authentication/Provider/SimpleOauthAuthenticationTest.php -index 9b29eb7..1b1992c 100644 ---- a/modules/contrib/simple_oauth/tests/src/Unit/Authentication/Provider/SimpleOauthAuthenticationTest.php -+++ b/modules/contrib/simple_oauth/tests/src/Unit/Authentication/Provider/SimpleOauthAuthenticationTest.php -@@ -8,6 +8,7 @@ - use Drupal\simple_oauth\PageCache\DisallowSimpleOauthRequests; +diff --git a/src/Exception/OAuthUnauthorizedHttpException.php b/src/Exception/OAuthUnauthorizedHttpException.php +new file mode 100644 +index 0000000..75baa81 +--- /dev/null ++++ b/src/Exception/OAuthUnauthorizedHttpException.php +@@ -0,0 +1,7 @@ ++prophesize(ResourceServerInterface::class); $entity_type_manager = $this->prophesize(EntityTypeManagerInterface::class); diff --git a/patches/simple_oauth/custom-token-revoke-profile-update.patch b/patches/simple_oauth/custom-token-revoke-profile-update.patch index b1c582e5..d18f43a1 100644 --- a/patches/simple_oauth/custom-token-revoke-profile-update.patch +++ b/patches/simple_oauth/custom-token-revoke-profile-update.patch @@ -1,74 +1,484 @@ -diff --git a/modules/contrib/simple_oauth/simple_oauth.module b/modules/contrib/simple_oauth/simple_oauth.module -index 04fc84d..61d86e2 100644 ---- a/modules/contrib/simple_oauth/simple_oauth.module -+++ b/modules/contrib/simple_oauth/simple_oauth.module -@@ -30,7 +30,7 @@ function simple_oauth_cron() { - if (!empty($expired_tokens = $collector->collect($token_cron_batch_size))) { - $collector->deleteMultipleTokens($expired_tokens); - $logger->notice('Deleted @limit expired tokens in cron.', [ -- '@limit' => $token_cron_batch_size, -+ '@limit' => count($expired_tokens), - ]); - } +diff --git a/.gitignore b/.gitignore +new file mode 100644 +index 0000000..de4a392 +--- /dev/null ++++ b/.gitignore +@@ -0,0 +1,2 @@ ++/vendor ++/composer.lock +diff --git a/composer.json b/composer.json +index 7dc400f..9819eec 100644 +--- a/composer.json ++++ b/composer.json +@@ -2,6 +2,12 @@ + "name": "drupal/simple_oauth", + "description": "The Simple OAuth module for Drupal", + "type": "drupal-module", ++ "repositories": [ ++ { ++ "type": "composer", ++ "url": "https://packages.drupal.org/8" ++ } ++ ], + "require": { + "lcobucci/jwt": "^4", + "league/oauth2-server": "^8.3", +@@ -10,7 +16,9 @@ + "php": ">=7.4" + }, + "require-dev": { +- "phpspec/prophecy-phpunit": "^2" ++ "phpspec/prophecy-phpunit": "^2", ++ "drupal/core-recommended": "^9", ++ "drupal/core-dev": "^9" + }, + "license": "GPL-2.0-or-later", + "extra": { +@@ -19,5 +27,10 @@ + "drush.services.yml": "^9" + } + } ++ }, ++ "config": { ++ "allow-plugins": { ++ "dealerdirect/phpcodesniffer-composer-installer": true ++ } + } } -@@ -43,7 +43,22 @@ function simple_oauth_entity_update(EntityInterface $entity) { - $collector = \Drupal::service('simple_oauth.expired_collector'); - // Collect the affected tokens and expire them. - if ($entity instanceof AccountInterface) { +diff --git a/simple_oauth.module b/simple_oauth.module +index 7a98bc6..a27055d 100644 +--- a/simple_oauth.module ++++ b/simple_oauth.module +@@ -14,6 +14,7 @@ use Drupal\Core\Session\AccountInterface; + use Drupal\consumers\Entity\ConsumerInterface; + use Drupal\Core\StringTranslation\TranslatableMarkup; + use Drupal\Core\Url; ++use Drupal\simple_oauth\EntityUpdateHookHandler; + use Drupal\user\RoleInterface; + use Drupal\Core\Link; + +@@ -39,15 +40,7 @@ function simple_oauth_cron() { + * Implements hook_entity_update(). + */ + function simple_oauth_entity_update(EntityInterface $entity) { +- /** @var \Drupal\simple_oauth\ExpiredCollector $collector */ +- $collector = \Drupal::service('simple_oauth.expired_collector'); +- // Collect the affected tokens and expire them. +- if ($entity instanceof AccountInterface) { - $collector->deleteMultipleTokens($collector->collectForAccount($entity)); -+ // Following the Drupal core pattern, revoke access to the system when -+ // password has been changed. -+ $password_changed = $entity->pass->value !== $entity->original->pass->value; +- } +- if ($entity instanceof ConsumerInterface) { +- $collector->deleteMultipleTokens($collector->collectForClient($entity)); +- } ++ \Drupal::service(EntityUpdateHookHandler::class)->handleEntityUpdate($entity); + } + + /** +diff --git a/simple_oauth.services.yml b/simple_oauth.services.yml +index 0455a1a..e869dab 100644 +--- a/simple_oauth.services.yml ++++ b/simple_oauth.services.yml +@@ -109,3 +109,7 @@ services: + arguments: [ '@entity_type.manager', '%simple_oauth.openid.claims%', '@module_handler' ] + tags: + - { name: normalizer, priority: 21 } ++ Drupal\simple_oauth\EntityUpdateHookHandler: ++ arguments: ++ - '@simple_oauth.expired_collector' ++ - '@event_dispatcher' +\ No newline at end of file +diff --git a/src/EntityUpdateHookHandler.php b/src/EntityUpdateHookHandler.php +new file mode 100644 +index 0000000..3df0448 +--- /dev/null ++++ b/src/EntityUpdateHookHandler.php +@@ -0,0 +1,78 @@ ++collector = $expired_collector; ++ $this->eventDispatcher = $event_dispatcher; ++ } ++ ++ /** ++ * Handle invalidation of tokens secondary to entity update. ++ * ++ * @param \Drupal\Core\Entity\EntityInterface $entity ++ * Updated entity. ++ */ ++ public function handleEntityUpdate(EntityInterface $entity): void { ++ // Collect the affected tokens and expire them. ++ if ($entity instanceof UserInterface) { ++ // Following the Drupal core pattern, revoke access to the system when ++ // password has been changed. ++ $password_changed = $entity->pass->value !== $entity->original->pass->value; + -+ // When the account got blocked, we should revoke user's access to the site. -+ $account_blocked = !$entity->pass->value && $entity->original->status->value; ++ // When the account got blocked, we should revoke user's access to the site. ++ $account_blocked = !$entity->isActive() && $entity->original->isActive(); + -+ // When roles have changed, we should revoke the token to prevent potential -+ // access to the content where the user has no access to anymore. -+ $roles_new = $entity->getRoles(); -+ $roles_old = $entity->original->getRoles(); -+ $roles_changed = array_merge(array_diff($roles_new, $roles_old), array_diff($roles_old, $roles_new)); ++ // When roles have changed, we should revoke the token to prevent potential ++ // access to the content where the user has no access to anymore. ++ $roles_new = $entity->getRoles(); ++ $roles_old = $entity->original->getRoles(); ++ $roles_changed = array_merge( ++ array_diff($roles_new, $roles_old), ++ array_diff($roles_old, $roles_new) ++ ); + -+ if ($password_changed || $account_blocked || $roles_changed) { -+ $collector->revokeMultipleTokens($collector->collectForAccount($entity, FALSE)); ++ $event = new UserUpdateTokenInvalidationEvent( ++ $password_changed || $account_blocked || $roles_changed ++ ); ++ $this->eventDispatcher->dispatch($event); ++ if ($event->willInvalidateAccessTokens()) { ++ $this->collector ++ ->deleteMultipleTokens($this->collector->collectForAccount( ++ $entity, ++ $event->willInvalidateRefreshTokens() ++ )); ++ } + } - } - if ($entity instanceof Consumer) { - $collector->deleteMultipleTokens($collector->collectForClient($entity)); -diff --git a/modules/contrib/simple_oauth/src/ExpiredCollector.php b/modules/contrib/simple_oauth/src/ExpiredCollector.php -index 296f794..7e47655 100644 ---- a/modules/contrib/simple_oauth/src/ExpiredCollector.php -+++ b/modules/contrib/simple_oauth/src/ExpiredCollector.php -@@ -81,10 +81,12 @@ public function collect($limit = 0) { ++ if ($entity instanceof Consumer) { ++ $this->collector ++ ->deleteMultipleTokens($this->collector->collectForClient($entity)); ++ } ++ } ++ ++} +diff --git a/src/Event/UserUpdateTokenInvalidationEvent.php b/src/Event/UserUpdateTokenInvalidationEvent.php +new file mode 100644 +index 0000000..1716ff4 +--- /dev/null ++++ b/src/Event/UserUpdateTokenInvalidationEvent.php +@@ -0,0 +1,100 @@ ++invalidateAccessTokens = $flag; ++ } ++ ++ /** ++ * Getter for access token invalidation behavior. ++ * ++ * @return bool ++ * Determination. ++ */ ++ public function willInvalidateAccessTokens(): bool { ++ return $this->invalidateRefreshTokens; ++ } ++ ++ /** ++ * Getter for refresh token invalidation behavior. ++ * ++ * @return bool ++ * Determination. ++ */ ++ public function willInvalidateRefreshTokens(): bool { ++ return $this->invalidateRefreshTokens; ++ } ++ ++ /** ++ * Setter for refresh token invalidation. ++ * ++ * @param bool $flag ++ * Whether to invalidate refresh tokens. ++ */ ++ public function setInvalidateRefreshTokens(bool $flag): void { ++ $this->invalidateRefreshTokens = $flag; ++ if ($flag === TRUE) { ++ $this->invalidateAccessTokens = TRUE; ++ } ++ } ++ ++ /** ++ * Getter for Simple OAuth's determination of access characteristic change. ++ * ++ * @return bool ++ * TRUE if the user's roles, password or status has changed. ++ */ ++ public function haveUserAccessCharacteristicsChanged(): bool { ++ return $this->haveAccessCharacteristicsChanged; ++ } ++ ++ /** ++ * Constructor. ++ * ++ * @param bool $access_characteristics_have_changed ++ * Flag for whether user access characteristics have changed. ++ */ ++ public function __construct(bool $access_characteristics_have_changed) { ++ $this->haveAccessCharacteristicsChanged = $access_characteristics_have_changed; ++ } ++ ++} +diff --git a/src/ExpiredCollector.php b/src/ExpiredCollector.php +index 0eb6795..4566483 100644 +--- a/src/ExpiredCollector.php ++++ b/src/ExpiredCollector.php +@@ -78,15 +78,19 @@ class ExpiredCollector { + * + * @param \Drupal\Core\Session\AccountInterface $account + * The account. ++ * @param bool $include_refresh_tokens ++ * Include refresh tokens. FALSE by default for BC reasons. + * * @return \Drupal\simple_oauth\Entity\Oauth2TokenInterface[] * The tokens. */ - public function collectForAccount(AccountInterface $account) { -+ public function collectForAccount(AccountInterface $account, $exclude_refresh_token = TRUE) { ++ public function collectForAccount(AccountInterface $account, bool $include_refresh_tokens = FALSE) { $query = $this->tokenStorage->getQuery(); + $query->accessCheck(); $query->condition('auth_user_id', $account->id()); - $query->condition('bundle', 'refresh_token', '!='); -+ if ($exclude_refresh_token) { ++ if (!$include_refresh_tokens) { + $query->condition('bundle', 'refresh_token', '!='); + } $entity_ids = $query->execute(); $output = $entity_ids ? array_values($this->tokenStorage->loadMultiple(array_values($entity_ids))) -@@ -142,4 +144,17 @@ public function deleteMultipleTokens(array $tokens = []) { - $this->tokenStorage->delete($tokens); +-- +GitLab + + +From 5ff0c27b5e125ccab69e6fe4eab4abb06e82024b Mon Sep 17 00:00:00 2001 +From: Brad Jones +Date: Fri, 19 Aug 2022 23:22:58 -0600 +Subject: [PATCH 2/5] CS update + +--- + simple_oauth.services.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/simple_oauth.services.yml b/simple_oauth.services.yml +index e869dab..4b9425a 100644 +--- a/simple_oauth.services.yml ++++ b/simple_oauth.services.yml +@@ -112,4 +112,4 @@ services: + Drupal\simple_oauth\EntityUpdateHookHandler: + arguments: + - '@simple_oauth.expired_collector' +- - '@event_dispatcher' +\ No newline at end of file ++ - '@event_dispatcher' +-- +GitLab + + +From 5626f6ae559f2f51eda619cebab4429c3b554e62 Mon Sep 17 00:00:00 2001 +From: Brad Jones +Date: Sat, 20 Aug 2022 00:15:55 -0600 +Subject: [PATCH 3/5] Fix property names + +--- + src/Event/UserUpdateTokenInvalidationEvent.php | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/Event/UserUpdateTokenInvalidationEvent.php b/src/Event/UserUpdateTokenInvalidationEvent.php +index 1716ff4..f49a308 100644 +--- a/src/Event/UserUpdateTokenInvalidationEvent.php ++++ b/src/Event/UserUpdateTokenInvalidationEvent.php +@@ -51,7 +51,7 @@ final class UserUpdateTokenInvalidationEvent extends Event { + * Determination. + */ + public function willInvalidateAccessTokens(): bool { +- return $this->invalidateRefreshTokens; ++ return $this->invalidateAccessTokens; } + /** +-- +GitLab + + +From 421586422f23219ed24b976fed450b76599de791 Mon Sep 17 00:00:00 2001 +From: Brad Jones +Date: Thu, 17 Nov 2022 16:03:35 -0700 +Subject: [PATCH 4/5] Use ConsumerInterface + +--- + src/EntityUpdateHookHandler.php | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/EntityUpdateHookHandler.php b/src/EntityUpdateHookHandler.php +index 3df0448..78a0988 100644 +--- a/src/EntityUpdateHookHandler.php ++++ b/src/EntityUpdateHookHandler.php +@@ -2,7 +2,7 @@ + + namespace Drupal\simple_oauth; + +-use Drupal\consumers\Entity\Consumer; ++use Drupal\consumers\Entity\ConsumerInterface; + use Drupal\Core\Entity\EntityInterface; + use Drupal\simple_oauth\Event\UserUpdateTokenInvalidationEvent; + use Drupal\user\UserInterface; +@@ -69,7 +69,7 @@ final class EntityUpdateHookHandler { + )); + } + } +- if ($entity instanceof Consumer) { ++ if ($entity instanceof ConsumerInterface) { + $this->collector + ->deleteMultipleTokens($this->collector->collectForClient($entity)); + } +-- +GitLab + + +From ca33f209399e1d9c34fa52a98cdc9dfe314196c3 Mon Sep 17 00:00:00 2001 +From: Dieter Holvoet +Date: Thu, 5 Jan 2023 14:14:38 +0100 +Subject: [PATCH 5/5] Add the user entity to the event object + +--- + src/EntityUpdateHookHandler.php | 3 +- + .../UserUpdateTokenInvalidationEvent.php | 33 ++++++++++++++++++- + 2 files changed, 34 insertions(+), 2 deletions(-) + +diff --git a/src/EntityUpdateHookHandler.php b/src/EntityUpdateHookHandler.php +index 78a0988..d7dd5ee 100644 +--- a/src/EntityUpdateHookHandler.php ++++ b/src/EntityUpdateHookHandler.php +@@ -58,7 +58,8 @@ final class EntityUpdateHookHandler { + ); + + $event = new UserUpdateTokenInvalidationEvent( +- $password_changed || $account_blocked || $roles_changed ++ $password_changed || $account_blocked || $roles_changed, ++ $entity + ); + $this->eventDispatcher->dispatch($event); + if ($event->willInvalidateAccessTokens()) { +diff --git a/src/Event/UserUpdateTokenInvalidationEvent.php b/src/Event/UserUpdateTokenInvalidationEvent.php +index f49a308..f3095f1 100644 +--- a/src/Event/UserUpdateTokenInvalidationEvent.php ++++ b/src/Event/UserUpdateTokenInvalidationEvent.php +@@ -3,12 +3,20 @@ + namespace Drupal\simple_oauth\Event; + + use Drupal\Component\EventDispatcher\Event; ++use Drupal\user\UserInterface; + + /** + * Event for determining whether to invalidate user tokens on update. + */ + final class UserUpdateTokenInvalidationEvent extends Event { + + /** -+ * Revokes multiple tokens based on ID. ++ * The user entity. + * -+ * @param \Drupal\simple_oauth\Entity\Oauth2TokenInterface[] $tokens -+ * The token entity IDs. ++ * @var \Drupal\user\UserInterface + */ -+ public function revokeMultipleTokens(array $tokens = []) { -+ foreach ($tokens as $token) { -+ $token->revoke(); -+ $token->save(); -+ } ++ protected UserInterface $user; ++ + /** + * Whether Simple OAuth has determined that the user's access has changed. + * +@@ -34,6 +42,26 @@ final class UserUpdateTokenInvalidationEvent extends Event { + */ + protected ?bool $invalidateRefreshTokens = FALSE; + ++ /** ++ * Get the changed user entity. ++ * ++ * @return \Drupal\user\UserInterface ++ * The user entity. ++ */ ++ public function getUser(): UserInterface { ++ return $this->user; + } + ++ /** ++ * Get the unchanged user entity. ++ * ++ * @return \Drupal\user\UserInterface|null ++ * The unchanged user entity. ++ */ ++ public function getOriginalUser(): ?UserInterface { ++ return $this->user->original ?? NULL; ++ } ++ + /** + * Setter for access token invalidation. + * +@@ -92,9 +120,12 @@ final class UserUpdateTokenInvalidationEvent extends Event { + * + * @param bool $access_characteristics_have_changed + * Flag for whether user access characteristics have changed. ++ * @param \Drupal\user\UserInterface $user ++ * The user entity. + */ +- public function __construct(bool $access_characteristics_have_changed) { ++ public function __construct(bool $access_characteristics_have_changed, UserInterface $user) { + $this->haveAccessCharacteristicsChanged = $access_characteristics_have_changed; ++ $this->user = $user; + } + } From f088eea537f5e4b5bf76dc5a3e33377ad8fd1d19 Mon Sep 17 00:00:00 2001 From: Simon Baese Date: Sat, 15 Apr 2023 17:25:33 +0200 Subject: [PATCH 2/4] Fixes after static analysis --- .../lectures/src/LectureListBuilder.php | 2 +- .../academy/progress/src/ProgressManager.php | 19 ++++++++++--------- .../src/ChildEntityListBuilder.php | 1 + ...putedChildEntityReferenceFieldItemList.php | 6 ++++-- .../ExpireRefreshTokensController.php | 1 + .../Oauth2AuthorizeRemoteController.php | 7 ++++++- web/modules/monitoring/logbook/logbook.module | 16 ++++++++++------ .../LogbookProjectResetSubscriber.php | 1 + .../projects/dummy/projects_dummy.install | 1 + 9 files changed, 35 insertions(+), 19 deletions(-) diff --git a/web/modules/academy/lectures/src/LectureListBuilder.php b/web/modules/academy/lectures/src/LectureListBuilder.php index a047f1de..f05616dc 100644 --- a/web/modules/academy/lectures/src/LectureListBuilder.php +++ b/web/modules/academy/lectures/src/LectureListBuilder.php @@ -212,7 +212,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { $delta = count($lectures); foreach ($lectures as $lecture) { - $row = $this->buildRow($lecture, $course_id); + $row = $this->buildRow($lecture, (int) $course_id); if (isset($row['weight'])) { $row['weight']['#delta'] = $delta; } diff --git a/web/modules/academy/progress/src/ProgressManager.php b/web/modules/academy/progress/src/ProgressManager.php index a8f46e58..dd71a0a4 100644 --- a/web/modules/academy/progress/src/ProgressManager.php +++ b/web/modules/academy/progress/src/ProgressManager.php @@ -139,7 +139,7 @@ public function isCompleted(AcademicFormatInterface $entity): bool { /** * Determines the unlocked status. */ - public function isUnlocked(AcademicFormatInterface $entity, AccountInterface $account = NULL): bool { + public function isUnlocked(AcademicFormatInterface $entity, ?AccountInterface $account = NULL): bool { // Look for cached results. $cache_result = $this->getProgressCache($entity, 'unlocked'); @@ -256,7 +256,7 @@ public function calculateProgression(Course $course): int { } $total = count($lectures); - $completed = count(array_filter($lectures, fn($l) => $l->completed)); + $completed = count(array_filter($lectures, static fn($l) => $l->completed)); $progression = ceil($completed / $total * 100); // Here, we cover an edge case. An example scenario: @@ -320,7 +320,7 @@ public function currentLecture(Course $course): ?Lecture { // Get the first lecture that is not completed. $lecture = current(array_filter($lectures_by_completed, - fn($l) => !$l->completed)); + static fn($l) => !$l->completed)); // If somehow all lectures are completed return the first lecture. if (!$lecture) { @@ -328,7 +328,7 @@ public function currentLecture(Course $course): ?Lecture { } // Get selected lecture from references and check unlocked status again. - $lecture = array_filter($lectures, fn ($l) => $l->id() == $lecture->id); + $lecture = array_filter($lectures, static fn ($l) => $l->id() == $lecture->id); $lecture = reset($lecture); return $this->isUnlocked($lecture) ? $lecture : $first; } @@ -359,7 +359,7 @@ public function requiredQuestionsAnswered(Lecture $lecture) { $answered = TRUE; if ($questionnaires = array_filter($lecture->getParagraphs(), - fn($p) => $p->bundle() == 'questionnaire')) { + static fn($p) => $p->bundle() == 'questionnaire')) { /** @var \Drupal\questionnaire\Entity\Questionnaire[] $questionnaires */ foreach ($questionnaires as $questionnaire) { $questions = $questionnaire->getQuestions(); @@ -384,7 +384,7 @@ public function requiredQuestionsAnswered(Lecture $lecture) { * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException * @throws \Drupal\Core\Entity\EntityMalformedException */ - public function loadProgress(AcademicFormatInterface $entity, AccountInterface $account = NULL): ?ProgressInterface { + public function loadProgress(AcademicFormatInterface $entity, ?AccountInterface $account = NULL): ?ProgressInterface { $progress_entity_type_id = $entity->getEntityTypeId() . '_progress'; @@ -395,6 +395,7 @@ public function loadProgress(AcademicFormatInterface $entity, AccountInterface $ $query = $this->entityTypeManager->getStorage($progress_entity_type_id) ->getQuery(); $progress_id = $query + ->accessCheck(FALSE) ->condition($entity->getEntityTypeId(), $entity->id()) ->condition('uid', $uid) ->execute(); @@ -421,7 +422,7 @@ public function loadProgress(AcademicFormatInterface $entity, AccountInterface $ /** * Gets a field of the progress. */ - protected function getProgressField(AcademicFormatInterface $entity, string $field_name, AccountInterface $account = NULL): mixed { + protected function getProgressField(AcademicFormatInterface $entity, string $field_name, ?AccountInterface $account = NULL): mixed { $progress = NULL; @@ -445,7 +446,7 @@ protected function getProgressField(AcademicFormatInterface $entity, string $fie /** * Gets the referenced lectures with completed status. */ - public function getReferencedLecturesByCompleted(Course $course, AccountInterface $account = NULL): array { + public function getReferencedLecturesByCompleted(Course $course, ?AccountInterface $account = NULL): array { $lecture_references = $course->get('lectures')->getValue(); $lecture_ids = array_column($lecture_references, 'target_id'); @@ -472,7 +473,7 @@ public function getReferencedLecturesByCompleted(Course $course, AccountInterfac /** * Gets the courses with completed status. */ - public function getCoursesByCompleted(AccountInterface $account = NULL) { + public function getCoursesByCompleted(?AccountInterface $account = NULL) { // Get id and completed with custom query sorted by weight. // Might be faster than loading every course individually. diff --git a/web/modules/child_entities/src/ChildEntityListBuilder.php b/web/modules/child_entities/src/ChildEntityListBuilder.php index 3217bea8..c0e3ab66 100644 --- a/web/modules/child_entities/src/ChildEntityListBuilder.php +++ b/web/modules/child_entities/src/ChildEntityListBuilder.php @@ -73,6 +73,7 @@ protected function getEntityIds() { $this->entityType->getKey('weight') : $this->entityType->getKey('id'); $query = $this->getStorage()->getQuery() + ->accessCheck(FALSE) ->sort($sort_by) ->condition($this->entityType->getKey('parent'), $this->parent->id()); diff --git a/web/modules/child_entities/src/Plugin/Field/ComputedChildEntityReferenceFieldItemList.php b/web/modules/child_entities/src/Plugin/Field/ComputedChildEntityReferenceFieldItemList.php index 1ec1e71d..69a4c252 100644 --- a/web/modules/child_entities/src/Plugin/Field/ComputedChildEntityReferenceFieldItemList.php +++ b/web/modules/child_entities/src/Plugin/Field/ComputedChildEntityReferenceFieldItemList.php @@ -48,7 +48,9 @@ protected function computeValue() { // Query for children referencing the parent. $query = $this->entityTypeManager() - ->getStorage($target_type_id)->getQuery() + ->getStorage($target_type_id) + ->getQuery() + ->accessCheck(FALSE) ->condition($parent->getEntityTypeId(), $parent->id()); // Sort by weight if the field is available. @@ -60,7 +62,7 @@ protected function computeValue() { // Attach the query result to the list. $this->setValue( - array_map(fn ($id) => ['target_id' => $id], $query->execute()) + array_map(static fn ($id) => ['target_id' => $id], $query->execute()) ); } diff --git a/web/modules/interfaces/oauth_grant_remote/src/Controller/ExpireRefreshTokensController.php b/web/modules/interfaces/oauth_grant_remote/src/Controller/ExpireRefreshTokensController.php index 66404407..8ef1de31 100644 --- a/web/modules/interfaces/oauth_grant_remote/src/Controller/ExpireRefreshTokensController.php +++ b/web/modules/interfaces/oauth_grant_remote/src/Controller/ExpireRefreshTokensController.php @@ -149,6 +149,7 @@ public function response(ServerRequestInterface $request) { // If this user is a creative, invalidate refresh tokens. $query = $this->tokenStorage->getQuery(); + $query->accessCheck(FALSE); $query->condition('auth_user_id', $remote_account['uid']); $query->condition('bundle', 'refresh_token'); $token_ids = $query->execute(); diff --git a/web/modules/interfaces/oauth_grant_remote/src/Controller/Oauth2AuthorizeRemoteController.php b/web/modules/interfaces/oauth_grant_remote/src/Controller/Oauth2AuthorizeRemoteController.php index 86a972c7..e6fb3ea2 100644 --- a/web/modules/interfaces/oauth_grant_remote/src/Controller/Oauth2AuthorizeRemoteController.php +++ b/web/modules/interfaces/oauth_grant_remote/src/Controller/Oauth2AuthorizeRemoteController.php @@ -30,6 +30,7 @@ use Lcobucci\JWT\Token\UnsupportedHeaderFound; use Lcobucci\JWT\Validation\Constraint\LooseValidAt; use League\OAuth2\Server\Exception\OAuthServerException; +use League\OAuth2\Server\Repositories\ClientRepositoryInterface; use Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Request; @@ -93,6 +94,8 @@ class Oauth2AuthorizeRemoteController extends Oauth2AuthorizeController { * The config factory. * @param \Drupal\simple_oauth\KnownClientsRepositoryInterface $known_clients_repository * The known client repository service. + * @param \League\OAuth2\Server\Repositories\ClientRepositoryInterface $client_repository + * The client repository service. * @param \GuzzleHttp\Client $http_client * Guzzle http client service. * @param \Drupal\Component\Datetime\TimeInterface $time @@ -113,6 +116,7 @@ public function __construct( Oauth2GrantManagerInterface $grant_manager, ConfigFactoryInterface $config_factory, KnownClientsRepositoryInterface $known_clients_repository, + ClientRepositoryInterface $client_repository, Client $http_client, TimeInterface $time, LoggerChannelInterface $logger, @@ -121,7 +125,7 @@ public function __construct( Session $session, AccountProxyInterface $account ) { - parent::__construct($message_factory, $grant_manager, $config_factory, $known_clients_repository, $logger); + parent::__construct($message_factory, $grant_manager, $config_factory, $known_clients_repository, $client_repository, $logger); $this->httpClient = $http_client; $this->time = $time; $this->database = $database; @@ -139,6 +143,7 @@ public static function create(ContainerInterface $container) { $container->get('plugin.manager.oauth2_grant.processor'), $container->get('config.factory'), $container->get('simple_oauth.known_clients'), + $container->get('simple_oauth.repositories.client'), $container->get('http_client'), $container->get('datetime.time'), $container->get('logger.factory')->get('youvo'), diff --git a/web/modules/monitoring/logbook/logbook.module b/web/modules/monitoring/logbook/logbook.module index 2ba66bd7..c94d40eb 100644 --- a/web/modules/monitoring/logbook/logbook.module +++ b/web/modules/monitoring/logbook/logbook.module @@ -86,12 +86,14 @@ function logbook_user_delete(AccountInterface $account) { // Delete all non-detectable, non-observable and non-public logs of the // creative. $concealed_patterns = $log_pattern_storage->getQuery() + ->accessCheck(FALSE) ->condition('detectable', FALSE) ->condition('observable', FALSE) ->condition('public', FALSE) ->execute(); if (!empty($concealed_patterns)) { $log_ids = $log_storage->getQuery() + ->accessCheck(FALSE) ->condition('author', $uid) ->condition('type', $concealed_patterns, 'IN') ->execute(); @@ -114,6 +116,7 @@ function logbook_user_delete(AccountInterface $account) { ->condition('manager', $uid) ->condition('creatives', $uid, 'IN'); $log_ids = $log_storage->getQuery() + ->accessCheck(FALSE) ->condition($or_group) ->execute(); $logs = $log_storage->loadMultiple($log_ids); @@ -128,12 +131,13 @@ function logbook_user_delete(AccountInterface $account) { if ($log->getManager()->id() == $uid) { $log->setManager($anonymous); } - if ($creatives = $log->getCreatives()) { - if (in_array($uid, array_map(fn($c) => $c->id(), $creatives))) { - $creatives = array_filter($creatives, fn($c) => $c->id() != $uid); - $creatives[] = $anonymous; - $log->setCreatives($creatives); - } + if ( + ($creatives = $log->getCreatives()) && + in_array($uid, array_map(static fn($c) => $c->id(), $creatives)) + ) { + $creatives = array_filter($creatives, static fn($c) => $c->id() != $uid); + $creatives[] = $anonymous; + $log->setCreatives($creatives); } try { $log->save(); diff --git a/web/modules/monitoring/logbook/src/EventSubscriber/LogbookProjectResetSubscriber.php b/web/modules/monitoring/logbook/src/EventSubscriber/LogbookProjectResetSubscriber.php index f8e6672f..83c9eaf7 100644 --- a/web/modules/monitoring/logbook/src/EventSubscriber/LogbookProjectResetSubscriber.php +++ b/web/modules/monitoring/logbook/src/EventSubscriber/LogbookProjectResetSubscriber.php @@ -23,6 +23,7 @@ public function log(Event $event): void { try { $log_storage = $this->entityTypeManager->getStorage('log'); $log_ids = $log_storage->getQuery() + ->accessCheck(FALSE) ->condition('project', $event->getProject()->id()) ->execute(); $logs = $log_storage->loadMultiple($log_ids); diff --git a/web/modules/projects/projects/dummy/projects_dummy.install b/web/modules/projects/projects/dummy/projects_dummy.install index 3f47ea34..72572621 100644 --- a/web/modules/projects/projects/dummy/projects_dummy.install +++ b/web/modules/projects/projects/dummy/projects_dummy.install @@ -174,6 +174,7 @@ function projects_dummy_site_install_finished() { // Create shell projects for prospect organizations. $prospect_ids = \Drupal::entityQuery('user') + ->accessCheck(FALSE) ->condition('type', 'organization') ->condition('roles', 'prospect') ->execute(); From 59ca666c59c90dc9f62672cfebcde35113073974 Mon Sep 17 00:00:00 2001 From: Simon Baese Date: Sun, 16 Apr 2023 13:37:32 +0200 Subject: [PATCH 3/4] Upgrade to Drupal 9.5.7 and dependencies --- .gitattributes | 16 +- composer.json | 18 +- composer.lock | 124 +- composer.patches.json | 4 +- patches/drupal/D91x-1356276-656.patch | 1475 ----------------- ...2924549-38.patch => D95x-2924549-65.patch} | 40 +- ...56276-686.patch => D95x-3266057-110.patch} | 135 +- .../jsonapi_include/JAI8x14-3131167-6.patch | 10 +- web/.htaccess | 8 +- 9 files changed, 218 insertions(+), 1612 deletions(-) delete mode 100644 patches/drupal/D91x-1356276-656.patch rename patches/drupal/{D91x-2924549-38.patch => D95x-2924549-65.patch} (60%) rename patches/drupal/{D94x-1356276-686.patch => D95x-3266057-110.patch} (93%) diff --git a/.gitattributes b/.gitattributes index a37894e8..76ea8fee 100644 --- a/.gitattributes +++ b/.gitattributes @@ -19,24 +19,24 @@ *.config text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.dist text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 -*.engine text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.engine text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php *.html text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html -*.inc text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php -*.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.inc text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php +*.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php *.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.lock text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.map text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.md text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 -*.module text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php -*.php text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.module text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php +*.php text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php *.po text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 -*.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php *.script text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 -*.sh text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.sh text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php *.sql text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.svg text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 -*.theme text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.theme text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php linguist-language=php *.twig text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.txt text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 *.xml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff --git a/composer.json b/composer.json index b90ce008..44b41ae9 100644 --- a/composer.json +++ b/composer.json @@ -18,19 +18,19 @@ "composer/installers": "^1.12", "cweagans/composer-patches": "^1.7", "drupal/consumer_image_styles": "^4.0", - "drupal/core": "^9.4", - "drupal/core-composer-scaffold": "9.4.*", - "drupal/core-project-message": "9.4.*", - "drupal/core-recommended": "9.4.*", - "drupal/core-vendor-hardening": "9.4.*", - "drupal/entity": "^1.3", + "drupal/core": "^9.5", + "drupal/core-composer-scaffold": "^9.5", + "drupal/core-project-message": "^9.5", + "drupal/core-recommended": "^9.5", + "drupal/core-vendor-hardening": "^9.5", + "drupal/entity": "^1.4", "drupal/filefield_paths": "^1.0@beta", "drupal/image_style_warmer": "^1.1", - "drupal/imagemagick": "^3.3", + "drupal/imagemagick": "^3.4", "drupal/jsonapi_boost": "^2.0", "drupal/jsonapi_cross_bundles": "^1.0", "drupal/jsonapi_extras": "^3.20", - "drupal/jsonapi_include": "^1.4", + "drupal/jsonapi_include": "^1.6", "drupal/mail_login": "^2.6", "drupal/multivalue_form_element": "^1.0@beta", "drupal/simple_oauth": "^5.2", @@ -132,7 +132,7 @@ "dealerdirect/phpcodesniffer-composer-installer": "^0.7", "drupal/admin_toolbar": "^3.0", "drupal/coder": "^8.3", - "drupal/core-dev": "9.4.*", + "drupal/core-dev": "^9.5", "drupal/devel": "^4.1", "drupal/devel_mail_logger": "^1.0@beta", "drupal/druqs": "2.0.x-dev@dev", diff --git a/composer.lock b/composer.lock index a6ec6e0e..b4dc72bb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "54f508387b71f8a360015f4bd8f09e61", + "content-hash": "8bbc05d97009e016b44890fd9823091a", "packages": [ { "name": "asm89/stack-cors", @@ -1436,16 +1436,16 @@ }, { "name": "drupal/core", - "version": "9.4.13", + "version": "9.5.7", "source": { "type": "git", "url": "https://github.com/drupal/core.git", - "reference": "8ad87c86ce88504a0f8b3f8a5f8cc350da48dc4d" + "reference": "bf51aa8ed6ab733fcaf60d0860aefd3918140fe3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core/zipball/8ad87c86ce88504a0f8b3f8a5f8cc350da48dc4d", - "reference": "8ad87c86ce88504a0f8b3f8a5f8cc350da48dc4d", + "url": "https://api.github.com/repos/drupal/core/zipball/bf51aa8ed6ab733fcaf60d0860aefd3918140fe3", + "reference": "bf51aa8ed6ab733fcaf60d0860aefd3918140fe3", "shasum": "" }, "require": { @@ -1468,7 +1468,7 @@ "ext-tokenizer": "*", "ext-xml": "*", "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", - "laminas/laminas-diactoros": "^2.11", + "laminas/laminas-diactoros": "^2.14", "laminas/laminas-feed": "^2.17", "masterminds/html5": "^2.7", "pear/archive_tar": "^1.4.14", @@ -1482,8 +1482,8 @@ "symfony/http-foundation": "^4.4.7", "symfony/http-kernel": "^4.4", "symfony/mime": "^5.4", - "symfony/polyfill-iconv": "^1.25", - "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-iconv": "^1.26", + "symfony/polyfill-php80": "^1.26", "symfony/process": "^4.4", "symfony/psr-http-message-bridge": "^2.1", "symfony/routing": "^4.4", @@ -1597,22 +1597,22 @@ ], "description": "Drupal is an open source content management platform powering millions of websites and applications.", "support": { - "source": "https://github.com/drupal/core/tree/9.4.13" + "source": "https://github.com/drupal/core/tree/9.5.7" }, - "time": "2023-03-24T13:11:03+00:00" + "time": "2023-03-24T16:54:38+00:00" }, { "name": "drupal/core-composer-scaffold", - "version": "9.4.13", + "version": "9.5.7", "source": { "type": "git", "url": "https://github.com/drupal/core-composer-scaffold.git", - "reference": "5f37a9e4008b34e3e4f6bb34ce0b3f7e5ec8984f" + "reference": "c78779acff7b39fc0f29ff1edd710361c15ed87b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/5f37a9e4008b34e3e4f6bb34ce0b3f7e5ec8984f", - "reference": "5f37a9e4008b34e3e4f6bb34ce0b3f7e5ec8984f", + "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/c78779acff7b39fc0f29ff1edd710361c15ed87b", + "reference": "c78779acff7b39fc0f29ff1edd710361c15ed87b", "shasum": "" }, "require": { @@ -1647,13 +1647,13 @@ "drupal" ], "support": { - "source": "https://github.com/drupal/core-composer-scaffold/tree/9.4.13" + "source": "https://github.com/drupal/core-composer-scaffold/tree/9.5.7" }, - "time": "2022-06-19T16:14:23+00:00" + "time": "2023-03-09T21:29:23+00:00" }, { "name": "drupal/core-project-message", - "version": "9.4.13", + "version": "9.5.7", "source": { "type": "git", "url": "https://github.com/drupal/core-project-message.git", @@ -1688,40 +1688,40 @@ "drupal" ], "support": { - "source": "https://github.com/drupal/core-project-message/tree/9.5.6" + "source": "https://github.com/drupal/core-project-message/tree/9.5.7" }, "time": "2022-02-24T17:40:53+00:00" }, { "name": "drupal/core-recommended", - "version": "9.4.13", + "version": "9.5.7", "source": { "type": "git", "url": "https://github.com/drupal/core-recommended.git", - "reference": "b598c6eab4af86049360db98794e6ee25ba01c61" + "reference": "4b63b8220b166ad9eca7b5ea05e485cbe1f2b4a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core-recommended/zipball/b598c6eab4af86049360db98794e6ee25ba01c61", - "reference": "b598c6eab4af86049360db98794e6ee25ba01c61", + "url": "https://api.github.com/repos/drupal/core-recommended/zipball/4b63b8220b166ad9eca7b5ea05e485cbe1f2b4a7", + "reference": "4b63b8220b166ad9eca7b5ea05e485cbe1f2b4a7", "shasum": "" }, "require": { "asm89/stack-cors": "~1.3.0", "composer/semver": "~3.3.2", - "doctrine/annotations": "~1.13.2", + "doctrine/annotations": "~1.13.3", "doctrine/lexer": "~1.2.3", "doctrine/reflection": "~1.2.3", - "drupal/core": "9.4.13", - "egulias/email-validator": "~3.2", + "drupal/core": "9.5.7", + "egulias/email-validator": "~3.2.1", "guzzlehttp/guzzle": "~6.5.8", - "guzzlehttp/promises": "~1.5.1", + "guzzlehttp/promises": "~1.5.2", "guzzlehttp/psr7": "~1.9.0", - "laminas/laminas-diactoros": "~2.11.1", + "laminas/laminas-diactoros": "~2.14.0", "laminas/laminas-escaper": "~2.9.0", "laminas/laminas-feed": "~2.17.0", - "laminas/laminas-stdlib": "~3.7.1", - "masterminds/html5": "~2.7.5", + "laminas/laminas-stdlib": "~3.11.0", + "masterminds/html5": "~2.7.6", "pear/archive_tar": "~1.4.14", "pear/console_getopt": "~v1.4.3", "pear/pear-core-minimal": "~v1.10.11", @@ -1761,7 +1761,7 @@ "symfony/validator": "~v4.4.48", "symfony/var-dumper": "~v5.4.19", "symfony/yaml": "~v4.4.45", - "twig/twig": "~v2.15.3", + "twig/twig": "~v2.15.4", "typo3/phar-stream-wrapper": "~v3.1.7" }, "conflict": { @@ -1774,22 +1774,22 @@ ], "description": "Core and its dependencies with known-compatible minor versions. Require this project INSTEAD OF drupal/core.", "support": { - "source": "https://github.com/drupal/core-recommended/tree/9.4.13" + "source": "https://github.com/drupal/core-recommended/tree/9.5.7" }, - "time": "2023-03-24T13:11:03+00:00" + "time": "2023-03-24T16:54:38+00:00" }, { "name": "drupal/core-vendor-hardening", - "version": "9.4.13", + "version": "9.5.7", "source": { "type": "git", "url": "https://github.com/drupal/core-vendor-hardening.git", - "reference": "6e2b95d65ca2aac7350039c5826175cab5a81881" + "reference": "8293a845c64f1faad0d44955611f8cce69320274" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core-vendor-hardening/zipball/6e2b95d65ca2aac7350039c5826175cab5a81881", - "reference": "6e2b95d65ca2aac7350039c5826175cab5a81881", + "url": "https://api.github.com/repos/drupal/core-vendor-hardening/zipball/8293a845c64f1faad0d44955611f8cce69320274", + "reference": "8293a845c64f1faad0d44955611f8cce69320274", "shasum": "" }, "require": { @@ -1815,9 +1815,9 @@ "drupal" ], "support": { - "source": "https://github.com/drupal/core-vendor-hardening/tree/9.5.0-rc1" + "source": "https://github.com/drupal/core-vendor-hardening/tree/9.5.7" }, - "time": "2022-02-24T17:40:53+00:00" + "time": "2022-12-07T11:22:43+00:00" }, { "name": "drupal/entity", @@ -3733,16 +3733,16 @@ }, { "name": "laminas/laminas-diactoros", - "version": "2.11.3", + "version": "2.14.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "1f97b0c52eafd108e09c76d6b29d83ef4a855f76" + "reference": "6cb35f61913f06b2c91075db00f67cfd78869e28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/1f97b0c52eafd108e09c76d6b29d83ef4a855f76", - "reference": "1f97b0c52eafd108e09c76d6b29d83ef4a855f76", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6cb35f61913f06b2c91075db00f67cfd78869e28", + "reference": "6cb35f61913f06b2c91075db00f67cfd78869e28", "shasum": "" }, "require": { @@ -3763,13 +3763,13 @@ "ext-dom": "*", "ext-gd": "*", "ext-libxml": "*", - "http-interop/http-factory-tests": "^0.8.0", - "laminas/laminas-coding-standard": "~1.0.0", - "php-http/psr7-integration-tests": "^1.1", + "http-interop/http-factory-tests": "^0.9.0", + "laminas/laminas-coding-standard": "~2.3.0", + "php-http/psr7-integration-tests": "^1.1.1", "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.1", - "psalm/plugin-phpunit": "^0.14.0", - "vimeo/psalm": "^4.3" + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.17.0", + "vimeo/psalm": "^4.24.0" }, "type": "library", "extra": { @@ -3828,7 +3828,7 @@ "type": "community_bridge" } ], - "time": "2022-07-06T09:24:53+00:00" + "time": "2022-07-28T12:23:48+00:00" }, { "name": "laminas/laminas-escaper", @@ -4061,16 +4061,16 @@ }, { "name": "laminas/laminas-stdlib", - "version": "3.7.1", + "version": "3.11.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "bcd869e2fe88d567800057c1434f2380354fe325" + "reference": "aad7d2b11ba0069ba0d9b40f6dde3c2fa664b57f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/bcd869e2fe88d567800057c1434f2380354fe325", - "reference": "bcd869e2fe88d567800057c1434f2380354fe325", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/aad7d2b11ba0069ba0d9b40f6dde3c2fa664b57f", + "reference": "aad7d2b11ba0069ba0d9b40f6dde3c2fa664b57f", "shasum": "" }, "require": { @@ -4083,7 +4083,7 @@ "laminas/laminas-coding-standard": "~2.3.0", "phpbench/phpbench": "^1.0", "phpunit/phpunit": "^9.3.7", - "psalm/plugin-phpunit": "^0.16.0", + "psalm/plugin-phpunit": "^0.17.0", "vimeo/psalm": "^4.7" }, "type": "library", @@ -4116,7 +4116,7 @@ "type": "community_bridge" } ], - "time": "2022-01-21T15:50:46+00:00" + "time": "2022-07-27T12:28:58+00:00" }, { "name": "laminas/laminas-text", @@ -10409,16 +10409,16 @@ }, { "name": "drupal/core-dev", - "version": "9.4.13", + "version": "9.5.7", "source": { "type": "git", "url": "https://github.com/drupal/core-dev.git", - "reference": "72ddd684df05fc22e97d42ddba5fb6c5ee9f9b29" + "reference": "60196e12909624e168c482660c0f5795df67a6d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drupal/core-dev/zipball/72ddd684df05fc22e97d42ddba5fb6c5ee9f9b29", - "reference": "72ddd684df05fc22e97d42ddba5fb6c5ee9f9b29", + "url": "https://api.github.com/repos/drupal/core-dev/zipball/60196e12909624e168c482660c0f5795df67a6d7", + "reference": "60196e12909624e168c482660c0f5795df67a6d7", "shasum": "" }, "require": { @@ -10430,7 +10430,7 @@ "friends-of-behat/mink-browserkit-driver": "^1.4", "instaclick/php-webdriver": "^1.4.1", "justinrainbow/json-schema": "^5.2", - "mikey179/vfsstream": "^1.6.8", + "mikey179/vfsstream": "^1.6.11", "phpspec/prophecy": "^1.12", "phpunit/phpunit": "^8.5.14 || ^9", "symfony/browser-kit": "^4.4", @@ -10453,9 +10453,9 @@ ], "description": "require-dev dependencies from drupal/drupal; use in addition to drupal/core-recommended to run tests from drupal/core.", "support": { - "source": "https://github.com/drupal/core-dev/tree/9.4.13" + "source": "https://github.com/drupal/core-dev/tree/9.5.7" }, - "time": "2022-04-14T00:37:13+00:00" + "time": "2022-07-27T00:23:55+00:00" }, { "name": "drupal/devel", diff --git a/composer.patches.json b/composer.patches.json index 68df007c..3af0cb60 100644 --- a/composer.patches.json +++ b/composer.patches.json @@ -1,8 +1,8 @@ { "patches": { "drupal/core": { - "Issue #1356276: Introduce base profiles (Scheduled Drupal 9.5.0)": "patches/drupal/D94x-1356276-686.patch", - "Issue #2924549: Invoke hook after a site install is complete (Scheduled Drupal 9.5.0)": "patches/drupal/D91x-2924549-38.patch", + "Issue #3266057: Introduce base profiles": "patches/drupal/D95x-3266057-110.patch", + "Issue #2924549: Invoke hook after a site install is complete (Scheduled Drupal 9.5.0)": "patches/drupal/D95x-2924549-65.patch", "Issue #3181946: ReplicaKillSwitch unnecessarily starts a session on each request (Scheduled Drupal 9.5.0)": "patches/drupal/D94x-3181946-23.patch", "Issue #3098935: JSON:API can't handle exceptions thrown during authentication (Scheduled Drupal 9.5.0)": "patches/drupal/D94x-3098935-16.patch", "Custom: Change file upload route for jsonapi extras": "patches/drupal/custom-change-file-upload-route-for-jsonapi-extras.patch", diff --git a/patches/drupal/D91x-1356276-656.patch b/patches/drupal/D91x-1356276-656.patch deleted file mode 100644 index dc145bcf..00000000 --- a/patches/drupal/D91x-1356276-656.patch +++ /dev/null @@ -1,1475 +0,0 @@ -diff --git a/core/core.services.yml b/core/core.services.yml -index 5d01d87667..894ccf5f2c 100644 ---- a/core/core.services.yml -+++ b/core/core.services.yml -@@ -314,7 +314,7 @@ services: - - { name: event_subscriber } - config.installer: - class: Drupal\Core\Config\ConfigInstaller -- arguments: ['@config.factory', '@config.storage', '@config.typed', '@config.manager', '@event_dispatcher', '%install_profile%'] -+ arguments: ['@config.factory', '@config.storage', '@config.typed', '@config.manager', '@event_dispatcher', '%install_profile%', '@extension.list.profile'] - lazy: true - config.storage: - class: Drupal\Core\Config\CachedStorage -diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc -index 01c7a4ad4d..de501a55bb 100644 ---- a/core/includes/install.core.inc -+++ b/core/includes/install.core.inc -@@ -459,6 +459,12 @@ function install_begin_request($class_loader, &$install_state) { - if (isset($install_state['profile_info']['distribution']['install']['theme'])) { - $install_state['theme'] = $install_state['profile_info']['distribution']['install']['theme']; - } -+ // Ensure all profile directories are registered. -+ $profiles = \Drupal::service('extension.list.profile')->getAncestors($profile); -+ $profile_directories = array_map(function($extension) { -+ return $extension->getPath(); -+ }, $profiles); -+ $listing->setProfileDirectories($profile_directories); - } - - // Before having installed the system module and being able to do a module -@@ -838,18 +844,22 @@ function install_tasks($install_state) { - - // Now add any tasks defined by the installation profile. - if (!empty($install_state['parameters']['profile'])) { -- // Load the profile install file, because it is not always loaded when -- // hook_install_tasks() is invoked (e.g. batch processing). -- $profile = $install_state['parameters']['profile']; -- $profile_install_file = $install_state['profiles'][$profile]->getPath() . '/' . $profile . '.install'; -- if (file_exists($profile_install_file)) { -- include_once \Drupal::root() . '/' . $profile_install_file; -- } -- $function = $install_state['parameters']['profile'] . '_install_tasks'; -- if (function_exists($function)) { -- $result = $function($install_state); -- if (is_array($result)) { -- $tasks += $result; -+ $profiles = \Drupal::service('extension.list.profile')->getAncestors($install_state['parameters']['profile']); -+ foreach (array_keys($profiles) as $profile_name) { -+ $profile = $install_state['profiles'][$profile_name]; -+ // Load the profile install file, because it is not always loaded when -+ // hook_install_tasks() is invoked (e.g. batch processing). -+ $profile_install_file = $profile->getPath() . '/' . $profile_name . '.install'; -+ if (file_exists($profile_install_file)) { -+ include_once \Drupal::root() . '/' . $profile_install_file; -+ } -+ // If this is a base profile then the profile isn't loaded -+ $function = $profile_name . '_install_tasks'; -+ if (function_exists($function)) { -+ $result = $function($install_state); -+ if (is_array($result)) { -+ $tasks += $result; -+ } - } - } - } -@@ -867,11 +877,13 @@ function install_tasks($install_state) { - - // Allow the installation profile to modify the full list of tasks. - if (!empty($install_state['parameters']['profile'])) { -- $profile = $install_state['parameters']['profile']; -- if ($install_state['profiles'][$profile]->load()) { -- $function = $install_state['parameters']['profile'] . '_install_tasks_alter'; -- if (function_exists($function)) { -- $function($tasks, $install_state); -+ $profiles = \Drupal::service('extension.list.profile')->getAncestors($install_state['parameters']['profile']); -+ foreach (array_keys($profiles) as $profile_name) { -+ if ($install_state['profiles'][$profile_name]->load()) { -+ $function = $profile_name . '_install_tasks_alter'; -+ if (function_exists($function)) { -+ $function($tasks, $install_state); -+ } - } - } - } -@@ -1256,7 +1268,9 @@ function install_select_profile(&$install_state) { - * - For interactive installations via request query parameters. - * - For non-interactive installations via install_drupal() settings. - * - One of the available profiles is a distribution. If multiple profiles are -- * distributions, then the first discovered profile will be selected. -+ * distributions, then the first discovered profile will be selected. If an -+ * inherited profile is detected that is a distribution, it will be chosen -+ * over its base profile. - * - Only one visible profile is available. - * - * @param array $install_state -@@ -1281,12 +1295,9 @@ function _install_select_profile(&$install_state) { - return $profile; - } - } -- // If any of the profiles are distribution profiles, return the first one. -- foreach ($install_state['profiles'] as $profile) { -- $profile_info = install_profile_info($profile->getName()); -- if (!empty($profile_info['distribution'])) { -- return $profile->getName(); -- } -+ // Check for a distribution profile. -+ if ($distribution = \Drupal::service('extension.list.profile')->selectDistribution(array_keys($install_state['profiles']))) { -+ return $distribution; - } - // Get all visible (not hidden) profiles. - $visible_profiles = array_filter($install_state['profiles'], function ($profile) { -@@ -1514,7 +1525,9 @@ function _install_get_version_info($version) { - */ - function install_load_profile(&$install_state) { - $profile = $install_state['parameters']['profile']; -- $install_state['profiles'][$profile]->load(); -+ foreach (array_keys(\Drupal::service('extension.list.profile')->getAncestors($profile)) as $profile_id) { -+ $install_state['profiles'][$profile_id]->load(); -+ } - $install_state['profile_info'] = install_profile_info($profile, isset($install_state['parameters']['langcode']) ? $install_state['parameters']['langcode'] : 'en'); - - $sync_directory = Settings::get('config_sync_directory'); -@@ -1648,6 +1661,10 @@ function install_install_profile(&$install_state) { - - \Drupal::service('module_installer')->install([$install_state['parameters']['profile']], FALSE); - -+ // Install all the profiles. -+ $profiles = \Drupal::service('extension.list.profile')->getAncestors(); -+ \Drupal::service('module_installer')->install(array_keys($profiles), FALSE); -+ - // Ensure that the install profile's theme is used. - // @see _drupal_maintenance_theme() - \Drupal::theme()->resetActiveTheme(); -diff --git a/core/includes/install.inc b/core/includes/install.inc -index 8e6eb21d81..16b74608de 100644 ---- a/core/includes/install.inc -+++ b/core/includes/install.inc -@@ -531,7 +531,6 @@ function _drupal_rewrite_settings_dump_one(\stdClass $variable, $prefix = '', $s - * The list of modules to install. - */ - function drupal_verify_profile($install_state) { -- $profile = $install_state['parameters']['profile']; - $info = $install_state['profile_info']; - - // Get the list of available modules for the selected installation profile. -@@ -540,10 +539,11 @@ function drupal_verify_profile($install_state) { - foreach ($listing->scan('module') as $present_module) { - $present_modules[] = $present_module->getName(); - } -- -- // The installation profile is also a module, which needs to be installed -- // after all the other dependencies have been installed. -- $present_modules[] = $profile; -+ // Get the list of available profiles, which may be used as base profiles or -+ // ancestors of the selected installation profile. -+ foreach ($listing->scan('profile') as $present_profile) { -+ $present_modules[] = $present_profile->getName(); -+ } - - // Verify that all of the profile's required modules are present. - $missing_modules = array_diff($info['install'], $present_modules); -@@ -1063,6 +1063,9 @@ function drupal_check_module($module) { - * Drupal's default installer theme. - * - finish_url: A destination to visit after the installation of the - * distribution is finished -+ * - base profile: The shortname of the base installation profile. Existence of -+ * this key denotes that the installation profile depends on a parent -+ * installation profile. - * - * Note that this function does an expensive file system scan to get info file - * information for dependencies. If you only need information from the info -@@ -1102,8 +1105,8 @@ function install_profile_info($profile, $langcode = 'en') { - 'config_install_path' => NULL, - ]; - $profile_path = drupal_get_path('profile', $profile); -- $info = \Drupal::service('info_parser')->parse("$profile_path/$profile.info.yml"); -- $info += $defaults; -+ $info = \Drupal::service('extension.list.profile')->getExtensionInfo($profile); -+ $ancestors = \Drupal::service('extension.list.profile')->getAncestors($profile); - - $dependency_name_function = function ($dependency) { - return Dependency::createFromString($dependency)->getName(); -@@ -1124,6 +1127,9 @@ function install_profile_info($profile, $langcode = 'en') { - // remove any duplicates. - $info['install'] = array_unique(array_merge($info['install'], $required, $info['dependencies'], $locale)); - -+ // Remove the base profiles from the install list. -+ $info['install'] = array_diff($info['install'], array_keys($ancestors)); -+ - // If the profile has a config/sync directory use that to install drupal. - if (is_dir($profile_path . '/config/sync')) { - $info['config_install_path'] = $profile_path . '/config/sync'; -diff --git a/core/lib/Drupal/Core/Config/ConfigInstaller.php b/core/lib/Drupal/Core/Config/ConfigInstaller.php -index 235a7c1a41..1261d661c6 100644 ---- a/core/lib/Drupal/Core/Config/ConfigInstaller.php -+++ b/core/lib/Drupal/Core/Config/ConfigInstaller.php -@@ -4,6 +4,7 @@ - - use Drupal\Component\Utility\Crypt; - use Drupal\Core\Config\Entity\ConfigDependencyManager; -+use Drupal\Core\Extension\ProfileExtensionList; - use Drupal\Core\Installer\InstallerKernel; - use Symfony\Component\EventDispatcher\EventDispatcherInterface; - -@@ -51,6 +52,13 @@ class ConfigInstaller implements ConfigInstallerInterface { - */ - protected $sourceStorage; - -+ /** -+ * The profile list. -+ * -+ * @var \Drupal\Core\Extension\ProfileExtensionList -+ */ -+ protected $profileList; -+ - /** - * Is configuration being created as part of a configuration sync. - * -@@ -80,14 +88,17 @@ class ConfigInstaller implements ConfigInstallerInterface { - * The event dispatcher. - * @param string $install_profile - * The name of the currently active installation profile. -+ * @param \Drupal\Core\Extension\ProfileExtensionList|null $profile_list -+ * (optional) The profile list. - */ -- public function __construct(ConfigFactoryInterface $config_factory, StorageInterface $active_storage, TypedConfigManagerInterface $typed_config, ConfigManagerInterface $config_manager, EventDispatcherInterface $event_dispatcher, $install_profile) { -+ public function __construct(ConfigFactoryInterface $config_factory, StorageInterface $active_storage, TypedConfigManagerInterface $typed_config, ConfigManagerInterface $config_manager, EventDispatcherInterface $event_dispatcher, $install_profile, ProfileExtensionList $profile_list = NULL) { - $this->configFactory = $config_factory; - $this->activeStorages[$active_storage->getCollectionName()] = $active_storage; - $this->typedConfig = $typed_config; - $this->configManager = $config_manager; - $this->eventDispatcher = $event_dispatcher; - $this->installProfile = $install_profile; -+ $this->profileList = $profile_list ?: \Drupal::service('extension.list.profile'); - } - - /** -@@ -513,7 +524,8 @@ public function checkConfigurationToInstall($type, $name) { - - // Install profiles can not have config clashes. Configuration that - // has the same name as a module's configuration will be used instead. -- if ($name != $this->drupalGetProfile()) { -+ $profiles = $this->profileList->getAncestors($this->installProfile); -+ if (!isset($profiles[$name])) { - // Throw an exception if the module being installed contains configuration - // that already exists. Additionally, can not continue installing more - // modules because those may depend on the current module being installed. -diff --git a/core/lib/Drupal/Core/Config/ExtensionInstallStorage.php b/core/lib/Drupal/Core/Config/ExtensionInstallStorage.php -index ccce5457c8..538b5da5e4 100644 ---- a/core/lib/Drupal/Core/Config/ExtensionInstallStorage.php -+++ b/core/lib/Drupal/Core/Config/ExtensionInstallStorage.php -@@ -3,6 +3,7 @@ - namespace Drupal\Core\Config; - - use Drupal\Core\Extension\ExtensionDiscovery; -+use Drupal\Core\Extension\ProfileExtensionList; - - /** - * Storage to access configuration and schema in enabled extensions. -@@ -51,8 +52,8 @@ class ExtensionInstallStorage extends InstallStorage { - * @param string $profile - * The current installation profile. - */ -- public function __construct(StorageInterface $config_storage, $directory, $collection, $include_profile, $profile) { -- parent::__construct($directory, $collection); -+ public function __construct(StorageInterface $config_storage, $directory = self::CONFIG_INSTALL_DIRECTORY, $collection = StorageInterface::DEFAULT_COLLECTION, $include_profile = TRUE, $profile = NULL, ProfileExtensionList $profile_list = NULL) { -+ parent::__construct($directory, $collection, $profile_list); - $this->configStorage = $config_storage; - $this->includeProfile = $include_profile; - $this->installProfile = $profile; -@@ -86,23 +87,15 @@ public function createCollection($collection) { - protected function getAllFolders() { - if (!isset($this->folders)) { - $this->folders = []; -- $this->folders += $this->getCoreNames(); -+ $this->folders = $this->getCoreNames() + $this->folders; - - $extensions = $this->configStorage->read('core.extension'); - // @todo Remove this scan as part of https://www.drupal.org/node/2186491 -- $listing = new ExtensionDiscovery(\Drupal::root()); -+ $listing = new ExtensionDiscovery(\Drupal::root(), TRUE, NULL, NULL, $this->profileList); - if (!empty($extensions['module'])) { - $modules = $extensions['module']; - // Remove the install profile as this is handled later. - unset($modules[$this->installProfile]); -- $profile_list = $listing->scan('profile'); -- if ($this->installProfile && isset($profile_list[$this->installProfile])) { -- // Prime the drupal_get_filename() static cache with the profile info -- // file location so we can use drupal_get_path() on the active profile -- // during the module scan. -- // @todo Remove as part of https://www.drupal.org/node/2186491 -- drupal_get_filename('profile', $this->installProfile, $profile_list[$this->installProfile]->getPathname()); -- } - $module_list_scan = $listing->scan('module'); - $module_list = []; - foreach (array_keys($modules) as $module) { -@@ -110,7 +103,7 @@ protected function getAllFolders() { - $module_list[$module] = $module_list_scan[$module]; - } - } -- $this->folders += $this->getComponentNames($module_list); -+ $this->folders = $this->getComponentNames($module_list) + $this->folders; - } - if (!empty($extensions['theme'])) { - $theme_list_scan = $listing->scan('theme'); -@@ -119,22 +112,16 @@ protected function getAllFolders() { - $theme_list[$theme] = $theme_list_scan[$theme]; - } - } -- $this->folders += $this->getComponentNames($theme_list); -+ $this->folders = $this->getComponentNames($theme_list) + $this->folders; - } - - if ($this->includeProfile) { -- // The install profile can override module default configuration. We do -- // this by replacing the config file path from the module/theme with the -- // install profile version if there are any duplicates. -- if ($this->installProfile) { -- if (!isset($profile_list)) { -- $profile_list = $listing->scan('profile'); -- } -- if (isset($profile_list[$this->installProfile])) { -- $profile_folders = $this->getComponentNames([$profile_list[$this->installProfile]]); -- $this->folders = $profile_folders + $this->folders; -- } -- } -+ // The install profile (and any parent profiles) can override module -+ // default configuration. We do this by replacing the config file path -+ // from the module/theme with the install profile version if there are -+ // any duplicates. -+ // @todo Remove as part of https://www.drupal.org/node/2186491 -+ $this->folders = $this->getComponentNames($this->profileList->getAncestors($this->installProfile)) + $this->folders; - } - } - return $this->folders; -diff --git a/core/lib/Drupal/Core/Config/InstallStorage.php b/core/lib/Drupal/Core/Config/InstallStorage.php -index 1ad7017f5d..ca32161410 100644 ---- a/core/lib/Drupal/Core/Config/InstallStorage.php -+++ b/core/lib/Drupal/Core/Config/InstallStorage.php -@@ -4,6 +4,7 @@ - - use Drupal\Core\Extension\ExtensionDiscovery; - use Drupal\Core\Extension\Extension; -+use Drupal\Core\Extension\ProfileExtensionList; - - /** - * Storage used by the Drupal installer. -@@ -47,6 +48,13 @@ class InstallStorage extends FileStorage { - */ - protected $directory; - -+ /** -+ * The profile list, used to find additional folders to scan for config. -+ * -+ * @var \Drupal\Core\Extension\ProfileExtensionList -+ */ -+ protected $profileList; -+ - /** - * Constructs an InstallStorage object. - * -@@ -56,9 +64,14 @@ class InstallStorage extends FileStorage { - * @param string $collection - * (optional) The collection to store configuration in. Defaults to the - * default collection. -+ * @param \Drupal\Core\Extension\ProfileExtensionList $profile_list -+ * (optional) The profile list. - */ -- public function __construct($directory = self::CONFIG_INSTALL_DIRECTORY, $collection = StorageInterface::DEFAULT_COLLECTION) { -+ public function __construct($directory = self::CONFIG_INSTALL_DIRECTORY, $collection = StorageInterface::DEFAULT_COLLECTION, ProfileExtensionList $profile_list = NULL) { - parent::__construct($directory, $collection); -+ if (\Drupal::hasService('extension.list.profile')) { -+ $this->profileList = $profile_list ?: \Drupal::service('extension.list.profile'); -+ } - } - - /** -@@ -150,7 +163,9 @@ public function listAll($prefix = '') { - protected function getAllFolders() { - if (!isset($this->folders)) { - $this->folders = []; -- $this->folders += $this->getCoreNames(); -+ $this->folders = $this->getCoreNames() + $this->folders; -+ // Get dependent profiles and add the extension components. -+ $this->folders = $this->getComponentNames($this->profileList->getAncestors()) + $this->folders; - // Perform an ExtensionDiscovery scan as we cannot use drupal_get_path() - // yet because the system module may not yet be enabled during install. - // @todo Remove as part of https://www.drupal.org/node/2186491 -@@ -163,12 +178,12 @@ protected function getAllFolders() { - // during the module scan. - // @todo Remove as part of https://www.drupal.org/node/2186491 - drupal_get_filename('profile', $profile, $profile_list[$profile]->getPathname()); -- $this->folders += $this->getComponentNames([$profile_list[$profile]]); -+ $this->folders = $this->getComponentNames([$profile_list[$profile]]) + $this->folders; - } - } - // @todo Remove as part of https://www.drupal.org/node/2186491 -- $this->folders += $this->getComponentNames($listing->scan('module')); -- $this->folders += $this->getComponentNames($listing->scan('theme')); -+ $this->folders = $this->getComponentNames($listing->scan('module')) + $this->folders; -+ $this->folders = $this->getComponentNames($listing->scan('theme')) + $this->folders; - } - return $this->folders; - } -diff --git a/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php -index dd0b355c79..ffb4e10bde 100644 ---- a/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php -+++ b/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php -@@ -119,12 +119,18 @@ protected function validateModules(ConfigImporter $config_importer) { - $config_importer->logError($this->t('Unable to install the %module module since it does not exist.', ['%module' => $module])); - } - -+ // Get a list of parent profiles and the main profile. -+ /* @var $profiles \Drupal\Core\Extension\Extension[] */ -+ $profiles = \Drupal::service('extension.list.profile')->getAncestors(); -+ /* @var $main_profile \Drupal\Core\Extension\Extension */ -+ $main_profile = end($profiles); -+ - // Ensure that all modules being installed have their dependencies met. - $installs = $config_importer->getExtensionChangelist('module', 'install'); - foreach ($installs as $module) { - $missing_dependencies = []; - foreach (array_keys($module_data[$module]->requires) as $required_module) { -- if (!isset($core_extension['module'][$required_module])) { -+ if (!isset($core_extension['module'][$required_module]) && !array_key_exists($module, $profiles)) { - $missing_dependencies[] = $module_data[$required_module]->info['name']; - } - } -@@ -144,18 +150,44 @@ protected function validateModules(ConfigImporter $config_importer) { - $uninstalls = $config_importer->getExtensionChangelist('module', 'uninstall'); - foreach ($uninstalls as $module) { - foreach (array_keys($module_data[$module]->required_by) as $dependent_module) { -- if ($module_data[$dependent_module]->status && !in_array($dependent_module, $uninstalls, TRUE) && $dependent_module !== $install_profile) { -- $module_name = $module_data[$module]->info['name']; -- $dependent_module_name = $module_data[$dependent_module]->info['name']; -- $config_importer->logError($this->t('Unable to uninstall the %module module since the %dependent_module module is installed.', ['%module' => $module_name, '%dependent_module' => $dependent_module_name])); -+ if ($module_data[$dependent_module]->status && !in_array($dependent_module, $uninstalls, TRUE)) { -+ if (!array_key_exists($dependent_module, $profiles)) { -+ $module_name = $module_data[$module]->info['name']; -+ $dependent_module_name = $module_data[$dependent_module]->info['name']; -+ $config_importer->logError($this->t('Unable to uninstall the %module module since the %dependent_module module is installed.', [ -+ '%module' => $module_name, -+ '%dependent_module' => $dependent_module_name -+ ])); -+ } - } - } - } - -- // Ensure that the install profile is not being uninstalled. -- if (in_array($install_profile, $uninstalls, TRUE)) { -- $profile_name = $module_data[$install_profile]->info['name']; -- $config_importer->logError($this->t('Unable to uninstall the %profile profile since it is the install profile.', ['%profile' => $profile_name])); -+ // Don't allow profiles to be uninstalled. It's possible for no profile to -+ // be set yet if the config is being imported during initial site install. -+ if ($main_profile instanceof \Drupal\Core\Extension\Extension) { -+ if (in_array($main_profile->getName(), $uninstalls, TRUE)) { -+ // Ensure that the active profile is not being uninstalled. -+ $profile_name = $main_profile->info['name']; -+ $config_importer->logError($this->t('Unable to uninstall the %profile profile since it is the main install profile.', ['%profile' => $profile_name])); -+ } -+ if ($profile_uninstalls = array_intersect_key($profiles, array_flip($uninstalls))) { -+ // Ensure that none of the parent profiles are being uninstalled. -+ $profile_names = []; -+ foreach ($profile_uninstalls as $profile) { -+ if ($profile->getName() !== $main_profile->getName()) { -+ $profile_names[] = $module_data[$profile->getName()]->info['name']; -+ } -+ } -+ if (!empty($profile_names)) { -+ $message = $this->formatPlural(count($profile_names), -+ 'Unable to uninstall the :profile profile since it is a parent of another installed profile.', -+ 'Unable to uninstall the :profile profiles since they are parents of another installed profile.', -+ [':profile' => implode(', ', $profile_names)] -+ ); -+ $config_importer->logError($message); -+ } -+ } - } - } - -diff --git a/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php b/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php -index 134a5ef9ed..9304db444f 100644 ---- a/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php -+++ b/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php -@@ -91,6 +91,15 @@ class ExtensionDiscovery { - */ - protected $sitePath; - -+ /** -+ * The profile list. -+ * -+ * Used to determine the directories in which we want to scan for modules. -+ * -+ * @var \Drupal\Core\Extension\ProfileExtensionList -+ */ -+ protected $profileList; -+ - /** - * Constructs a new ExtensionDiscovery object. - * -@@ -102,12 +111,24 @@ class ExtensionDiscovery { - * The available profile directories - * @param string $site_path - * The path to the site. -+ * @param \Drupal\Core\Extension\ProfileExtensionList|null $profile_list -+ * (optional) The profile list. - */ -- public function __construct(string $root, $use_file_cache = TRUE, array $profile_directories = NULL, string $site_path = NULL) { -+ public function __construct($root, $use_file_cache = TRUE, $profile_directories = NULL, $site_path = NULL, ProfileExtensionList $profile_list = NULL) { - $this->root = $root; - $this->fileCache = $use_file_cache ? FileCacheFactory::get('extension_discovery') : NULL; - $this->profileDirectories = $profile_directories; - $this->sitePath = $site_path; -+ -+ // ExtensionDiscovery can be used without a service container -+ // (@drupalKernel::moduleData), so only use the profile list service if it -+ // is available to us. -+ if ($profile_list) { -+ $this->profileList = $profile_list; -+ } -+ elseif (\Drupal::hasService('extension.list.profile')) { -+ $this->profileList = \Drupal::service('extension.list.profile'); -+ } - } - - /** -@@ -229,7 +250,19 @@ public function scan($type, $include_tests = NULL) { - public function setProfileDirectoriesFromSettings() { - $this->profileDirectories = []; - if ($profile = \Drupal::installProfile()) { -- $this->profileDirectories[] = drupal_get_path('profile', $profile); -+ if ($this->profileList) { -+ $profiles = $this->profileList->getAncestors($profile); -+ } -+ else { -+ $profiles = [ -+ $profile => new Extension($this->root, 'profile', drupal_get_path('profile', $profile)), -+ ]; -+ } -+ -+ $profile_directories = array_map(function(Extension $extension) { -+ return $extension->getPath(); -+ }, $profiles); -+ $this->profileDirectories = array_unique(array_merge($profile_directories, $this->profileDirectories)); - } - return $this; - } -diff --git a/core/lib/Drupal/Core/Extension/ModuleExtensionList.php b/core/lib/Drupal/Core/Extension/ModuleExtensionList.php -index c05d892b24..33b3273211 100644 ---- a/core/lib/Drupal/Core/Extension/ModuleExtensionList.php -+++ b/core/lib/Drupal/Core/Extension/ModuleExtensionList.php -@@ -41,7 +41,7 @@ class ModuleExtensionList extends ExtensionList { - /** - * The profile list needed by this module list. - * -- * @var \Drupal\Core\Extension\ExtensionList -+ * @var \Drupal\Core\Extension\ProfileExtensionList - */ - protected $profileList; - -@@ -62,14 +62,14 @@ class ModuleExtensionList extends ExtensionList { - * The state. - * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory - * The config factory. -- * @param \Drupal\Core\Extension\ExtensionList $profile_list -+ * @param \Drupal\Core\Extension\ProfileExtensionList $profile_list - * The site profile listing. - * @param string $install_profile - * The install profile used by the site. - * @param array[] $container_modules_info - * (optional) The module locations coming from the compiled container. - */ -- public function __construct($root, $type, CacheBackendInterface $cache, InfoParserInterface $info_parser, ModuleHandlerInterface $module_handler, StateInterface $state, ConfigFactoryInterface $config_factory, ExtensionList $profile_list, $install_profile, array $container_modules_info = []) { -+ public function __construct($root, $type, CacheBackendInterface $cache, InfoParserInterface $info_parser, ModuleHandlerInterface $module_handler, StateInterface $state, ConfigFactoryInterface $config_factory, ProfileExtensionList $profile_list, $install_profile, array $container_modules_info = []) { - parent::__construct($root, $type, $cache, $info_parser, $module_handler, $state, $install_profile); - - $this->configFactory = $config_factory; -@@ -106,8 +106,7 @@ protected function getExtensionDiscovery() { - protected function getProfileDirectories(ExtensionDiscovery $discovery) { - $discovery->setProfileDirectories([]); - $all_profiles = $discovery->scan('profile'); -- $active_profile = $all_profiles[$this->installProfile]; -- $profiles = array_intersect_key($all_profiles, $this->configFactory->get('core.extension')->get('module') ?: [$active_profile->getName() => 0]); -+ $profiles = $this->profileList->getAncestors($this->installProfile); - - $profile_directories = array_map(function (Extension $profile) { - return $profile->getPath(); -@@ -135,13 +134,9 @@ protected function getActiveProfile() { - */ - protected function doScanExtensions() { - $extensions = parent::doScanExtensions(); -- -- $profiles = $this->profileList->getList(); -- // Modify the active profile object that was previously added to the module -- // list. -- if ($this->installProfile && isset($profiles[$this->installProfile])) { -- $extensions[$this->installProfile] = $profiles[$this->installProfile]; -- } -+ // Merge in the install profile and any profile ancestors. -+ $profiles = $this->profileList->getAncestors($this->installProfile); -+ $extensions = array_merge($extensions, $profiles); - - return $extensions; - } -diff --git a/core/lib/Drupal/Core/Extension/ModuleInstaller.php b/core/lib/Drupal/Core/Extension/ModuleInstaller.php -index bc2f9d0323..d96940e838 100644 ---- a/core/lib/Drupal/Core/Extension/ModuleInstaller.php -+++ b/core/lib/Drupal/Core/Extension/ModuleInstaller.php -@@ -387,7 +387,7 @@ public function uninstall(array $module_list, $uninstall_dependents = TRUE) { - return FALSE; - } - -- // Skip already uninstalled modules. -+ // Skip already uninstalled modules and dependencies of profiles. - if (isset($installed_modules[$dependent]) && !isset($module_list[$dependent])) { - $module_list[$dependent] = $dependent; - } -diff --git a/core/lib/Drupal/Core/Extension/ProfileExtensionList.php b/core/lib/Drupal/Core/Extension/ProfileExtensionList.php -index 5ef9c451fd..5f139a00ed 100644 ---- a/core/lib/Drupal/Core/Extension/ProfileExtensionList.php -+++ b/core/lib/Drupal/Core/Extension/ProfileExtensionList.php -@@ -23,13 +23,172 @@ class ProfileExtensionList extends ExtensionList { - 'package' => 'Other', - 'version' => NULL, - 'php' => \Drupal::MINIMUM_PHP, -+ 'themes' => ['stark'], -+ 'hidden' => FALSE, -+ 'base profile' => '', - ]; - -+ /** -+ * {@inheritdoc} -+ */ -+ public function getExtensionInfo($extension_name) { -+ $all_info = $this->getAllAvailableInfo(); -+ if (isset($all_info[$extension_name])) { -+ return $all_info[$extension_name]; -+ } -+ throw new \InvalidArgumentException("The {$this->type} $extension_name does not exist."); -+ } -+ -+ /** -+ * Returns a list comprised of the profile, its parent profile if it has one, -+ * and any further ancestors. -+ * -+ * @param string $profile -+ * (optional) The name of profile. Defaults to the current install profile. -+ * -+ * @return \Drupal\Core\Extension\Extension[] -+ * An associative array of Extension objects, keyed by profile name in -+ * descending order of their dependencies (ancestors first). If the profile -+ * is not given and cannot be determined, returns an empty array. -+ */ -+ public function getAncestors($profile = NULL) { -+ $ancestors = []; -+ -+ if (empty($profile)) { -+ $profile = $this->installProfile ?: \Drupal::installProfile(); -+ } -+ if (empty($profile)) { -+ return $ancestors; -+ } -+ -+ $extension = $this->get($profile); -+ -+ foreach ($extension->ancestors as $ancestor) { -+ $ancestors[$ancestor] = $this->get($ancestor); -+ } -+ $ancestors[$profile] = $extension; -+ -+ return $ancestors; -+ } -+ -+ /** -+ * Returns all available profiles which are distributions. -+ * -+ * @return \Drupal\Core\Extension\Extension[] -+ * Processed extension objects, keyed by machine name. -+ */ -+ public function listDistributions() { -+ return array_filter($this->getList(), function (Extension $profile) { -+ return !empty($profile->info['distribution']); -+ }); -+ } -+ -+ /** -+ * Select the install distribution from the list of profiles. -+ * -+ * If there are multiple profiles marked as distributions, select the first. -+ * If there is an inherited profile marked as a distribution, select it over -+ * its base profile. -+ * -+ * @param string[] $profiles -+ * List of profile names to search. -+ * -+ * @return string|null -+ * The selected distribution profile name, or NULL if none is found. -+ */ -+ public function selectDistribution(array $profiles = NULL) { -+ $distributions = $this->listDistributions(); -+ -+ if ($profiles) { -+ $distributions = array_intersect_key($distributions, array_flip($profiles)); -+ } -+ -+ // Remove any distributions which are extended by another one. -+ foreach ($distributions as $profile_name => $profile) { -+ if (!empty($profile->info['base profile'])) { -+ $base_profile = $profile->info['base profile']; -+ unset($distributions[$base_profile]); -+ } -+ } -+ -+ return key($distributions) ?: NULL; -+ } -+ -+ /** -+ * {@inheritdoc} -+ */ -+ protected function doList() { -+ $profiles = parent::doList(); -+ -+ // Compute the ancestry of each profile before any further processing. -+ foreach ($profiles as $profile) { -+ // Maintain a list of profiles which depend on this one. -+ $profile->children = []; -+ -+ // Maintain a list of profiles that this one depends on, in reverse -+ // ancestral order (immediate parent first). -+ $profile->ancestors = $this->computeAncestry($profiles, $profile); -+ -+ // Give the profile a heavy weight to ensure that its hooks run last. -+ $profile->weight = count($profile->ancestors) + 1000; -+ } -+ -+ // For each profile, merge in ancestors' module and theme lists. -+ foreach ($profiles as $profile_name => $profile) { -+ if (empty($profile->ancestors)) { -+ continue; -+ } -+ // Reference the extension info here for readability. -+ $info = &$profile->info; -+ -+ // Add the parent profile as a hard dependency. -+ $info['dependencies'][] = reset($profile->ancestors); -+ -+ // Add all themes and extensions listed by ancestors. -+ foreach ($profile->ancestors as $ancestor) { -+ $ancestor = $profiles[$ancestor]; -+ -+ // Add the current profile as a child of the ancestor. -+ $ancestor->children[] = $profile_name; -+ $info['install'] = array_merge($info['install'], $ancestor->info['install']); -+ $info['themes'] = array_merge($info['themes'], $ancestor->info['themes']); -+ // Add ancestor dependencies as our dependencies. -+ $info['dependencies'] = array_merge($info['dependencies'], $ancestor->info['dependencies']); -+ } -+ $info['dependencies'] = array_unique($info['dependencies']); -+ $info['install'] = array_unique($info['install']); -+ $info['themes'] = array_unique($info['themes']); -+ } -+ return $profiles; -+ } -+ -+ /** -+ * Computes and returns the ancestral lineage of a profile. -+ * -+ * @param \Drupal\Core\Extension\Extension[] $profiles -+ * All discovered profiles. -+ * @param \Drupal\Core\Extension\Extension $profile -+ * The profile for which to compute the ancestry. -+ * -+ * @return string[] -+ * The names of the ancestors of the given profile, in order. -+ */ -+ protected function computeAncestry(array $profiles, Extension $profile) { -+ $ancestors = []; -+ -+ while (!empty($profile->info['base profile'])) { -+ array_unshift($ancestors, $profile->info['base profile']); -+ $profile = $profile->info['base profile']; -+ $profile = $profiles[$profile]; -+ } -+ return $ancestors; -+ } -+ - /** - * {@inheritdoc} - */ - protected function getInstalledExtensionNames() { -- return [$this->installProfile]; -+ return array_keys($this->getAncestors()); - } - - } -diff --git a/core/lib/Drupal/Core/Installer/InstallerProfileExtensionList.php b/core/lib/Drupal/Core/Installer/InstallerProfileExtensionList.php -new file mode 100644 -index 0000000000..d5c42adea3 ---- /dev/null -+++ b/core/lib/Drupal/Core/Installer/InstallerProfileExtensionList.php -@@ -0,0 +1,58 @@ -+addedPathNames[$extension_name])) { -+ return $this->addedPathNames[$extension_name]; -+ } -+ elseif (isset($this->pathNames[$extension_name])) { -+ return $this->pathNames[$extension_name]; -+ } -+ elseif (isset(static::$staticAddedPathNames[$extension_name])) { -+ return static::$staticAddedPathNames[$extension_name]; -+ } -+ elseif (($path_names = $this->getPathnames()) && isset($path_names[$extension_name])) { -+ // Ensure we don't have to do path scanning more than really needed. -+ foreach ($path_names as $extension => $path_name) { -+ static::$staticAddedPathNames[$extension] = $path_name; -+ } -+ return $path_names[$extension_name]; -+ } -+ throw new \InvalidArgumentException("The {$this->type} $extension_name does not exist."); -+ } -+ -+} -diff --git a/core/lib/Drupal/Core/Installer/NormalInstallerServiceProvider.php b/core/lib/Drupal/Core/Installer/NormalInstallerServiceProvider.php -index a4a5b14572..3db4eaa220 100644 ---- a/core/lib/Drupal/Core/Installer/NormalInstallerServiceProvider.php -+++ b/core/lib/Drupal/Core/Installer/NormalInstallerServiceProvider.php -@@ -48,6 +48,7 @@ public function register(ContainerBuilder $container) { - - // Use performance-optimized extension lists. - $container->getDefinition('extension.list.module')->setClass(InstallerModuleExtensionList::class); -+ $container->getDefinition('extension.list.profile')->setClass(InstallerProfileExtensionList::class); - $container->getDefinition('extension.list.theme')->setClass(InstallerThemeExtensionList::class); - $container->getDefinition('extension.list.theme_engine')->setClass(InstallerThemeEngineExtensionList::class); - -diff --git a/core/modules/config/tests/config_test/src/TestInstallStorage.php b/core/modules/config/tests/config_test/src/TestInstallStorage.php -index e3c4918df4..6d140815b7 100644 ---- a/core/modules/config/tests/config_test/src/TestInstallStorage.php -+++ b/core/modules/config/tests/config_test/src/TestInstallStorage.php -@@ -21,9 +21,10 @@ protected function getAllFolders() { - $this->folders = $this->getCoreNames(); - $listing = new ExtensionDiscovery(\Drupal::root()); - $listing->setProfileDirectories([]); -- $this->folders += $this->getComponentNames($listing->scan('profile')); -- $this->folders += $this->getComponentNames($listing->scan('module')); -- $this->folders += $this->getComponentNames($listing->scan('theme')); -+ // @todo Remove as part of https://www.drupal.org/node/2186491 -+ $this->folders = $this->getComponentNames($listing->scan('profile')) + $this->folders; -+ $this->folders = $this->getComponentNames($listing->scan('module')) + $this->folders; -+ $this->folders = $this->getComponentNames($listing->scan('theme')) + $this->folders; - } - return $this->folders; - } -diff --git a/core/modules/config/tests/src/Functional/ConfigImportBaseInstallProfileTest.php b/core/modules/config/tests/src/Functional/ConfigImportBaseInstallProfileTest.php -new file mode 100644 -index 0000000000..583c31153b ---- /dev/null -+++ b/core/modules/config/tests/src/Functional/ConfigImportBaseInstallProfileTest.php -@@ -0,0 +1,96 @@ -+webUser = $this->drupalCreateUser(['synchronize configuration']); -+ $this->drupalLogin($this->webUser); -+ $this->copyConfig($this->container->get('config.storage'), $this->container->get('config.storage.sync')); -+ } -+ -+ /** -+ * Tests config importer cannot uninstall parent install profiles and -+ * dependencies of parent profiles can be uninstalled. -+ * -+ * @see \Drupal\Core\EventSubscriber\ConfigImportSubscriber -+ */ -+ public function testInstallParentProfileValidation() { -+ $sync = $this->container->get('config.storage.sync'); -+ $this->copyConfig($this->container->get('config.storage'), $sync); -+ $core = $sync->read('core.extension'); -+ -+ // Ensure that parent profile can not be uninstalled. -+ unset($core['module']['testing']); -+ $sync->write('core.extension', $core); -+ -+ $this->drupalPostForm('admin/config/development/configuration', [], t('Import all')); -+ $this->assertText('The configuration cannot be imported because it failed validation for the following reasons:'); -+ $this->assertText('Unable to uninstall the Testing profile since it is a parent of another installed profile.'); -+ -+ // Uninstall dependencies of parent profile. -+ $core['module']['testing'] = 0; -+ unset($core['module']['dynamic_page_cache']); -+ $sync->write('core.extension', $core); -+ $sync->deleteAll('dynamic_page_cache.'); -+ $this->drupalPostForm('admin/config/development/configuration', [], t('Import all')); -+ $this->assertText('The configuration was imported successfully.'); -+ $this->rebuildContainer(); -+ $this->assertFalse(\Drupal::moduleHandler()->moduleExists('dynamic_page_cache'), 'The dynamic_page_cache module has been uninstalled.'); -+ } -+ -+ /** -+ * Tests config importer cannot uninstall sub-profiles and dependencies of -+ * sub-profiles can be uninstalled. -+ * -+ * @see \Drupal\Core\EventSubscriber\ConfigImportSubscriber -+ */ -+ public function testInstallSubProfileValidation() { -+ $sync = $this->container->get('config.storage.sync'); -+ $this->copyConfig($this->container->get('config.storage'), $sync); -+ $core = $sync->read('core.extension'); -+ -+ // Ensure install sub-profiles can not be uninstalled. -+ unset($core['module']['testing_inherited']); -+ $sync->write('core.extension', $core); -+ -+ $this->drupalPostForm('admin/config/development/configuration', [], t('Import all')); -+ $this->assertText('The configuration cannot be imported because it failed validation for the following reasons:'); -+ $this->assertText('Unable to uninstall the Testing Inherited profile since it is the main install profile.'); -+ -+ // Uninstall dependencies of main profile. -+ $core['module']['testing_inherited'] = 0; -+ unset($core['module']['syslog']); -+ $sync->write('core.extension', $core); -+ $sync->deleteAll('syslog.'); -+ $this->drupalPostForm('admin/config/development/configuration', [], t('Import all')); -+ $this->assertText('The configuration was imported successfully.'); -+ $this->rebuildContainer(); -+ $this->assertFalse(\Drupal::moduleHandler()->moduleExists('syslog'), 'The syslog module has been uninstalled.'); -+ } -+ -+} -diff --git a/core/modules/config/tests/src/Functional/ConfigImportInstallProfileTest.php b/core/modules/config/tests/src/Functional/ConfigImportInstallProfileTest.php -index 9766979d4e..b870aeed33 100644 ---- a/core/modules/config/tests/src/Functional/ConfigImportInstallProfileTest.php -+++ b/core/modules/config/tests/src/Functional/ConfigImportInstallProfileTest.php -@@ -62,7 +62,7 @@ public function testInstallProfileValidation() { - $this->drupalGet('admin/config/development/configuration'); - $this->submitForm([], 'Import all'); - $this->assertSession()->pageTextContains('The configuration cannot be imported because it failed validation for the following reasons:'); -- $this->assertSession()->pageTextContains('Unable to uninstall the Testing config import profile since it is the install profile.'); -+ $this->assertSession()->pageTextContains('Unable to uninstall the Testing config import profile since it is the main install profile.'); - - // Uninstall dependencies of testing_config_import. - $core['module']['testing_config_import'] = 0; -diff --git a/core/modules/system/src/Form/ModulesUninstallForm.php b/core/modules/system/src/Form/ModulesUninstallForm.php -index 52f378e709..66fe19f77e 100644 ---- a/core/modules/system/src/Form/ModulesUninstallForm.php -+++ b/core/modules/system/src/Form/ModulesUninstallForm.php -@@ -127,10 +127,15 @@ public function buildForm(array $form, FormStateInterface $form_state) { - return $form; - } - -+ $profiles = \Drupal::service('extension.list.profile')->getAncestors(); -+ - // Sort all modules by their name. - uasort($uninstallable, 'system_sort_modules_by_info_name'); - $validation_reasons = $this->moduleInstaller->validateUninstall(array_keys($uninstallable)); - -+ // Remove any profiles from the list. -+ $uninstallable = array_diff_key($uninstallable, $profiles); -+ - $form['uninstall'] = ['#tree' => TRUE]; - foreach ($uninstallable as $module_key => $module) { - $name = $module->info['name'] ?: $module->getName(); -@@ -151,7 +156,8 @@ public function buildForm(array $form, FormStateInterface $form_state) { - $form['uninstall'][$module->getName()]['#disabled'] = TRUE; - } - // All modules which depend on this one must be uninstalled first, before -- // we can allow this module to be uninstalled. -+ // we can allow this module to be uninstalled. (Installation profiles are -+ // excluded from this list.) - foreach (array_keys($module->required_by) as $dependent) { - if (drupal_get_installed_schema_version($dependent) != SCHEMA_UNINSTALLED) { - $form['modules'][$module->getName()]['#required_by'][] = $dependent; -diff --git a/core/profiles/testing_inherited/config/install/block.block.stable_login.yml b/core/profiles/testing_inherited/config/install/block.block.stable_login.yml -new file mode 100644 -index 0000000000..3650c6c41a ---- /dev/null -+++ b/core/profiles/testing_inherited/config/install/block.block.stable_login.yml -@@ -0,0 +1,19 @@ -+langcode: en -+status: true -+dependencies: -+ module: -+ - user -+ theme: -+ - stable -+id: stable_login -+theme: stable -+region: sidebar_first -+weight: 0 -+provider: null -+plugin: user_login_block -+settings: -+ id: user_login_block -+ label: 'User login' -+ provider: user -+ label_display: visible -+visibility: { } -diff --git a/core/profiles/testing_inherited/config/install/system.theme.yml b/core/profiles/testing_inherited/config/install/system.theme.yml -new file mode 100644 -index 0000000000..67aeeeeac7 ---- /dev/null -+++ b/core/profiles/testing_inherited/config/install/system.theme.yml -@@ -0,0 +1,2 @@ -+# @todo: Remove this file in https://www.drupal.org/node/2352949 -+default: stable -diff --git a/core/profiles/testing_inherited/modules/child_profile_module/child_profile_module.info.yml b/core/profiles/testing_inherited/modules/child_profile_module/child_profile_module.info.yml -new file mode 100644 -index 0000000000..132b11493f ---- /dev/null -+++ b/core/profiles/testing_inherited/modules/child_profile_module/child_profile_module.info.yml -@@ -0,0 +1,5 @@ -+name: 'Child profile module' -+type: module -+description: 'A module contained in a child profile, for testing.' -+package: Testing -+version: VERSION -diff --git a/core/profiles/testing_inherited/modules/contrib/contrib_child_profile_module/contrib_child_profile_module.info.yml b/core/profiles/testing_inherited/modules/contrib/contrib_child_profile_module/contrib_child_profile_module.info.yml -new file mode 100644 -index 0000000000..822c572099 ---- /dev/null -+++ b/core/profiles/testing_inherited/modules/contrib/contrib_child_profile_module/contrib_child_profile_module.info.yml -@@ -0,0 +1,5 @@ -+name: 'Contrib child profile module' -+type: module -+description: 'A contrib module contained in a child profile, for testing.' -+package: Testing -+version: VERSION -diff --git a/core/profiles/testing_inherited/modules/custom/custom_child_profile_module/custom_child_profile_module.info.yml b/core/profiles/testing_inherited/modules/custom/custom_child_profile_module/custom_child_profile_module.info.yml -new file mode 100644 -index 0000000000..ef81a8a55b ---- /dev/null -+++ b/core/profiles/testing_inherited/modules/custom/custom_child_profile_module/custom_child_profile_module.info.yml -@@ -0,0 +1,5 @@ -+name: 'Custom child profile module' -+type: module -+description: 'A custom module contained in a child profile, for testing.' -+package: Testing -+version: VERSION -diff --git a/core/profiles/testing_inherited/testing_inherited.info.yml b/core/profiles/testing_inherited/testing_inherited.info.yml -new file mode 100644 -index 0000000000..92e183c86a ---- /dev/null -+++ b/core/profiles/testing_inherited/testing_inherited.info.yml -@@ -0,0 +1,17 @@ -+name: Testing Inherited -+type: profile -+description: 'Profile for testing base profile inheritance.' -+version: VERSION -+hidden: true -+ -+base profile: testing -+ -+install: -+ - block -+ - config -+ - child_profile_module -+ - contrib_child_profile_module -+ - custom_child_profile_module -+ -+themes: -+ - stable -diff --git a/core/profiles/testing_inherited/tests/src/Functional/InheritedProfileTest.php b/core/profiles/testing_inherited/tests/src/Functional/InheritedProfileTest.php -new file mode 100644 -index 0000000000..0af6c4f68d ---- /dev/null -+++ b/core/profiles/testing_inherited/tests/src/Functional/InheritedProfileTest.php -@@ -0,0 +1,46 @@ -+assertInstanceOf(BlockInterface::class, Block::load('stable_login')); -+ -+ // Check that stable is the default theme. -+ $this->assertSame('stable', $this->config('system.theme')->get('default')); -+ -+ /** @var \Drupal\Core\Extension\ModuleHandlerInterface $module_handler */ -+ $module_handler = $this->container->get('module_handler'); -+ // Check that parent dependencies are installed. -+ $this->assertTrue($module_handler->moduleExists('page_cache')); -+ // Check that child profile dependencies are installed. -+ $this->assertTrue($module_handler->moduleExists('config')); -+ // Check that modules contained in the child profile are installed. -+ $this->assertTrue($module_handler->moduleExists('child_profile_module')); -+ $this->assertTrue($module_handler->moduleExists('contrib_child_profile_module')); -+ $this->assertTrue($module_handler->moduleExists('custom_child_profile_module')); -+ -+ // Check that all themes were installed. -+ $this->assertTrue(\Drupal::service('theme_handler')->themeExists('stable')); -+ } -+ -+} -diff --git a/core/profiles/testing_inherited_standard/testing_inherited_standard.info.yml b/core/profiles/testing_inherited_standard/testing_inherited_standard.info.yml -new file mode 100644 -index 0000000000..0728ada2d1 ---- /dev/null -+++ b/core/profiles/testing_inherited_standard/testing_inherited_standard.info.yml -@@ -0,0 +1,12 @@ -+name: Testing Inherited Standard -+type: profile -+description: 'Profile for testing base profile inheritance.' -+version: VERSION -+hidden: true -+ -+base profile: standard -+ -+install: [] -+ -+themes: -+ - bartik -diff --git a/core/profiles/testing_inherited_standard/tests/src/Functional/InheritedProfileTest.php b/core/profiles/testing_inherited_standard/tests/src/Functional/InheritedProfileTest.php -new file mode 100644 -index 0000000000..1bc6b51db0 ---- /dev/null -+++ b/core/profiles/testing_inherited_standard/tests/src/Functional/InheritedProfileTest.php -@@ -0,0 +1,31 @@ -+assertSame('stable', $this->config('system.theme')->get('default')); -+ -+ /** @var \Drupal\Core\Extension\ModuleHandlerInterface $module_handler */ -+ $module_handler = $this->container->get('module_handler'); -+ // page_cache was enabled in main profile. -+ $this->assertTrue($module_handler->moduleExists('page_cache')); -+ // block was enabled in parent profile. -+ $this->assertTrue($module_handler->moduleExists('block')); -+ // syslog was enabled in this profile. -+ $this->assertTrue($module_handler->moduleExists('syslog')); -+ // A module contained in this profile was installed too. -+ $this->assertTrue($module_handler->moduleExists('grandchild_profile_module')); -+ } -+ -+} -diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php -index efcfe06651..4c27840196 100644 ---- a/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php -+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php -@@ -732,7 +732,7 @@ public function testInstallProfileMisMatch() { - $error_log = $this->configImporter->getErrors(); - // Install profiles can not be changed. Note that KernelTestBase currently - // does not use an install profile. This situation should be impossible -- // to get in but site's can removed the install profile setting from -+ // to get into but sites can change the install profile value in config or - // settings.php so the test is valid. - $this->assertEquals(['Cannot change the install profile from to this_will_not_work once Drupal is installed.'], $error_log); - } -diff --git a/core/tests/Drupal/KernelTests/Core/Extension/ProfileExtensionListTest.php b/core/tests/Drupal/KernelTests/Core/Extension/ProfileExtensionListTest.php -new file mode 100644 -index 0000000000..0b4bbfa5f4 ---- /dev/null -+++ b/core/tests/Drupal/KernelTests/Core/Extension/ProfileExtensionListTest.php -@@ -0,0 +1,145 @@ -+container->get('extension.list.profile'); -+ -+ $info = $profile_list->getExtensionInfo('testing_inherited'); -+ $this->assertNotEmpty($info); -+ $this->assertSame($info['name'], 'Testing Inherited'); -+ $this->assertSame($info['base profile'], 'testing'); -+ $this->assertContains('config', $info['install']); -+ $this->assertContains('drupal:page_cache', $info['install']); -+ $this->assertTrue($info['hidden'], 'Profiles should be hidden'); -+ -+ // Test that profiles without any base return normalized info. -+ $info = $profile_list->getExtensionInfo('minimal'); -+ $this->assertSame('', $info['base profile']); -+ -+ // Tests three levels profile inheritance. -+ $info = $profile_list->getExtensionInfo('testing_subsubprofile'); -+ $this->assertSame($info['base profile'], 'testing_inherited'); -+ } -+ -+ /** -+ * Tests getting profile dependency list. -+ * -+ * @covers ::getAncestors -+ */ -+ public function testGetAncestors() { -+ /** @var \Drupal\Core\Extension\ProfileExtensionList $profile_list */ -+ $profile_list = $this->container->get('extension.list.profile'); -+ -+ $profiles = $profile_list->getAncestors('testing'); -+ $this->assertCount(1, $profiles); -+ -+ $profiles = $profile_list->getAncestors('testing_inherited'); -+ $this->assertCount(2, $profiles); -+ -+ $profiles = $profile_list->getAncestors('testing_subsubprofile'); -+ $this->assertCount(3, $profiles); -+ -+ $first_profile = current($profiles); -+ $this->assertInstanceOf(Extension::class, $first_profile); -+ $this->assertSame($first_profile->getName(), 'testing'); -+ $this->assertSame(1000, $first_profile->weight); -+ $this->assertObjectHasAttribute('origin', $first_profile); -+ -+ $second_profile = next($profiles); -+ $this->assertInstanceOf(Extension::class, $second_profile); -+ $this->assertSame($second_profile->getName(), 'testing_inherited'); -+ $this->assertSame(1001, $second_profile->weight); -+ $this->assertObjectHasAttribute('origin', $second_profile); -+ -+ $third_profile = next($profiles); -+ $this->assertInstanceOf(Extension::class, $third_profile); -+ $this->assertSame($third_profile->getName(), 'testing_subsubprofile'); -+ $this->assertSame(1002, $third_profile->weight); -+ $this->assertObjectHasAttribute('origin', $third_profile); -+ } -+ -+ /** -+ * @covers ::selectDistribution -+ * -+ * @depends testGetExtensionInfo -+ */ -+ public function testSelectDistribution() { -+ $profile_list = new TestProfileExtensionList( -+ $this->container->get('app.root'), -+ 'profile', -+ $this->container->get('cache.default'), -+ $this->container->get('info_parser'), -+ $this->container->get('module_handler'), -+ $this->container->get('state'), -+ $this->container->getParameter('install_profile') -+ ); -+ -+ $profiles = ['testing', 'testing_inherited']; -+ $base_info = $profile_list->getExtensionInfo('minimal'); -+ $profile_info = $profile_list->getExtensionInfo('testing_inherited'); -+ -+ // Neither profile has distribution set. -+ $distribution = $profile_list->selectDistribution($profiles); -+ $this->assertEmpty($distribution, 'No distribution should be selected'); -+ -+ // Set base profile distribution. -+ $base_info['distribution']['name'] = 'Minimal'; -+ $profile_list->profileInfo['minimal'] = $base_info; -+ // Base profile distribution should not be selected. -+ $distribution = $profile_list->selectDistribution($profiles); -+ $this->assertEmpty($distribution, 'Base profile distribution should not be selected'); -+ -+ // Set main profile distribution. -+ $profile_info['distribution']['name'] = 'Testing Inherited'; -+ $profile_list->profileInfo['testing_inherited'] = $profile_info; -+ // Main profile distribution should be selected. -+ $distribution = $profile_list->selectDistribution($profiles); -+ $this->assertEquals($distribution, 'testing_inherited'); -+ } -+ -+} -+ -+final class TestProfileExtensionList extends ProfileExtensionList { -+ -+ /** -+ * Overridden profile info, keyed by extension name. -+ * -+ * @var array -+ */ -+ public $profileInfo = []; -+ -+ /** -+ * {@inheritdoc} -+ */ -+ public function getList() { -+ $extensions = parent::getList(); -+ -+ foreach ($extensions as $name => $extension) { -+ if (isset($this->profileInfo[$name])) { -+ $extension->info = $this->profileInfo[$name]; -+ } -+ } -+ return $extensions; -+ } -+ -+} diff --git a/patches/drupal/D91x-2924549-38.patch b/patches/drupal/D95x-2924549-65.patch similarity index 60% rename from patches/drupal/D91x-2924549-38.patch rename to patches/drupal/D95x-2924549-65.patch index 8b0405dc..eaa3d779 100644 --- a/patches/drupal/D91x-2924549-38.patch +++ b/patches/drupal/D95x-2924549-65.patch @@ -1,8 +1,8 @@ diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc -index c8103369b6..06aab93fed 100644 +index 6832eae707..8644b96e4a 100644 --- a/core/includes/install.core.inc +++ b/core/includes/install.core.inc -@@ -878,6 +878,7 @@ function install_tasks($install_state) { +@@ -873,6 +873,7 @@ function install_tasks($install_state) { 'run' => $needs_translations ? INSTALL_TASK_RUN_IF_NOT_COMPLETED : INSTALL_TASK_SKIP, ], 'install_finished' => [], @@ -10,8 +10,8 @@ index c8103369b6..06aab93fed 100644 ]; // Allow the installation profile to modify the full list of tasks. -@@ -1871,6 +1872,16 @@ function install_finished(&$install_state) { - \Drupal::messenger()->addStatus($success_message); +@@ -1884,6 +1885,16 @@ function install_finished(&$install_state) { + \Drupal::state()->set('install_time', \Drupal::time()->getRequestTime()); } +/** @@ -21,27 +21,22 @@ index c8103369b6..06aab93fed 100644 + * An array of information about the current installation state. + */ +function install_invoke_finished_hooks(&$install_state) { -+ \Drupal::moduleHandler()->invokeAll('site_install_finished', [$install_state]); ++ \Drupal::moduleHandler()->invokeAll('site_install_finished', array_values($install_state)); +} + /** * Implements callback_batch_operation(). * diff --git a/core/lib/Drupal/Core/Extension/module.api.php b/core/lib/Drupal/Core/Extension/module.api.php -index e2ffe1320b..11561da340 100644 +index bab77e3a54..48ccd4eedd 100644 --- a/core/lib/Drupal/Core/Extension/module.api.php +++ b/core/lib/Drupal/Core/Extension/module.api.php -@@ -502,6 +502,30 @@ function hook_install_tasks_alter(&$tasks, $install_state) { - $tasks['install_configure_form']['function'] = 'myprofile_install_configure_form'; +@@ -513,6 +513,41 @@ function hook_install_tasks_alter(&$tasks, $install_state) { + $tasks['install_configure_form']['function'] = 'my_profile_install_configure_form'; } +/** -+ * Perform necessary actions after Drupal being installed. -+ * -+ * It is recommended that you implement this hook if you want to perform some -+ * actions after site is installed. -+ * -+ * This hook is invoked at the end of installation profile. ++ * Responds to Drupal being installed. + * + * @param $install_state + * An array of information about the current installation state. @@ -49,6 +44,7 @@ index e2ffe1320b..11561da340 100644 + * @see install_tasks() + */ +function hook_site_install_finished($install_state) { ++ + // Example function body for setting state only once installation + // has finally completed. + if (!empty($install_state['parameters']['profile'])) { @@ -57,9 +53,23 @@ index e2ffe1320b..11561da340 100644 + \Drupal::state()->set('my_module_special_profile_support', TRUE); + } + } ++ ++ // Example function body setting a status message only once installation ++ // has finally completed. ++ if (!empty($install_state['parameters']['profile'])) { ++ $profile = $install_state['parameters']['profile']; ++ if ($profile === 'demo_umami') { ++ $umami = 'https://www.drupal.org/docs/8/umami-drupal-8-demonstration-installation-profile'; ++ \Drupal::messenger()->addStatus(t('Read more about Umami online.', ++ [ ++ ':umami' => $umami, ++ ]) ++ ); ++ } ++ } ++ +} + /** * Perform a single update between minor versions. * - diff --git a/patches/drupal/D94x-1356276-686.patch b/patches/drupal/D95x-3266057-110.patch similarity index 93% rename from patches/drupal/D94x-1356276-686.patch rename to patches/drupal/D95x-3266057-110.patch index 3537bf75..265d6b18 100644 --- a/patches/drupal/D94x-1356276-686.patch +++ b/patches/drupal/D95x-3266057-110.patch @@ -1,5 +1,5 @@ diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc -index 4375abdebd..f2a1b6853a 100644 +index fcbf23c6d6..31455b1554 100644 --- a/core/includes/install.core.inc +++ b/core/includes/install.core.inc @@ -465,6 +465,12 @@ function install_begin_request($class_loader, &$install_state) { @@ -107,19 +107,20 @@ index 4375abdebd..f2a1b6853a 100644 $install_state['profile_info'] = install_profile_info($profile, $install_state['parameters']['langcode'] ?? 'en'); $sync_directory = Settings::get('config_sync_directory'); -@@ -1658,6 +1671,10 @@ function install_install_profile(&$install_state) { - - \Drupal::service('module_installer')->install([$install_state['parameters']['profile']], FALSE); +@@ -1656,7 +1669,10 @@ function install_install_profile(&$install_state) { + // any disparities that this creates. + \Drupal::service('config.installer')->installOptionalConfig(); +- \Drupal::service('module_installer')->install([$install_state['parameters']['profile']], FALSE); + // Install all the profiles. -+ $profiles = \Drupal::service('extension.list.profile')->getAncestors(); ++ $profiles = \Drupal::service('extension.list.profile') ++ ->getAncestors($install_state['parameters']['profile']); + \Drupal::service('module_installer')->install(array_keys($profiles), FALSE); -+ + // Ensure that the install profile's theme is used. // @see _drupal_maintenance_theme() - \Drupal::theme()->resetActiveTheme(); diff --git a/core/includes/install.inc b/core/includes/install.inc -index adc4a787e3..1a4fb5bbe5 100644 +index 4053d3c5a9..c6b74a343d 100644 --- a/core/includes/install.inc +++ b/core/includes/install.inc @@ -533,7 +533,6 @@ function _drupal_rewrite_settings_dump_one(\stdClass $variable, $prefix = '', $s @@ -256,7 +257,7 @@ index 107ca8a071..4e4c14a94b 100644 // that already exists. Additionally, can not continue installing more // modules because those may depend on the current module being installed. diff --git a/core/lib/Drupal/Core/Config/ExtensionInstallStorage.php b/core/lib/Drupal/Core/Config/ExtensionInstallStorage.php -index 1006013f5f..6aae5ef046 100644 +index 1006013f5f..98dba2c523 100644 --- a/core/lib/Drupal/Core/Config/ExtensionInstallStorage.php +++ b/core/lib/Drupal/Core/Config/ExtensionInstallStorage.php @@ -3,6 +3,7 @@ @@ -281,7 +282,7 @@ index 1006013f5f..6aae5ef046 100644 $this->configStorage = $config_storage; $this->includeProfile = $include_profile; $this->installProfile = $profile; -@@ -86,26 +89,14 @@ public function createCollection($collection) { +@@ -86,26 +89,13 @@ public function createCollection($collection) { protected function getAllFolders() { if (!isset($this->folders)) { $this->folders = []; @@ -290,7 +291,7 @@ index 1006013f5f..6aae5ef046 100644 $extensions = $this->configStorage->read('core.extension'); // @todo Remove this scan as part of https://www.drupal.org/node/2186491 - $listing = new ExtensionDiscovery(\Drupal::root()); +- $listing = new ExtensionDiscovery(\Drupal::root()); + $listing = new ExtensionDiscovery(\Drupal::root(), TRUE, NULL, NULL, $this->profileList); if (!empty($extensions['module'])) { $modules = $extensions['module']; @@ -310,7 +311,7 @@ index 1006013f5f..6aae5ef046 100644 $module_list_scan = $listing->scan('module'); $module_list = []; foreach (array_keys($modules) as $module) { -@@ -113,7 +104,7 @@ protected function getAllFolders() { +@@ -113,7 +103,7 @@ protected function getAllFolders() { $module_list[$module] = $module_list_scan[$module]; } } @@ -319,7 +320,7 @@ index 1006013f5f..6aae5ef046 100644 } if (!empty($extensions['theme'])) { $theme_list_scan = $listing->scan('theme'); -@@ -122,22 +113,16 @@ protected function getAllFolders() { +@@ -122,22 +112,16 @@ protected function getAllFolders() { $theme_list[$theme] = $theme_list_scan[$theme]; } } @@ -419,7 +420,7 @@ index a21388b3cb..01f25285b4 100644 return $this->folders; } diff --git a/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php -index 0547a14d3a..fdc3f9fb71 100644 +index 38cdd4df3b..a372eca6a6 100644 --- a/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php @@ -7,6 +7,7 @@ @@ -507,7 +508,7 @@ index 0547a14d3a..fdc3f9fb71 100644 } diff --git a/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php b/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php -index 76d6f1947b..f5938fd3df 100644 +index 76d6f1947b..18fc2a4913 100644 --- a/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php +++ b/core/lib/Drupal/Core/Extension/ExtensionDiscovery.php @@ -91,6 +91,15 @@ class ExtensionDiscovery { @@ -534,7 +535,7 @@ index 76d6f1947b..f5938fd3df 100644 + * (optional) The profile list. */ - public function __construct(string $root, $use_file_cache = TRUE, array $profile_directories = NULL, string $site_path = NULL) { -+ public function __construct($root, $use_file_cache = TRUE, $profile_directories = NULL, $site_path = NULL, ProfileExtensionList $profile_list = NULL) { ++ public function __construct(string $root, bool $use_file_cache = TRUE, array $profile_directories = NULL, string $site_path = NULL, ProfileExtensionList $profile_list = NULL) { $this->root = $root; $this->fileCache = $use_file_cache ? FileCacheFactory::get('extension_discovery') : NULL; $this->profileDirectories = $profile_directories; @@ -1023,10 +1024,10 @@ index 0000000000..d1fb659c06 + +} diff --git a/core/modules/config/tests/src/Functional/ConfigImportInstallProfileTest.php b/core/modules/config/tests/src/Functional/ConfigImportInstallProfileTest.php -index cadd96ad32..644ad7f902 100644 +index 6d3b222bc7..18bf9dd8b0 100644 --- a/core/modules/config/tests/src/Functional/ConfigImportInstallProfileTest.php +++ b/core/modules/config/tests/src/Functional/ConfigImportInstallProfileTest.php -@@ -62,7 +62,7 @@ public function testInstallProfileValidation() { +@@ -65,7 +65,7 @@ public function testInstallProfileValidation() { $this->drupalGet('admin/config/development/configuration'); $this->submitForm([], 'Import all'); $this->assertSession()->pageTextContains('The configuration cannot be imported because it failed validation for the following reasons:'); @@ -1036,26 +1037,22 @@ index cadd96ad32..644ad7f902 100644 // Uninstall dependencies of testing_config_import. $core['module']['testing_config_import'] = 0; diff --git a/core/modules/system/src/Form/ModulesUninstallForm.php b/core/modules/system/src/Form/ModulesUninstallForm.php -index 82c014c230..e8bbec424d 100644 +index 483959410c..2ea4ce6370 100644 --- a/core/modules/system/src/Form/ModulesUninstallForm.php +++ b/core/modules/system/src/Form/ModulesUninstallForm.php -@@ -146,10 +146,15 @@ public function buildForm(array $form, FormStateInterface $form_state) { - return $form; - } +@@ -164,6 +164,11 @@ public function buildForm(array $form, FormStateInterface $form_state) { + }); + $validation_reasons = $this->moduleInstaller->validateUninstall(array_keys($uninstallable)); + $profiles = \Drupal::service('extension.list.profile')->getAncestors(); + - // Sort all modules by their name. - uasort($uninstallable, [ModuleExtensionList::class, 'sortByName']); - $validation_reasons = $this->moduleInstaller->validateUninstall(array_keys($uninstallable)); - + // Remove any profiles from the list. + $uninstallable = array_diff_key($uninstallable, $profiles); + $form['uninstall'] = ['#tree' => TRUE]; foreach ($uninstallable as $module_key => $module) { $name = $module->info['name'] ?: $module->getName(); -@@ -185,7 +190,8 @@ public function buildForm(array $form, FormStateInterface $form_state) { +@@ -199,7 +204,8 @@ public function buildForm(array $form, FormStateInterface $form_state) { $form['uninstall'][$module->getName()]['#disabled'] = TRUE; } // All modules which depend on this one must be uninstalled first, before @@ -1206,6 +1203,39 @@ index 0000000000..0af6c4f68d + } + +} +diff --git a/core/profiles/testing_inherited_standard/config/install/core.entity_view_display.node.page.teaser.yml b/core/profiles/testing_inherited_standard/config/install/core.entity_view_display.node.page.teaser.yml +new file mode 100644 +index 0000000000..91194c2f4a +--- /dev/null ++++ b/core/profiles/testing_inherited_standard/config/install/core.entity_view_display.node.page.teaser.yml +@@ -0,0 +1,27 @@ ++langcode: en ++status: true ++dependencies: ++ config: ++ - core.entity_view_mode.node.teaser ++ - field.field.node.page.body ++ - node.type.page ++ module: ++ - text ++ - user ++id: node.page.teaser ++targetEntityType: node ++bundle: page ++mode: teaser ++content: ++ body: ++ label: hidden ++ type: text_summary_or_trimmed ++ weight: 100 ++ region: content ++ settings: ++ trim_length: 300 ++ third_party_settings: { } ++ links: ++ weight: 101 ++ region: content ++hidden: { } diff --git a/core/profiles/testing_inherited_standard/testing_inherited_standard.info.yml b/core/profiles/testing_inherited_standard/testing_inherited_standard.info.yml new file mode 100644 index 0000000000..0728ada2d1 @@ -1226,10 +1256,10 @@ index 0000000000..0728ada2d1 + - bartik diff --git a/core/profiles/testing_inherited_standard/tests/src/Functional/InheritedProfileTest.php b/core/profiles/testing_inherited_standard/tests/src/Functional/InheritedProfileTest.php new file mode 100644 -index 0000000000..1bc6b51db0 +index 0000000000..e98f06b1e7 --- /dev/null +++ b/core/profiles/testing_inherited_standard/tests/src/Functional/InheritedProfileTest.php -@@ -0,0 +1,31 @@ +@@ -0,0 +1,38 @@ +config('core.entity_view_display.node.page.teaser')->get('content.body.settings.trim_length'); ++ $this->assertEquals(300, $trim_length, 'Sub-profile configuration successfully overrides base profile configuration.'); + } + +} @@ -1342,10 +1379,10 @@ index 0000000000..e14705d581 + +} diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php -index 63d2169754..f73d00b4f9 100644 +index b252b28729..bfa5bfc4c0 100644 --- a/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php +++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigImporterTest.php -@@ -735,7 +735,7 @@ public function testInstallProfileMisMatch() { +@@ -769,7 +769,7 @@ public function testInstallProfileMisMatch() { $error_log = $config_importer->getErrors(); // Install profiles can not be changed. Note that KernelTestBase currently // does not use an install profile. This situation should be impossible @@ -1505,3 +1542,37 @@ index 0000000000..1d7674533a + } + +} +diff --git a/core/tests/Drupal/Tests/Core/Database/DatabaseTest.php b/core/tests/Drupal/Tests/Core/Database/DatabaseTest.php +index bf61c2467c..70df6cd0eb 100644 +--- a/core/tests/Drupal/Tests/Core/Database/DatabaseTest.php ++++ b/core/tests/Drupal/Tests/Core/Database/DatabaseTest.php +@@ -43,8 +43,10 @@ protected function setUp(): void { + $container = $this->createMock(ContainerInterface::class); + $container->expects($this->any()) + ->method('has') +- ->with('kernel') +- ->willReturn(TRUE); ++ ->will($this->returnValueMap([ ++ ['kernel', TRUE], ++ ['extension.list.profile', TRUE], ++ ])); + $container->expects($this->any()) + ->method('getParameter') + ->with('site.path') +diff --git a/core/tests/Drupal/Tests/Core/Database/UrlConversionTest.php b/core/tests/Drupal/Tests/Core/Database/UrlConversionTest.php +index 091449fd5a..45b279abc8 100644 +--- a/core/tests/Drupal/Tests/Core/Database/UrlConversionTest.php ++++ b/core/tests/Drupal/Tests/Core/Database/UrlConversionTest.php +@@ -31,8 +31,10 @@ protected function setUp(): void { + $container = $this->createMock('Symfony\Component\DependencyInjection\ContainerInterface'); + $container->expects($this->any()) + ->method('has') +- ->with('kernel') +- ->willReturn(TRUE); ++ ->will($this->returnValueMap([ ++ ['kernel', TRUE], ++ ['extension.list.profile', TRUE], ++ ])); + $container->expects($this->any()) + ->method('getParameter') + ->with('site.path') diff --git a/patches/jsonapi_include/JAI8x14-3131167-6.patch b/patches/jsonapi_include/JAI8x14-3131167-6.patch index 4c83aa70..5f629b1b 100644 --- a/patches/jsonapi_include/JAI8x14-3131167-6.patch +++ b/patches/jsonapi_include/JAI8x14-3131167-6.patch @@ -5,7 +5,7 @@ index 84d6e85..9cc4e09 100644 @@ -19,6 +19,13 @@ class JsonapiParse implements JsonapiParseInterface { */ protected $included; - + + /** + * Allowed includes. + * @@ -33,7 +33,7 @@ index 84d6e85..9cc4e09 100644 + $result = $this->resolveRelationships($object, $key); return $result; } - + @@ -116,10 +123,17 @@ class JsonapiParse implements JsonapiParseInterface { * @param array|mixed $resource * The resource to verify. @@ -52,7 +52,7 @@ index 84d6e85..9cc4e09 100644 + return isset($resource['type']) && isset($this->included[$resource['type']]); } - + @@ -129,12 +143,15 @@ class JsonapiParse implements JsonapiParseInterface { * @param array|mixed $data * The data for resolve. @@ -115,7 +115,7 @@ index 84d6e85..9cc4e09 100644 if (empty($resource['relationships'])) { return $resource; } - + foreach ($resource['relationships'] as $key => $value) { - $resource[$key] = $this->resolveRelationshipData($value); + $resource[$key] = $this->resolveRelationshipData($value, trim("$parent_key.$key", '.')); @@ -129,7 +129,7 @@ index 84d6e85..9cc4e09 100644 - return $this->resolveRelationships($attributes); + return $this->resolveRelationships($attributes, ''); } - + /** @@ -227,6 +250,8 @@ class JsonapiParse implements JsonapiParseInterface { return $json; diff --git a/web/.htaccess b/web/.htaccess index fbce6b58..32ecd433 100644 --- a/web/.htaccess +++ b/web/.htaccess @@ -3,7 +3,7 @@ # # Protect files and directories from prying eyes. - + Require all denied @@ -42,7 +42,7 @@ AddEncoding gzip svgz # Enable expirations. ExpiresActive On - # Cache all files for 2 weeks after access (A). + # Cache all files and redirects for 2 weeks after access (A). ExpiresDefault A1209600 @@ -158,12 +158,12 @@ AddEncoding gzip svgz # Serve gzip compressed CSS files if they exist and the client accepts gzip. RewriteCond %{HTTP:Accept-encoding} gzip RewriteCond %{REQUEST_FILENAME}\.gz -s - RewriteRule ^(.*)\.css $1\.css\.gz [QSA] + RewriteRule ^(.*css_[a-zA-Z0-9-_])\.css$ $1\.css\.gz [QSA] # Serve gzip compressed JS files if they exist and the client accepts gzip. RewriteCond %{HTTP:Accept-encoding} gzip RewriteCond %{REQUEST_FILENAME}\.gz -s - RewriteRule ^(.*)\.js $1\.js\.gz [QSA] + RewriteRule ^(.*js_[a-zA-Z0-9-_])\.js$ $1\.js\.gz [QSA] # Serve correct content types, and prevent double compression. RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1,E=no-brotli:1] From 062f3bbfbe6aa1cd711018a8849370ec261e1739 Mon Sep 17 00:00:00 2001 From: Simon Baese Date: Sun, 16 Apr 2023 15:13:29 +0200 Subject: [PATCH 4/4] Further upgrades and Drupal 10 readiness --- composer.json | 28 +- composer.lock | 976 +++++++----------- composer.patches.json | 3 +- ...e-styles-warmer-batch-ops-statically.patch | 22 - .../consumer_permissions.info.yml | 2 +- web/modules/mailer/mailer.info.yml | 2 +- 6 files changed, 413 insertions(+), 620 deletions(-) delete mode 100644 patches/image_style_warmer/custom-call-image-styles-warmer-batch-ops-statically.patch diff --git a/composer.json b/composer.json index 44b41ae9..23fee778 100644 --- a/composer.json +++ b/composer.json @@ -25,19 +25,19 @@ "drupal/core-vendor-hardening": "^9.5", "drupal/entity": "^1.4", "drupal/filefield_paths": "^1.0@beta", - "drupal/image_style_warmer": "^1.1", + "drupal/image_style_warmer": "^1.2", "drupal/imagemagick": "^3.4", "drupal/jsonapi_boost": "^2.0", "drupal/jsonapi_cross_bundles": "^1.0", - "drupal/jsonapi_extras": "^3.20", + "drupal/jsonapi_extras": "^3.23", "drupal/jsonapi_include": "^1.6", - "drupal/mail_login": "^2.6", + "drupal/mail_login": "^2.7", "drupal/multivalue_form_element": "^1.0@beta", "drupal/simple_oauth": "^5.2", "drupal/subrequests": "^3.0", "drupal/upgrade_status": "^4.0", - "drupal/user_bundle": "^1.1", - "drush/drush": "^10.6" + "drupal/user_bundle": "^1.2", + "drush/drush": "^11.5" }, "conflict": { "drupal/drupal": "*" @@ -130,25 +130,25 @@ }, "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "^0.7", - "drupal/admin_toolbar": "^3.0", + "drupal/admin_toolbar": "^3.3", "drupal/coder": "^8.3", "drupal/core-dev": "^9.5", - "drupal/devel": "^4.1", + "drupal/devel": "^5.1", "drupal/devel_mail_logger": "^1.0@beta", "drupal/druqs": "2.0.x-dev@dev", - "drupal/mailsystem": "^4.3", - "drupal/openapi": "^2.0", + "drupal/mailsystem": "^4.4", + "drupal/openapi": "^2.1", "drupal/openapi_jsonapi": "^3.0", "drupal/openapi_ui": "^1.0@RC", "drupal/openapi_ui_redoc": "^1.0@RC", - "drupal/restui": "^1.20", - "fakerphp/faker": "^1.19", + "drupal/restui": "^1.21", + "fakerphp/faker": "^1.21", "mglaman/phpstan-drupal": "^1.1", "phpcompatibility/php-compatibility": "^9.3", "phpspec/prophecy-phpunit": "^2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-deprecation-rules": "^1.0" + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-deprecation-rules": "^1.1" }, "scripts": { "post-drupal-scaffold-cmd": [ diff --git a/composer.lock b/composer.lock index b4dc72bb..d6956f3f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8bbc05d97009e016b44890fd9823091a", + "content-hash": "8725555c0319a899dce5c3e266994013", "packages": [ { "name": "asm89/stack-cors", @@ -64,27 +64,39 @@ }, { "name": "chi-teck/drupal-code-generator", - "version": "1.33.1", + "version": "2.6.2", "source": { "type": "git", "url": "https://github.com/Chi-teck/drupal-code-generator.git", - "reference": "5f814e980b6f9cf1ca8c74cc9385c3d81090d388" + "reference": "22ed1cc02dc47814e8239de577da541e9b9bd980" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/5f814e980b6f9cf1ca8c74cc9385c3d81090d388", - "reference": "5f814e980b6f9cf1ca8c74cc9385c3d81090d388", + "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/22ed1cc02dc47814e8239de577da541e9b9bd980", + "reference": "22ed1cc02dc47814e8239de577da541e9b9bd980", "shasum": "" }, "require": { "ext-json": "*", - "php": ">=5.5.9", - "symfony/console": "^3.4 || ^4.0", - "symfony/filesystem": "^2.7 || ^3.4 || ^4.0", - "twig/twig": "^1.41 || ^2.12" + "php": ">=7.4", + "psr/log": "^1.1 || ^2.0 || ^3.0", + "symfony/console": "^4.4.15 || ^5.1 || ^6.0", + "symfony/filesystem": "^4.4 || ^5.1 || ^6", + "symfony/polyfill-php80": "^1.23", + "symfony/string": "^5.1 || ^6", + "twig/twig": "^2.14.11 || ^3.1" }, "conflict": { - "drush/drush": "< 10.3.2" + "squizlabs/php_codesniffer": "<3.6" + }, + "require-dev": { + "chi-teck/drupal-coder-extension": "^1.2", + "drupal/coder": "^8.3.14", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.4", + "squizlabs/php_codesniffer": "^3.5", + "symfony/var-dumper": "^5.2 || ^6.0", + "symfony/yaml": "^5.2 || ^6.0" }, "bin": [ "bin/dcg" @@ -92,13 +104,10 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { - "files": [ - "src/bootstrap.php" - ], "psr-4": { "DrupalCodeGenerator\\": "src" } @@ -110,9 +119,9 @@ "description": "Drupal code generator", "support": { "issues": "https://github.com/Chi-teck/drupal-code-generator/issues", - "source": "https://github.com/Chi-teck/drupal-code-generator/tree/1.33.1" + "source": "https://github.com/Chi-teck/drupal-code-generator/tree/2.6.2" }, - "time": "2020-12-05T05:59:11+00:00" + "time": "2022-11-11T15:34:04+00:00" }, { "name": "composer/installers", @@ -404,65 +413,40 @@ }, { "name": "consolidation/config", - "version": "1.2.1", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/consolidation/config.git", - "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1" + "reference": "597f8d7fbeef801736250ec10c3e190569b1b0ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1", - "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1", + "url": "https://api.github.com/repos/consolidation/config/zipball/597f8d7fbeef801736250ec10c3e190569b1b0ae", + "reference": "597f8d7fbeef801736250ec10c3e190569b1b0ae", "shasum": "" }, "require": { - "dflydev/dot-access-data": "^1.1.0", - "grasmash/expander": "^1", - "php": ">=5.4.0" + "dflydev/dot-access-data": "^1.1.0 || ^2 || ^3", + "grasmash/expander": "^2.0.1 || ^3", + "php": ">=7.1.3", + "symfony/event-dispatcher": "^4 || ^5 || ^6" }, "require-dev": { - "g1a/composer-test-scenarios": "^3", - "php-coveralls/php-coveralls": "^1", - "phpunit/phpunit": "^5", - "squizlabs/php_codesniffer": "2.*", - "symfony/console": "^2.5|^3|^4", - "symfony/yaml": "^2.8.11|^3|^4" + "ext-json": "*", + "phpunit/phpunit": ">=7.5.20", + "squizlabs/php_codesniffer": "^3", + "symfony/console": "^4 || ^5 || ^6", + "symfony/yaml": "^4 || ^5 || ^6", + "yoast/phpunit-polyfills": "^1" }, "suggest": { + "symfony/event-dispatcher": "Required to inject configuration into Command options", "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" }, "type": "library", "extra": { - "scenarios": { - "symfony4": { - "require-dev": { - "symfony/console": "^4.0" - }, - "config": { - "platform": { - "php": "7.1.3" - } - } - }, - "symfony2": { - "require-dev": { - "symfony/console": "^2.8", - "symfony/event-dispatcher": "^2.8", - "phpunit/phpunit": "^4.8.36" - }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.4.8" - } - } - } - }, "branch-alias": { - "dev-master": "1.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { @@ -483,57 +467,37 @@ "description": "Provide configuration services for a commandline tool.", "support": { "issues": "https://github.com/consolidation/config/issues", - "source": "https://github.com/consolidation/config/tree/master" + "source": "https://github.com/consolidation/config/tree/2.1.2" }, - "time": "2019-03-03T19:37:04+00:00" + "time": "2022-10-06T17:48:03+00:00" }, { "name": "consolidation/filter-via-dot-access-data", - "version": "1.0.0", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/consolidation/filter-via-dot-access-data.git", - "reference": "a53e96c6b9f7f042f5e085bf911f3493cea823c6" + "reference": "cb2eeba41f8e2e3c61698a5cf70ef048ff6c9d5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/filter-via-dot-access-data/zipball/a53e96c6b9f7f042f5e085bf911f3493cea823c6", - "reference": "a53e96c6b9f7f042f5e085bf911f3493cea823c6", + "url": "https://api.github.com/repos/consolidation/filter-via-dot-access-data/zipball/cb2eeba41f8e2e3c61698a5cf70ef048ff6c9d5b", + "reference": "cb2eeba41f8e2e3c61698a5cf70ef048ff6c9d5b", "shasum": "" }, "require": { - "dflydev/dot-access-data": "^1.1.0", - "php": ">=5.5.0" + "dflydev/dot-access-data": "^1.1.0 || ^2.0.0 || ^3.0.0", + "php": ">=7.1.3" }, "require-dev": { - "consolidation/robo": "^1.2.3", - "g1a/composer-test-scenarios": "^3", - "knplabs/github-api": "^2.7", - "php-coveralls/php-coveralls": "^1", - "php-http/guzzle6-adapter": "^1.1", - "phpunit/phpunit": "^5", - "squizlabs/php_codesniffer": "^2.8", - "symfony/console": "^2.8|^3|^4" + "phpunit/phpunit": "^7.5.20 || ^8 || ^9", + "squizlabs/php_codesniffer": "^3", + "yoast/phpunit-polyfills": "^0.2.0" }, "type": "library", "extra": { - "scenarios": { - "phpunit5": { - "require-dev": { - "phpunit/phpunit": "^5.7.27" - }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.6.33" - } - } - } - }, "branch-alias": { - "dev-master": "1.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { @@ -553,9 +517,9 @@ ], "description": "This project uses dflydev/dot-access-data to provide simple output filtering for applications built with annotated-command / Robo.", "support": { - "source": "https://github.com/consolidation/filter-via-dot-access-data/tree/1.0.0" + "source": "https://github.com/consolidation/filter-via-dot-access-data/tree/2.0.2" }, - "time": "2019-01-18T06:05:07+00:00" + "time": "2021-12-30T03:56:08+00:00" }, { "name": "consolidation/log", @@ -665,16 +629,16 @@ }, { "name": "consolidation/robo", - "version": "3.0.11", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/consolidation/robo.git", - "reference": "820fa0f164f77887e268b7dbfb2283416c7334c1" + "reference": "ccf80963abf11bdb8e90659aa99a7449b21e9452" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/robo/zipball/820fa0f164f77887e268b7dbfb2283416c7334c1", - "reference": "820fa0f164f77887e268b7dbfb2283416c7334c1", + "url": "https://api.github.com/repos/consolidation/robo/zipball/ccf80963abf11bdb8e90659aa99a7449b21e9452", + "reference": "ccf80963abf11bdb8e90659aa99a7449b21e9452", "shasum": "" }, "require": { @@ -758,9 +722,9 @@ "description": "Modern task runner", "support": { "issues": "https://github.com/consolidation/robo/issues", - "source": "https://github.com/consolidation/robo/tree/3.0.11" + "source": "https://github.com/consolidation/robo/tree/4.0.2" }, - "time": "2022-12-07T15:18:26+00:00" + "time": "2022-04-21T09:29:58+00:00" }, { "name": "consolidation/self-update", @@ -1051,30 +1015,37 @@ }, { "name": "dflydev/dot-access-data", - "version": "v1.1.0", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + "reference": "f41715465d65213d644d3141a6a93081be5d3549" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", - "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.x-dev" } }, "autoload": { - "psr-0": { - "Dflydev\\DotAccessData": "src" + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1096,6 +1067,11 @@ "name": "Carlos Frutos", "email": "carlos@kiwing.it", "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" } ], "description": "Given a deep data structure, access data by dot notation.", @@ -1108,9 +1084,9 @@ ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/master" + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" }, - "time": "2017-01-20T21:14:22+00:00" + "time": "2022-10-27T11:44:00+00:00" }, { "name": "doctrine/annotations", @@ -2001,37 +1977,37 @@ }, { "name": "drupal/image_style_warmer", - "version": "1.1.0", + "version": "1.2.0-rc1", "source": { "type": "git", "url": "https://git.drupalcode.org/project/image_style_warmer.git", - "reference": "8.x-1.1" + "reference": "8.x-1.2-rc1" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/image_style_warmer-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "b05b911281e6d45df0a7735cfa9f8816f9d6233a" + "url": "https://ftp.drupal.org/files/projects/image_style_warmer-8.x-1.2-rc1.zip", + "reference": "8.x-1.2-rc1", + "shasum": "e6069393b6e4cb7eb3bdc0e3ae457c860734aad7" }, "require": { - "drupal/core": "^8.8 || ^9" + "drupal/core": "^9 || ^10" }, "require-dev": { - "drush/drush": "^9.0 || ^10" + "drush/drush": "^10 || ^11" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.1", - "datestamp": "1616082948", + "version": "8.x-1.2-rc1", + "datestamp": "1668813325", "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" + "status": "not-covered", + "message": "RC releases are not covered by Drupal security advisories." } }, "drush": { "services": { - "drush.services.yml": "^9" + "drush.services.yml": "^9 || ^10 || ^11" } } }, @@ -2813,42 +2789,43 @@ }, { "name": "drush/drush", - "version": "10.6.2", + "version": "11.5.1", "source": { "type": "git", "url": "https://github.com/drush-ops/drush.git", - "reference": "0a570a16ec63259eb71195aba5feab532318b337" + "reference": "3138f82baa3b0e29ac935893a444881a7332177d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/drush-ops/drush/zipball/0a570a16ec63259eb71195aba5feab532318b337", - "reference": "0a570a16ec63259eb71195aba5feab532318b337", + "url": "https://api.github.com/repos/drush-ops/drush/zipball/3138f82baa3b0e29ac935893a444881a7332177d", + "reference": "3138f82baa3b0e29ac935893a444881a7332177d", "shasum": "" }, "require": { - "chi-teck/drupal-code-generator": "^1.32.1", + "chi-teck/drupal-code-generator": "^2.4", "composer/semver": "^1.4 || ^3", - "consolidation/config": "^1.2", - "consolidation/filter-via-dot-access-data": "^1", - "consolidation/robo": "^1.4.11 || ^2 || ^3", - "consolidation/site-alias": "^3.0.0@stable", - "consolidation/site-process": "^2.1 || ^4", + "consolidation/annotated-command": "^4.7.0", + "consolidation/config": "^2", + "consolidation/filter-via-dot-access-data": "^2", + "consolidation/robo": "^3.0.9 || ^4.0.1", + "consolidation/site-alias": "^3.1.6 || ^4", + "consolidation/site-process": "^4.1.3 || ^5", "enlightn/security-checker": "^1", "ext-dom": "*", - "grasmash/yaml-expander": "^1.1.1", - "guzzlehttp/guzzle": "^6.3 || ^7.0", - "league/container": "^2.5 || ^3.4", - "php": ">=7.1.3", - "psr/log": "~1.0", - "psy/psysh": ">=0.6 <0.11", - "symfony/event-dispatcher": "^3.4 || ^4.0", - "symfony/finder": "^3.4 || ^4.0 || ^5", - "symfony/var-dumper": "^3.4 || ^4.0 || ^5.0", - "symfony/yaml": "^3.4 || ^4.0", - "webflo/drupal-finder": "^1.2", - "webmozart/path-util": "^2.1.0" + "guzzlehttp/guzzle": "^6.5 || ^7.0", + "league/container": "^3.4 || ^4", + "php": ">=7.4", + "psy/psysh": "~0.11", + "symfony/event-dispatcher": "^4.0 || ^5.0 || ^6.0", + "symfony/filesystem": "^4.4 || ^5.4 || ^6.1", + "symfony/finder": "^4.0 || ^5 || ^6", + "symfony/polyfill-php80": "^1.23", + "symfony/var-dumper": "^4.0 || ^5.0 || ^6.0", + "symfony/yaml": "^4.0 || ^5.0 || ^6.0", + "webflo/drupal-finder": "^1.2" }, "conflict": { + "drupal/core": "< 9.2", "drupal/migrate_run": "*", "drupal/migrate_tools": "<= 5" }, @@ -2856,10 +2833,11 @@ "composer/installers": "^1.7", "cweagans/composer-patches": "~1.0", "david-garcia/phpwhois": "4.3.0", - "drupal/alinks": "1.0.0", - "drupal/core-recommended": "^8.8", + "drupal/core-recommended": "^9 || ^10", + "drupal/semver_example": "2.3.0", "phpunit/phpunit": ">=7.5.20", - "squizlabs/php_codesniffer": "^2.7 || ^3", + "rector/rector": "^0.12", + "squizlabs/php_codesniffer": "^3.6", "vlucas/phpdotenv": "^2.4", "yoast/phpunit-polyfills": "^0.2.0" }, @@ -2897,8 +2875,7 @@ }, "autoload": { "psr-4": { - "Drush\\": "src/", - "Drush\\Internal\\": "src/internal-forks" + "Drush\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2943,10 +2920,9 @@ "homepage": "http://www.drush.org", "support": { "forum": "http://drupal.stackexchange.com/questions/tagged/drush", - "irc": "irc://irc.freenode.org/drush", "issues": "https://github.com/drush-ops/drush/issues", "slack": "https://drupal.slack.com/messages/C62H9CWQM", - "source": "https://github.com/drush-ops/drush/tree/10.6.2" + "source": "https://github.com/drush-ops/drush/tree/11.5.1" }, "funding": [ { @@ -2954,7 +2930,7 @@ "type": "github" } ], - "time": "2021-12-15T17:09:54+00:00" + "time": "2023-02-21T02:32:48+00:00" }, { "name": "e0ipso/shaper", @@ -3251,27 +3227,27 @@ }, { "name": "grasmash/expander", - "version": "1.0.0", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/grasmash/expander.git", - "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" + "reference": "b7cbc1f2fdf9a9c0e253a424c2a4058316b7cb6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", - "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "url": "https://api.github.com/repos/grasmash/expander/zipball/b7cbc1f2fdf9a9c0e253a424c2a4058316b7cb6e", + "reference": "b7cbc1f2fdf9a9c0e253a424c2a4058316b7cb6e", "shasum": "" }, "require": { - "dflydev/dot-access-data": "^1.1.0", - "php": ">=5.4" + "dflydev/dot-access-data": "^3.0.0", + "php": ">=7.1", + "psr/log": "^1 | ^2 | ^3" }, "require-dev": { "greg-1-anderson/composer-test-scenarios": "^1", - "phpunit/phpunit": "^4|^5.5.4", - "satooshi/php-coveralls": "^1.0.2|dev-master", - "squizlabs/php_codesniffer": "^2.7" + "phpunit/phpunit": "^6.0 || ^8.0 || ^9", + "squizlabs/php_codesniffer": "^2.7 || ^3.3" }, "type": "library", "extra": { @@ -3296,61 +3272,9 @@ "description": "Expands internal property references in PHP arrays file.", "support": { "issues": "https://github.com/grasmash/expander/issues", - "source": "https://github.com/grasmash/expander/tree/master" + "source": "https://github.com/grasmash/expander/tree/2.0.3" }, - "time": "2017-12-21T22:14:55+00:00" - }, - { - "name": "grasmash/yaml-expander", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/grasmash/yaml-expander.git", - "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1", - "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1", - "shasum": "" - }, - "require": { - "dflydev/dot-access-data": "^1.1.0", - "php": ">=5.4", - "symfony/yaml": "^2.8.11|^3|^4" - }, - "require-dev": { - "greg-1-anderson/composer-test-scenarios": "^1", - "phpunit/phpunit": "^4.8|^5.5.4", - "satooshi/php-coveralls": "^1.0.2|dev-master", - "squizlabs/php_codesniffer": "^2.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Grasmash\\YamlExpander\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matthew Grasmick" - } - ], - "description": "Expands internal property references in a yaml file.", - "support": { - "issues": "https://github.com/grasmash/yaml-expander/issues", - "source": "https://github.com/grasmash/yaml-expander/tree/master" - }, - "time": "2017-12-16T16:06:03+00:00" + "time": "2022-04-25T22:17:46+00:00" }, { "name": "guzzlehttp/guzzle", @@ -4318,21 +4242,21 @@ }, { "name": "league/container", - "version": "3.4.1", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/thephpleague/container.git", - "reference": "84ecbc2dbecc31bd23faf759a0e329ee49abddbd" + "reference": "375d13cb828649599ef5d48a339c4af7a26cd0ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/container/zipball/84ecbc2dbecc31bd23faf759a0e329ee49abddbd", - "reference": "84ecbc2dbecc31bd23faf759a0e329ee49abddbd", + "url": "https://api.github.com/repos/thephpleague/container/zipball/375d13cb828649599ef5d48a339c4af7a26cd0ab", + "reference": "375d13cb828649599ef5d48a339c4af7a26cd0ab", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0", - "psr/container": "^1.0.0" + "php": "^7.2 || ^8.0", + "psr/container": "^1.1 || ^2.0" }, "provide": { "psr/container-implementation": "^1.0" @@ -4341,15 +4265,19 @@ "orno/di": "~2.0" }, "require-dev": { - "phpunit/phpunit": "^6.0 || ^7.0", + "nette/php-generator": "^3.4", + "nikic/php-parser": "^4.10", + "phpstan/phpstan": "^0.12.47", + "phpunit/phpunit": "^8.5.17", "roave/security-advisories": "dev-latest", "scrutinizer/ocular": "^1.8", - "squizlabs/php_codesniffer": "^3.5" + "squizlabs/php_codesniffer": "^3.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev", + "dev-master": "4.x-dev", + "dev-4.x": "4.x-dev", "dev-3.x": "3.x-dev", "dev-2.x": "2.x-dev", "dev-1.x": "1.x-dev" @@ -4367,8 +4295,7 @@ "authors": [ { "name": "Phil Bennett", - "email": "philipobenito@gmail.com", - "homepage": "http://www.philipobenito.com", + "email": "mail@philbennett.co.uk", "role": "Developer" } ], @@ -4385,7 +4312,7 @@ ], "support": { "issues": "https://github.com/thephpleague/container/issues", - "source": "https://github.com/thephpleague/container/tree/3.4.1" + "source": "https://github.com/thephpleague/container/tree/4.2.0" }, "funding": [ { @@ -4393,7 +4320,7 @@ "type": "github" } ], - "time": "2021-07-09T08:23:52+00:00" + "time": "2021-11-16T10:29:06+00:00" }, { "name": "league/event", @@ -5796,36 +5723,37 @@ }, { "name": "psy/psysh", - "version": "v0.10.12", + "version": "v0.11.15", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "a0d9981aa07ecfcbea28e4bfa868031cca121e7d" + "reference": "5350ce0ec8ecf2c5b5cf554cd2496f97b444af85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a0d9981aa07ecfcbea28e4bfa868031cca121e7d", - "reference": "a0d9981aa07ecfcbea28e4bfa868031cca121e7d", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/5350ce0ec8ecf2c5b5cf554cd2496f97b444af85", + "reference": "5350ce0ec8ecf2c5b5cf554cd2496f97b444af85", "shasum": "" }, "require": { "ext-json": "*", "ext-tokenizer": "*", - "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3", - "php": "^8.0 || ^7.0 || ^5.5.9", - "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10", - "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7" + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "3.17.*" + "bamarni/composer-bin-plugin": "^1.2" }, "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." }, "bin": [ "bin/psysh" @@ -5833,7 +5761,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "0.10.x-dev" + "dev-main": "0.11.x-dev" } }, "autoload": { @@ -5865,9 +5793,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.10.12" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.15" }, - "time": "2021-11-30T14:05:36+00:00" + "time": "2023-04-07T21:57:09+00:00" }, { "name": "ralouphie/getallheaders", @@ -7241,6 +7169,87 @@ ], "time": "2022-11-03T14:55:06+00:00" }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, { "name": "symfony/polyfill-intl-idn", "version": "v1.27.0", @@ -8149,6 +8158,92 @@ ], "time": "2022-05-30T19:17:29+00:00" }, + { + "name": "symfony/string", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/193e83bbd6617d6b2151c37fff10fa7168ebddef", + "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.2.8" + }, + "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": "2023-03-20T16:06:02+00:00" + }, { "name": "symfony/translation", "version": "v4.4.47", @@ -9602,217 +9697,38 @@ }, "time": "2022-02-04T12:51:07+00:00" }, - { - "name": "doctrine/cache", - "version": "1.13.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "56cd022adb5514472cb144c087393c1821911d09" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/56cd022adb5514472cb144c087393c1821911d09", - "reference": "56cd022adb5514472cb144c087393c1821911d09", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "predis/predis": "~1.0", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/1.13.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:06:54+00:00" - }, - { - "name": "doctrine/collections", - "version": "1.8.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/collections.git", - "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/2b44dd4cbca8b5744327de78bafef5945c7e7b5e", - "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^0.5.3 || ^1", - "php": "^7.1.3 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0 || ^10.0", - "phpstan/phpstan": "^1.4.8", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5", - "vimeo/psalm": "^4.22" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", - "homepage": "https://www.doctrine-project.org/projects/collections.html", - "keywords": [ - "array", - "collections", - "iterators", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/1.8.0" - }, - "time": "2022-09-01T20:12:10+00:00" - }, { "name": "doctrine/common", - "version": "2.13.3", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "f3812c026e557892c34ef37f6ab808a6b567da7f" + "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/f3812c026e557892c34ef37f6ab808a6b567da7f", - "reference": "f3812c026e557892c34ef37f6ab808a6b567da7f", + "url": "https://api.github.com/repos/doctrine/common/zipball/8b5e5650391f851ed58910b3e3d48a71062eeced", + "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", - "doctrine/cache": "^1.0", - "doctrine/collections": "^1.0", - "doctrine/event-manager": "^1.0", - "doctrine/inflector": "^1.0", - "doctrine/lexer": "^1.0", - "doctrine/persistence": "^1.3.3", - "doctrine/reflection": "^1.0", + "doctrine/persistence": "^2.0 || ^3.0", "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^1.0", - "phpstan/phpstan": "^0.11", - "phpstan/phpstan-phpunit": "^0.11", - "phpunit/phpunit": "^7.0", + "doctrine/coding-standard": "^9.0 || ^10.0", + "doctrine/collections": "^1", + "phpstan/phpstan": "^1.4.1", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", "squizlabs/php_codesniffer": "^3.0", - "symfony/phpunit-bridge": "^4.0.5" + "symfony/phpunit-bridge": "^6.1", + "vimeo/psalm": "^4.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.11.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -9845,7 +9761,7 @@ "email": "ocramius@gmail.com" } ], - "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, persistence interfaces, proxies, event system and much more.", + "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", "homepage": "https://www.doctrine-project.org/projects/common.html", "keywords": [ "common", @@ -9854,7 +9770,7 @@ ], "support": { "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/2.13.x" + "source": "https://github.com/doctrine/common/tree/3.4.3" }, "funding": [ { @@ -9870,7 +9786,7 @@ "type": "tidelift" } ], - "time": "2020-06-05T16:46:05+00:00" + "time": "2022-10-09T11:47:59+00:00" }, { "name": "doctrine/deprecations", @@ -9917,30 +9833,29 @@ }, { "name": "doctrine/event-manager", - "version": "1.2.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", "shasum": "" }, "require": { - "doctrine/deprecations": "^0.5.3 || ^1", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "conflict": { "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.8", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.24" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.28" }, "type": "library", "autoload": { @@ -9989,7 +9904,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.2.0" + "source": "https://github.com/doctrine/event-manager/tree/2.0.0" }, "funding": [ { @@ -10005,103 +9920,7 @@ "type": "tidelift" } ], - "time": "2022-10-12T20:51:15+00:00" - }, - { - "name": "doctrine/inflector", - "version": "1.4.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9", - "reference": "4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector", - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", - "homepage": "https://www.doctrine-project.org/projects/inflector.html", - "keywords": [ - "inflection", - "inflector", - "lowercase", - "manipulation", - "php", - "plural", - "singular", - "strings", - "uppercase", - "words" - ], - "support": { - "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/1.4.4" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], - "time": "2021-04-16T17:34:40+00:00" + "time": "2022-10-12T20:59:15+00:00" }, { "name": "doctrine/instantiator", @@ -10175,45 +9994,41 @@ }, { "name": "doctrine/persistence", - "version": "1.3.8", + "version": "3.1.4", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288" + "reference": "8bf8ab15960787f1a49d405f6eb8c787b4841119" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/7a6eac9fb6f61bba91328f15aa7547f4806ca288", - "reference": "7a6eac9fb6f61bba91328f15aa7547f4806ca288", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/8bf8ab15960787f1a49d405f6eb8c787b4841119", + "reference": "8bf8ab15960787f1a49d405f6eb8c787b4841119", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", - "doctrine/cache": "^1.0", - "doctrine/collections": "^1.0", - "doctrine/event-manager": "^1.0", - "doctrine/reflection": "^1.2", - "php": "^7.1 || ^8.0" + "doctrine/event-manager": "^1 || ^2", + "php": "^7.2 || ^8.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0" }, "conflict": { - "doctrine/common": "<2.10@dev" + "doctrine/common": "<2.10" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "vimeo/psalm": "^3.11" + "composer/package-versions-deprecated": "^1.11", + "doctrine/coding-standard": "^11", + "doctrine/common": "^3.0", + "phpstan/phpstan": "1.9.4", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "vimeo/psalm": "4.30.0 || 5.3.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common", - "Doctrine\\Persistence\\": "lib/Doctrine/Persistence" + "Doctrine\\Persistence\\": "src/Persistence" } }, "notification-url": "https://packagist.org/downloads/", @@ -10247,7 +10062,7 @@ } ], "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", - "homepage": "https://doctrine-project.org/projects/persistence.html", + "homepage": "https://www.doctrine-project.org/projects/persistence.html", "keywords": [ "mapper", "object", @@ -10257,7 +10072,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/1.3.x" + "source": "https://github.com/doctrine/persistence/tree/3.1.4" }, "funding": [ { @@ -10273,7 +10088,7 @@ "type": "tidelift" } ], - "time": "2020-06-20T12:56:16+00:00" + "time": "2023-02-03T11:13:07+00:00" }, { "name": "drupal/admin_toolbar", @@ -10459,28 +10274,29 @@ }, { "name": "drupal/devel", - "version": "4.2.1", + "version": "5.1.1", "source": { "type": "git", "url": "https://git.drupalcode.org/project/devel.git", - "reference": "4.2.1" + "reference": "5.1.1" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/devel-4.2.1.zip", - "reference": "4.2.1", - "shasum": "aa08379bad81cb2e604ee9a0b9e2aabd86fae13f" + "url": "https://ftp.drupal.org/files/projects/devel-5.1.1.zip", + "reference": "5.1.1", + "shasum": "d7423dfe9c2333508618975c37f3b63026adca50" }, "require": { - "doctrine/common": "^2.7", - "drupal/core": "^8.8 || ^9", - "symfony/var-dumper": "^4 || ^5" + "doctrine/common": "^2.7 || ^3.4", + "drupal/core": "^9 || ^10", + "php": ">=7.4", + "symfony/var-dumper": "^4 || ^5 || ^6" }, "conflict": { "kint-php/kint": "<3" }, "require-dev": { - "drush/drush": "^10" + "drush/drush": "^11" }, "suggest": { "kint-php/kint": "Kint provides an informative display of arrays/objects. Useful for debugging and developing." @@ -10488,8 +10304,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "4.2.1", - "datestamp": "1664317444", + "version": "5.1.1", + "datestamp": "1671644739", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -10497,7 +10313,7 @@ }, "drush": { "services": { - "drush.services.yml": "^9 || ^10" + "drush.services.yml": "^9 || ^10 || ^11" } } }, diff --git a/composer.patches.json b/composer.patches.json index 3af0cb60..225ccde4 100644 --- a/composer.patches.json +++ b/composer.patches.json @@ -44,8 +44,7 @@ }, "drupal/image_style_warmer": { "Custom: Validate image with GD toolkit": "patches/image_style_warmer/custom-validate-image-with-gd-toolkit.patch", - "Custom: Queue initial image styles during installation": "patches/image_style_warmer/custom-queue-initial-image-styles-during-installation.patch", - "Custom: Call image styles warmer batch operations statically": "patches/image_style_warmer/custom-call-image-styles-warmer-batch-ops-statically.patch" + "Custom: Queue initial image styles during installation": "patches/image_style_warmer/custom-queue-initial-image-styles-during-installation.patch" } } } diff --git a/patches/image_style_warmer/custom-call-image-styles-warmer-batch-ops-statically.patch b/patches/image_style_warmer/custom-call-image-styles-warmer-batch-ops-statically.patch deleted file mode 100644 index 094abef7..00000000 --- a/patches/image_style_warmer/custom-call-image-styles-warmer-batch-ops-statically.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/modules/contrib/image_style_warmer/src/BatchService.php b/modules/contrib/image_style_warmer/src/BatchService.php -index edf34cda..7d48180a 100644 ---- a/modules/contrib/image_style_warmer/src/BatchService.php -+++ b/modules/contrib/image_style_warmer/src/BatchService.php -@@ -19,7 +19,7 @@ class BatchService { - * @param object $context - * Context for operations. - */ -- public function warmUpFileProcess($fid, $count, &$context) { -+ public static function warmUpFileProcess($fid, $count, &$context) { - /** @var \Drupal\image_style_warmer\ImageStylesWarmerInterface $image_styles_warmer */ - $image_styles_warmer = \Drupal::service('image_style_warmer.warmer'); - $file = File::load($fid); -@@ -45,7 +45,7 @@ public function warmUpFileProcess($fid, $count, &$context) { - * @param array $operations - * Array of operations. - */ -- public function warmUpFileFinished($success, array $results, array $operations) { -+ public static function warmUpFileFinished($success, array $results, array $operations) { - $messenger = \Drupal::messenger(); - if ($success) { - $messenger->addMessage(t('@count files warmed up.', ['@count' => count($results)])); diff --git a/web/modules/interfaces/consumer_permissions/consumer_permissions.info.yml b/web/modules/interfaces/consumer_permissions/consumer_permissions.info.yml index 8ef7428b..61e85da7 100644 --- a/web/modules/interfaces/consumer_permissions/consumer_permissions.info.yml +++ b/web/modules/interfaces/consumer_permissions/consumer_permissions.info.yml @@ -2,7 +2,7 @@ name: Consumer Permissions description: Provides user permissions to authenticate with certain consumers. package: Authentication type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - consumers:consumers - simple_oauth:simple_oauth diff --git a/web/modules/mailer/mailer.info.yml b/web/modules/mailer/mailer.info.yml index b6b7de4e..05e73a41 100644 --- a/web/modules/mailer/mailer.info.yml +++ b/web/modules/mailer/mailer.info.yml @@ -2,7 +2,7 @@ name: Mailer type: module description: Administration and handling of transactional emails. package: youvo -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - youvo:youvo configure: entity.transactional_email.collection