"dragonmantank/cron-expression": "^3.3.3",
"erusev/parsedown": "^1.7.4",
"ezyang/htmlpurifier": "^4.16",
- "guzzlehttp/guzzle": "^7.7.0",
- "guzzlehttp/psr7": "^2.6.0",
+ "guzzlehttp/guzzle": "^7.8.0",
+ "guzzlehttp/psr7": "^2.6.1",
"laminas/laminas-diactoros": "^3.1.0",
"laminas/laminas-httphandlerrunner": "^2.7.0",
"laminas/laminas-progressbar": "^2.12",
"psr/log": "^3.0",
"scssphp/scssphp": "^1.11",
"sebastian/diff": "^5.0.3",
- "symfony/polyfill-php82": "^1.27.0",
- "symfony/polyfill-php83": "^1.27",
+ "symfony/polyfill-php82": "^1.28.0",
+ "symfony/polyfill-php83": "^1.28",
"willdurand/negotiation": "^3.1"
},
"replace": {
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "7044d6daf69850dcfd60f482ab45327c",
+ "content-hash": "be8a1db5c9093dd354bbaaab259f50ff",
"packages": [
{
"name": "cuyz/valinor",
},
{
"name": "guzzlehttp/guzzle",
- "version": "7.7.0",
+ "version": "7.8.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5"
+ "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5",
- "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9",
+ "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9",
"shasum": ""
},
"require": {
"ext-json": "*",
- "guzzlehttp/promises": "^1.5.3 || ^2.0",
- "guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
+ "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
+ "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.7.0"
+ "source": "https://github.com/guzzle/guzzle/tree/7.8.0"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2023-05-21T14:04:53+00:00"
+ "time": "2023-08-27T10:20:53+00:00"
},
{
"name": "guzzlehttp/promises",
},
{
"name": "guzzlehttp/psr7",
- "version": "2.6.0",
+ "version": "2.6.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77"
+ "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/8bd7c33a0734ae1c5d074360512beb716bef3f77",
- "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727",
+ "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727",
"shasum": ""
},
"require": {
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.6.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.6.1"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2023-08-03T15:06:02+00:00"
+ "time": "2023-08-27T10:13:57+00:00"
},
{
"name": "laminas/laminas-diactoros",
},
{
"name": "symfony/polyfill-php82",
- "version": "v1.27.0",
+ "version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php82.git",
- "reference": "80ddf7bfa17ef7b06db4e6d007a95bf584e07b44"
+ "reference": "7716bea9c86776fb3362d6b52fe1fc9471056a49"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/80ddf7bfa17ef7b06db4e6d007a95bf584e07b44",
- "reference": "80ddf7bfa17ef7b06db4e6d007a95bf584e07b44",
+ "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/7716bea9c86776fb3362d6b52fe1fc9471056a49",
+ "reference": "7716bea9c86776fb3362d6b52fe1fc9471056a49",
"shasum": ""
},
"require": {
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php82/tree/v1.27.0"
+ "source": "https://github.com/symfony/polyfill-php82/tree/v1.28.0"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2022-11-10T10:10:54+00:00"
+ "time": "2023-08-25T17:27:25+00:00"
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.27.0",
+ "version": "v1.28.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
- "reference": "508c652ba3ccf69f8c97f251534f229791b52a57"
+ "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57",
- "reference": "508c652ba3ccf69f8c97f251534f229791b52a57",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
+ "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
"shasum": ""
},
"require": {
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
],
"psr-4": {
"Symfony\\Polyfill\\Php83\\": ""
- }
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0"
},
"funding": [
{
"type": "tidelift"
}
],
- "time": "2022-11-03T14:55:06+00:00"
+ "time": "2023-08-16T06:22:46+00:00"
},
{
"name": "webmozart/assert",
'CuyZ\\Valinor\\Utility\\String\\StringFormatterError' => $vendorDir . '/cuyz/valinor/src/Utility/String/StringFormatterError.php',
'CuyZ\\Valinor\\Utility\\TypeHelper' => $vendorDir . '/cuyz/valinor/src/Utility/TypeHelper.php',
'CuyZ\\Valinor\\Utility\\ValueDumper' => $vendorDir . '/cuyz/valinor/src/Utility/ValueDumper.php',
+ 'DateError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateError.php',
+ 'DateException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateException.php',
+ 'DateInvalidOperationException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php',
+ 'DateInvalidTimeZoneException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php',
+ 'DateMalformedIntervalStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php',
+ 'DateMalformedPeriodStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php',
+ 'DateMalformedStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php',
+ 'DateObjectError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateObjectError.php',
+ 'DateRangeError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateRangeError.php',
'GuzzleHttp\\BodySummarizer' => $vendorDir . '/guzzlehttp/guzzle/src/BodySummarizer.php',
'GuzzleHttp\\BodySummarizerInterface' => $vendorDir . '/guzzlehttp/guzzle/src/BodySummarizerInterface.php',
'GuzzleHttp\\Client' => $vendorDir . '/guzzlehttp/guzzle/src/Client.php',
'Negotiation\\Exception\\InvalidMediaType' => $vendorDir . '/willdurand/negotiation/src/Negotiation/Exception/InvalidMediaType.php',
'Negotiation\\LanguageNegotiator' => $vendorDir . '/willdurand/negotiation/src/Negotiation/LanguageNegotiator.php',
'Negotiation\\Negotiator' => $vendorDir . '/willdurand/negotiation/src/Negotiation/Negotiator.php',
+ 'Override' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/Override.php',
'ParagonIE\\ConstantTime\\Base32' => $vendorDir . '/paragonie/constant_time_encoding/src/Base32.php',
'ParagonIE\\ConstantTime\\Base32Hex' => $vendorDir . '/paragonie/constant_time_encoding/src/Base32Hex.php',
'ParagonIE\\ConstantTime\\Base64' => $vendorDir . '/paragonie/constant_time_encoding/src/Base64.php',
'Symfony\\Component\\CssSelector\\XPath\\TranslatorInterface' => $vendorDir . '/symfony/css-selector/XPath/TranslatorInterface.php',
'Symfony\\Component\\CssSelector\\XPath\\XPathExpr' => $vendorDir . '/symfony/css-selector/XPath/XPathExpr.php',
'Symfony\\Polyfill\\Php82\\NoDynamicProperties' => $vendorDir . '/symfony/polyfill-php82/NoDynamicProperties.php',
+ 'Symfony\\Polyfill\\Php82\\Php82' => $vendorDir . '/symfony/polyfill-php82/Php82.php',
'Symfony\\Polyfill\\Php82\\Random\\Engine\\Secure' => $vendorDir . '/symfony/polyfill-php82/Random/Engine/Secure.php',
'Symfony\\Polyfill\\Php82\\SensitiveParameterValue' => $vendorDir . '/symfony/polyfill-php82/SensitiveParameterValue.php',
'Symfony\\Polyfill\\Php83\\Php83' => $vendorDir . '/symfony/polyfill-php83/Php83.php',
'CuyZ\\Valinor\\Utility\\String\\StringFormatterError' => __DIR__ . '/..' . '/cuyz/valinor/src/Utility/String/StringFormatterError.php',
'CuyZ\\Valinor\\Utility\\TypeHelper' => __DIR__ . '/..' . '/cuyz/valinor/src/Utility/TypeHelper.php',
'CuyZ\\Valinor\\Utility\\ValueDumper' => __DIR__ . '/..' . '/cuyz/valinor/src/Utility/ValueDumper.php',
+ 'DateError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateError.php',
+ 'DateException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateException.php',
+ 'DateInvalidOperationException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php',
+ 'DateInvalidTimeZoneException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php',
+ 'DateMalformedIntervalStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php',
+ 'DateMalformedPeriodStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php',
+ 'DateMalformedStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php',
+ 'DateObjectError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateObjectError.php',
+ 'DateRangeError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateRangeError.php',
'GuzzleHttp\\BodySummarizer' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/BodySummarizer.php',
'GuzzleHttp\\BodySummarizerInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/BodySummarizerInterface.php',
'GuzzleHttp\\Client' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Client.php',
'Negotiation\\Exception\\InvalidMediaType' => __DIR__ . '/..' . '/willdurand/negotiation/src/Negotiation/Exception/InvalidMediaType.php',
'Negotiation\\LanguageNegotiator' => __DIR__ . '/..' . '/willdurand/negotiation/src/Negotiation/LanguageNegotiator.php',
'Negotiation\\Negotiator' => __DIR__ . '/..' . '/willdurand/negotiation/src/Negotiation/Negotiator.php',
+ 'Override' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/Override.php',
'ParagonIE\\ConstantTime\\Base32' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Base32.php',
'ParagonIE\\ConstantTime\\Base32Hex' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Base32Hex.php',
'ParagonIE\\ConstantTime\\Base64' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Base64.php',
'Symfony\\Component\\CssSelector\\XPath\\TranslatorInterface' => __DIR__ . '/..' . '/symfony/css-selector/XPath/TranslatorInterface.php',
'Symfony\\Component\\CssSelector\\XPath\\XPathExpr' => __DIR__ . '/..' . '/symfony/css-selector/XPath/XPathExpr.php',
'Symfony\\Polyfill\\Php82\\NoDynamicProperties' => __DIR__ . '/..' . '/symfony/polyfill-php82/NoDynamicProperties.php',
+ 'Symfony\\Polyfill\\Php82\\Php82' => __DIR__ . '/..' . '/symfony/polyfill-php82/Php82.php',
'Symfony\\Polyfill\\Php82\\Random\\Engine\\Secure' => __DIR__ . '/..' . '/symfony/polyfill-php82/Random/Engine/Secure.php',
'Symfony\\Polyfill\\Php82\\SensitiveParameterValue' => __DIR__ . '/..' . '/symfony/polyfill-php82/SensitiveParameterValue.php',
'Symfony\\Polyfill\\Php83\\Php83' => __DIR__ . '/..' . '/symfony/polyfill-php83/Php83.php',
},
{
"name": "guzzlehttp/guzzle",
- "version": "7.7.0",
- "version_normalized": "7.7.0.0",
+ "version": "7.8.0",
+ "version_normalized": "7.8.0.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5"
+ "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5",
- "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9",
+ "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9",
"shasum": ""
},
"require": {
"ext-json": "*",
- "guzzlehttp/promises": "^1.5.3 || ^2.0",
- "guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
+ "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
+ "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware"
},
- "time": "2023-05-21T14:04:53+00:00",
+ "time": "2023-08-27T10:20:53+00:00",
"type": "library",
"extra": {
"bamarni-bin": {
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.7.0"
+ "source": "https://github.com/guzzle/guzzle/tree/7.8.0"
},
"funding": [
{
},
{
"name": "guzzlehttp/psr7",
- "version": "2.6.0",
- "version_normalized": "2.6.0.0",
+ "version": "2.6.1",
+ "version_normalized": "2.6.1.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77"
+ "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/8bd7c33a0734ae1c5d074360512beb716bef3f77",
- "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727",
+ "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727",
"shasum": ""
},
"require": {
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
- "time": "2023-08-03T15:06:02+00:00",
+ "time": "2023-08-27T10:13:57+00:00",
"type": "library",
"extra": {
"bamarni-bin": {
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.6.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.6.1"
},
"funding": [
{
},
{
"name": "symfony/polyfill-php82",
- "version": "v1.27.0",
- "version_normalized": "1.27.0.0",
+ "version": "v1.28.0",
+ "version_normalized": "1.28.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php82.git",
- "reference": "80ddf7bfa17ef7b06db4e6d007a95bf584e07b44"
+ "reference": "7716bea9c86776fb3362d6b52fe1fc9471056a49"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/80ddf7bfa17ef7b06db4e6d007a95bf584e07b44",
- "reference": "80ddf7bfa17ef7b06db4e6d007a95bf584e07b44",
+ "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/7716bea9c86776fb3362d6b52fe1fc9471056a49",
+ "reference": "7716bea9c86776fb3362d6b52fe1fc9471056a49",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
- "time": "2022-11-10T10:10:54+00:00",
+ "time": "2023-08-25T17:27:25+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php82/tree/v1.27.0"
+ "source": "https://github.com/symfony/polyfill-php82/tree/v1.28.0"
},
"funding": [
{
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.27.0",
- "version_normalized": "1.27.0.0",
+ "version": "v1.28.0",
+ "version_normalized": "1.28.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
- "reference": "508c652ba3ccf69f8c97f251534f229791b52a57"
+ "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57",
- "reference": "508c652ba3ccf69f8c97f251534f229791b52a57",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
+ "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
"shasum": ""
},
"require": {
"php": ">=7.1",
"symfony/polyfill-php80": "^1.14"
},
- "time": "2022-11-03T14:55:06+00:00",
+ "time": "2023-08-16T06:22:46+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
],
"psr-4": {
"Symfony\\Polyfill\\Php83\\": ""
- }
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0"
},
"funding": [
{
'dev_requirement' => false,
),
'guzzlehttp/guzzle' => array(
- 'pretty_version' => '7.7.0',
- 'version' => '7.7.0.0',
- 'reference' => 'fb7566caccf22d74d1ab270de3551f72a58399f5',
+ 'pretty_version' => '7.8.0',
+ 'version' => '7.8.0.0',
+ 'reference' => '1110f66a6530a40fe7aea0378fe608ee2b2248f9',
'type' => 'library',
'install_path' => __DIR__ . '/../guzzlehttp/guzzle',
'aliases' => array(),
'dev_requirement' => false,
),
'guzzlehttp/psr7' => array(
- 'pretty_version' => '2.6.0',
- 'version' => '2.6.0.0',
- 'reference' => '8bd7c33a0734ae1c5d074360512beb716bef3f77',
+ 'pretty_version' => '2.6.1',
+ 'version' => '2.6.1.0',
+ 'reference' => 'be45764272e8873c72dbe3d2edcfdfcc3bc9f727',
'type' => 'library',
'install_path' => __DIR__ . '/../guzzlehttp/psr7',
'aliases' => array(),
'psr/http-factory-implementation' => array(
'dev_requirement' => false,
'provided' => array(
- 0 => '1.0',
- 1 => '^1.1 || ^2.0',
+ 0 => '^1.1 || ^2.0',
+ 1 => '1.0',
),
),
'psr/http-message' => array(
'psr/http-message-implementation' => array(
'dev_requirement' => false,
'provided' => array(
- 0 => '1.0',
- 1 => '^1.1 || ^2.0',
+ 0 => '^1.1 || ^2.0',
+ 1 => '1.0',
),
),
'psr/http-server-handler' => array(
),
),
'symfony/polyfill-php82' => array(
- 'pretty_version' => 'v1.27.0',
- 'version' => '1.27.0.0',
- 'reference' => '80ddf7bfa17ef7b06db4e6d007a95bf584e07b44',
+ 'pretty_version' => 'v1.28.0',
+ 'version' => '1.28.0.0',
+ 'reference' => '7716bea9c86776fb3362d6b52fe1fc9471056a49',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-php82',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/polyfill-php83' => array(
- 'pretty_version' => 'v1.27.0',
- 'version' => '1.27.0.0',
- 'reference' => '508c652ba3ccf69f8c97f251534f229791b52a57',
+ 'pretty_version' => 'v1.28.0',
+ 'version' => '1.28.0.0',
+ 'reference' => 'b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-php83',
'aliases' => array(),
Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version.
+## 7.8.0 - 2023-08-27
+
+### Added
+
+- Support for PHP 8.3
+- Added automatic closing of handles on `CurlFactory` object destruction
+
+
+## 7.7.1 - 2023-08-27
+
+### Changed
+
+- Remove the need for `AllowDynamicProperties` in `CurlMultiHandler`
+
+
## 7.7.0 - 2023-05-21
### Added
- Function `GuzzleHttp\Exception\RequestException::getResponseBodySummary` is removed.
Use `\GuzzleHttp\Psr7\get_message_body_summary` as an alternative.
- Function `GuzzleHttp\Cookie\CookieJar::getCookieValue` is removed.
-- Request option `exception` is removed. Please use `http_errors`.
+- Request option `exceptions` is removed. Please use `http_errors`.
- Request option `save_to` is removed. Please use `sink`.
- Pool option `pool_size` is removed. Please use `concurrency`.
- We now look for environment variables in the `$_SERVER` super global, due to thread safety issues with `getenv`. We continue to fallback to `getenv` in CLI environments, for maximum compatibility.
"require": {
"php": "^7.2.5 || ^8.0",
"ext-json": "*",
- "guzzlehttp/promises": "^1.5.3 || ^2.0",
- "guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
+ "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
+ "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
},
*
* @deprecated Client::getConfig will be removed in guzzlehttp/guzzle:8.0.
*/
- public function getConfig(?string $option = null)
+ public function getConfig(string $option = null)
{
return $option === null
? $this->config
*
* @deprecated ClientInterface::getConfig will be removed in guzzlehttp/guzzle:8.0.
*/
- public function getConfig(?string $option = null);
+ public function getConfig(string $option = null);
}
return null;
}
- /**
- * {@inheritDoc}
- */
public function toArray(): array
{
return \array_map(static function (SetCookie $cookie): array {
}, $this->getIterator()->getArrayCopy());
}
- /**
- * {@inheritDoc}
- */
- public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void
+ public function clear(string $domain = null, string $path = null, string $name = null): void
{
if (!$domain) {
$this->cookies = [];
$this->cookies = \array_filter(
$this->cookies,
static function (SetCookie $cookie) use ($path, $domain): bool {
- return !($cookie->matchesPath($path) &&
- $cookie->matchesDomain($domain));
+ return !($cookie->matchesPath($path)
+ && $cookie->matchesDomain($domain));
}
);
} else {
$this->cookies = \array_filter(
$this->cookies,
static function (SetCookie $cookie) use ($path, $domain, $name) {
- return !($cookie->getName() == $name &&
- $cookie->matchesPath($path) &&
- $cookie->matchesDomain($domain));
+ return !($cookie->getName() == $name
+ && $cookie->matchesPath($path)
+ && $cookie->matchesDomain($domain));
}
);
}
}
- /**
- * {@inheritDoc}
- */
public function clearSessionCookies(): void
{
$this->cookies = \array_filter(
);
}
- /**
- * {@inheritDoc}
- */
public function setCookie(SetCookie $cookie): bool
{
// If the name string is empty (but not 0), ignore the set-cookie
foreach ($this->cookies as $i => $c) {
// Two cookies are identical, when their path, and domain are
// identical.
- if ($c->getPath() != $cookie->getPath() ||
- $c->getDomain() != $cookie->getDomain() ||
- $c->getName() != $cookie->getName()
+ if ($c->getPath() != $cookie->getPath()
+ || $c->getDomain() != $cookie->getDomain()
+ || $c->getName() != $cookie->getName()
) {
continue;
}
$path = $uri->getPath() ?: '/';
foreach ($this->cookies as $cookie) {
- if ($cookie->matchesPath($path) &&
- $cookie->matchesDomain($host) &&
- !$cookie->isExpired() &&
- (!$cookie->getSecure() || $scheme === 'https')
+ if ($cookie->matchesPath($path)
+ && $cookie->matchesDomain($host)
+ && !$cookie->isExpired()
+ && (!$cookie->getSecure() || $scheme === 'https')
) {
$values[] = $cookie->getName().'='
.$cookie->getValue();
* cookies from a file, database, etc.
*
* @see https://docs.python.org/2/library/cookielib.html Inspiration
+ *
* @extends \IteratorAggregate<SetCookie>
*/
interface CookieJarInterface extends \Countable, \IteratorAggregate
* @param string|null $path Clears cookies matching a domain and path
* @param string|null $name Clears cookies matching a domain, path, and name
*/
- public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void;
+ public function clear(string $domain = null, string $path = null, string $name = null): void;
/**
* Discard all sessions cookies.
// If it's a directory or a link to a directory use CURLOPT_CAPATH.
// If not, it's probably a file, or a link to a file, so use CURLOPT_CAINFO.
if (
- \is_dir($options['verify']) ||
- (
- \is_link($options['verify']) === true &&
- ($verifyLink = \readlink($options['verify'])) !== false &&
- \is_dir($verifyLink)
+ \is_dir($options['verify'])
+ || (
+ \is_link($options['verify']) === true
+ && ($verifyLink = \readlink($options['verify'])) !== false
+ && \is_dir($verifyLink)
)
) {
$conf[\CURLOPT_CAPATH] = $options['verify'];
return \strlen($h);
};
}
+
+ public function __destruct()
+ {
+ foreach ($this->handles as $id => $handle) {
+ \curl_close($handle);
+ unset($this->handles[$id]);
+ }
+ }
}
* associative array of curl option constants mapping to values in the
* **curl** key of the provided request options.
*
- * @property resource|\CurlMultiHandle $_mh Internal use only. Lazy loaded multi-handle.
- *
* @final
*/
-#[\AllowDynamicProperties]
class CurlMultiHandler
{
/**
*/
private $options = [];
+ /** @var resource|\CurlMultiHandle */
+ private $_mh;
+
/**
* This handler accepts the following options:
*
}
$this->options = $options['options'] ?? [];
+
+ // unsetting the property forces the first access to go through
+ // __get().
+ unset($this->_mh);
}
/**
* handler is provided, the best handler for your
* system will be utilized.
*/
- public static function create(?callable $handler = null): self
+ public static function create(callable $handler = null): self
{
$stack = new self($handler ?: Utils::chooseHandler());
$stack->push(Middleware::httpErrors(), 'http_errors');
* @param callable(callable): callable $middleware Middleware function
* @param string $name Name to register for this middleware.
*/
- public function unshift(callable $middleware, ?string $name = null): void
+ public function unshift(callable $middleware, string $name = null): void
{
\array_unshift($this->stack, [$middleware, $name]);
$this->cached = null;
* @param ResponseInterface|null $response Response that was received
* @param \Throwable|null $error Exception that was received
*/
- public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\Throwable $error = null): string
+ public function format(RequestInterface $request, ResponseInterface $response = null, \Throwable $error = null): string
{
$cache = [];
* @param ResponseInterface|null $response Response that was received
* @param \Throwable|null $error Exception that was received
*/
- public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\Throwable $error = null): string;
+ public function format(RequestInterface $request, ResponseInterface $response = null, \Throwable $error = null): string;
}
// not forcing RFC compliance, but rather emulating what all browsers
// would do.
$statusCode = $response->getStatusCode();
- if ($statusCode == 303 ||
- ($statusCode <= 302 && !$options['allow_redirects']['strict'])
+ if ($statusCode == 303
+ || ($statusCode <= 302 && !$options['allow_redirects']['strict'])
) {
$safeMethods = ['GET', 'HEAD', 'OPTIONS'];
$requestMethod = $request->getMethod();
*/
public function __construct(
RequestInterface $request,
- ?ResponseInterface $response = null,
- ?float $transferTime = null,
+ ResponseInterface $response = null,
+ float $transferTime = null,
$handlerErrorData = null,
array $handlerStats = []
) {
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## 2.6.1 - 2023-08-27
+
+### Fixed
+
+- Properly handle the fact that PHP transforms numeric strings in array keys to ints
+
## 2.6.0 - 2023-08-03
### Changed
public function eof(): bool
{
- return !$this->streams ||
- ($this->current >= count($this->streams) - 1 &&
- $this->streams[$this->current]->eof());
+ return !$this->streams
+ || ($this->current >= count($this->streams) - 1
+ && $this->streams[$this->current]->eof());
}
public function rewind(): void
}
/**
- * {@inheritdoc}
- *
* @return mixed
*/
public function getMetadata($key = null)
}
/**
- * {@inheritdoc}
- *
* @return mixed
*/
public function getMetadata($key = null)
}
/**
- * {@inheritdoc}
- *
* @return mixed
*/
public function getMetadata($key = null)
}
foreach ($message->getHeaders() as $name => $values) {
- if (strtolower($name) === 'set-cookie') {
+ if (is_string($name) && strtolower($name) === 'set-cookie') {
foreach ($values as $value) {
$msg .= "\r\n{$name}: ".$value;
}
*/
trait MessageTrait
{
- /** @var array<string, string[]> Map of all registered headers, as original name => array of values */
+ /** @var string[][] Map of all registered headers, as original name => array of values */
private $headers = [];
- /** @var array<string, string> Map of lowercase header name => original name at registration */
+ /** @var string[] Map of lowercase header name => original name at registration */
private $headerNames = [];
/** @var string */
private $buffer;
/**
- * @param callable(int): (string|null|false) $source Source of the stream data. The callable MAY
+ * @param callable(int): (string|false|null) $source Source of the stream data. The callable MAY
* accept an integer argument used to control the
* amount of data to return. The callable MUST
* return a string when called, or false|null on error
}
/**
- * {@inheritdoc}
- *
* @return mixed
*/
public function getMetadata($key = null)
}
/**
- * {@inheritdoc}
- *
* @return array|object|null
*/
public function getParsedBody()
}
/**
- * {@inheritdoc}
- *
* @return mixed
*/
public function getAttribute($attribute, $default = null)
}
/**
- * {@inheritdoc}
- *
* @return mixed
*/
public function getMetadata($key = null)
}
/**
- * {@inheritdoc}
- *
* @return mixed
*/
public function getMetadata($key = null)
$uri = self::decodeUnreservedCharacters($uri);
}
- if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === '' &&
- ($uri->getScheme() === 'http' || $uri->getScheme() === 'https')
+ if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === ''
+ && ($uri->getScheme() === 'http' || $uri->getScheme() === 'https')
) {
$uri = $uri->withPath('/');
}
*/
public static function relativize(UriInterface $base, UriInterface $target): UriInterface
{
- if ($target->getScheme() !== '' &&
- ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '')
+ if ($target->getScheme() !== ''
+ && ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '')
) {
return $target;
}
* @param StreamInterface $stream Stream to read from
* @param int|null $maxLength Maximum buffer length
*/
- public static function readLine(StreamInterface $stream, ?int $maxLength = null): string
+ public static function readLine(StreamInterface $stream, int $maxLength = null): string
{
$buffer = '';
$size = 0;
-Copyright (c) 2022 Fabien Potencier
+Copyright (c) 2022-present Fabien Potencier
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Php82;
+
+/**
+ * @author Alexander M. Turek <me@derrabus.de>
+ * @author Greg Roach <greg@subaqua.co.uk>
+ *
+ * @internal
+ */
+class Php82
+{
+ /**
+ * Determines if a string matches the ODBC quoting rules.
+ *
+ * A valid quoted string begins with a '{', ends with a '}', and has no '}'
+ * inside of the string that aren't repeated (as to be escaped).
+ *
+ * These rules are what .NET also follows.
+ *
+ * @see https://github.com/php/php-src/blob/838f6bffff6363a204a2597cbfbaad1d7ee3f2b6/main/php_odbc_utils.c#L31-L57
+ */
+ public static function odbc_connection_string_is_quoted(string $str): bool
+ {
+ if ('' === $str || '{' !== $str[0]) {
+ return false;
+ }
+
+ /* Check for } that aren't doubled up or at the end of the string */
+ $length = \strlen($str) - 1;
+ for ($i = 0; $i < $length; ++$i) {
+ if ('}' !== $str[$i]) {
+ continue;
+ }
+
+ if ('}' !== $str[++$i]) {
+ return $i === $length;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Determines if a value for a connection string should be quoted.
+ *
+ * The ODBC specification mentions:
+ * "Because of connection string and initialization file grammar, keywords and
+ * attribute values that contain the characters []{}(),;?*=!@ not enclosed
+ * with braces should be avoided."
+ *
+ * Note that it assumes that the string is *not* already quoted. You should
+ * check beforehand.
+ *
+ * @see https://github.com/php/php-src/blob/838f6bffff6363a204a2597cbfbaad1d7ee3f2b6/main/php_odbc_utils.c#L59-L73
+ */
+ public static function odbc_connection_string_should_quote(string $str): bool
+ {
+ return false !== strpbrk($str, '[]{}(),;?*=!@');
+ }
+
+ public static function odbc_connection_string_quote(string $str): string
+ {
+ return '{'.str_replace('}', '}}', $str).'}';
+ }
+
+ /**
+ * Implementation closely based on the original C code - including the GOTOs
+ * and pointer-style string access.
+ *
+ * @see https://github.com/php/php-src/blob/master/Zend/zend_ini.c
+ */
+ public static function ini_parse_quantity(string $value): int
+ {
+ // Avoid dependency on ctype_space()
+ $ctype_space = " \t\v\r\n\f";
+
+ $str = 0;
+ $str_end = \strlen($value);
+ $digits = $str;
+ $overflow = false;
+
+ /* Ignore leading whitespace, but keep it for error messages. */
+ while ($digits < $str_end && false !== strpos($ctype_space, $value[$digits])) {
+ ++$digits;
+ }
+
+ /* Ignore trailing whitespace, but keep it for error messages. */
+ while ($digits < $str_end && false !== strpos($ctype_space, $value[$str_end - 1])) {
+ --$str_end;
+ }
+
+ if ($digits === $str_end) {
+ return 0;
+ }
+
+ $is_negative = false;
+
+ if ('+' === $value[$digits]) {
+ ++$digits;
+ } elseif ('-' === $value[$digits]) {
+ $is_negative = true;
+ ++$digits;
+ }
+
+ if ($value[$digits] < '0' || $value[$digits] > 9) {
+ $message = sprintf(
+ 'Invalid quantity "%s": no valid leading digits, interpreting as "0" for backwards compatibility',
+ self::escapeString($value)
+ );
+
+ trigger_error($message, \E_USER_WARNING);
+
+ return 0;
+ }
+
+ $base = 10;
+ $allowed_digits = '0123456789';
+
+ if ('0' === $value[$digits] && ($digits + 1 === $str_end || false === strpos($allowed_digits, $value[$digits + 1]))) {
+ if ($digits + 1 === $str_end) {
+ return 0;
+ }
+
+ switch ($value[$digits + 1]) {
+ case 'g':
+ case 'G':
+ case 'm':
+ case 'M':
+ case 'k':
+ case 'K':
+ goto evaluation;
+ case 'x':
+ case 'X':
+ $base = 16;
+ $allowed_digits = '0123456789abcdefABCDEF';
+ break;
+ case 'o':
+ case 'O':
+ $base = 8;
+ $allowed_digits = '01234567';
+ break;
+ case 'b':
+ case 'B':
+ $base = 2;
+ $allowed_digits = '01';
+ break;
+ default:
+ $message = sprintf(
+ 'Invalid prefix "0%s", interpreting as "0" for backwards compatibility',
+ $value[$digits + 1]
+ );
+ trigger_error($message, \E_USER_WARNING);
+
+ return 0;
+ }
+
+ $digits += 2;
+ if ($digits === $str_end) {
+ $message = sprintf(
+ 'Invalid quantity "%s": no digits after base prefix, interpreting as "0" for backwards compatibility',
+ self::escapeString($value)
+ );
+ trigger_error($message, \E_USER_WARNING);
+
+ return 0;
+ }
+ }
+
+ evaluation:
+
+ if (10 === $base && '0' === $value[$digits]) {
+ $base = 8;
+ $allowed_digits = '01234567';
+ }
+
+ while ($digits < $str_end && ' ' === $value[$digits]) {
+ ++$digits;
+ }
+
+ if ($digits < $str_end && '+' === $value[$digits]) {
+ ++$digits;
+ } elseif ($digits < $str_end && '-' === $value[$digits]) {
+ $is_negative = true;
+ $overflow = true;
+ ++$digits;
+ }
+
+ $digits_end = $digits;
+
+ // The native function treats 0x0x123 the same as 0x123. This is a bug which we must replicate.
+ if (
+ 16 === $base
+ && $digits_end + 2 < $str_end
+ && '0x' === substr($value, $digits_end, 2)
+ && false !== strpos($allowed_digits, $value[$digits_end + 2])
+ ) {
+ $digits_end += 2;
+ }
+
+ while ($digits_end < $str_end && false !== strpos($allowed_digits, $value[$digits_end])) {
+ ++$digits_end;
+ }
+
+ $retval = base_convert(substr($value, $digits, $digits_end - $digits), $base, 10);
+
+ if ($is_negative && '0' === $retval) {
+ $is_negative = false;
+ $overflow = false;
+ }
+
+ // Check for overflow - remember that -PHP_INT_MIN = 1 + PHP_INT_MAX
+ if ($is_negative) {
+ $signed_max = strtr((string) \PHP_INT_MIN, ['-' => '']);
+ } else {
+ $signed_max = (string) \PHP_INT_MAX;
+ }
+
+ $max_length = max(\strlen($retval), \strlen($signed_max));
+
+ $tmp1 = str_pad($retval, $max_length, '0', \STR_PAD_LEFT);
+ $tmp2 = str_pad($signed_max, $max_length, '0', \STR_PAD_LEFT);
+
+ if ($tmp1 > $tmp2) {
+ $retval = -1;
+ $overflow = true;
+ } elseif ($is_negative) {
+ $retval = '-'.$retval;
+ }
+
+ $retval = (int) $retval;
+
+ if ($digits_end === $digits) {
+ $message = sprintf(
+ 'Invalid quantity "%s": no valid leading digits, interpreting as "0" for backwards compatibility',
+ self::escapeString($value)
+ );
+ trigger_error($message, \E_USER_WARNING);
+
+ return 0;
+ }
+
+ /* Allow for whitespace between integer portion and any suffix character */
+ while ($digits_end < $str_end && false !== strpos($ctype_space, $value[$digits_end])) {
+ ++$digits_end;
+ }
+
+ /* No exponent suffix. */
+ if ($digits_end === $str_end) {
+ goto end;
+ }
+
+ switch ($value[$str_end - 1]) {
+ case 'g':
+ case 'G':
+ $shift = 30;
+ break;
+ case 'm':
+ case 'M':
+ $shift = 20;
+ break;
+ case 'k':
+ case 'K':
+ $shift = 10;
+ break;
+ default:
+ /* Unknown suffix */
+ $invalid = self::escapeString($value);
+ $interpreted = self::escapeString(substr($value, $str, $digits_end - $str));
+ $chr = self::escapeString($value[$str_end - 1]);
+
+ $message = sprintf(
+ 'Invalid quantity "%s": unknown multiplier "%s", interpreting as "%s" for backwards compatibility',
+ $invalid,
+ $chr,
+ $interpreted
+ );
+
+ trigger_error($message, \E_USER_WARNING);
+
+ return $retval;
+ }
+
+ $factor = 1 << $shift;
+
+ if (!$overflow) {
+ if ($retval > 0) {
+ $overflow = $retval > \PHP_INT_MAX / $factor;
+ } else {
+ $overflow = $retval < \PHP_INT_MIN / $factor;
+ }
+ }
+
+ if (\is_float($retval * $factor)) {
+ $overflow = true;
+ $retval <<= $shift;
+ } else {
+ $retval *= $factor;
+ }
+
+ if ($digits_end !== $str_end - 1) {
+ /* More than one character in suffix */
+ $message = sprintf(
+ 'Invalid quantity "%s", interpreting as "%s%s" for backwards compatibility',
+ self::escapeString($value),
+ self::escapeString(substr($value, $str, $digits_end - $str)),
+ self::escapeString($value[$str_end - 1])
+ );
+ trigger_error($message, \E_USER_WARNING);
+
+ return $retval;
+ }
+
+ end:
+
+ if ($overflow) {
+ /* Not specifying the resulting value here because the caller may make
+ * additional conversions. Not specifying the allowed range
+ * because the caller may do narrower range checks. */
+ $message = sprintf(
+ 'Invalid quantity "%s": value is out of range, using overflow result for backwards compatibility',
+ self::escapeString($value)
+ );
+ trigger_error($message, \E_USER_WARNING);
+ }
+
+ return $retval;
+ }
+
+ /**
+ * Escape the string to avoid null bytes and to make non-printable chars visible.
+ */
+ private static function escapeString(string $string): string
+ {
+ $escaped = '';
+
+ for ($n = 0, $len = \strlen($string); $n < $len; ++$n) {
+ $c = \ord($string[$n]);
+
+ if ($c < 32 || '\\' === $string[$n] || $c > 126) {
+ switch ($string[$n]) {
+ case "\n": $escaped .= '\\n'; break;
+ case "\r": $escaped .= '\\r'; break;
+ case "\t": $escaped .= '\\t'; break;
+ case "\f": $escaped .= '\\f'; break;
+ case "\v": $escaped .= '\\v'; break;
+ case '\\': $escaped .= '\\\\'; break;
+ case "\x1B": $escaped .= '\\e'; break;
+ default:
+ $escaped .= '\\x'.strtoupper(sprintf('%02x', $c));
+ }
+ } else {
+ $escaped .= $string[$n];
+ }
+ }
+
+ return $escaped;
+ }
+}
- [`Random\Engine`](https://wiki.php.net/rfc/rng_extension)
- [`Random\Engine\CryptoSafeEngine`](https://wiki.php.net/rfc/rng_extension)
- [`Random\Engine\Secure`](https://wiki.php.net/rfc/rng_extension) (check [arokettu/random-polyfill](https://packagist.org/packages/arokettu/random-polyfill) for more engines)
+- [`odbc_connection_string_is_quoted()`](https://php.net/odbc_connection_string_is_quoted)
+- [`odbc_connection_string_should_quote()`](https://php.net/odbc_connection_string_should_quote)
+- [`odbc_connection_string_quote()`](https://php.net/odbc_connection_string_quote)
+- [`ini_parse_quantity()`](https://php.net/ini_parse_quantity)
More information can be found in the
[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
* file that was distributed with this source code.
*/
+use Symfony\Polyfill\Php82 as p;
+
if (\PHP_VERSION_ID >= 80200) {
return;
}
+
+if (!extension_loaded('odbc')) {
+ return;
+}
+
+if (!function_exists('odbc_connection_string_is_quoted')) {
+ function odbc_connection_string_is_quoted(string $str): bool { return p\Php82::odbc_connection_string_is_quoted($str); }
+}
+
+if (!function_exists('odbc_connection_string_should_quote')) {
+ function odbc_connection_string_should_quote(string $str): bool { return p\Php82::odbc_connection_string_should_quote($str); }
+}
+
+if (!function_exists('odbc_connection_string_quote')) {
+ function odbc_connection_string_quote(string $str): string { return p\Php82::odbc_connection_string_quote($str); }
+}
+
+if (!function_exists('ini_parse_quantity')) {
+ function ini_parse_quantity(string $shorthand): int { return p\Php82::ini_parse_quantity($shorthand); }
+}
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",
-Copyright (c) 2022 Fabien Potencier
+Copyright (c) 2022-present Fabien Potencier
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
throw new \ValueError('json_validate(): Argument #2 ($depth) must be greater than 0');
}
- if ($depth >= self::JSON_MAX_DEPTH) {
+ if ($depth > self::JSON_MAX_DEPTH) {
throw new \ValueError(sprintf('json_validate(): Argument #2 ($depth) must be less than %d', self::JSON_MAX_DEPTH));
}
return \JSON_ERROR_NONE === json_last_error();
}
+
+ public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, string $encoding = null): string
+ {
+ if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], true)) {
+ throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH');
+ }
+
+ if (null === $encoding) {
+ $encoding = mb_internal_encoding();
+ }
+
+ try {
+ $validEncoding = @mb_check_encoding('', $encoding);
+ } catch (\ValueError $e) {
+ throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding));
+ }
+
+ // BC for PHP 7.3 and lower
+ if (!$validEncoding) {
+ throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding));
+ }
+
+ if (mb_strlen($pad_string, $encoding) <= 0) {
+ throw new \ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string');
+ }
+
+ $paddingRequired = $length - mb_strlen($string, $encoding);
+
+ if ($paddingRequired < 1) {
+ return $string;
+ }
+
+ switch ($pad_type) {
+ case \STR_PAD_LEFT:
+ return mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding).$string;
+ case \STR_PAD_RIGHT:
+ return $string.mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding);
+ default:
+ $leftPaddingLength = floor($paddingRequired / 2);
+ $rightPaddingLength = $paddingRequired - $leftPaddingLength;
+
+ return mb_substr(str_repeat($pad_string, $leftPaddingLength), 0, $leftPaddingLength, $encoding).$string.mb_substr(str_repeat($pad_string, $rightPaddingLength), 0, $rightPaddingLength, $encoding);
+ }
+ }
}
This component provides features added to PHP 8.3 core:
- [`json_validate`](https://wiki.php.net/rfc/json_validate)
+- [`Override`](https://wiki.php.net/rfc/marking_overriden_methods)
+- [`mb_str_pad`](https://wiki.php.net/rfc/mb_str_pad)
+- [`ldap_exop_sync`](https://wiki.php.net/rfc/deprecate_functions_with_overloaded_signatures)
+- [`ldap_connect_wallet`](https://wiki.php.net/rfc/deprecate_functions_with_overloaded_signatures)
+- [`stream_context_set_options`](https://wiki.php.net/rfc/deprecate_functions_with_overloaded_signatures)
+- [`Date*Exception/Error classes`](https://wiki.php.net/rfc/datetime-exceptions)
More information can be found in the
[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+ class DateError extends Error
+ {
+ }
+}
--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+ class DateException extends Exception
+ {
+ }
+}
--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+ class DateInvalidOperationException extends DateException
+ {
+ }
+}
--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+ class DateInvalidTimeZoneException extends DateException
+ {
+ }
+}
--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+ class DateMalformedIntervalStringException extends DateException
+ {
+ }
+}
--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+ class DateMalformedPeriodStringException extends DateException
+ {
+ }
+}
--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+ class DateMalformedStringException extends DateException
+ {
+ }
+}
--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+ class DateObjectError extends DateError
+ {
+ }
+}
--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+ class DateRangeError extends DateError
+ {
+ }
+}
--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80300) {
+ #[Attribute(Attribute::TARGET_METHOD)]
+ final class Override
+ {
+ public function __construct()
+ {
+ }
+ }
+}
if (!function_exists('json_validate')) {
function json_validate(string $json, int $depth = 512, int $flags = 0): bool { return p\Php83::json_validate($json, $depth, $flags); }
}
+
+if (!function_exists('mb_str_pad') && function_exists('mb_substr')) {
+ function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Php83::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); }
+}
+
+if (!function_exists('stream_context_set_options')) {
+ function stream_context_set_options($context, array $options): bool { return stream_context_set_option($context, $options); }
+}
+
+if (\PHP_VERSION_ID >= 80100) {
+ return require __DIR__.'/bootstrap81.php';
+}
+
+if (!function_exists('ldap_exop_sync') && function_exists('ldap_exop')) {
+ function ldap_exop_sync($ldap, string $request_oid, string $request_data = null, array $controls = null, &$response_data = null, &$response_oid = null): bool { return ldap_exop($ldap, $request_oid, $request_data, $controls, $response_data, $response_oid); }
+}
+
+if (!function_exists('ldap_connect_wallet') && function_exists('ldap_connect')) {
+ function ldap_connect_wallet(?string $uri, string $wallet, string $password, int $auth_mode = \GSLC_SSL_NO_AUTH) { return ldap_connect($uri, $wallet, $password, $auth_mode); }
+}
--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID >= 80300) {
+ return;
+}
+
+if (!function_exists('ldap_exop_sync') && function_exists('ldap_exop')) {
+ function ldap_exop_sync(\LDAP\Connection $ldap, string $request_oid, string $request_data = null, array $controls = null, &$response_data = null, &$response_oid = null): bool { return ldap_exop($ldap, $request_oid, $request_data, $controls, $response_data, $response_oid); }
+}
+
+if (!function_exists('ldap_connect_wallet') && function_exists('ldap_connect')) {
+ function ldap_connect_wallet(?string $uri, string $wallet, #[\SensitiveParameter] string $password, int $auth_mode = \GSLC_SSL_NO_AUTH): \LDAP\Connection|false { return ldap_connect($uri, $wallet, $password, $auth_mode); }
+}
},
"autoload": {
"psr-4": { "Symfony\\Polyfill\\Php83\\": "" },
- "files": [ "bootstrap.php" ]
+ "files": [ "bootstrap.php" ],
+ "classmap": [ "Resources/stubs" ]
},
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-main": "1.27-dev"
+ "dev-main": "1.28-dev"
},
"thanks": {
"name": "symfony/polyfill",