From 8ee17a062bf3ef783ecc63c14868b0b13086609a Mon Sep 17 00:00:00 2001 From: John Spellman Date: Tue, 29 Nov 2022 08:14:08 -0700 Subject: [PATCH 01/17] [CMS-1033] Add GH action for deployments to wp.org (#368) --- .circleci/config.yml | 2 + .distignore | 41 ------------------ .gitattributes | 27 ++++++++++++ .github/workflows/wordpress-plugin-deploy.yml | 16 +++++++ .wordpress-org/banner-1544x500.png | Bin 0 -> 72672 bytes .wordpress-org/banner-772x250.png | Bin 0 -> 32592 bytes .wordpress-org/icon-128x128.png | Bin 0 -> 6847 bytes .wordpress-org/icon-256x256.png | Bin 0 -> 14742 bytes CONTRIBUTING.md | 37 ++++++++++++++++ README.md | 17 +------- package-lock.json | 2 +- package.json | 2 +- readme.txt | 17 +------- 13 files changed, 86 insertions(+), 75 deletions(-) delete mode 100644 .distignore create mode 100644 .gitattributes create mode 100644 .github/workflows/wordpress-plugin-deploy.yml create mode 100644 .wordpress-org/banner-1544x500.png create mode 100644 .wordpress-org/banner-772x250.png create mode 100644 .wordpress-org/icon-128x128.png create mode 100644 .wordpress-org/icon-256x256.png create mode 100644 CONTRIBUTING.md diff --git a/.circleci/config.yml b/.circleci/config.yml index 1cd5e74..d4a2400 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -102,6 +102,7 @@ jobs: - run: name: "Install Extras" command: | + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B sudo apt-get update sudo apt-get install subversion sudo apt-get install -y libmagickwand-dev --no-install-recommends @@ -141,6 +142,7 @@ jobs: - run: name: "Install Extras" command: | + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B sudo apt-get update sudo apt-get install subversion sudo apt-get install -y libmagickwand-dev --no-install-recommends diff --git a/.distignore b/.distignore deleted file mode 100644 index a2c3490..0000000 --- a/.distignore +++ /dev/null @@ -1,41 +0,0 @@ -# A set of files you probably don't want in your WordPress.org distribution -.babelrc -.deployignore -.distignore -.editorconfig -.eslintignore -.eslintrc -.git -.gitignore -.gitlab-ci.yml -.travis.yml -.DS_Store -Thumbs.db -behat.yml -bitbucket-pipelines.yml -bin -.circleci/config.yml -composer.json -composer.lock -dependencies.yml -Gruntfile.js -package.json -package-lock.json -phpunit.xml -phpunit.xml.dist -multisite.xml -multisite.xml.dist -.phpcs.xml -phpcs.xml -.phpcs.xml.dist -phpcs.xml.dist -README.md -webpack.config.js -wp-cli.local.yml -yarn.lock -tests -vendor -node_modules -*.sql -*.tar.gz -*.zip diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..a2ea1d8 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,27 @@ +# Directories +/.circleci export-ignore +/.git export-ignore +/.github export-ignore +/.wordpress-org export-ignore +/tests export-ignore +/node_modules export-ignore +/vendor export-ignore +/bin export-ignore + +# Files +/.DS_Store export-ignore +/Thumbs.db export-ignore +/.editorconfig export-ignore +/.gitattributes export-ignore +/.gitignore export-ignore +/behat.yml export-ignore +/CODEOWNERS export-ignore +/composer.json export-ignore +/composer.lock export-ignore +/CONTRIBUTING.md export-ignore +/Gruntfile.js export-ignore +/package-lock.json export-ignore +/package.json export-ignore +/phpcs.xml.dist export-ignore +/phpunit.xml.dist export-ignore +/README.md export-ignore \ No newline at end of file diff --git a/.github/workflows/wordpress-plugin-deploy.yml b/.github/workflows/wordpress-plugin-deploy.yml new file mode 100644 index 0000000..c8e29dd --- /dev/null +++ b/.github/workflows/wordpress-plugin-deploy.yml @@ -0,0 +1,16 @@ +name: Release wp-redis plugin to wp.org +on: + release: + types: [published] + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: WordPress Plugin Deploy + uses: 10up/action-wordpress-plugin-deploy@2.1.1 + env: + SVN_USERNAME: ${{ secrets.SVN_USERNAME }} + SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }} + SLUG: ${{ env.SLUG }} diff --git a/.wordpress-org/banner-1544x500.png b/.wordpress-org/banner-1544x500.png new file mode 100644 index 0000000000000000000000000000000000000000..0126ef02174c649631acae079751ed432b5b064d GIT binary patch literal 72672 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%0D^k-GF_ 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

E|{lA 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 literal 0 HcmV?d00001 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..3a52d94 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,37 @@ +## Contributing ## + +The best way to contribute to the development of this plugin is by participating on the GitHub project: + +https://github.com/pantheon-systems/wp-redis + +Pull requests and issues are welcome! + +## Workflow + +The `develop` branch is the development branch which means it contains the next version to be released. `master` contains the corresponding stable development version. Always work on the `develop` branch and open up PRs against `develop`. + +## Testing + +You may notice there are two sets of tests running, on two different services: + +* The [PHPUnit](https://phpunit.de/) test suite. +* The [Behat](http://behat.org/) test suite runs against a Pantheon site, to ensure the plugin's compatibility with the Pantheon platform. + +Both of these test suites can be run locally, with a varying amount of setup. + +PHPUnit requires the [WordPress PHPUnit test suite](https://make.wordpress.org/core/handbook/testing/automated-testing/phpunit/), and access to a database with name `wordpress_test`. If you haven't already configured the test suite locally, you can run `bash bin/install-wp-tests.sh wordpress_test root '' localhost`. You'll also need to enable Redis and the PHPRedis extension in order to run the test suite against Redis. + +Behat requires a Pantheon site with Redis enabled. Once you've created the site, you'll need [install Terminus](https://github.com/pantheon-systems/terminus#installation), and set the `TERMINUS_TOKEN`, `TERMINUS_SITE`, and `TERMINUS_ENV` environment variables. Then, you can run `./bin/behat-prepare.sh` to prepare the site for the test suite. + +## Release Process + +1. Starting from `develop`, cut a release branch named `release_X.Y.Z` containing your changes. +1. Update plugin version in `package.json`, `README.md`, `readme.txt`, and `wp-redis.php`. +1. Update the Changelog with the latest changes. +1. Create a PR against the `master` branch. +1. After all tests pass and you have received approval from a CODEOWNER (including resolving any merge conflicts), merge the PR into `master`. +1. Pull `master` locally, create a new tag, and push up. +1. Confirm that the necessary assets are present in the newly created tag, and test on a WP install if desired. +1. Create a [new release](https://github.com/pantheon-systems/wp-redis/releases/new) using the tag created in the previous steps, naming the release with the new version number, and targeting the tag created in the previous step. Paste the release changelog from the `Changelog` section of the `README` into the body of the release and include a link to the closed issues if applicable. +1. Wait for the [_Release wp-redis plugin to wp.org_ action](https://github.com/pantheon-systems/wp-redis/actions/workflows/wordpress-plugin-deploy.yml) to finish deploying to the WordPress.org repository. If all goes well, users with SVN commit access for that plugin will receive an emailed diff of changes. +1. Check WordPress.org: Ensure that the changes are live on https://wordpress.org/plugins/wp-redis/. This may take a few minutes. \ No newline at end of file diff --git a/README.md b/README.md index b0cbff4..d47a9f7 100644 --- a/README.md +++ b/README.md @@ -78,22 +78,7 @@ Use `wp help redis ` to learn more about each command. ## Contributing ## -The best way to contribute to the development of this plugin is by participating on the GitHub project: - -https://github.com/pantheon-systems/wp-redis - -Pull requests and issues are welcome! - -You may notice there are two sets of tests running, on two different services: - -* Travis CI runs the [PHPUnit](https://phpunit.de/) test suite in a variety of environment configurations (e.g. Redis enabled vs. Redis disabled). -* Circle CI runs the [Behat](http://behat.org/) test suite against a Pantheon site, to ensure the plugin's compatibility with the Pantheon platform. - -Both of these test suites can be run locally, with a varying amount of setup. - -PHPUnit requires the [WordPress PHPUnit test suite](https://make.wordpress.org/core/handbook/testing/automated-testing/phpunit/), and access to a database with name `wordpress_test`. If you haven't already configured the test suite locally, you can run `bash bin/install-wp-tests.sh wordpress_test root '' localhost`. You'll also need to enable Redis and the PHPRedis extension in order to run the test suite against Redis. - -Behat requires a Pantheon site with Redis enabled. Once you've created the site, you'll need [install Terminus](https://github.com/pantheon-systems/terminus#installation), and set the `TERMINUS_TOKEN`, `TERMINUS_SITE`, and `TERMINUS_ENV` environment variables. Then, you can run `./bin/behat-prepare.sh` to prepare the site for the test suite. +See [CONTRIBUTING.md](https://github.com/pantheon-systems/wp-redis/blob/master/CONTRIBUTING.md) for information on contributing. ## Frequently Asked Questions ## diff --git a/package-lock.json b/package-lock.json index 67e2f9d..03314a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wp-redis", - "version": "0.2.2", + "version": "1.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 44605eb..5894fe9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wp-redis", - "version": "0.2.2", + "version": "1.2.0", "repository": { "type": "git", "url": "https://github.com/pantheon-systems/wp-redis.git" diff --git a/readme.txt b/readme.txt index bd57ff6..0784c9a 100644 --- a/readme.txt +++ b/readme.txt @@ -76,22 +76,7 @@ Use `wp help redis ` to learn more about each command. == Contributing == -The best way to contribute to the development of this plugin is by participating on the GitHub project: - -https://github.com/pantheon-systems/wp-redis - -Pull requests and issues are welcome! - -You may notice there are two sets of tests running, on two different services: - -* Travis CI runs the [PHPUnit](https://phpunit.de/) test suite in a variety of environment configurations (e.g. Redis enabled vs. Redis disabled). -* Circle CI runs the [Behat](http://behat.org/) test suite against a Pantheon site, to ensure the plugin's compatibility with the Pantheon platform. - -Both of these test suites can be run locally, with a varying amount of setup. - -PHPUnit requires the [WordPress PHPUnit test suite](https://make.wordpress.org/core/handbook/testing/automated-testing/phpunit/), and access to a database with name `wordpress_test`. If you haven't already configured the test suite locally, you can run `bash bin/install-wp-tests.sh wordpress_test root '' localhost`. You'll also need to enable Redis and the PHPRedis extension in order to run the test suite against Redis. - -Behat requires a Pantheon site with Redis enabled. Once you've created the site, you'll need [install Terminus](https://github.com/pantheon-systems/terminus#installation), and set the `TERMINUS_TOKEN`, `TERMINUS_SITE`, and `TERMINUS_ENV` environment variables. Then, you can run `./bin/behat-prepare.sh` to prepare the site for the test suite. +See [CONTRIBUTING.md](https://github.com/pantheon-systems/wp-redis/blob/master/CONTRIBUTING.md) for information on contributing. == Frequently Asked Questions == From 6e96d0b4deb3939cb703ea45428fe8157c05bab2 Mon Sep 17 00:00:00 2001 From: John Spellman Date: Wed, 30 Nov 2022 12:58:23 -0700 Subject: [PATCH 02/17] Make dependabot target develop branch (#376) --- .github/dependabot.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4342d12..92041ae 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,6 +6,7 @@ updates: interval: weekly timezone: America/Los_Angeles day: tuesday + target-branch: "develop" open-pull-requests-limit: 99 ignore: - dependency-name: phpunit/phpunit @@ -22,4 +23,5 @@ updates: interval: weekly timezone: America/Los_Angeles day: tuesday + target-branch: "develop" open-pull-requests-limit: 99 From ff9e8207a096de990ad21eb3cf0fb8feed96d762 Mon Sep 17 00:00:00 2001 From: John Spellman Date: Fri, 2 Dec 2022 13:30:55 -0700 Subject: [PATCH 03/17] Declare wp_cache_supports function and support features (#378) --- object-cache.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/object-cache.php b/object-cache.php index 4f04b77..04b9948 100644 --- a/object-cache.php +++ b/object-cache.php @@ -289,6 +289,31 @@ function wp_cache_reset() { return $wp_object_cache->reset(); } +/** + * Determines whether the object cache implementation supports a particular feature. + * + * @since 6.1.0 + * + * @param string $feature Name of the feature to check for. Possible values include: + * 'add_multiple', 'set_multiple', 'get_multiple', 'delete_multiple', + * 'flush_runtime', 'flush_group'. + * @return bool True if the feature is supported, false otherwise. + */ +function wp_cache_supports( $feature ) { + switch ( $feature ) { + case 'add_multiple': + case 'set_multiple': + case 'get_multiple': + case 'delete_multiple': + case 'flush_runtime': + case 'flush_group': + return true; + + default: + return false; + } +} + /** * WordPress Object Cache * From cad918bedefccfdbb4ef8f2add770ba70e0badce Mon Sep 17 00:00:00 2001 From: John Spellman Date: Mon, 5 Dec 2022 10:16:36 -0700 Subject: [PATCH 04/17] Fix broken wp_cache_supports() (#382) --- object-cache.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/object-cache.php b/object-cache.php index 04b9948..1179e00 100644 --- a/object-cache.php +++ b/object-cache.php @@ -301,14 +301,14 @@ function wp_cache_reset() { */ function wp_cache_supports( $feature ) { switch ( $feature ) { + case 'get_multiple': + return true; + case 'add_multiple': case 'set_multiple': - case 'get_multiple': case 'delete_multiple': case 'flush_runtime': case 'flush_group': - return true; - default: return false; } From db42a0bb3debdaa389159e7896377179b44d9d45 Mon Sep 17 00:00:00 2001 From: John Spellman Date: Tue, 20 Dec 2022 08:43:04 -0700 Subject: [PATCH 05/17] Update images for lint and test-behat jobs --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d4a2400..26ca105 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -21,7 +21,7 @@ jobs: lint: working_directory: ~/pantheon-systems/wp-redis docker: - - image: quay.io/pantheon-public/build-tools-ci:6.x + - image: quay.io/pantheon-public/build-tools-ci:8.x-php7.4 steps: - checkout - restore_cache: @@ -40,7 +40,7 @@ jobs: working_directory: ~/pantheon-systems/wp-redis parallelism: 1 docker: - - image: quay.io/pantheon-public/build-tools-ci:6.x + - image: quay.io/pantheon-public/build-tools-ci:8.x-php7.4 steps: - checkout - restore_cache: From 1b64ff9672085f9b6ff3b71c3ddfb91ec020a5d8 Mon Sep 17 00:00:00 2001 From: John Spellman Date: Tue, 20 Dec 2022 08:49:23 -0700 Subject: [PATCH 06/17] Bump yoast/phpunit-polyfills from 1.0.3 to 1.0.4 --- composer.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/composer.lock b/composer.lock index 4cbc0d8..e3a268b 100644 --- a/composer.lock +++ b/composer.lock @@ -4777,16 +4777,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "5ea3536428944955f969bc764bbe09738e151ada" + "reference": "3c621ff5429d2b1ff96dc5808ad6cde99d31ea4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/5ea3536428944955f969bc764bbe09738e151ada", - "reference": "5ea3536428944955f969bc764bbe09738e151ada", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/3c621ff5429d2b1ff96dc5808ad6cde99d31ea4c", + "reference": "3c621ff5429d2b1ff96dc5808ad6cde99d31ea4c", "shasum": "" }, "require": { @@ -4794,7 +4794,7 @@ "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "require-dev": { - "yoast/yoastcs": "^2.2.0" + "yoast/yoastcs": "^2.2.1" }, "type": "library", "extra": { @@ -4834,7 +4834,7 @@ "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2021-11-23T01:37:03+00:00" + "time": "2022-11-16T09:07:52+00:00" } ], "aliases": [], @@ -4846,5 +4846,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.3.0" } From 4752bc716b79d5ecf6f445352d33eb92038d2d12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Jan 2023 07:00:46 +0000 Subject: [PATCH 07/17] Bump dealerdirect/phpcodesniffer-composer-installer from 0.7.2 to 1.0.0 Bumps [dealerdirect/phpcodesniffer-composer-installer](https://github.com/Dealerdirect/phpcodesniffer-composer-installer) from 0.7.2 to 1.0.0. - [Release notes](https://github.com/Dealerdirect/phpcodesniffer-composer-installer/releases) - [Changelog](https://github.com/PHPCSStandards/composer-installer/blob/main/.github_changelog_generator) - [Commits](https://github.com/Dealerdirect/phpcodesniffer-composer-installer/compare/v0.7.2...v1.0.0) --- updated-dependencies: - dependency-name: dealerdirect/phpcodesniffer-composer-installer dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- composer.json | 2 +- composer.lock | 41 ++++++++++++++++++++++------------------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/composer.json b/composer.json index d5bc2d5..3410ea8 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,7 @@ "behat/mink-goutte-driver": "^1.2", "pantheon-systems/pantheon-wordpress-upstream-tests": "dev-master", "wp-coding-standards/wpcs": "^2", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0.0", "phpunit/phpunit": "^7", "phpcompatibility/php-compatibility": "^9.3", "yoast/phpunit-polyfills": "^1.0" diff --git a/composer.lock b/composer.lock index e3a268b..5122142 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": "2fb3eac834ce14dc32fade3c1f75cef3", + "content-hash": "b71e291207d49f410b51e4b46cb875fd", "packages": [], "packages-dev": [ { @@ -458,35 +458,38 @@ }, { "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v0.7.2", + "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" + "url": "https://github.com/PHPCSStandards/composer-installer.git", + "reference": "4be43904336affa5c2f70744a348312336afd0da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", + "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da", + "reference": "4be43904336affa5c2f70744a348312336afd0da", "shasum": "" }, "require": { "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.3", + "php": ">=5.4", "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" }, "require-dev": { "composer/composer": "*", + "ext-json": "*", + "ext-zip": "*", "php-parallel-lint/php-parallel-lint": "^1.3.1", - "phpcompatibility/php-compatibility": "^9.0" + "phpcompatibility/php-compatibility": "^9.0", + "yoast/phpunit-polyfills": "^1.0" }, "type": "composer-plugin", "extra": { - "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" }, "autoload": { "psr-4": { - "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -502,7 +505,7 @@ }, { "name": "Contributors", - "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" + "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" } ], "description": "PHP_CodeSniffer Standards Composer Installer Plugin", @@ -526,10 +529,10 @@ "tests" ], "support": { - "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", - "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" + "issues": "https://github.com/PHPCSStandards/composer-installer/issues", + "source": "https://github.com/PHPCSStandards/composer-installer" }, - "time": "2022-02-04T12:51:07+00:00" + "time": "2023-01-05T11:28:13+00:00" }, { "name": "doctrine/instantiator", @@ -2661,16 +2664,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.6.2", + "version": "3.7.1", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a" + "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", + "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", "shasum": "" }, "require": { @@ -2713,7 +2716,7 @@ "source": "https://github.com/squizlabs/PHP_CodeSniffer", "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, - "time": "2021-12-12T21:44:58+00:00" + "time": "2022-06-18T07:21:10+00:00" }, { "name": "symfony/browser-kit", From a320f0836bb9a4a6b0fa0063797ad1e390b73c09 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Feb 2023 08:30:19 -0700 Subject: [PATCH 08/17] Bump grunt from 1.5.2 to 1.6.1 (#386) --- package-lock.json | 161 +++++++++++++++++++--------------------------- package.json | 2 +- 2 files changed, 67 insertions(+), 96 deletions(-) diff --git a/package-lock.json b/package-lock.json index 03314a1..6e374c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true } } @@ -39,7 +39,7 @@ "array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", "dev": true }, "array-slice": { @@ -49,9 +49,9 @@ "dev": true }, "async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "balanced-match": { @@ -107,25 +107,25 @@ "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==", "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true }, "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true }, "esprima": { @@ -137,19 +137,19 @@ "eventemitter2": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==", "dev": true }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, "requires": { "homedir-polyfill": "^1.0.1" @@ -171,27 +171,15 @@ } }, "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" } }, "fined": { @@ -216,13 +204,13 @@ "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true }, "for-own": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "dev": true, "requires": { "for-in": "^1.0.1" @@ -231,7 +219,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "function-bind": { @@ -274,7 +262,7 @@ "global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, "requires": { "expand-tilde": "^2.0.2", @@ -285,26 +273,24 @@ } }, "grunt": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.2.tgz", - "integrity": "sha512-XCtfaIu72OyDqK24MjWiGC9SwlkuhkS1mrULr1xzuJ2XqAFhP3ZAchZGHJeSCY6mkaOXU4F7SbmmCF7xIVoC9w==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", "dev": true, "requires": { - "dateformat": "~3.0.3", + "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", "exit": "~0.1.2", - "findup-sync": "~0.3.0", + "findup-sync": "~5.0.0", "glob": "~7.1.6", "grunt-cli": "~1.4.3", "grunt-known-options": "~2.0.0", "grunt-legacy-log": "~3.0.0", "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", + "iconv-lite": "~0.6.3", "js-yaml": "~3.14.0", "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" + "nopt": "~3.0.6" }, "dependencies": { "grunt-cli": { @@ -421,22 +407,22 @@ "hooker": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==", "dev": true }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { "once": "^1.3.0", @@ -458,7 +444,7 @@ "interpret": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==", "dev": true }, "is-absolute": { @@ -472,9 +458,9 @@ } }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "requires": { "has": "^1.0.3" @@ -483,7 +469,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-glob": { @@ -537,13 +523,13 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, "js-yaml": { @@ -610,7 +596,7 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true }, "micromatch": { @@ -632,16 +618,10 @@ "brace-expansion": "^1.1.7" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", "dev": true, "requires": { "abbrev": "1" @@ -650,7 +630,7 @@ "object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "dev": true, "requires": { "array-each": "^1.0.1", @@ -662,7 +642,7 @@ "object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", "dev": true, "requires": { "for-own": "^1.0.0", @@ -672,7 +652,7 @@ "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, "requires": { "isobject": "^3.0.1" @@ -681,7 +661,7 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { "wrappy": "1" @@ -690,13 +670,13 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true }, "osenv": { @@ -712,7 +692,7 @@ "parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, "requires": { "is-absolute": "^1.0.0", @@ -723,13 +703,13 @@ "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-parse": { @@ -741,7 +721,7 @@ "path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, "requires": { "path-root-regex": "^0.1.0" @@ -750,7 +730,7 @@ "path-root-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true }, "picomatch": { @@ -769,12 +749,12 @@ } }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -782,22 +762,13 @@ "resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" } }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -837,7 +808,7 @@ "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true }, "underscore.string": { @@ -853,7 +824,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "v8flags": { @@ -877,7 +848,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true } } diff --git a/package.json b/package.json index 5894fe9..d2e998a 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "main": "Gruntfile.js", "author": "Pantheon ", "devDependencies": { - "grunt": "^1.5.2", + "grunt": "^1.6.1", "grunt-wp-readme-to-markdown": "~2.1.0" } } From b7be9710431db07380c465a96bc743be403bb1c5 Mon Sep 17 00:00:00 2001 From: Chris Reynolds Date: Wed, 15 Feb 2023 11:46:56 -0700 Subject: [PATCH 09/17] [CMSP-223] WP Redis housekeeping (#387) * [CMS-1033] Release 1.3.0 (#371) * [BUGS-5583] Release 1.3.1 (#379) * Release 1.3.2 (#383) * add spdy-compatible license version * remove reference to package.json --------- Co-authored-by: John Spellman --- CONTRIBUTING.md | 4 +- Gruntfile.js | 27 -- README.md | 16 +- composer.json | 1 + composer.lock | 104 +++--- package-lock.json | 855 ---------------------------------------------- package.json | 14 - readme.txt | 14 +- wp-redis.php | 2 +- 9 files changed, 80 insertions(+), 957 deletions(-) delete mode 100644 Gruntfile.js delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3a52d94..35cb1cb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,7 +26,7 @@ Behat requires a Pantheon site with Redis enabled. Once you've created the site, ## Release Process 1. Starting from `develop`, cut a release branch named `release_X.Y.Z` containing your changes. -1. Update plugin version in `package.json`, `README.md`, `readme.txt`, and `wp-redis.php`. +1. Update plugin version in `README.md`, `readme.txt`, and `wp-redis.php`. 1. Update the Changelog with the latest changes. 1. Create a PR against the `master` branch. 1. After all tests pass and you have received approval from a CODEOWNER (including resolving any merge conflicts), merge the PR into `master`. @@ -34,4 +34,4 @@ Behat requires a Pantheon site with Redis enabled. Once you've created the site, 1. Confirm that the necessary assets are present in the newly created tag, and test on a WP install if desired. 1. Create a [new release](https://github.com/pantheon-systems/wp-redis/releases/new) using the tag created in the previous steps, naming the release with the new version number, and targeting the tag created in the previous step. Paste the release changelog from the `Changelog` section of the `README` into the body of the release and include a link to the closed issues if applicable. 1. Wait for the [_Release wp-redis plugin to wp.org_ action](https://github.com/pantheon-systems/wp-redis/actions/workflows/wordpress-plugin-deploy.yml) to finish deploying to the WordPress.org repository. If all goes well, users with SVN commit access for that plugin will receive an emailed diff of changes. -1. Check WordPress.org: Ensure that the changes are live on https://wordpress.org/plugins/wp-redis/. This may take a few minutes. \ No newline at end of file +1. Check WordPress.org: Ensure that the changes are live on https://wordpress.org/plugins/wp-redis/. This may take a few minutes. diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 9ee43bd..0000000 --- a/Gruntfile.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = function( grunt ) { - - 'use strict'; - // Project configuration - grunt.initConfig( { - - pkg: grunt.file.readJSON( 'package.json' ), - - wp_readme_to_markdown: { - options: { - screenshot_url: 'https://s.w.org/plugins/{plugin}/{screenshot}.png', - }, - your_target: { - files: { - 'README.md': 'readme.txt' - } - }, - }, - - } ); - - grunt.loadNpmTasks( 'grunt-wp-readme-to-markdown' ); - grunt.registerTask( 'readme', ['wp_readme_to_markdown'] ); - - grunt.util.linefeed = '\n'; - -}; diff --git a/README.md b/README.md index d47a9f7..2058a62 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@ **Contributors:** [getpantheon](https://profiles.wordpress.org/getpantheon), [danielbachhuber](https://profiles.wordpress.org/danielbachhuber), [mboynes](https://profiles.wordpress.org/mboynes), [Outlandish Josh](https://profiles.wordpress.org/Outlandish Josh) **Tags:** cache, plugin, redis **Requires at least:** 3.0.1 -**Tested up to:** 5.9 -**Stable tag:** 1.2.0 +**Tested up to:** 6.1.1 +**Stable tag:** 1.3.2 **License:** GPLv2 or later **License URI:** http://www.gnu.org/licenses/gpl-2.0.html @@ -104,6 +104,18 @@ There's a known issue with WordPress `alloptions` cache design. Specifically, a ## Changelog ## +### 1.3.2 (December 5, 2022) ### +* Fix broken `wp_cache_supports` function [[#382](https://github.com/pantheon-systems/wp-redis/pull/382)]. + +### 1.3.1 (December 2, 2022) ### +* Declare `wp_cache_supports` function and support features. [[#378](https://github.com/pantheon-systems/wp-redis/pull/378)] +* Make dependabot target `develop` branch for PRs. [[#376](https://github.com/pantheon-systems/wp-redis/pull/376)] + +Declare `wp_cache_supports` function and support features. [[#378](https://github.com/pantheon-systems/wp-redis/pull/378)] + +### 1.3.0 (November 29, 2022) ### +* Added CONTRIBUTING.MD and GitHub action to automate deployments to wp.org. [[#368](https://github.com/pantheon-systems/wp-redis/pull/368)] + ### 1.2.0 (February 17, 2022) ### * Adds support for Relay via `WP_REDIS_USE_RELAY` constant [[#344](https://github.com/pantheon-systems/wp-redis/pull/344)]. diff --git a/composer.json b/composer.json index 3410ea8..7c12dc0 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,7 @@ { "name": "pantheon-systems/wp-redis", "type": "wordpress-plugin", + "license": "GPL-2.0-or-later", "authors": [ { "name": "Pantheon", diff --git a/composer.lock b/composer.lock index 5122142..4267fae 100644 --- a/composer.lock +++ b/composer.lock @@ -55,10 +55,10 @@ }, "autoload": { "psr-4": { - "Behat\\Behat\\": "src/Behat/Behat/", - "Behat\\Testwork\\": "src/Behat/Testwork/", + "Behat\\Hook\\": "src/Behat/Hook/", "Behat\\Step\\": "src/Behat/Step/", - "Behat\\Hook\\": "src/Behat/Hook/" + "Behat\\Behat\\": "src/Behat/Behat/", + "Behat\\Testwork\\": "src/Behat/Testwork/" } }, "notification-url": "https://packagist.org/downloads/", @@ -698,12 +698,12 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -760,12 +760,12 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -944,9 +944,6 @@ "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" - }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", @@ -954,12 +951,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2612,7 +2609,6 @@ "type": "github" } ], - "abandoned": true, "time": "2020-11-30T07:30:19+00:00" }, { @@ -3518,12 +3514,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3597,12 +3593,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3680,12 +3676,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3765,12 +3761,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -3849,12 +3845,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3926,12 +3922,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4002,12 +3998,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -4081,12 +4077,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -4164,12 +4160,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -4324,12 +4320,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, "files": [ "Resources/functions.php" ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, "exclude-from-classmap": [ "/Tests/" ] diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 6e374c9..0000000 --- a/package-lock.json +++ /dev/null @@ -1,855 +0,0 @@ -{ - "name": "wp-redis", - "version": "1.2.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - } - } - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "dev": true - }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "findup-sync": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", - "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.3", - "micromatch": "^4.0.4", - "resolve-dir": "^1.0.1" - } - }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - } - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "getobject": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", - "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", - "dev": true - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "grunt": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", - "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", - "dev": true, - "requires": { - "dateformat": "~4.6.2", - "eventemitter2": "~0.4.13", - "exit": "~0.1.2", - "findup-sync": "~5.0.0", - "glob": "~7.1.6", - "grunt-cli": "~1.4.3", - "grunt-known-options": "~2.0.0", - "grunt-legacy-log": "~3.0.0", - "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.6.3", - "js-yaml": "~3.14.0", - "minimatch": "~3.0.4", - "nopt": "~3.0.6" - }, - "dependencies": { - "grunt-cli": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", - "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", - "dev": true, - "requires": { - "grunt-known-options": "~2.0.0", - "interpret": "~1.1.0", - "liftup": "~3.0.1", - "nopt": "~4.0.1", - "v8flags": "~3.2.0" - }, - "dependencies": { - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - } - } - } - } - }, - "grunt-known-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", - "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", - "dev": true - }, - "grunt-legacy-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", - "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", - "dev": true, - "requires": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.1.0", - "hooker": "~0.2.3", - "lodash": "~4.17.19" - } - }, - "grunt-legacy-log-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", - "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", - "dev": true, - "requires": { - "chalk": "~4.1.0", - "lodash": "~4.17.19" - } - }, - "grunt-legacy-util": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", - "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", - "dev": true, - "requires": { - "async": "~3.2.0", - "exit": "~0.1.2", - "getobject": "~1.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.21", - "underscore.string": "~3.3.5", - "which": "~2.0.2" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "grunt-wp-readme-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-wp-readme-to-markdown/-/grunt-wp-readme-to-markdown-2.1.0.tgz", - "integrity": "sha512-32OYDYNaKgykI2vxVsbqzvYBA9xHJI3XqXHSwXbLzUd1wa0ZepoceHYCs4rYFLo3ZxKpPExxvVuH3gLUS/Fq1Q==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==", - "dev": true - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "liftup": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", - "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", - "dev": true, - "requires": { - "extend": "^3.0.2", - "findup-sync": "^4.0.0", - "fined": "^1.2.0", - "flagged-respawn": "^1.0.1", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.1", - "rechoir": "^0.7.0", - "resolve": "^1.19.0" - }, - "dependencies": { - "findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" - } - } - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true - }, - "underscore.string": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", - "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", - "dev": true, - "requires": { - "sprintf-js": "^1.1.1", - "util-deprecate": "^1.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index d2e998a..0000000 --- a/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "wp-redis", - "version": "1.2.0", - "repository": { - "type": "git", - "url": "https://github.com/pantheon-systems/wp-redis.git" - }, - "main": "Gruntfile.js", - "author": "Pantheon ", - "devDependencies": { - "grunt": "^1.6.1", - "grunt-wp-readme-to-markdown": "~2.1.0" - } -} diff --git a/readme.txt b/readme.txt index 0784c9a..0a92851 100644 --- a/readme.txt +++ b/readme.txt @@ -2,8 +2,8 @@ Contributors: getpantheon, danielbachhuber, mboynes, Outlandish Josh Tags: cache, plugin, redis Requires at least: 3.0.1 -Tested up to: 5.9 -Stable tag: 1.2.0 +Tested up to: 6.1.1 +Stable tag: 1.3.2 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html @@ -102,6 +102,16 @@ There's a known issue with WordPress `alloptions` cache design. Specifically, a == Changelog == += 1.3.2 (December 5, 2022) = +* Fix broken `wp_cache_supports` function [[#382](https://github.com/pantheon-systems/wp-redis/pull/382)]. + += 1.3.1 (December 2, 2022) = +* Declare `wp_cache_supports` function and support features. [[#378](https://github.com/pantheon-systems/wp-redis/pull/378)] +* Make dependabot target `develop` branch for PRs. [[#376](https://github.com/pantheon-systems/wp-redis/pull/376)] + += 1.3.0 (November 29, 2022) = +* Added CONTRIBUTING.MD and GitHub action to automate deployments to wp.org. [[#368](https://github.com/pantheon-systems/wp-redis/pull/368)] + = 1.2.0 (February 17, 2022) = * Adds support for Relay via `WP_REDIS_USE_RELAY` constant [[#344](https://github.com/pantheon-systems/wp-redis/pull/344)]. diff --git a/wp-redis.php b/wp-redis.php index 5da9639..77d57d6 100644 --- a/wp-redis.php +++ b/wp-redis.php @@ -3,7 +3,7 @@ * Plugin Name: WP Redis * Plugin URI: http://github.com/pantheon-systems/wp-redis/ * Description: WordPress Object Cache using Redis. Requires the PhpRedis extension (https://github.com/phpredis/phpredis). - * Version: 1.2.0 + * Version: 1.3.2 * Author: Pantheon, Josh Koenig, Matthew Boynes, Daniel Bachhuber, Alley Interactive * Author URI: https://pantheon.io/ */ From cfec1e04fee3dcf49b0267ae0a4cdabca9cdf874 Mon Sep 17 00:00:00 2001 From: John Spellman Date: Tue, 28 Feb 2023 08:57:28 -0700 Subject: [PATCH 10/17] [CMSP-72] PHP 8.2 compatibility (#388) --- .circleci/config.yml | 103 +- composer.json | 4 +- composer.lock | 1826 ++++++++++++++++++++-------------- object-cache.php | 1 + tests/phpunit/test-cache.php | 12 +- 5 files changed, 1178 insertions(+), 768 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 26ca105..cffa85d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,8 +5,10 @@ workflows: jobs: - lint - test-behat - - test-phpunit-redis-disabled - - test-phpunit-redis-enabled + - test-phpunit-redis-disabled-74 + - test-phpunit-redis-enabled-74 + - test-phpunit-redis-disabled-82 + - test-phpunit-redis-enabled-82 nightly: triggers: - schedule: @@ -21,7 +23,7 @@ jobs: lint: working_directory: ~/pantheon-systems/wp-redis docker: - - image: quay.io/pantheon-public/build-tools-ci:8.x-php7.4 + - image: quay.io/pantheon-public/build-tools-ci:8.x-php8.2 steps: - checkout - restore_cache: @@ -40,7 +42,7 @@ jobs: working_directory: ~/pantheon-systems/wp-redis parallelism: 1 docker: - - image: quay.io/pantheon-public/build-tools-ci:8.x-php7.4 + - image: quay.io/pantheon-public/build-tools-ci:8.x-php8.2 steps: - checkout - restore_cache: @@ -81,7 +83,7 @@ jobs: - run: command: ./bin/behat-cleanup.sh when: always - test-phpunit-redis-disabled: + test-phpunit-redis-disabled-74: working_directory: ~/pantheon-systems/wp-redis docker: - image: circleci/php:7.4-node-browsers @@ -93,10 +95,10 @@ jobs: - checkout - restore_cache: keys: - - test-phpunit-dependencies-{{ checksum "composer.json" }} + - test-phpunit-74-dependencies-{{ checksum "composer.json" }} - run: composer install -n --prefer-dist - save_cache: - key: test-phpunit-dependencies-{{ checksum "composer.json" }} + key: test-phpunit-74-dependencies-{{ checksum "composer.json" }} paths: - vendor - run: @@ -120,7 +122,7 @@ jobs: rm -rf $WP_TESTS_DIR $WP_CORE_DIR bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 nightly true composer phpunit - test-phpunit-redis-enabled: + test-phpunit-redis-enabled-74: working_directory: ~/pantheon-systems/wp-redis docker: - image: circleci/php:7.4-node-browsers @@ -133,10 +135,10 @@ jobs: - checkout - restore_cache: keys: - - test-phpunit-dependencies-{{ checksum "composer.json" }} + - test-phpunit-74-dependencies-{{ checksum "composer.json" }} - run: composer install -n --prefer-dist - save_cache: - key: test-phpunit-dependencies-{{ checksum "composer.json" }} + key: test-phpunit-74-dependencies-{{ checksum "composer.json" }} paths: - vendor - run: @@ -162,3 +164,84 @@ jobs: rm -rf $WP_TESTS_DIR $WP_CORE_DIR bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 nightly true composer phpunit + test-phpunit-redis-disabled-82: + working_directory: ~/pantheon-systems/wp-redis + docker: + - image: cimg/php:8.2.0 + - image: circleci/mariadb:10.3 + environment: + - WP_TESTS_DIR: "/tmp/wordpress-tests-lib" + - WP_CORE_DIR: "/tmp/wordpress/" + steps: + - checkout + - restore_cache: + keys: + - test-phpunit-82-dependencies-{{ checksum "composer.json" }} + - run: composer install -n --prefer-dist + - save_cache: + key: test-phpunit-82-dependencies-{{ checksum "composer.json" }} + paths: + - vendor + - run: + name: "Install Extras" + command: | + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B + sudo apt-get update + sudo apt-get install subversion + sudo apt-get install -y libmagickwand-dev --no-install-recommends + yes '' | sudo pecl install imagick || true + sudo docker-php-ext-enable imagick + sudo docker-php-ext-install mysqli + sudo apt-get install mariadb-client-10.6 + - run: + name: "Run Tests" + command: | + bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 latest + composer phpunit + WP_MULTISITE=1 composer phpunit + WP_REDIS_USE_CACHE_GROUPS=1 composer phpunit + rm -rf $WP_TESTS_DIR $WP_CORE_DIR + bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 nightly true + composer phpunit + test-phpunit-redis-enabled-82: + working_directory: ~/pantheon-systems/wp-redis + docker: + - image: cimg/php:8.2.0 + - image: circleci/mariadb:10.3 + - image: circleci/redis:latest + environment: + - WP_TESTS_DIR: "/tmp/wordpress-tests-lib" + - WP_CORE_DIR: "/tmp/wordpress/" + steps: + - checkout + - restore_cache: + keys: + - test-phpunit-82-dependencies-{{ checksum "composer.json" }} + - run: composer install -n --prefer-dist + - save_cache: + key: test-phpunit-82-dependencies-{{ checksum "composer.json" }} + paths: + - vendor + - run: + name: "Install Extras" + command: | + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4EB27DB2A3B88B8B + sudo apt-get update + sudo apt-get install subversion + sudo apt-get install -y libmagickwand-dev --no-install-recommends + yes '' | sudo pecl install imagick || true + sudo docker-php-ext-enable imagick + sudo docker-php-ext-install mysqli + sudo apt-get install mariadb-client-10.6 + yes '' | sudo pecl install redis || true + sudo docker-php-ext-enable redis + - run: + name: "Run Tests" + command: | + bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 latest + composer phpunit + WP_MULTISITE=1 composer phpunit + WP_REDIS_USE_CACHE_GROUPS=1 composer phpunit + rm -rf $WP_TESTS_DIR $WP_CORE_DIR + bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 nightly true + composer phpunit diff --git a/composer.json b/composer.json index 7c12dc0..61a2af9 100644 --- a/composer.json +++ b/composer.json @@ -13,9 +13,9 @@ "behat/mink-extension": "^2.2", "behat/mink-goutte-driver": "^1.2", "pantheon-systems/pantheon-wordpress-upstream-tests": "dev-master", - "wp-coding-standards/wpcs": "^2", + "wp-coding-standards/wpcs": "dev-develop as 2.3.1", "dealerdirect/phpcodesniffer-composer-installer": "^1.0.0", - "phpunit/phpunit": "^7", + "phpunit/phpunit": "^9", "phpcompatibility/php-compatibility": "^9.3", "yoast/phpunit-polyfills": "^1.0" }, diff --git a/composer.lock b/composer.lock index 4267fae..a8a2446 100644 --- a/composer.lock +++ b/composer.lock @@ -4,21 +4,21 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b71e291207d49f410b51e4b46cb875fd", + "content-hash": "a4493e8b52d8d186cbc8b11c6405da5c", "packages": [], "packages-dev": [ { "name": "behat/behat", - "version": "v3.10.0", + "version": "v3.12.0", "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "a55661154079cf881ef643b303bfaf67bae3a09f" + "reference": "2f059c9172764ba1f1759b3679aca499b665330a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/a55661154079cf881ef643b303bfaf67bae3a09f", - "reference": "a55661154079cf881ef643b303bfaf67bae3a09f", + "url": "https://api.github.com/repos/Behat/Behat/zipball/2f059c9172764ba1f1759b3679aca499b665330a", + "reference": "2f059c9172764ba1f1759b3679aca499b665330a", "shasum": "" }, "require": { @@ -26,7 +26,7 @@ "behat/transliterator": "^1.2", "ext-mbstring": "*", "php": "^7.2 || ^8.0", - "psr/container": "^1.0", + "psr/container": "^1.0 || ^2.0", "symfony/config": "^4.4 || ^5.0 || ^6.0", "symfony/console": "^4.4 || ^5.0 || ^6.0", "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", @@ -35,8 +35,8 @@ "symfony/yaml": "^4.4 || ^5.0 || ^6.0" }, "require-dev": { - "container-interop/container-interop": "^1.2", "herrera-io/box": "~1.6.1", + "phpspec/prophecy": "^1.15", "phpunit/phpunit": "^8.5 || ^9.0", "symfony/process": "^4.4 || ^5.0 || ^6.0", "vimeo/psalm": "^4.8" @@ -90,9 +90,9 @@ ], "support": { "issues": "https://github.com/Behat/Behat/issues", - "source": "https://github.com/Behat/Behat/tree/v3.10.0" + "source": "https://github.com/Behat/Behat/tree/v3.12.0" }, - "time": "2021-11-02T20:09:40+00:00" + "time": "2022-11-29T15:30:11+00:00" }, { "name": "behat/gherkin", @@ -159,31 +159,29 @@ }, { "name": "behat/mink", - "version": "v1.9.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "e35f4695de8800fc776af34ebf665ad58ebdd996" + "reference": "19e58905632e7cfdc5b2bafb9b950a3521af32c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/e35f4695de8800fc776af34ebf665ad58ebdd996", - "reference": "e35f4695de8800fc776af34ebf665ad58ebdd996", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/19e58905632e7cfdc5b2bafb9b950a3521af32c5", + "reference": "19e58905632e7cfdc5b2bafb9b950a3521af32c5", "shasum": "" }, "require": { - "php": ">=5.4", - "symfony/css-selector": "^2.7|^3.0|^4.0|^5.0" + "php": ">=7.2", + "symfony/css-selector": "^4.4 || ^5.0 || ^6.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5 || ^9.5", - "symfony/debug": "^2.7|^3.0|^4.0|^5.0", - "symfony/phpunit-bridge": "^3.4.38 || ^4.4 || ^5.0.5", - "yoast/phpunit-polyfills": "^1.0" + "phpunit/phpunit": "^8.5.22 || ^9.5.11", + "symfony/error-handler": "^4.4 || ^5.0 || ^6.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0" }, "suggest": { - "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", - "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", + "behat/mink-browserkit-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" @@ -219,22 +217,22 @@ ], "support": { "issues": "https://github.com/minkphp/Mink/issues", - "source": "https://github.com/minkphp/Mink/tree/v1.9.0" + "source": "https://github.com/minkphp/Mink/tree/v1.10.0" }, - "time": "2021-10-11T11:58:47+00:00" + "time": "2022-03-28T14:22:43+00:00" }, { "name": "behat/mink-browserkit-driver", - "version": "v1.4.0", + "version": "v1.4.1", "source": { "type": "git", "url": "https://github.com/minkphp/MinkBrowserKitDriver.git", - "reference": "0ed1919eb09968f2e152ed91aee35300e70602a8" + "reference": "057926c9da452bac5bfcffb92eb4f3e1ce74dae9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/0ed1919eb09968f2e152ed91aee35300e70602a8", - "reference": "0ed1919eb09968f2e152ed91aee35300e70602a8", + "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/057926c9da452bac5bfcffb92eb4f3e1ce74dae9", + "reference": "057926c9da452bac5bfcffb92eb4f3e1ce74dae9", "shasum": "" }, "require": { @@ -282,9 +280,9 @@ ], "support": { "issues": "https://github.com/minkphp/MinkBrowserKitDriver/issues", - "source": "https://github.com/minkphp/MinkBrowserKitDriver/tree/v1.4.0" + "source": "https://github.com/minkphp/MinkBrowserKitDriver/tree/v1.4.1" }, - "time": "2021-10-12T09:42:37+00:00" + "time": "2021-12-10T14:17:06+00:00" }, { "name": "behat/mink-extension", @@ -409,30 +407,30 @@ }, { "name": "behat/transliterator", - "version": "v1.3.0", + "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/Behat/Transliterator.git", - "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc" + "reference": "baac5873bac3749887d28ab68e2f74db3a4408af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Transliterator/zipball/3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc", - "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc", + "url": "https://api.github.com/repos/Behat/Transliterator/zipball/baac5873bac3749887d28ab68e2f74db3a4408af", + "reference": "baac5873bac3749887d28ab68e2f74db3a4408af", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.2" }, "require-dev": { "chuyskywalker/rolling-curl": "^3.1", "php-yaoi/php-yaoi": "^1.0", - "phpunit/phpunit": "^4.8.36|^6.3" + "phpunit/phpunit": "^8.5.25 || ^9.5.19" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -452,9 +450,9 @@ ], "support": { "issues": "https://github.com/Behat/Transliterator/issues", - "source": "https://github.com/Behat/Transliterator/tree/v1.3.0" + "source": "https://github.com/Behat/Transliterator/tree/v1.5.0" }, - "time": "2020-01-14T16:39:13+00:00" + "time": "2022-03-30T09:27:43+00:00" }, { "name": "dealerdirect/phpcodesniffer-composer-installer", @@ -536,29 +534,30 @@ }, { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { @@ -585,7 +584,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { @@ -601,7 +600,7 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { "name": "fabpot/goutte", @@ -664,24 +663,24 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.5.5", + "version": "6.5.8", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a52f0440530b54fa079ce76e8c5d196a42cad981", + "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", + "guzzlehttp/psr7": "^1.9", "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17.0" + "symfony/polyfill-intl-idn": "^1.17" }, "require-dev": { "ext-curl": "*", @@ -710,10 +709,40 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle is a PHP HTTP client library", @@ -729,22 +758,36 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5" + "source": "https://github.com/guzzle/guzzle/tree/6.5.8" }, - "time": "2020-06-16T21:01:06+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-06-20T22:16:07+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.0", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0" + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/136a635e2b4a49b9d79e9c8fee267ffb257fdba0", - "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", "shasum": "" }, "require": { @@ -799,7 +842,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.0" + "source": "https://github.com/guzzle/promises/tree/1.5.2" }, "funding": [ { @@ -815,20 +858,20 @@ "type": "tidelift" } ], - "time": "2021-10-07T13:05:22+00:00" + "time": "2022-08-28T14:55:35+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.8.5", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268" + "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/337e3ad8e5716c15f9657bd214d16cc5e69df268", - "reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", + "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", "shasum": "" }, "require": { @@ -849,7 +892,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -909,7 +952,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.5" + "source": "https://github.com/guzzle/psr7/tree/1.9.0" }, "funding": [ { @@ -925,29 +968,33 @@ "type": "tidelift" } ], - "time": "2022-03-20T21:51:18+00:00" + "time": "2022-06-20T21:43:03+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { @@ -972,7 +1019,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" }, "funding": [ { @@ -980,7 +1027,63 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-03-03T13:19:32+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.15.3", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "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.3" + }, + "time": "2023-01-16T22:05:37+00:00" }, { "name": "pantheon-systems/pantheon-wordpress-upstream-tests", @@ -1023,28 +1126,29 @@ }, { "name": "phar-io/manifest", - "version": "1.0.3", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -1076,26 +1180,26 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" + "source": "https://github.com/phar-io/manifest/tree/2.0.3" }, - "time": "2018-07-08T19:23:20+00:00" + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", - "version": "2.0.1", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -1127,9 +1231,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/master" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2018-07-08T19:19:57+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpcompatibility/php-compatibility", @@ -1194,268 +1298,182 @@ "time": "2019-12-27T09:44:58+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "name": "phpcsstandards/phpcsextra", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "url": "https://github.com/PHPCSStandards/PHPCSExtra.git", + "reference": "a077c4ad65b906768ed2f820701958b57f605be0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/a077c4ad65b906768ed2f820701958b57f605be0", + "reference": "a077c4ad65b906768ed2f820701958b57f605be0", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "php": ">=5.4", + "phpcsstandards/phpcsutils": "^1.0", + "squizlabs/php_codesniffer": "^3.7.1" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcsstandards/phpcsdevcs": "^1.1.5", + "phpcsstandards/phpcsdevtools": "^1.2.0", + "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0" }, - "type": "library", + "type": "phpcodesniffer-standard", "extra": { "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "dev-stable": "1.x-dev", + "dev-develop": "1.x-dev" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-3.0-or-later" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl", + "role": "lead" }, { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.5.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHPCSExtra/graphs/contributors" } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } + "description": "A collection of sniffs and standards for use with PHP_CodeSniffer.", + "keywords": [ + "PHP_CodeSniffer", + "phpcbf", + "phpcodesniffer-standard", + "phpcs", + "standards", + "static analysis" ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" + "issues": "https://github.com/PHPCSStandards/PHPCSExtra/issues", + "source": "https://github.com/PHPCSStandards/PHPCSExtra" }, - "time": "2021-10-02T14:08:47+00:00" + "time": "2023-01-09T22:15:31+00:00" }, { - "name": "phpspec/prophecy", - "version": "1.14.0", + "name": "phpcsstandards/phpcsutils", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" + "url": "https://github.com/PHPCSStandards/PHPCSUtils.git", + "reference": "4fd2e30c7465112ca2e3646037bfb9e6f0f4d4f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/4fd2e30c7465112ca2e3646037bfb9e6f0f4d4f3", + "reference": "4fd2e30c7465112ca2e3646037bfb9e6f0f4d4f3", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0", + "php": ">=5.4", + "squizlabs/php_codesniffer": "^3.7.1 || 4.0.x-dev@dev" }, "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "ext-filter": "*", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcsstandards/phpcsdevcs": "^1.1.3", + "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.3", + "yoast/phpunit-polyfills": "^1.0.1" }, - "type": "library", + "type": "phpcodesniffer-standard", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-stable": "1.x-dev", + "dev-develop": "1.x-dev" } }, "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } + "classmap": [ + "PHPCSUtils/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-3.0-or-later" ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl", + "role": "lead" }, { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHPCSUtils/graphs/contributors" } ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", + "description": "A suite of utility functions for use with PHP_CodeSniffer", + "homepage": "https://phpcsutils.com/", "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" + "PHP_CodeSniffer", + "phpcbf", + "phpcodesniffer-standard", + "phpcs", + "phpcs3", + "standards", + "static analysis", + "tokens", + "utility" ], "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.14.0" + "docs": "https://phpcsutils.com/", + "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues", + "source": "https://github.com/PHPCSStandards/PHPCSUtils" }, - "time": "2021-09-10T09:02:12+00:00" + "time": "2023-01-05T12:08:37+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "6.1.4", + "version": "9.2.25", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" + "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/0e2b40518197a8c0d4b08bc34dfff1c99c508954", + "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-xmlwriter": "*", - "php": "^7.1", - "phpunit/php-file-iterator": "^2.0", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.1 || ^4.0", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" + "nikic/php-parser": "^4.15", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-xdebug": "^2.6.0" + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.1-dev" + "dev-master": "9.2-dev" } }, "autoload": { @@ -1483,34 +1501,40 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/master" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.25" }, - "time": "2018-10-31T16:06:48+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-25T05:32:00+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.4", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "28af674ff175d0768a5a978e6de83f697d4a7f05" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/28af674ff175d0768a5a978e6de83f697d4a7f05", - "reference": "28af674ff175d0768a5a978e6de83f697d4a7f05", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1537,7 +1561,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.4" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { @@ -1545,26 +1569,38 @@ "type": "github" } ], - "time": "2021-07-19T06:46:01+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "phpunit/php-invoker", + "version": "3.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -1581,41 +1617,47 @@ "role": "lead" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "template" + "process" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" }, - "time": "2015-06-21T13:50:34+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" }, { - "name": "phpunit/php-timer", - "version": "2.1.3", + "name": "phpunit/php-text-template", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1634,14 +1676,14 @@ "role": "lead" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "timer" + "template" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" }, "funding": [ { @@ -1649,33 +1691,32 @@ "type": "github" } ], - "time": "2020-11-30T08:20:02+00:00" + "time": "2020-10-26T05:33:50+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "3.1.3", + "name": "phpunit/php-timer", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "9c1da83261628cb24b6a6df371b6e312b3954768" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768", - "reference": "9c1da83261628cb24b6a6df371b6e312b3954768", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1690,17 +1731,18 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "tokenizer" + "timer" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", - "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" }, "funding": [ { @@ -1708,58 +1750,54 @@ "type": "github" } ], - "abandoned": true, - "time": "2021-07-26T12:15:06+00:00" + "time": "2020-10-26T13:16:10+00:00" }, { "name": "phpunit/phpunit", - "version": "7.5.20", + "version": "9.6.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" + "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9125ee085b6d95e78277dc07aa1f46f9e0607b8d", + "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "^1.7", - "phar-io/manifest": "^1.0.2", - "phar-io/version": "^2.0", - "php": "^7.1", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^6.0.7", - "phpunit/php-file-iterator": "^2.0.1", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0", - "sebastian/environment": "^4.0", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0", - "sebastian/version": "^2.0.1" - }, - "conflict": { - "phpunit/phpunit-mock-objects": "*" - }, - "require-dev": { - "ext-pdo": "*" + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.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.2", + "sebastian/version": "^3.0.2" }, "suggest": { "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0" + "ext-xdebug": "*" }, "bin": [ "phpunit" @@ -1767,10 +1805,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], "classmap": [ "src/" ] @@ -1795,26 +1836,40 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/7.5.20" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.4" }, - "time": "2020-01-08T08:45:45+00:00" + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2023-02-27T13:06:37+00:00" }, { "name": "psr/container", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": ">=7.4.0" }, "type": "library", "autoload": { @@ -1843,9 +1898,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" + "source": "https://github.com/php-fig/container/tree/1.1.2" }, - "time": "2021-03-05T17:36:06+00:00" + "time": "2021-11-05T16:50:12+00:00" }, { "name": "psr/event-dispatcher", @@ -1968,56 +2023,168 @@ "php": ">=5.6" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { - "files": [ - "src/getallheaders.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A polyfill for getallheaders.", + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" }, - "time": "2019-03-08T08:55:37+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2039,7 +2206,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" }, "funding": [ { @@ -2047,34 +2214,34 @@ "type": "github" } ], - "time": "2020-11-30T08:15:22+00:00" + "time": "2020-09-28T05:30:19+00:00" }, { "name": "sebastian/comparator", - "version": "3.0.3", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { - "php": ">=7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2113,7 +2280,64 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" }, "funding": [ { @@ -2121,33 +2345,33 @@ "type": "github" } ], - "time": "2020-11-30T08:04:30+00:00" + "time": "2020-10-26T15:52:27+00:00" }, { "name": "sebastian/diff", - "version": "3.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", - "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2179,7 +2403,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" }, "funding": [ { @@ -2187,27 +2411,27 @@ "type": "github" } ], - "time": "2020-11-30T07:59:04+00:00" + "time": "2020-10-26T13:10:38+00:00" }, { "name": "sebastian/environment", - "version": "4.2.4", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-posix": "*" @@ -2215,7 +2439,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2242,7 +2466,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -2250,34 +2474,34 @@ "type": "github" } ], - "time": "2020-11-30T07:53:42+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", - "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { - "php": ">=7.0", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2312,14 +2536,14 @@ } ], "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -2327,27 +2551,30 @@ "type": "github" } ], - "time": "2021-11-11T13:51:24+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", - "version": "2.0.0", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "ext-dom": "*", + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-uopz": "*" @@ -2355,7 +2582,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -2380,36 +2607,99 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-14T08:28:10+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" }, - "time": "2017-04-27T15:39:26+00:00" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.4", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", "shasum": "" }, "require": { - "php": ">=7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2431,7 +2721,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" }, "funding": [ { @@ -2439,32 +2729,32 @@ "type": "github" } ], - "time": "2020-11-30T07:40:27+00:00" + "time": "2020-10-26T13:12:34+00:00" }, { "name": "sebastian/object-reflector", - "version": "1.1.2", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": ">=7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2486,7 +2776,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" }, "funding": [ { @@ -2494,32 +2784,32 @@ "type": "github" } ], - "time": "2020-11-30T07:37:18+00:00" + "time": "2020-10-26T13:14:26+00:00" }, { "name": "sebastian/recursion-context", - "version": "3.0.1", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { - "php": ">=7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2546,10 +2836,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/3.0.1" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -2557,29 +2847,32 @@ "type": "github" } ], - "time": "2020-11-30T07:34:24+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", - "version": "2.0.2", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2601,7 +2894,63 @@ "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -2609,29 +2958,29 @@ "type": "github" } ], - "time": "2020-11-30T07:30:19+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2654,22 +3003,28 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/master" + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" }, - "time": "2016-10-03T07:35:21+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+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": { @@ -2705,27 +3060,28 @@ "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", - "version": "v4.4.27", + "version": "v4.4.44", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "9629d1524d8ced5a4ec3e94abdbd638b4ec8319b" + "reference": "2a1ff40723ef6b29c8229a860a9c8f815ad7dbbb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/9629d1524d8ced5a4ec3e94abdbd638b4ec8319b", - "reference": "9629d1524d8ced5a4ec3e94abdbd638b4ec8319b", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/2a1ff40723ef6b29c8229a860a9c8f815ad7dbbb", + "reference": "2a1ff40723ef6b29c8229a860a9c8f815ad7dbbb", "shasum": "" }, "require": { @@ -2768,7 +3124,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v4.4.27" + "source": "https://github.com/symfony/browser-kit/tree/v4.4.44" }, "funding": [ { @@ -2784,20 +3140,20 @@ "type": "tidelift" } ], - "time": "2021-07-21T12:19:41+00:00" + "time": "2022-07-25T12:56:14+00:00" }, { "name": "symfony/config", - "version": "v4.4.33", + "version": "v4.4.44", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "25c11934bf20c1633f3f125fed0bd7e29f5d8f24" + "reference": "ed42f8f9da528d2c6cae36fe1f380b0c1d8f0658" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/25c11934bf20c1633f3f125fed0bd7e29f5d8f24", - "reference": "25c11934bf20c1633f3f125fed0bd7e29f5d8f24", + "url": "https://api.github.com/repos/symfony/config/zipball/ed42f8f9da528d2c6cae36fe1f380b0c1d8f0658", + "reference": "ed42f8f9da528d2c6cae36fe1f380b0c1d8f0658", "shasum": "" }, "require": { @@ -2846,7 +3202,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v4.4.33" + "source": "https://github.com/symfony/config/tree/v4.4.44" }, "funding": [ { @@ -2862,30 +3218,30 @@ "type": "tidelift" } ], - "time": "2021-10-19T15:09:42+00:00" + "time": "2022-07-20T09:59:04+00:00" }, { "name": "symfony/console", - "version": "v5.3.10", + "version": "v5.4.19", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3" + "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3", - "reference": "d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3", + "url": "https://api.github.com/repos/symfony/console/zipball/dccb8d251a9017d5994c988b034d3e18aaabf740", + "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php73": "^1.9", "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2", - "symfony/string": "^5.1" + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" }, "conflict": { "psr/log": ">=3", @@ -2900,12 +3256,12 @@ }, "require-dev": { "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -2945,7 +3301,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.3.10" + "source": "https://github.com/symfony/console/tree/v5.4.19" }, "funding": [ { @@ -2961,20 +3317,20 @@ "type": "tidelift" } ], - "time": "2021-10-26T09:30:15+00:00" + "time": "2023-01-01T08:32:19+00:00" }, { "name": "symfony/css-selector", - "version": "v5.3.4", + "version": "v5.4.19", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "7fb120adc7f600a59027775b224c13a33530dd90" + "reference": "f4a7d150f5b9e8f974f6f127d8167e420d11fc62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/7fb120adc7f600a59027775b224c13a33530dd90", - "reference": "7fb120adc7f600a59027775b224c13a33530dd90", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/f4a7d150f5b9e8f974f6f127d8167e420d11fc62", + "reference": "f4a7d150f5b9e8f974f6f127d8167e420d11fc62", "shasum": "" }, "require": { @@ -3011,7 +3367,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.3.4" + "source": "https://github.com/symfony/css-selector/tree/v5.4.19" }, "funding": [ { @@ -3027,20 +3383,20 @@ "type": "tidelift" } ], - "time": "2021-07-21T12:38:00+00:00" + "time": "2023-01-01T08:32:19+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.4.33", + "version": "v4.4.49", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "ad364e599a4059db29c0aa424537e6ba668f54e6" + "reference": "9065fe97dbd38a897e95ea254eb5ddfe1310f734" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ad364e599a4059db29c0aa424537e6ba668f54e6", - "reference": "ad364e599a4059db29c0aa424537e6ba668f54e6", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/9065fe97dbd38a897e95ea254eb5ddfe1310f734", + "reference": "9065fe97dbd38a897e95ea254eb5ddfe1310f734", "shasum": "" }, "require": { @@ -3053,7 +3409,7 @@ "symfony/config": "<4.3|>=5.0", "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", - "symfony/yaml": "<3.4" + "symfony/yaml": "<4.4.26" }, "provide": { "psr/container-implementation": "1.0", @@ -3062,7 +3418,7 @@ "require-dev": { "symfony/config": "^4.3", "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/yaml": "^4.4|^5.0" + "symfony/yaml": "^4.4.26|^5.0" }, "suggest": { "symfony/config": "", @@ -3097,7 +3453,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.33" + "source": "https://github.com/symfony/dependency-injection/tree/v4.4.49" }, "funding": [ { @@ -3113,20 +3469,20 @@ "type": "tidelift" } ], - "time": "2021-10-17T07:04:24+00:00" + "time": "2022-11-16T16:18:09+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.4.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", "shasum": "" }, "require": { @@ -3135,7 +3491,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -3164,7 +3520,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" }, "funding": [ { @@ -3180,20 +3536,20 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.4.30", + "version": "v4.4.45", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "4632ae3567746c7e915c33c67a2fb6ab746090c4" + "reference": "4b8daf6c56801e6d664224261cb100b73edc78a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4632ae3567746c7e915c33c67a2fb6ab746090c4", - "reference": "4632ae3567746c7e915c33c67a2fb6ab746090c4", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4b8daf6c56801e6d664224261cb100b73edc78a5", + "reference": "4b8daf6c56801e6d664224261cb100b73edc78a5", "shasum": "" }, "require": { @@ -3238,7 +3594,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v4.4.30" + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.45" }, "funding": [ { @@ -3254,26 +3610,26 @@ "type": "tidelift" } ], - "time": "2021-08-28T15:40:01+00:00" + "time": "2022-08-03T12:57:57+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.3.7", + "version": "v5.4.19", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "ce7b20d69c66a20939d8952b617506a44d102130" + "reference": "abf49cc084c087d94b4cb939c3f3672971784e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ce7b20d69c66a20939d8952b617506a44d102130", - "reference": "ce7b20d69c66a20939d8952b617506a44d102130", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/abf49cc084c087d94b4cb939c3f3672971784e0c", + "reference": "abf49cc084c087d94b4cb939c3f3672971784e0c", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/event-dispatcher-contracts": "^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", "symfony/polyfill-php80": "^1.16" }, "conflict": { @@ -3285,13 +3641,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/error-handler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^4.4|^5.0" + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -3323,7 +3679,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.7" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.19" }, "funding": [ { @@ -3339,20 +3695,20 @@ "type": "tidelift" } ], - "time": "2021-08-04T21:20:46+00:00" + "time": "2023-01-01T08:32:19+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.4.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", "shasum": "" }, "require": { @@ -3365,7 +3721,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -3402,7 +3758,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" }, "funding": [ { @@ -3418,25 +3774,26 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/filesystem", - "version": "v5.3.4", + "version": "v5.4.19", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32" + "reference": "648bfaca6a494f3e22378123bcee2894045dc9d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/343f4fe324383ca46792cae728a3b6e2f708fb32", - "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/648bfaca6a494f3e22378123bcee2894045dc9d8", + "reference": "648bfaca6a494f3e22378123bcee2894045dc9d8", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", "symfony/polyfill-php80": "^1.16" }, "type": "library", @@ -3465,7 +3822,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.3.4" + "source": "https://github.com/symfony/filesystem/tree/v5.4.19" }, "funding": [ { @@ -3481,32 +3838,35 @@ "type": "tidelift" } ], - "time": "2021-07-21T12:40:44+00:00" + "time": "2023-01-14T19:14:44+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.23.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "suggest": { "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3544,7 +3904,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -3560,20 +3920,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.1", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { @@ -3585,7 +3945,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3625,7 +3985,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -3641,20 +4001,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.23.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", "shasum": "" }, "require": { @@ -3668,7 +4028,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3712,7 +4072,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" }, "funding": [ { @@ -3728,20 +4088,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -3753,7 +4113,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3796,7 +4156,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -3812,32 +4172,35 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.1", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, "suggest": { "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3876,7 +4239,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -3892,20 +4255,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.23.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", "shasum": "" }, "require": { @@ -3914,7 +4277,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3952,7 +4315,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" }, "funding": [ { @@ -3968,20 +4331,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.23.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", "shasum": "" }, "require": { @@ -3990,7 +4353,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4031,7 +4394,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" }, "funding": [ { @@ -4047,20 +4410,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.23.1", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -4069,7 +4432,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4114,7 +4477,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -4130,20 +4493,20 @@ "type": "tidelift" } ], - "time": "2021-07-28T13:41:28+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.23.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", "shasum": "" }, "require": { @@ -4152,7 +4515,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4193,7 +4556,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" }, "funding": [ { @@ -4209,25 +4572,29 @@ "type": "tidelift" } ], - "time": "2021-05-21T13:25:03+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.4.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.1" + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "suggest": { "symfony/service-implementation": "" @@ -4235,7 +4602,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -4272,7 +4639,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" }, "funding": [ { @@ -4288,20 +4655,20 @@ "type": "tidelift" } ], - "time": "2021-04-01T10:43:52+00:00" + "time": "2022-05-30T19:17:29+00:00" }, { "name": "symfony/string", - "version": "v5.3.10", + "version": "v5.4.19", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c" + "reference": "0a01071610fd861cc160dfb7e2682ceec66064cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c", - "reference": "d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c", + "url": "https://api.github.com/repos/symfony/string/zipball/0a01071610fd861cc160dfb7e2682ceec66064cb", + "reference": "0a01071610fd861cc160dfb7e2682ceec66064cb", "shasum": "" }, "require": { @@ -4312,11 +4679,14 @@ "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php80": "~1.15" }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" + "symfony/var-exporter": "^4.4|^5.0|^6.0" }, "type": "library", "autoload": { @@ -4355,7 +4725,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.3.10" + "source": "https://github.com/symfony/string/tree/v5.4.19" }, "funding": [ { @@ -4371,20 +4741,20 @@ "type": "tidelift" } ], - "time": "2021-10-27T18:21:46+00:00" + "time": "2023-01-01T08:32:19+00:00" }, { "name": "symfony/translation", - "version": "v4.4.32", + "version": "v4.4.47", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "db0ba1e85280d8ff11e38d53c70f8814d4d740f5" + "reference": "45036b1d53accc48fe9bab71ccd86d57eba0dd94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/db0ba1e85280d8ff11e38d53c70f8814d4d740f5", - "reference": "db0ba1e85280d8ff11e38d53c70f8814d4d740f5", + "url": "https://api.github.com/repos/symfony/translation/zipball/45036b1d53accc48fe9bab71ccd86d57eba0dd94", + "reference": "45036b1d53accc48fe9bab71ccd86d57eba0dd94", "shasum": "" }, "require": { @@ -4444,7 +4814,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v4.4.32" + "source": "https://github.com/symfony/translation/tree/v4.4.47" }, "funding": [ { @@ -4460,20 +4830,20 @@ "type": "tidelift" } ], - "time": "2021-08-26T05:57:13+00:00" + "time": "2022-10-03T15:15:11+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.4.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95" + "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe", + "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe", "shasum": "" }, "require": { @@ -4485,7 +4855,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -4522,7 +4892,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.2" }, "funding": [ { @@ -4538,32 +4908,32 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2022-06-27T16:58:25+00:00" }, { "name": "symfony/yaml", - "version": "v5.3.6", + "version": "v5.4.19", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7" + "reference": "71c05db20cb9b54d381a28255f17580e2b7e36a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7", - "reference": "4500fe63dc9c6ffc32d3b1cb0448c329f9c814b7", + "url": "https://api.github.com/repos/symfony/yaml/zipball/71c05db20cb9b54d381a28255f17580e2b7e36a5", + "reference": "71c05db20cb9b54d381a28255f17580e2b7e36a5", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<4.4" + "symfony/console": "<5.3" }, "require-dev": { - "symfony/console": "^4.4|^5.0" + "symfony/console": "^5.3|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -4597,7 +4967,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.3.6" + "source": "https://github.com/symfony/yaml/tree/v5.4.19" }, "funding": [ { @@ -4613,7 +4983,7 @@ "type": "tidelift" } ], - "time": "2021-07-29T06:20:01+00:00" + "time": "2023-01-10T18:51:14+00:00" }, { "name": "theseer/tokenizer", @@ -4665,91 +5035,38 @@ ], "time": "2021-07-28T10:34:58+00:00" }, - { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" - }, { "name": "wp-coding-standards/wpcs", - "version": "2.3.0", + "version": "dev-develop", "source": { "type": "git", "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", - "reference": "7da1894633f168fe244afc6de00d141f27517b62" + "reference": "546f59c67854589bb8f6b49a30e642e75ff419ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/7da1894633f168fe244afc6de00d141f27517b62", - "reference": "7da1894633f168fe244afc6de00d141f27517b62", + "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/546f59c67854589bb8f6b49a30e642e75ff419ad", + "reference": "546f59c67854589bb8f6b49a30e642e75ff419ad", "shasum": "" }, "require": { + "ext-filter": "*", "php": ">=5.4", - "squizlabs/php_codesniffer": "^3.3.1" + "phpcsstandards/phpcsextra": "^1.0", + "phpcsstandards/phpcsutils": "^1.0", + "squizlabs/php_codesniffer": "^3.7.1" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || ^0.6", + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", "phpcompatibility/php-compatibility": "^9.0", - "phpcsstandards/phpcsdevtools": "^1.0", + "phpcsstandards/phpcsdevtools": "^1.2.0", "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "suggest": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically." + "ext-mbstring": "For improved results" }, + "default-branch": true, "type": "phpcodesniffer-standard", "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4765,6 +5082,7 @@ "keywords": [ "phpcs", "standards", + "static analysis", "wordpress" ], "support": { @@ -4772,7 +5090,7 @@ "source": "https://github.com/WordPress/WordPress-Coding-Standards", "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki" }, - "time": "2020-05-13T23:57:56+00:00" + "time": "2023-01-13T13:37:27+00:00" }, { "name": "yoast/phpunit-polyfills", @@ -4836,10 +5154,18 @@ "time": "2022-11-16T09:07:52+00:00" } ], - "aliases": [], + "aliases": [ + { + "package": "wp-coding-standards/wpcs", + "version": "dev-develop", + "alias": "2.3.1", + "alias_normalized": "2.3.1.0" + } + ], "minimum-stability": "stable", "stability-flags": { - "pantheon-systems/pantheon-wordpress-upstream-tests": 20 + "pantheon-systems/pantheon-wordpress-upstream-tests": 20, + "wp-coding-standards/wpcs": 20 }, "prefer-stable": false, "prefer-lowest": false, diff --git a/object-cache.php b/object-cache.php index 1179e00..290d950 100644 --- a/object-cache.php +++ b/object-cache.php @@ -326,6 +326,7 @@ function wp_cache_supports( $feature ) { * in the wp-content folder which is looked at in wp-settings. If that file * exists, then this file will not be included. */ +#[AllowDynamicProperties] class WP_Object_Cache { /** diff --git a/tests/phpunit/test-cache.php b/tests/phpunit/test-cache.php index d7314ec..b893e65 100644 --- a/tests/phpunit/test-cache.php +++ b/tests/phpunit/test-cache.php @@ -30,7 +30,7 @@ class CacheTest extends WP_UnitTestCase { 'retry_interval' => 100, ); - public function setUp() { + public function setUp(): void { parent::setUp(); $GLOBALS['redis_server'] = array( 'host' => '127.0.0.1', @@ -1390,9 +1390,9 @@ public function test_wp_redis_get_info() { } $data = wp_redis_get_info(); $this->assertEquals( 'connected', $data['status'] ); - $this->assertInternalType( 'int', $data['key_count'] ); - $this->assertRegExp( '/[\d]+\/sec/', $data['instantaneous_ops'] ); - $this->assertRegExp( '/[\d]+\sdays?/', $data['uptime'] ); + $this->assertIsInt( $data['key_count'] ); + $this->assertMatchesRegularExpression( '/[\d]+\/sec/', $data['instantaneous_ops'] ); + $this->assertMatchesRegularExpression( '/[\d]+\sdays?/', $data['uptime'] ); } public function test_dependencies() { @@ -1449,7 +1449,7 @@ public function test_setup_connection_throws_exception() { $this->cache->perform_client_connection( $redis, $settings, $keys_methods ); } - public function tearDown() { + public function tearDown(): void { parent::tearDown(); $this->flush_cache(); } @@ -1457,7 +1457,7 @@ public function tearDown() { /** * Remove the object-cache.php from the place we've dropped it */ - static function tearDownAfterClass() { + static function tearDownAfterClass(): void { // @codingStandardsIgnoreStart unlink( ABSPATH . 'wp-content/object-cache.php' ); // @codingStandardsIgnoreEnd From 78fb2a401185f1e97c0ee05fcc4ee187dfbfbfa8 Mon Sep 17 00:00:00 2001 From: John Spellman Date: Tue, 7 Mar 2023 14:19:42 -0700 Subject: [PATCH 11/17] [BUGS-5623] Set missing_redis_message if Redis service is not connected (#391) * Set missing_redis_message if Redis is not connected * i18n --- wp-redis.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/wp-redis.php b/wp-redis.php index 77d57d6..0df1dca 100644 --- a/wp-redis.php +++ b/wp-redis.php @@ -53,10 +53,14 @@ function wp_redis_get_info() { } if ( ! defined( 'WP_REDIS_OBJECT_CACHE' ) || ! WP_REDIS_OBJECT_CACHE ) { - return new WP_Error( 'wp-redis', 'WP Redis object-cache.php file is missing from the wp-content/ directory.' ); + return new WP_Error( 'wp-redis', __( 'WP Redis object-cache.php file is missing from the wp-content/ directory.', 'wp-redis' ) ); } if ( ! $wp_object_cache->is_redis_connected ) { + if ( ! isset( $wp_object_cache->missing_redis_message ) ) { + $wp_object_cache->missing_redis_message = __( 'A Redis service needs to be enabled before the WP Redis object cache will function properly.', 'wp-redis' ); + } + return new WP_Error( 'wp-redis', $wp_object_cache->missing_redis_message ); } From 4d1faee8192d7ae2f978e000a9efa72fbe7f240d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 14:46:04 -0600 Subject: [PATCH 12/17] Bump yoast/phpunit-polyfills from 1.0.4 to 1.0.5 (#394) Bumps [yoast/phpunit-polyfills](https://github.com/Yoast/PHPUnit-Polyfills) from 1.0.4 to 1.0.5. - [Release notes](https://github.com/Yoast/PHPUnit-Polyfills/releases) - [Changelog](https://github.com/Yoast/PHPUnit-Polyfills/blob/2.x/CHANGELOG.md) - [Commits](https://github.com/Yoast/PHPUnit-Polyfills/compare/1.0.4...1.0.5) --- updated-dependencies: - dependency-name: yoast/phpunit-polyfills dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 72 +++++++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/composer.lock b/composer.lock index a8a2446..bd947c3 100644 --- a/composer.lock +++ b/composer.lock @@ -972,16 +972,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": { @@ -1019,7 +1019,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": [ { @@ -1027,20 +1027,20 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "nikic/php-parser", - "version": "v4.15.3", + "version": "v4.15.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", "shasum": "" }, "require": { @@ -1081,9 +1081,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" }, - "time": "2023-01-16T22:05:37+00:00" + "time": "2023-03-05T19:49:14+00:00" }, { "name": "pantheon-systems/pantheon-wordpress-upstream-tests", @@ -1436,16 +1436,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.25", + "version": "9.2.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954" + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/0e2b40518197a8c0d4b08bc34dfff1c99c508954", - "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", "shasum": "" }, "require": { @@ -1467,8 +1467,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": { @@ -1501,7 +1501,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.25" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" }, "funding": [ { @@ -1509,7 +1509,7 @@ "type": "github" } ], - "time": "2023-02-25T05:32:00+00:00" + "time": "2023-03-06T12:58:08+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1754,16 +1754,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.4", + "version": "9.6.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d" + "reference": "b65d59a059d3004a040c16a82e07bbdf6cfdd115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9125ee085b6d95e78277dc07aa1f46f9e0607b8d", - "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b65d59a059d3004a040c16a82e07bbdf6cfdd115", + "reference": "b65d59a059d3004a040c16a82e07bbdf6cfdd115", "shasum": "" }, "require": { @@ -1796,8 +1796,8 @@ "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" @@ -1836,7 +1836,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.4" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.6" }, "funding": [ { @@ -1852,7 +1853,7 @@ "type": "tidelift" } ], - "time": "2023-02-27T13:06:37+00:00" + "time": "2023-03-27T11:43:46+00:00" }, { "name": "psr/container", @@ -5094,16 +5095,16 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "1.0.4", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "3c621ff5429d2b1ff96dc5808ad6cde99d31ea4c" + "reference": "3b59adeef77fb1c03ff5381dbb9d68b0aaff3171" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/3c621ff5429d2b1ff96dc5808ad6cde99d31ea4c", - "reference": "3c621ff5429d2b1ff96dc5808ad6cde99d31ea4c", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/3b59adeef77fb1c03ff5381dbb9d68b0aaff3171", + "reference": "3b59adeef77fb1c03ff5381dbb9d68b0aaff3171", "shasum": "" }, "require": { @@ -5111,13 +5112,12 @@ "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "require-dev": { - "yoast/yoastcs": "^2.2.1" + "yoast/yoastcs": "^2.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev", - "dev-develop": "1.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { @@ -5151,7 +5151,7 @@ "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2022-11-16T09:07:52+00:00" + "time": "2023-03-30T23:39:05+00:00" } ], "aliases": [ From b388bb8b33c49f7a081e6b66b4ad751ef0ee4e9d Mon Sep 17 00:00:00 2001 From: Chris Reynolds Date: Wed, 5 Apr 2023 14:57:19 -0600 Subject: [PATCH 13/17] version bump --- README.md | 430 +++++++++++++++++++++++++-------------------------- readme.txt | 4 +- wp-redis.php | 2 +- 3 files changed, 218 insertions(+), 218 deletions(-) diff --git a/README.md b/README.md index 2058a62..08ad1a1 100644 --- a/README.md +++ b/README.md @@ -1,215 +1,215 @@ -# WP Redis # -[![Actively Maintained](https://img.shields.io/badge/Pantheon-Actively_Maintained-yellow?logo=pantheon&color=FFDC28)](https://pantheon.io/docs/oss-support-levels#actively-maintained) - -**Contributors:** [getpantheon](https://profiles.wordpress.org/getpantheon), [danielbachhuber](https://profiles.wordpress.org/danielbachhuber), [mboynes](https://profiles.wordpress.org/mboynes), [Outlandish Josh](https://profiles.wordpress.org/Outlandish Josh) -**Tags:** cache, plugin, redis -**Requires at least:** 3.0.1 -**Tested up to:** 6.1.1 -**Stable tag:** 1.3.2 -**License:** GPLv2 or later -**License URI:** http://www.gnu.org/licenses/gpl-2.0.html - -Back your WP Object Cache with Redis, a high-performance in-memory storage backend. - -## Description ## - -[![Travis CI](https://travis-ci.org/pantheon-systems/wp-redis.svg?branch=master)](https://travis-ci.org/pantheon-systems/wp-redis) [![CircleCI](https://circleci.com/gh/pantheon-systems/wp-redis/tree/master.svg?style=svg)](https://circleci.com/gh/pantheon-systems/wp-redis/tree/master) - -For sites concerned with high traffic, speed for logged-in users, or dynamic pageloads, a high-speed and persistent object cache is a must. You also need something that can scale across multiple instances of your application, so using local file caches or APC are out. - -Redis is a great answer, and one we bundle on the Pantheon platform. This is our plugin for integrating with the cache, but you can use it on any self-hosted WordPress site if you have Redis. Install from [WordPress.org](https://wordpress.org/plugins/wp-redis/) or [Github](https://github.com/pantheon-systems/wp-redis). - -It's important to note that a persistent object cache isn't a panacea - a page load with 2,000 Redis calls can be 2 full seconds of object cache transactions. Make sure you use the object cache wisely: keep to a sensible number of keys, don't store a huge amount of data on each key, and avoid stampeding frontend writes and deletes. - -Go forth and make awesome! And, once you've built something great, [send us feature requests (or bug reports)](https://github.com/pantheon-systems/wp-redis/issues). Take a look at the wiki for [useful code snippets and other tips](https://github.com/pantheon-systems/wp-redis/wiki). - -## Installation ## - -This assumes you have a PHP environment with the [required PhpRedis extension](https://github.com/phpredis/phpredis) and a working Redis server (e.g. Pantheon). WP Redis also works with Predis via [humanmade/wp-redis-predis-client](https://github.com/humanmade/wp-redis-predis-client). - -1. Install `object-cache.php` to `wp-content/object-cache.php` with a symlink or by copying the file. -2. If you're not running on Pantheon, edit wp-config.php to add your cache credentials, e.g.: - - $redis_server = array( - 'host' => '127.0.0.1', - 'port' => 6379, - 'auth' => '12345', - 'database' => 0, // Optionally use a specific numeric Redis database. Default is 0. - ); - -3. If your Redis server is listening through a sockt file instead, set its path on `host` parameter and change the port to `null`: - - $redis_server = array( - 'host' => '/path/of/redis/socket-file.sock', - 'port' => null, - 'auth' => '12345', - 'database' => 0, // Optionally use a specific numeric Redis database. Default is 0. - ); - -4. Engage thrusters: you are now backing WP's Object Cache with Redis. -5. (Optional) To use the `wp redis` WP-CLI commands, activate the WP Redis plugin. No activation is necessary if you're solely using the object cache drop-in. -6. (Optional) To use the same Redis server with multiple, discreet WordPress installs, you can use the `WP_CACHE_KEY_SALT` constant to define a unique salt for each install. -7. (Optional) To use true cache groups, with the ability to delete all keys for a given group, register groups with `wp_cache_add_redis_hash_groups()`, or define the `WP_REDIS_USE_CACHE_GROUPS` constant to `true` to enable with all groups. However, when enabled, the expiration value is not respected because expiration on group keys isn't a feature [supported by Redis](https://github.com/redis/redis/issues/6620). -8. (Optional) On an existing site previously using WordPress' transient cache, use WP-CLI to delete all (`%_transient_%`) transients from the options table: `wp transient delete-all`. WP Redis assumes responsibility for the transient cache. -9. (Optional) To use [Relay](https://relaycache.com) instead of PhpRedis as the client define the `WP_REDIS_USE_RELAY` constant to `true`. For support requests, please use [Relay's GitHub discussions](https://github.com/cachewerk/relay/discussions). - -## WP-CLI Commands ## - -This plugin implements a variety of [WP-CLI](https://wp-cli.org) commands. All commands are grouped into the `wp redis` namespace. - - $ wp help redis - - NAME - - wp redis - - SYNOPSIS - - wp redis - - SUBCOMMANDS - - cli Launch redis-cli using Redis configuration for WordPress - debug Debug object cache hit / miss ratio for any page URL. - enable Enable WP Redis by creating the symlink for object-cache.php - info Provide details on the Redis connection. - -Use `wp help redis ` to learn more about each command. - -## Contributing ## - -See [CONTRIBUTING.md](https://github.com/pantheon-systems/wp-redis/blob/master/CONTRIBUTING.md) for information on contributing. - -## Frequently Asked Questions ## - -### Why would I want to use this plugin? ### - -If you are concerned with the speed of your site, backing it with a high-performance, persistent object cache can have a huge impact. It takes load off your database, and is faster for loading all the data objects WordPress needs to run. - -### How does this work with other caching plugins? ### - -This plugin is for the internal application object cache. It doesn't have anything to do with page caches. On Pantheon you do not need additional page caching, but if you are self-hosted you can use your favorite page cache plugins in conjunction with WP Redis. - -### How do I disable the persistent object cache for a bad actor? ### - -A page load with 2,000 Redis calls can be 2 full seonds of object cache transactions. If a plugin you're using is erroneously creating a huge number of cache keys, you might be able to mitigate the problem by disabling cache persistency for the plugin's group: - - wp_cache_add_non_persistent_groups( array( 'bad-actor' ) ); - -This declaration means use of `wp_cache_set( 'foo', 'bar', 'bad-actor' );` and `wp_cache_get( 'foo', 'bad-actor' );` will not use Redis, and instead fall back to WordPress' default runtime object cache. - -### Why does the object cache sometimes get out of sync with the database? ### - -There's a known issue with WordPress `alloptions` cache design. Specifically, a race condition between two requests can cause the object cache to have stale values. If you think you might be impacted by this, [review this GitHub issue](https://github.com/pantheon-systems/wp-redis/issues/221) for links to more context, including a workaround. - -## Changelog ## - -### 1.3.2 (December 5, 2022) ### -* Fix broken `wp_cache_supports` function [[#382](https://github.com/pantheon-systems/wp-redis/pull/382)]. - -### 1.3.1 (December 2, 2022) ### -* Declare `wp_cache_supports` function and support features. [[#378](https://github.com/pantheon-systems/wp-redis/pull/378)] -* Make dependabot target `develop` branch for PRs. [[#376](https://github.com/pantheon-systems/wp-redis/pull/376)] - -Declare `wp_cache_supports` function and support features. [[#378](https://github.com/pantheon-systems/wp-redis/pull/378)] - -### 1.3.0 (November 29, 2022) ### -* Added CONTRIBUTING.MD and GitHub action to automate deployments to wp.org. [[#368](https://github.com/pantheon-systems/wp-redis/pull/368)] - -### 1.2.0 (February 17, 2022) ### -* Adds support for Relay via `WP_REDIS_USE_RELAY` constant [[#344](https://github.com/pantheon-systems/wp-redis/pull/344)]. - -### 1.1.4 (October 21, 2021) ### -* Fixes some faulty logic in `WP_REDIS_IGNORE_GLOBAL_GROUPS` check [[#333](https://github.com/pantheon-systems/wp-redis/pull/333)]. - -### 1.1.3 (October 21, 2021) ### -* Supports a `WP_REDIS_IGNORE_GLOBAL_GROUPS` constant to prevent groups from being added to global caching group [[#331](https://github.com/pantheon-systems/wp-redis/pull/331)]. - -### 1.1.2 (March 24, 2021) ### -* Applies logic used elsewhere to fall back to `$_SERVER` in `wp_redis_get_info()` [[#316](https://github.com/pantheon-systems/wp-redis/pull/316)]. - -### 1.1.1 (August 17, 2020) ### -* Returns cache data in correct order when using `wp_cache_get_multiple()` and internal cache is already primed [[#292](https://github.com/pantheon-systems/wp-redis/pull/292)]. - -### 1.1.0 (July 13, 2020) ### -* Implements `wp_cache_get_multiple()` for WordPress 5.5 [[#287](https://github.com/pantheon-systems/wp-redis/pull/287)]. -* Bails early when connecting to Redis throws an Exception to avoid fatal error [[285](https://github.com/pantheon-systems/wp-redis/pull/285)]. - -### 1.0.1 (April 14, 2020) ### -* Adds support for specifying Redis database number from environment/server variables [[#273](https://github.com/pantheon-systems/wp-redis/pull/273)]. - -### 1.0.0 (March 2, 2020) ### -* Plugin is stable. - -### 0.8.3 (February 24, 2020) ### -* Fixes `wp redis cli` by using `proc_open()` directly, instead of `WP_CLI::launch()` [[#268](https://github.com/pantheon-systems/wp-redis/pull/268)]. - -### 0.8.2 (January 15, 2020) ### -* Catches exceptions when trying to connect to Redis [[#265](https://github.com/pantheon-systems/wp-redis/pull/265)]. - -### 0.8.1 (January 10, 2020) ### -* Adds `WP_REDIS_DEFAULT_EXPIRE_SECONDS` constant to set default cache expire value [[#264](https://github.com/pantheon-systems/wp-redis/pull/264)]. - -### 0.8.0 (January 6, 2020) ### -* Uses `flushdb` instead of `flushAll` to avoid flushing the entire Redis instance [[#259](https://github.com/pantheon-systems/wp-redis/pull/259)]. - -### 0.7.1 (December 14, 2018) ### -* Better support in `wp_cache_init()` for drop-ins like LudicrousDB [[#231](https://github.com/pantheon-systems/wp-redis/pull/231)]. -* Cleans up PHPCS issues. - -### 0.7.0 (August 22, 2017) ### -* Adds filterable connection methods to permit use of Predis. See [humanmade/wp-redis-predis-client](https://github.com/humanmade/wp-redis-predis-client) for more details. - -### 0.6.2 (June 5, 2017) ### -* Bug fix: Preserves null values in internal cache. -* Bug fix: Converts numeric values to their true type when getting. - -### 0.6.1 (February 23, 2017) ### -* Bug fix: correctly passes an empty password to `redis-cli`. -* Variety of improvements to the test suite. - -### 0.6.0 (September 21, 2016) ### -* Introduces three new WP-CLI commands: `wp redis debug` to display cache hit/miss ratio for any URL; `wp redis info` to display high-level Redis statistics; `wp redis enable` to create the `object-cache.php` symlink. -* Permits a Redis database to be defined with `$redis_server['database']`. -* Introduces `wp_cache_add_redis_hash_groups()`, which permits registering specific groups to use Redis hashes, and is more precise than our existing `WP_REDIS_USE_CACHE_GROUPS` constant. - -### 0.5.0 (April 27, 2016) ### - -* Performance boost! Removes redundant `exists` call from `wp_cache_get()`, which easily halves the number of Redis calls. -* Uses `add_action()` and `$wpdb` in a safer manner for compatibility with Batcache, which loads the object cache before aforementioned APIs are available. -* For debugging purposes, tracks number of calls to Redis, and includes breakdown of call types. -* Adds a slew of more explicit test coverage against existing features. -* For consistency with the actual Redis call, calls `del` instead of `delete`. -* Bug fix: If a group isn't persistent, don't ever make an `exists` call against Redis. - -### 0.4.0 (March 23, 2016) ### - -* Introduces `wp redis-cli`, a WP-CLI command to launch redis-cli with WordPress' Redis credentials. -* Bug fix: Ensures fail back mechanism works as expected on multisite, by writing to sitemeta table instead of the active site's options table. -* Bug fix: Uses 'default' as the default cache group, mirroring WordPress core, such that `$wp_object_cache->add( 'foo', 'bar' )` === `wp_cache_add( 'foo', 'bar' )`. - -### 0.3.0 (February 11, 2016) ### - -* Introduces opt-in support for Redis cache groups. Enable with `define( 'WP_REDIS_USE_CACHE_GROUPS', true );`. When enabled, WP Redis persists cache groups in a structured manner, instead of hashing the cache key and group together. -* Uses PHP_CodeSniffer and [WordPress Coding Standards sniffs](https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards) to ensure WP Redis adheres to WordPress coding standards. -* Bug fix: Permits use of a Unix socket in `$redis_server['host']` by ensuring the supplied `$port` is null. - -### 0.2.2 (November 24, 2015) ### - -* Bug fix: use `INSERT IGNORE INTO` instead of `INSERT INTO` to prevent SQL errors when two concurrent processes attempt to write failback flag at the same time. -* Bug fix: use `E_USER_WARNING` with `trigger_error()`. -* Bug fix: catch Exceptions thrown during authentication to permit failing back to internal object cache. - -### 0.2.1 (November 17, 2015) ### - -* Bug fix: prevent SQL error when `$wpdb->options` isn't yet initialized on multisite. - -### 0.2.0 (November 17, 2015) ### - -* Gracefully fails back to the WordPress object cache when Redis is unavailable or intermittent. Previously, WP Redis would hard fatal. -* Triggers a PHP error if Redis goes away mid-request, for you to monitor in your logs. Attempts one reconnect based on specific error messages. -* Forces a flushAll on Redis when Redis comes back after failing. This behavior can be disabled with the `WP_REDIS_DISABLE_FAILBACK_FLUSH` constant. -* Show an admin notice when Redis is unavailable but is expected to be. - -### 0.1 ### -* Initial commit of working code for the benefit of all. +# WP Redis # +[![Actively Maintained](https://img.shields.io/badge/Pantheon-Actively_Maintained-yellow?logo=pantheon&color=FFDC28)](https://pantheon.io/docs/oss-support-levels#actively-maintained) + +**Contributors:** [getpantheon](https://profiles.wordpress.org/getpantheon), [danielbachhuber](https://profiles.wordpress.org/danielbachhuber), [mboynes](https://profiles.wordpress.org/mboynes), [Outlandish Josh](https://profiles.wordpress.org/Outlandish Josh) +**Tags:** cache, plugin, redis +**Requires at least:** 3.0.1 +**Tested up to:** 6.2 +**Stable tag:** 1.3.5 +**License:** GPLv2 or later +**License URI:** http://www.gnu.org/licenses/gpl-2.0.html + +Back your WP Object Cache with Redis, a high-performance in-memory storage backend. + +## Description ## + +[![Travis CI](https://travis-ci.org/pantheon-systems/wp-redis.svg?branch=master)](https://travis-ci.org/pantheon-systems/wp-redis) [![CircleCI](https://circleci.com/gh/pantheon-systems/wp-redis/tree/master.svg?style=svg)](https://circleci.com/gh/pantheon-systems/wp-redis/tree/master) + +For sites concerned with high traffic, speed for logged-in users, or dynamic pageloads, a high-speed and persistent object cache is a must. You also need something that can scale across multiple instances of your application, so using local file caches or APC are out. + +Redis is a great answer, and one we bundle on the Pantheon platform. This is our plugin for integrating with the cache, but you can use it on any self-hosted WordPress site if you have Redis. Install from [WordPress.org](https://wordpress.org/plugins/wp-redis/) or [Github](https://github.com/pantheon-systems/wp-redis). + +It's important to note that a persistent object cache isn't a panacea - a page load with 2,000 Redis calls can be 2 full seconds of object cache transactions. Make sure you use the object cache wisely: keep to a sensible number of keys, don't store a huge amount of data on each key, and avoid stampeding frontend writes and deletes. + +Go forth and make awesome! And, once you've built something great, [send us feature requests (or bug reports)](https://github.com/pantheon-systems/wp-redis/issues). Take a look at the wiki for [useful code snippets and other tips](https://github.com/pantheon-systems/wp-redis/wiki). + +## Installation ## + +This assumes you have a PHP environment with the [required PhpRedis extension](https://github.com/phpredis/phpredis) and a working Redis server (e.g. Pantheon). WP Redis also works with Predis via [humanmade/wp-redis-predis-client](https://github.com/humanmade/wp-redis-predis-client). + +1. Install `object-cache.php` to `wp-content/object-cache.php` with a symlink or by copying the file. +2. If you're not running on Pantheon, edit wp-config.php to add your cache credentials, e.g.: + + $redis_server = array( + 'host' => '127.0.0.1', + 'port' => 6379, + 'auth' => '12345', + 'database' => 0, // Optionally use a specific numeric Redis database. Default is 0. + ); + +3. If your Redis server is listening through a sockt file instead, set its path on `host` parameter and change the port to `null`: + + $redis_server = array( + 'host' => '/path/of/redis/socket-file.sock', + 'port' => null, + 'auth' => '12345', + 'database' => 0, // Optionally use a specific numeric Redis database. Default is 0. + ); + +4. Engage thrusters: you are now backing WP's Object Cache with Redis. +5. (Optional) To use the `wp redis` WP-CLI commands, activate the WP Redis plugin. No activation is necessary if you're solely using the object cache drop-in. +6. (Optional) To use the same Redis server with multiple, discreet WordPress installs, you can use the `WP_CACHE_KEY_SALT` constant to define a unique salt for each install. +7. (Optional) To use true cache groups, with the ability to delete all keys for a given group, register groups with `wp_cache_add_redis_hash_groups()`, or define the `WP_REDIS_USE_CACHE_GROUPS` constant to `true` to enable with all groups. However, when enabled, the expiration value is not respected because expiration on group keys isn't a feature [supported by Redis](https://github.com/redis/redis/issues/6620). +8. (Optional) On an existing site previously using WordPress' transient cache, use WP-CLI to delete all (`%_transient_%`) transients from the options table: `wp transient delete-all`. WP Redis assumes responsibility for the transient cache. +9. (Optional) To use [Relay](https://relaycache.com) instead of PhpRedis as the client define the `WP_REDIS_USE_RELAY` constant to `true`. For support requests, please use [Relay's GitHub discussions](https://github.com/cachewerk/relay/discussions). + +## WP-CLI Commands ## + +This plugin implements a variety of [WP-CLI](https://wp-cli.org) commands. All commands are grouped into the `wp redis` namespace. + + $ wp help redis + + NAME + + wp redis + + SYNOPSIS + + wp redis + + SUBCOMMANDS + + cli Launch redis-cli using Redis configuration for WordPress + debug Debug object cache hit / miss ratio for any page URL. + enable Enable WP Redis by creating the symlink for object-cache.php + info Provide details on the Redis connection. + +Use `wp help redis ` to learn more about each command. + +## Contributing ## + +See [CONTRIBUTING.md](https://github.com/pantheon-systems/wp-redis/blob/master/CONTRIBUTING.md) for information on contributing. + +## Frequently Asked Questions ## + +### Why would I want to use this plugin? ### + +If you are concerned with the speed of your site, backing it with a high-performance, persistent object cache can have a huge impact. It takes load off your database, and is faster for loading all the data objects WordPress needs to run. + +### How does this work with other caching plugins? ### + +This plugin is for the internal application object cache. It doesn't have anything to do with page caches. On Pantheon you do not need additional page caching, but if you are self-hosted you can use your favorite page cache plugins in conjunction with WP Redis. + +### How do I disable the persistent object cache for a bad actor? ### + +A page load with 2,000 Redis calls can be 2 full seonds of object cache transactions. If a plugin you're using is erroneously creating a huge number of cache keys, you might be able to mitigate the problem by disabling cache persistency for the plugin's group: + + wp_cache_add_non_persistent_groups( array( 'bad-actor' ) ); + +This declaration means use of `wp_cache_set( 'foo', 'bar', 'bad-actor' );` and `wp_cache_get( 'foo', 'bad-actor' );` will not use Redis, and instead fall back to WordPress' default runtime object cache. + +### Why does the object cache sometimes get out of sync with the database? ### + +There's a known issue with WordPress `alloptions` cache design. Specifically, a race condition between two requests can cause the object cache to have stale values. If you think you might be impacted by this, [review this GitHub issue](https://github.com/pantheon-systems/wp-redis/issues/221) for links to more context, including a workaround. + +## Changelog ## + +### 1.3.2 (December 5, 2022) ### +* Fix broken `wp_cache_supports` function [[#382](https://github.com/pantheon-systems/wp-redis/pull/382)]. + +### 1.3.1 (December 2, 2022) ### +* Declare `wp_cache_supports` function and support features. [[#378](https://github.com/pantheon-systems/wp-redis/pull/378)] +* Make dependabot target `develop` branch for PRs. [[#376](https://github.com/pantheon-systems/wp-redis/pull/376)] + +Declare `wp_cache_supports` function and support features. [[#378](https://github.com/pantheon-systems/wp-redis/pull/378)] + +### 1.3.0 (November 29, 2022) ### +* Added CONTRIBUTING.MD and GitHub action to automate deployments to wp.org. [[#368](https://github.com/pantheon-systems/wp-redis/pull/368)] + +### 1.2.0 (February 17, 2022) ### +* Adds support for Relay via `WP_REDIS_USE_RELAY` constant [[#344](https://github.com/pantheon-systems/wp-redis/pull/344)]. + +### 1.1.4 (October 21, 2021) ### +* Fixes some faulty logic in `WP_REDIS_IGNORE_GLOBAL_GROUPS` check [[#333](https://github.com/pantheon-systems/wp-redis/pull/333)]. + +### 1.1.3 (October 21, 2021) ### +* Supports a `WP_REDIS_IGNORE_GLOBAL_GROUPS` constant to prevent groups from being added to global caching group [[#331](https://github.com/pantheon-systems/wp-redis/pull/331)]. + +### 1.1.2 (March 24, 2021) ### +* Applies logic used elsewhere to fall back to `$_SERVER` in `wp_redis_get_info()` [[#316](https://github.com/pantheon-systems/wp-redis/pull/316)]. + +### 1.1.1 (August 17, 2020) ### +* Returns cache data in correct order when using `wp_cache_get_multiple()` and internal cache is already primed [[#292](https://github.com/pantheon-systems/wp-redis/pull/292)]. + +### 1.1.0 (July 13, 2020) ### +* Implements `wp_cache_get_multiple()` for WordPress 5.5 [[#287](https://github.com/pantheon-systems/wp-redis/pull/287)]. +* Bails early when connecting to Redis throws an Exception to avoid fatal error [[285](https://github.com/pantheon-systems/wp-redis/pull/285)]. + +### 1.0.1 (April 14, 2020) ### +* Adds support for specifying Redis database number from environment/server variables [[#273](https://github.com/pantheon-systems/wp-redis/pull/273)]. + +### 1.0.0 (March 2, 2020) ### +* Plugin is stable. + +### 0.8.3 (February 24, 2020) ### +* Fixes `wp redis cli` by using `proc_open()` directly, instead of `WP_CLI::launch()` [[#268](https://github.com/pantheon-systems/wp-redis/pull/268)]. + +### 0.8.2 (January 15, 2020) ### +* Catches exceptions when trying to connect to Redis [[#265](https://github.com/pantheon-systems/wp-redis/pull/265)]. + +### 0.8.1 (January 10, 2020) ### +* Adds `WP_REDIS_DEFAULT_EXPIRE_SECONDS` constant to set default cache expire value [[#264](https://github.com/pantheon-systems/wp-redis/pull/264)]. + +### 0.8.0 (January 6, 2020) ### +* Uses `flushdb` instead of `flushAll` to avoid flushing the entire Redis instance [[#259](https://github.com/pantheon-systems/wp-redis/pull/259)]. + +### 0.7.1 (December 14, 2018) ### +* Better support in `wp_cache_init()` for drop-ins like LudicrousDB [[#231](https://github.com/pantheon-systems/wp-redis/pull/231)]. +* Cleans up PHPCS issues. + +### 0.7.0 (August 22, 2017) ### +* Adds filterable connection methods to permit use of Predis. See [humanmade/wp-redis-predis-client](https://github.com/humanmade/wp-redis-predis-client) for more details. + +### 0.6.2 (June 5, 2017) ### +* Bug fix: Preserves null values in internal cache. +* Bug fix: Converts numeric values to their true type when getting. + +### 0.6.1 (February 23, 2017) ### +* Bug fix: correctly passes an empty password to `redis-cli`. +* Variety of improvements to the test suite. + +### 0.6.0 (September 21, 2016) ### +* Introduces three new WP-CLI commands: `wp redis debug` to display cache hit/miss ratio for any URL; `wp redis info` to display high-level Redis statistics; `wp redis enable` to create the `object-cache.php` symlink. +* Permits a Redis database to be defined with `$redis_server['database']`. +* Introduces `wp_cache_add_redis_hash_groups()`, which permits registering specific groups to use Redis hashes, and is more precise than our existing `WP_REDIS_USE_CACHE_GROUPS` constant. + +### 0.5.0 (April 27, 2016) ### + +* Performance boost! Removes redundant `exists` call from `wp_cache_get()`, which easily halves the number of Redis calls. +* Uses `add_action()` and `$wpdb` in a safer manner for compatibility with Batcache, which loads the object cache before aforementioned APIs are available. +* For debugging purposes, tracks number of calls to Redis, and includes breakdown of call types. +* Adds a slew of more explicit test coverage against existing features. +* For consistency with the actual Redis call, calls `del` instead of `delete`. +* Bug fix: If a group isn't persistent, don't ever make an `exists` call against Redis. + +### 0.4.0 (March 23, 2016) ### + +* Introduces `wp redis-cli`, a WP-CLI command to launch redis-cli with WordPress' Redis credentials. +* Bug fix: Ensures fail back mechanism works as expected on multisite, by writing to sitemeta table instead of the active site's options table. +* Bug fix: Uses 'default' as the default cache group, mirroring WordPress core, such that `$wp_object_cache->add( 'foo', 'bar' )` === `wp_cache_add( 'foo', 'bar' )`. + +### 0.3.0 (February 11, 2016) ### + +* Introduces opt-in support for Redis cache groups. Enable with `define( 'WP_REDIS_USE_CACHE_GROUPS', true );`. When enabled, WP Redis persists cache groups in a structured manner, instead of hashing the cache key and group together. +* Uses PHP_CodeSniffer and [WordPress Coding Standards sniffs](https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards) to ensure WP Redis adheres to WordPress coding standards. +* Bug fix: Permits use of a Unix socket in `$redis_server['host']` by ensuring the supplied `$port` is null. + +### 0.2.2 (November 24, 2015) ### + +* Bug fix: use `INSERT IGNORE INTO` instead of `INSERT INTO` to prevent SQL errors when two concurrent processes attempt to write failback flag at the same time. +* Bug fix: use `E_USER_WARNING` with `trigger_error()`. +* Bug fix: catch Exceptions thrown during authentication to permit failing back to internal object cache. + +### 0.2.1 (November 17, 2015) ### + +* Bug fix: prevent SQL error when `$wpdb->options` isn't yet initialized on multisite. + +### 0.2.0 (November 17, 2015) ### + +* Gracefully fails back to the WordPress object cache when Redis is unavailable or intermittent. Previously, WP Redis would hard fatal. +* Triggers a PHP error if Redis goes away mid-request, for you to monitor in your logs. Attempts one reconnect based on specific error messages. +* Forces a flushAll on Redis when Redis comes back after failing. This behavior can be disabled with the `WP_REDIS_DISABLE_FAILBACK_FLUSH` constant. +* Show an admin notice when Redis is unavailable but is expected to be. + +### 0.1 ### +* Initial commit of working code for the benefit of all. diff --git a/readme.txt b/readme.txt index 0a92851..e61f85c 100644 --- a/readme.txt +++ b/readme.txt @@ -2,8 +2,8 @@ Contributors: getpantheon, danielbachhuber, mboynes, Outlandish Josh Tags: cache, plugin, redis Requires at least: 3.0.1 -Tested up to: 6.1.1 -Stable tag: 1.3.2 +Tested up to: 6.2 +Stable tag: 1.3.5 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html diff --git a/wp-redis.php b/wp-redis.php index 0df1dca..b5d0252 100644 --- a/wp-redis.php +++ b/wp-redis.php @@ -3,7 +3,7 @@ * Plugin Name: WP Redis * Plugin URI: http://github.com/pantheon-systems/wp-redis/ * Description: WordPress Object Cache using Redis. Requires the PhpRedis extension (https://github.com/phpredis/phpredis). - * Version: 1.3.2 + * Version: 1.3.5 * Author: Pantheon, Josh Koenig, Matthew Boynes, Daniel Bachhuber, Alley Interactive * Author URI: https://pantheon.io/ */ From aafddba55c4ad705e3ba1211cc4831bee2640095 Mon Sep 17 00:00:00 2001 From: Chris Reynolds Date: Wed, 5 Apr 2023 15:00:38 -0600 Subject: [PATCH 14/17] update changelogs --- README.md | 12 ++++++++++++ readme.txt | 13 +++++++++++++ 2 files changed, 25 insertions(+) diff --git a/README.md b/README.md index 08ad1a1..227d12f 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,18 @@ This declaration means use of `wp_cache_set( 'foo', 'bar', 'bad-actor' );` and ` There's a known issue with WordPress `alloptions` cache design. Specifically, a race condition between two requests can cause the object cache to have stale values. If you think you might be impacted by this, [review this GitHub issue](https://github.com/pantheon-systems/wp-redis/issues/221) for links to more context, including a workaround. ## Changelog ## +### 1.3.5 (April 5, 2023) ### +* Bump tested up to version to 6.2 +* Update Composer dependencies [[#394](https://github.com/pantheon-systems/wp-redis/pull/394)] + +### 1.3.4 (March 7, 2023) ### +* Set `missing_redis_message` if Redis service is not connected [[#391](https://github.com/pantheon-systems/wp-redis/pull/391)] + + +### 1.3.3 (February 28, 2023) ### +* Add PHP 8.2 support [[#388](https://github.com/pantheon-systems/wp-redis/pull/388)] +* Remove Grunt, add valid license to Composer file [[#387](https://github.com/pantheon-systems/wp-redis/pull/387)] +* Update Composer dependencies [[#384](https://github.com/pantheon-systems/wp-redis/pull/384)] [[#385](https://github.com/pantheon-systems/wp-redis/pull/385)] ### 1.3.2 (December 5, 2022) ### * Fix broken `wp_cache_supports` function [[#382](https://github.com/pantheon-systems/wp-redis/pull/382)]. diff --git a/readme.txt b/readme.txt index e61f85c..bc28458 100644 --- a/readme.txt +++ b/readme.txt @@ -102,6 +102,19 @@ There's a known issue with WordPress `alloptions` cache design. Specifically, a == Changelog == += 1.3.5 (April 5, 2023) = +* Bump tested up to version to 6.2 +* Update Composer dependencies [[#394](https://github.com/pantheon-systems/wp-redis/pull/394)] + += 1.3.4 (March 7, 2023) = +* Set `missing_redis_message` if Redis service is not connected [[#391](https://github.com/pantheon-systems/wp-redis/pull/391)] + + += 1.3.3 (February 28, 2023) = +* Add PHP 8.2 support [[#388](https://github.com/pantheon-systems/wp-redis/pull/388)] +* Remove Grunt, add valid license to Composer file [[#387](https://github.com/pantheon-systems/wp-redis/pull/387)] +* Update Composer dependencies [[#384](https://github.com/pantheon-systems/wp-redis/pull/384)] [[#385](https://github.com/pantheon-systems/wp-redis/pull/385)] + = 1.3.2 (December 5, 2022) = * Fix broken `wp_cache_supports` function [[#382](https://github.com/pantheon-systems/wp-redis/pull/382)]. From 080106367d4fd207159bb709e73f67bc5050c8b3 Mon Sep 17 00:00:00 2001 From: Chris Reynolds Date: Wed, 5 Apr 2023 15:04:02 -0600 Subject: [PATCH 15/17] add chris and john to contributors --- README.md | 2 +- readme.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 227d12f..9fdd844 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # WP Redis # [![Actively Maintained](https://img.shields.io/badge/Pantheon-Actively_Maintained-yellow?logo=pantheon&color=FFDC28)](https://pantheon.io/docs/oss-support-levels#actively-maintained) -**Contributors:** [getpantheon](https://profiles.wordpress.org/getpantheon), [danielbachhuber](https://profiles.wordpress.org/danielbachhuber), [mboynes](https://profiles.wordpress.org/mboynes), [Outlandish Josh](https://profiles.wordpress.org/Outlandish Josh) +**Contributors:** [getpantheon](https://profiles.wordpress.org/getpantheon), [danielbachhuber](https://profiles.wordpress.org/danielbachhuber), [mboynes](https://profiles.wordpress.org/mboynes), [Outlandish Josh](https://profiles.wordpress.org/outlandish-josh) [jspellman](https://profiles.wordpress.org/jspellman/) [jazzs3quence](https://profiles.wordpress.org/jazzs3quence/) **Tags:** cache, plugin, redis **Requires at least:** 3.0.1 **Tested up to:** 6.2 diff --git a/readme.txt b/readme.txt index bc28458..b993b35 100644 --- a/readme.txt +++ b/readme.txt @@ -1,5 +1,5 @@ === WP Redis === -Contributors: getpantheon, danielbachhuber, mboynes, Outlandish Josh +Contributors: getpantheon, danielbachhuber, mboynes, Outlandish Josh, jspellman, jazzs3quence Tags: cache, plugin, redis Requires at least: 3.0.1 Tested up to: 6.2 From 4b608deab547725d1391b57d97adbfa6e8ad8c17 Mon Sep 17 00:00:00 2001 From: Chris Reynolds Date: Thu, 6 Apr 2023 11:09:39 -0600 Subject: [PATCH 16/17] Add cms-platform to CODEOWNERS file (#396) --- CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index c6d16d4..6ed271b 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1 +1 @@ -* @pantheon-systems/cms-ecosystem +* @pantheon-systems/cms-platform @pantheon-systems/cms-ecosystem From fd5f4154b4263d0328300af49d7dddb48b4a5c6f Mon Sep 17 00:00:00 2001 From: Chris Reynolds Date: Thu, 6 Apr 2023 15:51:24 -0600 Subject: [PATCH 17/17] update date --- README.md | 2 +- readme.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9fdd844..4de93e0 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ This declaration means use of `wp_cache_set( 'foo', 'bar', 'bad-actor' );` and ` There's a known issue with WordPress `alloptions` cache design. Specifically, a race condition between two requests can cause the object cache to have stale values. If you think you might be impacted by this, [review this GitHub issue](https://github.com/pantheon-systems/wp-redis/issues/221) for links to more context, including a workaround. ## Changelog ## -### 1.3.5 (April 5, 2023) ### +### 1.3.5 (April 6, 2023) ### * Bump tested up to version to 6.2 * Update Composer dependencies [[#394](https://github.com/pantheon-systems/wp-redis/pull/394)] diff --git a/readme.txt b/readme.txt index 0eeb5cc..8119e09 100644 --- a/readme.txt +++ b/readme.txt @@ -102,7 +102,7 @@ There's a known issue with WordPress `alloptions` cache design. Specifically, a == Changelog == -= 1.3.5 (April 5, 2023) = += 1.3.5 (April 6, 2023) = * Bump tested up to version to 6.2 * Update Composer dependencies [[#394](https://github.com/pantheon-systems/wp-redis/pull/394)]