diff --git a/app/composer.json b/app/composer.json
index 879b2b491..1726aa9c5 100644
--- a/app/composer.json
+++ b/app/composer.json
@@ -6,10 +6,10 @@
"license": "MIT",
"require": {
"php": ">=7.3",
- "cakephp/cakephp": "^4.3",
+ "cakephp/cakephp": "^4.4",
"cakephp/migrations": "^3.2",
"cakephp/plugin-installer": "^1.3",
- "components/jquery": "~3.6.0",
+ "components/jquery": "~3.7",
"doctrine/dbal": "^3.3",
"mobiledetect/mobiledetectlib": "^2.8",
"twbs/bootstrap": "^5.1"
@@ -76,6 +76,10 @@
},
"prefer-stable": true,
"config": {
- "sort-packages": true
+ "sort-packages": true,
+ "allow-plugins": {
+ "dealerdirect/phpcodesniffer-composer-installer": true,
+ "cakephp/plugin-installer": true
+ }
}
}
diff --git a/app/composer.lock b/app/composer.lock
index ec4b9163f..c9c36f6ad 100644
--- a/app/composer.lock
+++ b/app/composer.lock
@@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "d4260a1be97158a49b35b1d1eadc05a8",
+ "content-hash": "0d865a4843fd23d964c2c327103cde7a",
"packages": [
{
"name": "cakephp/cakephp",
- "version": "4.3.8",
+ "version": "4.4.17",
"source": {
"type": "git",
"url": "https://github.com/cakephp/cakephp.git",
- "reference": "34aae68e91e6834aa6711c3e435a3f220bf56c0b"
+ "reference": "9ff254d6d60720089dec1e10aa1907e24e39a98e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/cakephp/zipball/34aae68e91e6834aa6711c3e435a3f220bf56c0b",
- "reference": "34aae68e91e6834aa6711c3e435a3f220bf56c0b",
+ "url": "https://api.github.com/repos/cakephp/cakephp/zipball/9ff254d6d60720089dec1e10aa1907e24e39a98e",
+ "reference": "9ff254d6d60720089dec1e10aa1907e24e39a98e",
"shasum": ""
},
"require": {
@@ -27,9 +27,9 @@
"ext-json": "*",
"ext-mbstring": "*",
"laminas/laminas-diactoros": "^2.2.2",
- "laminas/laminas-httphandlerrunner": "^1.1",
+ "laminas/laminas-httphandlerrunner": "^1.1 || ^2.0",
"league/container": "^4.2.0",
- "php": ">=7.2.0",
+ "php": ">=7.4.0",
"psr/container": "^1.1 || ^2.0",
"psr/http-client": "^1.0",
"psr/http-server-handler": "^1.0",
@@ -37,6 +37,14 @@
"psr/log": "^1.0 || ^2.0",
"psr/simple-cache": "^1.0 || ^2.0"
},
+ "provide": {
+ "psr/container-implementation": "^1.0 || ^2.0",
+ "psr/http-client-implementation": "^1.0",
+ "psr/http-server-handler-implementation": "^1.0",
+ "psr/http-server-middleware-implementation": "^1.0",
+ "psr/log-implementation": "^1.0 || ^2.0",
+ "psr/simple-cache-implementation": "^1.0 || ^2.0"
+ },
"replace": {
"cakephp/cache": "self.version",
"cakephp/collection": "self.version",
@@ -63,7 +71,7 @@
"suggest": {
"ext-curl": "To enable more efficient network calls in Http\\Client.",
"ext-openssl": "To use Security::encrypt() or have secure CSRF token generation.",
- "lib-ICU": "The intl PHP library, to use Text::transliterate() or Text::slug()",
+ "lib-ICU": "To use locale-aware features in the I18n and Database packages",
"paragonie/csp-builder": "CSP builder, to use the CSP Middleware"
},
"type": "library",
@@ -108,20 +116,20 @@
"issues": "https://github.com/cakephp/cakephp/issues",
"source": "https://github.com/cakephp/cakephp"
},
- "time": "2022-04-23T01:23:23+00:00"
+ "time": "2023-08-20T02:36:22+00:00"
},
{
"name": "cakephp/chronos",
- "version": "2.3.0",
+ "version": "2.4.1",
"source": {
"type": "git",
"url": "https://github.com/cakephp/chronos.git",
- "reference": "3ecd6e7ae191c676570cd1bed51fd561de4606dd"
+ "reference": "dd583900b26971e84d56c482d6c5fc16961bd103"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/chronos/zipball/3ecd6e7ae191c676570cd1bed51fd561de4606dd",
- "reference": "3ecd6e7ae191c676570cd1bed51fd561de4606dd",
+ "url": "https://api.github.com/repos/cakephp/chronos/zipball/dd583900b26971e84d56c482d6c5fc16961bd103",
+ "reference": "dd583900b26971e84d56c482d6c5fc16961bd103",
"shasum": ""
},
"require": {
@@ -152,48 +160,47 @@
},
{
"name": "The CakePHP Team",
- "homepage": "http://cakephp.org"
+ "homepage": "https://cakephp.org"
}
],
"description": "A simple API extension for DateTime.",
- "homepage": "http://cakephp.org",
+ "homepage": "https://cakephp.org",
"keywords": [
"date",
"datetime",
"time"
],
"support": {
- "irc": "irc://irc.freenode.org/cakephp",
"issues": "https://github.com/cakephp/chronos/issues",
"source": "https://github.com/cakephp/chronos"
},
- "time": "2021-10-17T02:44:05+00:00"
+ "time": "2023-09-12T03:12:29+00:00"
},
{
"name": "cakephp/migrations",
- "version": "3.5.1",
+ "version": "3.9.0",
"source": {
"type": "git",
"url": "https://github.com/cakephp/migrations.git",
- "reference": "6b03a44bef94b99a24ab7d4c44cb292bb6f275c2"
+ "reference": "58446fdd096087ddf7752c0317731b8725d1dc28"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/migrations/zipball/6b03a44bef94b99a24ab7d4c44cb292bb6f275c2",
- "reference": "6b03a44bef94b99a24ab7d4c44cb292bb6f275c2",
+ "url": "https://api.github.com/repos/cakephp/migrations/zipball/58446fdd096087ddf7752c0317731b8725d1dc28",
+ "reference": "58446fdd096087ddf7752c0317731b8725d1dc28",
"shasum": ""
},
"require": {
"cakephp/cache": "^4.3.0",
"cakephp/orm": "^4.3.0",
- "php": ">=7.2.0",
- "robmorgan/phinx": "^0.12"
+ "php": ">=7.4.0",
+ "robmorgan/phinx": "^0.13.2"
},
"require-dev": {
"cakephp/bake": "^2.6.0",
"cakephp/cakephp": "^4.3.0",
"cakephp/cakephp-codesniffer": "^4.1",
- "phpunit/phpunit": "^8.5.0 || ^9.5.0"
+ "phpunit/phpunit": "^9.5.0"
},
"suggest": {
"cakephp/bake": "If you want to generate migrations.",
@@ -227,7 +234,7 @@
"issues": "https://github.com/cakephp/migrations/issues",
"source": "https://github.com/cakephp/migrations"
},
- "time": "2022-03-14T14:26:38+00:00"
+ "time": "2023-09-22T08:39:18+00:00"
},
{
"name": "cakephp/plugin-installer",
@@ -329,16 +336,16 @@
},
{
"name": "composer/ca-bundle",
- "version": "1.3.1",
+ "version": "1.3.7",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b"
+ "reference": "76e46335014860eec1aa5a724799a00a2e47cc85"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
- "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/76e46335014860eec1aa5a724799a00a2e47cc85",
+ "reference": "76e46335014860eec1aa5a724799a00a2e47cc85",
"shasum": ""
},
"require": {
@@ -385,7 +392,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.3.1"
+ "source": "https://github.com/composer/ca-bundle/tree/1.3.7"
},
"funding": [
{
@@ -401,20 +408,20 @@
"type": "tidelift"
}
],
- "time": "2021-10-28T20:44:15+00:00"
+ "time": "2023-08-30T09:31:38+00:00"
},
{
"name": "doctrine/cache",
- "version": "2.1.1",
+ "version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
- "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce"
+ "reference": "1ca8f21980e770095a31456042471a57bc4c68fb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce",
- "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce",
+ "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb",
+ "reference": "1ca8f21980e770095a31456042471a57bc4c68fb",
"shasum": ""
},
"require": {
@@ -424,18 +431,12 @@
"doctrine/common": ">2.2,<2.4"
},
"require-dev": {
- "alcaeus/mongo-php-adapter": "^1.1",
"cache/integration-tests": "dev-master",
- "doctrine/coding-standard": "^8.0",
- "mongodb/mongodb": "^1.1",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
- "predis/predis": "~1.0",
+ "doctrine/coding-standard": "^9",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psr/cache": "^1.0 || ^2.0 || ^3.0",
- "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev",
- "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev"
- },
- "suggest": {
- "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
+ "symfony/cache": "^4.4 || ^5.4 || ^6",
+ "symfony/var-exporter": "^4.4 || ^5.4 || ^6"
},
"type": "library",
"autoload": {
@@ -484,7 +485,7 @@
],
"support": {
"issues": "https://github.com/doctrine/cache/issues",
- "source": "https://github.com/doctrine/cache/tree/2.1.1"
+ "source": "https://github.com/doctrine/cache/tree/2.2.0"
},
"funding": [
{
@@ -500,20 +501,20 @@
"type": "tidelift"
}
],
- "time": "2021-07-17T14:49:29+00:00"
+ "time": "2022-05-20T20:07:39+00:00"
},
{
"name": "doctrine/dbal",
- "version": "3.5.1",
+ "version": "3.7.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5"
+ "reference": "00d03067f07482f025d41ab55e4ba0db5eca2cdf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/f38ee8aaca2d58ee88653cb34a6a3880c23f38a5",
- "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/00d03067f07482f025d41ab55e4ba0db5eca2cdf",
+ "reference": "00d03067f07482f025d41ab55e4ba0db5eca2cdf",
"shasum": ""
},
"require": {
@@ -526,16 +527,18 @@
"psr/log": "^1|^2|^3"
},
"require-dev": {
- "doctrine/coding-standard": "10.0.0",
- "jetbrains/phpstorm-stubs": "2022.2",
- "phpstan/phpstan": "1.8.10",
- "phpstan/phpstan-strict-rules": "^1.4",
- "phpunit/phpunit": "9.5.25",
- "psalm/plugin-phpunit": "0.17.0",
- "squizlabs/php_codesniffer": "3.7.1",
+ "doctrine/coding-standard": "12.0.0",
+ "fig/log-test": "^1",
+ "jetbrains/phpstorm-stubs": "2023.1",
+ "phpstan/phpstan": "1.10.35",
+ "phpstan/phpstan-strict-rules": "^1.5",
+ "phpunit/phpunit": "9.6.13",
+ "psalm/plugin-phpunit": "0.18.4",
+ "slevomat/coding-standard": "8.13.1",
+ "squizlabs/php_codesniffer": "3.7.2",
"symfony/cache": "^5.4|^6.0",
"symfony/console": "^4.4|^5.4|^6.0",
- "vimeo/psalm": "4.29.0"
+ "vimeo/psalm": "4.30.0"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
@@ -595,7 +598,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
- "source": "https://github.com/doctrine/dbal/tree/3.5.1"
+ "source": "https://github.com/doctrine/dbal/tree/3.7.0"
},
"funding": [
{
@@ -611,29 +614,33 @@
"type": "tidelift"
}
],
- "time": "2022-10-24T07:26:18+00:00"
+ "time": "2023-09-26T20:56:55+00:00"
},
{
"name": "doctrine/deprecations",
- "version": "v0.5.3",
+ "version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
- "reference": "9504165960a1f83cc1480e2be1dd0a0478561314"
+ "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314",
- "reference": "9504165960a1f83cc1480e2be1dd0a0478561314",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3",
+ "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3",
"shasum": ""
},
"require": {
- "php": "^7.1|^8.0"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^6.0|^7.0|^8.0",
- "phpunit/phpunit": "^7.0|^8.0|^9.0",
- "psr/log": "^1.0"
+ "doctrine/coding-standard": "^9",
+ "phpstan/phpstan": "1.4.10 || 1.10.15",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psalm/plugin-phpunit": "0.18.4",
+ "psr/log": "^1 || ^2 || ^3",
+ "vimeo/psalm": "4.30.0 || 5.12.0"
},
"suggest": {
"psr/log": "Allows logging deprecations via PSR-3 logger implementation"
@@ -652,43 +659,40 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/v0.5.3"
+ "source": "https://github.com/doctrine/deprecations/tree/v1.1.1"
},
- "time": "2021-03-21T12:59:47+00:00"
+ "time": "2023-06-03T09:27:29+00:00"
},
{
"name": "doctrine/event-manager",
- "version": "1.1.1",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/event-manager.git",
- "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f"
+ "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f",
- "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f",
+ "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32",
+ "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0"
+ "php": "^8.1"
},
"conflict": {
- "doctrine/common": "<2.9@dev"
+ "doctrine/common": "<2.9"
},
"require-dev": {
- "doctrine/coding-standard": "^6.0",
- "phpunit/phpunit": "^7.0"
+ "doctrine/coding-standard": "^10",
+ "phpstan/phpstan": "^1.8.8",
+ "phpunit/phpunit": "^9.5",
+ "vimeo/psalm": "^4.28"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
"autoload": {
"psr-4": {
- "Doctrine\\Common\\": "lib/Doctrine/Common"
+ "Doctrine\\Common\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -732,7 +736,7 @@
],
"support": {
"issues": "https://github.com/doctrine/event-manager/issues",
- "source": "https://github.com/doctrine/event-manager/tree/1.1.x"
+ "source": "https://github.com/doctrine/event-manager/tree/2.0.0"
},
"funding": [
{
@@ -748,29 +752,28 @@
"type": "tidelift"
}
],
- "time": "2020-05-29T18:28:51+00:00"
+ "time": "2022-10-12T20:59:15+00:00"
},
{
"name": "laminas/laminas-diactoros",
- "version": "2.9.2",
+ "version": "2.25.2",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-diactoros.git",
- "reference": "07475df6b4bf6277ae8b9cbbc94d0ac6fee5e726"
+ "reference": "9f3f4bf5b99c9538b6f1dbcc20f6fec357914f9e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/07475df6b4bf6277ae8b9cbbc94d0ac6fee5e726",
- "reference": "07475df6b4bf6277ae8b9cbbc94d0ac6fee5e726",
+ "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/9f3f4bf5b99c9538b6f1dbcc20f6fec357914f9e",
+ "reference": "9f3f4bf5b99c9538b6f1dbcc20f6fec357914f9e",
"shasum": ""
},
"require": {
- "php": "^7.3 || ~8.0.0 || ~8.1.0",
+ "php": "~8.0.0 || ~8.1.0 || ~8.2.0",
"psr/http-factory": "^1.0",
- "psr/http-message": "^1.0"
+ "psr/http-message": "^1.1"
},
"conflict": {
- "phpspec/prophecy": "<1.9.0",
"zendframework/zend-diactoros": "*"
},
"provide": {
@@ -782,13 +785,12 @@
"ext-dom": "*",
"ext-gd": "*",
"ext-libxml": "*",
- "http-interop/http-factory-tests": "^0.8.0",
- "laminas/laminas-coding-standard": "~1.0.0",
- "php-http/psr7-integration-tests": "^1.1",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpunit/phpunit": "^9.1",
- "psalm/plugin-phpunit": "^0.14.0",
- "vimeo/psalm": "^4.3"
+ "http-interop/http-factory-tests": "^0.9.0",
+ "laminas/laminas-coding-standard": "^2.5",
+ "php-http/psr7-integration-tests": "^1.2",
+ "phpunit/phpunit": "^9.5.28",
+ "psalm/plugin-phpunit": "^0.18.4",
+ "vimeo/psalm": "^5.6"
},
"type": "library",
"extra": {
@@ -847,38 +849,34 @@
"type": "community_bridge"
}
],
- "time": "2022-04-06T17:37:15+00:00"
+ "time": "2023-04-17T15:44:17+00:00"
},
{
"name": "laminas/laminas-httphandlerrunner",
- "version": "1.5.0",
+ "version": "2.9.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-httphandlerrunner.git",
- "reference": "5f94e55d93f756e8ad07b9049aeb3d6d84582d0e"
+ "reference": "d3e84755a17e563b1c5f8290cbfb150210501a77"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/5f94e55d93f756e8ad07b9049aeb3d6d84582d0e",
- "reference": "5f94e55d93f756e8ad07b9049aeb3d6d84582d0e",
+ "url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/d3e84755a17e563b1c5f8290cbfb150210501a77",
+ "reference": "d3e84755a17e563b1c5f8290cbfb150210501a77",
"shasum": ""
},
"require": {
- "laminas/laminas-zendframework-bridge": "^1.0",
- "php": "^7.3 || ~8.0.0 || ~8.1.0",
- "psr/http-message": "^1.0",
- "psr/http-message-implementation": "^1.0",
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
+ "psr/http-message": "^1.0 || ^2.0",
+ "psr/http-message-implementation": "^1.0 || ^2.0",
"psr/http-server-handler": "^1.0"
},
- "replace": {
- "zendframework/zend-httphandlerrunner": "^1.1.0"
- },
"require-dev": {
- "laminas/laminas-coding-standard": "~1.0.0",
- "laminas/laminas-diactoros": "^2.8.0",
- "phpunit/phpunit": "^9.5.9",
- "psalm/plugin-phpunit": "^0.16.1",
- "vimeo/psalm": "^4.10.0"
+ "laminas/laminas-coding-standard": "~2.5.0",
+ "laminas/laminas-diactoros": "^3.0.0",
+ "phpunit/phpunit": "^10.1.2",
+ "psalm/plugin-phpunit": "^0.18.4",
+ "vimeo/psalm": "^5.11"
},
"type": "library",
"extra": {
@@ -918,69 +916,7 @@
"type": "community_bridge"
}
],
- "time": "2021-09-22T09:17:54+00:00"
- },
- {
- "name": "laminas/laminas-zendframework-bridge",
- "version": "1.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/laminas/laminas-zendframework-bridge.git",
- "reference": "7f049390b756d34ba5940a8fb47634fbb51f79ab"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/7f049390b756d34ba5940a8fb47634fbb51f79ab",
- "reference": "7f049390b756d34ba5940a8fb47634fbb51f79ab",
- "shasum": ""
- },
- "require": {
- "php": ">=7.4, <8.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.5.14",
- "psalm/plugin-phpunit": "^0.15.2",
- "squizlabs/php_codesniffer": "^3.6.2",
- "vimeo/psalm": "^4.21.0"
- },
- "type": "library",
- "extra": {
- "laminas": {
- "module": "Laminas\\ZendFrameworkBridge"
- }
- },
- "autoload": {
- "files": [
- "src/autoload.php"
- ],
- "psr-4": {
- "Laminas\\ZendFrameworkBridge\\": "src//"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "description": "Alias legacy ZF class names to Laminas Project equivalents.",
- "keywords": [
- "ZendFramework",
- "autoloading",
- "laminas",
- "zf"
- ],
- "support": {
- "forum": "https://discourse.laminas.dev/",
- "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues",
- "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom",
- "source": "https://github.com/laminas/laminas-zendframework-bridge"
- },
- "funding": [
- {
- "url": "https://funding.communitybridge.org/projects/laminas-project",
- "type": "community_bridge"
- }
- ],
- "time": "2022-02-22T22:17:01+00:00"
+ "time": "2023-09-04T10:43:03+00:00"
},
{
"name": "league/container",
@@ -1066,16 +1002,16 @@
},
{
"name": "mobiledetect/mobiledetectlib",
- "version": "2.8.39",
+ "version": "2.8.41",
"source": {
"type": "git",
"url": "https://github.com/serbanghita/Mobile-Detect.git",
- "reference": "0fd6753003fc870f6e229bae869cc1337c99bc45"
+ "reference": "fc9cccd4d3706d5a7537b562b59cc18f9e4c0cb1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/0fd6753003fc870f6e229bae869cc1337c99bc45",
- "reference": "0fd6753003fc870f6e229bae869cc1337c99bc45",
+ "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/fc9cccd4d3706d5a7537b562b59cc18f9e4c0cb1",
+ "reference": "fc9cccd4d3706d5a7537b562b59cc18f9e4c0cb1",
"shasum": ""
},
"require": {
@@ -1116,26 +1052,26 @@
],
"support": {
"issues": "https://github.com/serbanghita/Mobile-Detect/issues",
- "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.39"
+ "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.41"
},
- "time": "2022-02-17T19:24:25+00:00"
+ "time": "2022-11-08T18:31:26+00:00"
},
{
"name": "psr/cache",
- "version": "1.0.1",
+ "version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/cache.git",
- "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
+ "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
- "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
+ "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
+ "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "php": ">=8.0.0"
},
"type": "library",
"extra": {
@@ -1155,7 +1091,7 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for caching libraries",
@@ -1165,9 +1101,9 @@
"psr-6"
],
"support": {
- "source": "https://github.com/php-fig/cache/tree/master"
+ "source": "https://github.com/php-fig/cache/tree/3.0.0"
},
- "time": "2016-08-06T20:24:11+00:00"
+ "time": "2021-02-03T23:26:27+00:00"
},
{
"name": "psr/container",
@@ -1224,21 +1160,21 @@
},
{
"name": "psr/http-client",
- "version": "1.0.1",
+ "version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-client.git",
- "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
- "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
"shasum": ""
},
"require": {
"php": "^7.0 || ^8.0",
- "psr/http-message": "^1.0"
+ "psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
"extra": {
@@ -1258,7 +1194,7 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP clients",
@@ -1270,27 +1206,27 @@
"psr-18"
],
"support": {
- "source": "https://github.com/php-fig/http-client/tree/master"
+ "source": "https://github.com/php-fig/http-client"
},
- "time": "2020-06-29T06:28:15+00:00"
+ "time": "2023-09-23T14:17:50+00:00"
},
{
"name": "psr/http-factory",
- "version": "1.0.1",
+ "version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-factory.git",
- "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+ "reference": "e616d01114759c4c489f93b099585439f795fe35"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
- "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
+ "reference": "e616d01114759c4c489f93b099585439f795fe35",
"shasum": ""
},
"require": {
"php": ">=7.0.0",
- "psr/http-message": "^1.0"
+ "psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
"extra": {
@@ -1310,7 +1246,7 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"description": "Common interfaces for PSR-7 HTTP message factories",
@@ -1325,31 +1261,31 @@
"response"
],
"support": {
- "source": "https://github.com/php-fig/http-factory/tree/master"
+ "source": "https://github.com/php-fig/http-factory/tree/1.0.2"
},
- "time": "2019-04-30T12:38:16+00:00"
+ "time": "2023-04-10T20:10:41+00:00"
},
{
"name": "psr/http-message",
- "version": "1.0.1",
+ "version": "1.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+ "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
+ "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "1.1.x-dev"
}
},
"autoload": {
@@ -1378,27 +1314,27 @@
"response"
],
"support": {
- "source": "https://github.com/php-fig/http-message/tree/master"
+ "source": "https://github.com/php-fig/http-message/tree/1.1"
},
- "time": "2016-08-06T14:39:51+00:00"
+ "time": "2023-04-04T09:50:52+00:00"
},
{
"name": "psr/http-server-handler",
- "version": "1.0.1",
+ "version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-server-handler.git",
- "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7"
+ "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
- "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
+ "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4",
+ "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4",
"shasum": ""
},
"require": {
"php": ">=7.0",
- "psr/http-message": "^1.0"
+ "psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
"extra": {
@@ -1418,7 +1354,7 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP server-side request handler",
@@ -1434,28 +1370,27 @@
"server"
],
"support": {
- "issues": "https://github.com/php-fig/http-server-handler/issues",
- "source": "https://github.com/php-fig/http-server-handler/tree/master"
+ "source": "https://github.com/php-fig/http-server-handler/tree/1.0.2"
},
- "time": "2018-10-30T16:46:14+00:00"
+ "time": "2023-04-10T20:06:20+00:00"
},
{
"name": "psr/http-server-middleware",
- "version": "1.0.1",
+ "version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-server-middleware.git",
- "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5"
+ "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5",
- "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5",
+ "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
+ "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
"shasum": ""
},
"require": {
"php": ">=7.0",
- "psr/http-message": "^1.0",
+ "psr/http-message": "^1.0 || ^2.0",
"psr/http-server-handler": "^1.0"
},
"type": "library",
@@ -1476,7 +1411,7 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP server-side middleware",
@@ -1492,36 +1427,36 @@
],
"support": {
"issues": "https://github.com/php-fig/http-server-middleware/issues",
- "source": "https://github.com/php-fig/http-server-middleware/tree/master"
+ "source": "https://github.com/php-fig/http-server-middleware/tree/1.0.2"
},
- "time": "2018-10-30T17:12:04+00:00"
+ "time": "2023-04-11T06:14:47+00:00"
},
{
"name": "psr/log",
- "version": "1.1.4",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
+ "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376",
+ "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "php": ">=8.0.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.1.x-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
- "Psr\\Log\\": "Psr/Log/"
+ "Psr\\Log\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1542,31 +1477,31 @@
"psr-3"
],
"support": {
- "source": "https://github.com/php-fig/log/tree/1.1.4"
+ "source": "https://github.com/php-fig/log/tree/2.0.0"
},
- "time": "2021-05-03T11:20:27+00:00"
+ "time": "2021-07-14T16:41:46+00:00"
},
{
"name": "psr/simple-cache",
- "version": "1.0.1",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/simple-cache.git",
- "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
+ "reference": "8707bf3cea6f710bf6ef05491234e3ab06f6432a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
- "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/8707bf3cea6f710bf6ef05491234e3ab06f6432a",
+ "reference": "8707bf3cea6f710bf6ef05491234e3ab06f6432a",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "php": ">=8.0.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
@@ -1581,7 +1516,7 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"description": "Common interfaces for simple caching",
@@ -1593,22 +1528,22 @@
"simple-cache"
],
"support": {
- "source": "https://github.com/php-fig/simple-cache/tree/master"
+ "source": "https://github.com/php-fig/simple-cache/tree/2.0.0"
},
- "time": "2017-10-23T01:57:42+00:00"
+ "time": "2021-10-29T13:22:09+00:00"
},
{
"name": "robmorgan/phinx",
- "version": "0.12.10",
+ "version": "0.13.4",
"source": {
"type": "git",
"url": "https://github.com/cakephp/phinx.git",
- "reference": "ad056cff354fc67fedf9bf96c441c2b428afad0c"
+ "reference": "18e06e4a2b18947663438afd2f467e17c62e867d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/phinx/zipball/ad056cff354fc67fedf9bf96c441c2b428afad0c",
- "reference": "ad056cff354fc67fedf9bf96c441c2b428afad0c",
+ "url": "https://api.github.com/repos/cakephp/phinx/zipball/18e06e4a2b18947663438afd2f467e17c62e867d",
+ "reference": "18e06e4a2b18947663438afd2f467e17c62e867d",
"shasum": ""
},
"require": {
@@ -1679,44 +1614,40 @@
],
"support": {
"issues": "https://github.com/cakephp/phinx/issues",
- "source": "https://github.com/cakephp/phinx/tree/0.12.10"
+ "source": "https://github.com/cakephp/phinx/tree/0.13.4"
},
- "time": "2022-01-21T19:53:14+00:00"
+ "time": "2023-01-07T00:42:55+00:00"
},
{
"name": "symfony/config",
- "version": "v5.4.7",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "05624c386afa1b4ccc1357463d830fade8d9d404"
+ "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/05624c386afa1b4ccc1357463d830fade8d9d404",
- "reference": "05624c386afa1b4ccc1357463d830fade8d9d404",
+ "url": "https://api.github.com/repos/symfony/config/zipball/b47ca238b03e7b0d7880ffd1cf06e8d637ca1467",
+ "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/filesystem": "^4.4|^5.0|^6.0",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-php80": "^1.16",
- "symfony/polyfill-php81": "^1.22"
+ "php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/filesystem": "^5.4|^6.0",
+ "symfony/polyfill-ctype": "~1.8"
},
"conflict": {
- "symfony/finder": "<4.4"
+ "symfony/finder": "<5.4",
+ "symfony/service-contracts": "<2.5"
},
"require-dev": {
- "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
- "symfony/finder": "^4.4|^5.0|^6.0",
- "symfony/messenger": "^4.4|^5.0|^6.0",
- "symfony/service-contracts": "^1.1|^2|^3",
- "symfony/yaml": "^4.4|^5.0|^6.0"
- },
- "suggest": {
- "symfony/yaml": "To use the yaml reference dumper"
+ "symfony/event-dispatcher": "^5.4|^6.0",
+ "symfony/finder": "^5.4|^6.0",
+ "symfony/messenger": "^5.4|^6.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/yaml": "^5.4|^6.0"
},
"type": "library",
"autoload": {
@@ -1744,7 +1675,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/config/tree/v5.4.7"
+ "source": "https://github.com/symfony/config/tree/v6.3.2"
},
"funding": [
{
@@ -1760,56 +1691,47 @@
"type": "tidelift"
}
],
- "time": "2022-03-21T13:42:03+00:00"
+ "time": "2023-07-19T20:22:16+00:00"
},
{
"name": "symfony/console",
- "version": "v5.4.7",
+ "version": "v6.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6"
+ "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/900275254f0a1a2afff1ab0e11abd5587a10e1d6",
- "reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6",
+ "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6",
+ "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
+ "php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php73": "^1.9",
- "symfony/polyfill-php80": "^1.16",
- "symfony/service-contracts": "^1.1|^2|^3",
- "symfony/string": "^5.1|^6.0"
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/string": "^5.4|^6.0"
},
"conflict": {
- "psr/log": ">=3",
- "symfony/dependency-injection": "<4.4",
- "symfony/dotenv": "<5.1",
- "symfony/event-dispatcher": "<4.4",
- "symfony/lock": "<4.4",
- "symfony/process": "<4.4"
+ "symfony/dependency-injection": "<5.4",
+ "symfony/dotenv": "<5.4",
+ "symfony/event-dispatcher": "<5.4",
+ "symfony/lock": "<5.4",
+ "symfony/process": "<5.4"
},
"provide": {
- "psr/log-implementation": "1.0|2.0"
+ "psr/log-implementation": "1.0|2.0|3.0"
},
"require-dev": {
- "psr/log": "^1|^2",
- "symfony/config": "^4.4|^5.0|^6.0",
- "symfony/dependency-injection": "^4.4|^5.0|^6.0",
- "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
- "symfony/lock": "^4.4|^5.0|^6.0",
- "symfony/process": "^4.4|^5.0|^6.0",
- "symfony/var-dumper": "^4.4|^5.0|^6.0"
- },
- "suggest": {
- "psr/log": "For using the console logger",
- "symfony/event-dispatcher": "",
- "symfony/lock": "",
- "symfony/process": ""
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^5.4|^6.0",
+ "symfony/dependency-injection": "^5.4|^6.0",
+ "symfony/event-dispatcher": "^5.4|^6.0",
+ "symfony/lock": "^5.4|^6.0",
+ "symfony/process": "^5.4|^6.0",
+ "symfony/var-dumper": "^5.4|^6.0"
},
"type": "library",
"autoload": {
@@ -1838,12 +1760,12 @@
"homepage": "https://symfony.com",
"keywords": [
"cli",
- "command line",
+ "command-line",
"console",
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v5.4.7"
+ "source": "https://github.com/symfony/console/tree/v6.3.4"
},
"funding": [
{
@@ -1859,29 +1781,29 @@
"type": "tidelift"
}
],
- "time": "2022-03-31T17:09:19+00:00"
+ "time": "2023-08-16T10:10:12+00:00"
},
{
"name": "symfony/deprecation-contracts",
- "version": "v2.5.1",
+ "version": "v3.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
+ "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
- "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
+ "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=8.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.5-dev"
+ "dev-main": "3.4-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -1910,7 +1832,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0"
},
"funding": [
{
@@ -1926,27 +1848,26 @@
"type": "tidelift"
}
],
- "time": "2022-01-02T09:53:40+00:00"
+ "time": "2023-05-23T14:45:45+00:00"
},
{
"name": "symfony/filesystem",
- "version": "v5.4.7",
+ "version": "v6.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f"
+ "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/3a4442138d80c9f7b600fb297534ac718b61d37f",
- "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae",
+ "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
+ "php": ">=8.1",
"symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-mbstring": "~1.8",
- "symfony/polyfill-php80": "^1.16"
+ "symfony/polyfill-mbstring": "~1.8"
},
"type": "library",
"autoload": {
@@ -1974,7 +1895,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v5.4.7"
+ "source": "https://github.com/symfony/filesystem/tree/v6.3.1"
},
"funding": [
{
@@ -1990,20 +1911,20 @@
"type": "tidelift"
}
],
- "time": "2022-04-01T12:33:59+00:00"
+ "time": "2023-06-01T08:30:39+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.25.0",
+ "version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "30885182c981ab175d4d034db0f6f469898070ab"
+ "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
- "reference": "30885182c981ab175d4d034db0f6f469898070ab",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
+ "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
"shasum": ""
},
"require": {
@@ -2018,7 +1939,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -2056,7 +1977,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0"
},
"funding": [
{
@@ -2072,20 +1993,20 @@
"type": "tidelift"
}
],
- "time": "2021-10-20T20:35:02+00:00"
+ "time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.25.0",
+ "version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
+ "reference": "875e90aeea2777b6f135677f618529449334a612"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
- "reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612",
+ "reference": "875e90aeea2777b6f135677f618529449334a612",
"shasum": ""
},
"require": {
@@ -2097,7 +2018,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -2137,7 +2058,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0"
},
"funding": [
{
@@ -2153,20 +2074,20 @@
"type": "tidelift"
}
],
- "time": "2021-11-23T21:10:46+00:00"
+ "time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.25.0",
+ "version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
+ "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92"
},
"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/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
+ "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
"shasum": ""
},
"require": {
@@ -2178,7 +2099,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -2221,7 +2142,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0"
},
"funding": [
{
@@ -2237,20 +2158,20 @@
"type": "tidelift"
}
],
- "time": "2021-02-19T12:13:01+00:00"
+ "time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.25.0",
+ "version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
+ "reference": "42292d99c55abe617799667f454222c54c60e229"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
- "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
+ "reference": "42292d99c55abe617799667f454222c54c60e229",
"shasum": ""
},
"require": {
@@ -2265,7 +2186,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -2304,7 +2225,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
},
"funding": [
{
@@ -2320,44 +2241,45 @@
"type": "tidelift"
}
],
- "time": "2021-11-30T18:21:41+00:00"
+ "time": "2023-07-28T09:04:16+00:00"
},
{
- "name": "symfony/polyfill-php73",
- "version": "v1.25.0",
+ "name": "symfony/service-contracts",
+ "version": "v3.3.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5"
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5",
- "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4",
+ "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=8.1",
+ "psr/container": "^2.0"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "3.4-dev"
},
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
}
},
"autoload": {
- "files": [
- "bootstrap.php"
- ],
"psr-4": {
- "Symfony\\Polyfill\\Php73\\": ""
+ "Symfony\\Contracts\\Service\\": ""
},
- "classmap": [
- "Resources/stubs"
+ "exclude-from-classmap": [
+ "/Test/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -2374,16 +2296,18 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "description": "Generic abstractions related to writing services",
"homepage": "https://symfony.com",
"keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.3.0"
},
"funding": [
{
@@ -2399,44 +2323,49 @@
"type": "tidelift"
}
],
- "time": "2021-06-05T21:20:04+00:00"
+ "time": "2023-05-23T14:45:45+00:00"
},
{
- "name": "symfony/polyfill-php80",
- "version": "v1.25.0",
+ "name": "symfony/string",
+ "version": "v6.3.2",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c"
+ "url": "https://github.com/symfony/string.git",
+ "reference": "53d1a83225002635bca3482fcbf963001313fb68"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c",
- "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c",
+ "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68",
+ "reference": "53d1a83225002635bca3482fcbf963001313fb68",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=8.1",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.0",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
+ "conflict": {
+ "symfony/translation-contracts": "<2.5"
+ },
+ "require-dev": {
+ "symfony/error-handler": "^5.4|^6.0",
+ "symfony/http-client": "^5.4|^6.0",
+ "symfony/intl": "^6.2",
+ "symfony/translation-contracts": "^2.5|^3.0",
+ "symfony/var-exporter": "^5.4|^6.0"
},
+ "type": "library",
"autoload": {
"files": [
- "bootstrap.php"
+ "Resources/functions.php"
],
"psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
+ "Symfony\\Component\\String\\": ""
},
- "classmap": [
- "Resources/stubs"
+ "exclude-from-classmap": [
+ "/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -2444,10 +2373,6 @@
"MIT"
],
"authors": [
- {
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
@@ -2457,16 +2382,18 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
"homepage": "https://symfony.com",
"keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0"
+ "source": "https://github.com/symfony/string/tree/v6.3.2"
},
"funding": [
{
@@ -2482,319 +2409,72 @@
"type": "tidelift"
}
],
- "time": "2022-03-04T08:16:47+00:00"
+ "time": "2023-07-05T08:41:27+00:00"
},
{
- "name": "symfony/polyfill-php81",
- "version": "v1.25.0",
+ "name": "twbs/bootstrap",
+ "version": "v5.3.2",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f"
+ "url": "https://github.com/twbs/bootstrap.git",
+ "reference": "344e912d04b5b6a04482113eff20ab416ff01048"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
- "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
+ "url": "https://api.github.com/repos/twbs/bootstrap/zipball/344e912d04b5b6a04482113eff20ab416ff01048",
+ "reference": "344e912d04b5b6a04482113eff20ab416ff01048",
"shasum": ""
},
- "require": {
- "php": ">=7.1"
+ "replace": {
+ "twitter/bootstrap": "self.version"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php81\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
- },
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Mark Otto",
+ "email": "markdotto@gmail.com"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Jacob Thornton",
+ "email": "jacobthornton@gmail.com"
}
],
- "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
- "homepage": "https://symfony.com",
+ "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
+ "homepage": "https://getbootstrap.com/",
"keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
+ "JS",
+ "css",
+ "framework",
+ "front-end",
+ "mobile-first",
+ "responsive",
+ "sass",
+ "web"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0"
+ "issues": "https://github.com/twbs/bootstrap/issues",
+ "source": "https://github.com/twbs/bootstrap/tree/v5.3.2"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-09-13T13:58:11+00:00"
- },
+ "time": "2023-09-14T14:19:27+00:00"
+ }
+ ],
+ "packages-dev": [
{
- "name": "symfony/service-contracts",
- "version": "v3.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66",
- "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0.2",
- "psr/container": "^2.0"
- },
- "conflict": {
- "ext-psr": "<1.1|>=2"
- },
- "suggest": {
- "symfony/service-implementation": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.0-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Service\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to writing services",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.0.2"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2022-05-30T19:17:58+00:00"
- },
- {
- "name": "symfony/string",
- "version": "v5.4.3",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/string.git",
- "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10",
- "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.0",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "~1.15"
- },
- "conflict": {
- "symfony/translation-contracts": ">=3.0"
- },
- "require-dev": {
- "symfony/error-handler": "^4.4|^5.0|^6.0",
- "symfony/http-client": "^4.4|^5.0|^6.0",
- "symfony/translation-contracts": "^1.1|^2",
- "symfony/var-exporter": "^4.4|^5.0|^6.0"
- },
- "type": "library",
- "autoload": {
- "files": [
- "Resources/functions.php"
- ],
- "psr-4": {
- "Symfony\\Component\\String\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
- "homepage": "https://symfony.com",
- "keywords": [
- "grapheme",
- "i18n",
- "string",
- "unicode",
- "utf-8",
- "utf8"
- ],
- "support": {
- "source": "https://github.com/symfony/string/tree/v5.4.3"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2022-01-02T09:53:40+00:00"
- },
- {
- "name": "twbs/bootstrap",
- "version": "v5.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/twbs/bootstrap.git",
- "reference": "1a6fdfae6be09b09eaced8f0e442ca6f7680a61e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/twbs/bootstrap/zipball/1a6fdfae6be09b09eaced8f0e442ca6f7680a61e",
- "reference": "1a6fdfae6be09b09eaced8f0e442ca6f7680a61e",
- "shasum": ""
- },
- "replace": {
- "twitter/bootstrap": "self.version"
- },
- "type": "library",
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mark Otto",
- "email": "markdotto@gmail.com"
- },
- {
- "name": "Jacob Thornton",
- "email": "jacobthornton@gmail.com"
- }
- ],
- "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
- "homepage": "https://getbootstrap.com/",
- "keywords": [
- "JS",
- "css",
- "framework",
- "front-end",
- "mobile-first",
- "responsive",
- "sass",
- "web"
- ],
- "support": {
- "issues": "https://github.com/twbs/bootstrap/issues",
- "source": "https://github.com/twbs/bootstrap/tree/v5.1.3"
- },
- "time": "2021-10-09T06:43:19+00:00"
- }
- ],
- "packages-dev": [
- {
- "name": "brick/varexporter",
- "version": "0.3.5",
+ "name": "brick/varexporter",
+ "version": "0.3.8",
"source": {
"type": "git",
"url": "https://github.com/brick/varexporter.git",
- "reference": "05241f28dfcba2b51b11e2d750e296316ebbe518"
+ "reference": "b5853edea6204ff8fa10633c3a4cccc4058410ed"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/brick/varexporter/zipball/05241f28dfcba2b51b11e2d750e296316ebbe518",
- "reference": "05241f28dfcba2b51b11e2d750e296316ebbe518",
+ "url": "https://api.github.com/repos/brick/varexporter/zipball/b5853edea6204ff8fa10633c3a4cccc4058410ed",
+ "reference": "b5853edea6204ff8fa10633c3a4cccc4058410ed",
"shasum": ""
},
"require": {
@@ -2804,7 +2484,7 @@
"require-dev": {
"php-coveralls/php-coveralls": "^2.2",
"phpunit/phpunit": "^8.5 || ^9.0",
- "vimeo/psalm": "4.4.1"
+ "vimeo/psalm": "4.23.0"
},
"type": "library",
"autoload": {
@@ -2822,28 +2502,35 @@
],
"support": {
"issues": "https://github.com/brick/varexporter/issues",
- "source": "https://github.com/brick/varexporter/tree/0.3.5"
+ "source": "https://github.com/brick/varexporter/tree/0.3.8"
},
- "time": "2021-02-10T13:53:07+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/BenMorel",
+ "type": "github"
+ }
+ ],
+ "time": "2023-01-21T23:05:38+00:00"
},
{
"name": "cakephp/bake",
- "version": "2.7.0",
+ "version": "2.9.3",
"source": {
"type": "git",
"url": "https://github.com/cakephp/bake.git",
- "reference": "3933caa0941b2f75f3e53c5456efdbf588917584"
+ "reference": "a9b02fb6a5f96e8fb9887be55cccea501468907b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/bake/zipball/3933caa0941b2f75f3e53c5456efdbf588917584",
- "reference": "3933caa0941b2f75f3e53c5456efdbf588917584",
+ "url": "https://api.github.com/repos/cakephp/bake/zipball/a9b02fb6a5f96e8fb9887be55cccea501468907b",
+ "reference": "a9b02fb6a5f96e8fb9887be55cccea501468907b",
"shasum": ""
},
"require": {
"brick/varexporter": "^0.3.5",
"cakephp/cakephp": "^4.3.0",
"cakephp/twig-view": "^1.0.2",
+ "nikic/php-parser": "^4.13.2",
"php": ">=7.2"
},
"require-dev": {
@@ -2880,25 +2567,25 @@
"issues": "https://github.com/cakephp/bake/issues",
"source": "https://github.com/cakephp/bake"
},
- "time": "2022-04-14T08:50:07+00:00"
+ "time": "2023-03-18T19:26:16+00:00"
},
{
"name": "cakephp/cakephp-codesniffer",
- "version": "4.5.1",
+ "version": "4.7.0",
"source": {
"type": "git",
"url": "https://github.com/cakephp/cakephp-codesniffer.git",
- "reference": "6b17905db024b8d7e64a15296688545c61ab6694"
+ "reference": "24fa2321d54e5251ac2f59dd92dd2066f0b0bdae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/cakephp-codesniffer/zipball/6b17905db024b8d7e64a15296688545c61ab6694",
- "reference": "6b17905db024b8d7e64a15296688545c61ab6694",
+ "url": "https://api.github.com/repos/cakephp/cakephp-codesniffer/zipball/24fa2321d54e5251ac2f59dd92dd2066f0b0bdae",
+ "reference": "24fa2321d54e5251ac2f59dd92dd2066f0b0bdae",
"shasum": ""
},
"require": {
"php": ">=7.2.0",
- "slevomat/coding-standard": "^6.3.6 || ^7.0",
+ "slevomat/coding-standard": "^7.0 || ^8.0",
"squizlabs/php_codesniffer": "^3.6"
},
"require-dev": {
@@ -2932,28 +2619,28 @@
"issues": "https://github.com/cakephp/cakephp-codesniffer/issues",
"source": "https://github.com/cakephp/cakephp-codesniffer"
},
- "time": "2021-07-11T04:47:47+00:00"
+ "time": "2023-04-10T06:35:04+00:00"
},
{
"name": "cakephp/debug_kit",
- "version": "4.7.1",
+ "version": "4.9.4",
"source": {
"type": "git",
"url": "https://github.com/cakephp/debug_kit.git",
- "reference": "ce564bacca4ebf471c34a886741672b54328b382"
+ "reference": "663491edec4a6b9111f1cf4733ebd471450df71e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/ce564bacca4ebf471c34a886741672b54328b382",
- "reference": "ce564bacca4ebf471c34a886741672b54328b382",
+ "url": "https://api.github.com/repos/cakephp/debug_kit/zipball/663491edec4a6b9111f1cf4733ebd471450df71e",
+ "reference": "663491edec4a6b9111f1cf4733ebd471450df71e",
"shasum": ""
},
"require": {
- "cakephp/cakephp": "^4.3.0",
+ "cakephp/cakephp": "^4.4.0",
"cakephp/chronos": "^2.0",
"composer/composer": "^1.3 | ^2.0",
"jdorn/sql-formatter": "^1.2",
- "php": ">=7.2"
+ "php": ">=7.4"
},
"require-dev": {
"cakephp/authorization": "^2.0",
@@ -2993,12 +2680,12 @@
"kit"
],
"support": {
- "forum": "http://stackoverflow.com/tags/cakephp",
+ "forum": "https://stackoverflow.com/tags/cakephp",
"irc": "irc://irc.freenode.org/cakephp",
"issues": "https://github.com/cakephp/debug_kit/issues",
"source": "https://github.com/cakephp/debug_kit"
},
- "time": "2022-01-20T02:44:41+00:00"
+ "time": "2023-07-05T16:04:04+00:00"
},
{
"name": "cakephp/repl",
@@ -3120,47 +2807,123 @@
},
"time": "2021-09-17T14:07:52+00:00"
},
+ {
+ "name": "composer/class-map-generator",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/class-map-generator.git",
+ "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/class-map-generator/zipball/953cc4ea32e0c31f2185549c7d216d7921f03da9",
+ "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9",
+ "shasum": ""
+ },
+ "require": {
+ "composer/pcre": "^2.1 || ^3.1",
+ "php": "^7.2 || ^8.0",
+ "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.6",
+ "phpstan/phpstan-deprecation-rules": "^1",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpstan/phpstan-strict-rules": "^1.1",
+ "symfony/filesystem": "^5.4 || ^6",
+ "symfony/phpunit-bridge": "^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\ClassMapGenerator\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
+ }
+ ],
+ "description": "Utilities to scan PHP code and generate class maps.",
+ "keywords": [
+ "classmap"
+ ],
+ "support": {
+ "issues": "https://github.com/composer/class-map-generator/issues",
+ "source": "https://github.com/composer/class-map-generator/tree/1.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-06-30T13:58:57+00:00"
+ },
{
"name": "composer/composer",
- "version": "2.3.5",
+ "version": "2.6.3",
"source": {
"type": "git",
"url": "https://github.com/composer/composer.git",
- "reference": "50c47b1f907cfcdb8f072b88164d22b527557ae1"
+ "reference": "ff477832e6d838a736556d4a39a3b80f4412abfd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/composer/zipball/50c47b1f907cfcdb8f072b88164d22b527557ae1",
- "reference": "50c47b1f907cfcdb8f072b88164d22b527557ae1",
+ "url": "https://api.github.com/repos/composer/composer/zipball/ff477832e6d838a736556d4a39a3b80f4412abfd",
+ "reference": "ff477832e6d838a736556d4a39a3b80f4412abfd",
"shasum": ""
},
"require": {
"composer/ca-bundle": "^1.0",
+ "composer/class-map-generator": "^1.0",
"composer/metadata-minifier": "^1.0",
- "composer/pcre": "^2 || ^3",
- "composer/semver": "^3.0",
- "composer/spdx-licenses": "^1.2",
+ "composer/pcre": "^2.1 || ^3.1",
+ "composer/semver": "^3.2.5",
+ "composer/spdx-licenses": "^1.5.7",
"composer/xdebug-handler": "^2.0.2 || ^3.0.3",
"justinrainbow/json-schema": "^5.2.11",
"php": "^7.2.5 || ^8.0",
"psr/log": "^1.0 || ^2.0 || ^3.0",
- "react/promise": "^2.8",
+ "react/promise": "^2.8 || ^3",
"seld/jsonlint": "^1.4",
"seld/phar-utils": "^1.2",
- "symfony/console": "^5.4.1 || ^6.0",
- "symfony/filesystem": "^5.4 || ^6.0",
- "symfony/finder": "^5.4 || ^6.0",
+ "seld/signal-handler": "^2.0",
+ "symfony/console": "^5.4.11 || ^6.0.11 || ^7",
+ "symfony/filesystem": "^5.4 || ^6.0 || ^7",
+ "symfony/finder": "^5.4 || ^6.0 || ^7",
"symfony/polyfill-php73": "^1.24",
"symfony/polyfill-php80": "^1.24",
- "symfony/process": "^5.4 || ^6.0"
+ "symfony/polyfill-php81": "^1.24",
+ "symfony/process": "^5.4 || ^6.0 || ^7"
},
"require-dev": {
- "phpstan/phpstan": "^1.4.1",
+ "phpstan/phpstan": "^1.9.3",
"phpstan/phpstan-deprecation-rules": "^1",
"phpstan/phpstan-phpunit": "^1.0",
"phpstan/phpstan-strict-rules": "^1",
- "phpstan/phpstan-symfony": "^1.1",
- "symfony/phpunit-bridge": "^6.0"
+ "phpstan/phpstan-symfony": "^1.2.10",
+ "symfony/phpunit-bridge": "^6.0 || ^7"
},
"suggest": {
"ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
@@ -3173,12 +2936,17 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.3-dev"
+ "dev-main": "2.6-dev"
+ },
+ "phpstan": {
+ "includes": [
+ "phpstan/rules.neon"
+ ]
}
},
"autoload": {
"psr-4": {
- "Composer\\": "src/Composer"
+ "Composer\\": "src/Composer/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -3207,7 +2975,8 @@
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/composer/issues",
- "source": "https://github.com/composer/composer/tree/2.3.5"
+ "security": "https://github.com/composer/composer/security/policy",
+ "source": "https://github.com/composer/composer/tree/2.6.3"
},
"funding": [
{
@@ -3223,7 +2992,7 @@
"type": "tidelift"
}
],
- "time": "2022-04-13T14:43:00+00:00"
+ "time": "2023-09-15T07:38:22+00:00"
},
{
"name": "composer/metadata-minifier",
@@ -3296,16 +3065,16 @@
},
{
"name": "composer/pcre",
- "version": "3.0.0",
+ "version": "3.1.0",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
- "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd"
+ "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd",
- "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2",
+ "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2",
"shasum": ""
},
"require": {
@@ -3347,7 +3116,7 @@
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
- "source": "https://github.com/composer/pcre/tree/3.0.0"
+ "source": "https://github.com/composer/pcre/tree/3.1.0"
},
"funding": [
{
@@ -3363,20 +3132,20 @@
"type": "tidelift"
}
],
- "time": "2022-02-25T20:21:48+00:00"
+ "time": "2022-11-17T09:50:14+00:00"
},
{
"name": "composer/semver",
- "version": "3.3.2",
+ "version": "3.4.0",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
- "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9"
+ "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9",
- "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9",
+ "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32",
+ "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32",
"shasum": ""
},
"require": {
@@ -3426,9 +3195,9 @@
"versioning"
],
"support": {
- "irc": "irc://irc.freenode.org/composer",
+ "irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/3.3.2"
+ "source": "https://github.com/composer/semver/tree/3.4.0"
},
"funding": [
{
@@ -3444,20 +3213,20 @@
"type": "tidelift"
}
],
- "time": "2022-04-01T19:23:25+00:00"
+ "time": "2023-08-31T09:50:34+00:00"
},
{
"name": "composer/spdx-licenses",
- "version": "1.5.6",
+ "version": "1.5.7",
"source": {
"type": "git",
"url": "https://github.com/composer/spdx-licenses.git",
- "reference": "a30d487169d799745ca7280bc90fdfa693536901"
+ "reference": "c848241796da2abf65837d51dce1fae55a960149"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/a30d487169d799745ca7280bc90fdfa693536901",
- "reference": "a30d487169d799745ca7280bc90fdfa693536901",
+ "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/c848241796da2abf65837d51dce1fae55a960149",
+ "reference": "c848241796da2abf65837d51dce1fae55a960149",
"shasum": ""
},
"require": {
@@ -3508,7 +3277,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/spdx-licenses/issues",
- "source": "https://github.com/composer/spdx-licenses/tree/1.5.6"
+ "source": "https://github.com/composer/spdx-licenses/tree/1.5.7"
},
"funding": [
{
@@ -3524,7 +3293,7 @@
"type": "tidelift"
}
],
- "time": "2021-11-18T10:14:14+00:00"
+ "time": "2022-05-23T07:37:50+00:00"
},
{
"name": "composer/xdebug-handler",
@@ -3594,35 +3363,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/",
@@ -3638,7 +3410,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",
@@ -3662,37 +3434,37 @@
"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",
- "version": "1.4.1",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
- "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
+ "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
- "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
+ "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0"
+ "php": "^8.1"
},
"require-dev": {
- "doctrine/coding-standard": "^9",
+ "doctrine/coding-standard": "^11",
"ext-pdo": "*",
"ext-phar": "*",
- "phpbench/phpbench": "^0.16 || ^1",
- "phpstan/phpstan": "^1.4",
- "phpstan/phpstan-phpunit": "^1",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "vimeo/psalm": "^4.22"
+ "phpbench/phpbench": "^1.2",
+ "phpstan/phpstan": "^1.9.4",
+ "phpstan/phpstan-phpunit": "^1.3",
+ "phpunit/phpunit": "^9.5.27",
+ "vimeo/psalm": "^5.4"
},
"type": "library",
"autoload": {
@@ -3719,7 +3491,7 @@
],
"support": {
"issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
+ "source": "https://github.com/doctrine/instantiator/tree/2.0.0"
},
"funding": [
{
@@ -3735,7 +3507,7 @@
"type": "tidelift"
}
],
- "time": "2022-03-03T08:28:38+00:00"
+ "time": "2022-12-30T00:23:10+00:00"
},
{
"name": "jasny/twig-extensions",
@@ -3851,7 +3623,7 @@
],
"support": {
"issues": "https://github.com/jdorn/sql-formatter/issues",
- "source": "https://github.com/jdorn/sql-formatter/tree/master"
+ "source": "https://github.com/jdorn/sql-formatter/tree/v1.2.17"
},
"time": "2014-01-12T16:20:24+00:00"
},
@@ -4046,16 +3818,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": {
@@ -4093,7 +3865,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": [
{
@@ -4101,20 +3873,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.13.2",
+ "version": "v4.17.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
+ "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
- "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
+ "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
"shasum": ""
},
"require": {
@@ -4155,9 +3927,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1"
},
- "time": "2021-11-30T19:35:32+00:00"
+ "time": "2023-08-13T19:53:39+00:00"
},
{
"name": "phar-io/manifest",
@@ -4261,263 +4033,39 @@
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "Developer"
- }
- ],
- "description": "Library for handling version information and constraints",
- "support": {
- "issues": "https://github.com/phar-io/version/issues",
- "source": "https://github.com/phar-io/version/tree/3.2.1"
- },
- "time": "2022-02-21T01:04:05+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",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
- "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
- "shasum": ""
- },
- "require": {
- "ext-filter": "*",
- "php": "^7.2 || ^8.0",
- "phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.3",
- "webmozart/assert": "^1.9.1"
- },
- "require-dev": {
- "mockery/mockery": "~1.3.2",
- "psalm/phar": "^4.8"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- },
- {
- "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.6.1",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "77a32518733312af16a44300404e945338981de3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
- "reference": "77a32518733312af16a44300404e945338981de3",
- "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"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- }
- ],
- "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
- "support": {
- "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
- },
- "time": "2022-03-15T21:29:03+00:00"
- },
- {
- "name": "phpspec/prophecy",
- "version": "v1.15.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
- "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.2",
- "php": "^7.2 || ~8.0, <8.2",
- "phpdocumentor/reflection-docblock": "^5.2",
- "sebastian/comparator": "^3.0 || ^4.0",
- "sebastian/recursion-context": "^3.0 || ^4.0"
- },
- "require-dev": {
- "phpspec/phpspec": "^6.0 || ^7.0",
- "phpunit/phpunit": "^8.0 || ^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Prophecy\\": "src/Prophecy"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- },
- {
- "name": "Marcello Duarte",
- "email": "marcello.duarte@gmail.com"
- }
- ],
- "description": "Highly opinionated mocking framework for PHP 5.3+",
- "homepage": "https://github.com/phpspec/prophecy",
- "keywords": [
- "Double",
- "Dummy",
- "fake",
- "mock",
- "spy",
- "stub"
+ }
],
+ "description": "Library for handling version information and constraints",
"support": {
- "issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
},
- "time": "2021-12-08T12:19:24+00:00"
+ "time": "2022-02-21T01:04:05+00:00"
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.4.5",
+ "version": "1.24.2",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "129a63b3bc7caeb593c224c41f420675e63cfefc"
+ "reference": "bcad8d995980440892759db0c32acae7c8e79442"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/129a63b3bc7caeb593c224c41f420675e63cfefc",
- "reference": "129a63b3bc7caeb593c224c41f420675e63cfefc",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bcad8d995980440892759db0c32acae7c8e79442",
+ "reference": "bcad8d995980440892759db0c32acae7c8e79442",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
+ "doctrine/annotations": "^2.0",
+ "nikic/php-parser": "^4.15",
"php-parallel-lint/php-parallel-lint": "^1.2",
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^1.5",
+ "phpstan/phpstan-phpunit": "^1.1",
"phpstan/phpstan-strict-rules": "^1.0",
"phpunit/phpunit": "^9.5",
"symfony/process": "^5.2"
@@ -4537,22 +4085,22 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.4.5"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.2"
},
- "time": "2022-04-22T11:11:01+00:00"
+ "time": "2023-09-26T12:28:12+00:00"
},
{
"name": "phpstan/phpstan",
- "version": "0.12.99",
+ "version": "0.12.100",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7"
+ "reference": "48236ddf823547081b2b153d1cd2994b784328c3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b4d40f1d759942f523be267a1bab6884f46ca3f7",
- "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/48236ddf823547081b2b153d1cd2994b784328c3",
+ "reference": "48236ddf823547081b2b153d1cd2994b784328c3",
"shasum": ""
},
"require": {
@@ -4583,7 +4131,7 @@
"description": "PHPStan - PHP Static Analysis Tool",
"support": {
"issues": "https://github.com/phpstan/phpstan/issues",
- "source": "https://github.com/phpstan/phpstan/tree/0.12.99"
+ "source": "https://github.com/phpstan/phpstan/tree/0.12.100"
},
"funding": [
{
@@ -4594,36 +4142,32 @@
"url": "https://github.com/phpstan",
"type": "github"
},
- {
- "url": "https://www.patreon.com/phpstan",
- "type": "patreon"
- },
{
"url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
"type": "tidelift"
}
],
- "time": "2021-09-12T20:09:55+00:00"
+ "time": "2022-11-01T09:52:08+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "9.2.15",
+ "version": "9.2.29",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
+ "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
- "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76",
+ "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^4.13.0",
+ "nikic/php-parser": "^4.15",
"php": ">=7.3",
"phpunit/php-file-iterator": "^3.0.3",
"phpunit/php-text-template": "^2.0.2",
@@ -4638,8 +4182,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": {
@@ -4672,7 +4216,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.29"
},
"funding": [
{
@@ -4680,7 +4225,7 @@
"type": "github"
}
],
- "time": "2022-03-07T09:28:20+00:00"
+ "time": "2023-09-19T04:57:46+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -4925,20 +4470,20 @@
},
{
"name": "phpunit/phpunit",
- "version": "9.5.20",
+ "version": "9.6.13",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba"
+ "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba",
- "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f3d767f7f9e191eab4189abe41ab37797e30b1be",
+ "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be",
"shasum": ""
},
"require": {
- "doctrine/instantiator": "^1.3.1",
+ "doctrine/instantiator": "^1.3.1 || ^2",
"ext-dom": "*",
"ext-json": "*",
"ext-libxml": "*",
@@ -4949,31 +4494,26 @@
"phar-io/manifest": "^2.0.3",
"phar-io/version": "^3.0.2",
"php": ">=7.3",
- "phpspec/prophecy": "^1.12.1",
- "phpunit/php-code-coverage": "^9.2.13",
+ "phpunit/php-code-coverage": "^9.2.28",
"phpunit/php-file-iterator": "^3.0.5",
"phpunit/php-invoker": "^3.1.1",
"phpunit/php-text-template": "^2.0.3",
"phpunit/php-timer": "^5.0.2",
"sebastian/cli-parser": "^1.0.1",
"sebastian/code-unit": "^1.0.6",
- "sebastian/comparator": "^4.0.5",
+ "sebastian/comparator": "^4.0.8",
"sebastian/diff": "^4.0.3",
"sebastian/environment": "^5.1.3",
- "sebastian/exporter": "^4.0.3",
+ "sebastian/exporter": "^4.0.5",
"sebastian/global-state": "^5.0.1",
"sebastian/object-enumerator": "^4.0.3",
"sebastian/resource-operations": "^3.0.3",
- "sebastian/type": "^3.0",
+ "sebastian/type": "^3.2",
"sebastian/version": "^3.0.2"
},
- "require-dev": {
- "ext-pdo": "*",
- "phpspec/prophecy-phpunit": "^2.0.1"
- },
"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"
@@ -4981,7 +4521,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "9.5-dev"
+ "dev-master": "9.6-dev"
}
},
"autoload": {
@@ -5012,7 +4552,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20"
+ "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.13"
},
"funding": [
{
@@ -5022,22 +4563,26 @@
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
+ "type": "tidelift"
}
],
- "time": "2022-04-01T12:37:26+00:00"
+ "time": "2023-09-19T05:39:22+00:00"
},
{
"name": "psy/psysh",
- "version": "v0.11.2",
+ "version": "v0.11.21",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "7f7da640d68b9c9fec819caae7c744a213df6514"
+ "reference": "bcb22101107f3bf770523b65630c9d547f60c540"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/7f7da640d68b9c9fec819caae7c744a213df6514",
- "reference": "7f7da640d68b9c9fec819caae7c744a213df6514",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/bcb22101107f3bf770523b65630c9d547f60c540",
+ "reference": "bcb22101107f3bf770523b65630c9d547f60c540",
"shasum": ""
},
"require": {
@@ -5052,15 +4597,13 @@
"symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.2",
- "hoa/console": "3.17.05.02"
+ "bamarni/composer-bin-plugin": "^1.2"
},
"suggest": {
"ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
"ext-pdo-sqlite": "The doc command requires SQLite to work.",
"ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
- "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
- "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
+ "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history."
},
"bin": [
"bin/psysh"
@@ -5069,6 +4612,10 @@
"extra": {
"branch-alias": {
"dev-main": "0.11.x-dev"
+ },
+ "bamarni-bin": {
+ "bin-links": false,
+ "forward-command": false
}
},
"autoload": {
@@ -5100,29 +4647,30 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.11.2"
+ "source": "https://github.com/bobthecow/psysh/tree/v0.11.21"
},
- "time": "2022-02-28T15:28:54+00:00"
+ "time": "2023-09-17T21:15:54+00:00"
},
{
"name": "react/promise",
- "version": "v2.9.0",
+ "version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise.git",
- "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910"
+ "reference": "c86753c76fd3be465d93b308f18d189f01a22be4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910",
- "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/c86753c76fd3be465d93b308f18d189f01a22be4",
+ "reference": "c86753c76fd3be465d93b308f18d189f01a22be4",
"shasum": ""
},
"require": {
- "php": ">=5.4.0"
+ "php": ">=7.1.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
+ "phpstan/phpstan": "1.10.20 || 1.4.10",
+ "phpunit/phpunit": "^9.5 || ^7.5"
},
"type": "library",
"autoload": {
@@ -5166,19 +4714,15 @@
],
"support": {
"issues": "https://github.com/reactphp/promise/issues",
- "source": "https://github.com/reactphp/promise/tree/v2.9.0"
+ "source": "https://github.com/reactphp/promise/tree/v3.0.0"
},
"funding": [
{
- "url": "https://github.com/WyriHaximus",
- "type": "github"
- },
- {
- "url": "https://github.com/clue",
- "type": "github"
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
}
],
- "time": "2022-02-11T10:27:51+00:00"
+ "time": "2023-07-11T16:12:49+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -5349,16 +4893,16 @@
},
{
"name": "sebastian/comparator",
- "version": "4.0.6",
+ "version": "4.0.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
+ "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
- "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
+ "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
"shasum": ""
},
"require": {
@@ -5411,7 +4955,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
},
"funding": [
{
@@ -5419,7 +4963,7 @@
"type": "github"
}
],
- "time": "2020-10-26T15:49:45+00:00"
+ "time": "2022-09-14T12:41:17+00:00"
},
{
"name": "sebastian/complexity",
@@ -5480,16 +5024,16 @@
},
{
"name": "sebastian/diff",
- "version": "4.0.4",
+ "version": "4.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
+ "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
- "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131",
+ "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131",
"shasum": ""
},
"require": {
@@ -5534,7 +5078,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
+ "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5"
},
"funding": [
{
@@ -5542,20 +5086,20 @@
"type": "github"
}
],
- "time": "2020-10-26T13:10:38+00:00"
+ "time": "2023-05-07T05:35:17+00:00"
},
{
"name": "sebastian/environment",
- "version": "5.1.4",
+ "version": "5.1.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7"
+ "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7",
- "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+ "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
"shasum": ""
},
"require": {
@@ -5597,7 +5141,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4"
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
},
"funding": [
{
@@ -5605,20 +5149,20 @@
"type": "github"
}
],
- "time": "2022-04-03T09:37:03+00:00"
+ "time": "2023-02-03T06:03:51+00:00"
},
{
"name": "sebastian/exporter",
- "version": "4.0.4",
+ "version": "4.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
+ "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
- "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
+ "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
"shasum": ""
},
"require": {
@@ -5674,7 +5218,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5"
},
"funding": [
{
@@ -5682,20 +5226,20 @@
"type": "github"
}
],
- "time": "2021-11-11T14:18:36+00:00"
+ "time": "2022-09-14T06:03:37+00:00"
},
{
"name": "sebastian/global-state",
- "version": "5.0.5",
+ "version": "5.0.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
+ "reference": "bde739e7565280bda77be70044ac1047bc007e34"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
- "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34",
+ "reference": "bde739e7565280bda77be70044ac1047bc007e34",
"shasum": ""
},
"require": {
@@ -5738,7 +5282,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6"
},
"funding": [
{
@@ -5746,7 +5290,7 @@
"type": "github"
}
],
- "time": "2022-02-14T08:28:10+00:00"
+ "time": "2023-08-02T09:26:13+00:00"
},
{
"name": "sebastian/lines-of-code",
@@ -5919,16 +5463,16 @@
},
{
"name": "sebastian/recursion-context",
- "version": "4.0.4",
+ "version": "4.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
+ "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
- "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+ "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
"shasum": ""
},
"require": {
@@ -5967,10 +5511,10 @@
}
],
"description": "Provides functionality to recursively process PHP variables",
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
},
"funding": [
{
@@ -5978,7 +5522,7 @@
"type": "github"
}
],
- "time": "2020-10-26T13:17:30+00:00"
+ "time": "2023-02-03T06:07:39+00:00"
},
{
"name": "sebastian/resource-operations",
@@ -6037,16 +5581,16 @@
},
{
"name": "sebastian/type",
- "version": "3.0.0",
+ "version": "3.2.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
- "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad"
+ "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
- "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+ "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
"shasum": ""
},
"require": {
@@ -6058,7 +5602,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.2-dev"
}
},
"autoload": {
@@ -6081,7 +5625,7 @@
"homepage": "https://github.com/sebastianbergmann/type",
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/3.0.0"
+ "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
},
"funding": [
{
@@ -6089,7 +5633,7 @@
"type": "github"
}
],
- "time": "2022-03-15T09:54:48+00:00"
+ "time": "2023-02-03T06:13:03+00:00"
},
{
"name": "sebastian/version",
@@ -6146,16 +5690,16 @@
},
{
"name": "seld/jsonlint",
- "version": "1.9.0",
+ "version": "1.10.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/jsonlint.git",
- "reference": "4211420d25eba80712bff236a98960ef68b866b7"
+ "reference": "594fd6462aad8ecee0b45ca5045acea4776667f1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7",
- "reference": "4211420d25eba80712bff236a98960ef68b866b7",
+ "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/594fd6462aad8ecee0b45ca5045acea4776667f1",
+ "reference": "594fd6462aad8ecee0b45ca5045acea4776667f1",
"shasum": ""
},
"require": {
@@ -6193,48 +5737,353 @@
"validator"
],
"support": {
- "issues": "https://github.com/Seldaek/jsonlint/issues",
- "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0"
+ "issues": "https://github.com/Seldaek/jsonlint/issues",
+ "source": "https://github.com/Seldaek/jsonlint/tree/1.10.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Seldaek",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-05-11T13:16:46+00:00"
+ },
+ {
+ "name": "seld/phar-utils",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/phar-utils.git",
+ "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/ea2f4014f163c1be4c601b9b7bd6af81ba8d701c",
+ "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Seld\\PharUtils\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be"
+ }
+ ],
+ "description": "PHAR file format utilities, for when PHP phars you up",
+ "keywords": [
+ "phar"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/phar-utils/issues",
+ "source": "https://github.com/Seldaek/phar-utils/tree/1.2.1"
+ },
+ "time": "2022-08-31T10:31:18+00:00"
+ },
+ {
+ "name": "seld/signal-handler",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/signal-handler.git",
+ "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98",
+ "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1",
+ "phpstan/phpstan-deprecation-rules": "^1.0",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpstan/phpstan-strict-rules": "^1.3",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23",
+ "psr/log": "^1 || ^2 || ^3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Seld\\Signal\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Simple unix signal handler that silently fails where signals are not supported for easy cross-platform development",
+ "keywords": [
+ "posix",
+ "sigint",
+ "signal",
+ "sigterm",
+ "unix"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/signal-handler/issues",
+ "source": "https://github.com/Seldaek/signal-handler/tree/2.0.2"
+ },
+ "time": "2023-09-03T09:24:00+00:00"
+ },
+ {
+ "name": "slevomat/coding-standard",
+ "version": "8.13.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/slevomat/coding-standard.git",
+ "reference": "4b2af2fb17773656d02fbfb5d18024ebd19fe322"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/4b2af2fb17773656d02fbfb5d18024ebd19fe322",
+ "reference": "4b2af2fb17773656d02fbfb5d18024ebd19fe322",
+ "shasum": ""
+ },
+ "require": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0",
+ "php": "^7.2 || ^8.0",
+ "phpstan/phpdoc-parser": "^1.23.0",
+ "squizlabs/php_codesniffer": "^3.7.1"
+ },
+ "require-dev": {
+ "phing/phing": "2.17.4",
+ "php-parallel-lint/php-parallel-lint": "1.3.2",
+ "phpstan/phpstan": "1.10.26",
+ "phpstan/phpstan-deprecation-rules": "1.1.3",
+ "phpstan/phpstan-phpunit": "1.3.13",
+ "phpstan/phpstan-strict-rules": "1.5.1",
+ "phpunit/phpunit": "7.5.20|8.5.21|9.6.8|10.2.6"
+ },
+ "type": "phpcodesniffer-standard",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "SlevomatCodingStandard\\": "SlevomatCodingStandard/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.",
+ "keywords": [
+ "dev",
+ "phpcs"
+ ],
+ "support": {
+ "issues": "https://github.com/slevomat/coding-standard/issues",
+ "source": "https://github.com/slevomat/coding-standard/tree/8.13.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/kukulich",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-07-25T10:28:55+00:00"
+ },
+ {
+ "name": "squizlabs/php_codesniffer",
+ "version": "3.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
+ "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879",
+ "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879",
+ "shasum": ""
+ },
+ "require": {
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
+ },
+ "bin": [
+ "bin/phpcs",
+ "bin/phpcbf"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Greg Sherwood",
+ "role": "lead"
+ }
+ ],
+ "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+ "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
+ "keywords": [
+ "phpcs",
+ "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": "2023-02-22T23:07:41+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v6.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e",
+ "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "symfony/filesystem": "^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v6.3.3"
},
"funding": [
{
- "url": "https://github.com/Seldaek",
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2022-04-01T13:37:23+00:00"
+ "time": "2023-07-31T08:31:44+00:00"
},
{
- "name": "seld/phar-utils",
- "version": "1.2.0",
+ "name": "symfony/polyfill-php73",
+ "version": "v1.28.0",
"source": {
"type": "git",
- "url": "https://github.com/Seldaek/phar-utils.git",
- "reference": "9f3452c93ff423469c0d56450431562ca423dcee"
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/9f3452c93ff423469c0d56450431562ca423dcee",
- "reference": "9f3452c93ff423469c0d56450431562ca423dcee",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5",
+ "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5",
"shasum": ""
},
"require": {
- "php": ">=5.3"
+ "php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.x-dev"
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
"psr-4": {
- "Seld\\PharUtils\\": "src/"
- }
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -6242,163 +6091,160 @@
],
"authors": [
{
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "PHAR file format utilities, for when PHP phars you up",
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
"keywords": [
- "phar"
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
],
"support": {
- "issues": "https://github.com/Seldaek/phar-utils/issues",
- "source": "https://github.com/Seldaek/phar-utils/tree/1.2.0"
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.28.0"
},
- "time": "2021-12-10T11:20:11+00:00"
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-01-26T09:26:14+00:00"
},
{
- "name": "slevomat/coding-standard",
- "version": "7.1",
+ "name": "symfony/polyfill-php80",
+ "version": "v1.28.0",
"source": {
"type": "git",
- "url": "https://github.com/slevomat/coding-standard.git",
- "reference": "b521bd358b5f7a7d69e9637fd139e036d8adeb6f"
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/b521bd358b5f7a7d69e9637fd139e036d8adeb6f",
- "reference": "b521bd358b5f7a7d69e9637fd139e036d8adeb6f",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
+ "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
"shasum": ""
},
"require": {
- "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7",
- "php": "^7.2 || ^8.0",
- "phpstan/phpdoc-parser": "^1.4.1",
- "squizlabs/php_codesniffer": "^3.6.2"
- },
- "require-dev": {
- "phing/phing": "2.17.2",
- "php-parallel-lint/php-parallel-lint": "1.3.2",
- "phpstan/phpstan": "1.4.10|1.5.2",
- "phpstan/phpstan-deprecation-rules": "1.0.0",
- "phpstan/phpstan-phpunit": "1.0.0|1.1.0",
- "phpstan/phpstan-strict-rules": "1.1.0",
- "phpunit/phpunit": "7.5.20|8.5.21|9.5.19"
+ "php": ">=7.1"
},
- "type": "phpcodesniffer-standard",
+ "type": "library",
"extra": {
"branch-alias": {
- "dev-master": "7.x-dev"
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
"psr-4": {
- "SlevomatCodingStandard\\": "SlevomatCodingStandard"
- }
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.",
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
"support": {
- "issues": "https://github.com/slevomat/coding-standard/issues",
- "source": "https://github.com/slevomat/coding-standard/tree/7.1"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0"
},
"funding": [
{
- "url": "https://github.com/kukulich",
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard",
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2022-03-29T12:44:16+00:00"
+ "time": "2023-01-26T09:26:14+00:00"
},
{
- "name": "squizlabs/php_codesniffer",
- "version": "3.6.2",
+ "name": "symfony/polyfill-php81",
+ "version": "v1.28.0",
"source": {
"type": "git",
- "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
- "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a"
+ "url": "https://github.com/symfony/polyfill-php81.git",
+ "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a",
- "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a",
+ "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b",
+ "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b",
"shasum": ""
},
"require": {
- "ext-simplexml": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": ">=5.4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
+ "php": ">=7.1"
},
- "bin": [
- "bin/phpcs",
- "bin/phpcbf"
- ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.x-dev"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Greg Sherwood",
- "role": "lead"
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
}
- ],
- "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
- "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
- "keywords": [
- "phpcs",
- "standards"
- ],
- "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": "2021-12-12T21:44:58+00:00"
- },
- {
- "name": "symfony/finder",
- "version": "v5.4.3",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/finder.git",
- "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d",
- "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-php80": "^1.16"
},
- "type": "library",
"autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
"psr-4": {
- "Symfony\\Component\\Finder\\": ""
+ "Symfony\\Polyfill\\Php81\\": ""
},
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -6407,18 +6253,24 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Finds files and directories via an intuitive fluent interface",
+ "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
"homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
"support": {
- "source": "https://github.com/symfony/finder/tree/v5.4.3"
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0"
},
"funding": [
{
@@ -6434,25 +6286,24 @@
"type": "tidelift"
}
],
- "time": "2022-01-26T16:34:36+00:00"
+ "time": "2023-01-26T09:26:14+00:00"
},
{
"name": "symfony/process",
- "version": "v5.4.7",
+ "version": "v6.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "38a44b2517b470a436e1c944bf9b9ba3961137fb"
+ "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/38a44b2517b470a436e1c944bf9b9ba3961137fb",
- "reference": "38a44b2517b470a436e1c944bf9b9ba3961137fb",
+ "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54",
+ "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=8.1"
},
"type": "library",
"autoload": {
@@ -6480,7 +6331,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v5.4.7"
+ "source": "https://github.com/symfony/process/tree/v6.3.4"
},
"funding": [
{
@@ -6496,43 +6347,38 @@
"type": "tidelift"
}
],
- "time": "2022-03-18T16:18:52+00:00"
+ "time": "2023-08-07T10:39:22+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v5.4.6",
+ "version": "v6.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0"
+ "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/294e9da6e2e0dd404e983daa5aa74253d92c05d0",
- "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2027be14f8ae8eae999ceadebcda5b4909b81d45",
+ "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "~1.0"
},
"conflict": {
- "phpunit/phpunit": "<5.4.3",
- "symfony/console": "<4.4"
+ "symfony/console": "<5.4"
},
"require-dev": {
"ext-iconv": "*",
- "symfony/console": "^4.4|^5.0|^6.0",
- "symfony/process": "^4.4|^5.0|^6.0",
- "symfony/uid": "^5.1|^6.0",
+ "symfony/console": "^5.4|^6.0",
+ "symfony/http-kernel": "^5.4|^6.0",
+ "symfony/process": "^5.4|^6.0",
+ "symfony/uid": "^5.4|^6.0",
"twig/twig": "^2.13|^3.0.4"
},
- "suggest": {
- "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
- "ext-intl": "To show region name in time zone dump",
- "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
- },
"bin": [
"Resources/bin/var-dump-server"
],
@@ -6569,7 +6415,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v5.4.6"
+ "source": "https://github.com/symfony/var-dumper/tree/v6.3.4"
},
"funding": [
{
@@ -6585,7 +6431,7 @@
"type": "tidelift"
}
],
- "time": "2022-03-02T12:42:23+00:00"
+ "time": "2023-08-24T14:51:05+00:00"
},
{
"name": "theseer/tokenizer",
@@ -6639,16 +6485,16 @@
},
{
"name": "twig/markdown-extra",
- "version": "v3.3.8",
+ "version": "v3.7.1",
"source": {
"type": "git",
"url": "https://github.com/twigphp/markdown-extra.git",
- "reference": "25ed505b6ffd3b00f922ca682489dfbaf44eb1f7"
+ "reference": "83dfa86a0379f784ea30bdb9c15a356b8aabf780"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/25ed505b6ffd3b00f922ca682489dfbaf44eb1f7",
- "reference": "25ed505b6ffd3b00f922ca682489dfbaf44eb1f7",
+ "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/83dfa86a0379f784ea30bdb9c15a356b8aabf780",
+ "reference": "83dfa86a0379f784ea30bdb9c15a356b8aabf780",
"shasum": ""
},
"require": {
@@ -6659,15 +6505,10 @@
"erusev/parsedown": "^1.7",
"league/commonmark": "^1.0|^2.0",
"league/html-to-markdown": "^4.8|^5.0",
- "michelf/php-markdown": "^1.8",
- "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
+ "michelf/php-markdown": "^1.8|^2.0",
+ "symfony/phpunit-bridge": "^5.4|^6.3"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.2-dev"
- }
- },
"autoload": {
"psr-4": {
"Twig\\Extra\\Markdown\\": ""
@@ -6696,7 +6537,7 @@
"twig"
],
"support": {
- "source": "https://github.com/twigphp/markdown-extra/tree/v3.3.8"
+ "source": "https://github.com/twigphp/markdown-extra/tree/v3.7.1"
},
"funding": [
{
@@ -6708,20 +6549,20 @@
"type": "tidelift"
}
],
- "time": "2022-01-29T15:34:05+00:00"
+ "time": "2023-07-29T15:34:56+00:00"
},
{
"name": "twig/twig",
- "version": "v3.3.10",
+ "version": "v3.7.1",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
- "reference": "8442df056c51b706793adf80a9fd363406dd3674"
+ "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/8442df056c51b706793adf80a9fd363406dd3674",
- "reference": "8442df056c51b706793adf80a9fd363406dd3674",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/a0ce373a0ca3bf6c64b9e3e2124aca502ba39554",
+ "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554",
"shasum": ""
},
"require": {
@@ -6730,15 +6571,10 @@
"symfony/polyfill-mbstring": "^1.3"
},
"require-dev": {
- "psr/container": "^1.0",
- "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
+ "psr/container": "^1.0|^2.0",
+ "symfony/phpunit-bridge": "^5.4.9|^6.3"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.3-dev"
- }
- },
"autoload": {
"psr-4": {
"Twig\\": "src/"
@@ -6772,7 +6608,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
- "source": "https://github.com/twigphp/Twig/tree/v3.3.10"
+ "source": "https://github.com/twigphp/Twig/tree/v3.7.1"
},
"funding": [
{
@@ -6784,65 +6620,7 @@
"type": "tidelift"
}
],
- "time": "2022-04-06T06:47:41+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"
+ "time": "2023-08-28T11:09:02+00:00"
}
],
"aliases": [],
@@ -6854,5 +6632,5 @@
"php": ">=7.3"
},
"platform-dev": [],
- "plugin-api-version": "2.2.0"
+ "plugin-api-version": "2.3.0"
}
diff --git a/app/config/VERSION b/app/config/VERSION
index 524cb5524..26aaba0e8 100644
--- a/app/config/VERSION
+++ b/app/config/VERSION
@@ -1 +1 @@
-1.1.1
+1.2.0
diff --git a/app/config/app.php b/app/config/app.php
index 8ab241079..cb4993ef9 100644
--- a/app/config/app.php
+++ b/app/config/app.php
@@ -207,7 +207,7 @@
*/
'Error' => [
'errorLevel' => E_ALL,
- 'exceptionRenderer' => ExceptionRenderer::class,
+ //'exceptionRenderer' => ExceptionRenderer::class,
'skipLog' => [],
'log' => true,
'trace' => true,
diff --git a/app/config/bootstrap.php b/app/config/bootstrap.php
index f93d37b82..131f566c8 100644
--- a/app/config/bootstrap.php
+++ b/app/config/bootstrap.php
@@ -37,8 +37,8 @@
use Cake\Database\TypeFactory;
use Cake\Database\Type\StringType;
use Cake\Datasource\ConnectionManager;
-use Cake\Error\ConsoleErrorHandler;
-use Cake\Error\ErrorHandler;
+use Cake\Error\ErrorTrap;
+use Cake\Error\ExceptionTrap;
use Cake\Http\ServerRequest;
use Cake\Log\Log;
use Cake\Mailer\Mailer;
@@ -128,11 +128,8 @@
* Register application error and exception handlers.
*/
$isCli = PHP_SAPI === 'cli';
-if ($isCli) {
- (new ConsoleErrorHandler(Configure::read('Error')))->register();
-} else {
- (new ErrorHandler(Configure::read('Error')))->register();
-}
+(new ErrorTrap(Configure::read('Error')))->register();
+(new ExceptionTrap(Configure::read('Error')))->register();
/*
* Include the CLI bootstrap overrides.
diff --git a/app/config/schema/schema.json b/app/config/schema/schema.json
index c452fa493..ab55b0b68 100644
--- a/app/config/schema/schema.json
+++ b/app/config/schema/schema.json
@@ -162,7 +162,6 @@
"index_display": { "type": "boolean" },
"alphanumeric": { "type": "boolean" },
"case_sensitive": { "type": "boolean" },
- "invalidates": { "type": "boolean" },
"null_equivalents": { "type": "boolean" },
"search_distance": { "type": "integer" },
"search_exact": { "type": "boolean" },
@@ -230,6 +229,7 @@
"id": {},
"matchgrid_id": {},
"label": { "type": "string", "size": 64 },
+ "trust_mode": { "type": "string", "size": 2 },
"resolution_mode": { "type": "string", "size": 2 },
"notification_email": { "type": "string", "size": 80 }
},
diff --git a/app/resources/locales/en_US/default.po b/app/resources/locales/en_US/default.po
index c23fc6236..4893d51d8 100644
--- a/app/resources/locales/en_US/default.po
+++ b/app/resources/locales/en_US/default.po
@@ -53,6 +53,9 @@ msgid "match.banner.api_users.platform"
msgstr "This page is for configuring Platform API Users, which have full read/write access to the entire platform. To create API Users restricted to a given Matchgrid, go to the management page for the desired Matchgrid and select API Users from there.
The Match API is available at {0}"
### Command Line text
+msgid "match.cmd.arg.version"
+msgstr "Version to upgrade to (default: current RELEASE)"
+
msgid "match.cmd.bl.index.off"
msgstr "Dropping matchgrid indexes..."
@@ -83,12 +86,21 @@ msgstr "Username of initial platform administrator"
msgid "match.cmd.opt.force"
msgstr "Force a rerun of setup (only if you know what you are doing)"
+msgid "match.cmd.opt.forcecurrent"
+msgstr "Force the specified current version -- ADVANCED USERS ONLY"
+
msgid "match.cmd.opt.not"
msgstr "Calculate changes but do not apply"
msgid "match.cmd.opt.skip-match"
msgstr "Do not run Match Rules while processing records"
+msgid "match.cmd.opt.skipdatabase"
+msgstr "Skip database schema update -- ADVANCED USERS ONLY"
+
+msgid "match.cmd.opt.skipvalidation"
+msgstr "Skip version validation -- ADVANCED USERS ONLY"
+
msgid "match.cmd.se.admin"
msgstr "- Creating initial administrator permission"
@@ -101,6 +113,24 @@ msgstr "Setup appears to have already run"
msgid "match.cmd.se.salt"
msgstr "- Generating salt file"
+msgid "match.cmd.ug.current"
+msgstr "Current version: {0}"
+
+msgid "match.cmd.ug.ok"
+msgstr "Upgrade completed successfully"
+
+msgid "match.cmd.ug.post"
+msgstr "Executing post-database step ({0})"
+
+msgid "match.cmd.ug.pre"
+msgstr "Executing pre-database step ({0})"
+
+msgid "match.cmd.ug.target"
+msgstr "Target version: {0}"
+
+msgid "match.cmd.ug.120.trust_mode"
+msgstr "- Populating default values for trust_mode"
+
### Controllers (Models)
msgid "match.ct.ApiUsers"
msgstr "{0,plural,=1{API User} other{API Users}}"
@@ -230,6 +260,9 @@ msgstr "Exact"
msgid "match.en.SearchTypeEnum.M"
msgstr "Mapping"
+msgid "match.en.SearchTypeEnum.IN"
+msgstr "Invalidate"
+
msgid "match.en.SearchTypeEnum.X"
msgstr "Skip"
@@ -245,6 +278,15 @@ msgstr "Suspended"
msgid "match.en.StatusEnum.S.badge"
msgstr "Danger"
+msgid "match.en.TrustModeEnum.P"
+msgstr "Potential"
+
+msgid "match.en.TrustModeEnum.S"
+msgstr "Standard"
+
+msgid "match.en.TrustModeEnum.T"
+msgstr "Trust"
+
### Error Messages
msgid "match.er.args"
msgstr "Incorrect arguments provided to {0}"
@@ -258,6 +300,21 @@ msgstr "Error at line {0}: {1}"
msgid "match.er.build"
msgstr "Error applying matchgrid schema: {0}"
+msgid "match.er.cmd.ug.blocked"
+msgstr "Cannot automatically upgrade past version {0}. Please upgrade to that version first."
+
+msgid "match.er.cmd.ug.fail"
+msgstr "ERROR: Upgrade failed"
+
+msgid "match.er.cmd.ug.order"
+msgstr "Target version is before current version (cannot downgrade)"
+
+msgid "match.er.cmd.ug.same"
+msgstr "Current and target versions are the same"
+
+msgid "match.er.cmd.ug.version"
+msgstr "Unknown version \"{0}\""
+
msgid "match.er.db.connect"
msgstr "Failed to connect to database: {0}"
@@ -438,9 +495,6 @@ msgstr "ID"
msgid "match.fd.index_display"
msgstr "Display Field in Matchgrid Index"
-msgid "match.fd.invalidates"
-msgstr "Invalidates"
-
msgid "match.fd.label"
msgstr "Label"
@@ -561,6 +615,9 @@ msgstr "Table Name"
msgid "match.fd.table_name.desc"
msgstr "Unique name for matchgrid, must be a valid SQL identifier (will be prefixed mg_ for actual table name)"
+msgid "match.fd.trust_mode"
+msgstr "Trust Mode"
+
msgid "match.fd.url"
msgstr "URL"
@@ -813,3 +870,6 @@ msgstr "Matchgrid: {0}"
msgid "match.ti.properties"
msgstr "Properties"
+
+msgid "match.ti.user"
+msgstr "User"
diff --git a/app/src/Command/UpgradeVersionCommand.php b/app/src/Command/UpgradeVersionCommand.php
new file mode 100644
index 000000000..11fafc18d
--- /dev/null
+++ b/app/src/Command/UpgradeVersionCommand.php
@@ -0,0 +1,307 @@
+ ['block' => false],
+ "1.1.0" => ['block' => false],
+ "1.2.0" => ['block' => false, 'post' => 'post120']
+ ];
+
+ // ConsoleIo
+ protected $io = null;
+
+ /**
+ * Register command specific options.
+ *
+ * @since COmanage Match v1.2.0
+ * @param ConsoleOptionParser $parser Console Option Parser
+ * @return ConsoleOptionParser Console Option Parser
+ */
+
+ public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionParser {
+ $parser->addArgument(
+ 'version',
+ [
+ 'help' => __('match.cmd.arg.version'),
+ 'required' => false
+ ]
+ )->addOption(
+ 'forcecurrent',
+ [
+ 'short' => 'f',
+ 'help' => __('match.cmd.opt.forcecurrent'),
+ 'boolean' => false,
+ 'default' => false
+ ]
+ )->addOption(
+ 'skipdatabase',
+ [
+ 'short' => 'D',
+ 'help' => __('match.cmd.opt.skipdatabase'),
+ 'boolean' => true,
+ 'default' => false
+ ]
+ )->addOption(
+ 'skipvalidation',
+ [
+ 'short' => 'X',
+ 'help' => __('match.cmd.opt.skipvalidation'),
+ 'boolean' => false,
+ 'default' => false
+ ]
+ );
+
+ return $parser;
+ }
+
+ /**
+ * Execute the Upgrade Version Command.
+ *
+ * @since COmanage Match v1.0.0
+ * @param Arguments $args Command Arguments
+ * @param ConsoleIo $io Console IO
+ */
+
+ public function execute(Arguments $args, ConsoleIo $io) {
+ global $argv;
+
+ $this->io = $io;
+
+ // Determine the (PHP) code version (or use the one passed in)
+ $targetVersion = $args->getArgument('version');
+
+ if(!$targetVersion) {
+ // Read the current release from the VERSION file
+ $versionFile = CONFIG . DS . "VERSION";
+
+ $targetVersion = rtrim(file_get_contents($versionFile));
+ }
+
+ // Pull the current database version (or use the one passed in)
+ $Meta = $this->getTableLocator()->get('Meta');
+ $currentVersion = $args->getOption('forcecurrent');
+
+ if(!$currentVersion) {
+ $currentVersion = $Meta->getUpgradeVersion();
+ }
+
+ $io->out(__('match.cmd.ug.current', [$currentVersion]));
+ $io->out(__('match.cmd.ug.target', [$targetVersion]));
+
+ if(!$args->getOption('skipvalidation')) {
+ // Validate the version path
+ try {
+ $this->validateVersions($currentVersion, $targetVersion);
+ }
+ catch(\Exception $e) {
+ $io->out($e->getMessage());
+ $io->out(__('match.er.cmd.ug.fail'));
+ return;
+ }
+ }
+
+ // Run appropriate pre-database steps
+
+ $fromFound = false;
+
+ foreach($this->versions as $version => $params) {
+ if($version == $currentVersion) {
+ // Note we don't actually want to run the steps for $currentVersion
+ $fromFound = true;
+ continue;
+ }
+
+ if(!$fromFound) {
+ // We haven't reached the from version yet
+ continue;
+ }
+
+ if(isset($params['pre'])) {
+ $fn = $params['pre'];
+
+ $io->out(__('match.cmd.ug.post', [$fn]));
+ $this->$fn();
+ }
+
+ if($version == $targetVersion) {
+ // We're done
+ break;
+ }
+ }
+
+ if(!$args->getOption('skipdatabase')) {
+ // Call database shell
+ $this->executeCommand(DatabaseCommand::class);
+ }
+
+ // Run appropriate post-database steps
+
+ $fromFound = false;
+
+ foreach($this->versions as $version => $params) {
+ if($version == $currentVersion) {
+ // Note we don't actually want to run the steps for $currentVersion
+ $fromFound = true;
+ continue;
+ }
+
+ if(!$fromFound) {
+ // We haven't reached the from version yet
+ continue;
+ }
+
+ if(isset($params['post'])) {
+ $fn = $params['post'];
+
+ $io->out(__('match.cmd.ug.post', [$fn]));
+ $this->$fn();
+ }
+
+ if($version == $targetVersion) {
+ // We're done
+ break;
+ }
+ }
+
+ // Now that we're done, update the current version
+ $Meta->setUpgradeVersion($targetVersion);
+
+ $io->out(__('match.cmd.ug.ok'));
+
+ return;
+ }
+
+ /**
+ * Process post-upgrade steps for v1.2.0.
+ *
+ * @since COmanage Match v1.2.0
+ */
+
+ protected function post120() {
+ // Set all Systems of Record to operate in Standard Trust Mode, which is
+ // the effective behavior prior to v1.2.0.
+
+ $this->io->out(__('match.cmd.ug.120.trust_mode'));
+ $this->setNewDefault('SystemsOfRecord', 'trust_mode', 'S');
+ }
+
+ /**
+ * Set a new value for all rows in a column. $value will replace any null
+ * entries, but not any entries already set.
+ *
+ * @since COmanage Match v1.2.0
+ * @param string $table Table name, in StudlyCap format
+ * @param string $column Column name
+ * @param string $value New default value
+ */
+
+ protected function setNewDefault(string $table, string $column, string $value) {
+ $Table = $this->getTableLocator()->get($table);
+
+ $Table->query()
+ ->update()
+ ->set([$column => $value])
+ ->where(["$column IS NULL"])
+ ->execute();
+ }
+
+ /**
+ * Validate the requested from and to versions.
+ *
+ * @since COmanage Match v1.2.0
+ * @param string $from "From" version (current database)
+ * @param string $to "To" version (current codebase)
+ * @return bool true if the requested range is valid
+ * @throws InvalidArgumentException
+ */
+
+ protected function validateVersions(string $from, string $to): bool {
+ // First make sure these are valid versions
+
+ if(!array_key_exists($from, $this->versions)) {
+ throw new \InvalidArgumentException(__('match.er.cmd.ug.version', [$from]));
+ }
+
+ if(!array_key_exists($to, $this->versions)) {
+ throw new \InvalidArgumentException(__('match.er.cmd.ug.version', [$to]));
+ }
+
+ // If $from and $to are the same, nothing to do.
+
+ if($from == $to) {
+ throw new \InvalidArgumentException(__('match.er.cmd.ug.same'));
+ }
+
+ // Walk through the version array and check our version path
+
+ $fromFound = false;
+
+ foreach($this->versions as $version => $params) {
+ $blocks = $params['block'];
+
+ if($version == $from) {
+ $fromFound = true;
+ } elseif($version == $to) {
+ if(!$fromFound) {
+ // Can't downgrade ($from must preceed $to)
+ throw new \InvalidArgumentException(__('match.er.cmd.ug.order'));
+ } else {
+ // We're good to go
+ break;
+ }
+ } else {
+ if($fromFound && $blocks) {
+ // We can't pass a blocker version
+ throw new \InvalidArgumentException(__('match.er.cmd.ug.blocked', [$version]));
+ }
+ }
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/app/src/Controller/AppController.php b/app/src/Controller/AppController.php
index ed4ca306e..340e090b3 100644
--- a/app/src/Controller/AppController.php
+++ b/app/src/Controller/AppController.php
@@ -72,8 +72,6 @@ public function initialize(): void {
],
]);
- $this->loadComponent('Paginator');
-
/*
* Enable the following components for recommended CakePHP security settings.
* see https://book.cakephp.org/3.0/en/controllers/components/security.html
diff --git a/app/src/Controller/StandardController.php b/app/src/Controller/StandardController.php
index 62ed41730..92f2b9806 100644
--- a/app/src/Controller/StandardController.php
+++ b/app/src/Controller/StandardController.php
@@ -80,6 +80,21 @@ public function add() {
$this->render('/Standard/add-edit-view');
}
+ /**
+ * Standard operations before the view is rendered.
+ *
+ * @since COmanage Match v1.2.0
+ * @param EventInterface $event BeforeRender event
+ * @return \Cake\Http\Response HTTP Response
+ */
+
+ public function beforeRender(\Cake\Event\EventInterface $event) {
+ // Provide some hints to the views
+ $this->getFieldTypes();
+
+ return parent::beforeRender($event);
+ }
+
/**
* Handle a delete action for a Standard object.
*
@@ -294,6 +309,29 @@ public function generateRedirect() {
return $this->redirect($redirect);
}
+ /**
+ * Make a list of fields types suitable for FieldHelper
+ *
+ * @since COmanage Match v1.2.0
+ */
+
+ protected function getFieldTypes() {
+ // $this->name = Models (ie: from ModelsTable)
+ $modelsName = $this->name;
+ // $table = the actual table object
+ $table = $this->$modelsName;
+
+ $schema = $table->getSchema();
+
+ // We don't pass the schema object as is, partly because cake might change it
+ // and partly to simplify access to the parts the views (FieldHelper, really)
+ // actually need.
+
+ // Note the schema does have field lengths for strings, but typeMap
+ // doesn't return them and we're not doing anything with them at the moment.
+ $this->set('vv_field_types', $schema->typeMap());
+ }
+
/**
* Generate an index for a set of Standard Objects.
*
@@ -367,7 +405,7 @@ public function index() {
// but it doesn't seem to work in Cake 3/4. So we just use $this->pagination
// ourselves here.
- $this->set($tableName, $this->Paginator->paginate($query, $this->pagination));
+ $this->set($tableName, $this->paginate($query, $this->pagination));
$this->set('vv_tablename', $tableName);
$this->set('vv_modelname', $modelsName);
diff --git a/app/src/Lib/Enum/SearchTypeEnum.php b/app/src/Lib/Enum/SearchTypeEnum.php
index 5e97df6a1..11f802990 100644
--- a/app/src/Lib/Enum/SearchTypeEnum.php
+++ b/app/src/Lib/Enum/SearchTypeEnum.php
@@ -30,9 +30,10 @@
namespace App\Lib\Enum;
class SearchTypeEnum extends StandardEnum {
- const Distance = 'D';
- const Exact = 'E';
- const Mapping = 'M';
- const Skip = 'X';
- const Substring = 'S';
+ const Distance = 'D';
+ const Exact = 'E';
+ const Invalidate = "IN";
+ const Mapping = 'M';
+ const Skip = 'X';
+ const Substring = 'S';
}
\ No newline at end of file
diff --git a/app/src/Lib/Enum/StandardEnum.php b/app/src/Lib/Enum/StandardEnum.php
index 7cd256aae..43a48218a 100644
--- a/app/src/Lib/Enum/StandardEnum.php
+++ b/app/src/Lib/Enum/StandardEnum.php
@@ -55,4 +55,20 @@ public static function getLocalizedConsts() {
return $ret;
}
+
+ /**
+ * Get the values for the constants in the Enumeration.
+ *
+ * @since COmanage Match v1.2.0
+ * @return array Array of enumeration values
+ */
+
+ public static function getConstValues() : array {
+ // Get the keys for this enum
+ $reflect = new ReflectionClass(get_called_class());
+
+ $consts = $reflect->getConstants();
+
+ return array_values($consts);
+ }
}
\ No newline at end of file
diff --git a/app/src/Lib/Enum/TrustModeEnum.php b/app/src/Lib/Enum/TrustModeEnum.php
new file mode 100644
index 000000000..8544a7f5b
--- /dev/null
+++ b/app/src/Lib/Enum/TrustModeEnum.php
@@ -0,0 +1,36 @@
+setConfidenceMode($mode);
@@ -622,7 +625,9 @@ protected function search(string $mode,
];
foreach($rule->rule_attributes as $ruleattr) {
- if($ruleattr->search_type == SearchTypeEnum::Skip) {
+ if($ruleattr->search_type == SearchTypeEnum::Skip
+ // We skip invalidate rules as well, these are handled in searchReferenceId()
+ || $ruleattr->search_type == SearchTypeEnum::Invalidate) {
continue;
}
@@ -757,6 +762,11 @@ protected function search(string $mode,
$vals = [];
+ if($skipSor) {
+ $sql .= " AND sor <> ?";
+ $vals[] = $sor;
+ }
+
foreach(array_keys($attrSql['sql']) as $attrId) {
if(count($attrSql['sql'][$attrId]) > 1) {
// We OR together all of the clauses
@@ -821,14 +831,119 @@ protected function search(string $mode,
*/
public function searchReferenceId(string $sor, string $sorid, AttributeManager $attributes) {
+ // Before we start, pull the SystemOfRecord configuration.
+
+ $SystemsOfRecord = TableRegistry::getTableLocator()->get('SystemsOfRecord');
+
+ $trustMode = $SystemsOfRecord->getTrustMode($this->mgConfig->id, $sor);
+ $sorMatch = null; // Only used if TrustMode == Potential
+
+ if($trustMode == TrustModeEnum::Trust) {
+ Log::write('debug', $sor . "/" . $sorid . " Trust Mode enabled, ignoring existing records in the same SOR");
+ }
+
// First try canonical matches
- $canonicalMatches = $this->search(ConfidenceModeEnum::Canonical, $sor, $sorid, $attributes);
-
-// XXX add some logging on match candidates? or maybe in search()
+ $canonicalMatches = $this->search(
+ mode: ConfidenceModeEnum::Canonical,
+ sor: $sor,
+ sorid: $sorid,
+ attributes: $attributes,
+ skipSor: $trustMode == TrustModeEnum::Trust
+ );
+
+ // Was a canonical match downgraded?
+ $downgraded = false;
+
switch($canonicalMatches->count()) {
case 1:
- // Exact match, return
- return $canonicalMatches;
+ // Before returning this canonical match, we need to perform some checks that
+ // might demote the result to potential. Note that $results may have more than
+ // one row even for a canonical match, since there may be multiple matchgrid
+ // entries that point to the same Reference ID.
+
+ $results = $canonicalMatches->getRawResults();
+
+ // First, check if any Attribute Rules in "Invalidate" mode will demote this result.
+
+ foreach($results as $rowId => $attrs) {
+ // Find the rule that generated this match.
+
+ $rulename = $canonicalMatches->getRuleForResult($rowId);
+
+ foreach($this->mgConfig->canonical_rules as $rule) {
+ if($rule->name == $rulename) {
+ // This is the correct rule, check the Rule Attributes. Note there could
+ // be more than one Rule Attribute with Search Type "Invalidate".
+
+ foreach($rule->rule_attributes as $ruleAttribute) {
+ if($ruleAttribute->search_type == SearchTypeEnum::Invalidate) {
+ // The name of the attribute for this Rule Attribute, eg "dob".
+ // This is the column name, not the API name.
+ $ruleAttributeName = $ruleAttribute->attribute->name;
+
+ // The value in the search request
+ $searchValue = $attributes->getValueByAttribute($ruleAttribute->attribute);
+ // The value in the matched row
+ $rowValue = $results[$rowId][$ruleAttributeName];
+
+ // We only perform the validation check if both values are not empty.
+ if(!empty($searchValue)
+ && !empty($rowValue)
+ && ($searchValue !== $rowValue)) {
+ // The returned value does not match, invalidate the request and drop
+ // the result to potential
+
+ Log::write('debug', $sor . "/" . $sorid . " Invalidate mode for $ruleAttributeName ($rulename) downgrading result to Potential");
+
+ $downgraded = [
+ 'rule' => "_invalidate",
+ 'attrs' => $attrs
+ ];
+
+ // No need to continue with any loop
+ break 3;
+ }
+ }
+ }
+
+ // We found the rule we're looking for, no need to continue with the loop
+ break;
+ }
+ }
+
+ // If we have multiple rows, we should have the same rule for each row,
+ // so we can stop after the first.
+ break;
+ }
+
+ if(!$downgraded) {
+ // Next we need to handle Potential Trust Mode, check to see if any result row
+ // matched the SOR.
+
+ if($trustMode != TrustModeEnum::Potential) {
+ // Exact match, return
+ return $canonicalMatches;
+ }
+
+ foreach($results as $rowId => $attrs) {
+ if($attrs['sor'] == $sor) {
+ $sorMatch = $attrs;
+ break;
+ }
+ }
+
+ if(!$sorMatch) {
+ // We matched against a _different_ SOR, so return a canonical match
+
+ return $canonicalMatches;
+ }
+
+ $downgraded = [
+ 'rule' => "_trustmode",
+ 'attrs' => $sorMatch
+ ];
+ Log::write('debug', $sor . "/" . $sorid . " Trust Mode downgrading result to Potential");
+ }
break;
case 0:
// Fall through and try potential matches
@@ -843,7 +958,20 @@ public function searchReferenceId(string $sor, string $sorid, AttributeManager $
}
// Next try potential matches
- $potentialMatches = $this->search(ConfidenceModeEnum::Potential, $sor, $sorid, $attributes);
+ $potentialMatches = $this->search(
+ mode: ConfidenceModeEnum::Potential,
+ sor: $sor,
+ sorid: $sorid,
+ attributes: $attributes,
+ skipSor: $trustMode == TrustModeEnum::Trust
+ );
+
+ // Add in the downgraded potential match from above, if configured
+
+ if($downgraded !== false) {
+ // We use a psuedo-rule name
+ $potentialMatches->add($downgraded['attrs'], $downgraded['rule']);
+ }
// The calling code generally checks to see if any rules successfully ran,
// since if there were no valid attributes or rules we treat that as an error.
diff --git a/app/src/Lib/Match/ResultManager.php b/app/src/Lib/Match/ResultManager.php
index 00a709793..313e15ccf 100644
--- a/app/src/Lib/Match/ResultManager.php
+++ b/app/src/Lib/Match/ResultManager.php
@@ -39,12 +39,16 @@ class ResultManager {
// for the same referenceId). Attributes are stored in the same format as AttributeManager
// to faciliate wire representation.
protected $results = [];
+ // Track which rule created which results. This will only be populated for rules
+ // that generated results.
+ protected $resultRules = [];
// Keep the raw results as well, to facilitate UI representation.
protected $rawResults = [];
// "canonical" or "potential"
protected $confidenceMode = null;
protected $attrconfig = [];
- // We track which rules ran successfully as a way of validating the inbound request
+ // We track which rules ran successfully as a way of validating the inbound request.
+ // This includes rules that did not generate any results.
protected $successfulRules = [];
/**
@@ -97,6 +101,8 @@ public function add(array $attributes, string $rule=null) {
}
$this->results[$referenceId][$rowId] = $parsed;
+
+ $this->resultRules[$rowId] = $rule;
$this->rawResults[$rowId] = $attributes;
}
@@ -274,6 +280,18 @@ public function getResultsForJson($mode="search") {
return $ret;
}
+ /**
+ * Get the name of the rule that generated the result for the specified row ID.
+ *
+ * @since COmanage Match v1.2.0
+ * @param int $rowId Row to return rule for
+ * @return string Rule name (if found) or false
+ */
+
+ public function getRuleForResult(int $rowId) {
+ return $this->resultRules[$rowId] ?? false;
+ }
+
/**
* Obtain an array of successfully executed rules as reported to the ResultManager.
* Note that successful rules may have generated no matches.
diff --git a/app/src/Model/Table/AttributesTable.php b/app/src/Model/Table/AttributesTable.php
index 37507df61..57b5dd44c 100644
--- a/app/src/Model/Table/AttributesTable.php
+++ b/app/src/Model/Table/AttributesTable.php
@@ -68,12 +68,14 @@ public function initialize(array $config): void {
'attributeGroups' => [
'type' => 'select',
'model' => 'AttributeGroups',
- 'find' => 'filterPrimaryLink'
+ 'find' => 'filterPrimaryLink',
+ 'order' => ['name' => 'ASC']
],
'attributeMaps' => [
'type' => 'select',
'model' => 'AttributeMaps',
- 'find' => 'filterPrimaryLink'
+ 'find' => 'filterPrimaryLink',
+ 'order' => ['name' => 'ASC']
]
]);
}
diff --git a/app/src/Model/Table/MetaTable.php b/app/src/Model/Table/MetaTable.php
index db01b276a..4f30a4538 100644
--- a/app/src/Model/Table/MetaTable.php
+++ b/app/src/Model/Table/MetaTable.php
@@ -34,18 +34,29 @@
use Cake\Validation\Validator;
class MetaTable extends Table {
+ /**
+ * Update the current "upgrade" version.
+ *
+ * @since COmanage Match v1.2.0
+ * @return string Current "upgrade" version, per the database
+ * @throws RuntimeException
+ */
+ public function getUpgradeVersion(): string {
+ $meta = $this->get(1);
+
+ return $meta->upgrade_version;
+ }
+
/**
* Update the current "upgrade" version.
*
* @since COmanage Match v1.0.0
- * @param String $version New current version
- * @return Boolean True on success
+ * @param string $version New current version
+ * @return bool True on success
* @throws RuntimeException
*/
- public function setUpgradeVersion($version) {
-// XXX log this? print "Setting version to " . $version . "\n";
-
+ public function setUpgradeVersion(string $version): bool {
$meta = $this->newEmptyEntity();
$meta->id = 1;
$meta->upgrade_version = $version;
diff --git a/app/src/Model/Table/RuleAttributesTable.php b/app/src/Model/Table/RuleAttributesTable.php
index 68dee6601..9f671f442 100644
--- a/app/src/Model/Table/RuleAttributesTable.php
+++ b/app/src/Model/Table/RuleAttributesTable.php
@@ -70,12 +70,14 @@ public function initialize(array $config): void {
'attributes' => [
'type' => 'select',
'model' => 'Attributes',
- 'find' => 'filterMatchgrid'
+ 'find' => 'filterMatchgrid',
+ 'order' => ['name' => 'ASC']
],
'crosscheckAttributes' => [
'type' => 'select',
'model' => 'Attributes',
- 'find' => 'filterMatchgrid'
+ 'find' => 'filterMatchgrid',
+ 'order' => ['name' => 'ASC']
],
'searchTypes' => [
'type' => 'enum',
@@ -120,6 +122,7 @@ public function validationDefault(Validator $validator): Validator {
[ 'rule' => [ 'inList', [
SearchTypeEnum::Distance,
SearchTypeEnum::Exact,
+ SearchTypeEnum::Invalidate,
SearchTypeEnum::Mapping,
SearchTypeEnum::Skip,
SearchTypeEnum::Substring
diff --git a/app/src/Model/Table/SystemsOfRecordTable.php b/app/src/Model/Table/SystemsOfRecordTable.php
index 992e67df7..98bb2693c 100644
--- a/app/src/Model/Table/SystemsOfRecordTable.php
+++ b/app/src/Model/Table/SystemsOfRecordTable.php
@@ -33,6 +33,7 @@
use Cake\Validation\Validator;
use \App\Lib\Enum\ResolutionModeEnum;
+use \App\Lib\Enum\TrustModeEnum;
class SystemsOfRecordTable extends Table {
use \App\Lib\Traits\AutoViewVarsTrait;
@@ -63,10 +64,33 @@ public function initialize(array $config): void {
'resolutionModes' => [
'type' => 'enum',
'class' => 'ResolutionModeEnum'
+ ],
+ 'trustModes' => [
+ 'type' => 'enum',
+ 'class' => 'TrustModeEnum'
]
]);
}
+ /**
+ * Determine the trust mode setting for the requested SOR within the matchgrid.
+ *
+ * @since COmanage Match v1.2.0
+ * @param int $matchgridId Matchgrid ID
+ * @param string $sorLabel System of Record Label
+ */
+
+ public function getTrustMode(int $matchgridId, string $sorLabel) {
+ $systemOfRecord = $this->find()
+ ->where([
+ 'matchgrid_id' => $matchgridId,
+ 'label' => $sorLabel
+ ])
+ ->firstOrFail();
+
+ return $systemOfRecord->trust_mode;
+ }
+
/**
* Set validation rules.
*
@@ -91,13 +115,17 @@ public function validationDefault(Validator $validator): Validator {
);
$validator->notBlank('matchgrid_id');
+ $validator->add(
+ 'trust_mode',
+ 'content',
+ [ 'rule' => [ 'inList', TrustModeEnum::getConstValues() ] ]
+ );
+ $validator->notEmptyString('trust_mode');
+
$validator->add(
'resolution_mode',
'content',
- [ 'rule' => [ 'inList', [
- ResolutionModeEnum::External,
- ResolutionModeEnum::Interactive
- ] ] ]
+ [ 'rule' => [ 'inList', ResolutionModeEnum::getConstValues() ] ]
);
$validator->notEmptyString('resolution_mode');
diff --git a/app/src/View/Helper/FieldHelper.php b/app/src/View/Helper/FieldHelper.php
index 9855fb0c7..9509da7e5 100644
--- a/app/src/View/Helper/FieldHelper.php
+++ b/app/src/View/Helper/FieldHelper.php
@@ -69,6 +69,17 @@ public function control(string $fieldName,
$label = null;
$desc = null;
+
+ // Get the field type from the map of fields (e.g. 'boolean', 'string', 'timestamp')
+ $fieldMap = $this->getView()->get('vv_field_types');
+
+ // $vv_field_types holds the table schema as introspected by Cake.
+ // For viewing Matchgrid Records (/match/matchgrid-records/edit/X),
+ // $fieldName is the API label, but $labelText is the database column
+ // name, so we have to check both locations.
+ $fieldType = (!empty($fieldMap[$fieldName])
+ ? $fieldMap[$fieldName]
+ : (!empty($fieldMap[$labelText]) ? $fieldMap[$labelText] : ""));
if($labelText) {
$label = $labelText;
@@ -114,7 +125,15 @@ public function control(string $fieldName,
// This is a read-only timestamp, use the field to render itself
$control = $this->viewObj->$fieldName->nice();
$isRequired = false;
+ } elseif(!$this->editable) {
+ // Just output the field value.
+ $control = $this->viewObj->$fieldName;
} else {
+ if($fieldType == 'boolean') {
+ // A boolean field is a checkbox. Include the label with the field.
+ $coptions['label'] = $label;
+ $coptions['class'] = 'form-check-input';
+ }
$control = $this->Form->control($fieldName, $coptions);
}
@@ -140,7 +159,7 @@ public function control(string $fieldName,
return '
- ' . ($this->editable
+ ' . ($this->editable && !($fieldType == 'boolean')
? $this->Form->label($fieldName, $label)
: $label)
. ($isRequired ? '
*' : '') . '
diff --git a/app/templates/Attributes/fields.inc b/app/templates/Attributes/fields.inc
index e412c5c62..9fb5c8f3f 100644
--- a/app/templates/Attributes/fields.inc
+++ b/app/templates/Attributes/fields.inc
@@ -37,8 +37,6 @@ if($action == 'add' || $action == 'edit') {
print $this->Field->control('alphanumeric', [], false);
print $this->Field->control('case_sensitive', [], false);
-// CO-1762
-// print $this->Field->control('invalidates', [], false);
print $this->Field->control('null_equivalents', [], false);
print $this->Field->control('search_distance', [], false);
diff --git a/app/templates/Matchgrids/reconcile.php b/app/templates/Matchgrids/reconcile.php
index 98672707e..03f09913f 100644
--- a/app/templates/Matchgrids/reconcile.php
+++ b/app/templates/Matchgrids/reconcile.php
@@ -58,7 +58,6 @@
// String: attribute field name | Array of arrays: [attribute value, candidate id, different?1:0]
$canAttr = array();
for($i = 0; $i < count($fieldNames); $i++) {
-
// Put the field name in the first column.
$canAttr[$i][0] = $fieldNames[$i];
@@ -68,7 +67,7 @@
foreach($c as $key => $val) {
if($key == $fieldNames[$i]) {
$id = $c['id'];
- $diff = in_array($key,$vv_candidate_diff[$id]) ? 1 : 0;
+ $diff = (isset($vv_candidate_diff[$id]) && in_array($key,$vv_candidate_diff[$id])) ? 1 : 0;
$canAttr[$i][1][] = [$val, $id, $diff];
}
}
diff --git a/app/templates/SystemsOfRecord/columns.inc b/app/templates/SystemsOfRecord/columns.inc
index ae9da8f7e..edc9a7119 100644
--- a/app/templates/SystemsOfRecord/columns.inc
+++ b/app/templates/SystemsOfRecord/columns.inc
@@ -33,5 +33,9 @@ $indexColumns = [
'resolution_mode' => [
'type' => 'enum',
'class' => 'ResolutionModeEnum'
+ ],
+ 'trust_mode' => [
+ 'type' => 'enum',
+ 'class' => 'TrustModeEnum'
]
];
\ No newline at end of file
diff --git a/app/templates/SystemsOfRecord/fields.inc b/app/templates/SystemsOfRecord/fields.inc
index 56e2684b2..202e41c38 100644
--- a/app/templates/SystemsOfRecord/fields.inc
+++ b/app/templates/SystemsOfRecord/fields.inc
@@ -26,6 +26,7 @@
*/
use \App\Lib\Enum\ResolutionModeEnum;
+use \App\Lib\Enum\TrustModeEnum;
?>
',
+ '',
$row->id,
$url,
- Router::url($this->getToolbarUrl())
+ Router::url($this->getToolbarUrl()),
+ $nonce
);
$contents = substr($contents, 0, $pos) . $script . substr($contents, $pos);
$body->rewind();
diff --git a/app/vendor/cakephp/debug_kit/src/View/AjaxView.php b/app/vendor/cakephp/debug_kit/src/View/AjaxView.php
index 911a0b6f2..c2844efdc 100644
--- a/app/vendor/cakephp/debug_kit/src/View/AjaxView.php
+++ b/app/vendor/cakephp/debug_kit/src/View/AjaxView.php
@@ -2,17 +2,17 @@
declare(strict_types=1);
/**
- * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
- * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
- * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
- * @link http://cakephp.org CakePHP(tm) Project
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
+ * @link https://cakephp.org CakePHP(tm) Project
* @since 3.2.8
- * @license http://www.opensource.org/licenses/mit-license.php MIT License
+ * @license https://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace DebugKit\View;
diff --git a/app/vendor/cakephp/debug_kit/src/View/Helper/CredentialsHelper.php b/app/vendor/cakephp/debug_kit/src/View/Helper/CredentialsHelper.php
index 253fabd85..86b017cc9 100644
--- a/app/vendor/cakephp/debug_kit/src/View/Helper/CredentialsHelper.php
+++ b/app/vendor/cakephp/debug_kit/src/View/Helper/CredentialsHelper.php
@@ -2,16 +2,16 @@
declare(strict_types=1);
/**
- * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
- * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
- * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
- * @link http://cakephp.org CakePHP(tm) Project
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
+ * @link https://cakephp.org CakePHP(tm) Project
* @since 3.3.7
- * @license http://www.opensource.org/licenses/mit-license.php MIT License
+ * @license https://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace DebugKit\View\Helper;
@@ -39,7 +39,7 @@ class CredentialsHelper extends Helper
* Replace credentials in url's by *****
* Example mysql://username:password@localhost/my_db -> mysql://******@localhost/my_db
*
- * @param string $in variable to filter
+ * @param mixed $in variable to filter
* @return string
*/
public function filter($in)
diff --git a/app/vendor/cakephp/debug_kit/src/View/Helper/SimpleGraphHelper.php b/app/vendor/cakephp/debug_kit/src/View/Helper/SimpleGraphHelper.php
index 340ad1cda..3a06bd005 100644
--- a/app/vendor/cakephp/debug_kit/src/View/Helper/SimpleGraphHelper.php
+++ b/app/vendor/cakephp/debug_kit/src/View/Helper/SimpleGraphHelper.php
@@ -2,16 +2,16 @@
declare(strict_types=1);
/**
- * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
- * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
- * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
- * @link http://cakephp.org CakePHP(tm) Project
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
+ * @link https://cakephp.org CakePHP(tm) Project
* @since 1.0.0
- * @license http://www.opensource.org/licenses/mit-license.php MIT License
+ * @license https://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace DebugKit\View\Helper;
@@ -70,10 +70,10 @@ public function bar($value, $offset, $options = [])
}
return sprintf(
- '
',
+ '
',
"width: {$width}px",
"margin-left: {$graphOffset}px; width: {$graphValue}px",
- __d('debug_kit', 'Starting {0}ms into the request, taking {1}ms', $offset, $value)
+ "Starting {$offset}ms into the request, taking {$value}ms"
);
}
}
diff --git a/app/vendor/cakephp/debug_kit/src/View/Helper/ToolbarHelper.php b/app/vendor/cakephp/debug_kit/src/View/Helper/ToolbarHelper.php
index d59a8e12e..0574ec143 100644
--- a/app/vendor/cakephp/debug_kit/src/View/Helper/ToolbarHelper.php
+++ b/app/vendor/cakephp/debug_kit/src/View/Helper/ToolbarHelper.php
@@ -2,28 +2,25 @@
declare(strict_types=1);
/**
- * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
- * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
- * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
- * @link http://cakephp.org CakePHP(tm) Project
+ * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
+ * @link https://cakephp.org CakePHP(tm) Project
* @since 0.1
- * @license http://www.opensource.org/licenses/mit-license.php MIT License
+ * @license https://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace DebugKit\View\Helper;
-use ArrayAccess;
use Cake\Error\Debug\ArrayItemNode;
use Cake\Error\Debug\ArrayNode;
use Cake\Error\Debug\HtmlFormatter;
use Cake\Error\Debug\ScalarNode;
use Cake\Error\Debugger;
use Cake\View\Helper;
-use Closure;
-use Iterator;
/**
* Provides Base methods for content specific debug toolbar helpers.
@@ -119,101 +116,4 @@ public function dump($value)
'
',
]);
}
-
- /**
- * Recursively goes through an array and makes neat HTML out of it.
- *
- * @param mixed $values Array to make pretty.
- * @param int $openDepth Depth to add open class
- * @param int $currentDepth current depth.
- * @param bool $doubleEncode Whether or not to double encode.
- * @param \SplObjectStorage $currentAncestors Object references found down
- * the path.
- * @return string
- * @deprecated 4.4.0 Use ToolbarHelper::dump() instead.
- */
- public function makeNeatArray(
- $values,
- $openDepth = 0,
- $currentDepth = 0,
- $doubleEncode = false,
- ?\SplObjectStorage $currentAncestors = null
- ) {
- if ($currentAncestors === null) {
- $ancestors = new \SplObjectStorage();
- } elseif (is_object($values)) {
- $ancestors = new \SplObjectStorage();
- $ancestors->addAll($currentAncestors);
- $ancestors->attach($values);
- } else {
- $ancestors = $currentAncestors;
- }
- $className = "neat-array depth-$currentDepth";
- if ($openDepth > $currentDepth) {
- $className .= ' expanded';
- }
- $nextDepth = $currentDepth + 1;
- $out = "
";
- if (!is_array($values)) {
- if (is_bool($values)) {
- $values = [$values];
- }
- if ($values === null) {
- $values = [null];
- }
- if (is_object($values) && method_exists($values, 'toArray')) {
- $values = $values->toArray();
- }
- }
- if (empty($values)) {
- $values[] = '(empty)';
- }
- if ($this->sort && is_array($values) && $currentDepth === 0) {
- ksort($values);
- }
- foreach ($values as $key => $value) {
- $out .= '- ' . h($key, $doubleEncode) . ' ';
- if (is_array($value) && count($value) > 0) {
- $out .= '(array)';
- } elseif (is_object($value)) {
- $out .= '(' . (get_class($value) ?: 'object') . ')';
- }
- if ($value === null) {
- $value = '(null)';
- }
- if ($value === false) {
- $value = '(false)';
- }
- if ($value === true) {
- $value = '(true)';
- }
- if (empty($value) && $value != 0) {
- $value = '(empty)';
- }
- if ($value instanceof Closure) {
- $value = 'function';
- }
-
- if (is_object($value) && $ancestors->contains($value)) {
- $value = ' - recursion';
- }
-
- if (
- (
- $value instanceof ArrayAccess ||
- $value instanceof Iterator ||
- is_array($value) ||
- is_object($value)
- ) && !empty($value)
- ) {
- $out .= $this->makeNeatArray($value, $openDepth, $nextDepth, $doubleEncode, $ancestors);
- } else {
- $out .= h($value, $doubleEncode);
- }
- $out .= '
';
- }
- $out .= '
';
-
- return $out;
- }
}
diff --git a/app/vendor/cakephp/debug_kit/templates/Dashboard/index.php b/app/vendor/cakephp/debug_kit/templates/Dashboard/index.php
index ee3566fd5..d7468e1f2 100644
--- a/app/vendor/cakephp/debug_kit/templates/Dashboard/index.php
+++ b/app/vendor/cakephp/debug_kit/templates/Dashboard/index.php
@@ -3,18 +3,18 @@
* @var \App\View\AppView $this
*/
?>
-
= __d('debug_kit', 'Debug Kit Dashboard') ?>
+
Debug Kit Dashboard
-
= __d('debug_kit', 'Database') ?>
+
Database
- - = __d('debug_kit', 'Driver') ?>: = h($connection['driver']); ?>
+ - Driver: = h($connection['driver']); ?>
- - = __d('debug_kit', 'Requests') ?>: = $this->Number->format($connection['rows']) ?>
+ - Requests: = $this->Number->format($connection['rows']) ?>
= $this->Form->postLink(
- __d('debug_kit', 'Reset database'),
+ 'Reset database',
['_method' => 'POST', 'action' => 'reset'],
['confirm' => 'Are you sure?']
); ?>
@@ -22,5 +22,5 @@
Actions
- - = $this->Html->link(__d('debug_kit', 'Mail Preview'), ['controller' => 'MailPreview']); ?>
+ - = $this->Html->link('Mail Preview', ['controller' => 'MailPreview']); ?>
diff --git a/app/vendor/cakephp/debug_kit/templates/MailPreview/email.php b/app/vendor/cakephp/debug_kit/templates/MailPreview/email.php
index 622089681..2529d93e1 100644
--- a/app/vendor/cakephp/debug_kit/templates/MailPreview/email.php
+++ b/app/vendor/cakephp/debug_kit/templates/MailPreview/email.php
@@ -1,4 +1,4 @@
-
@@ -60,7 +81,7 @@ final class HtmlResultPrinter extends ResultPrinter
*/
private const CLASS_HEADER = <<<'EOT'
-
%s
+
%s
EOT;
@@ -101,9 +122,8 @@ protected function startClass(string $name): void
$this->write(
sprintf(
self::CLASS_HEADER,
- $name,
- $this->currentTestClassPrettified
- )
+ $this->currentTestClassPrettified,
+ ),
);
}
@@ -114,11 +134,10 @@ protected function onTest(string $name, bool $success = true): void
{
$this->write(
sprintf(
- " - %s %s
\n",
- $success ? '#555753' : '#ef2929',
- $success ? '✓' : '❌',
- $name
- )
+ " - %s
\n",
+ $success ? 'success' : 'defect',
+ $name,
+ ),
);
}
diff --git a/app/vendor/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php b/app/vendor/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php
index d2808a83e..ee0a41b1c 100644
--- a/app/vendor/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php
+++ b/app/vendor/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php
@@ -124,7 +124,7 @@ public function prettifyTestCase(TestCase $test): string
{
$annotations = Test::parseTestMethodAnnotations(
get_class($test),
- $test->getName(false)
+ $test->getName(false),
);
$annotationWithPlaceholders = false;
@@ -242,8 +242,8 @@ private function mapTestMethodParameterNamesToProvidedDataValues(TestCase $test)
} catch (ReflectionException $e) {
throw new UtilException(
$e->getMessage(),
- (int) $e->getCode(),
- $e
+ $e->getCode(),
+ $e,
);
}
// @codeCoverageIgnoreEnd
@@ -262,8 +262,8 @@ private function mapTestMethodParameterNamesToProvidedDataValues(TestCase $test)
} catch (ReflectionException $e) {
throw new UtilException(
$e->getMessage(),
- (int) $e->getCode(),
- $e
+ $e->getCode(),
+ $e,
);
}
// @codeCoverageIgnoreEnd
diff --git a/app/vendor/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php b/app/vendor/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php
index bd64785c9..5a418998d 100644
--- a/app/vendor/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php
+++ b/app/vendor/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php
@@ -381,8 +381,8 @@ static function (string $text) use ($prefix)
{
return ' ' . $prefix . ($text ? ' ' . $text : '');
},
- preg_split('/\r\n|\r|\n/', $message)
- )
+ preg_split('/\r\n|\r|\n/', $message),
+ ),
);
}
}
diff --git a/app/vendor/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php b/app/vendor/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php
index 911604e06..544c83e73 100644
--- a/app/vendor/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php
+++ b/app/vendor/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php
@@ -164,7 +164,7 @@ public function endTest(Test $test, float $time): void
static function ($group)
{
return !($group === 'small' || $group === 'medium' || $group === 'large' || strpos($group, '__phpunit_') === 0);
- }
+ },
);
$testNode = $this->document->createElement('test');
@@ -188,7 +188,7 @@ static function ($group)
$annotations = TestUtil::parseTestMethodAnnotations(
get_class($test),
- $test->getName(false)
+ $test->getName(false),
);
foreach (['class', 'method'] as $type) {
@@ -239,8 +239,8 @@ static function ($group)
} catch (ReflectionException $e) {
throw new Exception(
$e->getMessage(),
- (int) $e->getCode(),
- $e
+ $e->getCode(),
+ $e,
);
}
// @codeCoverageIgnoreEnd
diff --git a/app/vendor/phpunit/phpunit/src/Util/TextTestListRenderer.php b/app/vendor/phpunit/phpunit/src/Util/TextTestListRenderer.php
index 67168a67f..beb0e4b07 100644
--- a/app/vendor/phpunit/phpunit/src/Util/TextTestListRenderer.php
+++ b/app/vendor/phpunit/phpunit/src/Util/TextTestListRenderer.php
@@ -35,7 +35,7 @@ public function render(TestSuite $suite): string
$name = sprintf(
'%s::%s',
get_class($test),
- str_replace(' with data set ', '', $test->getName())
+ str_replace(' with data set ', '', $test->getName()),
);
} elseif ($test instanceof PhptTestCase) {
$name = $test->getName();
@@ -45,7 +45,7 @@ public function render(TestSuite $suite): string
$buffer .= sprintf(
' - %s' . PHP_EOL,
- $name
+ $name,
);
}
diff --git a/app/vendor/phpunit/phpunit/src/Util/Type.php b/app/vendor/phpunit/phpunit/src/Util/Type.php
index 01a6b1931..ec6a1d78a 100644
--- a/app/vendor/phpunit/phpunit/src/Util/Type.php
+++ b/app/vendor/phpunit/phpunit/src/Util/Type.php
@@ -9,8 +9,6 @@
*/
namespace PHPUnit\Util;
-use Throwable;
-
/**
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
@@ -38,15 +36,4 @@ public static function isType(string $type): bool
return false;
}
}
-
- public static function isCloneable(object $object): bool
- {
- try {
- $clone = clone $object;
- } catch (Throwable $t) {
- return false;
- }
-
- return $clone instanceof $object;
- }
}
diff --git a/app/vendor/phpunit/phpunit/src/Util/VersionComparisonOperator.php b/app/vendor/phpunit/phpunit/src/Util/VersionComparisonOperator.php
index 175ecd2d1..57ca7c320 100644
--- a/app/vendor/phpunit/phpunit/src/Util/VersionComparisonOperator.php
+++ b/app/vendor/phpunit/phpunit/src/Util/VersionComparisonOperator.php
@@ -14,6 +14,7 @@
/**
* @internal This class is not covered by the backward compatibility promise for PHPUnit
+ *
* @psalm-immutable
*/
final class VersionComparisonOperator
@@ -49,8 +50,8 @@ private function ensureOperatorIsValid(string $operator): void
throw new Exception(
sprintf(
'"%s" is not a valid version_compare() operator',
- $operator
- )
+ $operator,
+ ),
);
}
}
diff --git a/app/vendor/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php b/app/vendor/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php
index 8b10d4152..d6366eaaa 100644
--- a/app/vendor/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php
+++ b/app/vendor/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php
@@ -32,10 +32,10 @@ static function ($item)
{
return sprintf(
" '%s'",
- $item
+ $item,
);
},
- $this->getItems($filter)
+ $this->getItems($filter),
);
$files = implode(",\n", $files);
@@ -67,7 +67,7 @@ private function getItems(FilterConfiguration $filter): array
if (is_string($path)) {
$files[] = sprintf(
addslashes('%s' . DIRECTORY_SEPARATOR),
- $path
+ $path,
);
}
}
diff --git a/app/vendor/phpunit/phpunit/src/Util/Xml.php b/app/vendor/phpunit/phpunit/src/Util/Xml.php
index 0939e6c5b..efdd56eff 100644
--- a/app/vendor/phpunit/phpunit/src/Util/Xml.php
+++ b/app/vendor/phpunit/phpunit/src/Util/Xml.php
@@ -68,8 +68,8 @@ public static function prepareString(string $string): string
'',
htmlspecialchars(
self::convertToUtf8($string),
- ENT_QUOTES
- )
+ ENT_QUOTES,
+ ),
);
}
@@ -126,8 +126,8 @@ public static function xmlToVariable(DOMElement $element)
} catch (ReflectionException $e) {
throw new Exception(
$e->getMessage(),
- (int) $e->getCode(),
- $e
+ $e->getCode(),
+ $e,
);
}
// @codeCoverageIgnoreEnd
diff --git a/app/vendor/phpunit/phpunit/src/Util/Xml/Loader.php b/app/vendor/phpunit/phpunit/src/Util/Xml/Loader.php
index 8d43d3278..2ba5ace34 100644
--- a/app/vendor/phpunit/phpunit/src/Util/Xml/Loader.php
+++ b/app/vendor/phpunit/phpunit/src/Util/Xml/Loader.php
@@ -38,8 +38,8 @@ public function loadFile(string $filename, bool $isHtml = false, bool $xinclude
throw new Exception(
sprintf(
'Could not read "%s".',
- $filename
- )
+ $filename,
+ ),
);
}
@@ -100,8 +100,8 @@ public function load(string $actual, bool $isHtml = false, string $filename = ''
sprintf(
'Could not load "%s".%s',
$filename,
- $message !== '' ? "\n" . $message : ''
- )
+ $message !== '' ? "\n" . $message : '',
+ ),
);
}
diff --git a/app/vendor/phpunit/phpunit/src/Util/Xml/SchemaDetector.php b/app/vendor/phpunit/phpunit/src/Util/Xml/SchemaDetector.php
index 5864695b4..46f2b947a 100644
--- a/app/vendor/phpunit/phpunit/src/Util/Xml/SchemaDetector.php
+++ b/app/vendor/phpunit/phpunit/src/Util/Xml/SchemaDetector.php
@@ -23,7 +23,7 @@ public function detect(string $filename): SchemaDetectionResult
$filename,
false,
true,
- true
+ true,
);
foreach (['9.2', '8.5'] as $candidate) {
diff --git a/app/vendor/phpunit/phpunit/src/Util/Xml/SchemaFinder.php b/app/vendor/phpunit/phpunit/src/Util/Xml/SchemaFinder.php
index 1e7b73c59..af17dfe94 100644
--- a/app/vendor/phpunit/phpunit/src/Util/Xml/SchemaFinder.php
+++ b/app/vendor/phpunit/phpunit/src/Util/Xml/SchemaFinder.php
@@ -34,8 +34,8 @@ public function find(string $version): string
throw new Exception(
sprintf(
'Schema for PHPUnit %s is not available',
- $version
- )
+ $version,
+ ),
);
}
diff --git a/app/vendor/phpunit/phpunit/src/Util/Xml/SnapshotNodeList.php b/app/vendor/phpunit/phpunit/src/Util/Xml/SnapshotNodeList.php
index fdc95abb8..e383678df 100644
--- a/app/vendor/phpunit/phpunit/src/Util/Xml/SnapshotNodeList.php
+++ b/app/vendor/phpunit/phpunit/src/Util/Xml/SnapshotNodeList.php
@@ -9,6 +9,7 @@
*/
namespace PHPUnit\Util\Xml;
+use function count;
use ArrayIterator;
use Countable;
use DOMNode;
@@ -17,6 +18,8 @@
/**
* @internal This class is not covered by the backward compatibility promise for PHPUnit
+ *
+ * @template-implements IteratorAggregate
*/
final class SnapshotNodeList implements Countable, IteratorAggregate
{
diff --git a/app/vendor/phpunit/phpunit/src/Util/XmlTestListRenderer.php b/app/vendor/phpunit/phpunit/src/Util/XmlTestListRenderer.php
index d92e1fe26..7a63b10d4 100644
--- a/app/vendor/phpunit/phpunit/src/Util/XmlTestListRenderer.php
+++ b/app/vendor/phpunit/phpunit/src/Util/XmlTestListRenderer.php
@@ -32,7 +32,7 @@ public function render(TestSuite $suite): string
$writer->openMemory();
$writer->setIndent(true);
- $writer->startDocument();
+ $writer->startDocument('1.0', 'UTF-8');
$writer->startElement('tests');
$currentTestCase = null;
@@ -60,8 +60,8 @@ public function render(TestSuite $suite): string
str_replace(
' with data set ',
'',
- $test->getDataSetAsString(false)
- )
+ $test->getDataSetAsString(false),
+ ),
);
}
@@ -84,6 +84,7 @@ public function render(TestSuite $suite): string
}
$writer->endElement();
+ $writer->endDocument();
return $writer->outputMemory();
}
diff --git a/app/vendor/psr/cache/README.md b/app/vendor/psr/cache/README.md
index c8706ceea..9855a318b 100644
--- a/app/vendor/psr/cache/README.md
+++ b/app/vendor/psr/cache/README.md
@@ -1,9 +1,12 @@
-PSR Cache
-=========
+Caching Interface
+==============
-This repository holds all interfaces defined by
-[PSR-6](http://www.php-fig.org/psr/psr-6/).
+This repository holds all interfaces related to [PSR-6 (Caching Interface)][psr-url].
-Note that this is not a Cache implementation of its own. It is merely an
-interface that describes a Cache implementation. See the specification for more
-details.
+Note that this is not a Caching implementation of its own. It is merely interfaces that describe the components of a Caching mechanism.
+
+The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.
+
+[psr-url]: https://www.php-fig.org/psr/psr-6/
+[package-url]: https://packagist.org/packages/psr/cache
+[implementation-url]: https://packagist.org/providers/psr/cache-implementation
diff --git a/app/vendor/psr/cache/composer.json b/app/vendor/psr/cache/composer.json
index e828fec94..4b687971e 100644
--- a/app/vendor/psr/cache/composer.json
+++ b/app/vendor/psr/cache/composer.json
@@ -6,11 +6,11 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"require": {
- "php": ">=5.3.0"
+ "php": ">=8.0.0"
},
"autoload": {
"psr-4": {
diff --git a/app/vendor/psr/cache/src/CacheException.php b/app/vendor/psr/cache/src/CacheException.php
index e27f22f8d..bb785f46c 100644
--- a/app/vendor/psr/cache/src/CacheException.php
+++ b/app/vendor/psr/cache/src/CacheException.php
@@ -5,6 +5,6 @@
/**
* Exception interface for all exceptions thrown by an Implementing Library.
*/
-interface CacheException
+interface CacheException extends \Throwable
{
}
diff --git a/app/vendor/psr/cache/src/CacheItemInterface.php b/app/vendor/psr/cache/src/CacheItemInterface.php
index 63d05dd1f..2b2e4bb88 100644
--- a/app/vendor/psr/cache/src/CacheItemInterface.php
+++ b/app/vendor/psr/cache/src/CacheItemInterface.php
@@ -32,7 +32,7 @@ interface CacheItemInterface
* @return string
* The key string for this cache item.
*/
- public function getKey();
+ public function getKey(): string;
/**
* Retrieves the value of the item from the cache associated with this object's key.
@@ -46,7 +46,7 @@ public function getKey();
* @return mixed
* The value corresponding to this cache item's key, or null if not found.
*/
- public function get();
+ public function get(): mixed;
/**
* Confirms if the cache item lookup resulted in a cache hit.
@@ -57,7 +57,7 @@ public function get();
* @return bool
* True if the request resulted in a cache hit. False otherwise.
*/
- public function isHit();
+ public function isHit(): bool;
/**
* Sets the value represented by this cache item.
@@ -72,12 +72,12 @@ public function isHit();
* @return static
* The invoked object.
*/
- public function set($value);
+ public function set(mixed $value): static;
/**
* Sets the expiration time for this cache item.
*
- * @param \DateTimeInterface|null $expiration
+ * @param ?\DateTimeInterface $expiration
* The point in time after which the item MUST be considered expired.
* If null is passed explicitly, a default value MAY be used. If none is set,
* the value should be stored permanently or for as long as the
@@ -86,7 +86,7 @@ public function set($value);
* @return static
* The called object.
*/
- public function expiresAt($expiration);
+ public function expiresAt(?\DateTimeInterface $expiration): static;
/**
* Sets the expiration time for this cache item.
@@ -101,5 +101,5 @@ public function expiresAt($expiration);
* @return static
* The called object.
*/
- public function expiresAfter($time);
+ public function expiresAfter(int|\DateInterval|null $time): static;
}
diff --git a/app/vendor/psr/cache/src/CacheItemPoolInterface.php b/app/vendor/psr/cache/src/CacheItemPoolInterface.php
index 035141967..4b3017c75 100644
--- a/app/vendor/psr/cache/src/CacheItemPoolInterface.php
+++ b/app/vendor/psr/cache/src/CacheItemPoolInterface.php
@@ -29,7 +29,7 @@ interface CacheItemPoolInterface
* @return CacheItemInterface
* The corresponding Cache Item.
*/
- public function getItem($key);
+ public function getItem(string $key): CacheItemInterface;
/**
* Returns a traversable set of cache items.
@@ -41,13 +41,13 @@ public function getItem($key);
* If any of the keys in $keys are not a legal value a \Psr\Cache\InvalidArgumentException
* MUST be thrown.
*
- * @return array|\Traversable
- * A traversable collection of Cache Items keyed by the cache keys of
+ * @return iterable
+ * An iterable collection of Cache Items keyed by the cache keys of
* each item. A Cache item will be returned for each key, even if that
* key is not found. However, if no keys are specified then an empty
* traversable MUST be returned instead.
*/
- public function getItems(array $keys = array());
+ public function getItems(array $keys = []): iterable;
/**
* Confirms if the cache contains specified cache item.
@@ -66,7 +66,7 @@ public function getItems(array $keys = array());
* @return bool
* True if item exists in the cache, false otherwise.
*/
- public function hasItem($key);
+ public function hasItem(string $key): bool;
/**
* Deletes all items in the pool.
@@ -74,7 +74,7 @@ public function hasItem($key);
* @return bool
* True if the pool was successfully cleared. False if there was an error.
*/
- public function clear();
+ public function clear(): bool;
/**
* Removes the item from the pool.
@@ -89,14 +89,14 @@ public function clear();
* @return bool
* True if the item was successfully removed. False if there was an error.
*/
- public function deleteItem($key);
+ public function deleteItem(string $key): bool;
/**
* Removes multiple items from the pool.
*
* @param string[] $keys
* An array of keys that should be removed from the pool.
-
+ *
* @throws InvalidArgumentException
* If any of the keys in $keys are not a legal value a \Psr\Cache\InvalidArgumentException
* MUST be thrown.
@@ -104,7 +104,7 @@ public function deleteItem($key);
* @return bool
* True if the items were successfully removed. False if there was an error.
*/
- public function deleteItems(array $keys);
+ public function deleteItems(array $keys): bool;
/**
* Persists a cache item immediately.
@@ -115,7 +115,7 @@ public function deleteItems(array $keys);
* @return bool
* True if the item was successfully persisted. False if there was an error.
*/
- public function save(CacheItemInterface $item);
+ public function save(CacheItemInterface $item): bool;
/**
* Sets a cache item to be persisted later.
@@ -126,7 +126,7 @@ public function save(CacheItemInterface $item);
* @return bool
* False if the item could not be queued or if a commit was attempted and failed. True otherwise.
*/
- public function saveDeferred(CacheItemInterface $item);
+ public function saveDeferred(CacheItemInterface $item): bool;
/**
* Persists any deferred cache items.
@@ -134,5 +134,5 @@ public function saveDeferred(CacheItemInterface $item);
* @return bool
* True if all not-yet-saved items were successfully saved or there were none. False otherwise.
*/
- public function commit();
+ public function commit(): bool;
}
diff --git a/app/vendor/psr/http-client/CHANGELOG.md b/app/vendor/psr/http-client/CHANGELOG.md
index e2dc25f51..babba7c7b 100644
--- a/app/vendor/psr/http-client/CHANGELOG.md
+++ b/app/vendor/psr/http-client/CHANGELOG.md
@@ -2,6 +2,14 @@
All notable changes to this project will be documented in this file, in reverse chronological order by release.
+## 1.0.3
+
+Add `source` link in composer.json. No code changes.
+
+## 1.0.2
+
+Allow PSR-7 (psr/http-message) 2.0. No code changes.
+
## 1.0.1
Allow installation with PHP 8. No code changes.
diff --git a/app/vendor/psr/http-client/README.md b/app/vendor/psr/http-client/README.md
index 6876b8403..84af5c55d 100644
--- a/app/vendor/psr/http-client/README.md
+++ b/app/vendor/psr/http-client/README.md
@@ -7,6 +7,6 @@ Note that this is not a HTTP Client implementation of its own. It is merely abst
The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.
-[psr-url]: http://www.php-fig.org/psr/psr-18
+[psr-url]: https://www.php-fig.org/psr/psr-18
[package-url]: https://packagist.org/packages/psr/http-client
[implementation-url]: https://packagist.org/providers/psr/http-client-implementation
diff --git a/app/vendor/psr/http-client/composer.json b/app/vendor/psr/http-client/composer.json
index c195f8ff1..6fed350be 100644
--- a/app/vendor/psr/http-client/composer.json
+++ b/app/vendor/psr/http-client/composer.json
@@ -7,12 +7,15 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
+ "support": {
+ "source": "https://github.com/php-fig/http-client"
+ },
"require": {
"php": "^7.0 || ^8.0",
- "psr/http-message": "^1.0"
+ "psr/http-message": "^1.0 || ^2.0"
},
"autoload": {
"psr-4": {
diff --git a/app/vendor/psr/http-factory/.gitignore b/app/vendor/psr/http-factory/.gitignore
deleted file mode 100644
index d8a7996ab..000000000
--- a/app/vendor/psr/http-factory/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-composer.lock
-vendor/
diff --git a/app/vendor/psr/http-factory/.pullapprove.yml b/app/vendor/psr/http-factory/.pullapprove.yml
deleted file mode 100644
index 8cf081942..000000000
--- a/app/vendor/psr/http-factory/.pullapprove.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-extends: default
-reviewers:
- -
- name: contributors
- required: 1
- teams:
- - http-factory-contributors
diff --git a/app/vendor/psr/http-factory/README.md b/app/vendor/psr/http-factory/README.md
index 41d362a62..bf8913b57 100644
--- a/app/vendor/psr/http-factory/README.md
+++ b/app/vendor/psr/http-factory/README.md
@@ -1,10 +1,12 @@
HTTP Factories
==============
-This repository holds all interfaces related to [PSR-17 (HTTP Message Factories)][psr-17].
-Please refer to the specification for a description.
+This repository holds all interfaces related to [PSR-17 (HTTP Factories)][psr-url].
-You can find implementations of the specification by looking for packages providing the
-[psr/http-factory-implementation](https://packagist.org/providers/psr/http-factory-implementation) virtual package.
+Note that this is not a HTTP Factory implementation of its own. It is merely interfaces that describe the components of a HTTP Factory.
-[psr-17]: https://www.php-fig.org/psr/psr-17/
+The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.
+
+[psr-url]: https://www.php-fig.org/psr/psr-17/
+[package-url]: https://packagist.org/packages/psr/http-factory
+[implementation-url]: https://packagist.org/providers/psr/http-factory-implementation
diff --git a/app/vendor/psr/http-factory/composer.json b/app/vendor/psr/http-factory/composer.json
index af62b290f..d1bbddeea 100644
--- a/app/vendor/psr/http-factory/composer.json
+++ b/app/vendor/psr/http-factory/composer.json
@@ -15,12 +15,12 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"require": {
"php": ">=7.0.0",
- "psr/http-message": "^1.0"
+ "psr/http-message": "^1.0 || ^2.0"
},
"autoload": {
"psr-4": {
diff --git a/app/vendor/psr/http-message/README.md b/app/vendor/psr/http-message/README.md
index 28185338f..2668be6c3 100644
--- a/app/vendor/psr/http-message/README.md
+++ b/app/vendor/psr/http-message/README.md
@@ -10,4 +10,7 @@ interface that describes a HTTP message. See the specification for more details.
Usage
-----
-We'll certainly need some stuff in here.
\ No newline at end of file
+Before reading the usage guide we recommend reading the PSR-7 interfaces method list:
+
+* [`PSR-7 Interfaces Method List`](docs/PSR7-Interfaces.md)
+* [`PSR-7 Usage Guide`](docs/PSR7-Usage.md)
\ No newline at end of file
diff --git a/app/vendor/psr/http-message/composer.json b/app/vendor/psr/http-message/composer.json
index b0d2937a0..56e8c0a6d 100644
--- a/app/vendor/psr/http-message/composer.json
+++ b/app/vendor/psr/http-message/composer.json
@@ -11,7 +11,7 @@
}
],
"require": {
- "php": ">=5.3.0"
+ "php": "^7.2 || ^8.0"
},
"autoload": {
"psr-4": {
@@ -20,7 +20,7 @@
},
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "1.1.x-dev"
}
}
}
diff --git a/app/vendor/psr/http-message/docs/PSR7-Interfaces.md b/app/vendor/psr/http-message/docs/PSR7-Interfaces.md
new file mode 100644
index 000000000..3a7e7dda6
--- /dev/null
+++ b/app/vendor/psr/http-message/docs/PSR7-Interfaces.md
@@ -0,0 +1,130 @@
+# Interfaces
+
+The purpose of this list is to help in finding the methods when working with PSR-7. This can be considered as a cheatsheet for PSR-7 interfaces.
+
+The interfaces defined in PSR-7 are the following:
+
+| Class Name | Description |
+|---|---|
+| [Psr\Http\Message\MessageInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagemessageinterface) | Representation of a HTTP message |
+| [Psr\Http\Message\RequestInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagerequestinterface) | Representation of an outgoing, client-side request. |
+| [Psr\Http\Message\ServerRequestInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageserverrequestinterface) | Representation of an incoming, server-side HTTP request. |
+| [Psr\Http\Message\ResponseInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageresponseinterface) | Representation of an outgoing, server-side response. |
+| [Psr\Http\Message\StreamInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagestreaminterface) | Describes a data stream |
+| [Psr\Http\Message\UriInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageuriinterface) | Value object representing a URI. |
+| [Psr\Http\Message\UploadedFileInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageuploadedfileinterface) | Value object representing a file uploaded through an HTTP request. |
+
+## `Psr\Http\Message\MessageInterface` Methods
+
+| Method Name | Description | Notes |
+|------------------------------------| ----------- | ----- |
+| `getProtocolVersion()` | Retrieve HTTP protocol version | 1.0 or 1.1 |
+| `withProtocolVersion($version)` | Returns new message instance with given HTTP protocol version | |
+| `getHeaders()` | Retrieve all HTTP Headers | [Request Header List](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_fields), [Response Header List](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Response_fields) |
+| `hasHeader($name)` | Checks if HTTP Header with given name exists | |
+| `getHeader($name)` | Retrieves a array with the values for a single header | |
+| `getHeaderLine($name)` | Retrieves a comma-separated string of the values for a single header | |
+| `withHeader($name, $value)` | Returns new message instance with given HTTP Header | if the header existed in the original instance, replaces the header value from the original message with the value provided when creating the new instance. |
+| `withAddedHeader($name, $value)` | Returns new message instance with appended value to given header | If header already exists value will be appended, if not a new header will be created |
+| `withoutHeader($name)` | Removes HTTP Header with given name| |
+| `getBody()` | Retrieves the HTTP Message Body | Returns object implementing `StreamInterface`|
+| `withBody(StreamInterface $body)` | Returns new message instance with given HTTP Message Body | |
+
+
+## `Psr\Http\Message\RequestInterface` Methods
+
+Same methods as `Psr\Http\Message\MessageInterface` + the following methods:
+
+| Method Name | Description | Notes |
+|------------------------------------| ----------- | ----- |
+| `getRequestTarget()` | Retrieves the message's request target | origin-form, absolute-form, authority-form, asterisk-form ([RFC7230](https://www.rfc-editor.org/rfc/rfc7230.txt)) |
+| `withRequestTarget($requestTarget)` | Return a new message instance with the specific request-target | |
+| `getMethod()` | Retrieves the HTTP method of the request. | GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE (defined in [RFC7231](https://tools.ietf.org/html/rfc7231)), PATCH (defined in [RFC5789](https://tools.ietf.org/html/rfc5789)) |
+| `withMethod($method)` | Returns a new message instance with the provided HTTP method | |
+| `getUri()` | Retrieves the URI instance | |
+| `withUri(UriInterface $uri, $preserveHost = false)` | Returns a new message instance with the provided URI | |
+
+
+## `Psr\Http\Message\ServerRequestInterface` Methods
+
+Same methods as `Psr\Http\Message\RequestInterface` + the following methods:
+
+| Method Name | Description | Notes |
+|------------------------------------| ----------- | ----- |
+| `getServerParams() ` | Retrieve server parameters | Typically derived from `$_SERVER` |
+| `getCookieParams()` | Retrieves cookies sent by the client to the server. | Typically derived from `$_COOKIES` |
+| `withCookieParams(array $cookies)` | Returns a new request instance with the specified cookies | |
+| `withQueryParams(array $query)` | Returns a new request instance with the specified query string arguments | |
+| `getUploadedFiles()` | Retrieve normalized file upload data | |
+| `withUploadedFiles(array $uploadedFiles)` | Returns a new request instance with the specified uploaded files | |
+| `getParsedBody()` | Retrieve any parameters provided in the request body | |
+| `withParsedBody($data)` | Returns a new request instance with the specified body parameters | |
+| `getAttributes()` | Retrieve attributes derived from the request | |
+| `getAttribute($name, $default = null)` | Retrieve a single derived request attribute | |
+| `withAttribute($name, $value)` | Returns a new request instance with the specified derived request attribute | |
+| `withoutAttribute($name)` | Returns a new request instance that without the specified derived request attribute | |
+
+## `Psr\Http\Message\ResponseInterface` Methods:
+
+Same methods as `Psr\Http\Message\MessageInterface` + the following methods:
+
+| Method Name | Description | Notes |
+|------------------------------------| ----------- | ----- |
+| `getStatusCode()` | Gets the response status code. | |
+| `withStatus($code, $reasonPhrase = '')` | Returns a new response instance with the specified status code and, optionally, reason phrase. | |
+| `getReasonPhrase()` | Gets the response reason phrase associated with the status code. | |
+
+## `Psr\Http\Message\StreamInterface` Methods
+
+| Method Name | Description | Notes |
+|------------------------------------| ----------- | ----- |
+| `__toString()` | Reads all data from the stream into a string, from the beginning to end. | |
+| `close()` | Closes the stream and any underlying resources. | |
+| `detach()` | Separates any underlying resources from the stream. | |
+| `getSize()` | Get the size of the stream if known. | |
+| `eof()` | Returns true if the stream is at the end of the stream.| |
+| `isSeekable()` | Returns whether or not the stream is seekable. | |
+| `seek($offset, $whence = SEEK_SET)` | Seek to a position in the stream. | |
+| `rewind()` | Seek to the beginning of the stream. | |
+| `isWritable()` | Returns whether or not the stream is writable. | |
+| `write($string)` | Write data to the stream. | |
+| `isReadable()` | Returns whether or not the stream is readable. | |
+| `read($length)` | Read data from the stream. | |
+| `getContents()` | Returns the remaining contents in a string | |
+| `getMetadata($key = null)()` | Get stream metadata as an associative array or retrieve a specific key. | |
+
+## `Psr\Http\Message\UriInterface` Methods
+
+| Method Name | Description | Notes |
+|------------------------------------| ----------- | ----- |
+| `getScheme()` | Retrieve the scheme component of the URI. | |
+| `getAuthority()` | Retrieve the authority component of the URI. | |
+| `getUserInfo()` | Retrieve the user information component of the URI. | |
+| `getHost()` | Retrieve the host component of the URI. | |
+| `getPort()` | Retrieve the port component of the URI. | |
+| `getPath()` | Retrieve the path component of the URI. | |
+| `getQuery()` | Retrieve the query string of the URI. | |
+| `getFragment()` | Retrieve the fragment component of the URI. | |
+| `withScheme($scheme)` | Return an instance with the specified scheme. | |
+| `withUserInfo($user, $password = null)` | Return an instance with the specified user information. | |
+| `withHost($host)` | Return an instance with the specified host. | |
+| `withPort($port)` | Return an instance with the specified port. | |
+| `withPath($path)` | Return an instance with the specified path. | |
+| `withQuery($query)` | Return an instance with the specified query string. | |
+| `withFragment($fragment)` | Return an instance with the specified URI fragment. | |
+| `__toString()` | Return the string representation as a URI reference. | |
+
+## `Psr\Http\Message\UploadedFileInterface` Methods
+
+| Method Name | Description | Notes |
+|------------------------------------| ----------- | ----- |
+| `getStream()` | Retrieve a stream representing the uploaded file. | |
+| `moveTo($targetPath)` | Move the uploaded file to a new location. | |
+| `getSize()` | Retrieve the file size. | |
+| `getError()` | Retrieve the error associated with the uploaded file. | |
+| `getClientFilename()` | Retrieve the filename sent by the client. | |
+| `getClientMediaType()` | Retrieve the media type sent by the client. | |
+
+> `RequestInterface`, `ServerRequestInterface`, `ResponseInterface` extend `MessageInterface` because the `Request` and the `Response` are `HTTP Messages`.
+> When using `ServerRequestInterface`, both `RequestInterface` and `Psr\Http\Message\MessageInterface` methods are considered.
+
diff --git a/app/vendor/psr/http-message/docs/PSR7-Usage.md b/app/vendor/psr/http-message/docs/PSR7-Usage.md
new file mode 100644
index 000000000..b6d048a34
--- /dev/null
+++ b/app/vendor/psr/http-message/docs/PSR7-Usage.md
@@ -0,0 +1,159 @@
+### PSR-7 Usage
+
+All PSR-7 applications comply with these interfaces
+They were created to establish a standard between middleware implementations.
+
+> `RequestInterface`, `ServerRequestInterface`, `ResponseInterface` extend `MessageInterface` because the `Request` and the `Response` are `HTTP Messages`.
+> When using `ServerRequestInterface`, both `RequestInterface` and `Psr\Http\Message\MessageInterface` methods are considered.
+
+
+The following examples will illustrate how basic operations are done in PSR-7.
+
+##### Examples
+
+
+For this examples to work (at least) a PSR-7 implementation package is required. (eg: zendframework/zend-diactoros, guzzlehttp/psr7, slim/slim, etc)
+All PSR-7 implementations should have the same behaviour.
+
+The following will be assumed:
+`$request` is an object of `Psr\Http\Message\RequestInterface` and
+
+`$response` is an object implementing `Psr\Http\Message\RequestInterface`
+
+
+### Working with HTTP Headers
+
+#### Adding headers to response:
+
+```php
+$response->withHeader('My-Custom-Header', 'My Custom Message');
+```
+
+#### Appending values to headers
+
+```php
+$response->withAddedHeader('My-Custom-Header', 'The second message');
+```
+
+#### Checking if header exists:
+
+```php
+$request->hasHeader('My-Custom-Header'); // will return false
+$response->hasHeader('My-Custom-Header'); // will return true
+```
+
+> Note: My-Custom-Header was only added in the Response
+
+#### Getting comma-separated values from a header (also applies to request)
+
+```php
+// getting value from request headers
+$request->getHeaderLine('Content-Type'); // will return: "text/html; charset=UTF-8"
+// getting value from response headers
+$response->getHeaderLine('My-Custom-Header'); // will return: "My Custom Message; The second message"
+```
+
+#### Getting array of value from a header (also applies to request)
+```php
+// getting value from request headers
+$request->getHeader('Content-Type'); // will return: ["text/html", "charset=UTF-8"]
+// getting value from response headers
+$response->getHeader('My-Custom-Header'); // will return: ["My Custom Message", "The second message"]
+```
+
+#### Removing headers from HTTP Messages
+```php
+// removing a header from Request, removing deprecated "Content-MD5" header
+$request->withoutHeader('Content-MD5');
+
+// removing a header from Response
+// effect: the browser won't know the size of the stream
+// the browser will download the stream till it ends
+$response->withoutHeader('Content-Length');
+```
+
+### Working with HTTP Message Body
+
+When working with the PSR-7 there are two methods of implementation:
+#### 1. Getting the body separately
+
+> This method makes the body handling easier to understand and is useful when repeatedly calling body methods. (You only call `getBody()` once). Using this method mistakes like `$response->write()` are also prevented.
+
+```php
+$body = $response->getBody();
+// operations on body, eg. read, write, seek
+// ...
+// replacing the old body
+$response->withBody($body);
+// this last statement is optional as we working with objects
+// in this case the "new" body is same with the "old" one
+// the $body variable has the same value as the one in $request, only the reference is passed
+```
+
+#### 2. Working directly on response
+
+> This method is useful when only performing few operations as the `$request->getBody()` statement fragment is required
+
+```php
+$response->getBody()->write('hello');
+```
+
+### Getting the body contents
+
+The following snippet gets the contents of a stream contents.
+> Note: Streams must be rewinded, if content was written into streams, it will be ignored when calling `getContents()` because the stream pointer is set to the last character, which is `\0` - meaning end of stream.
+```php
+$body = $response->getBody();
+$body->rewind(); // or $body->seek(0);
+$bodyText = $body->getContents();
+```
+> Note: If `$body->seek(1)` is called before `$body->getContents()`, the first character will be ommited as the starting pointer is set to `1`, not `0`. This is why using `$body->rewind()` is recommended.
+
+### Append to body
+
+```php
+$response->getBody()->write('Hello'); // writing directly
+$body = $request->getBody(); // which is a `StreamInterface`
+$body->write('xxxxx');
+```
+
+### Prepend to body
+Prepending is different when it comes to streams. The content must be copied before writing the content to be prepended.
+The following example will explain the behaviour of streams.
+
+```php
+// assuming our response is initially empty
+$body = $repsonse->getBody();
+// writing the string "abcd"
+$body->write('abcd');
+
+// seeking to start of stream
+$body->seek(0);
+// writing 'ef'
+$body->write('ef'); // at this point the stream contains "efcd"
+```
+
+#### Prepending by rewriting separately
+
+```php
+// assuming our response body stream only contains: "abcd"
+$body = $response->getBody();
+$body->rewind();
+$contents = $body->getContents(); // abcd
+// seeking the stream to beginning
+$body->rewind();
+$body->write('ef'); // stream contains "efcd"
+$body->write($contents); // stream contains "efabcd"
+```
+
+> Note: `getContents()` seeks the stream while reading it, therefore if the second `rewind()` method call was not present the stream would have resulted in `abcdefabcd` because the `write()` method appends to stream if not preceeded by `rewind()` or `seek(0)`.
+
+#### Prepending by using contents as a string
+```php
+$body = $response->getBody();
+$body->rewind();
+$contents = $body->getContents(); // efabcd
+$contents = 'ef'.$contents;
+$body->rewind();
+$body->write($contents);
+```
diff --git a/app/vendor/psr/http-message/src/MessageInterface.php b/app/vendor/psr/http-message/src/MessageInterface.php
index dd46e5ec8..8cdb4ed63 100644
--- a/app/vendor/psr/http-message/src/MessageInterface.php
+++ b/app/vendor/psr/http-message/src/MessageInterface.php
@@ -1,5 +1,7 @@
=7.0",
- "psr/http-message": "^1.0"
+ "psr/http-message": "^1.0 || ^2.0"
},
"autoload": {
"psr-4": {
diff --git a/app/vendor/psr/http-server-middleware/README.md b/app/vendor/psr/http-server-middleware/README.md
index 8359bd05c..7b0a9550e 100644
--- a/app/vendor/psr/http-server-middleware/README.md
+++ b/app/vendor/psr/http-server-middleware/README.md
@@ -1,6 +1,12 @@
HTTP Server Middleware
-======================
+==============
-Provides the `MiddlewareInterface` of [PSR-15][psr-15].
+This repository holds the `MiddlewareInterface` related to [PSR-15 (HTTP Server Request Handlers)][psr-url].
-[psr-15]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-15-request-handlers.md
+Note that this is not a Middleware implementation of its own. It is merely the interface that describe a Middleware.
+
+The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.
+
+[psr-url]: https://www.php-fig.org/psr/psr-15/
+[package-url]: https://packagist.org/packages/psr/http-server-middleware
+[implementation-url]: https://packagist.org/providers/psr/http-server-middleware-implementation
diff --git a/app/vendor/psr/http-server-middleware/composer.json b/app/vendor/psr/http-server-middleware/composer.json
index 1595513c3..151167148 100644
--- a/app/vendor/psr/http-server-middleware/composer.json
+++ b/app/vendor/psr/http-server-middleware/composer.json
@@ -15,12 +15,12 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"require": {
"php": ">=7.0",
- "psr/http-message": "^1.0",
+ "psr/http-message": "^1.0 || ^2.0",
"psr/http-server-handler": "^1.0"
},
"autoload": {
diff --git a/app/vendor/psr/log/Psr/Log/AbstractLogger.php b/app/vendor/psr/log/Psr/Log/AbstractLogger.php
deleted file mode 100644
index e02f9daf3..000000000
--- a/app/vendor/psr/log/Psr/Log/AbstractLogger.php
+++ /dev/null
@@ -1,128 +0,0 @@
-log(LogLevel::EMERGENCY, $message, $context);
- }
-
- /**
- * Action must be taken immediately.
- *
- * Example: Entire website down, database unavailable, etc. This should
- * trigger the SMS alerts and wake you up.
- *
- * @param string $message
- * @param mixed[] $context
- *
- * @return void
- */
- public function alert($message, array $context = array())
- {
- $this->log(LogLevel::ALERT, $message, $context);
- }
-
- /**
- * Critical conditions.
- *
- * Example: Application component unavailable, unexpected exception.
- *
- * @param string $message
- * @param mixed[] $context
- *
- * @return void
- */
- public function critical($message, array $context = array())
- {
- $this->log(LogLevel::CRITICAL, $message, $context);
- }
-
- /**
- * Runtime errors that do not require immediate action but should typically
- * be logged and monitored.
- *
- * @param string $message
- * @param mixed[] $context
- *
- * @return void
- */
- public function error($message, array $context = array())
- {
- $this->log(LogLevel::ERROR, $message, $context);
- }
-
- /**
- * Exceptional occurrences that are not errors.
- *
- * Example: Use of deprecated APIs, poor use of an API, undesirable things
- * that are not necessarily wrong.
- *
- * @param string $message
- * @param mixed[] $context
- *
- * @return void
- */
- public function warning($message, array $context = array())
- {
- $this->log(LogLevel::WARNING, $message, $context);
- }
-
- /**
- * Normal but significant events.
- *
- * @param string $message
- * @param mixed[] $context
- *
- * @return void
- */
- public function notice($message, array $context = array())
- {
- $this->log(LogLevel::NOTICE, $message, $context);
- }
-
- /**
- * Interesting events.
- *
- * Example: User logs in, SQL logs.
- *
- * @param string $message
- * @param mixed[] $context
- *
- * @return void
- */
- public function info($message, array $context = array())
- {
- $this->log(LogLevel::INFO, $message, $context);
- }
-
- /**
- * Detailed debug information.
- *
- * @param string $message
- * @param mixed[] $context
- *
- * @return void
- */
- public function debug($message, array $context = array())
- {
- $this->log(LogLevel::DEBUG, $message, $context);
- }
-}
diff --git a/app/vendor/psr/log/Psr/Log/LoggerInterface.php b/app/vendor/psr/log/Psr/Log/LoggerInterface.php
deleted file mode 100644
index 2206cfde4..000000000
--- a/app/vendor/psr/log/Psr/Log/LoggerInterface.php
+++ /dev/null
@@ -1,125 +0,0 @@
-log(LogLevel::EMERGENCY, $message, $context);
- }
-
- /**
- * Action must be taken immediately.
- *
- * Example: Entire website down, database unavailable, etc. This should
- * trigger the SMS alerts and wake you up.
- *
- * @param string $message
- * @param array $context
- *
- * @return void
- */
- public function alert($message, array $context = array())
- {
- $this->log(LogLevel::ALERT, $message, $context);
- }
-
- /**
- * Critical conditions.
- *
- * Example: Application component unavailable, unexpected exception.
- *
- * @param string $message
- * @param array $context
- *
- * @return void
- */
- public function critical($message, array $context = array())
- {
- $this->log(LogLevel::CRITICAL, $message, $context);
- }
-
- /**
- * Runtime errors that do not require immediate action but should typically
- * be logged and monitored.
- *
- * @param string $message
- * @param array $context
- *
- * @return void
- */
- public function error($message, array $context = array())
- {
- $this->log(LogLevel::ERROR, $message, $context);
- }
-
- /**
- * Exceptional occurrences that are not errors.
- *
- * Example: Use of deprecated APIs, poor use of an API, undesirable things
- * that are not necessarily wrong.
- *
- * @param string $message
- * @param array $context
- *
- * @return void
- */
- public function warning($message, array $context = array())
- {
- $this->log(LogLevel::WARNING, $message, $context);
- }
-
- /**
- * Normal but significant events.
- *
- * @param string $message
- * @param array $context
- *
- * @return void
- */
- public function notice($message, array $context = array())
- {
- $this->log(LogLevel::NOTICE, $message, $context);
- }
-
- /**
- * Interesting events.
- *
- * Example: User logs in, SQL logs.
- *
- * @param string $message
- * @param array $context
- *
- * @return void
- */
- public function info($message, array $context = array())
- {
- $this->log(LogLevel::INFO, $message, $context);
- }
-
- /**
- * Detailed debug information.
- *
- * @param string $message
- * @param array $context
- *
- * @return void
- */
- public function debug($message, array $context = array())
- {
- $this->log(LogLevel::DEBUG, $message, $context);
- }
-
- /**
- * Logs with an arbitrary level.
- *
- * @param mixed $level
- * @param string $message
- * @param array $context
- *
- * @return void
- *
- * @throws \Psr\Log\InvalidArgumentException
- */
- abstract public function log($level, $message, array $context = array());
-}
diff --git a/app/vendor/psr/log/Psr/Log/Test/DummyTest.php b/app/vendor/psr/log/Psr/Log/Test/DummyTest.php
deleted file mode 100644
index 9638c1101..000000000
--- a/app/vendor/psr/log/Psr/Log/Test/DummyTest.php
+++ /dev/null
@@ -1,18 +0,0 @@
- ".
- *
- * Example ->error('Foo') would yield "error Foo".
- *
- * @return string[]
- */
- abstract public function getLogs();
-
- public function testImplements()
- {
- $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger());
- }
-
- /**
- * @dataProvider provideLevelsAndMessages
- */
- public function testLogsAtAllLevels($level, $message)
- {
- $logger = $this->getLogger();
- $logger->{$level}($message, array('user' => 'Bob'));
- $logger->log($level, $message, array('user' => 'Bob'));
-
- $expected = array(
- $level.' message of level '.$level.' with context: Bob',
- $level.' message of level '.$level.' with context: Bob',
- );
- $this->assertEquals($expected, $this->getLogs());
- }
-
- public function provideLevelsAndMessages()
- {
- return array(
- LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'),
- LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'),
- LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'),
- LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'),
- LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'),
- LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'),
- LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'),
- LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'),
- );
- }
-
- /**
- * @expectedException \Psr\Log\InvalidArgumentException
- */
- public function testThrowsOnInvalidLevel()
- {
- $logger = $this->getLogger();
- $logger->log('invalid level', 'Foo');
- }
-
- public function testContextReplacement()
- {
- $logger = $this->getLogger();
- $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar'));
-
- $expected = array('info {Message {nothing} Bob Bar a}');
- $this->assertEquals($expected, $this->getLogs());
- }
-
- public function testObjectCastToString()
- {
- if (method_exists($this, 'createPartialMock')) {
- $dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString'));
- } else {
- $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString'));
- }
- $dummy->expects($this->once())
- ->method('__toString')
- ->will($this->returnValue('DUMMY'));
-
- $this->getLogger()->warning($dummy);
-
- $expected = array('warning DUMMY');
- $this->assertEquals($expected, $this->getLogs());
- }
-
- public function testContextCanContainAnything()
- {
- $closed = fopen('php://memory', 'r');
- fclose($closed);
-
- $context = array(
- 'bool' => true,
- 'null' => null,
- 'string' => 'Foo',
- 'int' => 0,
- 'float' => 0.5,
- 'nested' => array('with object' => new DummyTest),
- 'object' => new \DateTime,
- 'resource' => fopen('php://memory', 'r'),
- 'closed' => $closed,
- );
-
- $this->getLogger()->warning('Crazy context data', $context);
-
- $expected = array('warning Crazy context data');
- $this->assertEquals($expected, $this->getLogs());
- }
-
- public function testContextExceptionKeyCanBeExceptionOrOtherValues()
- {
- $logger = $this->getLogger();
- $logger->warning('Random message', array('exception' => 'oops'));
- $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail')));
-
- $expected = array(
- 'warning Random message',
- 'critical Uncaught Exception!'
- );
- $this->assertEquals($expected, $this->getLogs());
- }
-}
diff --git a/app/vendor/psr/log/Psr/Log/Test/TestLogger.php b/app/vendor/psr/log/Psr/Log/Test/TestLogger.php
deleted file mode 100644
index 1be323049..000000000
--- a/app/vendor/psr/log/Psr/Log/Test/TestLogger.php
+++ /dev/null
@@ -1,147 +0,0 @@
- $level,
- 'message' => $message,
- 'context' => $context,
- ];
-
- $this->recordsByLevel[$record['level']][] = $record;
- $this->records[] = $record;
- }
-
- public function hasRecords($level)
- {
- return isset($this->recordsByLevel[$level]);
- }
-
- public function hasRecord($record, $level)
- {
- if (is_string($record)) {
- $record = ['message' => $record];
- }
- return $this->hasRecordThatPasses(function ($rec) use ($record) {
- if ($rec['message'] !== $record['message']) {
- return false;
- }
- if (isset($record['context']) && $rec['context'] !== $record['context']) {
- return false;
- }
- return true;
- }, $level);
- }
-
- public function hasRecordThatContains($message, $level)
- {
- return $this->hasRecordThatPasses(function ($rec) use ($message) {
- return strpos($rec['message'], $message) !== false;
- }, $level);
- }
-
- public function hasRecordThatMatches($regex, $level)
- {
- return $this->hasRecordThatPasses(function ($rec) use ($regex) {
- return preg_match($regex, $rec['message']) > 0;
- }, $level);
- }
-
- public function hasRecordThatPasses(callable $predicate, $level)
- {
- if (!isset($this->recordsByLevel[$level])) {
- return false;
- }
- foreach ($this->recordsByLevel[$level] as $i => $rec) {
- if (call_user_func($predicate, $rec, $i)) {
- return true;
- }
- }
- return false;
- }
-
- public function __call($method, $args)
- {
- if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) {
- $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3];
- $level = strtolower($matches[2]);
- if (method_exists($this, $genericMethod)) {
- $args[] = $level;
- return call_user_func_array([$this, $genericMethod], $args);
- }
- }
- throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()');
- }
-
- public function reset()
- {
- $this->records = [];
- $this->recordsByLevel = [];
- }
-}
diff --git a/app/vendor/psr/log/composer.json b/app/vendor/psr/log/composer.json
index ca0569537..f3f066719 100644
--- a/app/vendor/psr/log/composer.json
+++ b/app/vendor/psr/log/composer.json
@@ -11,16 +11,16 @@
}
],
"require": {
- "php": ">=5.3.0"
+ "php": ">=8.0.0"
},
"autoload": {
"psr-4": {
- "Psr\\Log\\": "Psr/Log/"
+ "Psr\\Log\\": "src"
}
},
"extra": {
"branch-alias": {
- "dev-master": "1.1.x-dev"
+ "dev-master": "2.0.x-dev"
}
}
}
diff --git a/app/vendor/psr/log/src/AbstractLogger.php b/app/vendor/psr/log/src/AbstractLogger.php
new file mode 100644
index 000000000..d60a091af
--- /dev/null
+++ b/app/vendor/psr/log/src/AbstractLogger.php
@@ -0,0 +1,15 @@
+log(LogLevel::EMERGENCY, $message, $context);
+ }
+
+ /**
+ * Action must be taken immediately.
+ *
+ * Example: Entire website down, database unavailable, etc. This should
+ * trigger the SMS alerts and wake you up.
+ *
+ * @param string|\Stringable $message
+ * @param array $context
+ *
+ * @return void
+ */
+ public function alert(string|\Stringable $message, array $context = [])
+ {
+ $this->log(LogLevel::ALERT, $message, $context);
+ }
+
+ /**
+ * Critical conditions.
+ *
+ * Example: Application component unavailable, unexpected exception.
+ *
+ * @param string|\Stringable $message
+ * @param array $context
+ *
+ * @return void
+ */
+ public function critical(string|\Stringable $message, array $context = [])
+ {
+ $this->log(LogLevel::CRITICAL, $message, $context);
+ }
+
+ /**
+ * Runtime errors that do not require immediate action but should typically
+ * be logged and monitored.
+ *
+ * @param string|\Stringable $message
+ * @param array $context
+ *
+ * @return void
+ */
+ public function error(string|\Stringable $message, array $context = [])
+ {
+ $this->log(LogLevel::ERROR, $message, $context);
+ }
+
+ /**
+ * Exceptional occurrences that are not errors.
+ *
+ * Example: Use of deprecated APIs, poor use of an API, undesirable things
+ * that are not necessarily wrong.
+ *
+ * @param string|\Stringable $message
+ * @param array $context
+ *
+ * @return void
+ */
+ public function warning(string|\Stringable $message, array $context = [])
+ {
+ $this->log(LogLevel::WARNING, $message, $context);
+ }
+
+ /**
+ * Normal but significant events.
+ *
+ * @param string|\Stringable $message
+ * @param array $context
+ *
+ * @return void
+ */
+ public function notice(string|\Stringable $message, array $context = [])
+ {
+ $this->log(LogLevel::NOTICE, $message, $context);
+ }
+
+ /**
+ * Interesting events.
+ *
+ * Example: User logs in, SQL logs.
+ *
+ * @param string|\Stringable $message
+ * @param array $context
+ *
+ * @return void
+ */
+ public function info(string|\Stringable $message, array $context = [])
+ {
+ $this->log(LogLevel::INFO, $message, $context);
+ }
+
+ /**
+ * Detailed debug information.
+ *
+ * @param string|\Stringable $message
+ * @param array $context
+ *
+ * @return void
+ */
+ public function debug(string|\Stringable $message, array $context = [])
+ {
+ $this->log(LogLevel::DEBUG, $message, $context);
+ }
+
+ /**
+ * Logs with an arbitrary level.
+ *
+ * @param mixed $level
+ * @param string|\Stringable $message
+ * @param array $context
+ *
+ * @return void
+ *
+ * @throws \Psr\Log\InvalidArgumentException
+ */
+ abstract public function log($level, string|\Stringable $message, array $context = []);
+}
diff --git a/app/vendor/psr/log/Psr/Log/NullLogger.php b/app/vendor/psr/log/src/NullLogger.php
similarity index 79%
rename from app/vendor/psr/log/Psr/Log/NullLogger.php
rename to app/vendor/psr/log/src/NullLogger.php
index c8f7293b1..560770571 100644
--- a/app/vendor/psr/log/Psr/Log/NullLogger.php
+++ b/app/vendor/psr/log/src/NullLogger.php
@@ -16,14 +16,14 @@ class NullLogger extends AbstractLogger
* Logs with an arbitrary level.
*
* @param mixed $level
- * @param string $message
- * @param array $context
+ * @param string|\Stringable $message
+ * @param array $context
*
* @return void
*
* @throws \Psr\Log\InvalidArgumentException
*/
- public function log($level, $message, array $context = array())
+ public function log($level, string|\Stringable $message, array $context = [])
{
// noop
}
diff --git a/app/vendor/psr/simple-cache/composer.json b/app/vendor/psr/simple-cache/composer.json
index 2978fa559..a520e7d57 100644
--- a/app/vendor/psr/simple-cache/composer.json
+++ b/app/vendor/psr/simple-cache/composer.json
@@ -6,11 +6,11 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"require": {
- "php": ">=5.3.0"
+ "php": ">=8.0.0"
},
"autoload": {
"psr-4": {
@@ -19,7 +19,7 @@
},
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "2.0.x-dev"
}
}
}
diff --git a/app/vendor/psr/simple-cache/src/CacheException.php b/app/vendor/psr/simple-cache/src/CacheException.php
index eba53815c..f61b24c2b 100644
--- a/app/vendor/psr/simple-cache/src/CacheException.php
+++ b/app/vendor/psr/simple-cache/src/CacheException.php
@@ -5,6 +5,6 @@
/**
* Interface used for all types of exceptions thrown by the implementing library.
*/
-interface CacheException
+interface CacheException extends \Throwable
{
}
diff --git a/app/vendor/psr/simple-cache/src/CacheInterface.php b/app/vendor/psr/simple-cache/src/CacheInterface.php
index 99e8d9574..cb05d2f1d 100644
--- a/app/vendor/psr/simple-cache/src/CacheInterface.php
+++ b/app/vendor/psr/simple-cache/src/CacheInterface.php
@@ -15,7 +15,7 @@ interface CacheInterface
* @throws \Psr\SimpleCache\InvalidArgumentException
* MUST be thrown if the $key string is not a legal value.
*/
- public function get($key, $default = null);
+ public function get(string $key, mixed $default = null);
/**
* Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.
@@ -31,7 +31,7 @@ public function get($key, $default = null);
* @throws \Psr\SimpleCache\InvalidArgumentException
* MUST be thrown if the $key string is not a legal value.
*/
- public function set($key, $value, $ttl = null);
+ public function set(string $key, mixed $value, null|int|\DateInterval $ttl = null);
/**
* Delete an item from the cache by its unique key.
@@ -43,7 +43,7 @@ public function set($key, $value, $ttl = null);
* @throws \Psr\SimpleCache\InvalidArgumentException
* MUST be thrown if the $key string is not a legal value.
*/
- public function delete($key);
+ public function delete(string $key);
/**
* Wipes clean the entire cache's keys.
@@ -55,16 +55,16 @@ public function clear();
/**
* Obtains multiple cache items by their unique keys.
*
- * @param iterable $keys A list of keys that can obtained in a single operation.
- * @param mixed $default Default value to return for keys that do not exist.
+ * @param iterable $keys A list of keys that can be obtained in a single operation.
+ * @param mixed $default Default value to return for keys that do not exist.
*
- * @return iterable A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value.
+ * @return iterable A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value.
*
* @throws \Psr\SimpleCache\InvalidArgumentException
* MUST be thrown if $keys is neither an array nor a Traversable,
* or if any of the $keys are not a legal value.
*/
- public function getMultiple($keys, $default = null);
+ public function getMultiple(iterable $keys, mixed $default = null);
/**
* Persists a set of key => value pairs in the cache, with an optional TTL.
@@ -80,12 +80,12 @@ public function getMultiple($keys, $default = null);
* MUST be thrown if $values is neither an array nor a Traversable,
* or if any of the $values are not a legal value.
*/
- public function setMultiple($values, $ttl = null);
+ public function setMultiple(iterable $values, null|int|\DateInterval $ttl = null);
/**
* Deletes multiple cache items in a single operation.
*
- * @param iterable $keys A list of string-based keys to be deleted.
+ * @param iterable $keys A list of string-based keys to be deleted.
*
* @return bool True if the items were successfully removed. False if there was an error.
*
@@ -93,7 +93,7 @@ public function setMultiple($values, $ttl = null);
* MUST be thrown if $keys is neither an array nor a Traversable,
* or if any of the $keys are not a legal value.
*/
- public function deleteMultiple($keys);
+ public function deleteMultiple(iterable $keys);
/**
* Determines whether an item is present in the cache.
@@ -110,5 +110,5 @@ public function deleteMultiple($keys);
* @throws \Psr\SimpleCache\InvalidArgumentException
* MUST be thrown if the $key string is not a legal value.
*/
- public function has($key);
+ public function has(string $key);
}
diff --git a/app/vendor/psy/psysh/LICENSE b/app/vendor/psy/psysh/LICENSE
index f2afd1c2c..007634a5f 100644
--- a/app/vendor/psy/psysh/LICENSE
+++ b/app/vendor/psy/psysh/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2012-2022 Justin Hileman
+Copyright (c) 2012-2023 Justin Hileman
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/app/vendor/psy/psysh/README.md b/app/vendor/psy/psysh/README.md
index 0be99d7a6..fc731d115 100644
--- a/app/vendor/psy/psysh/README.md
+++ b/app/vendor/psy/psysh/README.md
@@ -7,7 +7,7 @@ PsySH is a runtime developer console, interactive debugger and [REPL](https://en
[](https://packagist.org/packages/psy/psysh)
[](http://psysh.org)
-[](https://github.com/bobthecow/psysh/actions?query=branch:main)
+[](https://github.com/bobthecow/psysh/actions?query=branch:main)
[](https://styleci.io/repos/4549925)
@@ -30,6 +30,7 @@ PsySH is a runtime developer console, interactive debugger and [REPL](https://en
### [🛠 Configuration](https://github.com/bobthecow/psysh/wiki/Configuration)
* [🎛 Config options](https://github.com/bobthecow/psysh/wiki/Config-options)
+ * [🎨 Themes](https://github.com/bobthecow/psysh/wiki/Themes)
* [📄 Sample config file](https://github.com/bobthecow/psysh/wiki/Sample-config)
### [🔌 Integrations](https://github.com/bobthecow/psysh/wiki/Integrations)
diff --git a/app/vendor/psy/psysh/bin/psysh b/app/vendor/psy/psysh/bin/psysh
index 1205b6316..a20a3e115 100755
--- a/app/vendor/psy/psysh/bin/psysh
+++ b/app/vendor/psy/psysh/bin/psysh
@@ -4,7 +4,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/composer.json b/app/vendor/psy/psysh/composer.json
index 327acb6b7..dbd9b12e3 100644
--- a/app/vendor/psy/psysh/composer.json
+++ b/app/vendor/psy/psysh/composer.json
@@ -21,15 +21,13 @@
"nikic/php-parser": "^4.0 || ^3.1"
},
"require-dev": {
- "hoa/console": "3.17.05.02",
"bamarni/composer-bin-plugin": "^1.2"
},
"suggest": {
"ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
"ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
"ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
- "ext-pdo-sqlite": "The doc command requires SQLite to work.",
- "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
+ "ext-pdo-sqlite": "The doc command requires SQLite to work."
},
"autoload": {
"files": ["src/functions.php"],
@@ -51,6 +49,10 @@
"extra": {
"branch-alias": {
"dev-main": "0.11.x-dev"
+ },
+ "bamarni-bin": {
+ "bin-links": false,
+ "forward-command": false
}
},
"conflict": {
diff --git a/app/vendor/psy/psysh/src/CodeCleaner.php b/app/vendor/psy/psysh/src/CodeCleaner.php
index 60fe888f7..8429847f6 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -18,6 +18,7 @@
use Psy\CodeCleaner\AssignThisVariablePass;
use Psy\CodeCleaner\CalledClassPass;
use Psy\CodeCleaner\CallTimePassByReferencePass;
+use Psy\CodeCleaner\CodeCleanerPass;
use Psy\CodeCleaner\EmptyArrayDimFetchPass;
use Psy\CodeCleaner\ExitPass;
use Psy\CodeCleaner\FinalClassPass;
@@ -49,6 +50,8 @@
class CodeCleaner
{
private $yolo = false;
+ private $strictTypes = false;
+
private $parser;
private $printer;
private $traverser;
@@ -57,14 +60,16 @@ class CodeCleaner
/**
* CodeCleaner constructor.
*
- * @param Parser|null $parser A PhpParser Parser instance. One will be created if not explicitly supplied
- * @param Printer|null $printer A PhpParser Printer instance. One will be created if not explicitly supplied
- * @param NodeTraverser|null $traverser A PhpParser NodeTraverser instance. One will be created if not explicitly supplied
- * @param bool $yolo run without input validation
+ * @param Parser|null $parser A PhpParser Parser instance. One will be created if not explicitly supplied
+ * @param Printer|null $printer A PhpParser Printer instance. One will be created if not explicitly supplied
+ * @param NodeTraverser|null $traverser A PhpParser NodeTraverser instance. One will be created if not explicitly supplied
+ * @param bool $yolo run without input validation
+ * @param bool $strictTypes enforce strict types by default
*/
- public function __construct(Parser $parser = null, Printer $printer = null, NodeTraverser $traverser = null, bool $yolo = false)
+ public function __construct(Parser $parser = null, Printer $printer = null, NodeTraverser $traverser = null, bool $yolo = false, bool $strictTypes = false)
{
$this->yolo = $yolo;
+ $this->strictTypes = $strictTypes;
if ($parser === null) {
$parserFactory = new ParserFactory();
@@ -82,8 +87,6 @@ public function __construct(Parser $parser = null, Printer $printer = null, Node
/**
* Check whether this CodeCleaner is in YOLO mode.
- *
- * @return bool
*/
public function yolo(): bool
{
@@ -93,7 +96,7 @@ public function yolo(): bool
/**
* Get default CodeCleaner passes.
*
- * @return array
+ * @return CodeCleanerPass[]
*/
private function getDefaultPasses(): array
{
@@ -135,7 +138,7 @@ private function getDefaultPasses(): array
new MagicConstantsPass(),
$namespacePass, // must run after the implicit return pass
new RequirePass(),
- new StrictTypesPass(),
+ new StrictTypesPass($this->strictTypes),
// Namespace-aware validation (which depends on aforementioned shenanigans)
new ValidClassNamePass(),
@@ -150,7 +153,7 @@ private function getDefaultPasses(): array
* This list should stay in sync with the "rewriting shenanigans" in
* getDefaultPasses above.
*
- * @return array
+ * @return CodeCleanerPass[]
*/
private function getYoloPasses(): array
{
@@ -169,7 +172,7 @@ private function getYoloPasses(): array
new MagicConstantsPass(),
$namespacePass, // must run after the implicit return pass
new RequirePass(),
- new StrictTypesPass(),
+ new StrictTypesPass($this->strictTypes),
];
}
@@ -240,8 +243,6 @@ private static function getDebugFile()
* Check whether a given backtrace frame is a call to Psy\debug.
*
* @param array $stackFrame
- *
- * @return bool
*/
private static function isDebugCall(array $stackFrame): bool
{
@@ -288,8 +289,6 @@ public function clean(array $codeLines, bool $requireSemicolons = false)
* Set the current local namespace.
*
* @param array|null $namespace (default: null)
- *
- * @return array|null
*/
public function setNamespace(array $namespace = null)
{
@@ -369,8 +368,6 @@ private function parseErrorIsEOF(\PhpParser\Error $e): bool
*
* @param \PhpParser\Error $e
* @param string $code
- *
- * @return bool
*/
private function parseErrorIsUnclosedString(\PhpParser\Error $e, string $code): bool
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php b/app/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php
index 3358bb540..af32fca25 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -28,6 +28,8 @@ class AbstractClassPass extends CodeCleanerPass
* @throws FatalErrorException if the node is an abstract function with a body
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
@@ -51,6 +53,8 @@ public function enterNode(Node $node)
* @throws FatalErrorException if the node is a non-abstract class with abstract methods
*
* @param Node $node
+ *
+ * @return int|Node|Node[]|null Replacement node (or special return value)
*/
public function leaveNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php b/app/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php
index 3f81632c9..0a884f0cf 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -29,6 +29,8 @@ class AssignThisVariablePass extends CodeCleanerPass
* @throws FatalErrorException if the user assign the `$this` variable
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php b/app/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php
index ccfe8df03..3efaa6267 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -35,6 +35,8 @@ class CallTimePassByReferencePass extends CodeCleanerPass
* @throws FatalErrorException if the user used call-time pass-by-reference
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php b/app/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php
index 1bea26fd5..b1dd00e10 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -30,6 +30,8 @@ class CalledClassPass extends CodeCleanerPass
/**
* @param array $nodes
+ *
+ * @return Node[]|null Array of nodes
*/
public function beforeTraverse(array $nodes)
{
@@ -40,6 +42,8 @@ public function beforeTraverse(array $nodes)
* @throws ErrorException if get_class or get_called_class is called without an object from outside a class
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
@@ -69,6 +73,8 @@ public function enterNode(Node $node)
/**
* @param Node $node
+ *
+ * @return int|Node|Node[]|null Replacement node (or special return value)
*/
public function leaveNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php b/app/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php
index 9b3bd7f88..244c9d4e8 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php b/app/vendor/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php
index fb5aa5e98..d1c821023 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -14,6 +14,8 @@
use PhpParser\Node;
use PhpParser\Node\Expr\ArrayDimFetch;
use PhpParser\Node\Expr\Assign;
+use PhpParser\Node\Expr\AssignRef;
+use PhpParser\Node\Stmt\Foreach_;
use Psy\Exception\FatalErrorException;
/**
@@ -25,20 +27,34 @@ class EmptyArrayDimFetchPass extends CodeCleanerPass
private $theseOnesAreFine = [];
+ /**
+ * @return Node[]|null Array of nodes
+ */
public function beforeTraverse(array $nodes)
{
$this->theseOnesAreFine = [];
}
/**
- * @throws FatalErrorException if the user used empty empty array dim fetch outside of assignment
+ * @throws FatalErrorException if the user used empty array dim fetch outside of assignment
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
if ($node instanceof Assign && $node->var instanceof ArrayDimFetch) {
$this->theseOnesAreFine[] = $node->var;
+ } elseif ($node instanceof AssignRef && $node->expr instanceof ArrayDimFetch) {
+ $this->theseOnesAreFine[] = $node->expr;
+ } elseif ($node instanceof Foreach_ && $node->valueVar instanceof ArrayDimFetch) {
+ $this->theseOnesAreFine[] = $node->valueVar;
+ } elseif ($node instanceof ArrayDimFetch && $node->var instanceof ArrayDimFetch) {
+ // $a[]['b'] = 'c'
+ if (\in_array($node, $this->theseOnesAreFine)) {
+ $this->theseOnesAreFine[] = $node->var;
+ }
}
if ($node instanceof ArrayDimFetch && $node->dim === null) {
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/ExitPass.php b/app/vendor/psy/psysh/src/CodeCleaner/ExitPass.php
index 5e2639d95..e58a8d68a 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/ExitPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/ExitPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -23,6 +23,8 @@ class ExitPass extends CodeCleanerPass
* Converts exit calls to BreakExceptions.
*
* @param \PhpParser\Node $node
+ *
+ * @return int|Node|Node[]|null Replacement node (or special return value)
*/
public function leaveNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/FinalClassPass.php b/app/vendor/psy/psysh/src/CodeCleaner/FinalClassPass.php
index bff9f6f18..889176f05 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/FinalClassPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/FinalClassPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -24,6 +24,8 @@ class FinalClassPass extends CodeCleanerPass
/**
* @param array $nodes
+ *
+ * @return Node[]|null Array of nodes
*/
public function beforeTraverse(array $nodes)
{
@@ -34,6 +36,8 @@ public function beforeTraverse(array $nodes)
* @throws FatalErrorException if the node is a class that extends a final class
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
@@ -54,8 +58,6 @@ public function enterNode(Node $node)
/**
* @param string $name Class name
- *
- * @return bool
*/
private function isFinalClass(string $name): bool
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php b/app/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php
index e372c65e7..e73e85b3b 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -23,12 +23,17 @@ class FunctionContextPass extends CodeCleanerPass
/**
* @param array $nodes
+ *
+ * @return Node[]|null Array of nodes
*/
public function beforeTraverse(array $nodes)
{
$this->functionDepth = 0;
}
+ /**
+ * @return int|Node|null Replacement node (or special return value)
+ */
public function enterNode(Node $node)
{
if ($node instanceof FunctionLike) {
@@ -51,6 +56,8 @@ public function enterNode(Node $node)
/**
* @param \PhpParser\Node $node
+ *
+ * @return int|Node|Node[]|null Replacement node (or special return value)
*/
public function leaveNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php b/app/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php
index d49fa1676..a0c74d012 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -40,6 +40,8 @@ class FunctionReturnInWriteContextPass extends CodeCleanerPass
* @throws FatalErrorException if a value is assigned to a function
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php b/app/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php
index 0b405cf91..d794bbe78 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -80,7 +80,7 @@ private function addImplicitReturn(array $nodes): array
'startLine' => $last->getLine(),
'endLine' => $last->getLine(),
]);
- // @codeCoverageIgnoreEnd
+ // @codeCoverageIgnoreEnd
} elseif ($last instanceof Expression && !($last->expr instanceof Exit_)) {
// For PHP Parser 4.x
$nodes[\count($nodes) - 1] = new Return_($last->expr, [
@@ -115,8 +115,6 @@ private function addImplicitReturn(array $nodes): array
* we'll exclude them here.
*
* @param Node $node
- *
- * @return bool
*/
private static function isNonExpressionStmt(Node $node): bool
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php b/app/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php
index e6c10bc6a..f5cc704a4 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -43,6 +43,8 @@ public function __construct()
* @throws FatalErrorException if a scalar or a non-class constant is given
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/IssetPass.php b/app/vendor/psy/psysh/src/CodeCleaner/IssetPass.php
index ddb5d17e6..2729bea1c 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/IssetPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/IssetPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -31,6 +31,8 @@ class IssetPass extends CodeCleanerPass
* @throws FatalErrorException
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/LabelContextPass.php b/app/vendor/psy/psysh/src/CodeCleaner/LabelContextPass.php
index daa028c2c..f34424d5c 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/LabelContextPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/LabelContextPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -41,6 +41,8 @@ class LabelContextPass extends CodeCleanerPass
/**
* @param array $nodes
+ *
+ * @return Node[]|null Array of nodes
*/
public function beforeTraverse(array $nodes)
{
@@ -49,6 +51,9 @@ public function beforeTraverse(array $nodes)
$this->labelGotos = [];
}
+ /**
+ * @return int|Node|null Replacement node (or special return value)
+ */
public function enterNode(Node $node)
{
if ($node instanceof FunctionLike) {
@@ -71,6 +76,8 @@ public function enterNode(Node $node)
/**
* @param \PhpParser\Node $node
+ *
+ * @return int|Node|Node[]|null Replacement node (or special return value)
*/
public function leaveNode(Node $node)
{
@@ -79,6 +86,9 @@ public function leaveNode(Node $node)
}
}
+ /**
+ * @return Node[]|null Array of nodes
+ */
public function afterTraverse(array $nodes)
{
foreach ($this->labelGotos as $name => $line) {
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php b/app/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php
index 9af0ff733..67ba68b16 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -26,6 +26,8 @@ class LeavePsyshAlonePass extends CodeCleanerPass
* @throws RuntimeException if the user is messing with $__psysh__
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/ListPass.php b/app/vendor/psy/psysh/src/CodeCleaner/ListPass.php
index 8587c50cb..a44ba003d 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/ListPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/ListPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -42,6 +42,8 @@ public function __construct()
* @throws ParseErrorException if the user used empty with anything but a variable
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
@@ -94,8 +96,6 @@ public function enterNode(Node $node)
* Validate whether a given item in an array is valid for short assignment.
*
* @param Expr $item
- *
- * @return bool
*/
private static function isValidArrayItem(Expr $item): bool
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php b/app/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php
index 0e6e7ddfc..c41d4b8a5 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -32,6 +32,8 @@ class LoopContextPass extends CodeCleanerPass
/**
* {@inheritdoc}
+ *
+ * @return Node[]|null Array of nodes
*/
public function beforeTraverse(array $nodes)
{
@@ -45,6 +47,8 @@ public function beforeTraverse(array $nodes)
* @throws FatalErrorException if the node is a break or continue and has an argument less than 1
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
@@ -87,6 +91,8 @@ public function enterNode(Node $node)
/**
* @param Node $node
+ *
+ * @return int|Node|Node[]|null Replacement node (or special return value)
*/
public function leaveNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php b/app/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php
index ea1f60c47..3c468af09 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php b/app/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php
index 063147185..ba82f9d8d 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -29,6 +29,8 @@ abstract class NamespaceAwarePass extends CodeCleanerPass
* use afterTraverse or call parent::beforeTraverse() when overloading.
*
* Reset the namespace and the current scope before beginning analysis
+ *
+ * @return Node[]|null Array of nodes
*/
public function beforeTraverse(array $nodes)
{
@@ -41,6 +43,8 @@ public function beforeTraverse(array $nodes)
* leaveNode or call parent::enterNode() when overloading
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
@@ -53,8 +57,6 @@ public function enterNode(Node $node)
* Get a fully-qualified name (class, function, interface, etc).
*
* @param mixed $name
- *
- * @return string
*/
protected function getFullyQualifiedName($name): string
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php b/app/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php
index 78c625bfa..470f0fa41 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -11,6 +11,7 @@
namespace Psy\CodeCleaner;
+use PhpParser\Node;
use PhpParser\Node\Name;
use PhpParser\Node\Stmt\Namespace_;
use Psy\CodeCleaner;
@@ -46,6 +47,8 @@ public function __construct(CodeCleaner $cleaner)
* is encountered.
*
* @param array $nodes
+ *
+ * @return Node[]|null Array of nodes
*/
public function beforeTraverse(array $nodes)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php b/app/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php
index 26cce8de9..53f30a221 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -25,8 +25,6 @@ class NoReturnValue
{
/**
* Get PhpParser AST expression for creating a new NoReturnValue.
- *
- * @return New_
*/
public static function create(): New_
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/PassableByReferencePass.php b/app/vendor/psy/psysh/src/CodeCleaner/PassableByReferencePass.php
index 9212d877a..9a911e4be 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/PassableByReferencePass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/PassableByReferencePass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -34,6 +34,8 @@ class PassableByReferencePass extends CodeCleanerPass
* @throws FatalErrorException if non-variables are passed by reference
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/RequirePass.php b/app/vendor/psy/psysh/src/CodeCleaner/RequirePass.php
index b4d5e28f9..15cb3a0a7 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/RequirePass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/RequirePass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -29,6 +29,8 @@ class RequirePass extends CodeCleanerPass
/**
* {@inheritdoc}
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $origNode)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/ReturnTypePass.php b/app/vendor/psy/psysh/src/CodeCleaner/ReturnTypePass.php
index 19db08aa8..626e5a625 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/ReturnTypePass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/ReturnTypePass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -18,6 +18,7 @@
use PhpParser\Node\NullableType;
use PhpParser\Node\Stmt\Function_;
use PhpParser\Node\Stmt\Return_;
+use PhpParser\Node\UnionType;
use Psy\Exception\FatalErrorException;
/**
@@ -41,6 +42,8 @@ public function __construct()
/**
* {@inheritdoc}
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
@@ -86,6 +89,8 @@ public function enterNode(Node $node)
/**
* {@inheritdoc}
+ *
+ * @return int|Node|Node[]|null Replacement node (or special return value)
*/
public function leaveNode(Node $node)
{
@@ -105,6 +110,10 @@ private function isFunctionNode(Node $node): bool
private function typeName(Node $node): string
{
+ if ($node instanceof UnionType) {
+ return \implode('|', \array_map([$this, 'typeName'], $node->types));
+ }
+
if ($node instanceof NullableType) {
return \strtolower($node->type->name);
}
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php b/app/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php
index 08ec5e68a..7fa0ed8e8 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -11,6 +11,7 @@
namespace Psy\CodeCleaner;
+use PhpParser\Node;
use PhpParser\Node\Identifier;
use PhpParser\Node\Scalar\LNumber;
use PhpParser\Node\Stmt\Declare_;
@@ -33,6 +34,14 @@ class StrictTypesPass extends CodeCleanerPass
private $strictTypes = false;
+ /**
+ * @param bool $strictTypes enforce strict types by default
+ */
+ public function __construct(bool $strictTypes = false)
+ {
+ $this->strictTypes = $strictTypes;
+ }
+
/**
* If this is a standalone strict types declaration, remember it for later.
*
@@ -42,6 +51,8 @@ class StrictTypesPass extends CodeCleanerPass
* @throws FatalErrorException if an invalid `strict_types` declaration is found
*
* @param array $nodes
+ *
+ * @return Node[]|null Array of nodes
*/
public function beforeTraverse(array $nodes)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php b/app/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php
index e36a1b556..862785139 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -44,6 +44,8 @@ class UseStatementPass extends CodeCleanerPass
* work like you'd expect.
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
@@ -63,6 +65,8 @@ public function enterNode(Node $node)
* remembered aliases to the code.
*
* @param Node $node
+ *
+ * @return int|Node|Node[]|null Replacement node (or special return value)
*/
public function leaveNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php b/app/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php
index d077dea7c..aa9f29d18 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -46,6 +46,8 @@ class ValidClassNamePass extends NamespaceAwarePass
* trait methods.
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
@@ -70,6 +72,8 @@ public function enterNode(Node $node)
/**
* @param Node $node
+ *
+ * @return int|Node|Node[]|null Replacement node (or special return value)
*/
public function leaveNode(Node $node)
{
@@ -261,11 +265,12 @@ protected function ensureInterfacesExist(array $interfaces, Stmt $stmt)
* Get a symbol type key for storing in the scope name cache.
*
* @deprecated No longer used. Scope type should be passed into ensureCanDefine directly.
+ *
* @codeCoverageIgnore
*
- * @param Stmt $stmt
+ * @throws FatalErrorException
*
- * @return string
+ * @param Stmt $stmt
*/
protected function getScopeType(Stmt $stmt): string
{
@@ -276,6 +281,8 @@ protected function getScopeType(Stmt $stmt): string
} elseif ($stmt instanceof Trait_) {
return self::TRAIT_TYPE;
}
+
+ throw $this->createError('Unsupported statement type', $stmt);
}
/**
@@ -284,8 +291,6 @@ protected function getScopeType(Stmt $stmt): string
* Gives `self`, `static` and `parent` a free pass.
*
* @param string $name
- *
- * @return bool
*/
protected function classExists(string $name): bool
{
@@ -303,8 +308,6 @@ protected function classExists(string $name): bool
* Check whether an interface exists, or has been defined in the current code snippet.
*
* @param string $name
- *
- * @return bool
*/
protected function interfaceExists(string $name): bool
{
@@ -315,8 +318,6 @@ protected function interfaceExists(string $name): bool
* Check whether a trait exists, or has been defined in the current code snippet.
*
* @param string $name
- *
- * @return bool
*/
protected function traitExists(string $name): bool
{
@@ -343,8 +344,6 @@ protected function findInScope(string $name)
*
* @param string $msg
* @param Stmt $stmt
- *
- * @return FatalErrorException
*/
protected function createError(string $msg, Stmt $stmt): FatalErrorException
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php b/app/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php
index fac59103e..817104a61 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -35,6 +35,9 @@ class ValidConstructorPass extends CodeCleanerPass
{
private $namespace;
+ /**
+ * @return Node[]|null Array of nodes
+ */
public function beforeTraverse(array $nodes)
{
$this->namespace = [];
@@ -47,6 +50,8 @@ public function beforeTraverse(array $nodes)
* @throws FatalErrorException the constructor function has a return type
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php b/app/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php
index 2e35c7f82..7703d7d37 100644
--- a/app/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php
+++ b/app/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -35,6 +35,8 @@ class ValidFunctionNamePass extends NamespaceAwarePass
* @throws FatalErrorException if a function is redefined in a non-conditional scope
*
* @param Node $node
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
@@ -61,6 +63,8 @@ public function enterNode(Node $node)
/**
* @param Node $node
+ *
+ * @return int|Node|Node[]|null Replacement node (or special return value)
*/
public function leaveNode(Node $node)
{
diff --git a/app/vendor/psy/psysh/src/Command/BufferCommand.php b/app/vendor/psy/psysh/src/Command/BufferCommand.php
index f563fb19b..81d8ff912 100644
--- a/app/vendor/psy/psysh/src/Command/BufferCommand.php
+++ b/app/vendor/psy/psysh/src/Command/BufferCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -11,6 +11,7 @@
namespace Psy\Command;
+use Psy\Exception\RuntimeException;
use Psy\Output\ShellOutput;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
@@ -46,12 +47,19 @@ protected function configure()
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
- $buf = $this->getApplication()->getCodeBuffer();
+ $app = $this->getApplication();
+ if (!$app instanceof \Psy\Shell) {
+ throw new RuntimeException('Buffer command requires a \Psy\Shell application');
+ }
+
+ $buf = $app->getCodeBuffer();
if ($input->getOption('clear')) {
- $this->getApplication()->resetCodeBuffer();
+ $app->resetCodeBuffer();
$output->writeln($this->formatLines($buf, 'urgent'), ShellOutput::NUMBER_LINES);
} else {
$output->writeln($this->formatLines($buf), ShellOutput::NUMBER_LINES);
diff --git a/app/vendor/psy/psysh/src/Command/ClearCommand.php b/app/vendor/psy/psysh/src/Command/ClearCommand.php
index 72901cd08..baca9af03 100644
--- a/app/vendor/psy/psysh/src/Command/ClearCommand.php
+++ b/app/vendor/psy/psysh/src/Command/ClearCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -41,6 +41,8 @@ protected function configure()
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
diff --git a/app/vendor/psy/psysh/src/Command/CodeArgumentParser.php b/app/vendor/psy/psysh/src/Command/CodeArgumentParser.php
new file mode 100644
index 000000000..4803aec1c
--- /dev/null
+++ b/app/vendor/psy/psysh/src/Command/CodeArgumentParser.php
@@ -0,0 +1,59 @@
+parser = $parser ?? (new ParserFactory())->createParser();
+ }
+
+ /**
+ * Lex and parse a string of code into statements.
+ *
+ * This is intended for code arguments, so the code string *should not* start with parser->parse($code);
+ } catch (\PhpParser\Error $e) {
+ if (\strpos($e->getMessage(), 'unexpected EOF') === false) {
+ throw ParseErrorException::fromParseError($e);
+ }
+
+ // If we got an unexpected EOF, let's try it again with a semicolon.
+ try {
+ return $this->parser->parse($code.';');
+ } catch (\PhpParser\Error $_e) {
+ // Throw the original error, not the semicolon one.
+ throw ParseErrorException::fromParseError($e);
+ }
+ }
+ }
+}
diff --git a/app/vendor/psy/psysh/src/Command/Command.php b/app/vendor/psy/psysh/src/Command/Command.php
index 564174081..097508846 100644
--- a/app/vendor/psy/psysh/src/Command/Command.php
+++ b/app/vendor/psy/psysh/src/Command/Command.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -15,7 +15,6 @@
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command as BaseCommand;
use Symfony\Component\Console\Helper\Table;
-use Symfony\Component\Console\Helper\TableHelper;
use Symfony\Component\Console\Helper\TableStyle;
use Symfony\Component\Console\Output\OutputInterface;
@@ -86,7 +85,7 @@ private function getArguments(): array
/**
* These arguments will be excluded from help output.
*
- * @return array
+ * @return string[]
*/
protected function getHiddenArguments(): array
{
@@ -108,7 +107,7 @@ private function getOptions(): array
/**
* These options will be excluded from help output.
*
- * @return array
+ * @return string[]
*/
protected function getHiddenOptions(): array
{
@@ -117,8 +116,6 @@ protected function getHiddenOptions(): array
/**
* Format command aliases as text..
- *
- * @return string
*/
private function aliasesAsText(): string
{
@@ -127,8 +124,6 @@ private function aliasesAsText(): string
/**
* Format command arguments as text.
- *
- * @return string
*/
private function argumentsAsText(): string
{
@@ -147,7 +142,7 @@ private function argumentsAsText(): string
$description = \str_replace("\n", "\n".\str_pad('', $max + 2, ' '), $argument->getDescription());
- $messages[] = \sprintf(" %-${max}s %s%s", $argument->getName(), $description, $default);
+ $messages[] = \sprintf(" %-{$max}s %s%s", $argument->getName(), $description, $default);
}
$messages[] = '';
@@ -158,8 +153,6 @@ private function argumentsAsText(): string
/**
* Format options as text.
- *
- * @return string
*/
private function optionsAsText(): string
{
@@ -182,7 +175,7 @@ private function optionsAsText(): string
$optionMax = $max - \strlen($option->getName()) - 2;
$messages[] = \sprintf(
- " %s %-${optionMax}s%s%s%s",
+ " %s %-{$optionMax}s%s%s%s",
'--'.$option->getName(),
$option->getShortcut() ? \sprintf('(-%s) ', $option->getShortcut()) : '',
$description,
@@ -199,8 +192,6 @@ private function optionsAsText(): string
/**
* Calculate the maximum padding width for a set of lines.
- *
- * @return int
*/
private function getMaxWidth(): int
{
@@ -226,8 +217,6 @@ private function getMaxWidth(): int
* Format an option default as text.
*
* @param mixed $default
- *
- * @return string
*/
private function formatDefaultValue($default): string
{
@@ -241,16 +230,10 @@ private function formatDefaultValue($default): string
/**
* Get a Table instance.
*
- * Falls back to legacy TableHelper.
- *
- * @return Table|TableHelper
+ * @return Table
*/
protected function getTable(OutputInterface $output)
{
- if (!\class_exists(Table::class)) {
- return $this->getTableHelper();
- }
-
$style = new TableStyle();
// Symfony 4.1 deprecated single-argument style setters.
@@ -270,20 +253,4 @@ protected function getTable(OutputInterface $output)
->setRows([])
->setStyle($style);
}
-
- /**
- * Legacy fallback for getTable.
- *
- * @return TableHelper
- */
- protected function getTableHelper(): TableHelper
- {
- $table = $this->getApplication()->getHelperSet()->get('table');
-
- return $table
- ->setRows([])
- ->setLayout(TableHelper::LAYOUT_BORDERLESS)
- ->setHorizontalBorderChar('')
- ->setCrossingChar('');
- }
}
diff --git a/app/vendor/psy/psysh/src/Command/DocCommand.php b/app/vendor/psy/psysh/src/Command/DocCommand.php
index c50790f28..5360832a3 100644
--- a/app/vendor/psy/psysh/src/Command/DocCommand.php
+++ b/app/vendor/psy/psysh/src/Command/DocCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -14,6 +14,7 @@
use Psy\Formatter\DocblockFormatter;
use Psy\Formatter\SignatureFormatter;
use Psy\Input\CodeArgument;
+use Psy\Output\ShellOutput;
use Psy\Reflection\ReflectionClassConstant;
use Psy\Reflection\ReflectionConstant_;
use Psy\Reflection\ReflectionLanguageConstruct;
@@ -59,6 +60,8 @@ protected function configure()
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
@@ -242,9 +245,10 @@ private function getParentReflectors($reflector): \Generator
private function getManualDocById($id)
{
if ($db = $this->getApplication()->getManualDb()) {
- return $db
- ->query(\sprintf('SELECT doc FROM php_manual WHERE id = %s', $db->quote($id)))
- ->fetchColumn(0);
+ $result = $db->query(\sprintf('SELECT doc FROM php_manual WHERE id = %s', $db->quote($id)));
+ if ($result !== false) {
+ return $result->fetchColumn(0);
+ }
}
}
}
diff --git a/app/vendor/psy/psysh/src/Command/DumpCommand.php b/app/vendor/psy/psysh/src/Command/DumpCommand.php
index 24e7c5548..c44bb40a8 100644
--- a/app/vendor/psy/psysh/src/Command/DumpCommand.php
+++ b/app/vendor/psy/psysh/src/Command/DumpCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -66,6 +66,8 @@ protected function configure()
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
diff --git a/app/vendor/psy/psysh/src/Command/EditCommand.php b/app/vendor/psy/psysh/src/Command/EditCommand.php
index 96854e7b0..af2914d58 100644
--- a/app/vendor/psy/psysh/src/Command/EditCommand.php
+++ b/app/vendor/psy/psysh/src/Command/EditCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -74,6 +74,8 @@ protected function configure()
* @param InputInterface $input
* @param OutputInterface $output
*
+ * @return int 0 if everything went fine, or an exit code
+ *
* @throws \InvalidArgumentException when both exec and no-exec flags are given or if a given variable is not found in the current context
* @throws \UnexpectedValueException if file_get_contents on the edited file returns false instead of a string
*/
@@ -112,8 +114,6 @@ protected function execute(InputInterface $input, OutputInterface $output)
* @param bool $execOption
* @param bool $noExecOption
* @param string|null $filePath
- *
- * @return bool
*/
private function shouldExecuteFile(bool $execOption, bool $noExecOption, string $filePath = null): bool
{
@@ -152,8 +152,6 @@ private function extractFilePath(string $fileArgument = null)
* @param string $filePath
* @param bool $shouldRemoveFile
*
- * @return string
- *
* @throws \UnexpectedValueException if file_get_contents on $filePath returns false instead of a string
*/
private function editFile(string $filePath, bool $shouldRemoveFile): string
diff --git a/app/vendor/psy/psysh/src/Command/ExitCommand.php b/app/vendor/psy/psysh/src/Command/ExitCommand.php
index 183438f95..01f72d9f9 100644
--- a/app/vendor/psy/psysh/src/Command/ExitCommand.php
+++ b/app/vendor/psy/psysh/src/Command/ExitCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -44,6 +44,8 @@ protected function configure()
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
diff --git a/app/vendor/psy/psysh/src/Command/HelpCommand.php b/app/vendor/psy/psysh/src/Command/HelpCommand.php
index d15cc4f40..9443c550a 100644
--- a/app/vendor/psy/psysh/src/Command/HelpCommand.php
+++ b/app/vendor/psy/psysh/src/Command/HelpCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -12,7 +12,6 @@
namespace Psy\Command;
use Psy\Output\ShellOutput;
-use Symfony\Component\Console\Helper\TableHelper;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
@@ -53,6 +52,8 @@ public function setCommand(Command $command)
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
@@ -91,11 +92,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
$output->startPaging();
}
- if ($table instanceof TableHelper) {
- $table->render($output);
- } else {
- $table->render();
- }
+ $table->render();
if ($output instanceof ShellOutput) {
$output->stopPaging();
diff --git a/app/vendor/psy/psysh/src/Command/HistoryCommand.php b/app/vendor/psy/psysh/src/Command/HistoryCommand.php
index 52fe88ed2..94306e401 100644
--- a/app/vendor/psy/psysh/src/Command/HistoryCommand.php
+++ b/app/vendor/psy/psysh/src/Command/HistoryCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -90,6 +90,8 @@ protected function configure()
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
diff --git a/app/vendor/psy/psysh/src/Command/ListCommand.php b/app/vendor/psy/psysh/src/Command/ListCommand.php
index 675703bfa..6910d9039 100644
--- a/app/vendor/psy/psysh/src/Command/ListCommand.php
+++ b/app/vendor/psy/psysh/src/Command/ListCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -26,7 +26,6 @@
use Psy\VarDumper\Presenter;
use Psy\VarDumper\PresenterAware;
use Symfony\Component\Console\Formatter\OutputFormatter;
-use Symfony\Component\Console\Helper\TableHelper;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
@@ -112,6 +111,8 @@ protected function configure()
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
@@ -211,11 +212,7 @@ protected function writeLong(OutputInterface $output, array $result)
$table->addRow([$this->formatItemName($item), $item['value']]);
}
- if ($table instanceof TableHelper) {
- $table->render($output);
- } else {
- $table->render();
- }
+ $table->render();
}
}
@@ -223,8 +220,6 @@ protected function writeLong(OutputInterface $output, array $result)
* Format an item name given its visibility.
*
* @param array $item
- *
- * @return string
*/
private function formatItemName(array $item): string
{
diff --git a/app/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php b/app/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php
index a63448811..2ae84b123 100644
--- a/app/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php
+++ b/app/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -56,12 +56,12 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
/**
* Get defined constants for the given class or object Reflector.
*
- * @param \Reflector $reflector
- * @param bool $noInherit Exclude inherited constants
+ * @param \ReflectionClass $reflector
+ * @param bool $noInherit Exclude inherited constants
*
* @return array
*/
- protected function getConstants(\Reflector $reflector, bool $noInherit = false): array
+ protected function getConstants(\ReflectionClass $reflector, bool $noInherit = false): array
{
$className = $reflector->getName();
@@ -110,8 +110,6 @@ protected function prepareConstants(array $constants): array
* Get a label for the particular kind of "class" represented.
*
* @param \ReflectionClass $reflector
- *
- * @return string
*/
protected function getKindLabel(\ReflectionClass $reflector): string
{
diff --git a/app/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php b/app/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php
index c6a7c252b..cf80ba726 100644
--- a/app/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php
+++ b/app/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php b/app/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php
index b66862b7b..c8346e946 100644
--- a/app/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php
+++ b/app/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -133,7 +133,7 @@ protected function getConstants(string $category = null): array
if ($category === 'internal') {
unset($consts['user']);
- return \call_user_func_array('array_merge', \array_values($consts));
+ return \array_merge(...\array_values($consts));
}
foreach ($consts as $key => $value) {
diff --git a/app/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php b/app/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php
index 05322b984..ecc4613f8 100644
--- a/app/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php
+++ b/app/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php b/app/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php
index f4323f232..beccb4bdc 100644
--- a/app/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php
+++ b/app/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php b/app/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php
index a643cc1f9..fab59704d 100644
--- a/app/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php
+++ b/app/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php b/app/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php
index a2e333175..68c74dd4f 100644
--- a/app/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php
+++ b/app/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -55,13 +55,13 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
/**
* Get defined methods for the given class or object Reflector.
*
- * @param bool $showAll Include private and protected methods
- * @param \Reflector $reflector
- * @param bool $noInherit Exclude inherited methods
+ * @param bool $showAll Include private and protected methods
+ * @param \ReflectionClass $reflector
+ * @param bool $noInherit Exclude inherited methods
*
* @return array
*/
- protected function getMethods(bool $showAll, \Reflector $reflector, bool $noInherit = false): array
+ protected function getMethods(bool $showAll, \ReflectionClass $reflector, bool $noInherit = false): array
{
$className = $reflector->getName();
@@ -112,8 +112,6 @@ protected function prepareMethods(array $methods): array
* Get a label for the particular kind of "class" represented.
*
* @param \ReflectionClass $reflector
- *
- * @return string
*/
protected function getKindLabel(\ReflectionClass $reflector): string
{
@@ -130,8 +128,6 @@ protected function getKindLabel(\ReflectionClass $reflector): string
* Get output style for the given method's visibility.
*
* @param \ReflectionMethod $method
- *
- * @return string
*/
private function getVisibilityStyle(\ReflectionMethod $method): string
{
diff --git a/app/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php b/app/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php
index 1258448e3..dfde8eafd 100644
--- a/app/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php
+++ b/app/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -56,13 +56,13 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
/**
* Get defined properties for the given class or object Reflector.
*
- * @param bool $showAll Include private and protected properties
- * @param \Reflector $reflector
- * @param bool $noInherit Exclude inherited properties
+ * @param bool $showAll Include private and protected properties
+ * @param \ReflectionClass $reflector
+ * @param bool $noInherit Exclude inherited properties
*
* @return array
*/
- protected function getProperties(bool $showAll, \Reflector $reflector, bool $noInherit = false): array
+ protected function getProperties(bool $showAll, \ReflectionClass $reflector, bool $noInherit = false): array
{
$className = $reflector->getName();
@@ -112,8 +112,6 @@ protected function prepareProperties(array $properties, $target = null): array
* Get a label for the particular kind of "class" represented.
*
* @param \ReflectionClass $reflector
- *
- * @return string
*/
protected function getKindLabel(\ReflectionClass $reflector): string
{
@@ -128,8 +126,6 @@ protected function getKindLabel(\ReflectionClass $reflector): string
* Get output style for the given property's visibility.
*
* @param \ReflectionProperty $property
- *
- * @return string
*/
private function getVisibilityStyle(\ReflectionProperty $property): string
{
@@ -147,8 +143,6 @@ private function getVisibilityStyle(\ReflectionProperty $property): string
*
* @param \ReflectionProperty $property
* @param mixed $target
- *
- * @return string
*/
protected function presentValue(\ReflectionProperty $property, $target): string
{
diff --git a/app/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php b/app/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php
index ecc69040f..38f3f6023 100644
--- a/app/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php
+++ b/app/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Command/ParseCommand.php b/app/vendor/psy/psysh/src/Command/ParseCommand.php
index c2f8ab0f4..a62be67fe 100644
--- a/app/vendor/psy/psysh/src/Command/ParseCommand.php
+++ b/app/vendor/psy/psysh/src/Command/ParseCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -122,13 +122,10 @@ protected function configure()
protected function execute(InputInterface $input, OutputInterface $output)
{
$code = $input->getArgument('code');
- if (\strpos($code, '') === false) {
- $code = 'getOption('kind');
$depth = $input->getOption('depth');
- $nodes = $this->parse($this->getParser($parserKind), $code);
+
+ $nodes = $this->getParser($parserKind)->parse($code);
$output->page($this->presenter->present($nodes, $depth));
$this->context->setReturnValue($nodes);
@@ -136,39 +133,15 @@ protected function execute(InputInterface $input, OutputInterface $output)
return 0;
}
- /**
- * Lex and parse a string of code into statements.
- *
- * @param Parser $parser
- * @param string $code
- *
- * @return array Statements
- */
- private function parse(Parser $parser, string $code): array
- {
- try {
- return $parser->parse($code);
- } catch (\PhpParser\Error $e) {
- if (\strpos($e->getMessage(), 'unexpected EOF') === false) {
- throw $e;
- }
-
- // If we got an unexpected EOF, let's try it again with a semicolon.
- return $parser->parse($code.';');
- }
- }
-
/**
* Get (or create) the Parser instance.
*
* @param string|null $kind One of Psy\ParserFactory constants (only for PHP parser 2.0 and above)
- *
- * @return Parser
*/
- private function getParser(string $kind = null): Parser
+ private function getParser(string $kind = null): CodeArgumentParser
{
if (!\array_key_exists($kind, $this->parsers)) {
- $this->parsers[$kind] = $this->parserFactory->createParser($kind);
+ $this->parsers[$kind] = new CodeArgumentParser($this->parserFactory->createParser($kind));
}
return $this->parsers[$kind];
diff --git a/app/vendor/psy/psysh/src/Command/PsyVersionCommand.php b/app/vendor/psy/psysh/src/Command/PsyVersionCommand.php
index c78889c8b..44e75283f 100644
--- a/app/vendor/psy/psysh/src/Command/PsyVersionCommand.php
+++ b/app/vendor/psy/psysh/src/Command/PsyVersionCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Command/ReflectingCommand.php b/app/vendor/psy/psysh/src/Command/ReflectingCommand.php
index 806833426..b9b21f967 100644
--- a/app/vendor/psy/psysh/src/Command/ReflectingCommand.php
+++ b/app/vendor/psy/psysh/src/Command/ReflectingCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -11,6 +11,8 @@
namespace Psy\Command;
+use PhpParser\NodeTraverser;
+use PhpParser\PrettyPrinter\Standard as Printer;
use Psy\CodeCleaner\NoReturnValue;
use Psy\Context;
use Psy\ContextAware;
@@ -19,6 +21,7 @@
use Psy\Exception\UnexpectedTargetException;
use Psy\Reflection\ReflectionClassConstant;
use Psy\Reflection\ReflectionConstant_;
+use Psy\Sudo\SudoVisitor;
use Psy\Util\Mirror;
/**
@@ -38,6 +41,25 @@ abstract class ReflectingCommand extends Command implements ContextAware
*/
protected $context;
+ private $parser;
+ private $traverser;
+ private $printer;
+
+ /**
+ * {@inheritdoc}
+ */
+ public function __construct($name = null)
+ {
+ $this->parser = new CodeArgumentParser();
+
+ $this->traverser = new NodeTraverser();
+ $this->traverser->addVisitor(new SudoVisitor());
+
+ $this->printer = new Printer();
+
+ parent::__construct($name);
+ }
+
/**
* ContextAware interface.
*
@@ -92,8 +114,6 @@ protected function getTarget(string $valueName): array
*
* @param string $name
* @param bool $includeFunctions (default: false)
- *
- * @return string
*/
protected function resolveName(string $name, bool $includeFunctions = false): string
{
@@ -172,7 +192,10 @@ protected function getTargetAndReflector(string $valueName): array
protected function resolveCode(string $code)
{
try {
- $value = $this->getApplication()->execute($code, true);
+ // Add an implicit `sudo` to target resolution.
+ $nodes = $this->traverser->traverse($this->parser->parse($code));
+ $sudoCode = $this->printer->prettyPrint($nodes);
+ $value = $this->getApplication()->execute($sudoCode, true);
} catch (\Throwable $e) {
// Swallow all exceptions?
}
diff --git a/app/vendor/psy/psysh/src/Command/ShowCommand.php b/app/vendor/psy/psysh/src/Command/ShowCommand.php
index 1abb7cbce..ecb427cfb 100644
--- a/app/vendor/psy/psysh/src/Command/ShowCommand.php
+++ b/app/vendor/psy/psysh/src/Command/ShowCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -69,6 +69,8 @@ protected function configure()
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
diff --git a/app/vendor/psy/psysh/src/Command/SudoCommand.php b/app/vendor/psy/psysh/src/Command/SudoCommand.php
index 7912a1d53..b398bd891 100644
--- a/app/vendor/psy/psysh/src/Command/SudoCommand.php
+++ b/app/vendor/psy/psysh/src/Command/SudoCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -14,7 +14,6 @@
use PhpParser\NodeTraverser;
use PhpParser\PrettyPrinter\Standard as Printer;
use Psy\Input\CodeArgument;
-use Psy\ParserFactory;
use Psy\Readline\Readline;
use Psy\Sudo\SudoVisitor;
use Symfony\Component\Console\Input\InputInterface;
@@ -35,8 +34,7 @@ class SudoCommand extends Command
*/
public function __construct($name = null)
{
- $parserFactory = new ParserFactory();
- $this->parser = $parserFactory->createParser();
+ $this->parser = new CodeArgumentParser();
$this->traverser = new NodeTraverser();
$this->traverser->addVisitor(new SudoVisitor());
@@ -95,6 +93,8 @@ protected function configure()
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
@@ -109,11 +109,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
$code = $history[\count($history) - 2];
}
- if (\strpos($code, '') === false) {
- $code = 'traverser->traverse($this->parse($code));
+ $nodes = $this->traverser->traverse($this->parser->parse($code));
$sudoCode = $this->printer->prettyPrint($nodes);
$shell = $this->getApplication();
@@ -121,25 +117,4 @@ protected function execute(InputInterface $input, OutputInterface $output)
return 0;
}
-
- /**
- * Lex and parse a string of code into statements.
- *
- * @param string $code
- *
- * @return array Statements
- */
- private function parse(string $code): array
- {
- try {
- return $this->parser->parse($code);
- } catch (\PhpParser\Error $e) {
- if (\strpos($e->getMessage(), 'unexpected EOF') === false) {
- throw $e;
- }
-
- // If we got an unexpected EOF, let's try it again with a semicolon.
- return $this->parser->parse($code.';');
- }
- }
}
diff --git a/app/vendor/psy/psysh/src/Command/ThrowUpCommand.php b/app/vendor/psy/psysh/src/Command/ThrowUpCommand.php
index d7bf63b75..5d8402f54 100644
--- a/app/vendor/psy/psysh/src/Command/ThrowUpCommand.php
+++ b/app/vendor/psy/psysh/src/Command/ThrowUpCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -13,7 +13,6 @@
use PhpParser\Node\Arg;
use PhpParser\Node\Expr\New_;
-use PhpParser\Node\Expr\StaticCall;
use PhpParser\Node\Expr\Variable;
use PhpParser\Node\Name\FullyQualified as FullyQualifiedName;
use PhpParser\Node\Scalar\String_;
@@ -23,7 +22,6 @@
use Psy\ContextAware;
use Psy\Exception\ThrowUpException;
use Psy\Input\CodeArgument;
-use Psy\ParserFactory;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
@@ -40,9 +38,7 @@ class ThrowUpCommand extends Command implements ContextAware
*/
public function __construct($name = null)
{
- $parserFactory = new ParserFactory();
-
- $this->parser = $parserFactory->createParser();
+ $this->parser = new CodeArgumentParser();
$this->printer = new Printer();
parent::__construct($name);
@@ -87,12 +83,14 @@ protected function configure()
/**
* {@inheritdoc}
*
+ * @return int 0 if everything went fine, or an exit code
+ *
* @throws \InvalidArgumentException if there is no exception to throw
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$args = $this->prepareArgs($input->getArgument('exception'));
- $throwStmt = new Throw_(new StaticCall(new FullyQualifiedName(ThrowUpException::class), 'fromThrowable', $args));
+ $throwStmt = new Throw_(new New_(new FullyQualifiedName(ThrowUpException::class), $args));
$throwCode = $this->printer->prettyPrint([$throwStmt]);
$shell = $this->getApplication();
@@ -119,11 +117,7 @@ private function prepareArgs(string $code = null): array
return [new Arg(new Variable('_e'))];
}
- if (\strpos($code, '') === false) {
- $code = 'parse($code);
+ $nodes = $this->parser->parse($code);
if (\count($nodes) !== 1) {
throw new \InvalidArgumentException('No idea how to throw this');
}
@@ -142,25 +136,4 @@ private function prepareArgs(string $code = null): array
return $args;
}
-
- /**
- * Lex and parse a string of code into statements.
- *
- * @param string $code
- *
- * @return array Statements
- */
- private function parse(string $code): array
- {
- try {
- return $this->parser->parse($code);
- } catch (\PhpParser\Error $e) {
- if (\strpos($e->getMessage(), 'unexpected EOF') === false) {
- throw $e;
- }
-
- // If we got an unexpected EOF, let's try it again with a semicolon.
- return $this->parser->parse($code.';');
- }
- }
}
diff --git a/app/vendor/psy/psysh/src/Command/TimeitCommand.php b/app/vendor/psy/psysh/src/Command/TimeitCommand.php
index 4aa3967e9..7946e886f 100644
--- a/app/vendor/psy/psysh/src/Command/TimeitCommand.php
+++ b/app/vendor/psy/psysh/src/Command/TimeitCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -15,7 +15,6 @@
use PhpParser\PrettyPrinter\Standard as Printer;
use Psy\Command\TimeitCommand\TimeitVisitor;
use Psy\Input\CodeArgument;
-use Psy\ParserFactory;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
@@ -28,6 +27,8 @@ class TimeitCommand extends Command
const RESULT_MSG = 'Command took %.6f seconds to complete.';
const AVG_RESULT_MSG = 'Command took %.6f seconds on average (%.6f median; %.6f total) to complete.';
+ // All times stored as nanoseconds!
+ private static $useHrtime;
private static $start = null;
private static $times = [];
@@ -40,8 +41,10 @@ class TimeitCommand extends Command
*/
public function __construct($name = null)
{
- $parserFactory = new ParserFactory();
- $this->parser = $parserFactory->createParser();
+ // @todo Remove microtime use after we drop support for PHP < 7.3
+ self::$useHrtime = \function_exists('hrtime');
+
+ $this->parser = new CodeArgumentParser();
$this->traverser = new NodeTraverser();
$this->traverser->addVisitor(new TimeitVisitor());
@@ -76,21 +79,23 @@ protected function configure()
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$code = $input->getArgument('code');
- $num = $input->getOption('num') ?: 1;
+ $num = (int) ($input->getOption('num') ?: 1);
$shell = $this->getApplication();
$instrumentedCode = $this->instrumentCode($code);
self::$times = [];
- for ($i = 0; $i < $num; $i++) {
+ do {
$_ = $shell->execute($instrumentedCode);
$this->ensureEndMarked();
- }
+ } while (\count(self::$times) < $num);
$shell->writeReturnValue($_);
@@ -98,13 +103,13 @@ protected function execute(InputInterface $input, OutputInterface $output)
self::$times = [];
if ($num === 1) {
- $output->writeln(\sprintf(self::RESULT_MSG, $times[0]));
+ $output->writeln(\sprintf(self::RESULT_MSG, $times[0] / 1e+9));
} else {
$total = \array_sum($times);
\rsort($times);
$median = $times[\round($num / 2)];
- $output->writeln(\sprintf(self::AVG_RESULT_MSG, $total / $num, $median, $total));
+ $output->writeln(\sprintf(self::AVG_RESULT_MSG, ($total / $num) / 1e+9, $median / 1e+9, $total / 1e+9));
}
return 0;
@@ -119,7 +124,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
*/
public static function markStart()
{
- self::$start = \microtime(true);
+ self::$start = self::$useHrtime ? \hrtime(true) : (\microtime(true) * 1e+6);
}
/**
@@ -138,7 +143,7 @@ public static function markStart()
*/
public static function markEnd($ret = null)
{
- self::$times[] = \microtime(true) - self::$start;
+ self::$times[] = (self::$useHrtime ? \hrtime(true) : (\microtime(true) * 1e+6)) - self::$start;
self::$start = null;
return $ret;
@@ -162,36 +167,9 @@ private function ensureEndMarked()
*
* This inserts `markStart` and `markEnd` calls to ensure that (reasonably)
* accurate times are recorded for just the code being executed.
- *
- * @param string $code
- *
- * @return string
*/
private function instrumentCode(string $code): string
{
- return $this->printer->prettyPrint($this->traverser->traverse($this->parse($code)));
- }
-
- /**
- * Lex and parse a string of code into statements.
- *
- * @param string $code
- *
- * @return array Statements
- */
- private function parse(string $code): array
- {
- $code = 'parser->parse($code);
- } catch (\PhpParser\Error $e) {
- if (\strpos($e->getMessage(), 'unexpected EOF') === false) {
- throw $e;
- }
-
- // If we got an unexpected EOF, let's try it again with a semicolon.
- return $this->parser->parse($code.';');
- }
+ return $this->printer->prettyPrint($this->traverser->traverse($this->parser->parse($code)));
}
}
diff --git a/app/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php b/app/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php
index 3f9bd8abd..0020ff660 100644
--- a/app/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php
+++ b/app/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -35,6 +35,8 @@ class TimeitVisitor extends NodeVisitorAbstract
/**
* {@inheritdoc}
+ *
+ * @return Node[]|null Array of nodes
*/
public function beforeTraverse(array $nodes)
{
@@ -43,6 +45,8 @@ public function beforeTraverse(array $nodes)
/**
* {@inheritdoc}
+ *
+ * @return int|Node|null Replacement node (or special return value)
*/
public function enterNode(Node $node)
{
@@ -62,6 +66,8 @@ public function enterNode(Node $node)
/**
* {@inheritdoc}
+ *
+ * @return int|Node|Node[]|null Replacement node (or special return value)
*/
public function leaveNode(Node $node)
{
@@ -72,6 +78,8 @@ public function leaveNode(Node $node)
/**
* {@inheritdoc}
+ *
+ * @return Node[]|null Array of nodes
*/
public function afterTraverse(array $nodes)
{
@@ -111,8 +119,6 @@ private function getStartCall(): StaticCall
* Optionally pass in a return value.
*
* @param Expr|null $arg
- *
- * @return \PhpParser\Node\Expr\StaticCall
*/
private function getEndCall(Expr $arg = null): StaticCall
{
diff --git a/app/vendor/psy/psysh/src/Command/TraceCommand.php b/app/vendor/psy/psysh/src/Command/TraceCommand.php
index 09d9fc917..8ba1ad861 100644
--- a/app/vendor/psy/psysh/src/Command/TraceCommand.php
+++ b/app/vendor/psy/psysh/src/Command/TraceCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -68,6 +68,8 @@ protected function configure()
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
@@ -79,18 +81,18 @@ protected function execute(InputInterface $input, OutputInterface $output)
}
/**
- * Get a backtrace for an exception.
+ * Get a backtrace for an exception or error.
*
* Optionally limit the number of rows to include with $count, and exclude
* Psy from the trace.
*
- * @param \Exception $e The exception with a backtrace
+ * @param \Throwable $e The exception or error with a backtrace
* @param int $count (default: PHP_INT_MAX)
* @param bool $includePsy (default: true)
*
* @return array Formatted stacktrace lines
*/
- protected function getBacktrace(\Exception $e, int $count = null, bool $includePsy = true): array
+ protected function getBacktrace(\Throwable $e, int $count = null, bool $includePsy = true): array
{
return TraceFormatter::formatTrace($e, $this->filter, $count, $includePsy);
}
diff --git a/app/vendor/psy/psysh/src/Command/WhereamiCommand.php b/app/vendor/psy/psysh/src/Command/WhereamiCommand.php
index ea91f2f08..0c0a6e9c2 100644
--- a/app/vendor/psy/psysh/src/Command/WhereamiCommand.php
+++ b/app/vendor/psy/psysh/src/Command/WhereamiCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -109,6 +109,8 @@ protected function fileInfo(): array
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
@@ -142,8 +144,6 @@ protected function execute(InputInterface $input, OutputInterface $output)
* Replace the given directory from the start of a filepath.
*
* @param string $file
- *
- * @return string
*/
private function replaceCwd(string $file): string
{
diff --git a/app/vendor/psy/psysh/src/Command/WtfCommand.php b/app/vendor/psy/psysh/src/Command/WtfCommand.php
index a2e8feb54..3d967fc52 100644
--- a/app/vendor/psy/psysh/src/Command/WtfCommand.php
+++ b/app/vendor/psy/psysh/src/Command/WtfCommand.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -81,6 +81,8 @@ protected function configure()
/**
* {@inheritdoc}
+ *
+ * @return int 0 if everything went fine, or an exit code
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
diff --git a/app/vendor/psy/psysh/src/ConfigPaths.php b/app/vendor/psy/psysh/src/ConfigPaths.php
index 7e766a973..8eb0e1cb1 100644
--- a/app/vendor/psy/psysh/src/ConfigPaths.php
+++ b/app/vendor/psy/psysh/src/ConfigPaths.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -34,7 +34,8 @@ class ConfigPaths
public function __construct(array $overrides = [], EnvInterface $env = null)
{
$this->overrideDirs($overrides);
- $this->env = $env ?: new SuperglobalsEnv();
+
+ $this->env = $env ?: (\PHP_SAPI === 'cli-server' ? new SystemEnv() : new SuperglobalsEnv());
}
/**
@@ -154,8 +155,6 @@ public static function getHomeConfigDirs(): array
* everywhere else).
*
* @see self::homeConfigDir
- *
- * @return string
*/
public function currentConfigDir(): string
{
@@ -258,8 +257,6 @@ public static function getDataFiles(array $names, $dataDir = null): array
* Get a runtime directory.
*
* Defaults to `/psysh` inside the system's temp dir.
- *
- * @return string
*/
public function runtimeDir(): string
{
@@ -281,6 +278,40 @@ public static function getRuntimeDir(): string
return (new self())->runtimeDir();
}
+ /**
+ * Get a list of directories in PATH.
+ *
+ * If $PATH is unset/empty it defaults to '/usr/sbin:/usr/bin:/sbin:/bin'.
+ *
+ * @return string[]
+ */
+ public function pathDirs(): array
+ {
+ return $this->getEnvArray('PATH') ?: ['/usr/sbin', '/usr/bin', '/sbin', '/bin'];
+ }
+
+ /**
+ * Locate a command (an executable) in $PATH.
+ *
+ * Behaves like 'command -v COMMAND' or 'which COMMAND'.
+ * If $PATH is unset/empty it defaults to '/usr/sbin:/usr/bin:/sbin:/bin'.
+ *
+ * @param string $command the executable to locate
+ *
+ * @return string
+ */
+ public function which($command)
+ {
+ foreach ($this->pathDirs() as $path) {
+ $fullpath = $path.\DIRECTORY_SEPARATOR.$command;
+ if (@\is_file($fullpath) && @\is_executable($fullpath)) {
+ return $fullpath;
+ }
+ }
+
+ return null;
+ }
+
/**
* Get all PsySH directory name candidates given a list of base directories.
*
@@ -405,7 +436,7 @@ private function getEnv($key)
private function getEnvArray($key)
{
if ($value = $this->getEnv($key)) {
- return \explode(':', $value);
+ return \explode(\PATH_SEPARATOR, $value);
}
return null;
diff --git a/app/vendor/psy/psysh/src/Configuration.php b/app/vendor/psy/psysh/src/Configuration.php
index 68d1cc0cd..0be66ea09 100644
--- a/app/vendor/psy/psysh/src/Configuration.php
+++ b/app/vendor/psy/psysh/src/Configuration.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -16,6 +16,7 @@
use Psy\ExecutionLoop\ProcessForker;
use Psy\Output\OutputPager;
use Psy\Output\ShellOutput;
+use Psy\Output\Theme;
use Psy\TabCompletion\AutoCompleter;
use Psy\VarDumper\Presenter;
use Psy\VersionUpdater\Checker;
@@ -66,6 +67,8 @@ class Configuration
'requireSemicolons',
'runtimeDir',
'startupMessage',
+ 'strictTypes',
+ 'theme',
'updateCheck',
'useBracketedPaste',
'usePcntl',
@@ -97,6 +100,7 @@ class Configuration
private $pipedOutput;
private $rawOutput = false;
private $requireSemicolons = false;
+ private $strictTypes = false;
private $useUnicode;
private $useTabCompletion;
private $newMatchers = [];
@@ -107,12 +111,16 @@ class Configuration
private $updateCheck;
private $startupMessage;
private $forceArrayIndexes = false;
+ /** @deprecated */
private $formatterStyles = [];
private $verbosity = self::VERBOSITY_NORMAL;
private $yolo = false;
+ /** @var Theme */
+ private $theme;
// services
private $readline;
+ /** @var ShellOutput */
private $output;
private $shell;
private $cleaner;
@@ -121,6 +129,7 @@ class Configuration
private $presenter;
private $autoCompleter;
private $checker;
+ /** @deprecated */
private $prompt;
private $configPaths;
@@ -140,6 +149,8 @@ public function __construct(array $config = [])
$this->configFile = $config['configFile'];
} elseif (isset($_SERVER['PSYSH_CONFIG']) && $_SERVER['PSYSH_CONFIG']) {
$this->configFile = $_SERVER['PSYSH_CONFIG'];
+ } elseif (\PHP_SAPI === 'cli-server' && ($configFile = \getenv('PSYSH_CONFIG'))) {
+ $this->configFile = $configFile;
}
// legacy baseDir option
@@ -171,8 +182,6 @@ public function __construct(array $config = [])
* @throws \InvalidArgumentException
*
* @param InputInterface $input
- *
- * @return self
*/
public static function fromInput(InputInterface $input): self
{
@@ -197,6 +206,11 @@ public static function fromInput(InputInterface $input): self
$config->setInteractiveMode(self::INTERACTIVE_MODE_DISABLED);
}
+ // Handle --compact
+ if (self::getOptionFromInput($input, ['compact'])) {
+ $config->setTheme('compact');
+ }
+
// Handle --raw-output
// @todo support raw output with interactive input?
if (!$config->getInputInteractive()) {
@@ -346,6 +360,7 @@ public static function getInputOptions(): array
new InputOption('quiet', 'q', InputOption::VALUE_NONE, 'Shhhhhh.'),
new InputOption('verbose', 'v|vv|vvv', InputOption::VALUE_OPTIONAL, 'Increase the verbosity of messages.', '0'),
+ new InputOption('compact', null, InputOption::VALUE_NONE, 'Run PsySH with compact output.'),
new InputOption('interactive', 'i|a', InputOption::VALUE_NONE, 'Force PsySH to run in interactive mode.'),
new InputOption('no-interactive', 'n', InputOption::VALUE_NONE, 'Run PsySH without interactive input. Requires input from stdin.'),
// --interaction and --no-interaction aliases for compatibility with Symfony, Composer, etc
@@ -353,6 +368,8 @@ public static function getInputOptions(): array
new InputOption('no-interaction', null, InputOption::VALUE_NONE, 'Run PsySH without interactive input. Requires input from stdin.'),
new InputOption('raw-output', 'r', InputOption::VALUE_NONE, 'Print var_export-style return values (for non-interactive input)'),
+ new InputOption('self-update', 'u', InputOption::VALUE_NONE, 'Update to the latest version'),
+
new InputOption('yolo', null, InputOption::VALUE_NONE, 'Run PsySH with minimal input validation. You probably don\'t want this.'),
];
}
@@ -523,7 +540,7 @@ public function setDefaultIncludes(array $includes = [])
/**
* Get files to be included by default at the start of each shell session.
*
- * @return array
+ * @return string[]
*/
public function getDefaultIncludes(): array
{
@@ -605,8 +622,6 @@ public function setRuntimeDir(string $dir)
* overridden.
*
* @throws RuntimeException if no temporary directory is set and it is not possible to create one
- *
- * @return string
*/
public function getRuntimeDir(): string
{
@@ -636,8 +651,6 @@ public function setHistoryFile(string $file)
*
* Defaults to `/history` inside the shell's base config dir unless
* explicitly overridden.
- *
- * @return string
*/
public function getHistoryFile(): string
{
@@ -806,8 +819,6 @@ public function getReadline(): Readline\Readline
* Get the appropriate Readline implementation class name.
*
* @see self::getReadline
- *
- * @return string
*/
private function getReadlineClass(): string
{
@@ -816,11 +827,13 @@ private function getReadlineClass(): string
return Readline\GNUReadline::class;
} elseif (Readline\Libedit::isSupported()) {
return Readline\Libedit::class;
- } elseif (Readline\HoaConsole::isSupported()) {
- return Readline\HoaConsole::class;
}
}
+ if (Readline\Userland::isSupported()) {
+ return Readline\Userland::class;
+ }
+
return Readline\Transient::class;
}
@@ -891,7 +904,17 @@ public function setUsePcntl(bool $usePcntl)
*/
public function usePcntl(): bool
{
- return isset($this->usePcntl) ? ($this->hasPcntl && $this->usePcntl) : $this->hasPcntl;
+ if (!isset($this->usePcntl)) {
+ // Unless pcntl is explicitly *enabled*, don't use it while XDebug is debugging.
+ // See https://github.com/bobthecow/psysh/issues/742
+ if (\function_exists('xdebug_is_debugger_active') && \xdebug_is_debugger_active()) {
+ return false;
+ }
+
+ return $this->hasPcntl;
+ }
+
+ return $this->hasPcntl && $this->usePcntl;
}
/**
@@ -935,14 +958,28 @@ public function setRequireSemicolons(bool $requireSemicolons)
* By default, PsySH will automatically insert semicolons at the end of
* statements if they're missing. To strictly require semicolons, set
* `requireSemicolons` to true.
- *
- * @return bool
*/
public function requireSemicolons(): bool
{
return $this->requireSemicolons;
}
+ /**
+ * Enable or disable strict types enforcement.
+ */
+ public function setStrictTypes($strictTypes)
+ {
+ $this->strictTypes = (bool) $strictTypes;
+ }
+
+ /**
+ * Check whether to enforce strict types.
+ */
+ public function strictTypes(): bool
+ {
+ return $this->strictTypes;
+ }
+
/**
* Enable or disable Unicode in PsySH specific output.
*
@@ -961,8 +998,6 @@ public function setUseUnicode(bool $useUnicode)
*
* Note that this does not disable Unicode output in general, it just makes
* it so PsySH won't output any itself.
- *
- * @return bool
*/
public function useUnicode(): bool
{
@@ -997,8 +1032,6 @@ public function setErrorLoggingLevel($errorLoggingLevel)
* level.
*
* http://php.net/manual/en/function.error-reporting.php
- *
- * @return int
*/
public function errorLoggingLevel(): int
{
@@ -1019,13 +1052,11 @@ public function setCodeCleaner(CodeCleaner $cleaner)
* Get a CodeCleaner service instance.
*
* If none has been explicitly defined, this will create a new instance.
- *
- * @return CodeCleaner
*/
public function getCodeCleaner(): CodeCleaner
{
if (!isset($this->cleaner)) {
- $this->cleaner = new CodeCleaner(null, null, null, $this->yolo());
+ $this->cleaner = new CodeCleaner(null, null, null, $this->yolo(), $this->strictTypes());
}
return $this->cleaner;
@@ -1084,8 +1115,6 @@ public function useTabCompletion(): bool
/**
* @deprecated Call `useTabCompletion` instead
- *
- * @return bool
*/
public function getTabCompletion(): bool
{
@@ -1101,6 +1130,11 @@ public function setOutput(ShellOutput $output)
{
$this->output = $output;
$this->pipedOutput = null; // Reset cached pipe info
+
+ if (isset($this->theme)) {
+ $output->setTheme($this->theme);
+ }
+
$this->applyFormatterStyles();
}
@@ -1112,8 +1146,6 @@ public function setOutput(ShellOutput $output)
*
* @see self::verbosity
* @see self::getPager
- *
- * @return ShellOutput
*/
public function getOutput(): ShellOutput
{
@@ -1122,7 +1154,8 @@ public function getOutput(): ShellOutput
$this->getOutputVerbosity(),
null,
null,
- $this->getPager()
+ $this->getPager() ?: null,
+ $this->theme()
));
// This is racy because `getOutputDecorated` needs access to the
@@ -1145,29 +1178,29 @@ public function getOutput(): ShellOutput
public function getOutputDecorated()
{
switch ($this->colorMode()) {
- case self::COLOR_MODE_AUTO:
- return $this->outputIsPiped() ? false : null;
case self::COLOR_MODE_FORCED:
return true;
case self::COLOR_MODE_DISABLED:
return false;
+ case self::COLOR_MODE_AUTO:
+ default:
+ return $this->outputIsPiped() ? false : null;
}
}
/**
* Get the interactive setting for shell input.
- *
- * @return bool
*/
public function getInputInteractive(): bool
{
switch ($this->interactiveMode()) {
- case self::INTERACTIVE_MODE_AUTO:
- return !$this->inputIsPiped();
case self::INTERACTIVE_MODE_FORCED:
return true;
case self::INTERACTIVE_MODE_DISABLED:
return false;
+ case self::INTERACTIVE_MODE_AUTO:
+ default:
+ return !$this->inputIsPiped();
}
}
@@ -1177,13 +1210,19 @@ public function getInputInteractive(): bool
* If a string is supplied, a ProcOutputPager will be used which shells out
* to the specified command.
*
+ * `cat` is special-cased to use the PassthruPager directly.
+ *
* @throws \InvalidArgumentException if $pager is not a string or OutputPager instance
*
- * @param string|OutputPager $pager
+ * @param string|OutputPager|false $pager
*/
public function setPager($pager)
{
- if ($pager && !\is_string($pager) && !$pager instanceof OutputPager) {
+ if ($pager === null || $pager === false || $pager === 'cat') {
+ $pager = false;
+ }
+
+ if ($pager !== false && !\is_string($pager) && !$pager instanceof OutputPager) {
throw new \InvalidArgumentException('Unexpected pager instance');
}
@@ -1196,17 +1235,21 @@ public function setPager($pager)
* If no Pager has been explicitly provided, and Pcntl is available, this
* will default to `cli.pager` ini value, falling back to `which less`.
*
- * @return string|OutputPager
+ * @return string|OutputPager|false
*/
public function getPager()
{
if (!isset($this->pager) && $this->usePcntl()) {
+ if (\getenv('TERM') === 'dumb') {
+ return false;
+ }
+
if ($pager = \ini_get('cli.pager')) {
// use the default pager
$this->pager = $pager;
- } elseif ($less = \exec('which less 2>/dev/null')) {
+ } elseif ($less = $this->configPaths->which('less')) {
// check for the presence of less...
- $this->pager = $less.' -R -S -F -X';
+ $this->pager = $less.' -R -F -X';
}
}
@@ -1225,8 +1268,6 @@ public function setAutoCompleter(AutoCompleter $autoCompleter)
/**
* Get an AutoCompleter service instance.
- *
- * @return AutoCompleter
*/
public function getAutoCompleter(): AutoCompleter
{
@@ -1239,8 +1280,6 @@ public function getAutoCompleter(): AutoCompleter
/**
* @deprecated Nothing should be using this anymore
- *
- * @return array
*/
public function getTabCompletionMatchers(): array
{
@@ -1401,8 +1440,6 @@ public function addCasters(array $casters)
/**
* Get the Presenter service.
- *
- * @return Presenter
*/
public function getPresenter(): Presenter
{
@@ -1434,8 +1471,6 @@ public function setWarnOnMultipleConfigs(bool $warnOnMultipleConfigs)
* are found.
*
* This will default to true in a future release, but is false for now.
- *
- * @return bool
*/
public function warnOnMultipleConfigs(): bool
{
@@ -1445,6 +1480,8 @@ public function warnOnMultipleConfigs(): bool
/**
* Set the current color mode.
*
+ * @throws \InvalidArgumentException if the color mode isn't auto, forced or disabled
+ *
* @param string $colorMode
*/
public function setColorMode(string $colorMode)
@@ -1464,8 +1501,6 @@ public function setColorMode(string $colorMode)
/**
* Get the current color mode.
- *
- * @return string
*/
public function colorMode(): string
{
@@ -1496,8 +1531,6 @@ public function setInteractiveMode(string $interactiveMode)
/**
* Get the current interactive mode.
- *
- * @return string
*/
public function interactiveMode(): string
{
@@ -1518,8 +1551,6 @@ public function setChecker(Checker $checker)
* Get an update checker service instance.
*
* If none has been explicitly defined, this will create a new instance.
- *
- * @return Checker
*/
public function getChecker(): Checker
{
@@ -1555,8 +1586,6 @@ public function getChecker(): Checker
*
* One of 'always', 'daily', 'weekly', 'monthly' or 'never'. If none is
* explicitly set, default to 'weekly'.
- *
- * @return string
*/
public function getUpdateCheck(): string
{
@@ -1620,11 +1649,19 @@ public function getStartupMessage()
/**
* Set the prompt.
*
- * @param string $prompt
+ * @deprecated The `prompt` configuration has been replaced by Themes and support will
+ * eventually be removed. In the meantime, prompt is applied first by the Theme, then overridden
+ * by any explicitly defined prompt.
+ *
+ * Note that providing a prompt but not a theme config will implicitly use the `classic` theme.
*/
public function setPrompt(string $prompt)
{
$this->prompt = $prompt;
+
+ if (isset($this->theme)) {
+ $this->theme->setPrompt($prompt);
+ }
}
/**
@@ -1639,8 +1676,6 @@ public function getPrompt()
/**
* Get the force array indexes.
- *
- * @return bool
*/
public function forceArrayIndexes(): bool
{
@@ -1657,6 +1692,46 @@ public function setForceArrayIndexes(bool $forceArrayIndexes)
$this->forceArrayIndexes = $forceArrayIndexes;
}
+ /**
+ * Set the current output Theme.
+ *
+ * @param Theme|string|array $theme Theme (or Theme config)
+ */
+ public function setTheme($theme)
+ {
+ if (!$theme instanceof Theme) {
+ $theme = new Theme($theme);
+ }
+
+ $this->theme = $theme;
+
+ if (isset($this->prompt)) {
+ $this->theme->setPrompt($this->prompt);
+ }
+
+ if (isset($this->output)) {
+ $this->output->setTheme($theme);
+ $this->applyFormatterStyles();
+ }
+ }
+
+ /**
+ * Get the current output Theme.
+ */
+ public function theme(): Theme
+ {
+ if (!isset($this->theme)) {
+ // If a prompt is explicitly set, and a theme is not, base it on the `classic` theme.
+ $this->theme = $this->prompt ? new Theme('classic') : new Theme();
+ }
+
+ if (isset($this->prompt)) {
+ $this->theme->setPrompt($this->prompt);
+ }
+
+ return $this->theme;
+ }
+
/**
* Set the shell output formatter styles.
*
@@ -1669,15 +1744,14 @@ public function setForceArrayIndexes(bool $forceArrayIndexes)
*
* Foreground, background or options can be null, or even omitted entirely.
*
- * @see ShellOutput::initFormatters
- *
- * @param array $formatterStyles
+ * @deprecated The `formatterStyles` configuration has been replaced by Themes and support will
+ * eventually be removed. In the meantime, styles are applied first by the Theme, then
+ * overridden by any explicitly defined formatter styles.
*/
public function setFormatterStyles(array $formatterStyles)
{
foreach ($formatterStyles as $name => $style) {
- list($fg, $bg, $opts) = \array_pad($style, 3, null);
- $this->formatterStyles[$name] = new OutputFormatterStyle($fg ?: null, $bg ?: null, $opts ?: []);
+ $this->formatterStyles[$name] = new OutputFormatterStyle(...$style);
}
if (isset($this->output)) {
@@ -1690,6 +1764,10 @@ public function setFormatterStyles(array $formatterStyles)
*
* This is called on initialization of the shell output, and again if the
* formatter styles config is updated.
+ *
+ * @deprecated The `formatterStyles` configuration has been replaced by Themes and support will
+ * eventually be removed. In the meantime, styles are applied first by the Theme, then
+ * overridden by any explicitly defined formatter styles.
*/
private function applyFormatterStyles()
{
@@ -1697,12 +1775,17 @@ private function applyFormatterStyles()
foreach ($this->formatterStyles as $name => $style) {
$formatter->setStyle($name, $style);
}
+
+ $errorFormatter = $this->output->getErrorOutput()->getFormatter();
+ foreach (Theme::ERROR_STYLES as $name) {
+ if (isset($this->formatterStyles[$name])) {
+ $errorFormatter->setStyle($name, $this->formatterStyles[$name]);
+ }
+ }
}
/**
* Get the configured output verbosity.
- *
- * @return string
*/
public function verbosity(): string
{
@@ -1765,13 +1848,11 @@ public function getOutputVerbosity(): int
* Guess whether stdin is piped.
*
* This is mostly useful for deciding whether to use non-interactive mode.
- *
- * @return bool
*/
public function inputIsPiped(): bool
{
if ($this->pipedInput === null) {
- $this->pipedInput = \defined('STDIN') && static::looksLikeAPipe(\STDIN);
+ $this->pipedInput = \defined('STDIN') && self::looksLikeAPipe(\STDIN);
}
return $this->pipedInput;
@@ -1781,13 +1862,11 @@ public function inputIsPiped(): bool
* Guess whether shell output is piped.
*
* This is mostly useful for deciding whether to use non-decorated output.
- *
- * @return bool
*/
public function outputIsPiped(): bool
{
if ($this->pipedOutput === null) {
- $this->pipedOutput = static::looksLikeAPipe($this->getOutput()->getStream());
+ $this->pipedOutput = self::looksLikeAPipe($this->getOutput()->getStream());
}
return $this->pipedOutput;
@@ -1797,8 +1876,6 @@ public function outputIsPiped(): bool
* Guess whether an input or output stream is piped.
*
* @param resource|int $stream
- *
- * @return bool
*/
private static function looksLikeAPipe($stream): bool
{
diff --git a/app/vendor/psy/psysh/src/ConsoleColorFactory.php b/app/vendor/psy/psysh/src/ConsoleColorFactory.php
deleted file mode 100644
index c589863bc..000000000
--- a/app/vendor/psy/psysh/src/ConsoleColorFactory.php
+++ /dev/null
@@ -1,39 +0,0 @@
-lastException = $e;
}
/**
- * Get the most recent Exception.
+ * Get the most recent Exception or Error.
*
* @throws \InvalidArgumentException If no Exception has been caught
*
- * @return \Exception|null
+ * @return \Throwable|null
*/
public function getLastException()
{
@@ -285,8 +281,6 @@ public function setCommandScopeVariables(array $commandScopeVariables)
/**
* Get command-scope magic variables: $__class, $__file, etc.
- *
- * @return array
*/
public function getCommandScopeVariables(): array
{
@@ -310,8 +304,6 @@ public function getUnusedCommandScopeVariableNames(): array
* Check whether a variable name is a magic variable.
*
* @param string $name
- *
- * @return bool
*/
public static function isSpecialVariableName(string $name): bool
{
diff --git a/app/vendor/psy/psysh/src/ContextAware.php b/app/vendor/psy/psysh/src/ContextAware.php
index 5f6d7df35..83979ae85 100644
--- a/app/vendor/psy/psysh/src/ContextAware.php
+++ b/app/vendor/psy/psysh/src/ContextAware.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/EnvInterface.php b/app/vendor/psy/psysh/src/EnvInterface.php
index 340ca3ae2..31a738fc4 100644
--- a/app/vendor/psy/psysh/src/EnvInterface.php
+++ b/app/vendor/psy/psysh/src/EnvInterface.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Exception/BreakException.php b/app/vendor/psy/psysh/src/Exception/BreakException.php
index 45a27dc7d..4061442a8 100644
--- a/app/vendor/psy/psysh/src/Exception/BreakException.php
+++ b/app/vendor/psy/psysh/src/Exception/BreakException.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -21,7 +21,7 @@ class BreakException extends \Exception implements Exception
/**
* {@inheritdoc}
*/
- public function __construct($message = '', $code = 0, \Exception $previous = null)
+ public function __construct($message = '', $code = 0, \Throwable $previous = null)
{
$this->rawMessage = $message;
parent::__construct(\sprintf('Exit: %s', $message), $code, $previous);
@@ -29,8 +29,6 @@ public function __construct($message = '', $code = 0, \Exception $previous = nul
/**
* Return a raw (unformatted) version of the error message.
- *
- * @return string
*/
public function getRawMessage(): string
{
diff --git a/app/vendor/psy/psysh/src/Exception/DeprecatedException.php b/app/vendor/psy/psysh/src/Exception/DeprecatedException.php
index a0397eafb..f326b53bd 100644
--- a/app/vendor/psy/psysh/src/Exception/DeprecatedException.php
+++ b/app/vendor/psy/psysh/src/Exception/DeprecatedException.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Exception/ErrorException.php b/app/vendor/psy/psysh/src/Exception/ErrorException.php
index f0bb63c22..13e24fe9e 100644
--- a/app/vendor/psy/psysh/src/Exception/ErrorException.php
+++ b/app/vendor/psy/psysh/src/Exception/ErrorException.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -21,14 +21,14 @@ class ErrorException extends \ErrorException implements Exception
/**
* Construct a Psy ErrorException.
*
- * @param string $message (default: "")
- * @param int $code (default: 0)
- * @param int $severity (default: 1)
- * @param string|null $filename (default: null)
- * @param int|null $lineno (default: null)
- * @param Exception|null $previous (default: null)
+ * @param string $message (default: "")
+ * @param int $code (default: 0)
+ * @param int $severity (default: 1)
+ * @param string|null $filename (default: null)
+ * @param int|null $lineno (default: null)
+ * @param \Throwable|null $previous (default: null)
*/
- public function __construct($message = '', $code = 0, $severity = 1, $filename = null, $lineno = null, $previous = null)
+ public function __construct($message = '', $code = 0, $severity = 1, $filename = null, $lineno = null, \Throwable $previous = null)
{
$this->rawMessage = $message;
@@ -73,8 +73,6 @@ public function __construct($message = '', $code = 0, $severity = 1, $filename =
/**
* Get the raw (unformatted) message for this error.
- *
- * @return string
*/
public function getRawMessage(): string
{
@@ -103,9 +101,9 @@ public static function throwException($errno, $errstr, $errfile, $errline)
/**
* Create an ErrorException from an Error.
*
- * @param \Error $e
+ * @deprecated PsySH no longer wraps Errors
*
- * @return self
+ * @param \Error $e
*/
public static function fromError(\Error $e): self
{
diff --git a/app/vendor/psy/psysh/src/Exception/Exception.php b/app/vendor/psy/psysh/src/Exception/Exception.php
index 0f2e0d972..db7906211 100644
--- a/app/vendor/psy/psysh/src/Exception/Exception.php
+++ b/app/vendor/psy/psysh/src/Exception/Exception.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Exception/FatalErrorException.php b/app/vendor/psy/psysh/src/Exception/FatalErrorException.php
index 4c3e4b15e..21b223488 100644
--- a/app/vendor/psy/psysh/src/Exception/FatalErrorException.php
+++ b/app/vendor/psy/psysh/src/Exception/FatalErrorException.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -26,9 +26,9 @@ class FatalErrorException extends \ErrorException implements Exception
* @param int $severity (default: 1)
* @param string|null $filename (default: null)
* @param int|null $lineno (default: null)
- * @param \Exception|null $previous (default: null)
+ * @param \Throwable|null $previous (default: null)
*/
- public function __construct($message = '', $code = 0, $severity = 1, $filename = null, $lineno = null, $previous = null)
+ public function __construct($message = '', $code = 0, $severity = 1, $filename = null, $lineno = null, \Throwable $previous = null)
{
// Since these are basically always PHP Parser Node line numbers, treat -1 as null.
if ($lineno === -1) {
@@ -42,8 +42,6 @@ public function __construct($message = '', $code = 0, $severity = 1, $filename =
/**
* Return a raw (unformatted) version of the error message.
- *
- * @return string
*/
public function getRawMessage(): string
{
diff --git a/app/vendor/psy/psysh/src/Exception/ParseErrorException.php b/app/vendor/psy/psysh/src/Exception/ParseErrorException.php
index ff4695ce8..8abfd12f8 100644
--- a/app/vendor/psy/psysh/src/Exception/ParseErrorException.php
+++ b/app/vendor/psy/psysh/src/Exception/ParseErrorException.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -32,8 +32,6 @@ public function __construct(string $message = '', int $line = -1)
* Create a ParseErrorException from a PhpParser Error.
*
* @param \PhpParser\Error $e
- *
- * @return self
*/
public static function fromParseError(\PhpParser\Error $e): self
{
diff --git a/app/vendor/psy/psysh/src/Exception/RuntimeException.php b/app/vendor/psy/psysh/src/Exception/RuntimeException.php
index 99e131b98..6228813b0 100644
--- a/app/vendor/psy/psysh/src/Exception/RuntimeException.php
+++ b/app/vendor/psy/psysh/src/Exception/RuntimeException.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -23,9 +23,9 @@ class RuntimeException extends \RuntimeException implements Exception
*
* @param string $message (default: "")
* @param int $code (default: 0)
- * @param \Exception|null $previous (default: null)
+ * @param \Throwable|null $previous (default: null)
*/
- public function __construct(string $message = '', int $code = 0, \Exception $previous = null)
+ public function __construct(string $message = '', int $code = 0, \Throwable $previous = null)
{
$this->rawMessage = $message;
parent::__construct($message, $code, $previous);
@@ -33,8 +33,6 @@ public function __construct(string $message = '', int $code = 0, \Exception $pre
/**
* Return a raw (unformatted) version of the error message.
- *
- * @return string
*/
public function getRawMessage(): string
{
diff --git a/app/vendor/psy/psysh/src/Exception/ThrowUpException.php b/app/vendor/psy/psysh/src/Exception/ThrowUpException.php
index a2b3fc459..6e2da0899 100644
--- a/app/vendor/psy/psysh/src/Exception/ThrowUpException.php
+++ b/app/vendor/psy/psysh/src/Exception/ThrowUpException.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -19,16 +19,14 @@ class ThrowUpException extends \Exception implements Exception
/**
* {@inheritdoc}
*/
- public function __construct(\Exception $exception)
+ public function __construct(\Throwable $throwable)
{
- $message = \sprintf("Throwing %s with message '%s'", \get_class($exception), $exception->getMessage());
- parent::__construct($message, $exception->getCode(), $exception);
+ $message = \sprintf("Throwing %s with message '%s'", \get_class($throwable), $throwable->getMessage());
+ parent::__construct($message, $throwable->getCode(), $throwable);
}
/**
* Return a raw (unformatted) version of the error message.
- *
- * @return string
*/
public function getRawMessage(): string
{
@@ -38,9 +36,9 @@ public function getRawMessage(): string
/**
* Create a ThrowUpException from a Throwable.
*
- * @param \Throwable $throwable
+ * @deprecated PsySH no longer wraps Throwables
*
- * @return self
+ * @param \Throwable $throwable
*/
public static function fromThrowable($throwable): self
{
diff --git a/app/vendor/psy/psysh/src/Exception/TypeErrorException.php b/app/vendor/psy/psysh/src/Exception/TypeErrorException.php
index b1c828b47..cbf00eaa6 100644
--- a/app/vendor/psy/psysh/src/Exception/TypeErrorException.php
+++ b/app/vendor/psy/psysh/src/Exception/TypeErrorException.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -21,20 +21,21 @@ class TypeErrorException extends \Exception implements Exception
/**
* Constructor!
*
- * @param string $message (default: "")
- * @param int $code (default: 0)
+ * @deprecated PsySH no longer wraps TypeErrors
+ *
+ * @param string $message (default: "")
+ * @param int $code (default: 0)
+ * @param \Throwable|null $previous (default: null)
*/
- public function __construct(string $message = '', int $code = 0)
+ public function __construct(string $message = '', int $code = 0, \Throwable $previous = null)
{
$this->rawMessage = $message;
$message = \preg_replace('/, called in .*?: eval\\(\\)\'d code/', '', $message);
- parent::__construct(\sprintf('TypeError: %s', $message), $code);
+ parent::__construct(\sprintf('TypeError: %s', $message), $code, $previous);
}
/**
* Get the raw (unformatted) message for this error.
- *
- * @return string
*/
public function getRawMessage(): string
{
@@ -44,12 +45,12 @@ public function getRawMessage(): string
/**
* Create a TypeErrorException from a TypeError.
*
- * @param \TypeError $e
+ * @deprecated PsySH no longer wraps TypeErrors
*
- * @return self
+ * @param \TypeError $e
*/
public static function fromTypeError(\TypeError $e): self
{
- return new self($e->getMessage(), $e->getCode());
+ return new self($e->getMessage(), $e->getCode(), $e);
}
}
diff --git a/app/vendor/psy/psysh/src/Exception/UnexpectedTargetException.php b/app/vendor/psy/psysh/src/Exception/UnexpectedTargetException.php
index ef6eec786..9d2b70d11 100644
--- a/app/vendor/psy/psysh/src/Exception/UnexpectedTargetException.php
+++ b/app/vendor/psy/psysh/src/Exception/UnexpectedTargetException.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -19,9 +19,9 @@ class UnexpectedTargetException extends RuntimeException
* @param mixed $target
* @param string $message (default: "")
* @param int $code (default: 0)
- * @param \Exception|null $previous (default: null)
+ * @param \Throwable|null $previous (default: null)
*/
- public function __construct($target, string $message = '', int $code = 0, \Exception $previous = null)
+ public function __construct($target, string $message = '', int $code = 0, \Throwable $previous = null)
{
$this->target = $target;
parent::__construct($message, $code, $previous);
diff --git a/app/vendor/psy/psysh/src/ExecutionClosure.php b/app/vendor/psy/psysh/src/ExecutionClosure.php
index 1418d3df4..837e931be 100644
--- a/app/vendor/psy/psysh/src/ExecutionClosure.php
+++ b/app/vendor/psy/psysh/src/ExecutionClosure.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php b/app/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php
index cd6e0024f..8230c5508 100644
--- a/app/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php
+++ b/app/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/ExecutionLoop/Listener.php b/app/vendor/psy/psysh/src/ExecutionLoop/Listener.php
index 632ef719e..9f207f5b7 100644
--- a/app/vendor/psy/psysh/src/ExecutionLoop/Listener.php
+++ b/app/vendor/psy/psysh/src/ExecutionLoop/Listener.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -20,8 +20,6 @@ interface Listener
{
/**
* Determines whether this listener should be active.
- *
- * @return bool
*/
public static function isSupported(): bool;
diff --git a/app/vendor/psy/psysh/src/ExecutionLoop/ProcessForker.php b/app/vendor/psy/psysh/src/ExecutionLoop/ProcessForker.php
index dd66db8b8..3d61693c4 100644
--- a/app/vendor/psy/psysh/src/ExecutionLoop/ProcessForker.php
+++ b/app/vendor/psy/psysh/src/ExecutionLoop/ProcessForker.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -41,8 +41,6 @@ class ProcessForker extends AbstractListener
/**
* Process forker is supported if pcntl and posix extensions are available.
- *
- * @return bool
*/
public static function isSupported(): bool
{
@@ -250,8 +248,6 @@ private function createSavegame()
* we can.
*
* @param array $return
- *
- * @return string
*/
private function serializeReturn(array $return): string
{
diff --git a/app/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php b/app/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php
index 0854ba76f..d84651965 100644
--- a/app/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php
+++ b/app/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -17,6 +17,8 @@
/**
* A runkit-based code reloader, which is pretty much magic.
+ *
+ * @todo Remove RunkitReloader once we drop support for PHP 7.x :(
*/
class RunkitReloader extends AbstractListener
{
@@ -25,8 +27,6 @@ class RunkitReloader extends AbstractListener
/**
* Only enabled if Runkit is installed.
- *
- * @return bool
*/
public static function isSupported(): bool
{
@@ -127,8 +127,6 @@ private function reload(Shell $shell)
* Use PHP-Parser to ensure that the file is valid PHP.
*
* @param string $file
- *
- * @return bool
*/
private function lintFile(string $file): bool
{
diff --git a/app/vendor/psy/psysh/src/ExecutionLoopClosure.php b/app/vendor/psy/psysh/src/ExecutionLoopClosure.php
index 2f320bfea..78f7e5ea1 100644
--- a/app/vendor/psy/psysh/src/ExecutionLoopClosure.php
+++ b/app/vendor/psy/psysh/src/ExecutionLoopClosure.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -12,9 +12,7 @@
namespace Psy;
use Psy\Exception\BreakException;
-use Psy\Exception\ErrorException;
use Psy\Exception\ThrowUpException;
-use Psy\Exception\TypeErrorException;
/**
* The Psy Shell's execution loop scope.
@@ -80,11 +78,7 @@ public function __construct(Shell $__psysh__)
$__psysh__->writeException($_e);
throw $_e;
- } catch (\TypeError $_e) {
- $__psysh__->writeException(TypeErrorException::fromTypeError($_e));
- } catch (\Error $_e) {
- $__psysh__->writeException(ErrorException::fromError($_e));
- } catch (\Exception $_e) {
+ } catch (\Throwable $_e) {
$__psysh__->writeException($_e);
}
diff --git a/app/vendor/psy/psysh/src/Formatter/CodeFormatter.php b/app/vendor/psy/psysh/src/Formatter/CodeFormatter.php
index cbc052bcb..d795cf1ea 100644
--- a/app/vendor/psy/psysh/src/Formatter/CodeFormatter.php
+++ b/app/vendor/psy/psysh/src/Formatter/CodeFormatter.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -32,7 +32,7 @@ class CodeFormatter implements ReflectorFormatter
const HIGHLIGHT_CONST = 'const';
const HIGHLIGHT_NUMBER = 'number';
const HIGHLIGHT_STRING = 'string';
- const HIGHLIGHT_COMMENT = 'comment';
+ const HIGHLIGHT_COMMENT = 'code_comment';
const HIGHLIGHT_INLINE_HTML = 'inline_html';
private static $tokenMap = [
@@ -122,8 +122,6 @@ public static function formatCode(string $code, int $startLine = 1, int $endLine
* This is typehinted as \Reflector but we've narrowed the input via self::isReflectable already.
*
* @param \ReflectionClass|\ReflectionFunctionAbstract $reflector
- *
- * @return int
*/
private static function getStartLine(\Reflector $reflector): int
{
@@ -302,16 +300,16 @@ private static function numberLines(\Generator $lines, int $markLine = null): \G
$mark = ($markLine === $lineNum) ? self::LINE_MARKER : self::NO_LINE_MARKER;
}
- yield \sprintf("%s: %s", $mark, $lineNum, $line);
+ yield \sprintf("%s: %s", $mark, $lineNum, $line);
}
}
/**
* Check whether a Reflector instance is reflectable by this formatter.
*
- * @param \Reflector $reflector
+ * @phpstan-assert-if-true \ReflectionClass|\ReflectionFunctionAbstract $reflector
*
- * @return bool
+ * @param \Reflector $reflector
*/
private static function isReflectable(\Reflector $reflector): bool
{
diff --git a/app/vendor/psy/psysh/src/Formatter/DocblockFormatter.php b/app/vendor/psy/psysh/src/Formatter/DocblockFormatter.php
index 05a73bd81..282f463e2 100644
--- a/app/vendor/psy/psysh/src/Formatter/DocblockFormatter.php
+++ b/app/vendor/psy/psysh/src/Formatter/DocblockFormatter.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -68,8 +68,6 @@ public static function format(\Reflector $reflector): string
*
* @param array $vector
* @param array $lines
- *
- * @return string
*/
private static function formatVector(array $vector, array $lines): string
{
@@ -133,8 +131,6 @@ private static function formatTags(array $skip, array $tags): string
*
* @param string $type Vector type
* @param int $max Pad width
- *
- * @return string
*/
private static function getVectorParamTemplate(string $type, int $max): string
{
@@ -150,8 +146,6 @@ private static function getVectorParamTemplate(string $type, int $max): string
*
* @param string $text String to indent
* @param string $indent (default: ' ')
- *
- * @return string
*/
private static function indent(string $text, string $indent = ' '): string
{
@@ -162,8 +156,6 @@ private static function indent(string $text, string $indent = ' '): string
* Convert underscored or whitespace separated words into sentence case.
*
* @param string $text
- *
- * @return string
*/
private static function inflect(string $text): string
{
diff --git a/app/vendor/psy/psysh/src/Formatter/Formatter.php b/app/vendor/psy/psysh/src/Formatter/Formatter.php
index a8a37bc06..0f972a3f9 100644
--- a/app/vendor/psy/psysh/src/Formatter/Formatter.php
+++ b/app/vendor/psy/psysh/src/Formatter/Formatter.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Formatter/ReflectorFormatter.php b/app/vendor/psy/psysh/src/Formatter/ReflectorFormatter.php
index cafc140c4..02f426cdd 100644
--- a/app/vendor/psy/psysh/src/Formatter/ReflectorFormatter.php
+++ b/app/vendor/psy/psysh/src/Formatter/ReflectorFormatter.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -18,8 +18,6 @@ interface ReflectorFormatter
{
/**
* @param \Reflector $reflector
- *
- * @return string
*/
public static function format(\Reflector $reflector): string;
}
diff --git a/app/vendor/psy/psysh/src/Formatter/SignatureFormatter.php b/app/vendor/psy/psysh/src/Formatter/SignatureFormatter.php
index a33d651f7..799d669d1 100644
--- a/app/vendor/psy/psysh/src/Formatter/SignatureFormatter.php
+++ b/app/vendor/psy/psysh/src/Formatter/SignatureFormatter.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -38,8 +38,8 @@ public static function format(\Reflector $reflector): string
case $reflector instanceof ReflectionLanguageConstruct:
return self::formatFunction($reflector);
- // this case also covers \ReflectionObject:
case $reflector instanceof \ReflectionClass:
+ // this case also covers \ReflectionObject
return self::formatClass($reflector);
case $reflector instanceof ReflectionClassConstant:
@@ -63,7 +63,7 @@ public static function format(\Reflector $reflector): string
/**
* Print the signature name.
*
- * @param \Reflector $reflector
+ * @param \ReflectionClass|ReflectionClassConstant|\ReflectionClassConstant|\ReflectionFunctionAbstract $reflector
*
* @return string Formatted name
*/
@@ -75,7 +75,7 @@ public static function formatName(\Reflector $reflector): string
/**
* Print the method, property or class modifiers.
*
- * @param \Reflector $reflector
+ * @param \ReflectionMethod|\ReflectionProperty|\ReflectionClass $reflector
*
* @return string Formatted modifiers
*/
@@ -173,8 +173,6 @@ private static function formatConstant(ReflectionConstant_ $reflector): string
* Helper for getting output style for a given value's type.
*
* @param mixed $value
- *
- * @return string
*/
private static function getTypeStyle($value): string
{
@@ -324,8 +322,6 @@ private static function formatFunctionParams(\ReflectionFunctionAbstract $reflec
* Print function param or return type(s).
*
* @param \ReflectionType $type
- *
- * @return string
*/
private static function formatReflectionType(\ReflectionType $type = null): string
{
diff --git a/app/vendor/psy/psysh/src/Formatter/TraceFormatter.php b/app/vendor/psy/psysh/src/Formatter/TraceFormatter.php
index 7575068e7..f9859225b 100644
--- a/app/vendor/psy/psysh/src/Formatter/TraceFormatter.php
+++ b/app/vendor/psy/psysh/src/Formatter/TraceFormatter.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Input/CodeArgument.php b/app/vendor/psy/psysh/src/Input/CodeArgument.php
index f9c8bcdbc..c41534782 100644
--- a/app/vendor/psy/psysh/src/Input/CodeArgument.php
+++ b/app/vendor/psy/psysh/src/Input/CodeArgument.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Input/FilterOptions.php b/app/vendor/psy/psysh/src/Input/FilterOptions.php
index f630d3b9b..64eee3f80 100644
--- a/app/vendor/psy/psysh/src/Input/FilterOptions.php
+++ b/app/vendor/psy/psysh/src/Input/FilterOptions.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -73,8 +73,6 @@ public function bind(InputInterface $input)
/**
* Check whether the bound input has filter options.
- *
- * @return bool
*/
public function hasFilter(): bool
{
@@ -86,8 +84,6 @@ public function hasFilter(): bool
*
* @param string $string
* @param array $matches
- *
- * @return bool
*/
public function match(string $string, array &$matches = null): bool
{
@@ -116,8 +112,6 @@ private function validateInput(InputInterface $input)
* Check whether a string appears to be a regular expression.
*
* @param string $string
- *
- * @return bool
*/
private function stringIsRegex(string $string): bool
{
diff --git a/app/vendor/psy/psysh/src/Input/ShellInput.php b/app/vendor/psy/psysh/src/Input/ShellInput.php
index af21f448a..10ca2b5b0 100644
--- a/app/vendor/psy/psysh/src/Input/ShellInput.php
+++ b/app/vendor/psy/psysh/src/Input/ShellInput.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Input/SilentInput.php b/app/vendor/psy/psysh/src/Input/SilentInput.php
index cf19409b3..0c963f544 100644
--- a/app/vendor/psy/psysh/src/Input/SilentInput.php
+++ b/app/vendor/psy/psysh/src/Input/SilentInput.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -34,8 +34,6 @@ public function __construct(string $inputString)
/**
* To. String.
- *
- * @return string
*/
public function __toString(): string
{
diff --git a/app/vendor/psy/psysh/src/Output/OutputPager.php b/app/vendor/psy/psysh/src/Output/OutputPager.php
index 67f523d00..0652b70bf 100644
--- a/app/vendor/psy/psysh/src/Output/OutputPager.php
+++ b/app/vendor/psy/psysh/src/Output/OutputPager.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Output/PassthruPager.php b/app/vendor/psy/psysh/src/Output/PassthruPager.php
index b27142599..6ad17b5b9 100644
--- a/app/vendor/psy/psysh/src/Output/PassthruPager.php
+++ b/app/vendor/psy/psysh/src/Output/PassthruPager.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
diff --git a/app/vendor/psy/psysh/src/Output/ProcOutputPager.php b/app/vendor/psy/psysh/src/Output/ProcOutputPager.php
index cbeb0ff01..aeaff3685 100644
--- a/app/vendor/psy/psysh/src/Output/ProcOutputPager.php
+++ b/app/vendor/psy/psysh/src/Output/ProcOutputPager.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -32,9 +32,9 @@ class ProcOutputPager extends StreamOutput implements OutputPager
* Constructor.
*
* @param StreamOutput $output
- * @param string $cmd Pager process command (default: 'less -R -S -F -X')
+ * @param string $cmd Pager process command (default: 'less -R -F -X')
*/
- public function __construct(StreamOutput $output, string $cmd = 'less -R -S -F -X')
+ public function __construct(StreamOutput $output, string $cmd = 'less -R -F -X')
{
$this->stream = $output->getStream();
$this->cmd = $cmd;
@@ -54,6 +54,7 @@ public function doWrite($message, $newline)
if (false === @\fwrite($pipe, $message.($newline ? \PHP_EOL : ''))) {
// @codeCoverageIgnoreStart
// should never happen
+ $this->close();
throw new \RuntimeException('Unable to write output');
// @codeCoverageIgnoreEnd
}
diff --git a/app/vendor/psy/psysh/src/Output/ShellOutput.php b/app/vendor/psy/psysh/src/Output/ShellOutput.php
index e24c992f1..543baccb2 100644
--- a/app/vendor/psy/psysh/src/Output/ShellOutput.php
+++ b/app/vendor/psy/psysh/src/Output/ShellOutput.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -13,7 +13,6 @@
use Symfony\Component\Console\Formatter\OutputFormatter;
use Symfony\Component\Console\Formatter\OutputFormatterInterface;
-use Symfony\Component\Console\Formatter\OutputFormatterStyle;
use Symfony\Component\Console\Output\ConsoleOutput;
/**
@@ -24,8 +23,13 @@ class ShellOutput extends ConsoleOutput
const NUMBER_LINES = 128;
private $paging = 0;
+
+ /** @var OutputPager */
private $pager;
+ /** @var Theme */
+ private $theme;
+
/**
* Construct a ShellOutput instance.
*
@@ -34,10 +38,11 @@ class ShellOutput extends ConsoleOutput
* @param OutputFormatterInterface|null $formatter (default: null)
* @param string|OutputPager|null $pager (default: null)
*/
- public function __construct($verbosity = self::VERBOSITY_NORMAL, $decorated = null, OutputFormatterInterface $formatter = null, $pager = null)
+ public function __construct($verbosity = self::VERBOSITY_NORMAL, $decorated = null, OutputFormatterInterface $formatter = null, $pager = null, $theme = null)
{
parent::__construct($verbosity, $decorated, $formatter);
+ $this->theme = $theme ?? new Theme('modern');
$this->initFormatters();
if ($pager === null) {
@@ -158,6 +163,15 @@ public function doWrite($message, $newline)
}
}
+ /**
+ * Set the output Theme.
+ */
+ public function setTheme(Theme $theme)
+ {
+ $this->theme = $theme;
+ $this->initFormatters();
+ }
+
/**
* Flush and close the output pager.
*/
@@ -173,38 +187,22 @@ private function closePager()
*/
private function initFormatters()
{
- $formatter = $this->getFormatter();
-
- $formatter->setStyle('warning', new OutputFormatterStyle('black', 'yellow'));
- $formatter->setStyle('error', new OutputFormatterStyle('white', 'red', ['bold']));
- $formatter->setStyle('aside', new OutputFormatterStyle('blue'));
- $formatter->setStyle('strong', new OutputFormatterStyle(null, null, ['bold']));
- $formatter->setStyle('return', new OutputFormatterStyle('cyan'));
- $formatter->setStyle('urgent', new OutputFormatterStyle('red'));
- $formatter->setStyle('hidden', new OutputFormatterStyle('black'));
-
- // Visibility
- $formatter->setStyle('public', new OutputFormatterStyle(null, null, ['bold']));
- $formatter->setStyle('protected', new OutputFormatterStyle('yellow'));
- $formatter->setStyle('private', new OutputFormatterStyle('red'));
- $formatter->setStyle('global', new OutputFormatterStyle('cyan', null, ['bold']));
- $formatter->setStyle('const', new OutputFormatterStyle('cyan'));
- $formatter->setStyle('class', new OutputFormatterStyle('blue', null, ['underscore']));
- $formatter->setStyle('function', new OutputFormatterStyle(null));
- $formatter->setStyle('default', new OutputFormatterStyle(null));
-
- // Types
- $formatter->setStyle('number', new OutputFormatterStyle('magenta'));
- $formatter->setStyle('integer', new OutputFormatterStyle('magenta'));
- $formatter->setStyle('float', new OutputFormatterStyle('yellow'));
- $formatter->setStyle('string', new OutputFormatterStyle('green'));
- $formatter->setStyle('bool', new OutputFormatterStyle('cyan'));
- $formatter->setStyle('keyword', new OutputFormatterStyle('yellow'));
- $formatter->setStyle('comment', new OutputFormatterStyle('blue'));
- $formatter->setStyle('object', new OutputFormatterStyle('blue'));
- $formatter->setStyle('resource', new OutputFormatterStyle('yellow'));
-
- // Code-specific formatting
- $formatter->setStyle('inline_html', new OutputFormatterStyle('cyan'));
+ $useGrayFallback = !$this->grayExists();
+ $this->theme->applyStyles($this->getFormatter(), $useGrayFallback);
+ $this->theme->applyErrorStyles($this->getErrorOutput()->getFormatter(), $useGrayFallback);
+ }
+
+ /**
+ * Checks if the "gray" color exists on the output.
+ */
+ private function grayExists(): bool
+ {
+ try {
+ $this->write('>');
+ } catch (\InvalidArgumentException $e) {
+ return false;
+ }
+
+ return true;
}
}
diff --git a/app/vendor/psy/psysh/src/Output/Theme.php b/app/vendor/psy/psysh/src/Output/Theme.php
new file mode 100644
index 000000000..01023f2ec
--- /dev/null
+++ b/app/vendor/psy/psysh/src/Output/Theme.php
@@ -0,0 +1,282 @@
+ true,
+ ];
+
+ const CLASSIC_THEME = [
+ 'compact' => true,
+
+ 'prompt' => '>>> ',
+ 'bufferPrompt' => '... ',
+ 'replayPrompt' => '--> ',
+ 'returnValue' => '=> ',
+ ];
+
+ const DEFAULT_STYLES = [
+ 'info' => ['white', 'blue', ['bold']],
+ 'warning' => ['black', 'yellow'],
+ 'error' => ['white', 'red', ['bold']],
+ 'whisper' => ['gray'],
+
+ 'aside' => ['blue'],
+ 'strong' => [null, null, ['bold']],
+ 'return' => ['cyan'],
+ 'urgent' => ['red'],
+ 'hidden' => ['black'],
+
+ // Visibility
+ 'public' => [null, null, ['bold']],
+ 'protected' => ['yellow'],
+ 'private' => ['red'],
+ 'global' => ['cyan', null, ['bold']],
+ 'const' => ['cyan'],
+ 'class' => ['blue', null, ['underscore']],
+ 'function' => [null],
+ 'default' => [null],
+
+ // Types
+ 'number' => ['magenta'],
+ 'integer' => ['magenta'],
+ 'float' => ['yellow'],
+ 'string' => ['green'],
+ 'bool' => ['cyan'],
+ 'keyword' => ['yellow'],
+ 'comment' => ['blue'],
+ 'code_comment' => ['gray'],
+ 'object' => ['blue'],
+ 'resource' => ['yellow'],
+
+ // Code-specific formatting
+ 'inline_html' => ['cyan'],
+ ];
+
+ const ERROR_STYLES = ['info', 'warning', 'error', 'whisper', 'class'];
+
+ private $compact = false;
+
+ private $prompt = '> ';
+ private $bufferPrompt = '. ';
+ private $replayPrompt = '- ';
+ private $returnValue = '= ';
+
+ private $grayFallback = 'blue';
+
+ private $styles = [];
+
+ /**
+ * @param string|array $config theme name or config options
+ */
+ public function __construct($config = 'modern')
+ {
+ if (\is_string($config)) {
+ switch ($config) {
+ case 'modern':
+ $config = static::MODERN_THEME;
+ break;
+
+ case 'compact':
+ $config = static::COMPACT_THEME;
+ break;
+
+ case 'classic':
+ $config = static::CLASSIC_THEME;
+ break;
+
+ default:
+ \trigger_error(\sprintf('Unknown theme: %s', $config), \E_USER_NOTICE);
+ $config = static::MODERN_THEME;
+ break;
+ }
+ }
+
+ if (!\is_array($config)) {
+ throw new \InvalidArgumentException('Invalid theme config');
+ }
+
+ foreach ($config as $name => $value) {
+ switch ($name) {
+ case 'compact':
+ $this->setCompact($value);
+ break;
+
+ case 'prompt':
+ $this->setPrompt($value);
+ break;
+
+ case 'bufferPrompt':
+ $this->setBufferPrompt($value);
+ break;
+
+ case 'replayPrompt':
+ $this->setReplayPrompt($value);
+ break;
+
+ case 'returnValue':
+ $this->setReturnValue($value);
+ break;
+
+ case 'grayFallback':
+ $this->setGrayFallback($value);
+ break;
+ }
+ }
+
+ $this->setStyles($config['styles'] ?? []);
+ }
+
+ /**
+ * Enable or disable compact output.
+ */
+ public function setCompact(bool $compact)
+ {
+ $this->compact = $compact;
+ }
+
+ /**
+ * Get whether to use compact output.
+ */
+ public function compact(): bool
+ {
+ return $this->compact;
+ }
+
+ /**
+ * Set the prompt string.
+ */
+ public function setPrompt(string $prompt)
+ {
+ $this->prompt = $prompt;
+ }
+
+ /**
+ * Get the prompt string.
+ */
+ public function prompt(): string
+ {
+ return $this->prompt;
+ }
+
+ /**
+ * Set the buffer prompt string (used for multi-line input continuation).
+ */
+ public function setBufferPrompt(string $bufferPrompt)
+ {
+ $this->bufferPrompt = $bufferPrompt;
+ }
+
+ /**
+ * Get the buffer prompt string (used for multi-line input continuation).
+ */
+ public function bufferPrompt(): string
+ {
+ return $this->bufferPrompt;
+ }
+
+ /**
+ * Set the prompt string used when replaying history.
+ */
+ public function setReplayPrompt(string $replayPrompt)
+ {
+ $this->replayPrompt = $replayPrompt;
+ }
+
+ /**
+ * Get the prompt string used when replaying history.
+ */
+ public function replayPrompt(): string
+ {
+ return $this->replayPrompt;
+ }
+
+ /**
+ * Set the return value marker.
+ */
+ public function setReturnValue(string $returnValue)
+ {
+ $this->returnValue = $returnValue;
+ }
+
+ /**
+ * Get the return value marker.
+ */
+ public function returnValue(): string
+ {
+ return $this->returnValue;
+ }
+
+ /**
+ * Set the fallback color when "gray" is unavailable.
+ */
+ public function setGrayFallback(string $grayFallback)
+ {
+ $this->grayFallback = $grayFallback;
+ }
+
+ /**
+ * Set the shell output formatter styles.
+ *
+ * Accepts a map from style name to [fg, bg, options], for example:
+ *
+ * [
+ * 'error' => ['white', 'red', ['bold']],
+ * 'warning' => ['black', 'yellow'],
+ * ]
+ *
+ * Foreground, background or options can be null, or even omitted entirely.
+ */
+ public function setStyles(array $styles)
+ {
+ foreach (\array_keys(static::DEFAULT_STYLES) as $name) {
+ $this->styles[$name] = $styles[$name] ?? static::DEFAULT_STYLES[$name];
+ }
+ }
+
+ /**
+ * Apply the current output formatter styles.
+ */
+ public function applyStyles(OutputFormatterInterface $formatter, bool $useGrayFallback)
+ {
+ foreach (\array_keys(static::DEFAULT_STYLES) as $name) {
+ $formatter->setStyle($name, new OutputFormatterStyle(...$this->getStyle($name, $useGrayFallback)));
+ }
+ }
+
+ /**
+ * Apply the current output formatter error styles.
+ */
+ public function applyErrorStyles(OutputFormatterInterface $errorFormatter, bool $useGrayFallback)
+ {
+ foreach (static::ERROR_STYLES as $name) {
+ $errorFormatter->setStyle($name, new OutputFormatterStyle(...$this->getStyle($name, $useGrayFallback)));
+ }
+ }
+
+ private function getStyle(string $name, bool $useGrayFallback): array
+ {
+ return \array_map(function ($style) use ($useGrayFallback) {
+ return ($useGrayFallback && $style === 'gray') ? $this->grayFallback : $style;
+ }, $this->styles[$name]);
+ }
+}
diff --git a/app/vendor/psy/psysh/src/ParserFactory.php b/app/vendor/psy/psysh/src/ParserFactory.php
index fb348dd9e..e7c15c5db 100644
--- a/app/vendor/psy/psysh/src/ParserFactory.php
+++ b/app/vendor/psy/psysh/src/ParserFactory.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -27,7 +27,7 @@ class ParserFactory
/**
* Possible kinds of parsers for the factory, from PHP parser library.
*
- * @return array
+ * @return string[]
*/
public static function getPossibleKinds(): array
{
@@ -48,8 +48,6 @@ public function getDefaultKind()
* New parser instance with given kind.
*
* @param string|null $kind One of class constants (only for PHP parser 2.0 and above)
- *
- * @return Parser
*/
public function createParser($kind = null): Parser
{
diff --git a/app/vendor/psy/psysh/src/Readline/GNUReadline.php b/app/vendor/psy/psysh/src/Readline/GNUReadline.php
index d4dba0cc9..877e1a309 100644
--- a/app/vendor/psy/psysh/src/Readline/GNUReadline.php
+++ b/app/vendor/psy/psysh/src/Readline/GNUReadline.php
@@ -3,7 +3,7 @@
/*
* This file is part of Psy Shell.
*
- * (c) 2012-2022 Justin Hileman
+ * (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -34,8 +34,6 @@ class GNUReadline implements Readline
*
* NOTE: As of PHP 7.4, PHP sometimes has history support in the Libedit
* wrapper, so that will use the GNUReadline implementation as well!
- *
- * @return bool
*/
public static function isSupported(): bool
{
@@ -46,21 +44,12 @@ public static function isSupported(): bool
* Check whether this readline implementation supports bracketed paste.
*
* Currently, the GNU readline implementation does, but the libedit wrapper does not.
- *
- * @return bool
*/
public static function supportsBracketedPaste(): bool
{
return self::isSupported() && \stripos(\readline_info('library_version') ?: '', 'editline') === false;
}
- /**
- * GNU Readline constructor.
- *
- * @param string|false $historyFile
- * @param int $historySize
- * @param bool $eraseDups
- */
public function __construct($historyFile = null, $historySize = 0, $eraseDups = false)
{
$this->historyFile = ($historyFile !== null) ? $historyFile : false;
diff --git a/app/vendor/psy/psysh/src/Readline/Hoa/Autocompleter.php b/app/vendor/psy/psysh/src/Readline/Hoa/Autocompleter.php
new file mode 100644
index 000000000..6955de622
--- /dev/null
+++ b/app/vendor/psy/psysh/src/Readline/Hoa/Autocompleter.php
@@ -0,0 +1,57 @@
+setAutocompleters($autocompleters);
+
+ return;
+ }
+
+ /**
+ * Complete a word.
+ * Returns null for no word, a full-word or an array of full-words.
+ */
+ public function complete(&$prefix)
+ {
+ foreach ($this->getAutocompleters() as $autocompleter) {
+ $preg = \preg_match(
+ '#('.$autocompleter->getWordDefinition().')$#u',
+ $prefix,
+ $match
+ );
+
+ if (0 === $preg) {
+ continue;
+ }
+
+ $_prefix = $match[0];
+
+ if (null === $out = $autocompleter->complete($_prefix)) {
+ continue;
+ }
+
+ $prefix = $_prefix;
+
+ return $out;
+ }
+
+ return null;
+ }
+
+ /**
+ * Set/initialize list of autocompleters.
+ */
+ protected function setAutocompleters(array $autocompleters)
+ {
+ $old = $this->_autocompleters;
+ $this->_autocompleters = new \ArrayObject($autocompleters);
+
+ return $old;
+ }
+
+ /**
+ * Get list of autocompleters.
+ */
+ public function getAutocompleters()
+ {
+ return $this->_autocompleters;
+ }
+
+ /**
+ * Get definition of a word.
+ */
+ public function getWordDefinition(): string
+ {
+ return '.*';
+ }
+}
diff --git a/app/vendor/psy/psysh/src/Readline/Hoa/AutocompleterPath.php b/app/vendor/psy/psysh/src/Readline/Hoa/AutocompleterPath.php
new file mode 100644
index 000000000..a922b7898
--- /dev/null
+++ b/app/vendor/psy/psysh/src/Readline/Hoa/AutocompleterPath.php
@@ -0,0 +1,194 @@
+setRoot($root);
+ }
+
+ if (null !== $iteratorFactory) {
+ $this->setIteratorFactory($iteratorFactory);
+ }
+ }
+
+ /**
+ * Complete a word.
+ * Returns null for no word, a full-word or an array of full-words.
+ */
+ public function complete(&$prefix)
+ {
+ $root = $this->getRoot();
+
+ if (static::PWD === $root) {
+ $root = \getcwd();
+ }
+
+ $path = $root.\DIRECTORY_SEPARATOR.$prefix;
+
+ if (!\is_dir($path)) {
+ $path = \dirname($path).\DIRECTORY_SEPARATOR;
+ $prefix = \basename($prefix);
+ } else {
+ $prefix = null;
+ }
+
+ $iteratorFactory = $this->getIteratorFactory() ?:
+ static::getDefaultIteratorFactory();
+
+ try {
+ $iterator = $iteratorFactory($path);
+ $out = [];
+ $length = \mb_strlen($prefix);
+
+ foreach ($iterator as $fileinfo) {
+ $filename = $fileinfo->getFilename();
+
+ if (null === $prefix ||
+ (\mb_substr($filename, 0, $length) === $prefix)) {
+ if ($fileinfo->isDir()) {
+ $out[] = $filename.'/';
+ } else {
+ $out[] = $filename;
+ }
+ }
+ }
+ } catch (\Exception $e) {
+ return null;
+ }
+
+ $count = \count($out);
+
+ if (1 === $count) {
+ return $out[0];
+ }
+
+ if (0 === $count) {
+ return null;
+ }
+
+ return $out;
+ }
+
+ /**
+ * Get definition of a word.
+ */
+ public function getWordDefinition(): string
+ {
+ return '/?[\w\d\\_\-\.]+(/[\w\d\\_\-\.]*)*';
+ }
+
+ /**
+ * Set root.
+ */
+ public function setRoot(string $root)
+ {
+ $old = $this->_root;
+ $this->_root = $root;
+
+ return $old;
+ }
+
+ /**
+ * Get root.
+ */
+ public function getRoot()
+ {
+ return $this->_root;
+ }
+
+ /**
+ * Set iterator factory (a finder).
+ */
+ public function setIteratorFactory(\Closure $iteratorFactory)
+ {
+ $old = $this->_iteratorFactory;
+ $this->_iteratorFactory = $iteratorFactory;
+
+ return $old;
+ }
+
+ /**
+ * Get iterator factory.
+ */
+ public function getIteratorFactory()
+ {
+ return $this->_iteratorFactory;
+ }
+
+ /**
+ * Get default iterator factory (based on \DirectoryIterator).
+ */
+ public static function getDefaultIteratorFactory()
+ {
+ return function ($path) {
+ return new \DirectoryIterator($path);
+ };
+ }
+}
diff --git a/app/vendor/psy/psysh/src/Readline/Hoa/AutocompleterWord.php b/app/vendor/psy/psysh/src/Readline/Hoa/AutocompleterWord.php
new file mode 100644
index 000000000..c60823eac
--- /dev/null
+++ b/app/vendor/psy/psysh/src/Readline/Hoa/AutocompleterWord.php
@@ -0,0 +1,119 @@
+setWords($words);
+ }
+
+ /**
+ * Complete a word.
+ * Returns null for no word, a full-word or an array of full-words.
+ *
+ * @param string &$prefix Prefix to autocomplete
+ *
+ * @return mixed
+ */
+ public function complete(&$prefix)
+ {
+ $out = [];
+ $length = \mb_strlen($prefix);
+
+ foreach ($this->getWords() as $word) {
+ if (\mb_substr($word, 0, $length) === $prefix) {
+ $out[] = $word;
+ }
+ }
+
+ if (empty($out)) {
+ return null;
+ }
+
+ if (1 === \count($out)) {
+ return $out[0];
+ }
+
+ return $out;
+ }
+
+ /**
+ * Get definition of a word.
+ */
+ public function getWordDefinition(): string
+ {
+ return '\b\w+';
+ }
+
+ /**
+ * Set list of words.
+ *
+ * @param array $words words
+ *
+ * @return array
+ */
+ public function setWords(array $words)
+ {
+ $old = $this->_words;
+ $this->_words = $words;
+
+ return $old;
+ }
+
+ /**
+ * Get list of words.
+ */
+ public function getWords(): array
+ {
+ return $this->_words;
+ }
+}
diff --git a/app/vendor/psy/psysh/src/Readline/Hoa/Console.php b/app/vendor/psy/psysh/src/Readline/Hoa/Console.php
new file mode 100644
index 000000000..17b1fecc6
--- /dev/null
+++ b/app/vendor/psy/psysh/src/Readline/Hoa/Console.php
@@ -0,0 +1,347 @@
+ $repeat) {
+ return;
+ } elseif (1 === $repeat) {
+ $handle = \explode(' ', $steps);
+ } else {
+ $handle = \explode(' ', $steps, 1);
+ }
+
+ $tput = Console::getTput();
+ $output = Console::getOutput();
+
+ foreach ($handle as $step) {
+ switch ($step) {
+ case 'u':
+ case 'up':
+ case '↑':
+ $output->writeAll(
+ \str_replace(
+ '%p1%d',
+ $repeat,
+ $tput->get('parm_up_cursor')
+ )
+ );
+
+ break;
+
+ case 'U':
+ case 'UP':
+ static::moveTo(null, 1);
+
+ break;
+
+ case 'r':
+ case 'right':
+ case '→':
+ $output->writeAll(
+ \str_replace(
+ '%p1%d',
+ $repeat,
+ $tput->get('parm_right_cursor')
+ )
+ );
+
+ break;
+
+ case 'R':
+ case 'RIGHT':
+ static::moveTo(9999);
+
+ break;
+
+ case 'd':
+ case 'down':
+ case '↓':
+ $output->writeAll(
+ \str_replace(
+ '%p1%d',
+ $repeat,
+ $tput->get('parm_down_cursor')
+ )
+ );
+
+ break;
+
+ case 'D':
+ case 'DOWN':
+ static::moveTo(null, 9999);
+
+ break;
+
+ case 'l':
+ case 'left':
+ case '←':
+ $output->writeAll(
+ \str_replace(
+ '%p1%d',
+ $repeat,
+ $tput->get('parm_left_cursor')
+ )
+ );
+
+ break;
+
+ case 'L':
+ case 'LEFT':
+ static::moveTo(1);
+
+ break;
+ }
+ }
+ }
+
+ /**
+ * Move to the line X and the column Y.
+ * If null, use the current coordinate.
+ */
+ public static function moveTo(int $x = null, int $y = null)
+ {
+ if (null === $x || null === $y) {
+ $position = static::getPosition();
+
+ if (null === $x) {
+ $x = $position['x'];
+ }
+
+ if (null === $y) {
+ $y = $position['y'];
+ }
+ }
+
+ Console::getOutput()->writeAll(
+ \str_replace(
+ ['%i%p1%d', '%p2%d'],
+ [$y, $x],
+ Console::getTput()->get('cursor_address')
+ )
+ );
+ }
+
+ /**
+ * Get current position (x and y) of the cursor.
+ */
+ public static function getPosition(): array
+ {
+ $tput = Console::getTput();
+ $user7 = $tput->get('user7');
+
+ if (null === $user7) {
+ return [
+ 'x' => 0,
+ 'y' => 0,
+ ];
+ }
+
+ Console::getOutput()->writeAll($user7);
+
+ $input = Console::getInput();
+
+ // Read $tput->get('user6').
+ $input->read(2); // skip \033 and [.
+
+ $x = null;
+ $y = null;
+ $handle = &$y;
+
+ while (true) {
+ $char = $input->readCharacter();
+
+ switch ($char) {
+ case ';':
+ $handle = &$x;
+
+ break;
+
+ case 'R':
+ break 2;
+
+ default:
+ $handle .= $char;
+ }
+ }
+
+ return [
+ 'x' => (int) $x,
+ 'y' => (int) $y,
+ ];
+ }
+
+ /**
+ * Save current position.
+ */
+ public static function save()
+ {
+ Console::getOutput()->writeAll(
+ Console::getTput()->get('save_cursor')
+ );
+ }
+
+ /**
+ * Restore cursor to the last saved position.
+ */
+ public static function restore()
+ {
+ Console::getOutput()->writeAll(
+ Console::getTput()->get('restore_cursor')
+ );
+ }
+
+ /**
+ * Clear the screen.
+ * Part can be:
+ * • a, all, ↕ : clear entire screen and static::move(1, 1);
+ * • u, up, ↑ : clear from cursor to beginning of the screen;
+ * • r, right, → : clear from cursor to the end of the line;
+ * • d, down, ↓ : clear from cursor to end of the screen;
+ * • l, left, ← : clear from cursor to beginning of the screen;
+ * • line, ↔ : clear all the line and static::move(1).
+ * Parts can be concatenated by a single space.
+ */
+ public static function clear(string $parts = 'all')
+ {
+ $tput = Console::getTput();
+ $output = Console::getOutput();
+
+ foreach (\explode(' ', $parts) as $part) {
+ switch ($part) {
+ case 'a':
+ case 'all':
+ case '↕':
+ $output->writeAll($tput->get('clear_screen'));
+ static::moveTo(1, 1);
+
+ break;
+
+ case 'u':
+ case 'up':
+ case '↑':
+ $output->writeAll("\033[1J");
+
+ break;
+
+ case 'r':
+ case 'right':
+ case '→':
+ $output->writeAll($tput->get('clr_eol'));
+
+ break;
+
+ case 'd':
+ case 'down':
+ case '↓':
+ $output->writeAll($tput->get('clr_eos'));
+
+ break;
+
+ case 'l':
+ case 'left':
+ case '←':
+ $output->writeAll($tput->get('clr_bol'));
+
+ break;
+
+ case 'line':
+ case '↔':
+ $output->writeAll("\r".$tput->get('clr_eol'));
+
+ break;
+ }
+ }
+ }
+
+ /**
+ * Hide the cursor.
+ */
+ public static function hide()
+ {
+ Console::getOutput()->writeAll(
+ Console::getTput()->get('cursor_invisible')
+ );
+ }
+
+ /**
+ * Show the cursor.
+ */
+ public static function show()
+ {
+ Console::getOutput()->writeAll(
+ Console::getTput()->get('cursor_visible')
+ );
+ }
+
+ /**
+ * Colorize cursor.
+ * Attributes can be:
+ * • n, normal : normal;
+ * • b, bold : bold;
+ * • u, underlined : underlined;
+ * • bl, blink : blink;
+ * • i, inverse : inverse;
+ * • !b, !bold : normal weight;
+ * • !u, !underlined : not underlined;
+ * • !bl, !blink : steady;
+ * • !i, !inverse : positive;
+ * • fg(color), foreground(color) : set foreground to “color”;
+ * • bg(color), background(color) : set background to “color”.
+ * “color” can be:
+ * • default;
+ * • black;
+ * • red;
+ * • green;
+ * • yellow;
+ * • blue;
+ * • magenta;
+ * • cyan;
+ * • white;
+ * • 0-256 (classic palette);
+ * • #hexa.
+ * Attributes can be concatenated by a single space.
+ */
+ public static function colorize(string $attributes)
+ {
+ static $_rgbTo256 = null;
+
+ if (null === $_rgbTo256) {
+ $_rgbTo256 = [
+ '000000', '800000', '008000', '808000', '000080', '800080',
+ '008080', 'c0c0c0', '808080', 'ff0000', '00ff00', 'ffff00',
+ '0000ff', 'ff00ff', '00ffff', 'ffffff', '000000', '00005f',
+ '000087', '0000af', '0000d7', '0000ff', '005f00', '005f5f',
+ '005f87', '005faf', '005fd7', '005fff', '008700', '00875f',
+ '008787', '0087af', '0087d7', '0087ff', '00af00', '00af5f',
+ '00af87', '00afaf', '00afd7', '00afff', '00d700', '00d75f',
+ '00d787', '00d7af', '00d7d7', '00d7ff', '00ff00', '00ff5f',
+ '00ff87', '00ffaf', '00ffd7', '00ffff', '5f0000', '5f005f',
+ '5f0087', '5f00af', '5f00d7', '5f00ff', '5f5f00', '5f5f5f',
+ '5f5f87', '5f5faf', '5f5fd7', '5f5fff', '5f8700', '5f875f',
+ '5f8787', '5f87af', '5f87d7', '5f87ff', '5faf00', '5faf5f',
+ '5faf87', '5fafaf', '5fafd7', '5fafff', '5fd700', '5fd75f',
+ '5fd787', '5fd7af', '5fd7d7', '5fd7ff', '5fff00', '5fff5f',
+ '5fff87', '5fffaf', '5fffd7', '5fffff', '870000', '87005f',
+ '870087', '8700af', '8700d7', '8700ff', '875f00', '875f5f',
+ '875f87', '875faf', '875fd7', '875fff', '878700', '87875f',
+ '878787', '8787af', '8787d7', '8787ff', '87af00', '87af5f',
+ '87af87', '87afaf', '87afd7', '87afff', '87d700', '87d75f',
+ '87d787', '87d7af', '87d7d7', '87d7ff', '87ff00', '87ff5f',
+ '87ff87', '87ffaf', '87ffd7', '87ffff', 'af0000', 'af005f',
+ 'af0087', 'af00af', 'af00d7', 'af00ff', 'af5f00', 'af5f5f',
+ 'af5f87', 'af5faf', 'af5fd7', 'af5fff', 'af8700', 'af875f',
+ 'af8787', 'af87af', 'af87d7', 'af87ff', 'afaf00', 'afaf5f',
+ 'afaf87', 'afafaf', 'afafd7', 'afafff', 'afd700', 'afd75f',
+ 'afd787', 'afd7af', 'afd7d7', 'afd7ff', 'afff00', 'afff5f',
+ 'afff87', 'afffaf', 'afffd7', 'afffff', 'd70000', 'd7005f',
+ 'd70087', 'd700af', 'd700d7', 'd700ff', 'd75f00', 'd75f5f',
+ 'd75f87', 'd75faf', 'd75fd7', 'd75fff', 'd78700', 'd7875f',
+ 'd78787', 'd787af', 'd787d7', 'd787ff', 'd7af00', 'd7af5f',
+ 'd7af87', 'd7afaf', 'd7afd7', 'd7afff', 'd7d700', 'd7d75f',
+ 'd7d787', 'd7d7af', 'd7d7d7', 'd7d7ff', 'd7ff00', 'd7ff5f',
+ 'd7ff87', 'd7ffaf', 'd7ffd7', 'd7ffff', 'ff0000', 'ff005f',
+ 'ff0087', 'ff00af', 'ff00d7', 'ff00ff', 'ff5f00', 'ff5f5f',
+ 'ff5f87', 'ff5faf', 'ff5fd7', 'ff5fff', 'ff8700', 'ff875f',
+ 'ff8787', 'ff87af', 'ff87d7', 'ff87ff', 'ffaf00', 'ffaf5f',
+ 'ffaf87', 'ffafaf', 'ffafd7', 'ffafff', 'ffd700', 'ffd75f',
+ 'ffd787', 'ffd7af', 'ffd7d7', 'ffd7ff', 'ffff00', 'ffff5f',
+ 'ffff87', 'ffffaf', 'ffffd7', 'ffffff', '080808', '121212',
+ '1c1c1c', '262626', '303030', '3a3a3a', '444444', '4e4e4e',
+ '585858', '606060', '666666', '767676', '808080', '8a8a8a',
+ '949494', '9e9e9e', 'a8a8a8', 'b2b2b2', 'bcbcbc', 'c6c6c6',
+ 'd0d0d0', 'dadada', 'e4e4e4', 'eeeeee',
+ ];
+ }
+
+ $tput = Console::getTput();
+
+ if (1 >= $tput->count('max_colors')) {
+ return;
+ }
+
+ $handle = [];
+
+ foreach (\explode(' ', $attributes) as $attribute) {
+ switch ($attribute) {
+ case 'n':
+ case 'normal':
+ $handle[] = 0;
+
+ break;
+
+ case 'b':
+ case 'bold':
+ $handle[] = 1;
+
+ break;
+
+ case 'u':
+ case 'underlined':
+ $handle[] = 4;
+
+ break;
+
+ case 'bl':
+ case 'blink':
+ $handle[] = 5;
+
+ break;
+
+ case 'i':
+ case 'inverse':
+ $handle[] = 7;
+
+ break;
+
+ case '!b':
+ case '!bold':
+ $handle[] = 22;
+
+ break;
+
+ case '!u':
+ case '!underlined':
+ $handle[] = 24;
+
+ break;
+
+ case '!bl':
+ case '!blink':
+ $handle[] = 25;
+
+ break;
+
+ case '!i':
+ case '!inverse':
+ $handle[] = 27;
+
+ break;
+
+ default:
+ if (0 === \preg_match('#^([^\(]+)\(([^\)]+)\)$#', $attribute, $m)) {
+ break;
+ }
+
+ $shift = 0;
+
+ switch ($m[1]) {
+ case 'fg':
+ case 'foreground':
+ $shift = 0;
+
+ break;
+
+ case 'bg':
+ case 'background':
+ $shift = 10;
+
+ break;
+
+ default:
+ break 2;
+ }
+
+ $_handle = 0;
+ $_keyword = true;
+
+ switch ($m[2]) {
+ case 'black':
+ $_handle = 30;
+
+ break;
+
+ case 'red':
+ $_handle = 31;
+
+ break;
+
+ case 'green':
+ $_handle = 32;
+
+ break;
+
+ case 'yellow':
+ $_handle = 33;
+
+ break;
+
+ case 'blue':
+ $_handle = 34;
+
+ break;
+
+ case 'magenta':
+ $_handle = 35;
+
+ break;
+
+ case 'cyan':
+ $_handle = 36;
+
+ break;
+
+ case 'white':
+ $_handle = 37;
+
+ break;
+
+ case 'default':
+ $_handle = 39;
+
+ break;
+
+ default:
+ $_keyword = false;
+
+ if (256 <= $tput->count('max_colors') &&
+ '#' === $m[2][0]) {
+ $rgb = \hexdec(\substr($m[2], 1));
+ $r = ($rgb >> 16) & 255;
+ $g = ($rgb >> 8) & 255;
+ $b = $rgb & 255;
+ $distance = null;
+
+ foreach ($_rgbTo256 as $i => $_rgb) {
+ $_rgb = \hexdec($_rgb);
+ $_r = ($_rgb >> 16) & 255;
+ $_g = ($_rgb >> 8) & 255;
+ $_b = $_rgb & 255;
+
+ $d = \sqrt(
+ ($_r - $r) ** 2
+ + ($_g - $g) ** 2
+ + ($_b - $b) ** 2
+ );
+
+ if (null === $distance ||
+ $d <= $distance) {
+ $distance = $d;
+ $_handle = $i;
+ }
+ }
+ } else {
+ $_handle = (int) ($m[2]);
+ }
+ }
+
+ if (true === $_keyword) {
+ $handle[] = $_handle + $shift;
+ } else {
+ $handle[] = (38 + $shift).';5;'.$_handle;
+ }
+ }
+ }
+
+ Console::getOutput()->writeAll("\033[".\implode(';', $handle).'m');
+
+ return;
+ }
+
+ /**
+ * Change color number to a specific RGB color.
+ */
+ public static function changeColor(int $fromCode, int $toColor)
+ {
+ $tput = Console::getTput();
+
+ if (true !== $tput->has('can_change')) {
+ return;
+ }
+
+ $r = ($toColor >> 16) & 255;
+ $g = ($toColor >> 8) & 255;
+ $b = $toColor & 255;
+
+ Console::getOutput()->writeAll(
+ \str_replace(
+ [
+ '%p1%d',
+ 'rgb:',
+ '%p2%{255}%*%{1000}%/%2.2X/',
+ '%p3%{255}%*%{1000}%/%2.2X/',
+ '%p4%{255}%*%{1000}%/%2.2X',
+ ],
+ [
+ $fromCode,
+ '',
+ \sprintf('%02x', $r),
+ \sprintf('%02x', $g),
+ \sprintf('%02x', $b),
+ ],
+ $tput->get('initialize_color')
+ )
+ );
+
+ return;
+ }
+
+ /**
+ * Set cursor style.
+ * Style can be:
+ * • b, block, ▋: block;
+ * • u, underline, _: underline;
+ * • v, vertical, |: vertical.
+ */
+ public static function setStyle(string $style, bool $blink = true)
+ {
+ if (\defined('PHP_WINDOWS_VERSION_PLATFORM')) {
+ return;
+ }
+
+ switch ($style) {
+ case 'u':
+ case 'underline':
+ case '_':
+ $_style = 2;
+
+ break;
+
+ case 'v':
+ case 'vertical':
+ case '|':
+ $_style = 5;
+
+ break;
+
+ case 'b':
+ case 'block':
+ case '▋':
+ default:
+ $_style = 1;
+
+ break;
+ }
+
+ if (false === $blink) {
+ ++$_style;
+ }
+
+ // Not sure what tput entry we can use here…
+ Console::getOutput()->writeAll("\033[".$_style.' q');
+
+ return;
+ }
+
+ /**
+ * Make a stupid “bip”.
+ */
+ public static function bip()
+ {
+ Console::getOutput()->writeAll(
+ Console::getTput()->get('bell')
+ );
+ }
+}
+
+/*
+ * Advanced interaction.
+ */
+Console::advancedInteraction();
diff --git a/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleException.php b/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleException.php
new file mode 100644
index 000000000..17e6f607b
--- /dev/null
+++ b/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleException.php
@@ -0,0 +1,46 @@
+_input = $input;
+
+ return;
+ }
+
+ /**
+ * Get underlying stream.
+ */
+ public function getStream(): StreamIn
+ {
+ return $this->_input;
+ }
+
+ /**
+ * Test for end-of-file.
+ */
+ public function eof(): bool
+ {
+ return $this->_input->eof();
+ }
+
+ /**
+ * Read n characters.
+ */
+ public function read(int $length)
+ {
+ return $this->_input->read($length);
+ }
+
+ /**
+ * Alias of $this->read().
+ */
+ public function readString(int $length)
+ {
+ return $this->_input->readString($length);
+ }
+
+ /**
+ * Read a character.
+ */
+ public function readCharacter()
+ {
+ return $this->_input->readCharacter();
+ }
+
+ /**
+ * Read a boolean.
+ */
+ public function readBoolean()
+ {
+ return $this->_input->readBoolean();
+ }
+
+ /**
+ * Read an integer.
+ */
+ public function readInteger(int $length = 1)
+ {
+ return $this->_input->readInteger($length);
+ }
+
+ /**
+ * Read a float.
+ */
+ public function readFloat(int $length = 1)
+ {
+ return $this->_input->readFloat($length);
+ }
+
+ /**
+ * Read an array.
+ * Alias of the $this->scanf() method.
+ */
+ public function readArray($argument = null)
+ {
+ return $this->_input->readArray($argument);
+ }
+
+ /**
+ * Read a line.
+ */
+ public function readLine()
+ {
+ return $this->_input->readLine();
+ }
+
+ /**
+ * Read all, i.e. read as much as possible.
+ */
+ public function readAll(int $offset = 0)
+ {
+ return $this->_input->readAll($offset);
+ }
+
+ /**
+ * Parse input from a stream according to a format.
+ */
+ public function scanf(string $format): array
+ {
+ return $this->_input->scanf($format);
+ }
+}
diff --git a/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleOutput.php b/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleOutput.php
new file mode 100644
index 000000000..fbba894c9
--- /dev/null
+++ b/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleOutput.php
@@ -0,0 +1,208 @@
+_output = $output;
+
+ return;
+ }
+
+ /**
+ * Get the real output stream.
+ */
+ public function getStream(): StreamOut
+ {
+ return $this->_output;
+ }
+
+ /**
+ * Write n characters.
+ */
+ public function write(string $string, int $length)
+ {
+ if (0 > $length) {
+ throw new ConsoleException('Length must be greater than 0, given %d.', 0, $length);
+ }
+
+ $out = \substr($string, 0, $length);
+
+ if (true === $this->isMultiplexerConsidered()) {
+ if (true === Console::isTmuxRunning()) {
+ $out =
+ "\033Ptmux;".
+ \str_replace("\033", "\033\033", $out).
+ "\033\\";
+ }
+
+ $length = \strlen($out);
+ }
+
+ if (null === $this->_output) {
+ echo $out;
+ } else {
+ $this->_output->write($out, $length);
+ }
+ }
+
+ /**
+ * Write a string.
+ */
+ public function writeString(string $string)
+ {
+ $string = (string) $string;
+
+ return $this->write($string, \strlen($string));
+ }
+
+ /**
+ * Write a character.
+ */
+ public function writeCharacter(string $character)
+ {
+ return $this->write((string) $character[0], 1);
+ }
+
+ /**
+ * Write a boolean.
+ */
+ public function writeBoolean(bool $boolean)
+ {
+ return $this->write(((bool) $boolean) ? '1' : '0', 1);
+ }
+
+ /**
+ * Write an integer.
+ */
+ public function writeInteger(int $integer)
+ {
+ $integer = (string) (int) $integer;
+
+ return $this->write($integer, \strlen($integer));
+ }
+
+ /**
+ * Write a float.
+ */
+ public function writeFloat(float $float)
+ {
+ $float = (string) (float) $float;
+
+ return $this->write($float, \strlen($float));
+ }
+
+ /**
+ * Write an array.
+ */
+ public function writeArray(array $array)
+ {
+ $array = \var_export($array, true);
+
+ return $this->write($array, \strlen($array));
+ }
+
+ /**
+ * Write a line.
+ */
+ public function writeLine(string $line)
+ {
+ if (false === $n = \strpos($line, "\n")) {
+ return $this->write($line."\n", \strlen($line) + 1);
+ }
+
+ ++$n;
+
+ return $this->write(\substr($line, 0, $n), $n);
+ }
+
+ /**
+ * Write all, i.e. as much as possible.
+ */
+ public function writeAll(string $string)
+ {
+ return $this->write($string ?? '', \strlen($string ?? ''));
+ }
+
+ /**
+ * Truncate a stream to a given length.
+ */
+ public function truncate(int $size): bool
+ {
+ return false;
+ }
+
+ /**
+ * Consider the multiplexer (if running) while writing on the output.
+ */
+ public function considerMultiplexer(bool $consider): bool
+ {
+ $old = $this->_considerMultiplexer;
+ $this->_considerMultiplexer = $consider;
+
+ return $old;
+ }
+
+ /**
+ * Check whether the multiplexer must be considered or not.
+ */
+ public function isMultiplexerConsidered(): bool
+ {
+ return $this->_considerMultiplexer;
+ }
+}
diff --git a/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleProcessus.php b/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleProcessus.php
new file mode 100644
index 000000000..69bf1ddb1
--- /dev/null
+++ b/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleProcessus.php
@@ -0,0 +1,892 @@
+ value, or input).
+ */
+ protected $_options = [];
+
+ /**
+ * Current working directory.
+ */
+ protected $_cwd = null;
+
+ /**
+ * Environment.
+ */
+ protected $_environment = null;
+
+ /**
+ * Timeout.
+ */
+ protected $_timeout = 30;
+
+ /**
+ * Descriptor.
+ */
+ protected $_descriptors = [
+ 0 => ['pipe', 'r'],
+ 1 => ['pipe', 'w'],
+ 2 => ['pipe', 'w'],
+ ];
+
+ /**
+ * Pipe descriptors of the processus.
+ */
+ protected $_pipes = null;
+
+ /**
+ * Seekability of pipes.
+ */
+ protected $_seekable = [];
+
+ /**
+ * Start a processus.
+ */
+ public function __construct(
+ string $command,
+ array $options = null,
+ array $descriptors = null,
+ string $cwd = null,
+ array $environment = null,
+ int $timeout = 30
+ ) {
+ $this->setCommand($command);
+
+ if (null !== $options) {
+ $this->setOptions($options);
+ }
+
+ if (null !== $descriptors) {
+ $this->_descriptors = [];
+
+ foreach ($descriptors as $descriptor => $nature) {
+ if (isset($this->_descriptors[$descriptor])) {
+ throw new ConsoleException('Pipe descriptor %d already exists, cannot '.'redefine it.', 0, $descriptor);
+ }
+
+ $this->_descriptors[$descriptor] = $nature;
+ }
+ }
+
+ $this->setCwd($cwd ?: \getcwd());
+
+ if (null !== $environment) {
+ $this->setEnvironment($environment);
+ }
+
+ $this->setTimeout($timeout);
+ parent::__construct($this->getCommandLine(), null, true);
+ $this->getListener()->addIds(['input', 'output', 'timeout', 'start', 'stop']);
+
+ return;
+ }
+
+ /**
+ * Open the stream and return the associated resource.
+ */
+ protected function &_open(string $streamName, StreamContext $context = null)
+ {
+ $out = @\proc_open(
+ $streamName,
+ $this->_descriptors,
+ $this->_pipes,
+ $this->getCwd(),
+ $this->getEnvironment()
+ );
+
+ if (false === $out) {
+ throw new ConsoleException('Something wrong happen when running %s.', 1, $streamName);
+ }
+
+ return $out;
+ }
+
+ /**
+ * Close the current stream.
+ */
+ protected function _close(): bool
+ {
+ foreach ($this->_pipes as $pipe) {
+ @\fclose($pipe);
+ }
+
+ return (bool) @\proc_close($this->getStream());
+ }
+
+ /**
+ * Run the process and fire events (amongst start, stop, input, output and
+ * timeout).
+ * If an event returns false, it will close the current pipe.
+ * For a simple run without firing events, use the $this->open() method.
+ */
+ public function run()
+ {
+ if (false === $this->isOpened()) {
+ $this->open();
+ } else {
+ $this->_close();
+ $this->_setStream($this->_open(
+ $this->getStreamName(),
+ $this->getStreamContext()
+ ));
+ }
+
+ $this->getListener()->fire('start', new EventBucket());
+
+ $_read = [];
+ $_write = [];
+ $_except = [];
+
+ foreach ($this->_pipes as $p => $pipe) {
+ switch ($this->_descriptors[$p][1]) {
+ case 'r':
+ \stream_set_blocking($pipe, false);
+ $_write[] = $pipe;
+
+ break;
+
+ case 'w':
+ case 'a':
+ \stream_set_blocking($pipe, true);
+ $_read[] = $pipe;
+
+ break;
+ }
+ }
+
+ while (true) {
+ foreach ($_read as $i => $r) {
+ if (false === \is_resource($r)) {
+ unset($_read[$i]);
+ }
+ }
+
+ foreach ($_write as $i => $w) {
+ if (false === \is_resource($w)) {
+ unset($_write[$i]);
+ }
+ }
+
+ foreach ($_except as $i => $e) {
+ if (false === \is_resource($e)) {
+ unset($_except[$i]);
+ }
+ }
+
+ if (empty($_read) && empty($_write) && empty($_except)) {
+ break;
+ }
+
+ $read = $_read;
+ $write = $_write;
+ $except = $_except;
+ $select = \stream_select($read, $write, $except, $this->getTimeout());
+
+ if (0 === $select) {
+ $this->getListener()->fire('timeout', new EventBucket());
+
+ break;
+ }
+
+ foreach ($read as $i => $_r) {
+ $pipe = \array_search($_r, $this->_pipes);
+ $line = $this->readLine($pipe);
+
+ if (false === $line) {
+ $result = [false];
+ } else {
+ $result = $this->getListener()->fire(
+ 'output',
+ new EventBucket([
+ 'pipe' => $pipe,
+ 'line' => $line,
+ ])
+ );
+ }
+
+ if (true === \feof($_r) || \in_array(false, $result, true)) {
+ \fclose($_r);
+ unset($_read[$i]);
+
+ break;
+ }
+ }
+
+ foreach ($write as $j => $_w) {
+ $result = $this->getListener()->fire(
+ 'input',
+ new EventBucket([
+ 'pipe' => \array_search($_w, $this->_pipes),
+ ])
+ );
+
+ if (true === \feof($_w) || \in_array(false, $result, true)) {
+ \fclose($_w);
+ unset($_write[$j]);
+ }
+ }
+
+ if (empty($_read)) {
+ break;
+ }
+ }
+
+ $this->getListener()->fire('stop', new EventBucket());
+
+ return;
+ }
+
+ /**
+ * Get pipe resource.
+ */
+ protected function getPipe(int $pipe)
+ {
+ if (!isset($this->_pipes[$pipe])) {
+ throw new ConsoleException('Pipe descriptor %d does not exist, cannot read from it.', 2, $pipe);
+ }
+
+ return $this->_pipes[$pipe];
+ }
+
+ /**
+ * Check if a pipe is seekable or not.
+ */
+ protected function isPipeSeekable(int $pipe): bool
+ {
+ if (!isset($this->_seekable[$pipe])) {
+ $_pipe = $this->getPipe($pipe);
+ $data = \stream_get_meta_data($_pipe);
+ $this->_seekable[$pipe] = $data['seekable'];
+ }
+
+ return $this->_seekable[$pipe];
+ }
+
+ /**
+ * Test for end-of-file.
+ */
+ public function eof(int $pipe = 1): bool
+ {
+ return \feof($this->getPipe($pipe));
+ }
+
+ /**
+ * Read n characters.
+ */
+ public function read(int $length, int $pipe = 1)
+ {
+ if (0 > $length) {
+ throw new ConsoleException('Length must be greater than 0, given %d.', 3, $length);
+ }
+
+ return \fread($this->getPipe($pipe), $length);
+ }
+
+ /**
+ * Alias of $this->read().
+ */
+ public function readString(int $length, int $pipe = 1)
+ {
+ return $this->read($length, $pipe);
+ }
+
+ /**
+ * Read a character.
+ */
+ public function readCharacter(int $pipe = 1)
+ {
+ return \fgetc($this->getPipe($pipe));
+ }
+
+ /**
+ * Read a boolean.
+ */
+ public function readBoolean(int $pipe = 1)
+ {
+ return (bool) $this->read(1, $pipe);
+ }
+
+ /**
+ * Read an integer.
+ */
+ public function readInteger(int $length = 1, int $pipe = 1)
+ {
+ return (int) $this->read($length, $pipe);
+ }
+
+ /**
+ * Read a float.
+ */
+ public function readFloat(int $length = 1, int $pipe = 1)
+ {
+ return (float) $this->read($length, $pipe);
+ }
+
+ /**
+ * Read an array.
+ * Alias of the $this->scanf() method.
+ */
+ public function readArray(string $format = null, int $pipe = 1)
+ {
+ return $this->scanf($format, $pipe);
+ }
+
+ /**
+ * Read a line.
+ */
+ public function readLine(int $pipe = 1)
+ {
+ return \stream_get_line($this->getPipe($pipe), 1 << 15, "\n");
+ }
+
+ /**
+ * Read all, i.e. read as much as possible.
+ */
+ public function readAll(int $offset = -1, int $pipe = 1)
+ {
+ $_pipe = $this->getPipe($pipe);
+
+ if (true === $this->isPipeSeekable($pipe)) {
+ $offset += \ftell($_pipe);
+ } else {
+ $offset = -1;
+ }
+
+ return \stream_get_contents($_pipe, -1, $offset);
+ }
+
+ /**
+ * Parse input from a stream according to a format.
+ */
+ public function scanf(string $format, int $pipe = 1): array
+ {
+ return \fscanf($this->getPipe($pipe), $format);
+ }
+
+ /**
+ * Write n characters.
+ */
+ public function write(string $string, int $length, int $pipe = 0)
+ {
+ if (0 > $length) {
+ throw new ConsoleException('Length must be greater than 0, given %d.', 4, $length);
+ }
+
+ return \fwrite($this->getPipe($pipe), $string, $length);
+ }
+
+ /**
+ * Write a string.
+ */
+ public function writeString(string $string, int $pipe = 0)
+ {
+ $string = (string) $string;
+
+ return $this->write($string, \strlen($string), $pipe);
+ }
+
+ /**
+ * Write a character.
+ */
+ public function writeCharacter(string $char, int $pipe = 0)
+ {
+ return $this->write((string) $char[0], 1, $pipe);
+ }
+
+ /**
+ * Write a boolean.
+ */
+ public function writeBoolean(bool $boolean, int $pipe = 0)
+ {
+ return $this->write((string) (bool) $boolean, 1, $pipe);
+ }
+
+ /**
+ * Write an integer.
+ */
+ public function writeInteger(int $integer, int $pipe = 0)
+ {
+ $integer = (string) (int) $integer;
+
+ return $this->write($integer, \strlen($integer), $pipe);
+ }
+
+ /**
+ * Write a float.
+ */
+ public function writeFloat(float $float, int $pipe = 0)
+ {
+ $float = (string) (float) $float;
+
+ return $this->write($float, \strlen($float), $pipe);
+ }
+
+ /**
+ * Write an array.
+ */
+ public function writeArray(array $array, int $pipe = 0)
+ {
+ $array = \var_export($array, true);
+
+ return $this->write($array, \strlen($array), $pipe);
+ }
+
+ /**
+ * Write a line.
+ */
+ public function writeLine(string $line, int $pipe = 0)
+ {
+ if (false === $n = \strpos($line, "\n")) {
+ return $this->write($line."\n", \strlen($line) + 1, $pipe);
+ }
+
+ ++$n;
+
+ return $this->write(\substr($line, 0, $n), $n, $pipe);
+ }
+
+ /**
+ * Write all, i.e. as much as possible.
+ */
+ public function writeAll(string $string, int $pipe = 0)
+ {
+ return $this->write($string, \strlen($string), $pipe);
+ }
+
+ /**
+ * Truncate a file to a given length.
+ */
+ public function truncate(int $size, int $pipe = 0): bool
+ {
+ return \ftruncate($this->getPipe($pipe), $size);
+ }
+
+ /**
+ * Get filename component of path.
+ */
+ public function getBasename(): string
+ {
+ return \basename($this->getCommand());
+ }
+
+ /**
+ * Get directory name component of path.
+ */
+ public function getDirname(): string
+ {
+ return \dirname($this->getCommand());
+ }
+
+ /**
+ * Get status.
+ */
+ public function getStatus(): array
+ {
+ return \proc_get_status($this->getStream());
+ }
+
+ /**
+ * Get exit code (alias of $this->getStatus()['exitcode']);.
+ */
+ public function getExitCode(): int
+ {
+ $handle = $this->getStatus();
+
+ return $handle['exitcode'];
+ }
+
+ /**
+ * Whether the processus have ended successfully.
+ *
+ * @return bool
+ */
+ public function isSuccessful(): bool
+ {
+ return 0 === $this->getExitCode();
+ }
+
+ /**
+ * Terminate the process.
+ *
+ * Valid signals are self::SIGHUP, SIGINT, SIGQUIT, SIGABRT, SIGKILL,
+ * SIGALRM and SIGTERM.
+ */
+ public function terminate(int $signal = self::SIGTERM): bool
+ {
+ return \proc_terminate($this->getStream(), $signal);
+ }
+
+ /**
+ * Set command name.
+ */
+ protected function setCommand(string $command)
+ {
+ $old = $this->_command;
+ $this->_command = \escapeshellcmd($command);
+
+ return $old;
+ }
+
+ /**
+ * Get command name.
+ */
+ public function getCommand()
+ {
+ return $this->_command;
+ }
+
+ /**
+ * Set command options.
+ */
+ protected function setOptions(array $options): array
+ {
+ foreach ($options as &$option) {
+ $option = \escapeshellarg($option);
+ }
+
+ $old = $this->_options;
+ $this->_options = $options;
+
+ return $old;
+ }
+
+ /**
+ * Get options.
+ */
+ public function getOptions(): array
+ {
+ return $this->_options;
+ }
+
+ /**
+ * Get command-line.
+ */
+ public function getCommandLine(): string
+ {
+ $out = $this->getCommand();
+
+ foreach ($this->getOptions() as $key => $value) {
+ if (!\is_int($key)) {
+ $out .= ' '.$key.'='.$value;
+ } else {
+ $out .= ' '.$value;
+ }
+ }
+
+ return $out;
+ }
+
+ /**
+ * Set current working directory of the process.
+ */
+ protected function setCwd(string $cwd)
+ {
+ $old = $this->_cwd;
+ $this->_cwd = $cwd;
+
+ return $old;
+ }
+
+ /**
+ * Get current working directory of the process.
+ */
+ public function getCwd(): string
+ {
+ return $this->_cwd;
+ }
+
+ /**
+ * Set environment of the process.
+ */
+ protected function setEnvironment(array $environment)
+ {
+ $old = $this->_environment;
+ $this->_environment = $environment;
+
+ return $old;
+ }
+
+ /**
+ * Get environment of the process.
+ */
+ public function getEnvironment()
+ {
+ return $this->_environment;
+ }
+
+ /**
+ * Set timeout of the process.
+ */
+ public function setTimeout(int $timeout)
+ {
+ $old = $this->_timeout;
+ $this->_timeout = $timeout;
+
+ return $old;
+ }
+
+ /**
+ * Get timeout of the process.
+ */
+ public function getTimeout(): int
+ {
+ return $this->_timeout;
+ }
+
+ /**
+ * Set process title.
+ */
+ public static function setTitle(string $title)
+ {
+ \cli_set_process_title($title);
+ }
+
+ /**
+ * Get process title.
+ */
+ public static function getTitle()
+ {
+ return \cli_get_process_title();
+ }
+
+ /**
+ * Found the place of a binary.
+ */
+ public static function locate(string $binary)
+ {
+ if (isset($_ENV['PATH'])) {
+ $separator = ':';
+ $path = &$_ENV['PATH'];
+ } elseif (isset($_SERVER['PATH'])) {
+ $separator = ':';
+ $path = &$_SERVER['PATH'];
+ } elseif (isset($_SERVER['Path'])) {
+ $separator = ';';
+ $path = &$_SERVER['Path'];
+ } else {
+ return null;
+ }
+
+ foreach (\explode($separator, $path) as $directory) {
+ if (true === \file_exists($out = $directory.\DIRECTORY_SEPARATOR.$binary)) {
+ return $out;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Quick process execution.
+ * Returns only the STDOUT.
+ */
+ public static function execute(string $commandLine, bool $escape = true): string
+ {
+ if (true === $escape) {
+ $commandLine = \escapeshellcmd($commandLine);
+ }
+
+ return \rtrim(\shell_exec($commandLine) ?? '');
+ }
+}
diff --git a/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleTput.php b/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleTput.php
new file mode 100644
index 000000000..ba627e379
--- /dev/null
+++ b/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleTput.php
@@ -0,0 +1,841 @@
+parse($terminfo);
+
+ return;
+ }
+
+ /**
+ * Parse.
+ */
+ protected function parse(string $terminfo): array
+ {
+ if (!\file_exists($terminfo)) {
+ throw new ConsoleException('Terminfo file %s does not exist.', 0, $terminfo);
+ }
+
+ $data = \file_get_contents($terminfo);
+ $length = \strlen($data);
+ $out = ['file' => $terminfo];
+
+ $headers = [
+ 'data_size' => $length,
+ 'header_size' => 12,
+ 'magic_number' => (\ord($data[1]) << 8) | \ord($data[0]),
+ 'names_size' => (\ord($data[3]) << 8) | \ord($data[2]),
+ 'bool_count' => (\ord($data[5]) << 8) | \ord($data[4]),
+ 'number_count' => (\ord($data[7]) << 8) | \ord($data[6]),
+ 'string_count' => (\ord($data[9]) << 8) | \ord($data[8]),
+ 'string_table_size' => (\ord($data[11]) << 8) | \ord($data[10]),
+ ];
+ $out['headers'] = $headers;
+
+ // Names.
+ $i = $headers['header_size'];
+ $nameAndDescription = \explode('|', \substr($data, $i, $headers['names_size'] - 1));
+ $out['name'] = $nameAndDescription[0];
+ $out['description'] = $nameAndDescription[1];
+
+ // Booleans.
+ $i += $headers['names_size'];
+ $booleans = [];
+ $booleanNames = &static::$_booleans;
+
+ for (
+ $e = 0, $max = $i + $headers['bool_count'];
+ $i < $max;
+ ++$e, ++$i
+ ) {
+ $booleans[$booleanNames[$e]] = 1 === \ord($data[$i]);
+ }
+
+ $out['booleans'] = $booleans;
+
+ // Numbers.
+ if (1 === ($i % 2)) {
+ ++$i;
+ }
+
+ $numbers = [];
+ $numberNames = &static::$_numbers;
+
+ for (
+ $e = 0, $max = $i + $headers['number_count'] * 2;
+ $i < $max;
+ ++$e, $i += 2
+ ) {
+ $name = $numberNames[$e];
+ $data_i0 = \ord($data[$i]);
+ $data_i1 = \ord($data[$i + 1]);
+
+ if ($data_i1 === 255 && $data_i0 === 255) {
+ $numbers[$name] = -1;
+ } else {
+ $numbers[$name] = ($data_i1 << 8) | $data_i0;
+ }
+ }
+
+ $out['numbers'] = $numbers;
+
+ // Strings.
+ $strings = [];
+ $stringNames = &static::$_strings;
+ $ii = $i + $headers['string_count'] * 2;
+
+ for (
+ $e = 0, $max = $ii;
+ $i < $max;
+ ++$e, $i += 2
+ ) {
+ $name = $stringNames[$e];
+ $data_i0 = \ord($data[$i]);
+ $data_i1 = \ord($data[$i + 1]);
+
+ if ($data_i1 === 255 && $data_i0 === 255) {
+ continue;
+ }
+
+ $a = ($data_i1 << 8) | $data_i0;
+ $strings[$name] = $a;
+
+ if (65534 === $a) {
+ continue;
+ }
+
+ $b = $ii + $a;
+ $c = $b;
+
+ while ($c < $length && \ord($data[$c])) {
+ $c++;
+ }
+
+ $value = \substr($data, $b, $c - $b);
+ $strings[$name] = false !== $value ? $value : null;
+ }
+
+ $out['strings'] = $strings;
+
+ return $this->_informations = $out;
+ }
+
+ /**
+ * Get all informations.
+ */
+ public function getInformations(): array
+ {
+ return $this->_informations;
+ }
+
+ /**
+ * Get a boolean value.
+ */
+ public function has(string $boolean): bool
+ {
+ if (!isset($this->_informations['booleans'][$boolean])) {
+ return false;
+ }
+
+ return $this->_informations['booleans'][$boolean];
+ }
+
+ /**
+ * Get a number value.
+ */
+ public function count(string $number): int
+ {
+ if (!isset($this->_informations['numbers'][$number])) {
+ return 0;
+ }
+
+ return $this->_informations['numbers'][$number];
+ }
+
+ /**
+ * Get a string value.
+ */
+ public function get(string $string)
+ {
+ if (!isset($this->_informations['strings'][$string])) {
+ return null;
+ }
+
+ return $this->_informations['strings'][$string];
+ }
+
+ /**
+ * Get current term profile.
+ */
+ public static function getTerm(): string
+ {
+ return
+ isset($_SERVER['TERM']) && !empty($_SERVER['TERM'])
+ ? $_SERVER['TERM']
+ : (\defined('PHP_WINDOWS_VERSION_PLATFORM') ? 'windows-ansi' : 'xterm');
+ }
+
+ /**
+ * Get pathname to the current terminfo.
+ */
+ public static function getTerminfo($term = null): string
+ {
+ $paths = [];
+
+ if (isset($_SERVER['TERMINFO'])) {
+ $paths[] = $_SERVER['TERMINFO'];
+ }
+
+ if (isset($_SERVER['HOME'])) {
+ $paths[] = $_SERVER['HOME'].\DIRECTORY_SEPARATOR.'.terminfo';
+ }
+
+ if (isset($_SERVER['TERMINFO_DIRS'])) {
+ foreach (\explode(':', $_SERVER['TERMINFO_DIRS']) as $path) {
+ $paths[] = $path;
+ }
+ }
+
+ $paths[] = '/usr/share/terminfo';
+ $paths[] = '/usr/share/lib/terminfo';
+ $paths[] = '/lib/terminfo';
+ $paths[] = '/usr/lib/terminfo';
+ $paths[] = '/usr/local/share/terminfo';
+ $paths[] = '/usr/local/share/lib/terminfo';
+ $paths[] = '/usr/local/lib/terminfo';
+ $paths[] = '/usr/local/ncurses/lib/terminfo';
+ $paths[] = 'hoa://Library/Terminfo';
+
+ $term = $term ?: static::getTerm();
+ $fileHexa = \dechex(\ord($term[0])).\DIRECTORY_SEPARATOR.$term;
+ $fileAlpha = $term[0].\DIRECTORY_SEPARATOR.$term;
+ $pathname = null;
+
+ foreach ($paths as $path) {
+ if (\file_exists($_ = $path.\DIRECTORY_SEPARATOR.$fileHexa) ||
+ \file_exists($_ = $path.\DIRECTORY_SEPARATOR.$fileAlpha)) {
+ $pathname = $_;
+
+ break;
+ }
+ }
+
+ if (null === $pathname && 'xterm' !== $term) {
+ return static::getTerminfo('xterm');
+ }
+
+ return $pathname ?? '';
+ }
+
+ /**
+ * Check whether all required terminfo capabilities are defined.
+ */
+ public static function isSupported(): bool
+ {
+ if (static::getTerminfo() === '') {
+ return false;
+ }
+
+ $requiredVars = [
+ 'clear_screen',
+ 'clr_bol',
+ 'clr_eol',
+ 'clr_eos',
+ 'initialize_color',
+ 'parm_down_cursor',
+ 'parm_index',
+ 'parm_left_cursor',
+ 'parm_right_cursor',
+ 'parm_rindex',
+ 'parm_up_cursor',
+ 'user6',
+ 'user7',
+ ];
+
+ $tput = new self();
+
+ foreach ($requiredVars as $var) {
+ if ($tput->get($var) === null) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleWindow.php b/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleWindow.php
new file mode 100644
index 000000000..fe77e05de
--- /dev/null
+++ b/app/vendor/psy/psysh/src/Readline/Hoa/ConsoleWindow.php
@@ -0,0 +1,529 @@
+writeAll("\033[8;".$y.';'.$x.'t');
+
+ return;
+ }
+
+ /**
+ * Get current size (x and y) of the window.
+ */
+ public static function getSize(): array
+ {
+ if (\defined('PHP_WINDOWS_VERSION_PLATFORM')) {
+ $modecon = \explode("\n", \ltrim(ConsoleProcessus::execute('mode con')));
+
+ $_y = \trim($modecon[2]);
+ \preg_match('#[^:]+:\s*([0-9]+)#', $_y, $matches);
+ $y = (int) $matches[1];
+
+ $_x = \trim($modecon[3]);
+ \preg_match('#[^:]+:\s*([0-9]+)#', $_x, $matches);
+ $x = (int) $matches[1];
+
+ return [
+ 'x' => $x,
+ 'y' => $y,
+ ];
+ }
+
+ $term = '';
+
+ if (isset($_SERVER['TERM'])) {
+ $term = 'TERM="'.$_SERVER['TERM'].'" ';
+ }
+
+ $command = $term.'tput cols && '.$term.'tput lines';
+ $tput = ConsoleProcessus::execute($command, false);
+
+ if (!empty($tput)) {
+ list($x, $y) = \explode("\n", $tput);
+
+ return [
+ 'x' => (int) $x,
+ 'y' => (int) $y,
+ ];
+ }
+
+ // DECSLPP.
+ Console::getOutput()->writeAll("\033[18t");
+
+ $input = Console::getInput();
+
+ // Read \033[8;y;xt.
+ $input->read(4); // skip \033, [, 8 and ;.
+
+ $x = null;
+ $y = null;
+ $handle = &$y;
+
+ while (true) {
+ $char = $input->readCharacter();
+
+ switch ($char) {
+ case ';':
+ $handle = &$x;
+
+ break;
+
+ case 't':
+ break 2;
+
+ default:
+ if (false === \ctype_digit($char)) {
+ break 2;
+ }
+
+ $handle .= $char;
+ }
+ }
+
+ if (null === $x || null === $y) {
+ return [
+ 'x' => 0,
+ 'y' => 0,
+ ];
+ }
+
+ return [
+ 'x' => (int) $x,
+ 'y' => (int) $y,
+ ];
+ }
+
+ /**
+ * Move to X and Y (in pixels).
+ */
+ public static function moveTo(int $x, int $y)
+ {
+ if (\defined('PHP_WINDOWS_VERSION_PLATFORM')) {
+ return;
+ }
+
+ // DECSLPP.
+ Console::getOutput()->writeAll("\033[3;".$x.';'.$y.'t');
+
+ return;
+ }
+
+ /**
+ * Get current position (x and y) of the window (in pixels).
+ */
+ public static function getPosition(): array
+ {
+ if (\defined('PHP_WINDOWS_VERSION_PLATFORM')) {
+ return ['x' => 0, 'y' => 0];
+ }
+
+ // DECSLPP.
+ Console::getOutput()->writeAll("\033[13t");
+
+ $input = Console::getInput();
+
+ // Read \033[3;x;yt.
+ $input->read(4); // skip \033, [, 3 and ;.
+
+ $x = null;
+ $y = null;
+ $handle = &$x;
+
+ while (true) {
+ $char = $input->readCharacter();
+
+ switch ($char) {
+ case ';':
+ $handle = &$y;
+
+ break;
+
+ case 't':
+ break 2;
+
+ default:
+ $handle .= $char;
+ }
+ }
+
+ return [
+ 'x' => (int) $x,
+ 'y' => (int) $y,
+ ];
+ }
+
+ /**
+ * Scroll whole page.
+ * Directions can be:
+ * • u, up, ↑ : scroll whole page up;
+ * • d, down, ↓ : scroll whole page down.
+ * Directions can be concatenated by a single space.
+ */
+ public static function scroll(string $directions, int $repeat = 1)
+ {
+ if (\defined('PHP_WINDOWS_VERSION_PLATFORM')) {
+ return;
+ }
+
+ if (1 > $repeat) {
+ return;
+ } elseif (1 === $repeat) {
+ $handle = \explode(' ', $directions);
+ } else {
+ $handle = \explode(' ', $directions, 1);
+ }
+
+ $tput = Console::getTput();
+ $count = ['up' => 0, 'down' => 0];
+
+ foreach ($handle as $direction) {
+ switch ($direction) {
+ case 'u':
+ case 'up':
+ case '↑':
+ ++$count['up'];
+
+ break;
+
+ case 'd':
+ case 'down':
+ case '↓':
+ ++$count['down'];
+
+ break;
+ }
+ }
+
+ $output = Console::getOutput();
+
+ if (0 < $count['up']) {
+ $output->writeAll(
+ \str_replace(
+ '%p1%d',
+ $count['up'] * $repeat,
+ $tput->get('parm_index')
+ )
+ );
+ }
+
+ if (0 < $count['down']) {
+ $output->writeAll(
+ \str_replace(
+ '%p1%d',
+ $count['down'] * $repeat,
+ $tput->get('parm_rindex')
+ )
+ );
+ }
+
+ return;
+ }
+
+ /**
+ * Minimize the window.
+ */
+ public static function minimize()
+ {
+ if (\defined('PHP_WINDOWS_VERSION_PLATFORM')) {
+ return;
+ }
+
+ // DECSLPP.
+ Console::getOutput()->writeAll("\033[2t");
+
+ return;
+ }
+
+ /**
+ * Restore the window (de-minimize).
+ */
+ public static function restore()
+ {
+ if (\defined('PHP_WINDOWS_VERSION_PLATFORM')) {
+ return;
+ }
+
+ Console::getOutput()->writeAll("\033[1t");
+
+ return;
+ }
+
+ /**
+ * Raise the window to the front of the stacking order.
+ */
+ public static function raise()
+ {
+ if (\defined('PHP_WINDOWS_VERSION_PLATFORM')) {
+ return;
+ }
+
+ Console::getOutput()->writeAll("\033[5t");
+
+ return;
+ }
+
+ /**
+ * Lower the window to the bottom of the stacking order.
+ */
+ public static function lower()
+ {
+ if (\defined('PHP_WINDOWS_VERSION_PLATFORM')) {
+ return;
+ }
+
+ Console::getOutput()->writeAll("\033[6t");
+
+ return;
+ }
+
+ /**
+ * Set title.
+ */
+ public static function setTitle(string $title)
+ {
+ if (\defined('PHP_WINDOWS_VERSION_PLATFORM')) {
+ return;
+ }
+
+ // DECSLPP.
+ Console::getOutput()->writeAll("\033]0;".$title."\033\\");
+
+ return;
+ }
+
+ /**
+ * Get title.
+ */
+ public static function getTitle()
+ {
+ if (\defined('PHP_WINDOWS_VERSION_PLATFORM')) {
+ return null;
+ }
+
+ // DECSLPP.
+ Console::getOutput()->writeAll("\033[21t");
+
+ $input = Console::getInput();
+ $read = [$input->getStream()->getStream()];
+ $write = [];
+ $except = [];
+ $out = null;
+
+ if (0 === \stream_select($read, $write, $except, 0, 50000)) {
+ return $out;
+ }
+
+ // Read \033]l\033\
+ $input->read(3); // skip \033, ] and l.
+
+ while (true) {
+ $char = $input->readCharacter();
+
+ if ("\033" === $char) {
+ $chaar = $input->readCharacter();
+
+ if ('\\' === $chaar) {
+ break;
+ }
+
+ $char .= $chaar;
+ }
+
+ $out .= $char;
+ }
+
+ return $out;
+ }
+
+ /**
+ * Get label.
+ */
+ public static function getLabel()
+ {
+ if (\defined('PHP_WINDOWS_VERSION_PLATFORM')) {
+ return null;
+ }
+
+ // DECSLPP.
+ Console::getOutput()->writeAll("\033[20t");
+
+ $input = Console::getInput();
+ $read = [$input->getStream()->getStream()];
+ $write = [];
+ $except = [];
+ $out = null;
+
+ if (0 === \stream_select($read, $write, $except, 0, 50000)) {
+ return $out;
+ }
+
+ // Read \033]L