作者 chencheng

图片合成

正在显示 48 个修改的文件 包含 1926 行增加445 行删除

要显示太多修改。

为保证性能只显示 48 of 48+ 个文件。

@@ -232,17 +232,19 @@ class Index extends Api @@ -232,17 +232,19 @@ class Index extends Api
232 return $this->success("", $data); 232 return $this->success("", $data);
233 } 233 }
234 234
235 - // 生成二维码  
236 - public function build() 235 + /*
  236 + 生成二维码 $href 当前用户的 分享二维码 http格式
  237 + 扫码 后 跳转 首页
  238 + app/api/v1/index?share_id=$user_id
  239 + */
  240 + public function build($href)
237 { 241 {
238 - $post = $this->request->param("");  
239 - $text=$post['text'];  
240 - $label=$post['label']; 242 +
241 $config = get_addon_config('qrcode'); 243 $config = get_addon_config('qrcode');
242 $params = $this->request->get(); 244 $params = $this->request->get();
243 $params = array_intersect_key($params, array_flip(['text', 'size', 'padding', 'errorlevel', 'foreground', 'background', 'logo', 'logosize', 'logopath', 'label', 'labelfontsize', 'labelalignment'])); 245 $params = array_intersect_key($params, array_flip(['text', 'size', 'padding', 'errorlevel', 'foreground', 'background', 'logo', 'logosize', 'logopath', 'label', 'labelfontsize', 'labelalignment']));
244 - $params['text'] = $text;  
245 - $params['label'] = $label; 246 + $params['text'] = $href;
  247 + $params['label'] = "";
246 $qrCode = \addons\qrcode\library\Service::qrcode($params); 248 $qrCode = \addons\qrcode\library\Service::qrcode($params);
247 $mimetype = $config['format'] == 'png' ? 'image/png' : 'image/svg+xml'; 249 $mimetype = $config['format'] == 'png' ? 'image/png' : 'image/svg+xml';
248 $response = Response::create()->header("Content-Type", $mimetype); 250 $response = Response::create()->header("Content-Type", $mimetype);
@@ -263,9 +265,13 @@ class Index extends Api @@ -263,9 +265,13 @@ class Index extends Api
263 $code_path="/uploads/qrcode/".$code_name; 265 $code_path="/uploads/qrcode/".$code_name;
264 } 266 }
265 267
266 - return $this->success("", $code_path); 268 + return $this->success("", $code_path);
267 269
268 } 270 }
  271 + //图片合成 分销图片
  272 + public function synthesis(){
  273 +
  274 + }
269 275
270 /** 276 /**
271 * 名字加* 277 * 名字加*
@@ -150,6 +150,7 @@ class Wechat extends Api @@ -150,6 +150,7 @@ class Wechat extends Api
150 =snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 ) 150 =snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
151 https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 151 https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
152 2.2 由微信回跳后,获取code 和 state 参数,由前端post code给后台 152 2.2 由微信回跳后,获取code 和 state 参数,由前端post code给后台
  153 + 返回 token 前端存储 每次请求 放在header里
153 */ 154 */
154 155
155 public function get_user_info_by_code (){ 156 public function get_user_info_by_code (){
@@ -177,8 +178,7 @@ class Wechat extends Api @@ -177,8 +178,7 @@ class Wechat extends Api
177 }else{ 178 }else{
178 Db::name('user')->where($w)->update($save); 179 Db::name('user')->where($w)->update($save);
179 } 180 }
180 - //注册成功 继续注册分销关系  
181 - 181 +
182 //设置同域下的登录缓存 182 //设置同域下的登录缓存
183 $user = Db::name('user')->where($w)->find(); 183 $user = Db::name('user')->where($w)->find();
184 //登录成功 存储服务器本地 184 //登录成功 存储服务器本地
@@ -190,8 +190,9 @@ class Wechat extends Api @@ -190,8 +190,9 @@ class Wechat extends Api
190 $this->error($e->getMessage()); 190 $this->error($e->getMessage());
191 } 191 }
192 if($user_id !=0){ 192 if($user_id !=0){
193 - print_r($this->auth->getToken());return;  
194 - $this->success('完成',$user_id); 193 + $data['token'] = $this->auth->getToken();
  194 + $data['user_info'] = $user;
  195 + $this->success('完成',$data);
195 }else{ 196 }else{
196 $this->error('code处理失败'); 197 $this->error('code处理失败');
197 } 198 }
@@ -221,7 +222,7 @@ class Wechat extends Api @@ -221,7 +222,7 @@ class Wechat extends Api
221 */ 222 */
222 public function prepare_order($order_no = ''){ 223 public function prepare_order($order_no = ''){
223 $user_id = $this->auth->id; 224 $user_id = $this->auth->id;
224 - $user_id = 2;//模拟用户 225 +
225 if(empty($user_id)){ 226 if(empty($user_id)){
226 return $this->error('用户信息错误'); 227 return $this->error('用户信息错误');
227 } 228 }
  1 +<?php
  2 +// +----------------------------------------------------------------------
  3 +// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
  4 +// +----------------------------------------------------------------------
  5 +// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
  6 +// +----------------------------------------------------------------------
  7 +// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  8 +// +----------------------------------------------------------------------
  9 +// | Author: yunwuxin <448901948@qq.com>
  10 +// +----------------------------------------------------------------------
  11 +
  12 +return [
  13 + 'connector' => 'Sync'
  14 +];
@@ -30,7 +30,8 @@ @@ -30,7 +30,8 @@
30 "ext-curl": "*", 30 "ext-curl": "*",
31 "ext-pdo": "*", 31 "ext-pdo": "*",
32 "ext-bcmath": "*", 32 "ext-bcmath": "*",
33 - "txthinking/mailer": "^2.0" 33 + "txthinking/mailer": "^2.0",
  34 + "kkokk/poster": "^2.0"
34 }, 35 },
35 "config": { 36 "config": {
36 "preferred-install": "dist", 37 "preferred-install": "dist",
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 // | Author: liu21st <liu21st@gmail.com> 9 // | Author: liu21st <liu21st@gmail.com>
10 // +---------------------------------------------------------------------- 10 // +----------------------------------------------------------------------
11 11
12 -define('THINK_VERSION', '5.0.24'); 12 +define('THINK_VERSION', '5.0.25');
13 define('THINK_START_TIME', microtime(true)); 13 define('THINK_START_TIME', microtime(true));
14 define('THINK_START_MEM', memory_get_usage()); 14 define('THINK_START_MEM', memory_get_usage());
15 define('EXT', '.php'); 15 define('EXT', '.php');
@@ -3,21 +3,8 @@ @@ -3,21 +3,8 @@
3 // autoload.php @generated by Composer 3 // autoload.php @generated by Composer
4 4
5 if (PHP_VERSION_ID < 50600) { 5 if (PHP_VERSION_ID < 50600) {
6 - if (!headers_sent()) {  
7 - header('HTTP/1.1 500 Internal Server Error');  
8 - }  
9 - $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;  
10 - if (!ini_get('display_errors')) {  
11 - if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {  
12 - fwrite(STDERR, $err);  
13 - } elseif (!headers_sent()) {  
14 - echo $err;  
15 - }  
16 - }  
17 - trigger_error(  
18 - $err,  
19 - E_USER_ERROR  
20 - ); 6 + echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
  7 + exit(1);
21 } 8 }
22 9
23 require_once __DIR__ . '/composer/autoload_real.php'; 10 require_once __DIR__ . '/composer/autoload_real.php';
@@ -10,7 +10,7 @@ return array( @@ -10,7 +10,7 @@ return array(
10 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 10 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
11 'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', 11 'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
12 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 12 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
13 - 'Stringable' => $vendorDir . '/myclabs/php-enum/stubs/Stringable.php', 13 + 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
14 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', 14 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
15 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', 15 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
16 ); 16 );
@@ -9,7 +9,7 @@ return array( @@ -9,7 +9,7 @@ return array(
9 'think\\helper\\' => array($vendorDir . '/topthink/think-helper/src'), 9 'think\\helper\\' => array($vendorDir . '/topthink/think-helper/src'),
10 'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'), 10 'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'),
11 'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'), 11 'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'),
12 - 'think\\' => array($vendorDir . '/karsonzhang/fastadmin-addons/src', $vendorDir . '/topthink/think-queue/src', $baseDir . '/thinkphp/library/think'), 12 + 'think\\' => array($baseDir . '/thinkphp/library/think', $vendorDir . '/karsonzhang/fastadmin-addons/src', $vendorDir . '/topthink/think-queue/src'),
13 'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'), 13 'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'),
14 'Tx\\' => array($vendorDir . '/txthinking/mailer/src'), 14 'Tx\\' => array($vendorDir . '/txthinking/mailer/src'),
15 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), 15 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
@@ -26,7 +26,7 @@ return array( @@ -26,7 +26,7 @@ return array(
26 'Symfony\\Bridge\\PsrHttpMessage\\' => array($vendorDir . '/symfony/psr-http-message-bridge'), 26 'Symfony\\Bridge\\PsrHttpMessage\\' => array($vendorDir . '/symfony/psr-http-message-bridge'),
27 'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'), 27 'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
28 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 28 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
29 - 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'), 29 + 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src', $vendorDir . '/psr/http-factory/src'),
30 'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'), 30 'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'),
31 'Psr\\EventDispatcher\\' => array($vendorDir . '/psr/event-dispatcher/src'), 31 'Psr\\EventDispatcher\\' => array($vendorDir . '/psr/event-dispatcher/src'),
32 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 32 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
@@ -38,6 +38,7 @@ return array( @@ -38,6 +38,7 @@ return array(
38 'MyCLabs\\Enum\\' => array($vendorDir . '/myclabs/php-enum/src'), 38 'MyCLabs\\Enum\\' => array($vendorDir . '/myclabs/php-enum/src'),
39 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), 39 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
40 'Matrix\\' => array($vendorDir . '/markbaker/matrix/classes/src'), 40 'Matrix\\' => array($vendorDir . '/markbaker/matrix/classes/src'),
  41 + 'Kkokk\\Poster\\' => array($vendorDir . '/kkokk/poster/src'),
41 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), 42 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
42 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), 43 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
43 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), 44 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
@@ -77,6 +77,10 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65 @@ -77,6 +77,10 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
77 'Monolog\\' => 8, 77 'Monolog\\' => 8,
78 'Matrix\\' => 7, 78 'Matrix\\' => 7,
79 ), 79 ),
  80 + 'K' =>
  81 + array (
  82 + 'Kkokk\\Poster\\' => 13,
  83 + ),
80 'G' => 84 'G' =>
81 array ( 85 array (
82 'GuzzleHttp\\Psr7\\' => 16, 86 'GuzzleHttp\\Psr7\\' => 16,
@@ -109,9 +113,9 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65 @@ -109,9 +113,9 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
109 ), 113 ),
110 'think\\' => 114 'think\\' =>
111 array ( 115 array (
112 - 0 => __DIR__ . '/..' . '/karsonzhang/fastadmin-addons/src',  
113 - 1 => __DIR__ . '/..' . '/topthink/think-queue/src',  
114 - 2 => __DIR__ . '/../..' . '/thinkphp/library/think', 116 + 0 => __DIR__ . '/../..' . '/thinkphp/library/think',
  117 + 1 => __DIR__ . '/..' . '/karsonzhang/fastadmin-addons/src',
  118 + 2 => __DIR__ . '/..' . '/topthink/think-queue/src',
115 ), 119 ),
116 'ZipStream\\' => 120 'ZipStream\\' =>
117 array ( 121 array (
@@ -179,8 +183,8 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65 @@ -179,8 +183,8 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
179 ), 183 ),
180 'Psr\\Http\\Message\\' => 184 'Psr\\Http\\Message\\' =>
181 array ( 185 array (
182 - 0 => __DIR__ . '/..' . '/psr/http-factory/src',  
183 - 1 => __DIR__ . '/..' . '/psr/http-message/src', 186 + 0 => __DIR__ . '/..' . '/psr/http-message/src',
  187 + 1 => __DIR__ . '/..' . '/psr/http-factory/src',
184 ), 188 ),
185 'Psr\\Http\\Client\\' => 189 'Psr\\Http\\Client\\' =>
186 array ( 190 array (
@@ -226,6 +230,10 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65 @@ -226,6 +230,10 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
226 array ( 230 array (
227 0 => __DIR__ . '/..' . '/markbaker/matrix/classes/src', 231 0 => __DIR__ . '/..' . '/markbaker/matrix/classes/src',
228 ), 232 ),
  233 + 'Kkokk\\Poster\\' =>
  234 + array (
  235 + 0 => __DIR__ . '/..' . '/kkokk/poster/src',
  236 + ),
229 'GuzzleHttp\\Psr7\\' => 237 'GuzzleHttp\\Psr7\\' =>
230 array ( 238 array (
231 0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src', 239 0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',
@@ -274,7 +282,7 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65 @@ -274,7 +282,7 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
274 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 282 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
275 'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', 283 'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
276 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 284 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
277 - 'Stringable' => __DIR__ . '/..' . '/myclabs/php-enum/stubs/Stringable.php', 285 + 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
278 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', 286 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
279 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', 287 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
280 ); 288 );
@@ -4,11 +4,22 @@ @@ -4,11 +4,22 @@
4 "name": "easywechat-composer/easywechat-composer", 4 "name": "easywechat-composer/easywechat-composer",
5 "version": "1.4.1", 5 "version": "1.4.1",
6 "version_normalized": "1.4.1.0", 6 "version_normalized": "1.4.1.0",
  7 + "source": {
  8 + "type": "git",
  9 + "url": "https://github.com/mingyoung/easywechat-composer.git",
  10 + "reference": "3fc6a7ab6d3853c0f4e2922539b56cc37ef361cd"
  11 + },
7 "dist": { 12 "dist": {
8 "type": "zip", 13 "type": "zip",
9 - "url": "https://mirrors.cloud.tencent.com/repository/composer/easywechat-composer/easywechat-composer/1.4.1/easywechat-composer-easywechat-composer-1.4.1.zip", 14 + "url": "https://api.github.com/repos/mingyoung/easywechat-composer/zipball/3fc6a7ab6d3853c0f4e2922539b56cc37ef361cd",
10 "reference": "3fc6a7ab6d3853c0f4e2922539b56cc37ef361cd", 15 "reference": "3fc6a7ab6d3853c0f4e2922539b56cc37ef361cd",
11 - "shasum": "" 16 + "shasum": "",
  17 + "mirrors": [
  18 + {
  19 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  20 + "preferred": true
  21 + }
  22 + ]
12 }, 23 },
13 "require": { 24 "require": {
14 "composer-plugin-api": "^1.0 || ^2.0", 25 "composer-plugin-api": "^1.0 || ^2.0",
@@ -29,6 +40,7 @@ @@ -29,6 +40,7 @@
29 "EasyWeChatComposer\\": "src/" 40 "EasyWeChatComposer\\": "src/"
30 } 41 }
31 }, 42 },
  43 + "notification-url": "https://packagist.org/downloads/",
32 "license": [ 44 "license": [
33 "MIT" 45 "MIT"
34 ], 46 ],
@@ -39,17 +51,32 @@ @@ -39,17 +51,32 @@
39 } 51 }
40 ], 52 ],
41 "description": "The composer plugin for EasyWeChat", 53 "description": "The composer plugin for EasyWeChat",
  54 + "support": {
  55 + "issues": "https://github.com/mingyoung/easywechat-composer/issues",
  56 + "source": "https://github.com/mingyoung/easywechat-composer/tree/1.4.1"
  57 + },
42 "install-path": "../easywechat-composer/easywechat-composer" 58 "install-path": "../easywechat-composer/easywechat-composer"
43 }, 59 },
44 { 60 {
45 "name": "ezyang/htmlpurifier", 61 "name": "ezyang/htmlpurifier",
46 "version": "v4.16.0", 62 "version": "v4.16.0",
47 "version_normalized": "4.16.0.0", 63 "version_normalized": "4.16.0.0",
  64 + "source": {
  65 + "type": "git",
  66 + "url": "https://github.com/ezyang/htmlpurifier.git",
  67 + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8"
  68 + },
48 "dist": { 69 "dist": {
49 "type": "zip", 70 "type": "zip",
50 - "url": "https://mirrors.cloud.tencent.com/repository/composer/ezyang/htmlpurifier/v4.16.0/ezyang-htmlpurifier-v4.16.0.zip", 71 + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8",
51 "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8", 72 "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8",
52 - "shasum": "" 73 + "shasum": "",
  74 + "mirrors": [
  75 + {
  76 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  77 + "preferred": true
  78 + }
  79 + ]
53 }, 80 },
54 "require": { 81 "require": {
55 "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0" 82 "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0"
@@ -78,6 +105,7 @@ @@ -78,6 +105,7 @@
78 "/library/HTMLPurifier/Language/" 105 "/library/HTMLPurifier/Language/"
79 ] 106 ]
80 }, 107 },
  108 + "notification-url": "https://packagist.org/downloads/",
81 "license": [ 109 "license": [
82 "LGPL-2.1-or-later" 110 "LGPL-2.1-or-later"
83 ], 111 ],
@@ -93,22 +121,37 @@ @@ -93,22 +121,37 @@
93 "keywords": [ 121 "keywords": [
94 "html" 122 "html"
95 ], 123 ],
  124 + "support": {
  125 + "issues": "https://github.com/ezyang/htmlpurifier/issues",
  126 + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0"
  127 + },
96 "install-path": "../ezyang/htmlpurifier" 128 "install-path": "../ezyang/htmlpurifier"
97 }, 129 },
98 { 130 {
99 "name": "guzzlehttp/guzzle", 131 "name": "guzzlehttp/guzzle",
100 - "version": "7.5.0",  
101 - "version_normalized": "7.5.0.0", 132 + "version": "7.7.0",
  133 + "version_normalized": "7.7.0.0",
  134 + "source": {
  135 + "type": "git",
  136 + "url": "https://github.com/guzzle/guzzle.git",
  137 + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5"
  138 + },
102 "dist": { 139 "dist": {
103 "type": "zip", 140 "type": "zip",
104 - "url": "https://mirrors.cloud.tencent.com/repository/composer/guzzlehttp/guzzle/7.5.0/guzzlehttp-guzzle-7.5.0.zip",  
105 - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba",  
106 - "shasum": "" 141 + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5",
  142 + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5",
  143 + "shasum": "",
  144 + "mirrors": [
  145 + {
  146 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  147 + "preferred": true
  148 + }
  149 + ]
107 }, 150 },
108 "require": { 151 "require": {
109 "ext-json": "*", 152 "ext-json": "*",
110 - "guzzlehttp/promises": "^1.5",  
111 - "guzzlehttp/psr7": "^1.9 || ^2.4", 153 + "guzzlehttp/promises": "^1.5.3 || ^2.0",
  154 + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
112 "php": "^7.2.5 || ^8.0", 155 "php": "^7.2.5 || ^8.0",
113 "psr/http-client": "^1.0", 156 "psr/http-client": "^1.0",
114 "symfony/deprecation-contracts": "^2.2 || ^3.0" 157 "symfony/deprecation-contracts": "^2.2 || ^3.0"
@@ -119,7 +162,8 @@ @@ -119,7 +162,8 @@
119 "require-dev": { 162 "require-dev": {
120 "bamarni/composer-bin-plugin": "^1.8.1", 163 "bamarni/composer-bin-plugin": "^1.8.1",
121 "ext-curl": "*", 164 "ext-curl": "*",
122 - "php-http/client-integration-tests": "^3.0", 165 + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
  166 + "php-http/message-factory": "^1.1",
123 "phpunit/phpunit": "^8.5.29 || ^9.5.23", 167 "phpunit/phpunit": "^8.5.29 || ^9.5.23",
124 "psr/log": "^1.1 || ^2.0 || ^3.0" 168 "psr/log": "^1.1 || ^2.0 || ^3.0"
125 }, 169 },
@@ -128,15 +172,12 @@ @@ -128,15 +172,12 @@
128 "ext-intl": "Required for Internationalized Domain Name (IDN) support", 172 "ext-intl": "Required for Internationalized Domain Name (IDN) support",
129 "psr/log": "Required for using the Log middleware" 173 "psr/log": "Required for using the Log middleware"
130 }, 174 },
131 - "time": "2022-08-28T15:39:27+00:00", 175 + "time": "2023-05-21T14:04:53+00:00",
132 "type": "library", 176 "type": "library",
133 "extra": { 177 "extra": {
134 "bamarni-bin": { 178 "bamarni-bin": {
135 "bin-links": true, 179 "bin-links": true,
136 "forward-command": false 180 "forward-command": false
137 - },  
138 - "branch-alias": {  
139 - "dev-master": "7.5-dev"  
140 } 181 }
141 }, 182 },
142 "installation-source": "dist", 183 "installation-source": "dist",
@@ -148,6 +189,7 @@ @@ -148,6 +189,7 @@
148 "GuzzleHttp\\": "src/" 189 "GuzzleHttp\\": "src/"
149 } 190 }
150 }, 191 },
  192 + "notification-url": "https://packagist.org/downloads/",
151 "license": [ 193 "license": [
152 "MIT" 194 "MIT"
153 ], 195 ],
@@ -200,17 +242,46 @@ @@ -200,17 +242,46 @@
200 "rest", 242 "rest",
201 "web service" 243 "web service"
202 ], 244 ],
  245 + "support": {
  246 + "issues": "https://github.com/guzzle/guzzle/issues",
  247 + "source": "https://github.com/guzzle/guzzle/tree/7.7.0"
  248 + },
  249 + "funding": [
  250 + {
  251 + "url": "https://github.com/GrahamCampbell",
  252 + "type": "github"
  253 + },
  254 + {
  255 + "url": "https://github.com/Nyholm",
  256 + "type": "github"
  257 + },
  258 + {
  259 + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
  260 + "type": "tidelift"
  261 + }
  262 + ],
203 "install-path": "../guzzlehttp/guzzle" 263 "install-path": "../guzzlehttp/guzzle"
204 }, 264 },
205 { 265 {
206 "name": "guzzlehttp/promises", 266 "name": "guzzlehttp/promises",
207 - "version": "1.5.2",  
208 - "version_normalized": "1.5.2.0", 267 + "version": "1.5.3",
  268 + "version_normalized": "1.5.3.0",
  269 + "source": {
  270 + "type": "git",
  271 + "url": "https://github.com/guzzle/promises.git",
  272 + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e"
  273 + },
209 "dist": { 274 "dist": {
210 "type": "zip", 275 "type": "zip",
211 - "url": "https://mirrors.cloud.tencent.com/repository/composer/guzzlehttp/promises/1.5.2/guzzlehttp-promises-1.5.2.zip",  
212 - "reference": "b94b2807d85443f9719887892882d0329d1e2598",  
213 - "shasum": "" 276 + "url": "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e",
  277 + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e",
  278 + "shasum": "",
  279 + "mirrors": [
  280 + {
  281 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  282 + "preferred": true
  283 + }
  284 + ]
214 }, 285 },
215 "require": { 286 "require": {
216 "php": ">=5.5" 287 "php": ">=5.5"
@@ -218,13 +289,8 @@ @@ -218,13 +289,8 @@
218 "require-dev": { 289 "require-dev": {
219 "symfony/phpunit-bridge": "^4.4 || ^5.1" 290 "symfony/phpunit-bridge": "^4.4 || ^5.1"
220 }, 291 },
221 - "time": "2022-08-28T14:55:35+00:00", 292 + "time": "2023-05-21T12:31:43+00:00",
222 "type": "library", 293 "type": "library",
223 - "extra": {  
224 - "branch-alias": {  
225 - "dev-master": "1.5-dev"  
226 - }  
227 - },  
228 "installation-source": "dist", 294 "installation-source": "dist",
229 "autoload": { 295 "autoload": {
230 "files": [ 296 "files": [
@@ -234,6 +300,7 @@ @@ -234,6 +300,7 @@
234 "GuzzleHttp\\Promise\\": "src/" 300 "GuzzleHttp\\Promise\\": "src/"
235 } 301 }
236 }, 302 },
  303 + "notification-url": "https://packagist.org/downloads/",
237 "license": [ 304 "license": [
238 "MIT" 305 "MIT"
239 ], 306 ],
@@ -263,22 +330,51 @@ @@ -263,22 +330,51 @@
263 "keywords": [ 330 "keywords": [
264 "promise" 331 "promise"
265 ], 332 ],
  333 + "support": {
  334 + "issues": "https://github.com/guzzle/promises/issues",
  335 + "source": "https://github.com/guzzle/promises/tree/1.5.3"
  336 + },
  337 + "funding": [
  338 + {
  339 + "url": "https://github.com/GrahamCampbell",
  340 + "type": "github"
  341 + },
  342 + {
  343 + "url": "https://github.com/Nyholm",
  344 + "type": "github"
  345 + },
  346 + {
  347 + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
  348 + "type": "tidelift"
  349 + }
  350 + ],
266 "install-path": "../guzzlehttp/promises" 351 "install-path": "../guzzlehttp/promises"
267 }, 352 },
268 { 353 {
269 "name": "guzzlehttp/psr7", 354 "name": "guzzlehttp/psr7",
270 - "version": "2.4.3",  
271 - "version_normalized": "2.4.3.0", 355 + "version": "2.5.0",
  356 + "version_normalized": "2.5.0.0",
  357 + "source": {
  358 + "type": "git",
  359 + "url": "https://github.com/guzzle/psr7.git",
  360 + "reference": "b635f279edd83fc275f822a1188157ffea568ff6"
  361 + },
272 "dist": { 362 "dist": {
273 "type": "zip", 363 "type": "zip",
274 - "url": "https://mirrors.cloud.tencent.com/repository/composer/guzzlehttp/psr7/2.4.3/guzzlehttp-psr7-2.4.3.zip",  
275 - "reference": "67c26b443f348a51926030c83481b85718457d3d",  
276 - "shasum": "" 364 + "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6",
  365 + "reference": "b635f279edd83fc275f822a1188157ffea568ff6",
  366 + "shasum": "",
  367 + "mirrors": [
  368 + {
  369 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  370 + "preferred": true
  371 + }
  372 + ]
277 }, 373 },
278 "require": { 374 "require": {
279 "php": "^7.2.5 || ^8.0", 375 "php": "^7.2.5 || ^8.0",
280 "psr/http-factory": "^1.0", 376 "psr/http-factory": "^1.0",
281 - "psr/http-message": "^1.0", 377 + "psr/http-message": "^1.1 || ^2.0",
282 "ralouphie/getallheaders": "^3.0" 378 "ralouphie/getallheaders": "^3.0"
283 }, 379 },
284 "provide": { 380 "provide": {
@@ -293,15 +389,12 @@ @@ -293,15 +389,12 @@
293 "suggest": { 389 "suggest": {
294 "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" 390 "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
295 }, 391 },
296 - "time": "2022-10-26T14:07:24+00:00", 392 + "time": "2023-04-17T16:11:26+00:00",
297 "type": "library", 393 "type": "library",
298 "extra": { 394 "extra": {
299 "bamarni-bin": { 395 "bamarni-bin": {
300 "bin-links": true, 396 "bin-links": true,
301 "forward-command": false 397 "forward-command": false
302 - },  
303 - "branch-alias": {  
304 - "dev-master": "2.4-dev"  
305 } 398 }
306 }, 399 },
307 "installation-source": "dist", 400 "installation-source": "dist",
@@ -310,6 +403,7 @@ @@ -310,6 +403,7 @@
310 "GuzzleHttp\\Psr7\\": "src/" 403 "GuzzleHttp\\Psr7\\": "src/"
311 } 404 }
312 }, 405 },
  406 + "notification-url": "https://packagist.org/downloads/",
313 "license": [ 407 "license": [
314 "MIT" 408 "MIT"
315 ], 409 ],
@@ -361,17 +455,46 @@ @@ -361,17 +455,46 @@
361 "uri", 455 "uri",
362 "url" 456 "url"
363 ], 457 ],
  458 + "support": {
  459 + "issues": "https://github.com/guzzle/psr7/issues",
  460 + "source": "https://github.com/guzzle/psr7/tree/2.5.0"
  461 + },
  462 + "funding": [
  463 + {
  464 + "url": "https://github.com/GrahamCampbell",
  465 + "type": "github"
  466 + },
  467 + {
  468 + "url": "https://github.com/Nyholm",
  469 + "type": "github"
  470 + },
  471 + {
  472 + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
  473 + "type": "tidelift"
  474 + }
  475 + ],
364 "install-path": "../guzzlehttp/psr7" 476 "install-path": "../guzzlehttp/psr7"
365 }, 477 },
366 { 478 {
367 "name": "karsonzhang/fastadmin-addons", 479 "name": "karsonzhang/fastadmin-addons",
368 "version": "1.3.3", 480 "version": "1.3.3",
369 "version_normalized": "1.3.3.0", 481 "version_normalized": "1.3.3.0",
  482 + "source": {
  483 + "type": "git",
  484 + "url": "https://github.com/karsonzhang/fastadmin-addons.git",
  485 + "reference": "f5bb4dabda55271b08371a8ae9355a205be48c56"
  486 + },
370 "dist": { 487 "dist": {
371 "type": "zip", 488 "type": "zip",
372 - "url": "https://mirrors.cloud.tencent.com/repository/composer/karsonzhang/fastadmin-addons/1.3.3/karsonzhang-fastadmin-addons-1.3.3.zip", 489 + "url": "https://api.github.com/repos/karsonzhang/fastadmin-addons/zipball/f5bb4dabda55271b08371a8ae9355a205be48c56",
373 "reference": "f5bb4dabda55271b08371a8ae9355a205be48c56", 490 "reference": "f5bb4dabda55271b08371a8ae9355a205be48c56",
374 - "shasum": "" 491 + "shasum": "",
  492 + "mirrors": [
  493 + {
  494 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  495 + "preferred": true
  496 + }
  497 + ]
375 }, 498 },
376 "require": { 499 "require": {
377 "nelexa/zip": "^3.3", 500 "nelexa/zip": "^3.3",
@@ -394,6 +517,7 @@ @@ -394,6 +517,7 @@
394 "think\\": "src/" 517 "think\\": "src/"
395 } 518 }
396 }, 519 },
  520 + "notification-url": "https://packagist.org/downloads/",
397 "license": [ 521 "license": [
398 "Apache-2.0" 522 "Apache-2.0"
399 ], 523 ],
@@ -409,17 +533,85 @@ @@ -409,17 +533,85 @@
409 ], 533 ],
410 "description": "addons package for fastadmin", 534 "description": "addons package for fastadmin",
411 "homepage": "https://github.com/karsonzhang/fastadmin-addons", 535 "homepage": "https://github.com/karsonzhang/fastadmin-addons",
  536 + "support": {
  537 + "issues": "https://github.com/karsonzhang/fastadmin-addons/issues",
  538 + "source": "https://github.com/karsonzhang/fastadmin-addons/tree/v1.3.3"
  539 + },
412 "install-path": "../karsonzhang/fastadmin-addons" 540 "install-path": "../karsonzhang/fastadmin-addons"
413 }, 541 },
414 { 542 {
  543 + "name": "kkokk/poster",
  544 + "version": "v2.0.6",
  545 + "version_normalized": "2.0.6.0",
  546 + "source": {
  547 + "type": "git",
  548 + "url": "https://github.com/kkokk/poster.git",
  549 + "reference": "a657ab240330b2d667416431fd7454dff73bebdf"
  550 + },
  551 + "dist": {
  552 + "type": "zip",
  553 + "url": "https://api.github.com/repos/kkokk/poster/zipball/a657ab240330b2d667416431fd7454dff73bebdf",
  554 + "reference": "a657ab240330b2d667416431fd7454dff73bebdf",
  555 + "shasum": "",
  556 + "mirrors": [
  557 + {
  558 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  559 + "preferred": true
  560 + }
  561 + ]
  562 + },
  563 + "require": {
  564 + "ext-gd": "*",
  565 + "ext-iconv": "*",
  566 + "ext-json": "*",
  567 + "ext-mbstring": "*",
  568 + "php": ">=5.6.0"
  569 + },
  570 + "time": "2023-05-19T10:39:17+00:00",
  571 + "type": "project",
  572 + "installation-source": "dist",
  573 + "autoload": {
  574 + "psr-4": {
  575 + "Kkokk\\Poster\\": "src/"
  576 + }
  577 + },
  578 + "notification-url": "https://packagist.org/downloads/",
  579 + "license": [
  580 + "MIT"
  581 + ],
  582 + "authors": [
  583 + {
  584 + "name": "lang",
  585 + "email": "732853989@qq.com"
  586 + }
  587 + ],
  588 + "description": "PHP生成海报",
  589 + "support": {
  590 + "issues": "https://github.com/kkokk/poster/issues",
  591 + "source": "https://github.com/kkokk/poster/tree/v2.0.6"
  592 + },
  593 + "install-path": "../kkokk/poster"
  594 + },
  595 + {
415 "name": "maennchen/zipstream-php", 596 "name": "maennchen/zipstream-php",
416 "version": "2.2.6", 597 "version": "2.2.6",
417 "version_normalized": "2.2.6.0", 598 "version_normalized": "2.2.6.0",
  599 + "source": {
  600 + "type": "git",
  601 + "url": "https://github.com/maennchen/ZipStream-PHP.git",
  602 + "reference": "30ad6f93cf3efe4192bc7a4c9cad11ff8f4f237f"
  603 + },
418 "dist": { 604 "dist": {
419 "type": "zip", 605 "type": "zip",
420 - "url": "https://mirrors.cloud.tencent.com/repository/composer/maennchen/zipstream-php/2.2.6/maennchen-zipstream-php-2.2.6.zip", 606 + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/30ad6f93cf3efe4192bc7a4c9cad11ff8f4f237f",
421 "reference": "30ad6f93cf3efe4192bc7a4c9cad11ff8f4f237f", 607 "reference": "30ad6f93cf3efe4192bc7a4c9cad11ff8f4f237f",
422 - "shasum": "" 608 + "shasum": "",
  609 + "mirrors": [
  610 + {
  611 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  612 + "preferred": true
  613 + }
  614 + ]
423 }, 615 },
424 "require": { 616 "require": {
425 "myclabs/php-enum": "^1.5", 617 "myclabs/php-enum": "^1.5",
@@ -444,6 +636,7 @@ @@ -444,6 +636,7 @@
444 "ZipStream\\": "src/" 636 "ZipStream\\": "src/"
445 } 637 }
446 }, 638 },
  639 + "notification-url": "https://packagist.org/downloads/",
447 "license": [ 640 "license": [
448 "MIT" 641 "MIT"
449 ], 642 ],
@@ -470,17 +663,42 @@ @@ -470,17 +663,42 @@
470 "stream", 663 "stream",
471 "zip" 664 "zip"
472 ], 665 ],
  666 + "support": {
  667 + "issues": "https://github.com/maennchen/ZipStream-PHP/issues",
  668 + "source": "https://github.com/maennchen/ZipStream-PHP/tree/2.2.6"
  669 + },
  670 + "funding": [
  671 + {
  672 + "url": "https://github.com/maennchen",
  673 + "type": "github"
  674 + },
  675 + {
  676 + "url": "https://opencollective.com/zipstream",
  677 + "type": "open_collective"
  678 + }
  679 + ],
473 "install-path": "../maennchen/zipstream-php" 680 "install-path": "../maennchen/zipstream-php"
474 }, 681 },
475 { 682 {
476 "name": "markbaker/complex", 683 "name": "markbaker/complex",
477 "version": "3.0.2", 684 "version": "3.0.2",
478 "version_normalized": "3.0.2.0", 685 "version_normalized": "3.0.2.0",
  686 + "source": {
  687 + "type": "git",
  688 + "url": "https://github.com/MarkBaker/PHPComplex.git",
  689 + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9"
  690 + },
479 "dist": { 691 "dist": {
480 "type": "zip", 692 "type": "zip",
481 - "url": "https://mirrors.cloud.tencent.com/repository/composer/markbaker/complex/3.0.2/markbaker-complex-3.0.2.zip", 693 + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9",
482 "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", 694 "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9",
483 - "shasum": "" 695 + "shasum": "",
  696 + "mirrors": [
  697 + {
  698 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  699 + "preferred": true
  700 + }
  701 + ]
484 }, 702 },
485 "require": { 703 "require": {
486 "php": "^7.2 || ^8.0" 704 "php": "^7.2 || ^8.0"
@@ -499,6 +717,7 @@ @@ -499,6 +717,7 @@
499 "Complex\\": "classes/src/" 717 "Complex\\": "classes/src/"
500 } 718 }
501 }, 719 },
  720 + "notification-url": "https://packagist.org/downloads/",
502 "license": [ 721 "license": [
503 "MIT" 722 "MIT"
504 ], 723 ],
@@ -514,17 +733,32 @@ @@ -514,17 +733,32 @@
514 "complex", 733 "complex",
515 "mathematics" 734 "mathematics"
516 ], 735 ],
  736 + "support": {
  737 + "issues": "https://github.com/MarkBaker/PHPComplex/issues",
  738 + "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2"
  739 + },
517 "install-path": "../markbaker/complex" 740 "install-path": "../markbaker/complex"
518 }, 741 },
519 { 742 {
520 "name": "markbaker/matrix", 743 "name": "markbaker/matrix",
521 "version": "3.0.1", 744 "version": "3.0.1",
522 "version_normalized": "3.0.1.0", 745 "version_normalized": "3.0.1.0",
  746 + "source": {
  747 + "type": "git",
  748 + "url": "https://github.com/MarkBaker/PHPMatrix.git",
  749 + "reference": "728434227fe21be27ff6d86621a1b13107a2562c"
  750 + },
523 "dist": { 751 "dist": {
524 "type": "zip", 752 "type": "zip",
525 - "url": "https://mirrors.cloud.tencent.com/repository/composer/markbaker/matrix/3.0.1/markbaker-matrix-3.0.1.zip", 753 + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c",
526 "reference": "728434227fe21be27ff6d86621a1b13107a2562c", 754 "reference": "728434227fe21be27ff6d86621a1b13107a2562c",
527 - "shasum": "" 755 + "shasum": "",
  756 + "mirrors": [
  757 + {
  758 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  759 + "preferred": true
  760 + }
  761 + ]
528 }, 762 },
529 "require": { 763 "require": {
530 "php": "^7.1 || ^8.0" 764 "php": "^7.1 || ^8.0"
@@ -547,6 +781,7 @@ @@ -547,6 +781,7 @@
547 "Matrix\\": "classes/src/" 781 "Matrix\\": "classes/src/"
548 } 782 }
549 }, 783 },
  784 + "notification-url": "https://packagist.org/downloads/",
550 "license": [ 785 "license": [
551 "MIT" 786 "MIT"
552 ], 787 ],
@@ -563,17 +798,32 @@ @@ -563,17 +798,32 @@
563 "matrix", 798 "matrix",
564 "vector" 799 "vector"
565 ], 800 ],
  801 + "support": {
  802 + "issues": "https://github.com/MarkBaker/PHPMatrix/issues",
  803 + "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1"
  804 + },
566 "install-path": "../markbaker/matrix" 805 "install-path": "../markbaker/matrix"
567 }, 806 },
568 { 807 {
569 "name": "monolog/monolog", 808 "name": "monolog/monolog",
570 - "version": "2.8.0",  
571 - "version_normalized": "2.8.0.0", 809 + "version": "2.9.0",
  810 + "version_normalized": "2.9.0.0",
  811 + "source": {
  812 + "type": "git",
  813 + "url": "https://github.com/Seldaek/monolog.git",
  814 + "reference": "e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb"
  815 + },
572 "dist": { 816 "dist": {
573 "type": "zip", 817 "type": "zip",
574 - "url": "https://mirrors.cloud.tencent.com/repository/composer/monolog/monolog/2.8.0/monolog-monolog-2.8.0.zip",  
575 - "reference": "720488632c590286b88b80e62aa3d3d551ad4a50",  
576 - "shasum": "" 818 + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb",
  819 + "reference": "e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb",
  820 + "shasum": "",
  821 + "mirrors": [
  822 + {
  823 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  824 + "preferred": true
  825 + }
  826 + ]
577 }, 827 },
578 "require": { 828 "require": {
579 "php": ">=7.2", 829 "php": ">=7.2",
@@ -587,7 +837,7 @@ @@ -587,7 +837,7 @@
587 "doctrine/couchdb": "~1.0@dev", 837 "doctrine/couchdb": "~1.0@dev",
588 "elasticsearch/elasticsearch": "^7 || ^8", 838 "elasticsearch/elasticsearch": "^7 || ^8",
589 "ext-json": "*", 839 "ext-json": "*",
590 - "graylog2/gelf-php": "^1.4.2", 840 + "graylog2/gelf-php": "^1.4.2 || ^2@dev",
591 "guzzlehttp/guzzle": "^7.4", 841 "guzzlehttp/guzzle": "^7.4",
592 "guzzlehttp/psr7": "^2.2", 842 "guzzlehttp/psr7": "^2.2",
593 "mongodb/mongodb": "^1.8", 843 "mongodb/mongodb": "^1.8",
@@ -618,7 +868,7 @@ @@ -618,7 +868,7 @@
618 "rollbar/rollbar": "Allow sending log messages to Rollbar", 868 "rollbar/rollbar": "Allow sending log messages to Rollbar",
619 "ruflin/elastica": "Allow sending log messages to an Elastic Search server" 869 "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
620 }, 870 },
621 - "time": "2022-07-24T11:55:47+00:00", 871 + "time": "2023-02-05T13:07:32+00:00",
622 "type": "library", 872 "type": "library",
623 "extra": { 873 "extra": {
624 "branch-alias": { 874 "branch-alias": {
@@ -631,6 +881,7 @@ @@ -631,6 +881,7 @@
631 "Monolog\\": "src/Monolog" 881 "Monolog\\": "src/Monolog"
632 } 882 }
633 }, 883 },
  884 + "notification-url": "https://packagist.org/downloads/",
634 "license": [ 885 "license": [
635 "MIT" 886 "MIT"
636 ], 887 ],
@@ -648,17 +899,42 @@ @@ -648,17 +899,42 @@
648 "logging", 899 "logging",
649 "psr-3" 900 "psr-3"
650 ], 901 ],
  902 + "support": {
  903 + "issues": "https://github.com/Seldaek/monolog/issues",
  904 + "source": "https://github.com/Seldaek/monolog/tree/2.9.0"
  905 + },
  906 + "funding": [
  907 + {
  908 + "url": "https://github.com/Seldaek",
  909 + "type": "github"
  910 + },
  911 + {
  912 + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
  913 + "type": "tidelift"
  914 + }
  915 + ],
651 "install-path": "../monolog/monolog" 916 "install-path": "../monolog/monolog"
652 }, 917 },
653 { 918 {
654 "name": "myclabs/php-enum", 919 "name": "myclabs/php-enum",
655 - "version": "1.8.4",  
656 - "version_normalized": "1.8.4.0", 920 + "version": "1.8.3",
  921 + "version_normalized": "1.8.3.0",
  922 + "source": {
  923 + "type": "git",
  924 + "url": "https://github.com/myclabs/php-enum.git",
  925 + "reference": "b942d263c641ddb5190929ff840c68f78713e937"
  926 + },
657 "dist": { 927 "dist": {
658 "type": "zip", 928 "type": "zip",
659 - "url": "https://mirrors.cloud.tencent.com/repository/composer/myclabs/php-enum/1.8.4/myclabs-php-enum-1.8.4.zip",  
660 - "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483",  
661 - "shasum": "" 929 + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/b942d263c641ddb5190929ff840c68f78713e937",
  930 + "reference": "b942d263c641ddb5190929ff840c68f78713e937",
  931 + "shasum": "",
  932 + "mirrors": [
  933 + {
  934 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  935 + "preferred": true
  936 + }
  937 + ]
662 }, 938 },
663 "require": { 939 "require": {
664 "ext-json": "*", 940 "ext-json": "*",
@@ -669,17 +945,15 @@ @@ -669,17 +945,15 @@
669 "squizlabs/php_codesniffer": "1.*", 945 "squizlabs/php_codesniffer": "1.*",
670 "vimeo/psalm": "^4.6.2" 946 "vimeo/psalm": "^4.6.2"
671 }, 947 },
672 - "time": "2022-08-04T09:53:51+00:00", 948 + "time": "2021-07-05T08:18:36+00:00",
673 "type": "library", 949 "type": "library",
674 "installation-source": "dist", 950 "installation-source": "dist",
675 "autoload": { 951 "autoload": {
676 "psr-4": { 952 "psr-4": {
677 "MyCLabs\\Enum\\": "src/" 953 "MyCLabs\\Enum\\": "src/"
678 - },  
679 - "classmap": [  
680 - "stubs/Stringable.php"  
681 - ] 954 + }
682 }, 955 },
  956 + "notification-url": "https://packagist.org/downloads/",
683 "license": [ 957 "license": [
684 "MIT" 958 "MIT"
685 ], 959 ],
@@ -694,17 +968,42 @@ @@ -694,17 +968,42 @@
694 "keywords": [ 968 "keywords": [
695 "enum" 969 "enum"
696 ], 970 ],
  971 + "support": {
  972 + "issues": "https://github.com/myclabs/php-enum/issues",
  973 + "source": "https://github.com/myclabs/php-enum/tree/1.8.3"
  974 + },
  975 + "funding": [
  976 + {
  977 + "url": "https://github.com/mnapoli",
  978 + "type": "github"
  979 + },
  980 + {
  981 + "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum",
  982 + "type": "tidelift"
  983 + }
  984 + ],
697 "install-path": "../myclabs/php-enum" 985 "install-path": "../myclabs/php-enum"
698 }, 986 },
699 { 987 {
700 "name": "nelexa/zip", 988 "name": "nelexa/zip",
701 "version": "3.3.3", 989 "version": "3.3.3",
702 "version_normalized": "3.3.3.0", 990 "version_normalized": "3.3.3.0",
  991 + "source": {
  992 + "type": "git",
  993 + "url": "https://github.com/Ne-Lexa/php-zip.git",
  994 + "reference": "501b52f6fc393a599b44ff348a42740e1eaac7c6"
  995 + },
703 "dist": { 996 "dist": {
704 "type": "zip", 997 "type": "zip",
705 - "url": "https://mirrors.cloud.tencent.com/repository/composer/nelexa/zip/3.3.3/nelexa-zip-3.3.3.zip", 998 + "url": "https://api.github.com/repos/Ne-Lexa/php-zip/zipball/501b52f6fc393a599b44ff348a42740e1eaac7c6",
706 "reference": "501b52f6fc393a599b44ff348a42740e1eaac7c6", 999 "reference": "501b52f6fc393a599b44ff348a42740e1eaac7c6",
707 - "shasum": "" 1000 + "shasum": "",
  1001 + "mirrors": [
  1002 + {
  1003 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1004 + "preferred": true
  1005 + }
  1006 + ]
708 }, 1007 },
709 "require": { 1008 "require": {
710 "ext-zlib": "*", 1009 "ext-zlib": "*",
@@ -736,6 +1035,7 @@ @@ -736,6 +1035,7 @@
736 "PhpZip\\": "src/" 1035 "PhpZip\\": "src/"
737 } 1036 }
738 }, 1037 },
  1038 + "notification-url": "https://packagist.org/downloads/",
739 "license": [ 1039 "license": [
740 "MIT" 1040 "MIT"
741 ], 1041 ],
@@ -757,17 +1057,32 @@ @@ -757,17 +1057,32 @@
757 "zipalign", 1057 "zipalign",
758 "ziparchive" 1058 "ziparchive"
759 ], 1059 ],
  1060 + "support": {
  1061 + "issues": "https://github.com/Ne-Lexa/php-zip/issues",
  1062 + "source": "https://github.com/Ne-Lexa/php-zip/tree/3.3.3"
  1063 + },
760 "install-path": "../nelexa/zip" 1064 "install-path": "../nelexa/zip"
761 }, 1065 },
762 { 1066 {
763 "name": "overtrue/pinyin", 1067 "name": "overtrue/pinyin",
764 "version": "3.0.6", 1068 "version": "3.0.6",
765 "version_normalized": "3.0.6.0", 1069 "version_normalized": "3.0.6.0",
  1070 + "source": {
  1071 + "type": "git",
  1072 + "url": "https://github.com/overtrue/pinyin.git",
  1073 + "reference": "3b781d267197b74752daa32814d3a2cf5d140779"
  1074 + },
766 "dist": { 1075 "dist": {
767 "type": "zip", 1076 "type": "zip",
768 - "url": "https://mirrors.cloud.tencent.com/repository/composer/overtrue/pinyin/3.0.6/overtrue-pinyin-3.0.6.zip", 1077 + "url": "https://api.github.com/repos/overtrue/pinyin/zipball/3b781d267197b74752daa32814d3a2cf5d140779",
769 "reference": "3b781d267197b74752daa32814d3a2cf5d140779", 1078 "reference": "3b781d267197b74752daa32814d3a2cf5d140779",
770 - "shasum": "" 1079 + "shasum": "",
  1080 + "mirrors": [
  1081 + {
  1082 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1083 + "preferred": true
  1084 + }
  1085 + ]
771 }, 1086 },
772 "require": { 1087 "require": {
773 "php": ">=5.3" 1088 "php": ">=5.3"
@@ -783,6 +1098,7 @@ @@ -783,6 +1098,7 @@
783 "Overtrue\\Pinyin\\": "src/" 1098 "Overtrue\\Pinyin\\": "src/"
784 } 1099 }
785 }, 1100 },
  1101 + "notification-url": "https://packagist.org/downloads/",
786 "license": [ 1102 "license": [
787 "MIT" 1103 "MIT"
788 ], 1104 ],
@@ -799,17 +1115,32 @@ @@ -799,17 +1115,32 @@
799 "Pinyin", 1115 "Pinyin",
800 "cn2pinyin" 1116 "cn2pinyin"
801 ], 1117 ],
  1118 + "support": {
  1119 + "issues": "https://github.com/overtrue/pinyin/issues",
  1120 + "source": "https://github.com/overtrue/pinyin/tree/master"
  1121 + },
802 "install-path": "../overtrue/pinyin" 1122 "install-path": "../overtrue/pinyin"
803 }, 1123 },
804 { 1124 {
805 "name": "overtrue/socialite", 1125 "name": "overtrue/socialite",
806 "version": "2.0.24", 1126 "version": "2.0.24",
807 "version_normalized": "2.0.24.0", 1127 "version_normalized": "2.0.24.0",
  1128 + "source": {
  1129 + "type": "git",
  1130 + "url": "https://github.com/overtrue/socialite.git",
  1131 + "reference": "ee7e7b000ec7d64f2b8aba1f6a2eec5cdf3f8bec"
  1132 + },
808 "dist": { 1133 "dist": {
809 "type": "zip", 1134 "type": "zip",
810 - "url": "https://mirrors.tencent.com/repository/composer/overtrue/socialite/2.0.24/overtrue-socialite-2.0.24.zip", 1135 + "url": "https://api.github.com/repos/overtrue/socialite/zipball/ee7e7b000ec7d64f2b8aba1f6a2eec5cdf3f8bec",
811 "reference": "ee7e7b000ec7d64f2b8aba1f6a2eec5cdf3f8bec", 1136 "reference": "ee7e7b000ec7d64f2b8aba1f6a2eec5cdf3f8bec",
812 - "shasum": "" 1137 + "shasum": "",
  1138 + "mirrors": [
  1139 + {
  1140 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1141 + "preferred": true
  1142 + }
  1143 + ]
813 }, 1144 },
814 "require": { 1145 "require": {
815 "ext-json": "*", 1146 "ext-json": "*",
@@ -829,6 +1160,7 @@ @@ -829,6 +1160,7 @@
829 "Overtrue\\Socialite\\": "src/" 1160 "Overtrue\\Socialite\\": "src/"
830 } 1161 }
831 }, 1162 },
  1163 + "notification-url": "https://packagist.org/downloads/",
832 "license": [ 1164 "license": [
833 "MIT" 1165 "MIT"
834 ], 1166 ],
@@ -847,17 +1179,38 @@ @@ -847,17 +1179,38 @@
847 "wechat", 1179 "wechat",
848 "weibo" 1180 "weibo"
849 ], 1181 ],
  1182 + "support": {
  1183 + "issues": "https://github.com/overtrue/socialite/issues",
  1184 + "source": "https://github.com/overtrue/socialite/tree/2.0.24"
  1185 + },
  1186 + "funding": [
  1187 + {
  1188 + "url": "https://www.patreon.com/overtrue",
  1189 + "type": "patreon"
  1190 + }
  1191 + ],
850 "install-path": "../overtrue/socialite" 1192 "install-path": "../overtrue/socialite"
851 }, 1193 },
852 { 1194 {
853 "name": "overtrue/wechat", 1195 "name": "overtrue/wechat",
854 - "version": "4.7.0",  
855 - "version_normalized": "4.7.0.0", 1196 + "version": "4.6.0",
  1197 + "version_normalized": "4.6.0.0",
  1198 + "source": {
  1199 + "type": "git",
  1200 + "url": "https://github.com/w7corp/easywechat.git",
  1201 + "reference": "52af4cbe777cd4aea307beafa0a4518c347467b1"
  1202 + },
856 "dist": { 1203 "dist": {
857 "type": "zip", 1204 "type": "zip",
858 - "url": "https://mirrors.cloud.tencent.com/repository/composer/overtrue/wechat/4.7.0/overtrue-wechat-4.7.0.zip",  
859 - "reference": "4accb0627803ffb6e45d2988898a0293d2a48e68",  
860 - "shasum": "" 1205 + "url": "https://api.github.com/repos/w7corp/easywechat/zipball/52af4cbe777cd4aea307beafa0a4518c347467b1",
  1206 + "reference": "52af4cbe777cd4aea307beafa0a4518c347467b1",
  1207 + "shasum": "",
  1208 + "mirrors": [
  1209 + {
  1210 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1211 + "preferred": true
  1212 + }
  1213 + ]
861 }, 1214 },
862 "require": { 1215 "require": {
863 "easywechat-composer/easywechat-composer": "^1.1", 1216 "easywechat-composer/easywechat-composer": "^1.1",
@@ -882,7 +1235,7 @@ @@ -882,7 +1235,7 @@
882 "phpstan/phpstan": "^0.12.0", 1235 "phpstan/phpstan": "^0.12.0",
883 "phpunit/phpunit": "^7.5" 1236 "phpunit/phpunit": "^7.5"
884 }, 1237 },
885 - "time": "2022-10-21T07:00:02+00:00", 1238 + "time": "2022-08-24T07:30:42+00:00",
886 "type": "library", 1239 "type": "library",
887 "installation-source": "dist", 1240 "installation-source": "dist",
888 "autoload": { 1241 "autoload": {
@@ -894,6 +1247,7 @@ @@ -894,6 +1247,7 @@
894 "EasyWeChat\\": "src/" 1247 "EasyWeChat\\": "src/"
895 } 1248 }
896 }, 1249 },
  1250 + "notification-url": "https://packagist.org/downloads/",
897 "license": [ 1251 "license": [
898 "MIT" 1252 "MIT"
899 ], 1253 ],
@@ -911,17 +1265,39 @@ @@ -911,17 +1265,39 @@
911 "weixin", 1265 "weixin",
912 "weixin-sdk" 1266 "weixin-sdk"
913 ], 1267 ],
  1268 + "support": {
  1269 + "issues": "https://github.com/w7corp/easywechat/issues",
  1270 + "source": "https://github.com/w7corp/easywechat/tree/4.6.0"
  1271 + },
  1272 + "funding": [
  1273 + {
  1274 + "url": "https://github.com/overtrue",
  1275 + "type": "github"
  1276 + }
  1277 + ],
  1278 + "abandoned": "w7corp/easywechat",
914 "install-path": "../overtrue/wechat" 1279 "install-path": "../overtrue/wechat"
915 }, 1280 },
916 { 1281 {
917 "name": "paragonie/random_compat", 1282 "name": "paragonie/random_compat",
918 "version": "v9.99.100", 1283 "version": "v9.99.100",
919 "version_normalized": "9.99.100.0", 1284 "version_normalized": "9.99.100.0",
  1285 + "source": {
  1286 + "type": "git",
  1287 + "url": "https://github.com/paragonie/random_compat.git",
  1288 + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
  1289 + },
920 "dist": { 1290 "dist": {
921 "type": "zip", 1291 "type": "zip",
922 - "url": "https://mirrors.cloud.tencent.com/repository/composer/paragonie/random_compat/v9.99.100/paragonie-random_compat-v9.99.100.zip", 1292 + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
923 "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", 1293 "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
924 - "shasum": "" 1294 + "shasum": "",
  1295 + "mirrors": [
  1296 + {
  1297 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1298 + "preferred": true
  1299 + }
  1300 + ]
925 }, 1301 },
926 "require": { 1302 "require": {
927 "php": ">= 7" 1303 "php": ">= 7"
@@ -936,6 +1312,7 @@ @@ -936,6 +1312,7 @@
936 "time": "2020-10-15T08:29:30+00:00", 1312 "time": "2020-10-15T08:29:30+00:00",
937 "type": "library", 1313 "type": "library",
938 "installation-source": "dist", 1314 "installation-source": "dist",
  1315 + "notification-url": "https://packagist.org/downloads/",
939 "license": [ 1316 "license": [
940 "MIT" 1317 "MIT"
941 ], 1318 ],
@@ -953,17 +1330,33 @@ @@ -953,17 +1330,33 @@
953 "pseudorandom", 1330 "pseudorandom",
954 "random" 1331 "random"
955 ], 1332 ],
  1333 + "support": {
  1334 + "email": "info@paragonie.com",
  1335 + "issues": "https://github.com/paragonie/random_compat/issues",
  1336 + "source": "https://github.com/paragonie/random_compat"
  1337 + },
956 "install-path": "../paragonie/random_compat" 1338 "install-path": "../paragonie/random_compat"
957 }, 1339 },
958 { 1340 {
959 "name": "phpoffice/phpspreadsheet", 1341 "name": "phpoffice/phpspreadsheet",
960 "version": "1.19.0", 1342 "version": "1.19.0",
961 "version_normalized": "1.19.0.0", 1343 "version_normalized": "1.19.0.0",
  1344 + "source": {
  1345 + "type": "git",
  1346 + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
  1347 + "reference": "a9ab55bfae02eecffb3df669a2e19ba0e2f04bbf"
  1348 + },
962 "dist": { 1349 "dist": {
963 "type": "zip", 1350 "type": "zip",
964 - "url": "https://mirrors.cloud.tencent.com/repository/composer/phpoffice/phpspreadsheet/1.19.0/phpoffice-phpspreadsheet-1.19.0.zip", 1351 + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/a9ab55bfae02eecffb3df669a2e19ba0e2f04bbf",
965 "reference": "a9ab55bfae02eecffb3df669a2e19ba0e2f04bbf", 1352 "reference": "a9ab55bfae02eecffb3df669a2e19ba0e2f04bbf",
966 - "shasum": "" 1353 + "shasum": "",
  1354 + "mirrors": [
  1355 + {
  1356 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1357 + "preferred": true
  1358 + }
  1359 + ]
967 }, 1360 },
968 "require": { 1361 "require": {
969 "ext-ctype": "*", 1362 "ext-ctype": "*",
@@ -1015,6 +1408,7 @@ @@ -1015,6 +1408,7 @@
1015 "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" 1408 "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
1016 } 1409 }
1017 }, 1410 },
  1411 + "notification-url": "https://packagist.org/downloads/",
1018 "license": [ 1412 "license": [
1019 "MIT" 1413 "MIT"
1020 ], 1414 ],
@@ -1050,17 +1444,32 @@ @@ -1050,17 +1444,32 @@
1050 "xls", 1444 "xls",
1051 "xlsx" 1445 "xlsx"
1052 ], 1446 ],
  1447 + "support": {
  1448 + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
  1449 + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.19.0"
  1450 + },
1053 "install-path": "../phpoffice/phpspreadsheet" 1451 "install-path": "../phpoffice/phpspreadsheet"
1054 }, 1452 },
1055 { 1453 {
1056 "name": "pimple/pimple", 1454 "name": "pimple/pimple",
1057 "version": "v3.5.0", 1455 "version": "v3.5.0",
1058 "version_normalized": "3.5.0.0", 1456 "version_normalized": "3.5.0.0",
  1457 + "source": {
  1458 + "type": "git",
  1459 + "url": "https://github.com/silexphp/Pimple.git",
  1460 + "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed"
  1461 + },
1059 "dist": { 1462 "dist": {
1060 "type": "zip", 1463 "type": "zip",
1061 - "url": "https://mirrors.tencent.com/repository/composer/pimple/pimple/v3.5.0/pimple-pimple-v3.5.0.zip", 1464 + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed",
1062 "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed", 1465 "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed",
1063 - "shasum": "" 1466 + "shasum": "",
  1467 + "mirrors": [
  1468 + {
  1469 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1470 + "preferred": true
  1471 + }
  1472 + ]
1064 }, 1473 },
1065 "require": { 1474 "require": {
1066 "php": ">=7.2.5", 1475 "php": ">=7.2.5",
@@ -1082,6 +1491,7 @@ @@ -1082,6 +1491,7 @@
1082 "Pimple": "src/" 1491 "Pimple": "src/"
1083 } 1492 }
1084 }, 1493 },
  1494 + "notification-url": "https://packagist.org/downloads/",
1085 "license": [ 1495 "license": [
1086 "MIT" 1496 "MIT"
1087 ], 1497 ],
@@ -1097,17 +1507,31 @@ @@ -1097,17 +1507,31 @@
1097 "container", 1507 "container",
1098 "dependency injection" 1508 "dependency injection"
1099 ], 1509 ],
  1510 + "support": {
  1511 + "source": "https://github.com/silexphp/Pimple/tree/v3.5.0"
  1512 + },
1100 "install-path": "../pimple/pimple" 1513 "install-path": "../pimple/pimple"
1101 }, 1514 },
1102 { 1515 {
1103 "name": "psr/cache", 1516 "name": "psr/cache",
1104 "version": "1.0.1", 1517 "version": "1.0.1",
1105 "version_normalized": "1.0.1.0", 1518 "version_normalized": "1.0.1.0",
  1519 + "source": {
  1520 + "type": "git",
  1521 + "url": "https://github.com/php-fig/cache.git",
  1522 + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
  1523 + },
1106 "dist": { 1524 "dist": {
1107 "type": "zip", 1525 "type": "zip",
1108 - "url": "https://mirrors.cloud.tencent.com/repository/composer/psr/cache/1.0.1/psr-cache-1.0.1.zip", 1526 + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
1109 "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", 1527 "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
1110 - "shasum": "" 1528 + "shasum": "",
  1529 + "mirrors": [
  1530 + {
  1531 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1532 + "preferred": true
  1533 + }
  1534 + ]
1111 }, 1535 },
1112 "require": { 1536 "require": {
1113 "php": ">=5.3.0" 1537 "php": ">=5.3.0"
@@ -1125,6 +1549,7 @@ @@ -1125,6 +1549,7 @@
1125 "Psr\\Cache\\": "src/" 1549 "Psr\\Cache\\": "src/"
1126 } 1550 }
1127 }, 1551 },
  1552 + "notification-url": "https://packagist.org/downloads/",
1128 "license": [ 1553 "license": [
1129 "MIT" 1554 "MIT"
1130 ], 1555 ],
@@ -1140,17 +1565,31 @@ @@ -1140,17 +1565,31 @@
1140 "psr", 1565 "psr",
1141 "psr-6" 1566 "psr-6"
1142 ], 1567 ],
  1568 + "support": {
  1569 + "source": "https://github.com/php-fig/cache/tree/master"
  1570 + },
1143 "install-path": "../psr/cache" 1571 "install-path": "../psr/cache"
1144 }, 1572 },
1145 { 1573 {
1146 "name": "psr/container", 1574 "name": "psr/container",
1147 "version": "2.0.2", 1575 "version": "2.0.2",
1148 "version_normalized": "2.0.2.0", 1576 "version_normalized": "2.0.2.0",
  1577 + "source": {
  1578 + "type": "git",
  1579 + "url": "https://github.com/php-fig/container.git",
  1580 + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
  1581 + },
1149 "dist": { 1582 "dist": {
1150 "type": "zip", 1583 "type": "zip",
1151 - "url": "https://mirrors.cloud.tencent.com/repository/composer/psr/container/2.0.2/psr-container-2.0.2.zip", 1584 + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
1152 "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", 1585 "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
1153 - "shasum": "" 1586 + "shasum": "",
  1587 + "mirrors": [
  1588 + {
  1589 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1590 + "preferred": true
  1591 + }
  1592 + ]
1154 }, 1593 },
1155 "require": { 1594 "require": {
1156 "php": ">=7.4.0" 1595 "php": ">=7.4.0"
@@ -1168,6 +1607,7 @@ @@ -1168,6 +1607,7 @@
1168 "Psr\\Container\\": "src/" 1607 "Psr\\Container\\": "src/"
1169 } 1608 }
1170 }, 1609 },
  1610 + "notification-url": "https://packagist.org/downloads/",
1171 "license": [ 1611 "license": [
1172 "MIT" 1612 "MIT"
1173 ], 1613 ],
@@ -1186,17 +1626,32 @@ @@ -1186,17 +1626,32 @@
1186 "container-interop", 1626 "container-interop",
1187 "psr" 1627 "psr"
1188 ], 1628 ],
  1629 + "support": {
  1630 + "issues": "https://github.com/php-fig/container/issues",
  1631 + "source": "https://github.com/php-fig/container/tree/2.0.2"
  1632 + },
1189 "install-path": "../psr/container" 1633 "install-path": "../psr/container"
1190 }, 1634 },
1191 { 1635 {
1192 "name": "psr/event-dispatcher", 1636 "name": "psr/event-dispatcher",
1193 "version": "1.0.0", 1637 "version": "1.0.0",
1194 "version_normalized": "1.0.0.0", 1638 "version_normalized": "1.0.0.0",
  1639 + "source": {
  1640 + "type": "git",
  1641 + "url": "https://github.com/php-fig/event-dispatcher.git",
  1642 + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
  1643 + },
1195 "dist": { 1644 "dist": {
1196 "type": "zip", 1645 "type": "zip",
1197 - "url": "https://mirrors.cloud.tencent.com/repository/composer/psr/event-dispatcher/1.0.0/psr-event-dispatcher-1.0.0.zip", 1646 + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
1198 "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", 1647 "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
1199 - "shasum": "" 1648 + "shasum": "",
  1649 + "mirrors": [
  1650 + {
  1651 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1652 + "preferred": true
  1653 + }
  1654 + ]
1200 }, 1655 },
1201 "require": { 1656 "require": {
1202 "php": ">=7.2.0" 1657 "php": ">=7.2.0"
@@ -1214,6 +1669,7 @@ @@ -1214,6 +1669,7 @@
1214 "Psr\\EventDispatcher\\": "src/" 1669 "Psr\\EventDispatcher\\": "src/"
1215 } 1670 }
1216 }, 1671 },
  1672 + "notification-url": "https://packagist.org/downloads/",
1217 "license": [ 1673 "license": [
1218 "MIT" 1674 "MIT"
1219 ], 1675 ],
@@ -1229,17 +1685,32 @@ @@ -1229,17 +1685,32 @@
1229 "psr", 1685 "psr",
1230 "psr-14" 1686 "psr-14"
1231 ], 1687 ],
  1688 + "support": {
  1689 + "issues": "https://github.com/php-fig/event-dispatcher/issues",
  1690 + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
  1691 + },
1232 "install-path": "../psr/event-dispatcher" 1692 "install-path": "../psr/event-dispatcher"
1233 }, 1693 },
1234 { 1694 {
1235 "name": "psr/http-client", 1695 "name": "psr/http-client",
1236 "version": "1.0.1", 1696 "version": "1.0.1",
1237 "version_normalized": "1.0.1.0", 1697 "version_normalized": "1.0.1.0",
  1698 + "source": {
  1699 + "type": "git",
  1700 + "url": "https://github.com/php-fig/http-client.git",
  1701 + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
  1702 + },
1238 "dist": { 1703 "dist": {
1239 "type": "zip", 1704 "type": "zip",
1240 - "url": "https://mirrors.cloud.tencent.com/repository/composer/psr/http-client/1.0.1/psr-http-client-1.0.1.zip", 1705 + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
1241 "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", 1706 "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
1242 - "shasum": "" 1707 + "shasum": "",
  1708 + "mirrors": [
  1709 + {
  1710 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1711 + "preferred": true
  1712 + }
  1713 + ]
1243 }, 1714 },
1244 "require": { 1715 "require": {
1245 "php": "^7.0 || ^8.0", 1716 "php": "^7.0 || ^8.0",
@@ -1258,6 +1729,7 @@ @@ -1258,6 +1729,7 @@
1258 "Psr\\Http\\Client\\": "src/" 1729 "Psr\\Http\\Client\\": "src/"
1259 } 1730 }
1260 }, 1731 },
  1732 + "notification-url": "https://packagist.org/downloads/",
1261 "license": [ 1733 "license": [
1262 "MIT" 1734 "MIT"
1263 ], 1735 ],
@@ -1275,23 +1747,37 @@ @@ -1275,23 +1747,37 @@
1275 "psr", 1747 "psr",
1276 "psr-18" 1748 "psr-18"
1277 ], 1749 ],
  1750 + "support": {
  1751 + "source": "https://github.com/php-fig/http-client/tree/master"
  1752 + },
1278 "install-path": "../psr/http-client" 1753 "install-path": "../psr/http-client"
1279 }, 1754 },
1280 { 1755 {
1281 "name": "psr/http-factory", 1756 "name": "psr/http-factory",
1282 - "version": "1.0.1",  
1283 - "version_normalized": "1.0.1.0", 1757 + "version": "1.0.2",
  1758 + "version_normalized": "1.0.2.0",
  1759 + "source": {
  1760 + "type": "git",
  1761 + "url": "https://github.com/php-fig/http-factory.git",
  1762 + "reference": "e616d01114759c4c489f93b099585439f795fe35"
  1763 + },
1284 "dist": { 1764 "dist": {
1285 "type": "zip", 1765 "type": "zip",
1286 - "url": "https://mirrors.cloud.tencent.com/repository/composer/psr/http-factory/1.0.1/psr-http-factory-1.0.1.zip",  
1287 - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",  
1288 - "shasum": "" 1766 + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
  1767 + "reference": "e616d01114759c4c489f93b099585439f795fe35",
  1768 + "shasum": "",
  1769 + "mirrors": [
  1770 + {
  1771 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1772 + "preferred": true
  1773 + }
  1774 + ]
1289 }, 1775 },
1290 "require": { 1776 "require": {
1291 "php": ">=7.0.0", 1777 "php": ">=7.0.0",
1292 - "psr/http-message": "^1.0" 1778 + "psr/http-message": "^1.0 || ^2.0"
1293 }, 1779 },
1294 - "time": "2019-04-30T12:38:16+00:00", 1780 + "time": "2023-04-10T20:10:41+00:00",
1295 "type": "library", 1781 "type": "library",
1296 "extra": { 1782 "extra": {
1297 "branch-alias": { 1783 "branch-alias": {
@@ -1304,13 +1790,14 @@ @@ -1304,13 +1790,14 @@
1304 "Psr\\Http\\Message\\": "src/" 1790 "Psr\\Http\\Message\\": "src/"
1305 } 1791 }
1306 }, 1792 },
  1793 + "notification-url": "https://packagist.org/downloads/",
1307 "license": [ 1794 "license": [
1308 "MIT" 1795 "MIT"
1309 ], 1796 ],
1310 "authors": [ 1797 "authors": [
1311 { 1798 {
1312 "name": "PHP-FIG", 1799 "name": "PHP-FIG",
1313 - "homepage": "http://www.php-fig.org/" 1800 + "homepage": "https://www.php-fig.org/"
1314 } 1801 }
1315 ], 1802 ],
1316 "description": "Common interfaces for PSR-7 HTTP message factories", 1803 "description": "Common interfaces for PSR-7 HTTP message factories",
@@ -1324,26 +1811,40 @@ @@ -1324,26 +1811,40 @@
1324 "request", 1811 "request",
1325 "response" 1812 "response"
1326 ], 1813 ],
  1814 + "support": {
  1815 + "source": "https://github.com/php-fig/http-factory/tree/1.0.2"
  1816 + },
1327 "install-path": "../psr/http-factory" 1817 "install-path": "../psr/http-factory"
1328 }, 1818 },
1329 { 1819 {
1330 "name": "psr/http-message", 1820 "name": "psr/http-message",
1331 - "version": "1.0.1",  
1332 - "version_normalized": "1.0.1.0", 1821 + "version": "1.1",
  1822 + "version_normalized": "1.1.0.0",
  1823 + "source": {
  1824 + "type": "git",
  1825 + "url": "https://github.com/php-fig/http-message.git",
  1826 + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
  1827 + },
1333 "dist": { 1828 "dist": {
1334 "type": "zip", 1829 "type": "zip",
1335 - "url": "https://mirrors.cloud.tencent.com/repository/composer/psr/http-message/1.0.1/psr-http-message-1.0.1.zip",  
1336 - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",  
1337 - "shasum": "" 1830 + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
  1831 + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
  1832 + "shasum": "",
  1833 + "mirrors": [
  1834 + {
  1835 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1836 + "preferred": true
  1837 + }
  1838 + ]
1338 }, 1839 },
1339 "require": { 1840 "require": {
1340 - "php": ">=5.3.0" 1841 + "php": "^7.2 || ^8.0"
1341 }, 1842 },
1342 - "time": "2016-08-06T14:39:51+00:00", 1843 + "time": "2023-04-04T09:50:52+00:00",
1343 "type": "library", 1844 "type": "library",
1344 "extra": { 1845 "extra": {
1345 "branch-alias": { 1846 "branch-alias": {
1346 - "dev-master": "1.0.x-dev" 1847 + "dev-master": "1.1.x-dev"
1347 } 1848 }
1348 }, 1849 },
1349 "installation-source": "dist", 1850 "installation-source": "dist",
@@ -1352,6 +1853,7 @@ @@ -1352,6 +1853,7 @@
1352 "Psr\\Http\\Message\\": "src/" 1853 "Psr\\Http\\Message\\": "src/"
1353 } 1854 }
1354 }, 1855 },
  1856 + "notification-url": "https://packagist.org/downloads/",
1355 "license": [ 1857 "license": [
1356 "MIT" 1858 "MIT"
1357 ], 1859 ],
@@ -1371,17 +1873,31 @@ @@ -1371,17 +1873,31 @@
1371 "request", 1873 "request",
1372 "response" 1874 "response"
1373 ], 1875 ],
  1876 + "support": {
  1877 + "source": "https://github.com/php-fig/http-message/tree/1.1"
  1878 + },
1374 "install-path": "../psr/http-message" 1879 "install-path": "../psr/http-message"
1375 }, 1880 },
1376 { 1881 {
1377 "name": "psr/log", 1882 "name": "psr/log",
1378 "version": "1.1.4", 1883 "version": "1.1.4",
1379 "version_normalized": "1.1.4.0", 1884 "version_normalized": "1.1.4.0",
  1885 + "source": {
  1886 + "type": "git",
  1887 + "url": "https://github.com/php-fig/log.git",
  1888 + "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
  1889 + },
1380 "dist": { 1890 "dist": {
1381 "type": "zip", 1891 "type": "zip",
1382 - "url": "https://mirrors.cloud.tencent.com/repository/composer/psr/log/1.1.4/psr-log-1.1.4.zip", 1892 + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
1383 "reference": "d49695b909c3b7628b6289db5479a1c204601f11", 1893 "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
1384 - "shasum": "" 1894 + "shasum": "",
  1895 + "mirrors": [
  1896 + {
  1897 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1898 + "preferred": true
  1899 + }
  1900 + ]
1385 }, 1901 },
1386 "require": { 1902 "require": {
1387 "php": ">=5.3.0" 1903 "php": ">=5.3.0"
@@ -1399,6 +1915,7 @@ @@ -1399,6 +1915,7 @@
1399 "Psr\\Log\\": "Psr/Log/" 1915 "Psr\\Log\\": "Psr/Log/"
1400 } 1916 }
1401 }, 1917 },
  1918 + "notification-url": "https://packagist.org/downloads/",
1402 "license": [ 1919 "license": [
1403 "MIT" 1920 "MIT"
1404 ], 1921 ],
@@ -1415,17 +1932,31 @@ @@ -1415,17 +1932,31 @@
1415 "psr", 1932 "psr",
1416 "psr-3" 1933 "psr-3"
1417 ], 1934 ],
  1935 + "support": {
  1936 + "source": "https://github.com/php-fig/log/tree/1.1.4"
  1937 + },
1418 "install-path": "../psr/log" 1938 "install-path": "../psr/log"
1419 }, 1939 },
1420 { 1940 {
1421 "name": "psr/simple-cache", 1941 "name": "psr/simple-cache",
1422 "version": "1.0.1", 1942 "version": "1.0.1",
1423 "version_normalized": "1.0.1.0", 1943 "version_normalized": "1.0.1.0",
  1944 + "source": {
  1945 + "type": "git",
  1946 + "url": "https://github.com/php-fig/simple-cache.git",
  1947 + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
  1948 + },
1424 "dist": { 1949 "dist": {
1425 "type": "zip", 1950 "type": "zip",
1426 - "url": "https://mirrors.cloud.tencent.com/repository/composer/psr/simple-cache/1.0.1/psr-simple-cache-1.0.1.zip", 1951 + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
1427 "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 1952 "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
1428 - "shasum": "" 1953 + "shasum": "",
  1954 + "mirrors": [
  1955 + {
  1956 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  1957 + "preferred": true
  1958 + }
  1959 + ]
1429 }, 1960 },
1430 "require": { 1961 "require": {
1431 "php": ">=5.3.0" 1962 "php": ">=5.3.0"
@@ -1443,6 +1974,7 @@ @@ -1443,6 +1974,7 @@
1443 "Psr\\SimpleCache\\": "src/" 1974 "Psr\\SimpleCache\\": "src/"
1444 } 1975 }
1445 }, 1976 },
  1977 + "notification-url": "https://packagist.org/downloads/",
1446 "license": [ 1978 "license": [
1447 "MIT" 1979 "MIT"
1448 ], 1980 ],
@@ -1460,17 +1992,31 @@ @@ -1460,17 +1992,31 @@
1460 "psr-16", 1992 "psr-16",
1461 "simple-cache" 1993 "simple-cache"
1462 ], 1994 ],
  1995 + "support": {
  1996 + "source": "https://github.com/php-fig/simple-cache/tree/master"
  1997 + },
1463 "install-path": "../psr/simple-cache" 1998 "install-path": "../psr/simple-cache"
1464 }, 1999 },
1465 { 2000 {
1466 "name": "ralouphie/getallheaders", 2001 "name": "ralouphie/getallheaders",
1467 "version": "3.0.3", 2002 "version": "3.0.3",
1468 "version_normalized": "3.0.3.0", 2003 "version_normalized": "3.0.3.0",
  2004 + "source": {
  2005 + "type": "git",
  2006 + "url": "https://github.com/ralouphie/getallheaders.git",
  2007 + "reference": "120b605dfeb996808c31b6477290a714d356e822"
  2008 + },
1469 "dist": { 2009 "dist": {
1470 "type": "zip", 2010 "type": "zip",
1471 - "url": "https://mirrors.cloud.tencent.com/repository/composer/ralouphie/getallheaders/3.0.3/ralouphie-getallheaders-3.0.3.zip", 2011 + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
1472 "reference": "120b605dfeb996808c31b6477290a714d356e822", 2012 "reference": "120b605dfeb996808c31b6477290a714d356e822",
1473 - "shasum": "" 2013 + "shasum": "",
  2014 + "mirrors": [
  2015 + {
  2016 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  2017 + "preferred": true
  2018 + }
  2019 + ]
1474 }, 2020 },
1475 "require": { 2021 "require": {
1476 "php": ">=5.6" 2022 "php": ">=5.6"
@@ -1487,6 +2033,7 @@ @@ -1487,6 +2033,7 @@
1487 "src/getallheaders.php" 2033 "src/getallheaders.php"
1488 ] 2034 ]
1489 }, 2035 },
  2036 + "notification-url": "https://packagist.org/downloads/",
1490 "license": [ 2037 "license": [
1491 "MIT" 2038 "MIT"
1492 ], 2039 ],
@@ -1497,17 +2044,32 @@ @@ -1497,17 +2044,32 @@
1497 } 2044 }
1498 ], 2045 ],
1499 "description": "A polyfill for getallheaders.", 2046 "description": "A polyfill for getallheaders.",
  2047 + "support": {
  2048 + "issues": "https://github.com/ralouphie/getallheaders/issues",
  2049 + "source": "https://github.com/ralouphie/getallheaders/tree/develop"
  2050 + },
1500 "install-path": "../ralouphie/getallheaders" 2051 "install-path": "../ralouphie/getallheaders"
1501 }, 2052 },
1502 { 2053 {
1503 "name": "symfony/cache", 2054 "name": "symfony/cache",
1504 - "version": "v5.4.15",  
1505 - "version_normalized": "5.4.15.0", 2055 + "version": "v5.4.23",
  2056 + "version_normalized": "5.4.23.0",
  2057 + "source": {
  2058 + "type": "git",
  2059 + "url": "https://github.com/symfony/cache.git",
  2060 + "reference": "983c79ff28612cdfd66d8e44e1a06e5afc87e107"
  2061 + },
1506 "dist": { 2062 "dist": {
1507 "type": "zip", 2063 "type": "zip",
1508 - "url": "https://mirrors.cloud.tencent.com/repository/composer/symfony/cache/v5.4.15/symfony-cache-v5.4.15.zip",  
1509 - "reference": "60e87188abbacd29ccde44d69c5392a33e888e98",  
1510 - "shasum": "" 2064 + "url": "https://api.github.com/repos/symfony/cache/zipball/983c79ff28612cdfd66d8e44e1a06e5afc87e107",
  2065 + "reference": "983c79ff28612cdfd66d8e44e1a06e5afc87e107",
  2066 + "shasum": "",
  2067 + "mirrors": [
  2068 + {
  2069 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  2070 + "preferred": true
  2071 + }
  2072 + ]
1511 }, 2073 },
1512 "require": { 2074 "require": {
1513 "php": ">=7.2.5", 2075 "php": ">=7.2.5",
@@ -1544,7 +2106,7 @@ @@ -1544,7 +2106,7 @@
1544 "symfony/messenger": "^4.4|^5.0|^6.0", 2106 "symfony/messenger": "^4.4|^5.0|^6.0",
1545 "symfony/var-dumper": "^4.4|^5.0|^6.0" 2107 "symfony/var-dumper": "^4.4|^5.0|^6.0"
1546 }, 2108 },
1547 - "time": "2022-10-27T07:55:40+00:00", 2109 + "time": "2023-04-21T15:38:51+00:00",
1548 "type": "library", 2110 "type": "library",
1549 "installation-source": "dist", 2111 "installation-source": "dist",
1550 "autoload": { 2112 "autoload": {
@@ -1555,6 +2117,7 @@ @@ -1555,6 +2117,7 @@
1555 "/Tests/" 2117 "/Tests/"
1556 ] 2118 ]
1557 }, 2119 },
  2120 + "notification-url": "https://packagist.org/downloads/",
1558 "license": [ 2121 "license": [
1559 "MIT" 2122 "MIT"
1560 ], 2123 ],
@@ -1574,17 +2137,45 @@ @@ -1574,17 +2137,45 @@
1574 "caching", 2137 "caching",
1575 "psr6" 2138 "psr6"
1576 ], 2139 ],
  2140 + "support": {
  2141 + "source": "https://github.com/symfony/cache/tree/v5.4.23"
  2142 + },
  2143 + "funding": [
  2144 + {
  2145 + "url": "https://symfony.com/sponsor",
  2146 + "type": "custom"
  2147 + },
  2148 + {
  2149 + "url": "https://github.com/fabpot",
  2150 + "type": "github"
  2151 + },
  2152 + {
  2153 + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
  2154 + "type": "tidelift"
  2155 + }
  2156 + ],
1577 "install-path": "../symfony/cache" 2157 "install-path": "../symfony/cache"
1578 }, 2158 },
1579 { 2159 {
1580 "name": "symfony/cache-contracts", 2160 "name": "symfony/cache-contracts",
1581 "version": "v2.5.2", 2161 "version": "v2.5.2",
1582 "version_normalized": "2.5.2.0", 2162 "version_normalized": "2.5.2.0",
  2163 + "source": {
  2164 + "type": "git",
  2165 + "url": "https://github.com/symfony/cache-contracts.git",
  2166 + "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc"
  2167 + },
1583 "dist": { 2168 "dist": {
1584 "type": "zip", 2169 "type": "zip",
1585 - "url": "https://mirrors.cloud.tencent.com/repository/composer/symfony/cache-contracts/v2.5.2/symfony-cache-contracts-v2.5.2.zip", 2170 + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/64be4a7acb83b6f2bf6de9a02cee6dad41277ebc",
1586 "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", 2171 "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc",
1587 - "shasum": "" 2172 + "shasum": "",
  2173 + "mirrors": [
  2174 + {
  2175 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  2176 + "preferred": true
  2177 + }
  2178 + ]
1588 }, 2179 },
1589 "require": { 2180 "require": {
1590 "php": ">=7.2.5", 2181 "php": ">=7.2.5",
@@ -1610,6 +2201,7 @@ @@ -1610,6 +2201,7 @@
1610 "Symfony\\Contracts\\Cache\\": "" 2201 "Symfony\\Contracts\\Cache\\": ""
1611 } 2202 }
1612 }, 2203 },
  2204 + "notification-url": "https://packagist.org/downloads/",
1613 "license": [ 2205 "license": [
1614 "MIT" 2206 "MIT"
1615 ], 2207 ],
@@ -1633,17 +2225,45 @@ @@ -1633,17 +2225,45 @@
1633 "interoperability", 2225 "interoperability",
1634 "standards" 2226 "standards"
1635 ], 2227 ],
  2228 + "support": {
  2229 + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.2"
  2230 + },
  2231 + "funding": [
  2232 + {
  2233 + "url": "https://symfony.com/sponsor",
  2234 + "type": "custom"
  2235 + },
  2236 + {
  2237 + "url": "https://github.com/fabpot",
  2238 + "type": "github"
  2239 + },
  2240 + {
  2241 + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
  2242 + "type": "tidelift"
  2243 + }
  2244 + ],
1636 "install-path": "../symfony/cache-contracts" 2245 "install-path": "../symfony/cache-contracts"
1637 }, 2246 },
1638 { 2247 {
1639 "name": "symfony/deprecation-contracts", 2248 "name": "symfony/deprecation-contracts",
1640 "version": "v2.5.2", 2249 "version": "v2.5.2",
1641 "version_normalized": "2.5.2.0", 2250 "version_normalized": "2.5.2.0",
  2251 + "source": {
  2252 + "type": "git",
  2253 + "url": "https://github.com/symfony/deprecation-contracts.git",
  2254 + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
  2255 + },
1642 "dist": { 2256 "dist": {
1643 "type": "zip", 2257 "type": "zip",
1644 - "url": "https://mirrors.cloud.tencent.com/repository/composer/symfony/deprecation-contracts/v2.5.2/symfony-deprecation-contracts-v2.5.2.zip", 2258 + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
1645 "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", 2259 "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
1646 - "shasum": "" 2260 + "shasum": "",
  2261 + "mirrors": [
  2262 + {
  2263 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  2264 + "preferred": true
  2265 + }
  2266 + ]
1647 }, 2267 },
1648 "require": { 2268 "require": {
1649 "php": ">=7.1" 2269 "php": ">=7.1"
@@ -1665,6 +2285,7 @@ @@ -1665,6 +2285,7 @@
1665 "function.php" 2285 "function.php"
1666 ] 2286 ]
1667 }, 2287 },
  2288 + "notification-url": "https://packagist.org/downloads/",
1668 "license": [ 2289 "license": [
1669 "MIT" 2290 "MIT"
1670 ], 2291 ],
@@ -1680,17 +2301,45 @@ @@ -1680,17 +2301,45 @@
1680 ], 2301 ],
1681 "description": "A generic function and convention to trigger deprecation notices", 2302 "description": "A generic function and convention to trigger deprecation notices",
1682 "homepage": "https://symfony.com", 2303 "homepage": "https://symfony.com",
  2304 + "support": {
  2305 + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2"
  2306 + },
  2307 + "funding": [
  2308 + {
  2309 + "url": "https://symfony.com/sponsor",
  2310 + "type": "custom"
  2311 + },
  2312 + {
  2313 + "url": "https://github.com/fabpot",
  2314 + "type": "github"
  2315 + },
  2316 + {
  2317 + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
  2318 + "type": "tidelift"
  2319 + }
  2320 + ],
1683 "install-path": "../symfony/deprecation-contracts" 2321 "install-path": "../symfony/deprecation-contracts"
1684 }, 2322 },
1685 { 2323 {
1686 "name": "symfony/event-dispatcher", 2324 "name": "symfony/event-dispatcher",
1687 - "version": "v5.4.9",  
1688 - "version_normalized": "5.4.9.0", 2325 + "version": "v5.4.22",
  2326 + "version_normalized": "5.4.22.0",
  2327 + "source": {
  2328 + "type": "git",
  2329 + "url": "https://github.com/symfony/event-dispatcher.git",
  2330 + "reference": "1df20e45d56da29a4b1d8259dd6e950acbf1b13f"
  2331 + },
1689 "dist": { 2332 "dist": {
1690 "type": "zip", 2333 "type": "zip",
1691 - "url": "https://mirrors.cloud.tencent.com/repository/composer/symfony/event-dispatcher/v5.4.9/symfony-event-dispatcher-v5.4.9.zip",  
1692 - "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc",  
1693 - "shasum": "" 2334 + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1df20e45d56da29a4b1d8259dd6e950acbf1b13f",
  2335 + "reference": "1df20e45d56da29a4b1d8259dd6e950acbf1b13f",
  2336 + "shasum": "",
  2337 + "mirrors": [
  2338 + {
  2339 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  2340 + "preferred": true
  2341 + }
  2342 + ]
1694 }, 2343 },
1695 "require": { 2344 "require": {
1696 "php": ">=7.2.5", 2345 "php": ">=7.2.5",
@@ -1719,7 +2368,7 @@ @@ -1719,7 +2368,7 @@
1719 "symfony/dependency-injection": "", 2368 "symfony/dependency-injection": "",
1720 "symfony/http-kernel": "" 2369 "symfony/http-kernel": ""
1721 }, 2370 },
1722 - "time": "2022-05-05T16:45:39+00:00", 2371 + "time": "2023-03-17T11:31:58+00:00",
1723 "type": "library", 2372 "type": "library",
1724 "installation-source": "dist", 2373 "installation-source": "dist",
1725 "autoload": { 2374 "autoload": {
@@ -1730,6 +2379,7 @@ @@ -1730,6 +2379,7 @@
1730 "/Tests/" 2379 "/Tests/"
1731 ] 2380 ]
1732 }, 2381 },
  2382 + "notification-url": "https://packagist.org/downloads/",
1733 "license": [ 2383 "license": [
1734 "MIT" 2384 "MIT"
1735 ], 2385 ],
@@ -1745,17 +2395,45 @@ @@ -1745,17 +2395,45 @@
1745 ], 2395 ],
1746 "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", 2396 "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
1747 "homepage": "https://symfony.com", 2397 "homepage": "https://symfony.com",
  2398 + "support": {
  2399 + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.22"
  2400 + },
  2401 + "funding": [
  2402 + {
  2403 + "url": "https://symfony.com/sponsor",
  2404 + "type": "custom"
  2405 + },
  2406 + {
  2407 + "url": "https://github.com/fabpot",
  2408 + "type": "github"
  2409 + },
  2410 + {
  2411 + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
  2412 + "type": "tidelift"
  2413 + }
  2414 + ],
1748 "install-path": "../symfony/event-dispatcher" 2415 "install-path": "../symfony/event-dispatcher"
1749 }, 2416 },
1750 { 2417 {
1751 "name": "symfony/event-dispatcher-contracts", 2418 "name": "symfony/event-dispatcher-contracts",
1752 "version": "v2.5.2", 2419 "version": "v2.5.2",
1753 "version_normalized": "2.5.2.0", 2420 "version_normalized": "2.5.2.0",
  2421 + "source": {
  2422 + "type": "git",
  2423 + "url": "https://github.com/symfony/event-dispatcher-contracts.git",
  2424 + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1"
  2425 + },
1754 "dist": { 2426 "dist": {
1755 "type": "zip", 2427 "type": "zip",
1756 - "url": "https://mirrors.cloud.tencent.com/repository/composer/symfony/event-dispatcher-contracts/v2.5.2/symfony-event-dispatcher-contracts-v2.5.2.zip", 2428 + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1",
1757 "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", 2429 "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1",
1758 - "shasum": "" 2430 + "shasum": "",
  2431 + "mirrors": [
  2432 + {
  2433 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  2434 + "preferred": true
  2435 + }
  2436 + ]
1759 }, 2437 },
1760 "require": { 2438 "require": {
1761 "php": ">=7.2.5", 2439 "php": ">=7.2.5",
@@ -1781,6 +2459,7 @@ @@ -1781,6 +2459,7 @@
1781 "Symfony\\Contracts\\EventDispatcher\\": "" 2459 "Symfony\\Contracts\\EventDispatcher\\": ""
1782 } 2460 }
1783 }, 2461 },
  2462 + "notification-url": "https://packagist.org/downloads/",
1784 "license": [ 2463 "license": [
1785 "MIT" 2464 "MIT"
1786 ], 2465 ],
@@ -1804,24 +2483,52 @@ @@ -1804,24 +2483,52 @@
1804 "interoperability", 2483 "interoperability",
1805 "standards" 2484 "standards"
1806 ], 2485 ],
  2486 + "support": {
  2487 + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2"
  2488 + },
  2489 + "funding": [
  2490 + {
  2491 + "url": "https://symfony.com/sponsor",
  2492 + "type": "custom"
  2493 + },
  2494 + {
  2495 + "url": "https://github.com/fabpot",
  2496 + "type": "github"
  2497 + },
  2498 + {
  2499 + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
  2500 + "type": "tidelift"
  2501 + }
  2502 + ],
1807 "install-path": "../symfony/event-dispatcher-contracts" 2503 "install-path": "../symfony/event-dispatcher-contracts"
1808 }, 2504 },
1809 { 2505 {
1810 "name": "symfony/finder", 2506 "name": "symfony/finder",
1811 - "version": "v5.4.11",  
1812 - "version_normalized": "5.4.11.0", 2507 + "version": "v5.4.21",
  2508 + "version_normalized": "5.4.21.0",
  2509 + "source": {
  2510 + "type": "git",
  2511 + "url": "https://github.com/symfony/finder.git",
  2512 + "reference": "078e9a5e1871fcfe6a5ce421b539344c21afef19"
  2513 + },
1813 "dist": { 2514 "dist": {
1814 "type": "zip", 2515 "type": "zip",
1815 - "url": "https://mirrors.cloud.tencent.com/repository/composer/symfony/finder/v5.4.11/symfony-finder-v5.4.11.zip",  
1816 - "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c",  
1817 - "shasum": "" 2516 + "url": "https://api.github.com/repos/symfony/finder/zipball/078e9a5e1871fcfe6a5ce421b539344c21afef19",
  2517 + "reference": "078e9a5e1871fcfe6a5ce421b539344c21afef19",
  2518 + "shasum": "",
  2519 + "mirrors": [
  2520 + {
  2521 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  2522 + "preferred": true
  2523 + }
  2524 + ]
1818 }, 2525 },
1819 "require": { 2526 "require": {
1820 "php": ">=7.2.5", 2527 "php": ">=7.2.5",
1821 "symfony/deprecation-contracts": "^2.1|^3", 2528 "symfony/deprecation-contracts": "^2.1|^3",
1822 "symfony/polyfill-php80": "^1.16" 2529 "symfony/polyfill-php80": "^1.16"
1823 }, 2530 },
1824 - "time": "2022-07-29T07:37:50+00:00", 2531 + "time": "2023-02-16T09:33:00+00:00",
1825 "type": "library", 2532 "type": "library",
1826 "installation-source": "dist", 2533 "installation-source": "dist",
1827 "autoload": { 2534 "autoload": {
@@ -1832,6 +2539,7 @@ @@ -1832,6 +2539,7 @@
1832 "/Tests/" 2539 "/Tests/"
1833 ] 2540 ]
1834 }, 2541 },
  2542 + "notification-url": "https://packagist.org/downloads/",
1835 "license": [ 2543 "license": [
1836 "MIT" 2544 "MIT"
1837 ], 2545 ],
@@ -1847,17 +2555,45 @@ @@ -1847,17 +2555,45 @@
1847 ], 2555 ],
1848 "description": "Finds files and directories via an intuitive fluent interface", 2556 "description": "Finds files and directories via an intuitive fluent interface",
1849 "homepage": "https://symfony.com", 2557 "homepage": "https://symfony.com",
  2558 + "support": {
  2559 + "source": "https://github.com/symfony/finder/tree/v5.4.21"
  2560 + },
  2561 + "funding": [
  2562 + {
  2563 + "url": "https://symfony.com/sponsor",
  2564 + "type": "custom"
  2565 + },
  2566 + {
  2567 + "url": "https://github.com/fabpot",
  2568 + "type": "github"
  2569 + },
  2570 + {
  2571 + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
  2572 + "type": "tidelift"
  2573 + }
  2574 + ],
1850 "install-path": "../symfony/finder" 2575 "install-path": "../symfony/finder"
1851 }, 2576 },
1852 { 2577 {
1853 "name": "symfony/http-foundation", 2578 "name": "symfony/http-foundation",
1854 - "version": "v5.4.16",  
1855 - "version_normalized": "5.4.16.0", 2579 + "version": "v5.4.24",
  2580 + "version_normalized": "5.4.24.0",
  2581 + "source": {
  2582 + "type": "git",
  2583 + "url": "https://github.com/symfony/http-foundation.git",
  2584 + "reference": "3c59f97f6249ce552a44f01b93bfcbd786a954f5"
  2585 + },
1856 "dist": { 2586 "dist": {
1857 "type": "zip", 2587 "type": "zip",
1858 - "url": "https://mirrors.cloud.tencent.com/repository/composer/symfony/http-foundation/v5.4.16/symfony-http-foundation-v5.4.16.zip",  
1859 - "reference": "5032c5849aef24741e1970cb03511b0dd131d838",  
1860 - "shasum": "" 2588 + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3c59f97f6249ce552a44f01b93bfcbd786a954f5",
  2589 + "reference": "3c59f97f6249ce552a44f01b93bfcbd786a954f5",
  2590 + "shasum": "",
  2591 + "mirrors": [
  2592 + {
  2593 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  2594 + "preferred": true
  2595 + }
  2596 + ]
1861 }, 2597 },
1862 "require": { 2598 "require": {
1863 "php": ">=7.2.5", 2599 "php": ">=7.2.5",
@@ -1877,7 +2613,7 @@ @@ -1877,7 +2613,7 @@
1877 "suggest": { 2613 "suggest": {
1878 "symfony/mime": "To use the file extension guesser" 2614 "symfony/mime": "To use the file extension guesser"
1879 }, 2615 },
1880 - "time": "2022-11-07T08:06:40+00:00", 2616 + "time": "2023-05-19T07:21:23+00:00",
1881 "type": "library", 2617 "type": "library",
1882 "installation-source": "dist", 2618 "installation-source": "dist",
1883 "autoload": { 2619 "autoload": {
@@ -1888,6 +2624,7 @@ @@ -1888,6 +2624,7 @@
1888 "/Tests/" 2624 "/Tests/"
1889 ] 2625 ]
1890 }, 2626 },
  2627 + "notification-url": "https://packagist.org/downloads/",
1891 "license": [ 2628 "license": [
1892 "MIT" 2629 "MIT"
1893 ], 2630 ],
@@ -1903,17 +2640,45 @@ @@ -1903,17 +2640,45 @@
1903 ], 2640 ],
1904 "description": "Defines an object-oriented layer for the HTTP specification", 2641 "description": "Defines an object-oriented layer for the HTTP specification",
1905 "homepage": "https://symfony.com", 2642 "homepage": "https://symfony.com",
  2643 + "support": {
  2644 + "source": "https://github.com/symfony/http-foundation/tree/v5.4.24"
  2645 + },
  2646 + "funding": [
  2647 + {
  2648 + "url": "https://symfony.com/sponsor",
  2649 + "type": "custom"
  2650 + },
  2651 + {
  2652 + "url": "https://github.com/fabpot",
  2653 + "type": "github"
  2654 + },
  2655 + {
  2656 + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
  2657 + "type": "tidelift"
  2658 + }
  2659 + ],
1906 "install-path": "../symfony/http-foundation" 2660 "install-path": "../symfony/http-foundation"
1907 }, 2661 },
1908 { 2662 {
1909 "name": "symfony/polyfill-mbstring", 2663 "name": "symfony/polyfill-mbstring",
1910 "version": "v1.27.0", 2664 "version": "v1.27.0",
1911 "version_normalized": "1.27.0.0", 2665 "version_normalized": "1.27.0.0",
  2666 + "source": {
  2667 + "type": "git",
  2668 + "url": "https://github.com/symfony/polyfill-mbstring.git",
  2669 + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
  2670 + },
1912 "dist": { 2671 "dist": {
1913 "type": "zip", 2672 "type": "zip",
1914 - "url": "https://mirrors.cloud.tencent.com/repository/composer/symfony/polyfill-mbstring/v1.27.0/symfony-polyfill-mbstring-v1.27.0.zip", 2673 + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
1915 "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", 2674 "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
1916 - "shasum": "" 2675 + "shasum": "",
  2676 + "mirrors": [
  2677 + {
  2678 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  2679 + "preferred": true
  2680 + }
  2681 + ]
1917 }, 2682 },
1918 "require": { 2683 "require": {
1919 "php": ">=7.1" 2684 "php": ">=7.1"
@@ -1944,6 +2709,7 @@ @@ -1944,6 +2709,7 @@
1944 "Symfony\\Polyfill\\Mbstring\\": "" 2709 "Symfony\\Polyfill\\Mbstring\\": ""
1945 } 2710 }
1946 }, 2711 },
  2712 + "notification-url": "https://packagist.org/downloads/",
1947 "license": [ 2713 "license": [
1948 "MIT" 2714 "MIT"
1949 ], 2715 ],
@@ -1966,17 +2732,45 @@ @@ -1966,17 +2732,45 @@
1966 "portable", 2732 "portable",
1967 "shim" 2733 "shim"
1968 ], 2734 ],
  2735 + "support": {
  2736 + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
  2737 + },
  2738 + "funding": [
  2739 + {
  2740 + "url": "https://symfony.com/sponsor",
  2741 + "type": "custom"
  2742 + },
  2743 + {
  2744 + "url": "https://github.com/fabpot",
  2745 + "type": "github"
  2746 + },
  2747 + {
  2748 + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
  2749 + "type": "tidelift"
  2750 + }
  2751 + ],
1969 "install-path": "../symfony/polyfill-mbstring" 2752 "install-path": "../symfony/polyfill-mbstring"
1970 }, 2753 },
1971 { 2754 {
1972 "name": "symfony/polyfill-php73", 2755 "name": "symfony/polyfill-php73",
1973 "version": "v1.27.0", 2756 "version": "v1.27.0",
1974 "version_normalized": "1.27.0.0", 2757 "version_normalized": "1.27.0.0",
  2758 + "source": {
  2759 + "type": "git",
  2760 + "url": "https://github.com/symfony/polyfill-php73.git",
  2761 + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9"
  2762 + },
1975 "dist": { 2763 "dist": {
1976 "type": "zip", 2764 "type": "zip",
1977 - "url": "https://mirrors.cloud.tencent.com/repository/composer/symfony/polyfill-php73/v1.27.0/symfony-polyfill-php73-v1.27.0.zip", 2765 + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
1978 "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", 2766 "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
1979 - "shasum": "" 2767 + "shasum": "",
  2768 + "mirrors": [
  2769 + {
  2770 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  2771 + "preferred": true
  2772 + }
  2773 + ]
1980 }, 2774 },
1981 "require": { 2775 "require": {
1982 "php": ">=7.1" 2776 "php": ">=7.1"
@@ -2004,6 +2798,7 @@ @@ -2004,6 +2798,7 @@
2004 "Resources/stubs" 2798 "Resources/stubs"
2005 ] 2799 ]
2006 }, 2800 },
  2801 + "notification-url": "https://packagist.org/downloads/",
2007 "license": [ 2802 "license": [
2008 "MIT" 2803 "MIT"
2009 ], 2804 ],
@@ -2025,17 +2820,45 @@ @@ -2025,17 +2820,45 @@
2025 "portable", 2820 "portable",
2026 "shim" 2821 "shim"
2027 ], 2822 ],
  2823 + "support": {
  2824 + "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0"
  2825 + },
  2826 + "funding": [
  2827 + {
  2828 + "url": "https://symfony.com/sponsor",
  2829 + "type": "custom"
  2830 + },
  2831 + {
  2832 + "url": "https://github.com/fabpot",
  2833 + "type": "github"
  2834 + },
  2835 + {
  2836 + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
  2837 + "type": "tidelift"
  2838 + }
  2839 + ],
2028 "install-path": "../symfony/polyfill-php73" 2840 "install-path": "../symfony/polyfill-php73"
2029 }, 2841 },
2030 { 2842 {
2031 "name": "symfony/polyfill-php80", 2843 "name": "symfony/polyfill-php80",
2032 "version": "v1.27.0", 2844 "version": "v1.27.0",
2033 "version_normalized": "1.27.0.0", 2845 "version_normalized": "1.27.0.0",
  2846 + "source": {
  2847 + "type": "git",
  2848 + "url": "https://github.com/symfony/polyfill-php80.git",
  2849 + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
  2850 + },
2034 "dist": { 2851 "dist": {
2035 "type": "zip", 2852 "type": "zip",
2036 - "url": "https://mirrors.cloud.tencent.com/repository/composer/symfony/polyfill-php80/v1.27.0/symfony-polyfill-php80-v1.27.0.zip", 2853 + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
2037 "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", 2854 "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
2038 - "shasum": "" 2855 + "shasum": "",
  2856 + "mirrors": [
  2857 + {
  2858 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  2859 + "preferred": true
  2860 + }
  2861 + ]
2039 }, 2862 },
2040 "require": { 2863 "require": {
2041 "php": ">=7.1" 2864 "php": ">=7.1"
@@ -2063,6 +2886,7 @@ @@ -2063,6 +2886,7 @@
2063 "Resources/stubs" 2886 "Resources/stubs"
2064 ] 2887 ]
2065 }, 2888 },
  2889 + "notification-url": "https://packagist.org/downloads/",
2066 "license": [ 2890 "license": [
2067 "MIT" 2891 "MIT"
2068 ], 2892 ],
@@ -2088,41 +2912,69 @@ @@ -2088,41 +2912,69 @@
2088 "portable", 2912 "portable",
2089 "shim" 2913 "shim"
2090 ], 2914 ],
  2915 + "support": {
  2916 + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
  2917 + },
  2918 + "funding": [
  2919 + {
  2920 + "url": "https://symfony.com/sponsor",
  2921 + "type": "custom"
  2922 + },
  2923 + {
  2924 + "url": "https://github.com/fabpot",
  2925 + "type": "github"
  2926 + },
  2927 + {
  2928 + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
  2929 + "type": "tidelift"
  2930 + }
  2931 + ],
2091 "install-path": "../symfony/polyfill-php80" 2932 "install-path": "../symfony/polyfill-php80"
2092 }, 2933 },
2093 { 2934 {
2094 "name": "symfony/psr-http-message-bridge", 2935 "name": "symfony/psr-http-message-bridge",
2095 - "version": "v2.1.4",  
2096 - "version_normalized": "2.1.4.0", 2936 + "version": "v2.2.0",
  2937 + "version_normalized": "2.2.0.0",
  2938 + "source": {
  2939 + "type": "git",
  2940 + "url": "https://github.com/symfony/psr-http-message-bridge.git",
  2941 + "reference": "28a732c05bbad801304ad5a5c674cf2970508993"
  2942 + },
2097 "dist": { 2943 "dist": {
2098 "type": "zip", 2944 "type": "zip",
2099 - "url": "https://mirrors.cloud.tencent.com/repository/composer/symfony/psr-http-message-bridge/v2.1.4/symfony-psr-http-message-bridge-v2.1.4.zip",  
2100 - "reference": "a125b93ef378c492e274f217874906fb9babdebb",  
2101 - "shasum": "" 2945 + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/28a732c05bbad801304ad5a5c674cf2970508993",
  2946 + "reference": "28a732c05bbad801304ad5a5c674cf2970508993",
  2947 + "shasum": "",
  2948 + "mirrors": [
  2949 + {
  2950 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  2951 + "preferred": true
  2952 + }
  2953 + ]
2102 }, 2954 },
2103 "require": { 2955 "require": {
2104 - "php": ">=7.1",  
2105 - "psr/http-message": "^1.0",  
2106 - "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0" 2956 + "php": ">=7.2.5",
  2957 + "psr/http-message": "^1.0 || ^2.0",
  2958 + "symfony/http-foundation": "^5.4 || ^6.0"
2107 }, 2959 },
2108 "require-dev": { 2960 "require-dev": {
2109 "nyholm/psr7": "^1.1", 2961 "nyholm/psr7": "^1.1",
2110 "psr/log": "^1.1 || ^2 || ^3", 2962 "psr/log": "^1.1 || ^2 || ^3",
2111 - "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0",  
2112 - "symfony/config": "^4.4 || ^5.0 || ^6.0",  
2113 - "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0",  
2114 - "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0",  
2115 - "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0",  
2116 - "symfony/phpunit-bridge": "^5.4@dev || ^6.0" 2963 + "symfony/browser-kit": "^5.4 || ^6.0",
  2964 + "symfony/config": "^5.4 || ^6.0",
  2965 + "symfony/event-dispatcher": "^5.4 || ^6.0",
  2966 + "symfony/framework-bundle": "^5.4 || ^6.0",
  2967 + "symfony/http-kernel": "^5.4 || ^6.0",
  2968 + "symfony/phpunit-bridge": "^6.2"
2117 }, 2969 },
2118 "suggest": { 2970 "suggest": {
2119 "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" 2971 "nyholm/psr7": "For a super lightweight PSR-7/17 implementation"
2120 }, 2972 },
2121 - "time": "2022-11-28T22:46:34+00:00", 2973 + "time": "2023-04-21T08:40:19+00:00",
2122 "type": "symfony-bridge", 2974 "type": "symfony-bridge",
2123 "extra": { 2975 "extra": {
2124 "branch-alias": { 2976 "branch-alias": {
2125 - "dev-main": "2.1-dev" 2977 + "dev-main": "2.2-dev"
2126 } 2978 }
2127 }, 2979 },
2128 "installation-source": "dist", 2980 "installation-source": "dist",
@@ -2134,6 +2986,7 @@ @@ -2134,6 +2986,7 @@
2134 "/Tests/" 2986 "/Tests/"
2135 ] 2987 ]
2136 }, 2988 },
  2989 + "notification-url": "https://packagist.org/downloads/",
2137 "license": [ 2990 "license": [
2138 "MIT" 2991 "MIT"
2139 ], 2992 ],
@@ -2155,17 +3008,46 @@ @@ -2155,17 +3008,46 @@
2155 "psr-17", 3008 "psr-17",
2156 "psr-7" 3009 "psr-7"
2157 ], 3010 ],
  3011 + "support": {
  3012 + "issues": "https://github.com/symfony/psr-http-message-bridge/issues",
  3013 + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.2.0"
  3014 + },
  3015 + "funding": [
  3016 + {
  3017 + "url": "https://symfony.com/sponsor",
  3018 + "type": "custom"
  3019 + },
  3020 + {
  3021 + "url": "https://github.com/fabpot",
  3022 + "type": "github"
  3023 + },
  3024 + {
  3025 + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
  3026 + "type": "tidelift"
  3027 + }
  3028 + ],
2158 "install-path": "../symfony/psr-http-message-bridge" 3029 "install-path": "../symfony/psr-http-message-bridge"
2159 }, 3030 },
2160 { 3031 {
2161 "name": "symfony/service-contracts", 3032 "name": "symfony/service-contracts",
2162 "version": "v1.1.2", 3033 "version": "v1.1.2",
2163 "version_normalized": "1.1.2.0", 3034 "version_normalized": "1.1.2.0",
  3035 + "source": {
  3036 + "type": "git",
  3037 + "url": "https://github.com/symfony/service-contracts.git",
  3038 + "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0"
  3039 + },
2164 "dist": { 3040 "dist": {
2165 "type": "zip", 3041 "type": "zip",
2166 - "url": "https://mirrors.cloud.tencent.com/repository/composer/symfony/service-contracts/v1.1.2/symfony-service-contracts-v1.1.2.zip", 3042 + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/191afdcb5804db960d26d8566b7e9a2843cab3a0",
2167 "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0", 3043 "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0",
2168 - "shasum": "" 3044 + "shasum": "",
  3045 + "mirrors": [
  3046 + {
  3047 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  3048 + "preferred": true
  3049 + }
  3050 + ]
2169 }, 3051 },
2170 "require": { 3052 "require": {
2171 "php": "^7.1.3" 3053 "php": "^7.1.3"
@@ -2187,6 +3069,7 @@ @@ -2187,6 +3069,7 @@
2187 "Symfony\\Contracts\\Service\\": "" 3069 "Symfony\\Contracts\\Service\\": ""
2188 } 3070 }
2189 }, 3071 },
  3072 + "notification-url": "https://packagist.org/downloads/",
2190 "license": [ 3073 "license": [
2191 "MIT" 3074 "MIT"
2192 ], 3075 ],
@@ -2210,17 +3093,31 @@ @@ -2210,17 +3093,31 @@
2210 "interoperability", 3093 "interoperability",
2211 "standards" 3094 "standards"
2212 ], 3095 ],
  3096 + "support": {
  3097 + "source": "https://github.com/symfony/service-contracts/tree/v1.1.2"
  3098 + },
2213 "install-path": "../symfony/service-contracts" 3099 "install-path": "../symfony/service-contracts"
2214 }, 3100 },
2215 { 3101 {
2216 "name": "symfony/var-exporter", 3102 "name": "symfony/var-exporter",
2217 "version": "v4.4.43", 3103 "version": "v4.4.43",
2218 "version_normalized": "4.4.43.0", 3104 "version_normalized": "4.4.43.0",
  3105 + "source": {
  3106 + "type": "git",
  3107 + "url": "https://github.com/symfony/var-exporter.git",
  3108 + "reference": "4a7a3a3d55c471d396e6d28011368b7b83cb518b"
  3109 + },
2219 "dist": { 3110 "dist": {
2220 "type": "zip", 3111 "type": "zip",
2221 - "url": "https://mirrors.cloud.tencent.com/repository/composer/symfony/var-exporter/v4.4.43/symfony-var-exporter-v4.4.43.zip", 3112 + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/4a7a3a3d55c471d396e6d28011368b7b83cb518b",
2222 "reference": "4a7a3a3d55c471d396e6d28011368b7b83cb518b", 3113 "reference": "4a7a3a3d55c471d396e6d28011368b7b83cb518b",
2223 - "shasum": "" 3114 + "shasum": "",
  3115 + "mirrors": [
  3116 + {
  3117 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  3118 + "preferred": true
  3119 + }
  3120 + ]
2224 }, 3121 },
2225 "require": { 3122 "require": {
2226 "php": ">=7.1.3", 3123 "php": ">=7.1.3",
@@ -2240,6 +3137,7 @@ @@ -2240,6 +3137,7 @@
2240 "/Tests/" 3137 "/Tests/"
2241 ] 3138 ]
2242 }, 3139 },
  3140 + "notification-url": "https://packagist.org/downloads/",
2243 "license": [ 3141 "license": [
2244 "MIT" 3142 "MIT"
2245 ], 3143 ],
@@ -2263,6 +3161,23 @@ @@ -2263,6 +3161,23 @@
2263 "instantiate", 3161 "instantiate",
2264 "serialize" 3162 "serialize"
2265 ], 3163 ],
  3164 + "support": {
  3165 + "source": "https://github.com/symfony/var-exporter/tree/v4.4.43"
  3166 + },
  3167 + "funding": [
  3168 + {
  3169 + "url": "https://symfony.com/sponsor",
  3170 + "type": "custom"
  3171 + },
  3172 + {
  3173 + "url": "https://github.com/fabpot",
  3174 + "type": "github"
  3175 + },
  3176 + {
  3177 + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
  3178 + "type": "tidelift"
  3179 + }
  3180 + ],
2266 "install-path": "../symfony/var-exporter" 3181 "install-path": "../symfony/var-exporter"
2267 }, 3182 },
2268 { 3183 {
@@ -2272,7 +3187,7 @@ @@ -2272,7 +3187,7 @@
2272 "source": { 3187 "source": {
2273 "type": "git", 3188 "type": "git",
2274 "url": "https://gitee.com/fastadminnet/framework.git", 3189 "url": "https://gitee.com/fastadminnet/framework.git",
2275 - "reference": "a5f1cedf07bb3489f7e3b5254496afbf600d4e65" 3190 + "reference": "096811899433eb0eb0988f1fe1db56ebb521bf34"
2276 }, 3191 },
2277 "require": { 3192 "require": {
2278 "php": ">=7.1.0", 3193 "php": ">=7.1.0",
@@ -2286,7 +3201,7 @@ @@ -2286,7 +3201,7 @@
2286 "phpunit/phpunit": "4.8.*", 3201 "phpunit/phpunit": "4.8.*",
2287 "sebastian/phpcpd": "2.*" 3202 "sebastian/phpcpd": "2.*"
2288 }, 3203 },
2289 - "time": "2022-12-05T14:00:16+00:00", 3204 + "time": "2022-12-19T02:13:42+00:00",
2290 "default-branch": true, 3205 "default-branch": true,
2291 "type": "think-framework", 3206 "type": "think-framework",
2292 "installation-source": "source", 3207 "installation-source": "source",
@@ -2317,11 +3232,22 @@ @@ -2317,11 +3232,22 @@
2317 "name": "topthink/think-captcha", 3232 "name": "topthink/think-captcha",
2318 "version": "v1.0.7", 3233 "version": "v1.0.7",
2319 "version_normalized": "1.0.7.0", 3234 "version_normalized": "1.0.7.0",
  3235 + "source": {
  3236 + "type": "git",
  3237 + "url": "https://github.com/top-think/think-captcha.git",
  3238 + "reference": "0c55455df26a1626a60d0dc35d2d89002b741d44"
  3239 + },
2320 "dist": { 3240 "dist": {
2321 "type": "zip", 3241 "type": "zip",
2322 - "url": "https://mirrors.cloud.tencent.com/repository/composer/topthink/think-captcha/v1.0.7/topthink-think-captcha-v1.0.7.zip", 3242 + "url": "https://api.github.com/repos/top-think/think-captcha/zipball/0c55455df26a1626a60d0dc35d2d89002b741d44",
2323 "reference": "0c55455df26a1626a60d0dc35d2d89002b741d44", 3243 "reference": "0c55455df26a1626a60d0dc35d2d89002b741d44",
2324 - "shasum": "" 3244 + "shasum": "",
  3245 + "mirrors": [
  3246 + {
  3247 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  3248 + "preferred": true
  3249 + }
  3250 + ]
2325 }, 3251 },
2326 "time": "2016-07-06T01:47:11+00:00", 3252 "time": "2016-07-06T01:47:11+00:00",
2327 "type": "library", 3253 "type": "library",
@@ -2334,6 +3260,7 @@ @@ -2334,6 +3260,7 @@
2334 "think\\captcha\\": "src/" 3260 "think\\captcha\\": "src/"
2335 } 3261 }
2336 }, 3262 },
  3263 + "notification-url": "https://packagist.org/downloads/",
2337 "license": [ 3264 "license": [
2338 "Apache-2.0" 3265 "Apache-2.0"
2339 ], 3266 ],
@@ -2344,17 +3271,32 @@ @@ -2344,17 +3271,32 @@
2344 } 3271 }
2345 ], 3272 ],
2346 "description": "captcha package for thinkphp5", 3273 "description": "captcha package for thinkphp5",
  3274 + "support": {
  3275 + "issues": "https://github.com/top-think/think-captcha/issues",
  3276 + "source": "https://github.com/top-think/think-captcha/tree/master"
  3277 + },
2347 "install-path": "../topthink/think-captcha" 3278 "install-path": "../topthink/think-captcha"
2348 }, 3279 },
2349 { 3280 {
2350 "name": "topthink/think-helper", 3281 "name": "topthink/think-helper",
2351 "version": "v1.0.7", 3282 "version": "v1.0.7",
2352 "version_normalized": "1.0.7.0", 3283 "version_normalized": "1.0.7.0",
  3284 + "source": {
  3285 + "type": "git",
  3286 + "url": "https://github.com/top-think/think-helper.git",
  3287 + "reference": "5f92178606c8ce131d36b37a57c58eb71e55f019"
  3288 + },
2353 "dist": { 3289 "dist": {
2354 "type": "zip", 3290 "type": "zip",
2355 - "url": "https://mirrors.cloud.tencent.com/repository/composer/topthink/think-helper/v1.0.7/topthink-think-helper-v1.0.7.zip", 3291 + "url": "https://api.github.com/repos/top-think/think-helper/zipball/5f92178606c8ce131d36b37a57c58eb71e55f019",
2356 "reference": "5f92178606c8ce131d36b37a57c58eb71e55f019", 3292 "reference": "5f92178606c8ce131d36b37a57c58eb71e55f019",
2357 - "shasum": "" 3293 + "shasum": "",
  3294 + "mirrors": [
  3295 + {
  3296 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  3297 + "preferred": true
  3298 + }
  3299 + ]
2358 }, 3300 },
2359 "time": "2018-10-05T00:43:21+00:00", 3301 "time": "2018-10-05T00:43:21+00:00",
2360 "type": "library", 3302 "type": "library",
@@ -2367,6 +3309,7 @@ @@ -2367,6 +3309,7 @@
2367 "think\\helper\\": "src" 3309 "think\\helper\\": "src"
2368 } 3310 }
2369 }, 3311 },
  3312 + "notification-url": "https://packagist.org/downloads/",
2370 "license": [ 3313 "license": [
2371 "Apache-2.0" 3314 "Apache-2.0"
2372 ], 3315 ],
@@ -2377,17 +3320,32 @@ @@ -2377,17 +3320,32 @@
2377 } 3320 }
2378 ], 3321 ],
2379 "description": "The ThinkPHP5 Helper Package", 3322 "description": "The ThinkPHP5 Helper Package",
  3323 + "support": {
  3324 + "issues": "https://github.com/top-think/think-helper/issues",
  3325 + "source": "https://github.com/top-think/think-helper/tree/master"
  3326 + },
2380 "install-path": "../topthink/think-helper" 3327 "install-path": "../topthink/think-helper"
2381 }, 3328 },
2382 { 3329 {
2383 "name": "topthink/think-installer", 3330 "name": "topthink/think-installer",
2384 "version": "v1.0.14", 3331 "version": "v1.0.14",
2385 "version_normalized": "1.0.14.0", 3332 "version_normalized": "1.0.14.0",
  3333 + "source": {
  3334 + "type": "git",
  3335 + "url": "https://github.com/top-think/think-installer.git",
  3336 + "reference": "eae1740ac264a55c06134b6685dfb9f837d004d1"
  3337 + },
2386 "dist": { 3338 "dist": {
2387 "type": "zip", 3339 "type": "zip",
2388 - "url": "https://mirrors.cloud.tencent.com/repository/composer/topthink/think-installer/v1.0.14/topthink-think-installer-v1.0.14.zip", 3340 + "url": "https://api.github.com/repos/top-think/think-installer/zipball/eae1740ac264a55c06134b6685dfb9f837d004d1",
2389 "reference": "eae1740ac264a55c06134b6685dfb9f837d004d1", 3341 "reference": "eae1740ac264a55c06134b6685dfb9f837d004d1",
2390 - "shasum": "" 3342 + "shasum": "",
  3343 + "mirrors": [
  3344 + {
  3345 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  3346 + "preferred": true
  3347 + }
  3348 + ]
2391 }, 3349 },
2392 "require": { 3350 "require": {
2393 "composer-plugin-api": "^1.0||^2.0" 3351 "composer-plugin-api": "^1.0||^2.0"
@@ -2406,6 +3364,7 @@ @@ -2406,6 +3364,7 @@
2406 "think\\composer\\": "src" 3364 "think\\composer\\": "src"
2407 } 3365 }
2408 }, 3366 },
  3367 + "notification-url": "https://packagist.org/downloads/",
2409 "license": [ 3368 "license": [
2410 "Apache-2.0" 3369 "Apache-2.0"
2411 ], 3370 ],
@@ -2415,17 +3374,32 @@ @@ -2415,17 +3374,32 @@
2415 "email": "448901948@qq.com" 3374 "email": "448901948@qq.com"
2416 } 3375 }
2417 ], 3376 ],
  3377 + "support": {
  3378 + "issues": "https://github.com/top-think/think-installer/issues",
  3379 + "source": "https://github.com/top-think/think-installer/tree/v1.0.14"
  3380 + },
2418 "install-path": "../topthink/think-installer" 3381 "install-path": "../topthink/think-installer"
2419 }, 3382 },
2420 { 3383 {
2421 "name": "topthink/think-queue", 3384 "name": "topthink/think-queue",
2422 "version": "v1.1.6", 3385 "version": "v1.1.6",
2423 "version_normalized": "1.1.6.0", 3386 "version_normalized": "1.1.6.0",
  3387 + "source": {
  3388 + "type": "git",
  3389 + "url": "https://github.com/top-think/think-queue.git",
  3390 + "reference": "250650eb0e8ea5af4cfdc7ae46f3f4e0a24ac245"
  3391 + },
2424 "dist": { 3392 "dist": {
2425 "type": "zip", 3393 "type": "zip",
2426 - "url": "https://mirrors.cloud.tencent.com/repository/composer/topthink/think-queue/v1.1.6/topthink-think-queue-v1.1.6.zip", 3394 + "url": "https://api.github.com/repos/top-think/think-queue/zipball/250650eb0e8ea5af4cfdc7ae46f3f4e0a24ac245",
2427 "reference": "250650eb0e8ea5af4cfdc7ae46f3f4e0a24ac245", 3395 "reference": "250650eb0e8ea5af4cfdc7ae46f3f4e0a24ac245",
2428 - "shasum": "" 3396 + "shasum": "",
  3397 + "mirrors": [
  3398 + {
  3399 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  3400 + "preferred": true
  3401 + }
  3402 + ]
2429 }, 3403 },
2430 "require": { 3404 "require": {
2431 "topthink/think-helper": ">=1.0.4", 3405 "topthink/think-helper": ">=1.0.4",
@@ -2450,6 +3424,7 @@ @@ -2450,6 +3424,7 @@
2450 "think\\": "src" 3424 "think\\": "src"
2451 } 3425 }
2452 }, 3426 },
  3427 + "notification-url": "https://packagist.org/downloads/",
2453 "license": [ 3428 "license": [
2454 "Apache-2.0" 3429 "Apache-2.0"
2455 ], 3430 ],
@@ -2460,17 +3435,32 @@ @@ -2460,17 +3435,32 @@
2460 } 3435 }
2461 ], 3436 ],
2462 "description": "The ThinkPHP5 Queue Package", 3437 "description": "The ThinkPHP5 Queue Package",
  3438 + "support": {
  3439 + "issues": "https://github.com/top-think/think-queue/issues",
  3440 + "source": "https://github.com/top-think/think-queue/tree/master"
  3441 + },
2463 "install-path": "../topthink/think-queue" 3442 "install-path": "../topthink/think-queue"
2464 }, 3443 },
2465 { 3444 {
2466 "name": "txthinking/mailer", 3445 "name": "txthinking/mailer",
2467 "version": "v2.0.1", 3446 "version": "v2.0.1",
2468 "version_normalized": "2.0.1.0", 3447 "version_normalized": "2.0.1.0",
  3448 + "source": {
  3449 + "type": "git",
  3450 + "url": "https://github.com/txthinking/Mailer.git",
  3451 + "reference": "09013cf9dad3aac195f66ae5309e8c3343c018e9"
  3452 + },
2469 "dist": { 3453 "dist": {
2470 "type": "zip", 3454 "type": "zip",
2471 - "url": "https://mirrors.cloud.tencent.com/repository/composer/txthinking/mailer/v2.0.1/txthinking-mailer-v2.0.1.zip", 3455 + "url": "https://api.github.com/repos/txthinking/Mailer/zipball/09013cf9dad3aac195f66ae5309e8c3343c018e9",
2472 "reference": "09013cf9dad3aac195f66ae5309e8c3343c018e9", 3456 "reference": "09013cf9dad3aac195f66ae5309e8c3343c018e9",
2473 - "shasum": "" 3457 + "shasum": "",
  3458 + "mirrors": [
  3459 + {
  3460 + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
  3461 + "preferred": true
  3462 + }
  3463 + ]
2474 }, 3464 },
2475 "require": { 3465 "require": {
2476 "php": ">=5.3.2", 3466 "php": ">=5.3.2",
@@ -2488,6 +3478,7 @@ @@ -2488,6 +3478,7 @@
2488 "Tx\\": "src/" 3478 "Tx\\": "src/"
2489 } 3479 }
2490 }, 3480 },
  3481 + "notification-url": "https://packagist.org/downloads/",
2491 "license": [ 3482 "license": [
2492 "MIT" 3483 "MIT"
2493 ], 3484 ],
@@ -2509,6 +3500,10 @@ @@ -2509,6 +3500,10 @@
2509 "mail", 3500 "mail",
2510 "smtp" 3501 "smtp"
2511 ], 3502 ],
  3503 + "support": {
  3504 + "issues": "https://github.com/txthinking/Mailer/issues",
  3505 + "source": "https://github.com/txthinking/Mailer/tree/master"
  3506 + },
2512 "install-path": "../txthinking/mailer" 3507 "install-path": "../txthinking/mailer"
2513 } 3508 }
2514 ], 3509 ],
1 <?php return array( 1 <?php return array(
2 'root' => array( 2 'root' => array(
3 'name' => 'karsonzhang/fastadmin', 3 'name' => 'karsonzhang/fastadmin',
4 - 'pretty_version' => '1.3.5.x-dev',  
5 - 'version' => '1.3.5.9999999-dev',  
6 - 'reference' => 'f8292a8813201872005173b7d2ec3ca556a25cfd', 4 + 'pretty_version' => 'dev-master',
  5 + 'version' => 'dev-master',
  6 + 'reference' => 'fe2e4869d9e522858b92133ebd57217ba709c0fc',
7 'type' => 'project', 7 'type' => 'project',
8 'install_path' => __DIR__ . '/../../', 8 'install_path' => __DIR__ . '/../../',
9 'aliases' => array(), 9 'aliases' => array(),
@@ -29,36 +29,36 @@ @@ -29,36 +29,36 @@
29 'dev_requirement' => false, 29 'dev_requirement' => false,
30 ), 30 ),
31 'guzzlehttp/guzzle' => array( 31 'guzzlehttp/guzzle' => array(
32 - 'pretty_version' => '7.5.0',  
33 - 'version' => '7.5.0.0',  
34 - 'reference' => 'b50a2a1251152e43f6a37f0fa053e730a67d25ba', 32 + 'pretty_version' => '7.7.0',
  33 + 'version' => '7.7.0.0',
  34 + 'reference' => 'fb7566caccf22d74d1ab270de3551f72a58399f5',
35 'type' => 'library', 35 'type' => 'library',
36 'install_path' => __DIR__ . '/../guzzlehttp/guzzle', 36 'install_path' => __DIR__ . '/../guzzlehttp/guzzle',
37 'aliases' => array(), 37 'aliases' => array(),
38 'dev_requirement' => false, 38 'dev_requirement' => false,
39 ), 39 ),
40 'guzzlehttp/promises' => array( 40 'guzzlehttp/promises' => array(
41 - 'pretty_version' => '1.5.2',  
42 - 'version' => '1.5.2.0',  
43 - 'reference' => 'b94b2807d85443f9719887892882d0329d1e2598', 41 + 'pretty_version' => '1.5.3',
  42 + 'version' => '1.5.3.0',
  43 + 'reference' => '67ab6e18aaa14d753cc148911d273f6e6cb6721e',
44 'type' => 'library', 44 'type' => 'library',
45 'install_path' => __DIR__ . '/../guzzlehttp/promises', 45 'install_path' => __DIR__ . '/../guzzlehttp/promises',
46 'aliases' => array(), 46 'aliases' => array(),
47 'dev_requirement' => false, 47 'dev_requirement' => false,
48 ), 48 ),
49 'guzzlehttp/psr7' => array( 49 'guzzlehttp/psr7' => array(
50 - 'pretty_version' => '2.4.3',  
51 - 'version' => '2.4.3.0',  
52 - 'reference' => '67c26b443f348a51926030c83481b85718457d3d', 50 + 'pretty_version' => '2.5.0',
  51 + 'version' => '2.5.0.0',
  52 + 'reference' => 'b635f279edd83fc275f822a1188157ffea568ff6',
53 'type' => 'library', 53 'type' => 'library',
54 'install_path' => __DIR__ . '/../guzzlehttp/psr7', 54 'install_path' => __DIR__ . '/../guzzlehttp/psr7',
55 'aliases' => array(), 55 'aliases' => array(),
56 'dev_requirement' => false, 56 'dev_requirement' => false,
57 ), 57 ),
58 'karsonzhang/fastadmin' => array( 58 'karsonzhang/fastadmin' => array(
59 - 'pretty_version' => '1.3.5.x-dev',  
60 - 'version' => '1.3.5.9999999-dev',  
61 - 'reference' => 'f8292a8813201872005173b7d2ec3ca556a25cfd', 59 + 'pretty_version' => 'dev-master',
  60 + 'version' => 'dev-master',
  61 + 'reference' => 'fe2e4869d9e522858b92133ebd57217ba709c0fc',
62 'type' => 'project', 62 'type' => 'project',
63 'install_path' => __DIR__ . '/../../', 63 'install_path' => __DIR__ . '/../../',
64 'aliases' => array(), 64 'aliases' => array(),
@@ -73,6 +73,15 @@ @@ -73,6 +73,15 @@
73 'aliases' => array(), 73 'aliases' => array(),
74 'dev_requirement' => false, 74 'dev_requirement' => false,
75 ), 75 ),
  76 + 'kkokk/poster' => array(
  77 + 'pretty_version' => 'v2.0.6',
  78 + 'version' => '2.0.6.0',
  79 + 'reference' => 'a657ab240330b2d667416431fd7454dff73bebdf',
  80 + 'type' => 'project',
  81 + 'install_path' => __DIR__ . '/../kkokk/poster',
  82 + 'aliases' => array(),
  83 + 'dev_requirement' => false,
  84 + ),
76 'maennchen/zipstream-php' => array( 85 'maennchen/zipstream-php' => array(
77 'pretty_version' => '2.2.6', 86 'pretty_version' => '2.2.6',
78 'version' => '2.2.6.0', 87 'version' => '2.2.6.0',
@@ -101,18 +110,18 @@ @@ -101,18 +110,18 @@
101 'dev_requirement' => false, 110 'dev_requirement' => false,
102 ), 111 ),
103 'monolog/monolog' => array( 112 'monolog/monolog' => array(
104 - 'pretty_version' => '2.8.0',  
105 - 'version' => '2.8.0.0',  
106 - 'reference' => '720488632c590286b88b80e62aa3d3d551ad4a50', 113 + 'pretty_version' => '2.9.0',
  114 + 'version' => '2.9.0.0',
  115 + 'reference' => 'e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb',
107 'type' => 'library', 116 'type' => 'library',
108 'install_path' => __DIR__ . '/../monolog/monolog', 117 'install_path' => __DIR__ . '/../monolog/monolog',
109 'aliases' => array(), 118 'aliases' => array(),
110 'dev_requirement' => false, 119 'dev_requirement' => false,
111 ), 120 ),
112 'myclabs/php-enum' => array( 121 'myclabs/php-enum' => array(
113 - 'pretty_version' => '1.8.4',  
114 - 'version' => '1.8.4.0',  
115 - 'reference' => 'a867478eae49c9f59ece437ae7f9506bfaa27483', 122 + 'pretty_version' => '1.8.3',
  123 + 'version' => '1.8.3.0',
  124 + 'reference' => 'b942d263c641ddb5190929ff840c68f78713e937',
116 'type' => 'library', 125 'type' => 'library',
117 'install_path' => __DIR__ . '/../myclabs/php-enum', 126 'install_path' => __DIR__ . '/../myclabs/php-enum',
118 'aliases' => array(), 127 'aliases' => array(),
@@ -146,9 +155,9 @@ @@ -146,9 +155,9 @@
146 'dev_requirement' => false, 155 'dev_requirement' => false,
147 ), 156 ),
148 'overtrue/wechat' => array( 157 'overtrue/wechat' => array(
149 - 'pretty_version' => '4.7.0',  
150 - 'version' => '4.7.0.0',  
151 - 'reference' => '4accb0627803ffb6e45d2988898a0293d2a48e68', 158 + 'pretty_version' => '4.6.0',
  159 + 'version' => '4.6.0.0',
  160 + 'reference' => '52af4cbe777cd4aea307beafa0a4518c347467b1',
152 'type' => 'library', 161 'type' => 'library',
153 'install_path' => __DIR__ . '/../overtrue/wechat', 162 'install_path' => __DIR__ . '/../overtrue/wechat',
154 'aliases' => array(), 163 'aliases' => array(),
@@ -236,9 +245,9 @@ @@ -236,9 +245,9 @@
236 ), 245 ),
237 ), 246 ),
238 'psr/http-factory' => array( 247 'psr/http-factory' => array(
239 - 'pretty_version' => '1.0.1',  
240 - 'version' => '1.0.1.0',  
241 - 'reference' => '12ac7fcd07e5b077433f5f2bee95b3a771bf61be', 248 + 'pretty_version' => '1.0.2',
  249 + 'version' => '1.0.2.0',
  250 + 'reference' => 'e616d01114759c4c489f93b099585439f795fe35',
242 'type' => 'library', 251 'type' => 'library',
243 'install_path' => __DIR__ . '/../psr/http-factory', 252 'install_path' => __DIR__ . '/../psr/http-factory',
244 'aliases' => array(), 253 'aliases' => array(),
@@ -251,9 +260,9 @@ @@ -251,9 +260,9 @@
251 ), 260 ),
252 ), 261 ),
253 'psr/http-message' => array( 262 'psr/http-message' => array(
254 - 'pretty_version' => '1.0.1',  
255 - 'version' => '1.0.1.0',  
256 - 'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363', 263 + 'pretty_version' => '1.1',
  264 + 'version' => '1.1.0.0',
  265 + 'reference' => 'cb6ce4845ce34a8ad9e68117c10ee90a29919eba',
257 'type' => 'library', 266 'type' => 'library',
258 'install_path' => __DIR__ . '/../psr/http-message', 267 'install_path' => __DIR__ . '/../psr/http-message',
259 'aliases' => array(), 268 'aliases' => array(),
@@ -305,9 +314,9 @@ @@ -305,9 +314,9 @@
305 'dev_requirement' => false, 314 'dev_requirement' => false,
306 ), 315 ),
307 'symfony/cache' => array( 316 'symfony/cache' => array(
308 - 'pretty_version' => 'v5.4.15',  
309 - 'version' => '5.4.15.0',  
310 - 'reference' => '60e87188abbacd29ccde44d69c5392a33e888e98', 317 + 'pretty_version' => 'v5.4.23',
  318 + 'version' => '5.4.23.0',
  319 + 'reference' => '983c79ff28612cdfd66d8e44e1a06e5afc87e107',
311 'type' => 'library', 320 'type' => 'library',
312 'install_path' => __DIR__ . '/../symfony/cache', 321 'install_path' => __DIR__ . '/../symfony/cache',
313 'aliases' => array(), 322 'aliases' => array(),
@@ -338,9 +347,9 @@ @@ -338,9 +347,9 @@
338 'dev_requirement' => false, 347 'dev_requirement' => false,
339 ), 348 ),
340 'symfony/event-dispatcher' => array( 349 'symfony/event-dispatcher' => array(
341 - 'pretty_version' => 'v5.4.9',  
342 - 'version' => '5.4.9.0',  
343 - 'reference' => '8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc', 350 + 'pretty_version' => 'v5.4.22',
  351 + 'version' => '5.4.22.0',
  352 + 'reference' => '1df20e45d56da29a4b1d8259dd6e950acbf1b13f',
344 'type' => 'library', 353 'type' => 'library',
345 'install_path' => __DIR__ . '/../symfony/event-dispatcher', 354 'install_path' => __DIR__ . '/../symfony/event-dispatcher',
346 'aliases' => array(), 355 'aliases' => array(),
@@ -362,18 +371,18 @@ @@ -362,18 +371,18 @@
362 ), 371 ),
363 ), 372 ),
364 'symfony/finder' => array( 373 'symfony/finder' => array(
365 - 'pretty_version' => 'v5.4.11',  
366 - 'version' => '5.4.11.0',  
367 - 'reference' => '7872a66f57caffa2916a584db1aa7f12adc76f8c', 374 + 'pretty_version' => 'v5.4.21',
  375 + 'version' => '5.4.21.0',
  376 + 'reference' => '078e9a5e1871fcfe6a5ce421b539344c21afef19',
368 'type' => 'library', 377 'type' => 'library',
369 'install_path' => __DIR__ . '/../symfony/finder', 378 'install_path' => __DIR__ . '/../symfony/finder',
370 'aliases' => array(), 379 'aliases' => array(),
371 'dev_requirement' => false, 380 'dev_requirement' => false,
372 ), 381 ),
373 'symfony/http-foundation' => array( 382 'symfony/http-foundation' => array(
374 - 'pretty_version' => 'v5.4.16',  
375 - 'version' => '5.4.16.0',  
376 - 'reference' => '5032c5849aef24741e1970cb03511b0dd131d838', 383 + 'pretty_version' => 'v5.4.24',
  384 + 'version' => '5.4.24.0',
  385 + 'reference' => '3c59f97f6249ce552a44f01b93bfcbd786a954f5',
377 'type' => 'library', 386 'type' => 'library',
378 'install_path' => __DIR__ . '/../symfony/http-foundation', 387 'install_path' => __DIR__ . '/../symfony/http-foundation',
379 'aliases' => array(), 388 'aliases' => array(),
@@ -407,9 +416,9 @@ @@ -407,9 +416,9 @@
407 'dev_requirement' => false, 416 'dev_requirement' => false,
408 ), 417 ),
409 'symfony/psr-http-message-bridge' => array( 418 'symfony/psr-http-message-bridge' => array(
410 - 'pretty_version' => 'v2.1.4',  
411 - 'version' => '2.1.4.0',  
412 - 'reference' => 'a125b93ef378c492e274f217874906fb9babdebb', 419 + 'pretty_version' => 'v2.2.0',
  420 + 'version' => '2.2.0.0',
  421 + 'reference' => '28a732c05bbad801304ad5a5c674cf2970508993',
413 'type' => 'symfony-bridge', 422 'type' => 'symfony-bridge',
414 'install_path' => __DIR__ . '/../symfony/psr-http-message-bridge', 423 'install_path' => __DIR__ . '/../symfony/psr-http-message-bridge',
415 'aliases' => array(), 424 'aliases' => array(),
@@ -436,7 +445,7 @@ @@ -436,7 +445,7 @@
436 'topthink/framework' => array( 445 'topthink/framework' => array(
437 'pretty_version' => 'dev-master', 446 'pretty_version' => 'dev-master',
438 'version' => 'dev-master', 447 'version' => 'dev-master',
439 - 'reference' => 'a5f1cedf07bb3489f7e3b5254496afbf600d4e65', 448 + 'reference' => '096811899433eb0eb0988f1fe1db56ebb521bf34',
440 'type' => 'think-framework', 449 'type' => 'think-framework',
441 'install_path' => __DIR__ . '/../../thinkphp', 450 'install_path' => __DIR__ . '/../../thinkphp',
442 'aliases' => array( 451 'aliases' => array(
@@ -2,6 +2,52 @@ @@ -2,6 +2,52 @@
2 2
3 Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version. 3 Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version.
4 4
  5 +
  6 +## 7.7.0 - 2023-05-21
  7 +
  8 +### Added
  9 +
  10 +- Support `guzzlehttp/promises` v2
  11 +
  12 +
  13 +## 7.6.1 - 2023-05-15
  14 +
  15 +### Fixed
  16 +
  17 +- Fix `SetCookie::fromString` MaxAge deprecation warning and skip invalid MaxAge values
  18 +
  19 +
  20 +## 7.6.0 - 2023-05-14
  21 +
  22 +### Added
  23 +
  24 +- Support for setting the minimum TLS version in a unified way
  25 +- Apply on request the version set in options parameters
  26 +
  27 +
  28 +## 7.5.2 - 2023-05-14
  29 +
  30 +### Fixed
  31 +
  32 +- Fixed set cookie constructor validation
  33 +- Fixed handling of files with `'0'` body
  34 +
  35 +### Changed
  36 +
  37 +- Corrected docs and default connect timeout value to 300 seconds
  38 +
  39 +
  40 +## 7.5.1 - 2023-04-17
  41 +
  42 +### Fixed
  43 +
  44 +- Fixed `NO_PROXY` settings so that setting the `proxy` option to `no` overrides the env variable
  45 +
  46 +### Changed
  47 +
  48 +- Adjusted `guzzlehttp/psr7` version constraint to `^1.9.1 || ^2.4.5`
  49 +
  50 +
5 ## 7.5.0 - 2022-08-28 51 ## 7.5.0 - 2022-08-28
6 52
7 ### Added 53 ### Added
@@ -9,20 +55,30 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version @@ -9,20 +55,30 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
9 - Support PHP 8.2 55 - Support PHP 8.2
10 - Add request to delay closure params 56 - Add request to delay closure params
11 57
  58 +
12 ## 7.4.5 - 2022-06-20 59 ## 7.4.5 - 2022-06-20
13 60
  61 +### Fixed
  62 +
14 * Fix change in port should be considered a change in origin 63 * Fix change in port should be considered a change in origin
15 * Fix `CURLOPT_HTTPAUTH` option not cleared on change of origin 64 * Fix `CURLOPT_HTTPAUTH` option not cleared on change of origin
16 65
  66 +
17 ## 7.4.4 - 2022-06-09 67 ## 7.4.4 - 2022-06-09
18 68
  69 +### Fixed
  70 +
19 * Fix failure to strip Authorization header on HTTP downgrade 71 * Fix failure to strip Authorization header on HTTP downgrade
20 * Fix failure to strip the Cookie header on change in host or HTTP downgrade 72 * Fix failure to strip the Cookie header on change in host or HTTP downgrade
21 73
  74 +
22 ## 7.4.3 - 2022-05-25 75 ## 7.4.3 - 2022-05-25
23 76
  77 +### Fixed
  78 +
24 * Fix cross-domain cookie leakage 79 * Fix cross-domain cookie leakage
25 80
  81 +
26 ## 7.4.2 - 2022-03-20 82 ## 7.4.2 - 2022-03-20
27 83
28 ### Fixed 84 ### Fixed
@@ -31,6 +87,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version @@ -31,6 +87,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
31 - Reject non-HTTP schemes in StreamHandler 87 - Reject non-HTTP schemes in StreamHandler
32 - Set a default ssl.peer_name context in StreamHandler to allow `force_ip_resolve` 88 - Set a default ssl.peer_name context in StreamHandler to allow `force_ip_resolve`
33 89
  90 +
34 ## 7.4.1 - 2021-12-06 91 ## 7.4.1 - 2021-12-06
35 92
36 ### Changed 93 ### Changed
@@ -42,6 +99,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version @@ -42,6 +99,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
42 99
43 - Only close curl handle if it's done [#2950](https://github.com/guzzle/guzzle/pull/2950) 100 - Only close curl handle if it's done [#2950](https://github.com/guzzle/guzzle/pull/2950)
44 101
  102 +
45 ## 7.4.0 - 2021-10-18 103 ## 7.4.0 - 2021-10-18
46 104
47 ### Added 105 ### Added
@@ -59,6 +117,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version @@ -59,6 +117,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
59 117
60 - Be more strict with types [#2914](https://github.com/guzzle/guzzle/pull/2914), [#2917](https://github.com/guzzle/guzzle/pull/2917), [#2919](https://github.com/guzzle/guzzle/pull/2919), [#2945](https://github.com/guzzle/guzzle/pull/2945) 118 - Be more strict with types [#2914](https://github.com/guzzle/guzzle/pull/2914), [#2917](https://github.com/guzzle/guzzle/pull/2917), [#2919](https://github.com/guzzle/guzzle/pull/2919), [#2945](https://github.com/guzzle/guzzle/pull/2945)
61 119
  120 +
62 ## 7.3.0 - 2021-03-23 121 ## 7.3.0 - 2021-03-23
63 122
64 ### Added 123 ### Added
@@ -71,6 +130,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version @@ -71,6 +130,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
71 130
72 - Handle exceptions on invalid header consistently between PHP versions and handlers [#2872](https://github.com/guzzle/guzzle/pull/2872) 131 - Handle exceptions on invalid header consistently between PHP versions and handlers [#2872](https://github.com/guzzle/guzzle/pull/2872)
73 132
  133 +
74 ## 7.2.0 - 2020-10-10 134 ## 7.2.0 - 2020-10-10
75 135
76 ### Added 136 ### Added
@@ -93,6 +153,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version @@ -93,6 +153,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
93 153
94 - Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [#2786](https://github.com/guzzle/guzzle/pull/2786) 154 - Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [#2786](https://github.com/guzzle/guzzle/pull/2786)
95 155
  156 +
96 ## 7.1.1 - 2020-09-30 157 ## 7.1.1 - 2020-09-30
97 158
98 ### Fixed 159 ### Fixed
@@ -104,6 +165,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version @@ -104,6 +165,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
104 - We dont connect curl `sink` on HEAD requests. 165 - We dont connect curl `sink` on HEAD requests.
105 - Removed some PHP 5 workarounds 166 - Removed some PHP 5 workarounds
106 167
  168 +
107 ## 7.1.0 - 2020-09-22 169 ## 7.1.0 - 2020-09-22
108 170
109 ### Added 171 ### Added
@@ -126,14 +188,17 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version @@ -126,14 +188,17 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
126 - `Utils::defaultCaBundle()` 188 - `Utils::defaultCaBundle()`
127 - `CurlFactory::LOW_CURL_VERSION_NUMBER` 189 - `CurlFactory::LOW_CURL_VERSION_NUMBER`
128 190
  191 +
129 ## 7.0.1 - 2020-06-27 192 ## 7.0.1 - 2020-06-27
130 193
131 * Fix multiply defined functions fatal error [#2699](https://github.com/guzzle/guzzle/pull/2699) 194 * Fix multiply defined functions fatal error [#2699](https://github.com/guzzle/guzzle/pull/2699)
132 195
  196 +
133 ## 7.0.0 - 2020-06-27 197 ## 7.0.0 - 2020-06-27
134 198
135 No changes since 7.0.0-rc1. 199 No changes since 7.0.0-rc1.
136 200
  201 +
137 ## 7.0.0-rc1 - 2020-06-15 202 ## 7.0.0-rc1 - 2020-06-15
138 203
139 ### Changed 204 ### Changed
@@ -141,6 +206,7 @@ No changes since 7.0.0-rc1. @@ -141,6 +206,7 @@ No changes since 7.0.0-rc1.
141 * Use error level for logging errors in Middleware [#2629](https://github.com/guzzle/guzzle/pull/2629) 206 * Use error level for logging errors in Middleware [#2629](https://github.com/guzzle/guzzle/pull/2629)
142 * Disabled IDN support by default and require ext-intl to use it [#2675](https://github.com/guzzle/guzzle/pull/2675) 207 * Disabled IDN support by default and require ext-intl to use it [#2675](https://github.com/guzzle/guzzle/pull/2675)
143 208
  209 +
144 ## 7.0.0-beta2 - 2020-05-25 210 ## 7.0.0-beta2 - 2020-05-25
145 211
146 ### Added 212 ### Added
@@ -166,6 +232,7 @@ No changes since 7.0.0-rc1. @@ -166,6 +232,7 @@ No changes since 7.0.0-rc1.
166 232
167 * Pool option `pool_size` [#2528](https://github.com/guzzle/guzzle/pull/2528) 233 * Pool option `pool_size` [#2528](https://github.com/guzzle/guzzle/pull/2528)
168 234
  235 +
169 ## 7.0.0-beta1 - 2019-12-30 236 ## 7.0.0-beta1 - 2019-12-30
170 237
171 The diff might look very big but 95% of Guzzle users will be able to upgrade without modification. 238 The diff might look very big but 95% of Guzzle users will be able to upgrade without modification.
@@ -199,15 +266,18 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -199,15 +266,18 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
199 * `uri_template()` and `UriTemplate` [#2440](https://github.com/guzzle/guzzle/pull/2440) 266 * `uri_template()` and `UriTemplate` [#2440](https://github.com/guzzle/guzzle/pull/2440)
200 * Request options `save_to` and `exceptions` [#2464](https://github.com/guzzle/guzzle/pull/2464) 267 * Request options `save_to` and `exceptions` [#2464](https://github.com/guzzle/guzzle/pull/2464)
201 268
  269 +
202 ## 6.5.2 - 2019-12-23 270 ## 6.5.2 - 2019-12-23
203 271
204 * idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489) 272 * idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489)
205 273
  274 +
206 ## 6.5.1 - 2019-12-21 275 ## 6.5.1 - 2019-12-21
207 276
208 * Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454) 277 * Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454)
209 * IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424) 278 * IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424)
210 279
  280 +
211 ## 6.5.0 - 2019-12-07 281 ## 6.5.0 - 2019-12-07
212 282
213 * Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143) 283 * Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143)
@@ -217,11 +287,13 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -217,11 +287,13 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
217 * Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348) 287 * Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348)
218 * Deprecated `ClientInterface::VERSION` 288 * Deprecated `ClientInterface::VERSION`
219 289
  290 +
220 ## 6.4.1 - 2019-10-23 291 ## 6.4.1 - 2019-10-23
221 292
222 * No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that 293 * No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that
223 * Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar` 294 * Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar`
224 295
  296 +
225 ## 6.4.0 - 2019-10-23 297 ## 6.4.0 - 2019-10-23
226 298
227 * Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108) 299 * Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108)
@@ -234,6 +306,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -234,6 +306,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
234 * Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335) 306 * Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335)
235 * Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362) 307 * Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362)
236 308
  309 +
237 ## 6.3.3 - 2018-04-22 310 ## 6.3.3 - 2018-04-22
238 311
239 * Fix: Default headers when decode_content is specified 312 * Fix: Default headers when decode_content is specified
@@ -275,13 +348,14 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -275,13 +348,14 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
275 * Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684) 348 * Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684)
276 * Improvement: Use `\GuzzleHttp\Promise\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827) 349 * Improvement: Use `\GuzzleHttp\Promise\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827)
277 350
278 -  
279 + Minor code cleanups, documentation fixes and clarifications. 351 + Minor code cleanups, documentation fixes and clarifications.
280 352
  353 +
281 ## 6.2.3 - 2017-02-28 354 ## 6.2.3 - 2017-02-28
282 355
283 * Fix deprecations with guzzle/psr7 version 1.4 356 * Fix deprecations with guzzle/psr7 version 1.4
284 357
  358 +
285 ## 6.2.2 - 2016-10-08 359 ## 6.2.2 - 2016-10-08
286 360
287 * Allow to pass nullable Response to delay callable 361 * Allow to pass nullable Response to delay callable
@@ -289,6 +363,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -289,6 +363,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
289 * Fix drain case where content-length is the literal string zero 363 * Fix drain case where content-length is the literal string zero
290 * Obfuscate in-URL credentials in exceptions 364 * Obfuscate in-URL credentials in exceptions
291 365
  366 +
292 ## 6.2.1 - 2016-07-18 367 ## 6.2.1 - 2016-07-18
293 368
294 * Address HTTP_PROXY security vulnerability, CVE-2016-5385: 369 * Address HTTP_PROXY security vulnerability, CVE-2016-5385:
@@ -299,6 +374,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -299,6 +374,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
299 a server does not honor `Connection: close`. 374 a server does not honor `Connection: close`.
300 * Ignore URI fragment when sending requests. 375 * Ignore URI fragment when sending requests.
301 376
  377 +
302 ## 6.2.0 - 2016-03-21 378 ## 6.2.0 - 2016-03-21
303 379
304 * Feature: added `GuzzleHttp\json_encode` and `GuzzleHttp\json_decode`. 380 * Feature: added `GuzzleHttp\json_encode` and `GuzzleHttp\json_decode`.
@@ -318,6 +394,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -318,6 +394,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
318 * Bug fix: provide an empty string to `http_build_query` for HHVM workaround. 394 * Bug fix: provide an empty string to `http_build_query` for HHVM workaround.
319 https://github.com/guzzle/guzzle/pull/1367 395 https://github.com/guzzle/guzzle/pull/1367
320 396
  397 +
321 ## 6.1.1 - 2015-11-22 398 ## 6.1.1 - 2015-11-22
322 399
323 * Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler 400 * Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler
@@ -333,6 +410,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -333,6 +410,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
333 * Bug fix: fixed regression where MockHandler was not using `sink`. 410 * Bug fix: fixed regression where MockHandler was not using `sink`.
334 https://github.com/guzzle/guzzle/pull/1292 411 https://github.com/guzzle/guzzle/pull/1292
335 412
  413 +
336 ## 6.1.0 - 2015-09-08 414 ## 6.1.0 - 2015-09-08
337 415
338 * Feature: Added the `on_stats` request option to provide access to transfer 416 * Feature: Added the `on_stats` request option to provide access to transfer
@@ -367,6 +445,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -367,6 +445,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
367 * Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set. 445 * Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set.
368 https://github.com/guzzle/guzzle/pull/1189 446 https://github.com/guzzle/guzzle/pull/1189
369 447
  448 +
370 ## 6.0.2 - 2015-07-04 449 ## 6.0.2 - 2015-07-04
371 450
372 * Fixed a memory leak in the curl handlers in which references to callbacks 451 * Fixed a memory leak in the curl handlers in which references to callbacks
@@ -384,6 +463,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -384,6 +463,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
384 * Functions are now conditionally required using an additional level of 463 * Functions are now conditionally required using an additional level of
385 indirection to help with global Composer installations. 464 indirection to help with global Composer installations.
386 465
  466 +
387 ## 6.0.1 - 2015-05-27 467 ## 6.0.1 - 2015-05-27
388 468
389 * Fixed a bug with serializing the `query` request option where the `&` 469 * Fixed a bug with serializing the `query` request option where the `&`
@@ -392,6 +472,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -392,6 +472,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
392 use `form_params` or `multipart` instead. 472 use `form_params` or `multipart` instead.
393 * Various doc fixes. 473 * Various doc fixes.
394 474
  475 +
395 ## 6.0.0 - 2015-05-26 476 ## 6.0.0 - 2015-05-26
396 477
397 * See the UPGRADING.md document for more information. 478 * See the UPGRADING.md document for more information.
@@ -416,6 +497,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -416,6 +497,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
416 * `$maxHandles` has been removed from CurlMultiHandler. 497 * `$maxHandles` has been removed from CurlMultiHandler.
417 * `MultipartPostBody` is now part of the `guzzlehttp/psr7` package. 498 * `MultipartPostBody` is now part of the `guzzlehttp/psr7` package.
418 499
  500 +
419 ## 5.3.0 - 2015-05-19 501 ## 5.3.0 - 2015-05-19
420 502
421 * Mock now supports `save_to` 503 * Mock now supports `save_to`
@@ -426,6 +508,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -426,6 +508,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
426 * Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated. 508 * Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated.
427 * URL scheme is now always lowercased. 509 * URL scheme is now always lowercased.
428 510
  511 +
429 ## 6.0.0-beta.1 512 ## 6.0.0-beta.1
430 513
431 * Requires PHP >= 5.5 514 * Requires PHP >= 5.5
@@ -478,6 +561,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -478,6 +561,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
478 * `GuzzleHttp\QueryParser` has been replaced with the 561 * `GuzzleHttp\QueryParser` has been replaced with the
479 `GuzzleHttp\Psr7\parse_query`. 562 `GuzzleHttp\Psr7\parse_query`.
480 563
  564 +
481 ## 5.2.0 - 2015-01-27 565 ## 5.2.0 - 2015-01-27
482 566
483 * Added `AppliesHeadersInterface` to make applying headers to a request based 567 * Added `AppliesHeadersInterface` to make applying headers to a request based
@@ -488,6 +572,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -488,6 +572,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
488 RingBridge. 572 RingBridge.
489 * Added a guard in the Pool class to not use recursion for request retries. 573 * Added a guard in the Pool class to not use recursion for request retries.
490 574
  575 +
491 ## 5.1.0 - 2014-12-19 576 ## 5.1.0 - 2014-12-19
492 577
493 * Pool class no longer uses recursion when a request is intercepted. 578 * Pool class no longer uses recursion when a request is intercepted.
@@ -508,6 +593,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c @@ -508,6 +593,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
508 * Exceptions thrown in the `end` event are now correctly wrapped with Guzzle 593 * Exceptions thrown in the `end` event are now correctly wrapped with Guzzle
509 specific exceptions if necessary. 594 specific exceptions if necessary.
510 595
  596 +
511 ## 5.0.3 - 2014-11-03 597 ## 5.0.3 - 2014-11-03
512 598
513 This change updates query strings so that they are treated as un-encoded values 599 This change updates query strings so that they are treated as un-encoded values
@@ -522,6 +608,7 @@ string that should not be parsed or encoded (unless a call to getQuery() is @@ -522,6 +608,7 @@ string that should not be parsed or encoded (unless a call to getQuery() is
522 subsequently made, forcing the query-string to be converted into a Query 608 subsequently made, forcing the query-string to be converted into a Query
523 object). 609 object).
524 610
  611 +
525 ## 5.0.2 - 2014-10-30 612 ## 5.0.2 - 2014-10-30
526 613
527 * Added a trailing `\r\n` to multipart/form-data payloads. See 614 * Added a trailing `\r\n` to multipart/form-data payloads. See
@@ -543,6 +630,7 @@ object). @@ -543,6 +630,7 @@ object).
543 string on a URL: Now allowing many more characters to be present in the 630 string on a URL: Now allowing many more characters to be present in the
544 query string without being percent encoded. See https://tools.ietf.org/html/rfc3986#appendix-A 631 query string without being percent encoded. See https://tools.ietf.org/html/rfc3986#appendix-A
545 632
  633 +
546 ## 5.0.1 - 2014-10-16 634 ## 5.0.1 - 2014-10-16
547 635
548 Bugfix release. 636 Bugfix release.
@@ -554,6 +642,7 @@ Bugfix release. @@ -554,6 +642,7 @@ Bugfix release.
554 * Fixed an issue where transfer statistics were not being populated in the 642 * Fixed an issue where transfer statistics were not being populated in the
555 RingBridge. https://github.com/guzzle/guzzle/issues/866 643 RingBridge. https://github.com/guzzle/guzzle/issues/866
556 644
  645 +
557 ## 5.0.0 - 2014-10-12 646 ## 5.0.0 - 2014-10-12
558 647
559 Adding support for non-blocking responses and some minor API cleanup. 648 Adding support for non-blocking responses and some minor API cleanup.
@@ -635,6 +724,7 @@ interfaces. @@ -635,6 +724,7 @@ interfaces.
635 argument. They now accept an associative array of options, including the 724 argument. They now accept an associative array of options, including the
636 "size" key and "metadata" key which can be used to provide custom metadata. 725 "size" key and "metadata" key which can be used to provide custom metadata.
637 726
  727 +
638 ## 4.2.2 - 2014-09-08 728 ## 4.2.2 - 2014-09-08
639 729
640 * Fixed a memory leak in the CurlAdapter when reusing cURL handles. 730 * Fixed a memory leak in the CurlAdapter when reusing cURL handles.
@@ -60,13 +60,13 @@ composer require guzzlehttp/guzzle @@ -60,13 +60,13 @@ composer require guzzlehttp/guzzle
60 60
61 ## Version Guidance 61 ## Version Guidance
62 62
63 -| Version | Status | Packagist | Namespace | Repo | Docs | PSR-7 | PHP Version |  
64 -|---------|----------------|---------------------|--------------|---------------------|---------------------|-------|--------------|  
65 -| 3.x | EOL | `guzzle/guzzle` | `Guzzle` | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No | >=5.3.3,<7.0 |  
66 -| 4.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A | No | >=5.4,<7.0 |  
67 -| 5.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >=5.4,<7.4 |  
68 -| 6.x | Security fixes | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes | >=5.5,<8.0 |  
69 -| 7.x | Latest | `guzzlehttp/guzzle` | `GuzzleHttp` | [v7][guzzle-7-repo] | [v7][guzzle-7-docs] | Yes | >=7.2.5,<8.2 | 63 +| Version | Status | Packagist | Namespace | Repo | Docs | PSR-7 | PHP Version |
  64 +|---------|---------------------|---------------------|--------------|---------------------|---------------------|-------|--------------|
  65 +| 3.x | EOL | `guzzle/guzzle` | `Guzzle` | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No | >=5.3.3,<7.0 |
  66 +| 4.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A | No | >=5.4,<7.0 |
  67 +| 5.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >=5.4,<7.4 |
  68 +| 6.x | Security fixes only | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes | >=5.5,<8.0 |
  69 +| 7.x | Latest | `guzzlehttp/guzzle` | `GuzzleHttp` | [v7][guzzle-7-repo] | [v7][guzzle-7-docs] | Yes | >=7.2.5,<8.3 |
70 70
71 [guzzle-3-repo]: https://github.com/guzzle/guzzle3 71 [guzzle-3-repo]: https://github.com/guzzle/guzzle3
72 [guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x 72 [guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x
@@ -53,8 +53,8 @@ @@ -53,8 +53,8 @@
53 "require": { 53 "require": {
54 "php": "^7.2.5 || ^8.0", 54 "php": "^7.2.5 || ^8.0",
55 "ext-json": "*", 55 "ext-json": "*",
56 - "guzzlehttp/promises": "^1.5",  
57 - "guzzlehttp/psr7": "^1.9 || ^2.4", 56 + "guzzlehttp/promises": "^1.5.3 || ^2.0",
  57 + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
58 "psr/http-client": "^1.0", 58 "psr/http-client": "^1.0",
59 "symfony/deprecation-contracts": "^2.2 || ^3.0" 59 "symfony/deprecation-contracts": "^2.2 || ^3.0"
60 }, 60 },
@@ -64,7 +64,8 @@ @@ -64,7 +64,8 @@
64 "require-dev": { 64 "require-dev": {
65 "ext-curl": "*", 65 "ext-curl": "*",
66 "bamarni/composer-bin-plugin": "^1.8.1", 66 "bamarni/composer-bin-plugin": "^1.8.1",
67 - "php-http/client-integration-tests": "^3.0", 67 + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
  68 + "php-http/message-factory": "^1.1",
68 "phpunit/phpunit": "^8.5.29 || ^9.5.23", 69 "phpunit/phpunit": "^8.5.29 || ^9.5.23",
69 "psr/log": "^1.1 || ^2.0 || ^3.0" 70 "psr/log": "^1.1 || ^2.0 || ^3.0"
70 }, 71 },
@@ -84,9 +85,6 @@ @@ -84,9 +85,6 @@
84 "bamarni-bin": { 85 "bamarni-bin": {
85 "bin-links": true, 86 "bin-links": true,
86 "forward-command": false 87 "forward-command": false
87 - },  
88 - "branch-alias": {  
89 - "dev-master": "7.5-dev"  
90 } 88 }
91 }, 89 },
92 "autoload": { 90 "autoload": {
@@ -120,13 +120,14 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface @@ -120,13 +120,14 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
120 public function send(RequestInterface $request, array $options = []): ResponseInterface 120 public function send(RequestInterface $request, array $options = []): ResponseInterface
121 { 121 {
122 $options[RequestOptions::SYNCHRONOUS] = true; 122 $options[RequestOptions::SYNCHRONOUS] = true;
  123 +
123 return $this->sendAsync($request, $options)->wait(); 124 return $this->sendAsync($request, $options)->wait();
124 } 125 }
125 126
126 /** 127 /**
127 * The HttpClient PSR (PSR-18) specify this method. 128 * The HttpClient PSR (PSR-18) specify this method.
128 * 129 *
129 - * @inheritDoc 130 + * {@inheritDoc}
130 */ 131 */
131 public function sendRequest(RequestInterface $request): ResponseInterface 132 public function sendRequest(RequestInterface $request): ResponseInterface
132 { 133 {
@@ -184,6 +185,7 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface @@ -184,6 +185,7 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
184 public function request(string $method, $uri = '', array $options = []): ResponseInterface 185 public function request(string $method, $uri = '', array $options = []): ResponseInterface
185 { 186 {
186 $options[RequestOptions::SYNCHRONOUS] = true; 187 $options[RequestOptions::SYNCHRONOUS] = true;
  188 +
187 return $this->requestAsync($method, $uri, $options)->wait(); 189 return $this->requestAsync($method, $uri, $options)->wait();
188 } 190 }
189 191
@@ -228,11 +230,11 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface @@ -228,11 +230,11 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
228 { 230 {
229 $defaults = [ 231 $defaults = [
230 'allow_redirects' => RedirectMiddleware::$defaultSettings, 232 'allow_redirects' => RedirectMiddleware::$defaultSettings,
231 - 'http_errors' => true,  
232 - 'decode_content' => true,  
233 - 'verify' => true,  
234 - 'cookies' => false,  
235 - 'idn_conversion' => false, 233 + 'http_errors' => true,
  234 + 'decode_content' => true,
  235 + 'verify' => true,
  236 + 'cookies' => false,
  237 + 'idn_conversion' => false,
236 ]; 238 ];
237 239
238 // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set. 240 // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set.
@@ -354,10 +356,10 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface @@ -354,10 +356,10 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
354 if (isset($options['form_params'])) { 356 if (isset($options['form_params'])) {
355 if (isset($options['multipart'])) { 357 if (isset($options['multipart'])) {
356 throw new InvalidArgumentException('You cannot use ' 358 throw new InvalidArgumentException('You cannot use '
357 - . 'form_params and multipart at the same time. Use the '  
358 - . 'form_params option if you want to send application/'  
359 - . 'x-www-form-urlencoded requests, and the multipart '  
360 - . 'option to send multipart/form-data requests.'); 359 + .'form_params and multipart at the same time. Use the '
  360 + .'form_params option if you want to send application/'
  361 + .'x-www-form-urlencoded requests, and the multipart '
  362 + .'option to send multipart/form-data requests.');
361 } 363 }
362 $options['body'] = \http_build_query($options['form_params'], '', '&'); 364 $options['body'] = \http_build_query($options['form_params'], '', '&');
363 unset($options['form_params']); 365 unset($options['form_params']);
@@ -403,7 +405,7 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface @@ -403,7 +405,7 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
403 // Ensure that we don't have the header in different case and set the new value. 405 // Ensure that we don't have the header in different case and set the new value.
404 $modify['set_headers'] = Psr7\Utils::caselessRemove(['Authorization'], $modify['set_headers']); 406 $modify['set_headers'] = Psr7\Utils::caselessRemove(['Authorization'], $modify['set_headers']);
405 $modify['set_headers']['Authorization'] = 'Basic ' 407 $modify['set_headers']['Authorization'] = 'Basic '
406 - . \base64_encode("$value[0]:$value[1]"); 408 + .\base64_encode("$value[0]:$value[1]");
407 break; 409 break;
408 case 'digest': 410 case 'digest':
409 // @todo: Do not rely on curl 411 // @todo: Do not rely on curl
@@ -437,13 +439,17 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface @@ -437,13 +439,17 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
437 } 439 }
438 } 440 }
439 441
  442 + if (isset($options['version'])) {
  443 + $modify['version'] = $options['version'];
  444 + }
  445 +
440 $request = Psr7\Utils::modifyRequest($request, $modify); 446 $request = Psr7\Utils::modifyRequest($request, $modify);
441 if ($request->getBody() instanceof Psr7\MultipartStream) { 447 if ($request->getBody() instanceof Psr7\MultipartStream) {
442 // Use a multipart/form-data POST if a Content-Type is not set. 448 // Use a multipart/form-data POST if a Content-Type is not set.
443 // Ensure that we don't have the header in different case and set the new value. 449 // Ensure that we don't have the header in different case and set the new value.
444 $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']); 450 $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']);
445 $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary=' 451 $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary='
446 - . $request->getBody()->getBoundary(); 452 + .$request->getBody()->getBoundary();
447 } 453 }
448 454
449 // Merge in conditional headers if they are not present. 455 // Merge in conditional headers if they are not present.
@@ -469,9 +475,9 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface @@ -469,9 +475,9 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
469 private function invalidBody(): InvalidArgumentException 475 private function invalidBody(): InvalidArgumentException
470 { 476 {
471 return new InvalidArgumentException('Passing in the "body" request ' 477 return new InvalidArgumentException('Passing in the "body" request '
472 - . 'option as an array to send a request is not supported. '  
473 - . 'Please use the "form_params" request option to send a '  
474 - . 'application/x-www-form-urlencoded request, or the "multipart" '  
475 - . 'request option to send a multipart/form-data request.'); 478 + .'option as an array to send a request is not supported. '
  479 + .'Please use the "form_params" request option to send a '
  480 + .'application/x-www-form-urlencoded request, or the "multipart" '
  481 + .'request option to send a multipart/form-data request.');
476 } 482 }
477 } 483 }
@@ -50,10 +50,10 @@ class CookieJar implements CookieJarInterface @@ -50,10 +50,10 @@ class CookieJar implements CookieJarInterface
50 $cookieJar = new self(); 50 $cookieJar = new self();
51 foreach ($cookies as $name => $value) { 51 foreach ($cookies as $name => $value) {
52 $cookieJar->setCookie(new SetCookie([ 52 $cookieJar->setCookie(new SetCookie([
53 - 'Domain' => $domain,  
54 - 'Name' => $name,  
55 - 'Value' => $value,  
56 - 'Discard' => true 53 + 'Domain' => $domain,
  54 + 'Name' => $name,
  55 + 'Value' => $value,
  56 + 'Discard' => true,
57 ])); 57 ]));
58 } 58 }
59 59
@@ -97,7 +97,7 @@ class CookieJar implements CookieJarInterface @@ -97,7 +97,7 @@ class CookieJar implements CookieJarInterface
97 } 97 }
98 98
99 /** 99 /**
100 - * @inheritDoc 100 + * {@inheritDoc}
101 */ 101 */
102 public function toArray(): array 102 public function toArray(): array
103 { 103 {
@@ -107,12 +107,13 @@ class CookieJar implements CookieJarInterface @@ -107,12 +107,13 @@ class CookieJar implements CookieJarInterface
107 } 107 }
108 108
109 /** 109 /**
110 - * @inheritDoc 110 + * {@inheritDoc}
111 */ 111 */
112 public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void 112 public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void
113 { 113 {
114 if (!$domain) { 114 if (!$domain) {
115 $this->cookies = []; 115 $this->cookies = [];
  116 +
116 return; 117 return;
117 } elseif (!$path) { 118 } elseif (!$path) {
118 $this->cookies = \array_filter( 119 $this->cookies = \array_filter(
@@ -142,7 +143,7 @@ class CookieJar implements CookieJarInterface @@ -142,7 +143,7 @@ class CookieJar implements CookieJarInterface
142 } 143 }
143 144
144 /** 145 /**
145 - * @inheritDoc 146 + * {@inheritDoc}
146 */ 147 */
147 public function clearSessionCookies(): void 148 public function clearSessionCookies(): void
148 { 149 {
@@ -155,7 +156,7 @@ class CookieJar implements CookieJarInterface @@ -155,7 +156,7 @@ class CookieJar implements CookieJarInterface
155 } 156 }
156 157
157 /** 158 /**
158 - * @inheritDoc 159 + * {@inheritDoc}
159 */ 160 */
160 public function setCookie(SetCookie $cookie): bool 161 public function setCookie(SetCookie $cookie): bool
161 { 162 {
@@ -170,9 +171,10 @@ class CookieJar implements CookieJarInterface @@ -170,9 +171,10 @@ class CookieJar implements CookieJarInterface
170 $result = $cookie->validate(); 171 $result = $cookie->validate();
171 if ($result !== true) { 172 if ($result !== true) {
172 if ($this->strictMode) { 173 if ($this->strictMode) {
173 - throw new \RuntimeException('Invalid cookie: ' . $result); 174 + throw new \RuntimeException('Invalid cookie: '.$result);
174 } 175 }
175 $this->removeCookieIfEmpty($cookie); 176 $this->removeCookieIfEmpty($cookie);
  177 +
176 return false; 178 return false;
177 } 179 }
178 180
@@ -253,7 +255,7 @@ class CookieJar implements CookieJarInterface @@ -253,7 +255,7 @@ class CookieJar implements CookieJarInterface
253 /** 255 /**
254 * Computes cookie path following RFC 6265 section 5.1.4 256 * Computes cookie path following RFC 6265 section 5.1.4
255 * 257 *
256 - * @link https://tools.ietf.org/html/rfc6265#section-5.1.4 258 + * @see https://tools.ietf.org/html/rfc6265#section-5.1.4
257 */ 259 */
258 private function getCookiePathFromRequest(RequestInterface $request): string 260 private function getCookiePathFromRequest(RequestInterface $request): string
259 { 261 {
@@ -289,8 +291,8 @@ class CookieJar implements CookieJarInterface @@ -289,8 +291,8 @@ class CookieJar implements CookieJarInterface
289 !$cookie->isExpired() && 291 !$cookie->isExpired() &&
290 (!$cookie->getSecure() || $scheme === 'https') 292 (!$cookie->getSecure() || $scheme === 'https')
291 ) { 293 ) {
292 - $values[] = $cookie->getName() . '='  
293 - . $cookie->getValue(); 294 + $values[] = $cookie->getName().'='
  295 + .$cookie->getValue();
294 } 296 }
295 } 297 }
296 298
@@ -13,7 +13,7 @@ use Psr\Http\Message\ResponseInterface; @@ -13,7 +13,7 @@ use Psr\Http\Message\ResponseInterface;
13 * necessary. Subclasses are also responsible for storing and retrieving 13 * necessary. Subclasses are also responsible for storing and retrieving
14 * cookies from a file, database, etc. 14 * cookies from a file, database, etc.
15 * 15 *
16 - * @link https://docs.python.org/2/library/cookielib.html Inspiration 16 + * @see https://docs.python.org/2/library/cookielib.html Inspiration
17 * @extends \IteratorAggregate<SetCookie> 17 * @extends \IteratorAggregate<SetCookie>
18 */ 18 */
19 interface CookieJarInterface extends \Countable, \IteratorAggregate 19 interface CookieJarInterface extends \Countable, \IteratorAggregate
@@ -71,7 +71,7 @@ class SessionCookieJar extends CookieJar @@ -71,7 +71,7 @@ class SessionCookieJar extends CookieJar
71 $this->setCookie(new SetCookie($cookie)); 71 $this->setCookie(new SetCookie($cookie));
72 } 72 }
73 } elseif (\strlen($data)) { 73 } elseif (\strlen($data)) {
74 - throw new \RuntimeException("Invalid cookie data"); 74 + throw new \RuntimeException('Invalid cookie data');
75 } 75 }
76 } 76 }
77 } 77 }
@@ -11,15 +11,15 @@ class SetCookie @@ -11,15 +11,15 @@ class SetCookie
11 * @var array 11 * @var array
12 */ 12 */
13 private static $defaults = [ 13 private static $defaults = [
14 - 'Name' => null,  
15 - 'Value' => null,  
16 - 'Domain' => null,  
17 - 'Path' => '/',  
18 - 'Max-Age' => null,  
19 - 'Expires' => null,  
20 - 'Secure' => false,  
21 - 'Discard' => false,  
22 - 'HttpOnly' => false 14 + 'Name' => null,
  15 + 'Value' => null,
  16 + 'Domain' => null,
  17 + 'Path' => '/',
  18 + 'Max-Age' => null,
  19 + 'Expires' => null,
  20 + 'Secure' => false,
  21 + 'Discard' => false,
  22 + 'HttpOnly' => false,
23 ]; 23 ];
24 24
25 /** 25 /**
@@ -58,7 +58,13 @@ class SetCookie @@ -58,7 +58,13 @@ class SetCookie
58 } else { 58 } else {
59 foreach (\array_keys(self::$defaults) as $search) { 59 foreach (\array_keys(self::$defaults) as $search) {
60 if (!\strcasecmp($search, $key)) { 60 if (!\strcasecmp($search, $key)) {
61 - $data[$search] = $value; 61 + if ($search === 'Max-Age') {
  62 + if (is_numeric($value)) {
  63 + $data[$search] = (int) $value;
  64 + }
  65 + } else {
  66 + $data[$search] = $value;
  67 + }
62 continue 2; 68 continue 2;
63 } 69 }
64 } 70 }
@@ -74,13 +80,49 @@ class SetCookie @@ -74,13 +80,49 @@ class SetCookie
74 */ 80 */
75 public function __construct(array $data = []) 81 public function __construct(array $data = [])
76 { 82 {
77 - /** @var array|null $replaced will be null in case of replace error */  
78 - $replaced = \array_replace(self::$defaults, $data);  
79 - if ($replaced === null) {  
80 - throw new \InvalidArgumentException('Unable to replace the default values for the Cookie.'); 83 + $this->data = self::$defaults;
  84 +
  85 + if (isset($data['Name'])) {
  86 + $this->setName($data['Name']);
  87 + }
  88 +
  89 + if (isset($data['Value'])) {
  90 + $this->setValue($data['Value']);
  91 + }
  92 +
  93 + if (isset($data['Domain'])) {
  94 + $this->setDomain($data['Domain']);
  95 + }
  96 +
  97 + if (isset($data['Path'])) {
  98 + $this->setPath($data['Path']);
  99 + }
  100 +
  101 + if (isset($data['Max-Age'])) {
  102 + $this->setMaxAge($data['Max-Age']);
  103 + }
  104 +
  105 + if (isset($data['Expires'])) {
  106 + $this->setExpires($data['Expires']);
  107 + }
  108 +
  109 + if (isset($data['Secure'])) {
  110 + $this->setSecure($data['Secure']);
  111 + }
  112 +
  113 + if (isset($data['Discard'])) {
  114 + $this->setDiscard($data['Discard']);
  115 + }
  116 +
  117 + if (isset($data['HttpOnly'])) {
  118 + $this->setHttpOnly($data['HttpOnly']);
  119 + }
  120 +
  121 + // Set the remaining values that don't have extra validation logic
  122 + foreach (array_diff(array_keys($data), array_keys(self::$defaults)) as $key) {
  123 + $this->data[$key] = $data[$key];
81 } 124 }
82 125
83 - $this->data = $replaced;  
84 // Extract the Expires value and turn it into a UNIX timestamp if needed 126 // Extract the Expires value and turn it into a UNIX timestamp if needed
85 if (!$this->getExpires() && $this->getMaxAge()) { 127 if (!$this->getExpires() && $this->getMaxAge()) {
86 // Calculate the Expires date 128 // Calculate the Expires date
@@ -92,13 +134,13 @@ class SetCookie @@ -92,13 +134,13 @@ class SetCookie
92 134
93 public function __toString() 135 public function __toString()
94 { 136 {
95 - $str = $this->data['Name'] . '=' . ($this->data['Value'] ?? '') . '; '; 137 + $str = $this->data['Name'].'='.($this->data['Value'] ?? '').'; ';
96 foreach ($this->data as $k => $v) { 138 foreach ($this->data as $k => $v) {
97 if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== false) { 139 if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== false) {
98 if ($k === 'Expires') { 140 if ($k === 'Expires') {
99 - $str .= 'Expires=' . \gmdate('D, d M Y H:i:s \G\M\T', $v) . '; '; 141 + $str .= 'Expires='.\gmdate('D, d M Y H:i:s \G\M\T', $v).'; ';
100 } else { 142 } else {
101 - $str .= ($v === true ? $k : "{$k}={$v}") . '; '; 143 + $str .= ($v === true ? $k : "{$k}={$v}").'; ';
102 } 144 }
103 } 145 }
104 } 146 }
@@ -394,7 +436,7 @@ class SetCookie @@ -394,7 +436,7 @@ class SetCookie
394 return false; 436 return false;
395 } 437 }
396 438
397 - return (bool) \preg_match('/\.' . \preg_quote($cookieDomain, '/') . '$/', $domain); 439 + return (bool) \preg_match('/\.'.\preg_quote($cookieDomain, '/').'$/', $domain);
398 } 440 }
399 441
400 /** 442 /**
@@ -423,8 +465,8 @@ class SetCookie @@ -423,8 +465,8 @@ class SetCookie
423 $name 465 $name
424 )) { 466 )) {
425 return 'Cookie name must not contain invalid characters: ASCII ' 467 return 'Cookie name must not contain invalid characters: ASCII '
426 - . 'Control characters (0-31;127), space, tab and the '  
427 - . 'following characters: ()<>@,;:\"/?={}'; 468 + .'Control characters (0-31;127), space, tab and the '
  469 + .'following characters: ()<>@,;:\"/?={}';
428 } 470 }
429 471
430 // Value must not be null. 0 and empty string are valid. Empty strings 472 // Value must not be null. 0 and empty string are valid. Empty strings
@@ -51,7 +51,7 @@ class CurlFactory implements CurlFactoryInterface @@ -51,7 +51,7 @@ class CurlFactory implements CurlFactoryInterface
51 unset($options['curl']['body_as_string']); 51 unset($options['curl']['body_as_string']);
52 } 52 }
53 53
54 - $easy = new EasyHandle; 54 + $easy = new EasyHandle();
55 $easy->request = $request; 55 $easy->request = $request;
56 $easy->options = $options; 56 $easy->options = $options;
57 $conf = $this->getDefaultConf($easy); 57 $conf = $this->getDefaultConf($easy);
@@ -161,11 +161,11 @@ class CurlFactory implements CurlFactoryInterface @@ -161,11 +161,11 @@ class CurlFactory implements CurlFactoryInterface
161 private static function createRejection(EasyHandle $easy, array $ctx): PromiseInterface 161 private static function createRejection(EasyHandle $easy, array $ctx): PromiseInterface
162 { 162 {
163 static $connectionErrors = [ 163 static $connectionErrors = [
164 - \CURLE_OPERATION_TIMEOUTED => true, 164 + \CURLE_OPERATION_TIMEOUTED => true,
165 \CURLE_COULDNT_RESOLVE_HOST => true, 165 \CURLE_COULDNT_RESOLVE_HOST => true,
166 - \CURLE_COULDNT_CONNECT => true,  
167 - \CURLE_SSL_CONNECT_ERROR => true,  
168 - \CURLE_GOT_NOTHING => true, 166 + \CURLE_COULDNT_CONNECT => true,
  167 + \CURLE_SSL_CONNECT_ERROR => true,
  168 + \CURLE_GOT_NOTHING => true,
169 ]; 169 ];
170 170
171 if ($easy->createResponseException) { 171 if ($easy->createResponseException) {
@@ -219,12 +219,12 @@ class CurlFactory implements CurlFactoryInterface @@ -219,12 +219,12 @@ class CurlFactory implements CurlFactoryInterface
219 private function getDefaultConf(EasyHandle $easy): array 219 private function getDefaultConf(EasyHandle $easy): array
220 { 220 {
221 $conf = [ 221 $conf = [
222 - '_headers' => $easy->request->getHeaders(),  
223 - \CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(),  
224 - \CURLOPT_URL => (string) $easy->request->getUri()->withFragment(''), 222 + '_headers' => $easy->request->getHeaders(),
  223 + \CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(),
  224 + \CURLOPT_URL => (string) $easy->request->getUri()->withFragment(''),
225 \CURLOPT_RETURNTRANSFER => false, 225 \CURLOPT_RETURNTRANSFER => false,
226 - \CURLOPT_HEADER => false,  
227 - \CURLOPT_CONNECTTIMEOUT => 150, 226 + \CURLOPT_HEADER => false,
  227 + \CURLOPT_CONNECTTIMEOUT => 300,
228 ]; 228 ];
229 229
230 if (\defined('CURLOPT_PROTOCOLS')) { 230 if (\defined('CURLOPT_PROTOCOLS')) {
@@ -250,6 +250,7 @@ class CurlFactory implements CurlFactoryInterface @@ -250,6 +250,7 @@ class CurlFactory implements CurlFactoryInterface
250 250
251 if ($size === null || $size > 0) { 251 if ($size === null || $size > 0) {
252 $this->applyBody($easy->request, $easy->options, $conf); 252 $this->applyBody($easy->request, $easy->options, $conf);
  253 +
253 return; 254 return;
254 } 255 }
255 256
@@ -341,6 +342,7 @@ class CurlFactory implements CurlFactoryInterface @@ -341,6 +342,7 @@ class CurlFactory implements CurlFactoryInterface
341 foreach (\array_keys($options['_headers']) as $key) { 342 foreach (\array_keys($options['_headers']) as $key) {
342 if (!\strcasecmp($key, $name)) { 343 if (!\strcasecmp($key, $name)) {
343 unset($options['_headers'][$key]); 344 unset($options['_headers'][$key]);
  345 +
344 return; 346 return;
345 } 347 }
346 } 348 }
@@ -443,13 +445,41 @@ class CurlFactory implements CurlFactoryInterface @@ -443,13 +445,41 @@ class CurlFactory implements CurlFactoryInterface
443 $scheme = $easy->request->getUri()->getScheme(); 445 $scheme = $easy->request->getUri()->getScheme();
444 if (isset($options['proxy'][$scheme])) { 446 if (isset($options['proxy'][$scheme])) {
445 $host = $easy->request->getUri()->getHost(); 447 $host = $easy->request->getUri()->getHost();
446 - if (!isset($options['proxy']['no']) || !Utils::isHostInNoProxy($host, $options['proxy']['no'])) { 448 + if (isset($options['proxy']['no']) && Utils::isHostInNoProxy($host, $options['proxy']['no'])) {
  449 + unset($conf[\CURLOPT_PROXY]);
  450 + } else {
447 $conf[\CURLOPT_PROXY] = $options['proxy'][$scheme]; 451 $conf[\CURLOPT_PROXY] = $options['proxy'][$scheme];
448 } 452 }
449 } 453 }
450 } 454 }
451 } 455 }
452 456
  457 + if (isset($options['crypto_method'])) {
  458 + if (\STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT === $options['crypto_method']) {
  459 + if (!defined('CURL_SSLVERSION_TLSv1_0')) {
  460 + throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.0 not supported by your version of cURL');
  461 + }
  462 + $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_0;
  463 + } elseif (\STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT === $options['crypto_method']) {
  464 + if (!defined('CURL_SSLVERSION_TLSv1_1')) {
  465 + throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.1 not supported by your version of cURL');
  466 + }
  467 + $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_1;
  468 + } elseif (\STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT === $options['crypto_method']) {
  469 + if (!defined('CURL_SSLVERSION_TLSv1_2')) {
  470 + throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.2 not supported by your version of cURL');
  471 + }
  472 + $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_2;
  473 + } elseif (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT === $options['crypto_method']) {
  474 + if (!defined('CURL_SSLVERSION_TLSv1_3')) {
  475 + throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.3 not supported by your version of cURL');
  476 + }
  477 + $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_3;
  478 + } else {
  479 + throw new \InvalidArgumentException('Invalid crypto_method request option: unknown version provided');
  480 + }
  481 + }
  482 +
453 if (isset($options['cert'])) { 483 if (isset($options['cert'])) {
454 $cert = $options['cert']; 484 $cert = $options['cert'];
455 if (\is_array($cert)) { 485 if (\is_array($cert)) {
@@ -459,8 +489,8 @@ class CurlFactory implements CurlFactoryInterface @@ -459,8 +489,8 @@ class CurlFactory implements CurlFactoryInterface
459 if (!\file_exists($cert)) { 489 if (!\file_exists($cert)) {
460 throw new \InvalidArgumentException("SSL certificate not found: {$cert}"); 490 throw new \InvalidArgumentException("SSL certificate not found: {$cert}");
461 } 491 }
462 - # OpenSSL (versions 0.9.3 and later) also support "P12" for PKCS#12-encoded files.  
463 - # see https://curl.se/libcurl/c/CURLOPT_SSLCERTTYPE.html 492 + // OpenSSL (versions 0.9.3 and later) also support "P12" for PKCS#12-encoded files.
  493 + // see https://curl.se/libcurl/c/CURLOPT_SSLCERTTYPE.html
464 $ext = pathinfo($cert, \PATHINFO_EXTENSION); 494 $ext = pathinfo($cert, \PATHINFO_EXTENSION);
465 if (preg_match('#^(der|p12)$#i', $ext)) { 495 if (preg_match('#^(der|p12)$#i', $ext)) {
466 $conf[\CURLOPT_SSLCERTTYPE] = strtoupper($ext); 496 $conf[\CURLOPT_SSLCERTTYPE] = strtoupper($ext);
@@ -523,9 +553,10 @@ class CurlFactory implements CurlFactoryInterface @@ -523,9 +553,10 @@ class CurlFactory implements CurlFactoryInterface
523 } 553 }
524 } catch (\RuntimeException $e) { 554 } catch (\RuntimeException $e) {
525 $ctx['error'] = 'The connection unexpectedly failed without ' 555 $ctx['error'] = 'The connection unexpectedly failed without '
526 - . 'providing an error. The request would have been retried, '  
527 - . 'but attempting to rewind the request body failed. '  
528 - . 'Exception: ' . $e; 556 + .'providing an error. The request would have been retried, '
  557 + .'but attempting to rewind the request body failed. '
  558 + .'Exception: '.$e;
  559 +
529 return self::createRejection($easy, $ctx); 560 return self::createRejection($easy, $ctx);
530 } 561 }
531 562
@@ -534,14 +565,15 @@ class CurlFactory implements CurlFactoryInterface @@ -534,14 +565,15 @@ class CurlFactory implements CurlFactoryInterface
534 $easy->options['_curl_retries'] = 1; 565 $easy->options['_curl_retries'] = 1;
535 } elseif ($easy->options['_curl_retries'] == 2) { 566 } elseif ($easy->options['_curl_retries'] == 2) {
536 $ctx['error'] = 'The cURL request was retried 3 times ' 567 $ctx['error'] = 'The cURL request was retried 3 times '
537 - . 'and did not succeed. The most likely reason for the failure '  
538 - . 'is that cURL was unable to rewind the body of the request '  
539 - . 'and subsequent retries resulted in the same error. Turn on '  
540 - . 'the debug option to see what went wrong. See '  
541 - . 'https://bugs.php.net/bug.php?id=47204 for more information.'; 568 + .'and did not succeed. The most likely reason for the failure '
  569 + .'is that cURL was unable to rewind the body of the request '
  570 + .'and subsequent retries resulted in the same error. Turn on '
  571 + .'the debug option to see what went wrong. See '
  572 + .'https://bugs.php.net/bug.php?id=47204 for more information.';
  573 +
542 return self::createRejection($easy, $ctx); 574 return self::createRejection($easy, $ctx);
543 } else { 575 } else {
544 - $easy->options['_curl_retries']++; 576 + ++$easy->options['_curl_retries'];
545 } 577 }
546 578
547 return $handler($easy->request, $easy->options); 579 return $handler($easy->request, $easy->options);
@@ -571,6 +603,7 @@ class CurlFactory implements CurlFactoryInterface @@ -571,6 +603,7 @@ class CurlFactory implements CurlFactoryInterface
571 $easy->createResponse(); 603 $easy->createResponse();
572 } catch (\Exception $e) { 604 } catch (\Exception $e) {
573 $easy->createResponseException = $e; 605 $easy->createResponseException = $e;
  606 +
574 return -1; 607 return -1;
575 } 608 }
576 if ($onHeaders !== null) { 609 if ($onHeaders !== null) {
@@ -580,6 +613,7 @@ class CurlFactory implements CurlFactoryInterface @@ -580,6 +613,7 @@ class CurlFactory implements CurlFactoryInterface
580 // Associate the exception with the handle and trigger 613 // Associate the exception with the handle and trigger
581 // a curl header write error by returning 0. 614 // a curl header write error by returning 0.
582 $easy->onHeadersException = $e; 615 $easy->onHeadersException = $e;
  616 +
583 return -1; 617 return -1;
584 } 618 }
585 } 619 }
@@ -589,6 +623,7 @@ class CurlFactory implements CurlFactoryInterface @@ -589,6 +623,7 @@ class CurlFactory implements CurlFactoryInterface
589 } else { 623 } else {
590 $easy->headers[] = $value; 624 $easy->headers[] = $value;
591 } 625 }
  626 +
592 return \strlen($h); 627 return \strlen($h);
593 }; 628 };
594 } 629 }
@@ -164,7 +164,8 @@ class CurlMultiHandler @@ -164,7 +164,8 @@ class CurlMultiHandler
164 \usleep(250); 164 \usleep(250);
165 } 165 }
166 166
167 - while (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM); 167 + while (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM) {
  168 + }
168 169
169 $this->processMessages(); 170 $this->processMessages();
170 } 171 }
@@ -106,7 +106,7 @@ final class EasyHandle @@ -106,7 +106,7 @@ final class EasyHandle
106 */ 106 */
107 public function __get($name) 107 public function __get($name)
108 { 108 {
109 - $msg = $name === 'handle' ? 'The EasyHandle has been released' : 'Invalid property: ' . $name; 109 + $msg = $name === 'handle' ? 'The EasyHandle has been released' : 'Invalid property: '.$name;
110 throw new \BadMethodCallException($msg); 110 throw new \BadMethodCallException($msg);
111 } 111 }
112 } 112 }
@@ -14,9 +14,9 @@ final class HeaderProcessor @@ -14,9 +14,9 @@ final class HeaderProcessor
14 * 14 *
15 * @param string[] $headers 15 * @param string[] $headers
16 * 16 *
17 - * @throws \RuntimeException  
18 - *  
19 * @return array{0:string, 1:int, 2:?string, 3:array} 17 * @return array{0:string, 1:int, 2:?string, 3:array}
  18 + *
  19 + * @throws \RuntimeException
20 */ 20 */
21 public static function parseHeaders(array $headers): array 21 public static function parseHeaders(array $headers): array
22 { 22 {
@@ -138,6 +138,7 @@ class MockHandler implements \Countable @@ -138,6 +138,7 @@ class MockHandler implements \Countable
138 if ($this->onRejected) { 138 if ($this->onRejected) {
139 ($this->onRejected)($reason); 139 ($this->onRejected)($reason);
140 } 140 }
  141 +
141 return P\Create::rejectionFor($reason); 142 return P\Create::rejectionFor($reason);
142 } 143 }
143 ); 144 );
@@ -159,7 +160,7 @@ class MockHandler implements \Countable @@ -159,7 +160,7 @@ class MockHandler implements \Countable
159 ) { 160 ) {
160 $this->queue[] = $value; 161 $this->queue[] = $value;
161 } else { 162 } else {
162 - throw new \TypeError('Expected a Response, Promise, Throwable or callable. Found ' . Utils::describeType($value)); 163 + throw new \TypeError('Expected a Response, Promise, Throwable or callable. Found '.Utils::describeType($value));
163 } 164 }
164 } 165 }
165 } 166 }
@@ -67,7 +67,7 @@ class StreamHandler @@ -67,7 +67,7 @@ class StreamHandler
67 if (false !== \strpos($message, 'getaddrinfo') // DNS lookup failed 67 if (false !== \strpos($message, 'getaddrinfo') // DNS lookup failed
68 || false !== \strpos($message, 'Connection refused') 68 || false !== \strpos($message, 'Connection refused')
69 || false !== \strpos($message, "couldn't connect to host") // error on HHVM 69 || false !== \strpos($message, "couldn't connect to host") // error on HHVM
70 - || false !== \strpos($message, "connection attempt failed") 70 + || false !== \strpos($message, 'connection attempt failed')
71 ) { 71 ) {
72 $e = new ConnectException($e->getMessage(), $request, $e); 72 $e = new ConnectException($e->getMessage(), $request, $e);
73 } else { 73 } else {
@@ -231,9 +231,10 @@ class StreamHandler @@ -231,9 +231,10 @@ class StreamHandler
231 \set_error_handler(static function ($_, $msg, $file, $line) use (&$errors): bool { 231 \set_error_handler(static function ($_, $msg, $file, $line) use (&$errors): bool {
232 $errors[] = [ 232 $errors[] = [
233 'message' => $msg, 233 'message' => $msg,
234 - 'file' => $file,  
235 - 'line' => $line 234 + 'file' => $file,
  235 + 'line' => $line,
236 ]; 236 ];
  237 +
237 return true; 238 return true;
238 }); 239 });
239 240
@@ -247,7 +248,7 @@ class StreamHandler @@ -247,7 +248,7 @@ class StreamHandler
247 $message = 'Error creating resource: '; 248 $message = 'Error creating resource: ';
248 foreach ($errors as $err) { 249 foreach ($errors as $err) {
249 foreach ($err as $key => $value) { 250 foreach ($err as $key => $value) {
250 - $message .= "[$key] $value" . \PHP_EOL; 251 + $message .= "[$key] $value".\PHP_EOL;
251 } 252 }
252 } 253 }
253 throw new \RuntimeException(\trim($message)); 254 throw new \RuntimeException(\trim($message));
@@ -350,6 +351,7 @@ class StreamHandler @@ -350,6 +351,7 @@ class StreamHandler
350 if (false === $records || !isset($records[0]['ip'])) { 351 if (false === $records || !isset($records[0]['ip'])) {
351 throw new ConnectException(\sprintf("Could not resolve IPv4 address for host '%s'", $uri->getHost()), $request); 352 throw new ConnectException(\sprintf("Could not resolve IPv4 address for host '%s'", $uri->getHost()), $request);
352 } 353 }
  354 +
353 return $uri->withHost($records[0]['ip']); 355 return $uri->withHost($records[0]['ip']);
354 } 356 }
355 if ('v6' === $options['force_ip_resolve']) { 357 if ('v6' === $options['force_ip_resolve']) {
@@ -357,7 +359,8 @@ class StreamHandler @@ -357,7 +359,8 @@ class StreamHandler
357 if (false === $records || !isset($records[0]['ipv6'])) { 359 if (false === $records || !isset($records[0]['ipv6'])) {
358 throw new ConnectException(\sprintf("Could not resolve IPv6 address for host '%s'", $uri->getHost()), $request); 360 throw new ConnectException(\sprintf("Could not resolve IPv6 address for host '%s'", $uri->getHost()), $request);
359 } 361 }
360 - return $uri->withHost('[' . $records[0]['ipv6'] . ']'); 362 +
  363 + return $uri->withHost('['.$records[0]['ipv6'].']');
361 } 364 }
362 } 365 }
363 366
@@ -375,11 +378,11 @@ class StreamHandler @@ -375,11 +378,11 @@ class StreamHandler
375 378
376 $context = [ 379 $context = [
377 'http' => [ 380 'http' => [
378 - 'method' => $request->getMethod(),  
379 - 'header' => $headers, 381 + 'method' => $request->getMethod(),
  382 + 'header' => $headers,
380 'protocol_version' => $request->getProtocolVersion(), 383 'protocol_version' => $request->getProtocolVersion(),
381 - 'ignore_errors' => true,  
382 - 'follow_location' => 0, 384 + 'ignore_errors' => true,
  385 + 'follow_location' => 0,
383 ], 386 ],
384 'ssl' => [ 387 'ssl' => [
385 'peer_name' => $request->getUri()->getHost(), 388 'peer_name' => $request->getUri()->getHost(),
@@ -388,7 +391,7 @@ class StreamHandler @@ -388,7 +391,7 @@ class StreamHandler
388 391
389 $body = (string) $request->getBody(); 392 $body = (string) $request->getBody();
390 393
391 - if (!empty($body)) { 394 + if ('' !== $body) {
392 $context['http']['content'] = $body; 395 $context['http']['content'] = $body;
393 // Prevent the HTTP handler from adding a Content-Type header. 396 // Prevent the HTTP handler from adding a Content-Type header.
394 if (!$request->hasHeader('Content-Type')) { 397 if (!$request->hasHeader('Content-Type')) {
@@ -475,6 +478,25 @@ class StreamHandler @@ -475,6 +478,25 @@ class StreamHandler
475 /** 478 /**
476 * @param mixed $value as passed via Request transfer options. 479 * @param mixed $value as passed via Request transfer options.
477 */ 480 */
  481 + private function add_crypto_method(RequestInterface $request, array &$options, $value, array &$params): void
  482 + {
  483 + if (
  484 + $value === \STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT
  485 + || $value === \STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT
  486 + || $value === \STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
  487 + || (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && $value === \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT)
  488 + ) {
  489 + $options['http']['crypto_method'] = $value;
  490 +
  491 + return;
  492 + }
  493 +
  494 + throw new \InvalidArgumentException('Invalid crypto_method request option: unknown version provided');
  495 + }
  496 +
  497 + /**
  498 + * @param mixed $value as passed via Request transfer options.
  499 + */
478 private function add_verify(RequestInterface $request, array &$options, $value, array &$params): void 500 private function add_verify(RequestInterface $request, array &$options, $value, array &$params): void
479 { 501 {
480 if ($value === false) { 502 if ($value === false) {
@@ -542,27 +564,27 @@ class StreamHandler @@ -542,27 +564,27 @@ class StreamHandler
542 } 564 }
543 565
544 static $map = [ 566 static $map = [
545 - \STREAM_NOTIFY_CONNECT => 'CONNECT', 567 + \STREAM_NOTIFY_CONNECT => 'CONNECT',
546 \STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED', 568 \STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED',
547 - \STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT',  
548 - \STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS',  
549 - \STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS',  
550 - \STREAM_NOTIFY_REDIRECTED => 'REDIRECTED',  
551 - \STREAM_NOTIFY_PROGRESS => 'PROGRESS',  
552 - \STREAM_NOTIFY_FAILURE => 'FAILURE',  
553 - \STREAM_NOTIFY_COMPLETED => 'COMPLETED',  
554 - \STREAM_NOTIFY_RESOLVE => 'RESOLVE', 569 + \STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT',
  570 + \STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS',
  571 + \STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS',
  572 + \STREAM_NOTIFY_REDIRECTED => 'REDIRECTED',
  573 + \STREAM_NOTIFY_PROGRESS => 'PROGRESS',
  574 + \STREAM_NOTIFY_FAILURE => 'FAILURE',
  575 + \STREAM_NOTIFY_COMPLETED => 'COMPLETED',
  576 + \STREAM_NOTIFY_RESOLVE => 'RESOLVE',
555 ]; 577 ];
556 static $args = ['severity', 'message', 'message_code', 'bytes_transferred', 'bytes_max']; 578 static $args = ['severity', 'message', 'message_code', 'bytes_transferred', 'bytes_max'];
557 579
558 $value = Utils::debugResource($value); 580 $value = Utils::debugResource($value);
559 - $ident = $request->getMethod() . ' ' . $request->getUri()->withFragment(''); 581 + $ident = $request->getMethod().' '.$request->getUri()->withFragment('');
560 self::addNotification( 582 self::addNotification(
561 $params, 583 $params,
562 static function (int $code, ...$passed) use ($ident, $value, $map, $args): void { 584 static function (int $code, ...$passed) use ($ident, $value, $map, $args): void {
563 \fprintf($value, '<%s> [%s] ', $ident, $map[$code]); 585 \fprintf($value, '<%s> [%s] ', $ident, $map[$code]);
564 foreach (\array_filter($passed) as $i => $v) { 586 foreach (\array_filter($passed) as $i => $v) {
565 - \fwrite($value, $args[$i] . ': "' . $v . '" '); 587 + \fwrite($value, $args[$i].': "'.$v.'" ');
566 } 588 }
567 \fwrite($value, "\n"); 589 \fwrite($value, "\n");
568 } 590 }
@@ -577,7 +599,7 @@ class StreamHandler @@ -577,7 +599,7 @@ class StreamHandler
577 } else { 599 } else {
578 $params['notification'] = self::callArray([ 600 $params['notification'] = self::callArray([
579 $params['notification'], 601 $params['notification'],
580 - $notify 602 + $notify,
581 ]); 603 ]);
582 } 604 }
583 } 605 }
@@ -86,14 +86,14 @@ class HandlerStack @@ -86,14 +86,14 @@ class HandlerStack
86 $stack = []; 86 $stack = [];
87 87
88 if ($this->handler !== null) { 88 if ($this->handler !== null) {
89 - $stack[] = "0) Handler: " . $this->debugCallable($this->handler); 89 + $stack[] = '0) Handler: '.$this->debugCallable($this->handler);
90 } 90 }
91 91
92 $result = ''; 92 $result = '';
93 foreach (\array_reverse($this->stack) as $tuple) { 93 foreach (\array_reverse($this->stack) as $tuple) {
94 - $depth++; 94 + ++$depth;
95 $str = "{$depth}) Name: '{$tuple[1]}', "; 95 $str = "{$depth}) Name: '{$tuple[1]}', ";
96 - $str .= "Function: " . $this->debugCallable($tuple[0]); 96 + $str .= 'Function: '.$this->debugCallable($tuple[0]);
97 $result = "> {$str}\n{$result}"; 97 $result = "> {$str}\n{$result}";
98 $stack[] = $str; 98 $stack[] = $str;
99 } 99 }
@@ -122,7 +122,7 @@ class HandlerStack @@ -122,7 +122,7 @@ class HandlerStack
122 */ 122 */
123 public function hasHandler(): bool 123 public function hasHandler(): bool
124 { 124 {
125 - return $this->handler !== null ; 125 + return $this->handler !== null;
126 } 126 }
127 127
128 /** 128 /**
@@ -266,10 +266,10 @@ class HandlerStack @@ -266,10 +266,10 @@ class HandlerStack
266 if (\is_array($fn)) { 266 if (\is_array($fn)) {
267 return \is_string($fn[0]) 267 return \is_string($fn[0])
268 ? "callable({$fn[0]}::{$fn[1]})" 268 ? "callable({$fn[0]}::{$fn[1]})"
269 - : "callable(['" . \get_class($fn[0]) . "', '{$fn[1]}'])"; 269 + : "callable(['".\get_class($fn[0])."', '{$fn[1]}'])";
270 } 270 }
271 271
272 /** @var object $fn */ 272 /** @var object $fn */
273 - return 'callable(' . \spl_object_hash($fn) . ')'; 273 + return 'callable('.\spl_object_hash($fn).')';
274 } 274 }
275 } 275 }
@@ -40,11 +40,11 @@ class MessageFormatter implements MessageFormatterInterface @@ -40,11 +40,11 @@ class MessageFormatter implements MessageFormatterInterface
40 /** 40 /**
41 * Apache Common Log Format. 41 * Apache Common Log Format.
42 * 42 *
43 - * @link https://httpd.apache.org/docs/2.4/logs.html#common 43 + * @see https://httpd.apache.org/docs/2.4/logs.html#common
44 * 44 *
45 * @var string 45 * @var string
46 */ 46 */
47 - public const CLF = "{hostname} {req_header_User-Agent} - [{date_common_log}] \"{method} {target} HTTP/{version}\" {code} {res_header_Content-Length}"; 47 + public const CLF = '{hostname} {req_header_User-Agent} - [{date_common_log}] "{method} {target} HTTP/{version}" {code} {res_header_Content-Length}';
48 public const DEBUG = ">>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}"; 48 public const DEBUG = ">>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}";
49 public const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}'; 49 public const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}';
50 50
@@ -90,9 +90,9 @@ class MessageFormatter implements MessageFormatterInterface @@ -90,9 +90,9 @@ class MessageFormatter implements MessageFormatterInterface
90 break; 90 break;
91 case 'req_headers': 91 case 'req_headers':
92 $result = \trim($request->getMethod() 92 $result = \trim($request->getMethod()
93 - . ' ' . $request->getRequestTarget())  
94 - . ' HTTP/' . $request->getProtocolVersion() . "\r\n"  
95 - . $this->headers($request); 93 + .' '.$request->getRequestTarget())
  94 + .' HTTP/'.$request->getProtocolVersion()."\r\n"
  95 + .$this->headers($request);
96 break; 96 break;
97 case 'res_headers': 97 case 'res_headers':
98 $result = $response ? 98 $result = $response ?
@@ -101,7 +101,7 @@ class MessageFormatter implements MessageFormatterInterface @@ -101,7 +101,7 @@ class MessageFormatter implements MessageFormatterInterface
101 $response->getProtocolVersion(), 101 $response->getProtocolVersion(),
102 $response->getStatusCode(), 102 $response->getStatusCode(),
103 $response->getReasonPhrase() 103 $response->getReasonPhrase()
104 - ) . "\r\n" . $this->headers($response) 104 + )."\r\n".$this->headers($response)
105 : 'NULL'; 105 : 'NULL';
106 break; 106 break;
107 case 'req_body': 107 case 'req_body':
@@ -177,6 +177,7 @@ class MessageFormatter implements MessageFormatterInterface @@ -177,6 +177,7 @@ class MessageFormatter implements MessageFormatterInterface
177 } 177 }
178 178
179 $cache[$matches[1]] = $result; 179 $cache[$matches[1]] = $result;
  180 +
180 return $result; 181 return $result;
181 }, 182 },
182 $this->template 183 $this->template
@@ -190,7 +191,7 @@ class MessageFormatter implements MessageFormatterInterface @@ -190,7 +191,7 @@ class MessageFormatter implements MessageFormatterInterface
190 { 191 {
191 $result = ''; 192 $result = '';
192 foreach ($message->getHeaders() as $name => $values) { 193 foreach ($message->getHeaders() as $name => $values) {
193 - $result .= $name . ': ' . \implode(', ', $values) . "\r\n"; 194 + $result .= $name.': '.\implode(', ', $values)."\r\n";
194 } 195 }
195 196
196 return \trim($result); 197 return \trim($result);
@@ -34,10 +34,12 @@ final class Middleware @@ -34,10 +34,12 @@ final class Middleware
34 } 34 }
35 $cookieJar = $options['cookies']; 35 $cookieJar = $options['cookies'];
36 $request = $cookieJar->withCookieHeader($request); 36 $request = $cookieJar->withCookieHeader($request);
  37 +
37 return $handler($request, $options) 38 return $handler($request, $options)
38 ->then( 39 ->then(
39 static function (ResponseInterface $response) use ($cookieJar, $request): ResponseInterface { 40 static function (ResponseInterface $response) use ($cookieJar, $request): ResponseInterface {
40 $cookieJar->extractCookies($request, $response); 41 $cookieJar->extractCookies($request, $response);
  42 +
41 return $response; 43 return $response;
42 } 44 }
43 ); 45 );
@@ -60,6 +62,7 @@ final class Middleware @@ -60,6 +62,7 @@ final class Middleware
60 if (empty($options['http_errors'])) { 62 if (empty($options['http_errors'])) {
61 return $handler($request, $options); 63 return $handler($request, $options);
62 } 64 }
  65 +
63 return $handler($request, $options)->then( 66 return $handler($request, $options)->then(
64 static function (ResponseInterface $response) use ($request, $bodySummarizer) { 67 static function (ResponseInterface $response) use ($request, $bodySummarizer) {
65 $code = $response->getStatusCode(); 68 $code = $response->getStatusCode();
@@ -93,20 +96,22 @@ final class Middleware @@ -93,20 +96,22 @@ final class Middleware
93 return $handler($request, $options)->then( 96 return $handler($request, $options)->then(
94 static function ($value) use ($request, &$container, $options) { 97 static function ($value) use ($request, &$container, $options) {
95 $container[] = [ 98 $container[] = [
96 - 'request' => $request, 99 + 'request' => $request,
97 'response' => $value, 100 'response' => $value,
98 - 'error' => null,  
99 - 'options' => $options 101 + 'error' => null,
  102 + 'options' => $options,
100 ]; 103 ];
  104 +
101 return $value; 105 return $value;
102 }, 106 },
103 static function ($reason) use ($request, &$container, $options) { 107 static function ($reason) use ($request, &$container, $options) {
104 $container[] = [ 108 $container[] = [
105 - 'request' => $request, 109 + 'request' => $request,
106 'response' => null, 110 'response' => null,
107 - 'error' => $reason,  
108 - 'options' => $options 111 + 'error' => $reason,
  112 + 'options' => $options,
109 ]; 113 ];
  114 +
110 return P\Create::rejectionFor($reason); 115 return P\Create::rejectionFor($reason);
111 } 116 }
112 ); 117 );
@@ -138,6 +143,7 @@ final class Middleware @@ -138,6 +143,7 @@ final class Middleware
138 if ($after) { 143 if ($after) {
139 $after($request, $options, $response); 144 $after($request, $options, $response);
140 } 145 }
  146 +
141 return $response; 147 return $response;
142 }; 148 };
143 }; 149 };
@@ -202,12 +208,14 @@ final class Middleware @@ -202,12 +208,14 @@ final class Middleware
202 static function ($response) use ($logger, $request, $formatter, $logLevel): ResponseInterface { 208 static function ($response) use ($logger, $request, $formatter, $logLevel): ResponseInterface {
203 $message = $formatter->format($request, $response); 209 $message = $formatter->format($request, $response);
204 $logger->log($logLevel, $message); 210 $logger->log($logLevel, $message);
  211 +
205 return $response; 212 return $response;
206 }, 213 },
207 static function ($reason) use ($logger, $request, $formatter): PromiseInterface { 214 static function ($reason) use ($logger, $request, $formatter): PromiseInterface {
208 $response = $reason instanceof RequestException ? $reason->getResponse() : null; 215 $response = $reason instanceof RequestException ? $reason->getResponse() : null;
209 $message = $formatter->format($request, $response, P\Create::exceptionFor($reason)); 216 $message = $formatter->format($request, $response, P\Create::exceptionFor($reason));
210 $logger->error($message); 217 $logger->error($message);
  218 +
211 return P\Create::rejectionFor($reason); 219 return P\Create::rejectionFor($reason);
212 } 220 }
213 ); 221 );
@@ -84,6 +84,7 @@ class PrepareBodyMiddleware @@ -84,6 +84,7 @@ class PrepareBodyMiddleware
84 // The expect header is unconditionally enabled 84 // The expect header is unconditionally enabled
85 if ($expect === true) { 85 if ($expect === true) {
86 $modify['set_headers']['Expect'] = '100-Continue'; 86 $modify['set_headers']['Expect'] = '100-Continue';
  87 +
87 return; 88 return;
88 } 89 }
89 90
@@ -27,10 +27,10 @@ class RedirectMiddleware @@ -27,10 +27,10 @@ class RedirectMiddleware
27 * @var array 27 * @var array
28 */ 28 */
29 public static $defaultSettings = [ 29 public static $defaultSettings = [
30 - 'max' => 5,  
31 - 'protocols' => ['http', 'https'],  
32 - 'strict' => false,  
33 - 'referer' => false, 30 + 'max' => 5,
  31 + 'protocols' => ['http', 'https'],
  32 + 'strict' => false,
  33 + 'referer' => false,
34 'track_redirects' => false, 34 'track_redirects' => false,
35 ]; 35 ];
36 36
@@ -7,7 +7,7 @@ namespace GuzzleHttp; @@ -7,7 +7,7 @@ namespace GuzzleHttp;
7 * 7 *
8 * More documentation for each option can be found at http://guzzlephp.org/. 8 * More documentation for each option can be found at http://guzzlephp.org/.
9 * 9 *
10 - * @link http://docs.guzzlephp.org/en/v6/request-options.html 10 + * @see http://docs.guzzlephp.org/en/v6/request-options.html
11 */ 11 */
12 final class RequestOptions 12 final class RequestOptions
13 { 13 {
@@ -70,11 +70,23 @@ final class RequestOptions @@ -70,11 +70,23 @@ final class RequestOptions
70 /** 70 /**
71 * connect_timeout: (float, default=0) Float describing the number of 71 * connect_timeout: (float, default=0) Float describing the number of
72 * seconds to wait while trying to connect to a server. Use 0 to wait 72 * seconds to wait while trying to connect to a server. Use 0 to wait
73 - * indefinitely (the default behavior). 73 + * 300 seconds (the default behavior).
74 */ 74 */
75 public const CONNECT_TIMEOUT = 'connect_timeout'; 75 public const CONNECT_TIMEOUT = 'connect_timeout';
76 76
77 /** 77 /**
  78 + * crypto_method: (int) A value describing the minimum TLS protocol
  79 + * version to use.
  80 + *
  81 + * This setting must be set to one of the
  82 + * ``STREAM_CRYPTO_METHOD_TLS*_CLIENT`` constants. PHP 7.4 or higher is
  83 + * required in order to use TLS 1.3, and cURL 7.34.0 or higher is required
  84 + * in order to specify a crypto method, with cURL 7.52.0 or higher being
  85 + * required to use TLS 1.3.
  86 + */
  87 + public const CRYPTO_METHOD = 'crypto_method';
  88 +
  89 + /**
78 * debug: (bool|resource) Set to true or set to a PHP stream returned by 90 * debug: (bool|resource) Set to true or set to a PHP stream returned by
79 * fopen() enable debug output with the HTTP handler used to send a 91 * fopen() enable debug output with the HTTP handler used to send a
80 * request. 92 * request.
@@ -44,7 +44,7 @@ class RetryMiddleware @@ -44,7 +44,7 @@ class RetryMiddleware
44 { 44 {
45 $this->decider = $decider; 45 $this->decider = $decider;
46 $this->nextHandler = $nextHandler; 46 $this->nextHandler = $nextHandler;
47 - $this->delay = $delay ?: __CLASS__ . '::exponentialDelay'; 47 + $this->delay = $delay ?: __CLASS__.'::exponentialDelay';
48 } 48 }
49 49
50 /** 50 /**
@@ -54,7 +54,7 @@ class RetryMiddleware @@ -54,7 +54,7 @@ class RetryMiddleware
54 */ 54 */
55 public static function exponentialDelay(int $retries): int 55 public static function exponentialDelay(int $retries): int
56 { 56 {
57 - return (int) \pow(2, $retries - 1) * 1000; 57 + return (int) 2 ** ($retries - 1) * 1000;
58 } 58 }
59 59
60 public function __invoke(RequestInterface $request, array $options): PromiseInterface 60 public function __invoke(RequestInterface $request, array $options): PromiseInterface
@@ -64,6 +64,7 @@ class RetryMiddleware @@ -64,6 +64,7 @@ class RetryMiddleware
64 } 64 }
65 65
66 $fn = $this->nextHandler; 66 $fn = $this->nextHandler;
  67 +
67 return $fn($request, $options) 68 return $fn($request, $options)
68 ->then( 69 ->then(
69 $this->onFulfilled($request, $options), 70 $this->onFulfilled($request, $options),
@@ -85,6 +86,7 @@ class RetryMiddleware @@ -85,6 +86,7 @@ class RetryMiddleware
85 )) { 86 )) {
86 return $value; 87 return $value;
87 } 88 }
  89 +
88 return $this->doRetry($request, $options, $value); 90 return $this->doRetry($request, $options, $value);
89 }; 91 };
90 } 92 }
@@ -103,6 +105,7 @@ class RetryMiddleware @@ -103,6 +105,7 @@ class RetryMiddleware
103 )) { 105 )) {
104 return P\Create::rejectionFor($reason); 106 return P\Create::rejectionFor($reason);
105 } 107 }
  108 +
106 return $this->doRetry($req, $options); 109 return $this->doRetry($req, $options);
107 }; 110 };
108 } 111 }
@@ -23,9 +23,9 @@ final class Utils @@ -23,9 +23,9 @@ final class Utils
23 { 23 {
24 switch (\gettype($input)) { 24 switch (\gettype($input)) {
25 case 'object': 25 case 'object':
26 - return 'object(' . \get_class($input) . ')'; 26 + return 'object('.\get_class($input).')';
27 case 'array': 27 case 'array':
28 - return 'array(' . \count($input) . ')'; 28 + return 'array('.\count($input).')';
29 default: 29 default:
30 \ob_start(); 30 \ob_start();
31 \var_dump($input); 31 \var_dump($input);
@@ -79,9 +79,9 @@ final class Utils @@ -79,9 +79,9 @@ final class Utils
79 * 79 *
80 * The returned handler is not wrapped by any default middlewares. 80 * The returned handler is not wrapped by any default middlewares.
81 * 81 *
82 - * @throws \RuntimeException if no viable Handler is available.  
83 - *  
84 * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the best handler for the given system. 82 * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the best handler for the given system.
  83 + *
  84 + * @throws \RuntimeException if no viable Handler is available.
85 */ 85 */
86 public static function chooseHandler(): callable 86 public static function chooseHandler(): callable
87 { 87 {
@@ -247,8 +247,8 @@ EOT @@ -247,8 +247,8 @@ EOT
247 } 247 }
248 // Special match if the area when prefixed with ".". Remove any 248 // Special match if the area when prefixed with ".". Remove any
249 // existing leading "." and add a new leading ".". 249 // existing leading "." and add a new leading ".".
250 - $area = '.' . \ltrim($area, '.');  
251 - if (\substr($host, -(\strlen($area))) === $area) { 250 + $area = '.'.\ltrim($area, '.');
  251 + if (\substr($host, -\strlen($area)) === $area) {
252 return true; 252 return true;
253 } 253 }
254 } 254 }
@@ -269,13 +269,13 @@ EOT @@ -269,13 +269,13 @@ EOT
269 * 269 *
270 * @throws InvalidArgumentException if the JSON cannot be decoded. 270 * @throws InvalidArgumentException if the JSON cannot be decoded.
271 * 271 *
272 - * @link https://www.php.net/manual/en/function.json-decode.php 272 + * @see https://www.php.net/manual/en/function.json-decode.php
273 */ 273 */
274 public static function jsonDecode(string $json, bool $assoc = false, int $depth = 512, int $options = 0) 274 public static function jsonDecode(string $json, bool $assoc = false, int $depth = 512, int $options = 0)
275 { 275 {
276 $data = \json_decode($json, $assoc, $depth, $options); 276 $data = \json_decode($json, $assoc, $depth, $options);
277 if (\JSON_ERROR_NONE !== \json_last_error()) { 277 if (\JSON_ERROR_NONE !== \json_last_error()) {
278 - throw new InvalidArgumentException('json_decode error: ' . \json_last_error_msg()); 278 + throw new InvalidArgumentException('json_decode error: '.\json_last_error_msg());
279 } 279 }
280 280
281 return $data; 281 return $data;
@@ -290,13 +290,13 @@ EOT @@ -290,13 +290,13 @@ EOT
290 * 290 *
291 * @throws InvalidArgumentException if the JSON cannot be encoded. 291 * @throws InvalidArgumentException if the JSON cannot be encoded.
292 * 292 *
293 - * @link https://www.php.net/manual/en/function.json-encode.php 293 + * @see https://www.php.net/manual/en/function.json-encode.php
294 */ 294 */
295 public static function jsonEncode($value, int $options = 0, int $depth = 512): string 295 public static function jsonEncode($value, int $options = 0, int $depth = 512): string
296 { 296 {
297 $json = \json_encode($value, $options, $depth); 297 $json = \json_encode($value, $options, $depth);
298 if (\JSON_ERROR_NONE !== \json_last_error()) { 298 if (\JSON_ERROR_NONE !== \json_last_error()) {
299 - throw new InvalidArgumentException('json_encode error: ' . \json_last_error_msg()); 299 + throw new InvalidArgumentException('json_encode error: '.\json_last_error_msg());
300 } 300 }
301 301
302 /** @var string */ 302 /** @var string */
@@ -341,7 +341,7 @@ EOT @@ -341,7 +341,7 @@ EOT
341 341
342 $errorMessage = 'IDN conversion failed'; 342 $errorMessage = 'IDN conversion failed';
343 if ($errors) { 343 if ($errors) {
344 - $errorMessage .= ' (errors: ' . implode(', ', $errors) . ')'; 344 + $errorMessage .= ' (errors: '.implode(', ', $errors).')';
345 } 345 }
346 346
347 throw new InvalidArgumentException($errorMessage); 347 throw new InvalidArgumentException($errorMessage);
@@ -50,10 +50,10 @@ function debug_resource($value = null) @@ -50,10 +50,10 @@ function debug_resource($value = null)
50 * 50 *
51 * The returned handler is not wrapped by any default middlewares. 51 * The returned handler is not wrapped by any default middlewares.
52 * 52 *
53 - * @throws \RuntimeException if no viable Handler is available.  
54 - *  
55 * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the best handler for the given system. 53 * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the best handler for the given system.
56 * 54 *
  55 + * @throws \RuntimeException if no viable Handler is available.
  56 + *
57 * @deprecated choose_handler will be removed in guzzlehttp/guzzle:8.0. Use Utils::chooseHandler instead. 57 * @deprecated choose_handler will be removed in guzzlehttp/guzzle:8.0. Use Utils::chooseHandler instead.
58 */ 58 */
59 function choose_handler(): callable 59 function choose_handler(): callable
@@ -141,7 +141,7 @@ function is_host_in_noproxy(string $host, array $noProxyArray): bool @@ -141,7 +141,7 @@ function is_host_in_noproxy(string $host, array $noProxyArray): bool
141 * 141 *
142 * @throws Exception\InvalidArgumentException if the JSON cannot be decoded. 142 * @throws Exception\InvalidArgumentException if the JSON cannot be decoded.
143 * 143 *
144 - * @link https://www.php.net/manual/en/function.json-decode.php 144 + * @see https://www.php.net/manual/en/function.json-decode.php
145 * @deprecated json_decode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonDecode instead. 145 * @deprecated json_decode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonDecode instead.
146 */ 146 */
147 function json_decode(string $json, bool $assoc = false, int $depth = 512, int $options = 0) 147 function json_decode(string $json, bool $assoc = false, int $depth = 512, int $options = 0)
@@ -158,7 +158,7 @@ function json_decode(string $json, bool $assoc = false, int $depth = 512, int $o @@ -158,7 +158,7 @@ function json_decode(string $json, bool $assoc = false, int $depth = 512, int $o
158 * 158 *
159 * @throws Exception\InvalidArgumentException if the JSON cannot be encoded. 159 * @throws Exception\InvalidArgumentException if the JSON cannot be encoded.
160 * 160 *
161 - * @link https://www.php.net/manual/en/function.json-encode.php 161 + * @see https://www.php.net/manual/en/function.json-encode.php
162 * @deprecated json_encode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonEncode instead. 162 * @deprecated json_encode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonEncode instead.
163 */ 163 */
164 function json_encode($value, int $options = 0, int $depth = 512): string 164 function json_encode($value, int $options = 0, int $depth = 512): string
@@ -2,5 +2,5 @@ @@ -2,5 +2,5 @@
2 2
3 // Don't redefine the functions if included multiple times. 3 // Don't redefine the functions if included multiple times.
4 if (!\function_exists('GuzzleHttp\describe_type')) { 4 if (!\function_exists('GuzzleHttp\describe_type')) {
5 - require __DIR__ . '/functions.php'; 5 + require __DIR__.'/functions.php';
6 } 6 }
1 # CHANGELOG 1 # CHANGELOG
2 2
  3 +## 1.5.3 - 2023-05-21
  4 +
  5 +### Changed
  6 +
  7 +- Removed remaining usage of deprecated functions
  8 +
3 ## 1.5.2 - 2022-08-07 9 ## 1.5.2 - 2022-08-07
4 10
5 ### Changed 11 ### Changed
@@ -46,11 +46,6 @@ @@ -46,11 +46,6 @@
46 "test": "vendor/bin/simple-phpunit", 46 "test": "vendor/bin/simple-phpunit",
47 "test-ci": "vendor/bin/simple-phpunit --coverage-text" 47 "test-ci": "vendor/bin/simple-phpunit --coverage-text"
48 }, 48 },
49 - "extra": {  
50 - "branch-alias": {  
51 - "dev-master": "1.5-dev"  
52 - }  
53 - },  
54 "config": { 49 "config": {
55 "preferred-install": "dist", 50 "preferred-install": "dist",
56 "sort-packages": true 51 "sort-packages": true
@@ -78,7 +78,7 @@ final class Each @@ -78,7 +78,7 @@ final class Each
78 $concurrency, 78 $concurrency,
79 callable $onFulfilled = null 79 callable $onFulfilled = null
80 ) { 80 ) {
81 - return each_limit( 81 + return self::ofLimit(
82 $iterable, 82 $iterable,
83 $concurrency, 83 $concurrency,
84 $onFulfilled, 84 $onFulfilled,
@@ -107,7 +107,7 @@ final class Utils @@ -107,7 +107,7 @@ final class Utils
107 { 107 {
108 $results = []; 108 $results = [];
109 foreach ($promises as $key => $promise) { 109 foreach ($promises as $key => $promise) {
110 - $results[$key] = inspect($promise); 110 + $results[$key] = self::inspect($promise);
111 } 111 }
112 112
113 return $results; 113 return $results;
@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 @@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7 7
8 ## Unreleased 8 ## Unreleased
9 9
  10 +## 2.5.0 - 2023-04-17
  11 +
  12 +### Changed
  13 +
  14 +- Adjusted `psr/http-message` version constraint to `^1.1 || ^2.0`
  15 +
  16 +## 2.4.5 - 2023-04-17
  17 +
  18 +### Fixed
  19 +
  20 +- Prevent possible warnings on unset variables in `ServerRequest::normalizeNestedFileSpec`
  21 +- Fixed `Message::bodySummary` when `preg_match` fails
  22 +- Fixed header validation issue
  23 +
  24 +## 2.4.4 - 2023-03-09
  25 +
  26 +### Changed
  27 +
  28 +- Removed the need for `AllowDynamicProperties` in `LazyOpenStream`
  29 +
10 ## 2.4.3 - 2022-10-26 30 ## 2.4.3 - 2022-10-26
11 31
12 ### Changed 32 ### Changed
@@ -8,6 +8,12 @@ functionality like query string parsing. @@ -8,6 +8,12 @@ functionality like query string parsing.
8 ![Static analysis](https://github.com/guzzle/psr7/workflows/Static%20analysis/badge.svg) 8 ![Static analysis](https://github.com/guzzle/psr7/workflows/Static%20analysis/badge.svg)
9 9
10 10
  11 +# Installation
  12 +
  13 +```shell
  14 +composer require guzzlehttp/psr7
  15 +```
  16 +
11 # Stream implementation 17 # Stream implementation
12 18
13 This package comes with a number of stream implementations and stream 19 This package comes with a number of stream implementations and stream
@@ -245,6 +251,8 @@ class EofCallbackStream implements StreamInterface @@ -245,6 +251,8 @@ class EofCallbackStream implements StreamInterface
245 251
246 private $callback; 252 private $callback;
247 253
  254 + private $stream;
  255 +
248 public function __construct(StreamInterface $stream, callable $cb) 256 public function __construct(StreamInterface $stream, callable $cb)
249 { 257 {
250 $this->stream = $stream; 258 $this->stream = $stream;
@@ -52,7 +52,7 @@ @@ -52,7 +52,7 @@
52 "require": { 52 "require": {
53 "php": "^7.2.5 || ^8.0", 53 "php": "^7.2.5 || ^8.0",
54 "psr/http-factory": "^1.0", 54 "psr/http-factory": "^1.0",
55 - "psr/http-message": "^1.0", 55 + "psr/http-message": "^1.1 || ^2.0",
56 "ralouphie/getallheaders": "^3.0" 56 "ralouphie/getallheaders": "^3.0"
57 }, 57 },
58 "provide": { 58 "provide": {
@@ -81,9 +81,6 @@ @@ -81,9 +81,6 @@
81 "bamarni-bin": { 81 "bamarni-bin": {
82 "bin-links": true, 82 "bin-links": true,
83 "forward-command": false 83 "forward-command": false
84 - },  
85 - "branch-alias": {  
86 - "dev-master": "2.4-dev"  
87 } 84 }
88 }, 85 },
89 "config": { 86 "config": {
@@ -10,7 +10,6 @@ use Psr\Http\Message\StreamInterface; @@ -10,7 +10,6 @@ use Psr\Http\Message\StreamInterface;
10 * Lazily reads or writes to a file that is opened only after an IO operation 10 * Lazily reads or writes to a file that is opened only after an IO operation
11 * take place on the stream. 11 * take place on the stream.
12 */ 12 */
13 -#[\AllowDynamicProperties]  
14 final class LazyOpenStream implements StreamInterface 13 final class LazyOpenStream implements StreamInterface
15 { 14 {
16 use StreamDecoratorTrait; 15 use StreamDecoratorTrait;
@@ -22,6 +21,11 @@ final class LazyOpenStream implements StreamInterface @@ -22,6 +21,11 @@ final class LazyOpenStream implements StreamInterface
22 private $mode; 21 private $mode;
23 22
24 /** 23 /**
  24 + * @var StreamInterface
  25 + */
  26 + private $stream;
  27 +
  28 + /**
25 * @param string $filename File to lazily open 29 * @param string $filename File to lazily open
26 * @param string $mode fopen mode to use when opening the stream 30 * @param string $mode fopen mode to use when opening the stream
27 */ 31 */
@@ -29,6 +33,10 @@ final class LazyOpenStream implements StreamInterface @@ -29,6 +33,10 @@ final class LazyOpenStream implements StreamInterface
29 { 33 {
30 $this->filename = $filename; 34 $this->filename = $filename;
31 $this->mode = $mode; 35 $this->mode = $mode;
  36 +
  37 + // unsetting the property forces the first access to go through
  38 + // __get().
  39 + unset($this->stream);
32 } 40 }
33 41
34 /** 42 /**
@@ -77,7 +77,7 @@ final class Message @@ -77,7 +77,7 @@ final class Message
77 77
78 // Matches any printable character, including unicode characters: 78 // Matches any printable character, including unicode characters:
79 // letters, marks, numbers, punctuation, spacing, and separators. 79 // letters, marks, numbers, punctuation, spacing, and separators.
80 - if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/u', $summary)) { 80 + if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/u', $summary) !== 0) {
81 return null; 81 return null;
82 } 82 }
83 83
@@ -224,12 +224,9 @@ trait MessageTrait @@ -224,12 +224,9 @@ trait MessageTrait
224 )); 224 ));
225 } 225 }
226 226
227 - if (! preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/', $header)) { 227 + if (! preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/D', $header)) {
228 throw new \InvalidArgumentException( 228 throw new \InvalidArgumentException(
229 - sprintf(  
230 - '"%s" is not valid header name',  
231 - $header  
232 - ) 229 + sprintf('"%s" is not valid header name.', $header)
233 ); 230 );
234 } 231 }
235 } 232 }
@@ -257,8 +254,10 @@ trait MessageTrait @@ -257,8 +254,10 @@ trait MessageTrait
257 // Clients must not send a request with line folding and a server sending folded headers is 254 // Clients must not send a request with line folding and a server sending folded headers is
258 // likely very rare. Line folding is a fairly obscure feature of HTTP/1.1 and thus not accepting 255 // likely very rare. Line folding is a fairly obscure feature of HTTP/1.1 and thus not accepting
259 // folding is not likely to break any legitimate use case. 256 // folding is not likely to break any legitimate use case.
260 - if (! preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/', $value)) {  
261 - throw new \InvalidArgumentException(sprintf('"%s" is not valid header value', $value)); 257 + if (! preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/D', $value)) {
  258 + throw new \InvalidArgumentException(
  259 + sprintf('"%s" is not valid header value.', $value)
  260 + );
262 } 261 }
263 } 262 }
264 } 263 }
@@ -144,10 +144,10 @@ class ServerRequest extends Request implements ServerRequestInterface @@ -144,10 +144,10 @@ class ServerRequest extends Request implements ServerRequestInterface
144 foreach (array_keys($files['tmp_name']) as $key) { 144 foreach (array_keys($files['tmp_name']) as $key) {
145 $spec = [ 145 $spec = [
146 'tmp_name' => $files['tmp_name'][$key], 146 'tmp_name' => $files['tmp_name'][$key],
147 - 'size' => $files['size'][$key],  
148 - 'error' => $files['error'][$key],  
149 - 'name' => $files['name'][$key],  
150 - 'type' => $files['type'][$key], 147 + 'size' => $files['size'][$key] ?? null,
  148 + 'error' => $files['error'][$key] ?? null,
  149 + 'name' => $files['name'][$key] ?? null,
  150 + 'type' => $files['type'][$key] ?? null,
151 ]; 151 ];
152 $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec); 152 $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec);
153 } 153 }
1 -composer.lock 1 +tests/poster/
  2 +tests/server/static/
2 vendor/ 3 vendor/
  4 +composer.lock
  5 +.idea
  1 + Apache License
  2 + Version 2.0, January 2004
  3 + http://www.apache.org/licenses/
  4 +
  5 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
  6 +
  7 + 1. Definitions.
  8 +
  9 + "License" shall mean the terms and conditions for use, reproduction,
  10 + and distribution as defined by Sections 1 through 9 of this document.
  11 +
  12 + "Licensor" shall mean the copyright owner or entity authorized by
  13 + the copyright owner that is granting the License.
  14 +
  15 + "Legal Entity" shall mean the union of the acting entity and all
  16 + other entities that control, are controlled by, or are under common
  17 + control with that entity. For the purposes of this definition,
  18 + "control" means (i) the power, direct or indirect, to cause the
  19 + direction or management of such entity, whether by contract or
  20 + otherwise, or (ii) ownership of fifty percent (50%) or more of the
  21 + outstanding shares, or (iii) beneficial ownership of such entity.
  22 +
  23 + "You" (or "Your") shall mean an individual or Legal Entity
  24 + exercising permissions granted by this License.
  25 +
  26 + "Source" form shall mean the preferred form for making modifications,
  27 + including but not limited to software source code, documentation
  28 + source, and configuration files.
  29 +
  30 + "Object" form shall mean any form resulting from mechanical
  31 + transformation or translation of a Source form, including but
  32 + not limited to compiled object code, generated documentation,
  33 + and conversions to other media types.
  34 +
  35 + "Work" shall mean the work of authorship, whether in Source or
  36 + Object form, made available under the License, as indicated by a
  37 + copyright notice that is included in or attached to the work
  38 + (an example is provided in the Appendix below).
  39 +
  40 + "Derivative Works" shall mean any work, whether in Source or Object
  41 + form, that is based on (or derived from) the Work and for which the
  42 + editorial revisions, annotations, elaborations, or other modifications
  43 + represent, as a whole, an original work of authorship. For the purposes
  44 + of this License, Derivative Works shall not include works that remain
  45 + separable from, or merely link (or bind by name) to the interfaces of,
  46 + the Work and Derivative Works thereof.
  47 +
  48 + "Contribution" shall mean any work of authorship, including
  49 + the original version of the Work and any modifications or additions
  50 + to that Work or Derivative Works thereof, that is intentionally
  51 + submitted to Licensor for inclusion in the Work by the copyright owner
  52 + or by an individual or Legal Entity authorized to submit on behalf of
  53 + the copyright owner. For the purposes of this definition, "submitted"
  54 + means any form of electronic, verbal, or written communication sent
  55 + to the Licensor or its representatives, including but not limited to
  56 + communication on electronic mailing lists, source code control systems,
  57 + and issue tracking systems that are managed by, or on behalf of, the
  58 + Licensor for the purpose of discussing and improving the Work, but
  59 + excluding communication that is conspicuously marked or otherwise
  60 + designated in writing by the copyright owner as "Not a Contribution."
  61 +
  62 + "Contributor" shall mean Licensor and any individual or Legal Entity
  63 + on behalf of whom a Contribution has been received by Licensor and
  64 + subsequently incorporated within the Work.
  65 +
  66 + 2. Grant of Copyright License. Subject to the terms and conditions of
  67 + this License, each Contributor hereby grants to You a perpetual,
  68 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  69 + copyright license to reproduce, prepare Derivative Works of,
  70 + publicly display, publicly perform, sublicense, and distribute the
  71 + Work and such Derivative Works in Source or Object form.
  72 +
  73 + 3. Grant of Patent License. Subject to the terms and conditions of
  74 + this License, each Contributor hereby grants to You a perpetual,
  75 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  76 + (except as stated in this section) patent license to make, have made,
  77 + use, offer to sell, sell, import, and otherwise transfer the Work,
  78 + where such license applies only to those patent claims licensable
  79 + by such Contributor that are necessarily infringed by their
  80 + Contribution(s) alone or by combination of their Contribution(s)
  81 + with the Work to which such Contribution(s) was submitted. If You
  82 + institute patent litigation against any entity (including a
  83 + cross-claim or counterclaim in a lawsuit) alleging that the Work
  84 + or a Contribution incorporated within the Work constitutes direct
  85 + or contributory patent infringement, then any patent licenses
  86 + granted to You under this License for that Work shall terminate
  87 + as of the date such litigation is filed.
  88 +
  89 + 4. Redistribution. You may reproduce and distribute copies of the
  90 + Work or Derivative Works thereof in any medium, with or without
  91 + modifications, and in Source or Object form, provided that You
  92 + meet the following conditions:
  93 +
  94 + (a) You must give any other recipients of the Work or
  95 + Derivative Works a copy of this License; and
  96 +
  97 + (b) You must cause any modified files to carry prominent notices
  98 + stating that You changed the files; and
  99 +
  100 + (c) You must retain, in the Source form of any Derivative Works
  101 + that You distribute, all copyright, patent, trademark, and
  102 + attribution notices from the Source form of the Work,
  103 + excluding those notices that do not pertain to any part of
  104 + the Derivative Works; and
  105 +
  106 + (d) If the Work includes a "NOTICE" text file as part of its
  107 + distribution, then any Derivative Works that You distribute must
  108 + include a readable copy of the attribution notices contained
  109 + within such NOTICE file, excluding those notices that do not
  110 + pertain to any part of the Derivative Works, in at least one
  111 + of the following places: within a NOTICE text file distributed
  112 + as part of the Derivative Works; within the Source form or
  113 + documentation, if provided along with the Derivative Works; or,
  114 + within a display generated by the Derivative Works, if and
  115 + wherever such third-party notices normally appear. The contents
  116 + of the NOTICE file are for informational purposes only and
  117 + do not modify the License. You may add Your own attribution
  118 + notices within Derivative Works that You distribute, alongside
  119 + or as an addendum to the NOTICE text from the Work, provided
  120 + that such additional attribution notices cannot be construed
  121 + as modifying the License.
  122 +
  123 + You may add Your own copyright statement to Your modifications and
  124 + may provide additional or different license terms and conditions
  125 + for use, reproduction, or distribution of Your modifications, or
  126 + for any such Derivative Works as a whole, provided Your use,
  127 + reproduction, and distribution of the Work otherwise complies with
  128 + the conditions stated in this License.
  129 +
  130 + 5. Submission of Contributions. Unless You explicitly state otherwise,
  131 + any Contribution intentionally submitted for inclusion in the Work
  132 + by You to the Licensor shall be under the terms and conditions of
  133 + this License, without any additional terms or conditions.
  134 + Notwithstanding the above, nothing herein shall supersede or modify
  135 + the terms of any separate license agreement you may have executed
  136 + with Licensor regarding such Contributions.
  137 +
  138 + 6. Trademarks. This License does not grant permission to use the trade
  139 + names, trademarks, service marks, or product names of the Licensor,
  140 + except as required for reasonable and customary use in describing the
  141 + origin of the Work and reproducing the content of the NOTICE file.
  142 +
  143 + 7. Disclaimer of Warranty. Unless required by applicable law or
  144 + agreed to in writing, Licensor provides the Work (and each
  145 + Contributor provides its Contributions) on an "AS IS" BASIS,
  146 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  147 + implied, including, without limitation, any warranties or conditions
  148 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
  149 + PARTICULAR PURPOSE. You are solely responsible for determining the
  150 + appropriateness of using or redistributing the Work and assume any
  151 + risks associated with Your exercise of permissions under this License.
  152 +
  153 + 8. Limitation of Liability. In no event and under no legal theory,
  154 + whether in tort (including negligence), contract, or otherwise,
  155 + unless required by applicable law (such as deliberate and grossly
  156 + negligent acts) or agreed to in writing, shall any Contributor be
  157 + liable to You for damages, including any direct, indirect, special,
  158 + incidental, or consequential damages of any character arising as a
  159 + result of this License or out of the use or inability to use the
  160 + Work (including but not limited to damages for loss of goodwill,
  161 + work stoppage, computer failure or malfunction, or any and all
  162 + other commercial damages or losses), even if such Contributor
  163 + has been advised of the possibility of such damages.
  164 +
  165 + 9. Accepting Warranty or Additional Liability. While redistributing
  166 + the Work or Derivative Works thereof, You may choose to offer,
  167 + and charge a fee for, acceptance of support, warranty, indemnity,
  168 + or other liability obligations and/or rights consistent with this
  169 + License. However, in accepting such obligations, You may act only
  170 + on Your own behalf and on Your sole responsibility, not on behalf
  171 + of any other Contributor, and only if You agree to indemnify,
  172 + defend, and hold each Contributor harmless for any liability
  173 + incurred by, or claims asserted against, such Contributor by reason
  174 + of your accepting any such warranty or additional liability.
  175 +
  176 + END OF TERMS AND CONDITIONS
  177 +
  178 + APPENDIX: How to apply the Apache License to your work.
  179 +
  180 + To apply the Apache License to your work, attach the following
  181 + boilerplate notice, with the fields enclosed by brackets "[]"
  182 + replaced with your own identifying information. (Don't include
  183 + the brackets!) The text should be enclosed in the appropriate
  184 + comment syntax for the file format. We also recommend that a
  185 + file or class name and description of purpose be included on the
  186 + same "printed page" as the copyright notice for easier
  187 + identification within third-party archives.
  188 +
  189 + Copyright [yyyy] [name of copyright owner]
  190 +
  191 + Licensed under the Apache License, Version 2.0 (the "License");
  192 + you may not use this file except in compliance with the License.
  193 + You may obtain a copy of the License at
  194 +
  195 + http://www.apache.org/licenses/LICENSE-2.0
  196 +
  197 + Unless required by applicable law or agreed to in writing, software
  198 + distributed under the License is distributed on an "AS IS" BASIS,
  199 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  200 + See the License for the specific language governing permissions and
  201 + limitations under the License.