瀏覽代碼

1、pageoffice 模块集成 /n 2、报告下载

紫风天下行 2 年之前
父節點
當前提交
b36e82b902
共有 100 個文件被更改,包括 2567 次插入1115 次删除
  1. 19 0
      Dockerfile
  2. 3 1
      application/admin/controller/Res.php
  3. 22 0
      application/admin/controller/Word.php
  4. 1 0
      application/admin/lang/zh-cn/general/config.php
  5. 4 0
      application/api/controller/Data.php
  6. 136 0
      application/api/controller/Word.php
  7. 4 1
      application/database.php
  8. 14 0
      application/extra/queue.php
  9. 11 1
      application/extra/site.php
  10. 1 1
      application/extra/upload.php
  11. 9 3
      composer.json
  12. 109 0
      deploy/nginx/my.conf
  13. 0 8
      public/.htaccess
  14. 15 0
      public/SaveFile.php
  15. 22 2
      public/assets/js/backend/res.js
  16. 5 0
      public/nginx.htaccess
  17. 74 0
      public/word.php
  18. 1 1
      thinkphp/base.php
  19. 72 65
      vendor/composer/ClassLoader.php
  20. 12 5
      vendor/composer/InstalledVersions.php
  21. 0 1
      vendor/composer/autoload_files.php
  22. 3 1
      vendor/composer/autoload_psr4.php
  23. 10 17
      vendor/composer/autoload_real.php
  24. 15 3
      vendor/composer/autoload_static.php
  25. 514 85
      vendor/composer/installed.json
  26. 73 55
      vendor/composer/installed.php
  27. 2 2
      vendor/composer/platform_check.php
  28. 91 1
      vendor/guzzlehttp/guzzle/CHANGELOG.md
  29. 7 7
      vendor/guzzlehttp/guzzle/README.md
  30. 4 6
      vendor/guzzlehttp/guzzle/composer.json
  31. 22 16
      vendor/guzzlehttp/guzzle/src/Client.php
  32. 14 12
      vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
  33. 1 1
      vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
  34. 1 1
      vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
  35. 63 21
      vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
  36. 57 22
      vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php
  37. 2 1
      vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php
  38. 1 1
      vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php
  39. 2 2
      vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php
  40. 2 1
      vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php
  41. 44 22
      vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php
  42. 6 6
      vendor/guzzlehttp/guzzle/src/HandlerStack.php
  43. 8 7
      vendor/guzzlehttp/guzzle/src/MessageFormatter.php
  44. 14 6
      vendor/guzzlehttp/guzzle/src/Middleware.php
  45. 1 0
      vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php
  46. 4 4
      vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php
  47. 14 2
      vendor/guzzlehttp/guzzle/src/RequestOptions.php
  48. 5 2
      vendor/guzzlehttp/guzzle/src/RetryMiddleware.php
  49. 11 11
      vendor/guzzlehttp/guzzle/src/Utils.php
  50. 4 4
      vendor/guzzlehttp/guzzle/src/functions.php
  51. 1 1
      vendor/guzzlehttp/guzzle/src/functions_include.php
  52. 28 0
      vendor/guzzlehttp/promises/CHANGELOG.md
  53. 17 4
      vendor/guzzlehttp/promises/README.md
  54. 10 10
      vendor/guzzlehttp/promises/composer.json
  55. 3 1
      vendor/guzzlehttp/promises/src/AggregateException.php
  56. 2 0
      vendor/guzzlehttp/promises/src/CancellationException.php
  57. 16 23
      vendor/guzzlehttp/promises/src/Coroutine.php
  58. 8 13
      vendor/guzzlehttp/promises/src/Create.php
  59. 11 15
      vendor/guzzlehttp/promises/src/Each.php
  60. 23 20
      vendor/guzzlehttp/promises/src/EachPromise.php
  61. 17 12
      vendor/guzzlehttp/promises/src/FulfilledPromise.php
  62. 6 12
      vendor/guzzlehttp/promises/src/Is.php
  63. 27 24
      vendor/guzzlehttp/promises/src/Promise.php
  64. 14 20
      vendor/guzzlehttp/promises/src/PromiseInterface.php
  65. 3 3
      vendor/guzzlehttp/promises/src/PromisorInterface.php
  66. 17 13
      vendor/guzzlehttp/promises/src/RejectedPromise.php
  67. 7 6
      vendor/guzzlehttp/promises/src/RejectionException.php
  68. 10 6
      vendor/guzzlehttp/promises/src/TaskQueue.php
  69. 5 5
      vendor/guzzlehttp/promises/src/TaskQueueInterface.php
  70. 26 43
      vendor/guzzlehttp/promises/src/Utils.php
  71. 0 363
      vendor/guzzlehttp/promises/src/functions.php
  72. 0 6
      vendor/guzzlehttp/promises/src/functions_include.php
  73. 9 0
      vendor/guzzlehttp/promises/vendor-bin/php-cs-fixer/composer.json
  74. 10 0
      vendor/guzzlehttp/promises/vendor-bin/phpstan/composer.json
  75. 9 0
      vendor/guzzlehttp/promises/vendor-bin/psalm/composer.json
  76. 20 0
      vendor/guzzlehttp/psr7/CHANGELOG.md
  77. 8 0
      vendor/guzzlehttp/psr7/README.md
  78. 1 4
      vendor/guzzlehttp/psr7/composer.json
  79. 9 1
      vendor/guzzlehttp/psr7/src/LazyOpenStream.php
  80. 1 1
      vendor/guzzlehttp/psr7/src/Message.php
  81. 6 7
      vendor/guzzlehttp/psr7/src/MessageTrait.php
  82. 4 4
      vendor/guzzlehttp/psr7/src/ServerRequest.php
  83. 5 0
      vendor/laminas/laminas-escaper/.laminas-ci.json
  84. 1 0
      vendor/laminas/laminas-escaper/COPYRIGHT.md
  85. 26 0
      vendor/laminas/laminas-escaper/LICENSE.md
  86. 28 0
      vendor/laminas/laminas-escaper/README.md
  87. 60 0
      vendor/laminas/laminas-escaper/composer.json
  88. 21 0
      vendor/laminas/laminas-escaper/phpcs.xml.dist
  89. 59 0
      vendor/laminas/laminas-escaper/psalm-baseline.xml
  90. 34 0
      vendor/laminas/laminas-escaper/psalm.xml
  91. 422 0
      vendor/laminas/laminas-escaper/src/Escaper.php
  92. 9 0
      vendor/laminas/laminas-escaper/src/Exception/ExceptionInterface.php
  93. 13 0
      vendor/laminas/laminas-escaper/src/Exception/InvalidArgumentException.php
  94. 13 0
      vendor/laminas/laminas-escaper/src/Exception/RuntimeException.php
  95. 1 0
      vendor/maennchen/zipstream-php/.github/FUNDING.yml
  96. 12 0
      vendor/maennchen/zipstream-php/.github/ISSUE_TEMPLATE.md
  97. 6 0
      vendor/maennchen/zipstream-php/.gitignore
  98. 0 4
      vendor/maennchen/zipstream-php/.phive/phars.xml
  99. 0 71
      vendor/maennchen/zipstream-php/.php-cs-fixer.dist.php
  100. 0 15
      vendor/maennchen/zipstream-php/.phpdoc/template/base.html.twig

+ 19 - 0
Dockerfile

@@ -0,0 +1,19 @@
+# 使用官方 PHP 镜像作为基础镜像
+FROM php:7.4-fpm
+
+# 安装必要的扩展
+RUN docker-php-ext-install pdo_mysql
+
+# 安装 Nginx
+RUN apt-get update && apt-get install -y nginx
+# 将 Nginx 的配置文件复制到容器中
+#COPY ./deploy/nginx/my.conf /etc/nginx/nginx.conf
+
+# 将 PHP 代码复制到容器中
+COPY . /var/www/html
+
+# 暴露 80 端口
+EXPOSE 8080
+
+# 启动 Nginx 和 PHP-FPM
+CMD service nginx start && php-fpm

+ 3 - 1
application/admin/controller/Res.php

@@ -3,8 +3,9 @@
 namespace app\admin\controller;
 namespace app\admin\controller;
 
 
 use app\common\controller\Backend;
 use app\common\controller\Backend;
-use PhpOffice\PhpSpreadsheet\Style\Alignment;
+
 use \think\Db;
 use \think\Db;
+use think\Exception;
 use \think\Session;
 use \think\Session;
 /**
 /**
  * 检测结果管理管理
  * 检测结果管理管理
@@ -455,4 +456,5 @@ class Res extends Backend
         $writer->save('php://output');
         $writer->save('php://output');
         exit;
         exit;
     }
     }
+
 }
 }

+ 22 - 0
application/admin/controller/Word.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace app\admin\controller;
+
+use app\common\controller\Backend;
+
+class Word extends Backend
+{
+
+    /**
+     * Res模型对象
+     * @var \app\admin\model\Res
+     */
+    protected $model = null;
+    protected $searchFields = '';
+    public function _initialize()
+    {
+        parent::_initialize();
+
+    }
+
+}

+ 1 - 0
application/admin/lang/zh-cn/general/config.php

@@ -13,6 +13,7 @@ return [
     'Dictionary'                           => '字典配置',
     'Dictionary'                           => '字典配置',
     'User'                                 => '会员配置',
     'User'                                 => '会员配置',
     'Example'                              => '示例分组',
     'Example'                              => '示例分组',
+    'VocsTemplate'                              => 'Vocs模版',
     'Extend'                               => '扩展属性',
     'Extend'                               => '扩展属性',
     'String'                               => '字符',
     'String'                               => '字符',
     'Password'                             => '密码',
     'Password'                             => '密码',

+ 4 - 0
application/api/controller/Data.php

@@ -46,6 +46,8 @@ class Data extends Api
                 $res['judge'] = '不合格';
                 $res['judge'] = '不合格';
             }
             }
             unset($res['standard_id']);
             unset($res['standard_id']);
+
+
             $this->success('请求成功',$res,200);
             $this->success('请求成功',$res,200);
         }else{
         }else{
             $this->error('请求失败,未查询到该批次号数据','',402);
             $this->error('请求失败,未查询到该批次号数据','',402);
@@ -53,4 +55,6 @@ class Data extends Api
 
 
     }
     }
 
 
+
+
 }
 }

+ 136 - 0
application/api/controller/Word.php

@@ -0,0 +1,136 @@
+<?php
+
+namespace app\api\controller;
+
+use app\common\controller\Api;
+use think\Db;
+use think\Exception;
+
+class Word extends Api
+{
+    protected $noNeedLogin = '*';
+    protected $noNeedRight = '*';
+
+
+    public function download($bach = null){
+        try{
+            $data= $this->getWords($bach);
+
+
+            $destination = ROOT_PATH.'public'.DS."uploads".DS."words".DS."download".DS."卷烟包装材料安全卫生检测报告批次号-".$data['bach']."(浙江美浓世纪集团有限公司检测中心).docx";
+            $destination_path = DS."uploads".DS."words".DS."download".DS."卷烟包装材料安全卫生检测报告批次号-".$data['bach']."(浙江美浓世纪集团有限公司检测中心).docx";
+
+            if(!file_exists($data['dist_fule_file'])){
+\exception("报告不存在");
+}
+            if(file_exists($destination)){
+                header("location:".cdnurl($destination_path,true));
+            }else{
+                if (copy($data['dist_fule_file'], $destination)) {
+                    header("location:".cdnurl($destination_path,true));
+                }
+            }
+        }catch (Exception $e){
+            $this->error($e->getMessage());
+        }
+
+    }
+    public function preview($bach = null){
+        header("Content-type:text/html; charset=utf-8");//设置当前页面编码为“utf-8”
+        ini_set("display_errors","On");
+        error_reporting(E_ALL);
+
+            $data= $this->getWords($bach);
+
+           header("location:http://vocs.7in6.com/word.php?doc=".$data['dist_file']);
+    }
+
+    protected function initData($bach=null){
+
+        if (empty($bach)){
+            $this->error('参数错误','',401);
+        }
+        $where = [];
+        $where['bach'] = $bach;
+        $where['delete_time'] = null;
+//        $where['sample_no'] = array('like','%A%');
+        $res = Db::name('res')->where($where)->field('entrust_no,name,bach,sell_bach,sample_no,dis,dis_impurity,ben_total,ben,judge,standard_id,create')->find();
+        if ($res){
+            $check = Db::name('item_judge_detail')->where('pid',$res['standard_id'])->select();
+            foreach ($check as $key => $value){
+                if ($value['params'] == '溶剂残留总量'){
+                    $res['dis_max'] = $value['max'];
+                }
+                if ($value['params'] == '溶剂杂质总量'){
+                    $res['dis_impurity_max'] = $value['max'];
+                }
+                if ($value['params'] == '苯系物总量'){
+                    $res['ben_total_max'] = $value['max'];
+                }
+                if ($value['params'] == '苯含量'){
+                    $res['ben_max'] = $value['max'];
+                }
+            }
+            $res['create'] = date('Y',strtotime($res['create'])).'.'.date('m',strtotime($res['create'])).'.'.date('d',strtotime($res['create']));
+            if ($res['judge'] == 1){
+                $res['judge'] = '合格';
+            }else{
+                $res['judge'] = '不合格';
+            }
+            unset($res['standard_id']);
+
+            return $res;
+
+        }
+        return null;
+    }
+    /**
+     * @return string
+     */
+    protected function getWords($bach)
+    {
+
+        $data=$this->initData($bach);
+
+        return $this->generateFile($data);
+    }
+
+    /**
+     * @return string
+     */
+    protected function generateFile($data)
+    {
+
+        $data['dist_file']=DS."uploads".DS."words".DS.$data['bach'].".docx";
+        $data['dist_fule_file']=ROOT_PATH.'public'.DS."uploads".DS."words".DS.$data['bach'].".docx";
+        if(file_exists($data['dist_fule_file'])){
+            return $data;
+        }
+        $temp_path=ROOT_PATH.'public'.config("site.ben");
+        $exten=substr($temp_path, strrpos($temp_path, '.')+1);
+
+        if($exten!='docx'){
+            $this->error("模板文件请上传docx格式");
+        }
+        $templateProcessor=new \PhpOffice\PhpWord\TemplateProcessor($temp_path);
+
+        $templateProcessor->setValue('entrust_no',$data['entrust_no']);//替换变量name
+        $templateProcessor->setValue('name',$data['name']);//替换变量name
+        $templateProcessor->setValue('bach',$data['bach']);//替换变量name
+        $templateProcessor->setValue('create',$data['create']);//替换变量name
+        $templateProcessor->setValue('dis_max',$data['dis_max']);//替换变量name
+
+        $templateProcessor->setValue('dis',$data['dis']);//替换变量name
+        $templateProcessor->setValue('dis_impurity_max',$data['dis_impurity_max']);//替换变量name
+        $templateProcessor->setValue('dis_impurity',$data['dis_impurity']);//替换变量name
+        $templateProcessor->setValue('ben_total_max',$data['ben_total_max']);//替换变量name
+        $templateProcessor->setValue('ben_total',$data['ben_total']);//替换变量name
+        $templateProcessor->setValue('ben_max',$data['ben_max']);//替换变量name
+        $templateProcessor->setValue('ben',$data['ben']);//替换变量name
+        $templateProcessor->setValue('judge',$data['judge']);//替换变量name
+
+        $templateProcessor->saveAs($data['dist_fule_file']);//另存为
+
+        return $data;
+    }
+}

+ 4 - 1
application/database.php

@@ -17,12 +17,15 @@ return [
     'type'            => Env::get('database.type', 'mysql'),
     'type'            => Env::get('database.type', 'mysql'),
     // 服务器地址
     // 服务器地址
     'hostname'        => Env::get('database.hostname', '127.0.0.1'),
     'hostname'        => Env::get('database.hostname', '127.0.0.1'),
+//    'hostname'        => Env::get('database.hostname', '127.0.0.1'),
     // 数据库名
     // 数据库名
     'database'        => Env::get('database.database', 'vocs'),
     'database'        => Env::get('database.database', 'vocs'),
     // 用户名
     // 用户名
     'username'        => Env::get('database.username', 'root'),
     'username'        => Env::get('database.username', 'root'),
+//    'username'        => Env::get('database.username', 'root'),
     // 密码
     // 密码
-    'password'        => Env::get('database.password', 'root'),
+    'password'        => Env::get('database.password', 'admin123'),
+//    'password'        => Env::get('database.password', 'root'),
     // 端口
     // 端口
     'hostport'        => Env::get('database.hostport', ''),
     'hostport'        => Env::get('database.hostport', ''),
     // 连接dsn
     // 连接dsn

+ 14 - 0
application/extra/queue.php

@@ -0,0 +1,14 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: yunwuxin <448901948@qq.com>
+// +----------------------------------------------------------------------
+
+return [
+    'connector' => 'Sync'
+];

+ 11 - 1
application/extra/site.php

@@ -26,7 +26,7 @@ return array (
     'email' => 'Email',
     'email' => 'Email',
     'dictionary' => 'Dictionary',
     'dictionary' => 'Dictionary',
     'user' => 'User',
     'user' => 'User',
-    'example' => 'Example',
+    'VocsTemplate' => 'VocsTemplate',
   ),
   ),
   'mail_type' => '1',
   'mail_type' => '1',
   'mail_smtp_host' => 'smtp.qq.com',
   'mail_smtp_host' => 'smtp.qq.com',
@@ -41,4 +41,14 @@ return array (
     'category2' => 'Category2',
     'category2' => 'Category2',
     'custom' => 'Custom',
     'custom' => 'Custom',
   ),
   ),
+  'templates' => 
+  array (
+    0 => '',
+  ),
+  333 => '',
+  'rr33' => 
+  array (
+    0 => '',
+  ),
+  'ben' => '/uploads/20230803/9086641ec92a48bb092679a350a6b63d.docx',
 );
 );

+ 1 - 1
application/extra/upload.php

@@ -21,7 +21,7 @@ return [
     /**
     /**
      * 可上传的文件类型
      * 可上传的文件类型
      */
      */
-    'mimetype'  => 'jpg,png,bmp,jpeg,gif,webp,zip,rar,wav,mp4,mp3,webm',
+    'mimetype'  => 'jpg,png,bmp,jpeg,gif,webp,zip,rar,wav,mp4,mp3,webm,docx',
     /**
     /**
      * 是否支持批量上传
      * 是否支持批量上传
      */
      */

+ 9 - 3
composer.json

@@ -23,17 +23,23 @@
         "topthink/think-helper": "^1.0.7",
         "topthink/think-helper": "^1.0.7",
         "karsonzhang/fastadmin-addons": "~1.3.2",
         "karsonzhang/fastadmin-addons": "~1.3.2",
         "overtrue/pinyin": "^3.0",
         "overtrue/pinyin": "^3.0",
-        "phpoffice/phpspreadsheet": "1.19",
+        "phpoffice/phpspreadsheet": "^1.25",
         "overtrue/wechat": "^4.6",
         "overtrue/wechat": "^4.6",
         "nelexa/zip": "^3.3",
         "nelexa/zip": "^3.3",
         "ext-json": "*",
         "ext-json": "*",
         "ext-curl": "*",
         "ext-curl": "*",
         "ext-pdo": "*",
         "ext-pdo": "*",
         "ext-bcmath": "*",
         "ext-bcmath": "*",
-        "txthinking/mailer": "^2.0"
+        "txthinking/mailer": "^2.0",
+        "phpoffice/phpword": "^1.1",
+      "ext-zend": "*"
     },
     },
     "config": {
     "config": {
-        "preferred-install": "dist"
+        "preferred-install": "dist",
+        "allow-plugins": {
+            "topthink/think-installer": true,
+            "easywechat-composer/easywechat-composer": true
+        }
     },
     },
     "repositories": [
     "repositories": [
         {
         {

+ 109 - 0
deploy/nginx/my.conf

@@ -0,0 +1,109 @@
+user  nginx;
+worker_processes  1;
+
+error_log  /var/log/nginx/error.log warn;
+pid        /var/run/nginx.pid;
+
+events {
+    worker_connections  1024;
+}
+
+http {
+    include       /etc/nginx/mime.types;
+    default_type  application/octet-stream;
+
+    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
+                      '$status $body_bytes_sent "$http_referer" '
+                      '"$http_user_agent" "$http_x_forwarded_for"';
+
+    access_log  /var/log/nginx/access.log  main;
+
+    sendfile        on;
+    #tcp_nopush     on;
+
+    keepalive_timeout  65;
+
+    #gzip  on;
+
+    server {
+        listen       80;
+        server_name  localhost;
+
+        #charset koi8-r;
+
+        #access_log  /var/log/nginx/host.access.log  main;
+
+        location / {
+            root   /var/www/html;
+            index  index.php index.html index.htm;
+            if (!-e $request_filename){
+            	rewrite  ^(.*)$  /index.php?s=$1  last;   break;
+            }
+        }
+
+        #error_page  404              /404.html;
+
+        # redirect server error pages to the static page /50x.html
+        #
+        error_page   500 502 503 504  /50x.html;
+        location = /50x.html {
+            root   /usr/share/nginx/html;
+        }
+
+        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
+        #
+        #location ~ \.php$ {
+        #    proxy_pass   http://127.0.0.1;
+        #}
+
+        # pass PHP scripts to FastCGI server
+        #
+        location ~ \.php$ {
+            fastcgi_pass   127.0.0.1:9000;
+            fastcgi_index  index.php;
+            fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
+            include        fastcgi_params;
+        }
+
+        # deny access to .htaccess files, if Apache's document root
+        # concurs with nginx's one
+        #
+        #location ~ /\.ht {
+        #    deny  all;
+        #}
+    }
+
+    # another virtual host using mix of IP-, name-, and port-based configuration
+    #
+    #server {
+    #    listen       8000;
+    #    listen       somename:8080;
+    #    server_name  somename  alias  another.alias;
+
+    #    location / {
+    #        root   html;
+    #        index  index.html index.htm;
+    #    }
+    #}
+
+    # HTTPS server
+    #
+    #server {
+    #    listen       443 ssl;
+    #    server_name  localhost;
+
+    #    ssl_certificate      cert.pem;
+    #    ssl_certificate_key  cert.key;
+
+    #    ssl_session_cache    shared:SSL:1m;
+    #    ssl_session_timeout  5m;
+
+    #    ssl_ciphers  HIGH:!aNULL:!MD5;
+    #    ssl_prefer_server_ciphers  on;
+
+    #    location / {
+    #        root   html;
+    #        index  index.html index.htm;
+    #    }
+    #}
+}

+ 0 - 8
public/.htaccess

@@ -1,8 +0,0 @@
-<IfModule mod_rewrite.c>
-  Options +FollowSymlinks -Multiviews
-  RewriteEngine On
-
-  RewriteCond %{REQUEST_FILENAME} !-d
-  RewriteCond %{REQUEST_FILENAME} !-f
-  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
-</IfModule>

+ 15 - 0
public/SaveFile.php

@@ -0,0 +1,15 @@
+<?php
+header("Content-type:text/html; charset=utf-8");//设置当前页面编码为“utf-8”
+$ip = GetHostByName($_SERVER['SERVER_NAME']);//获取本机IP
+
+require_once("http://".$ip.":8232/JavaBridge/java/Java.inc");//此行必须
+$fs = new Java("com.zhuozhengsoft.pageoffice.FileSaverPHP");//此行必须
+$fs->load(file_get_contents("php://input"));//此行必须
+
+$filepath=realpath(dirname($_SERVER["SCRIPT_FILENAME"]));
+
+
+
+$fs->saveToFile($filepath."/uploads/words/".$fs->getFileName()); //保存文件
+
+echo $fs->close();//此行必须

+ 22 - 2
public/assets/js/backend/res.js

@@ -98,9 +98,16 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                                         return true;
                                         return true;
 
 
                                     }
                                     }
-                                }
+                                },
+
                             ],
                             ],
-                            formatter: Table.api.formatter.operate}
+                            formatter: Table.api.formatter.operate},
+                        {
+                        field: '下载',
+                        title: __('下载'),
+                        align: 'left',
+                        formatter: Controller.api.formatter.download
+                    },
                     ]
                     ]
                 ]
                 ]
             });
             });
@@ -170,6 +177,19 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
         api: {
         api: {
             bindevent: function () {
             bindevent: function () {
                 Form.api.bindevent($("form[role=form]"));
                 Form.api.bindevent($("form[role=form]"));
+            },
+            formatter:{
+
+                download: function (value, row, index) {
+                    console.log(row['bach'])
+                    if(row['bach']!=null && row['bach'] !=undefined && row['bach']!=""){
+                        var link;
+                        link="\<a class=\"btn btn-primary btn-edit\" href=\"javascript:POBrowser.openWindowModeless('./index.php/api/word/preview?bach="+row['bach']+"' , 'width=1200px;height=800px;');\">编辑文档</a>";
+                        link+='<a  class="btn btn-primary btn-warning" href="./index.php/api/word/download?bach='+row['bach']+'">下载</a>';
+                        return link;
+                    }
+                   return "";
+                },
             }
             }
         }
         }
     };
     };

+ 5 - 0
public/nginx.htaccess

@@ -0,0 +1,5 @@
+location / {
+	if (!-e $request_filename){
+		rewrite  ^(.*)$  /index.php?s=$1  last;   break;
+	}
+}

+ 74 - 0
public/word.php

@@ -0,0 +1,74 @@
+<script type="text/javascript" src="http://47.99.98.85:8232/JavaBridge/pageoffice.js"></script>
+<?php
+
+header("Content-type:text/html; charset=utf-8");//设置当前页面编码为“utf-8”
+
+ini_set("display_errors","On");
+error_reporting(E_ALL);
+$ip = GetHostByName($_SERVER['SERVER_NAME']); //获取本机IP
+
+//******************************卓正PageOffice组件的使用*******************************
+require_once("http://".$ip.":8232/JavaBridge/java/Java.inc");//此行必须
+$PageOfficeCtrl = new Java("com.zhuozhengsoft.pageoffice.PageOfficeCtrlPHP");//此行必须
+$PageOfficeCtrl->setServerPage("http://".$ip.":8232/JavaBridge/poserver.zz");//此行必须,设置服务器页面
+
+//添加自定义按钮
+$PageOfficeCtrl->addCustomToolButton("保存","Save",1);
+$PageOfficeCtrl->addCustomToolButton("打印设置","PrintSet",0);
+$PageOfficeCtrl->addCustomToolButton("打印","PrintFile",6);
+$PageOfficeCtrl->addCustomToolButton("全屏/还原", "IsFullScreen", 4);
+$PageOfficeCtrl->addCustomToolButton("-", "", 0);
+$PageOfficeCtrl->addCustomToolButton("关闭","Close",21);
+//设置保存页面
+$PageOfficeCtrl->setSaveFilePage("./SaveFile.php");
+//打开excel文档
+$PageOfficeCtrl->UserAgent = $_SERVER['HTTP_USER_AGENT'];//若使用谷歌浏览器此行代码必须有,其他浏览器此行代码可不加
+$OpenMode = new Java("com.zhuozhengsoft.pageoffice.OpenModeType");
+
+$PageOfficeCtrl->webOpen($_GET['doc'], $OpenMode->docNormalEdit, "张三");//此行必须
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+    <title>卷烟包装材料安全卫生检 测 报 告-浙江美浓世纪集团有限公司检测中心</title>
+</head>
+<body>
+<script type="text/javascript">
+    function Save() {
+        document.getElementById("PageOfficeCtrl1").WebSave();
+    }
+
+    function PrintSet() {
+        document.getElementById("PageOfficeCtrl1").ShowDialog(5);
+    }
+    function PrintFile() {
+        document.getElementById("PageOfficeCtrl1").ShowDialog(4);
+    }
+    function Close() {
+        //alert(document.getElementById("PageOfficeCtrl1").Document.ProtectionType );
+        window.external.close();
+    }
+    function IsFullScreen() {
+        document.getElementById("PageOfficeCtrl1").FullScreen = !document.getElementById("PageOfficeCtrl1").FullScreen;
+    }
+    //文档关闭前先提示用户是否保存
+    function BeforeBrowserClosed(){
+        if (document.getElementById("PageOfficeCtrl1").IsDirty){
+            if(confirm("提示:文档已被修改,是否继续关闭放弃保存 ?"))
+            {
+                return  true;
+
+            }else{
+
+                return  false;
+            }
+        }
+    }
+</script>
+<form id="form1" >
+    <div style=" width:auto; height:700px;">
+        <?php echo $PageOfficeCtrl->getDocumentView("PageOfficeCtrl1") ?>
+    </div>
+</form>
+</body>
+</html>

+ 1 - 1
thinkphp/base.php

@@ -9,7 +9,7 @@
 // | Author: liu21st <liu21st@gmail.com>
 // | Author: liu21st <liu21st@gmail.com>
 // +----------------------------------------------------------------------
 // +----------------------------------------------------------------------
 
 
-define('THINK_VERSION', '5.0.24');
+define('THINK_VERSION', '5.0.25');
 define('THINK_START_TIME', microtime(true));
 define('THINK_START_TIME', microtime(true));
 define('THINK_START_MEM', memory_get_usage());
 define('THINK_START_MEM', memory_get_usage());
 define('EXT', '.php');
 define('EXT', '.php');

+ 72 - 65
vendor/composer/ClassLoader.php

@@ -42,35 +42,37 @@ namespace Composer\Autoload;
  */
  */
 class ClassLoader
 class ClassLoader
 {
 {
-    /** @var ?string */
+    /** @var \Closure(string):void */
+    private static $includeFile;
+
+    /** @var string|null */
     private $vendorDir;
     private $vendorDir;
 
 
     // PSR-4
     // PSR-4
     /**
     /**
-     * @var array[]
-     * @psalm-var array<string, array<string, int>>
+     * @var array<string, array<string, int>>
      */
      */
     private $prefixLengthsPsr4 = array();
     private $prefixLengthsPsr4 = array();
     /**
     /**
-     * @var array[]
-     * @psalm-var array<string, array<int, string>>
+     * @var array<string, list<string>>
      */
      */
     private $prefixDirsPsr4 = array();
     private $prefixDirsPsr4 = array();
     /**
     /**
-     * @var array[]
-     * @psalm-var array<string, string>
+     * @var list<string>
      */
      */
     private $fallbackDirsPsr4 = array();
     private $fallbackDirsPsr4 = array();
 
 
     // PSR-0
     // PSR-0
     /**
     /**
-     * @var array[]
-     * @psalm-var array<string, array<string, string[]>>
+     * List of PSR-0 prefixes
+     *
+     * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
+     *
+     * @var array<string, array<string, list<string>>>
      */
      */
     private $prefixesPsr0 = array();
     private $prefixesPsr0 = array();
     /**
     /**
-     * @var array[]
-     * @psalm-var array<string, string>
+     * @var list<string>
      */
      */
     private $fallbackDirsPsr0 = array();
     private $fallbackDirsPsr0 = array();
 
 
@@ -78,8 +80,7 @@ class ClassLoader
     private $useIncludePath = false;
     private $useIncludePath = false;
 
 
     /**
     /**
-     * @var string[]
-     * @psalm-var array<string, string>
+     * @var array<string, string>
      */
      */
     private $classMap = array();
     private $classMap = array();
 
 
@@ -87,29 +88,29 @@ class ClassLoader
     private $classMapAuthoritative = false;
     private $classMapAuthoritative = false;
 
 
     /**
     /**
-     * @var bool[]
-     * @psalm-var array<string, bool>
+     * @var array<string, bool>
      */
      */
     private $missingClasses = array();
     private $missingClasses = array();
 
 
-    /** @var ?string */
+    /** @var string|null */
     private $apcuPrefix;
     private $apcuPrefix;
 
 
     /**
     /**
-     * @var self[]
+     * @var array<string, self>
      */
      */
     private static $registeredLoaders = array();
     private static $registeredLoaders = array();
 
 
     /**
     /**
-     * @param ?string $vendorDir
+     * @param string|null $vendorDir
      */
      */
     public function __construct($vendorDir = null)
     public function __construct($vendorDir = null)
     {
     {
         $this->vendorDir = $vendorDir;
         $this->vendorDir = $vendorDir;
+        self::initializeIncludeClosure();
     }
     }
 
 
     /**
     /**
-     * @return string[]
+     * @return array<string, list<string>>
      */
      */
     public function getPrefixes()
     public function getPrefixes()
     {
     {
@@ -121,8 +122,7 @@ class ClassLoader
     }
     }
 
 
     /**
     /**
-     * @return array[]
-     * @psalm-return array<string, array<int, string>>
+     * @return array<string, list<string>>
      */
      */
     public function getPrefixesPsr4()
     public function getPrefixesPsr4()
     {
     {
@@ -130,8 +130,7 @@ class ClassLoader
     }
     }
 
 
     /**
     /**
-     * @return array[]
-     * @psalm-return array<string, string>
+     * @return list<string>
      */
      */
     public function getFallbackDirs()
     public function getFallbackDirs()
     {
     {
@@ -139,8 +138,7 @@ class ClassLoader
     }
     }
 
 
     /**
     /**
-     * @return array[]
-     * @psalm-return array<string, string>
+     * @return list<string>
      */
      */
     public function getFallbackDirsPsr4()
     public function getFallbackDirsPsr4()
     {
     {
@@ -148,8 +146,7 @@ class ClassLoader
     }
     }
 
 
     /**
     /**
-     * @return string[] Array of classname => path
-     * @psalm-return array<string, string>
+     * @return array<string, string> Array of classname => path
      */
      */
     public function getClassMap()
     public function getClassMap()
     {
     {
@@ -157,8 +154,7 @@ class ClassLoader
     }
     }
 
 
     /**
     /**
-     * @param string[] $classMap Class to filename map
-     * @psalm-param array<string, string> $classMap
+     * @param array<string, string> $classMap Class to filename map
      *
      *
      * @return void
      * @return void
      */
      */
@@ -175,24 +171,25 @@ class ClassLoader
      * Registers a set of PSR-0 directories for a given prefix, either
      * Registers a set of PSR-0 directories for a given prefix, either
      * appending or prepending to the ones previously set for this prefix.
      * appending or prepending to the ones previously set for this prefix.
      *
      *
-     * @param string          $prefix  The prefix
-     * @param string[]|string $paths   The PSR-0 root directories
-     * @param bool            $prepend Whether to prepend the directories
+     * @param string              $prefix  The prefix
+     * @param list<string>|string $paths   The PSR-0 root directories
+     * @param bool                $prepend Whether to prepend the directories
      *
      *
      * @return void
      * @return void
      */
      */
     public function add($prefix, $paths, $prepend = false)
     public function add($prefix, $paths, $prepend = false)
     {
     {
+        $paths = (array) $paths;
         if (!$prefix) {
         if (!$prefix) {
             if ($prepend) {
             if ($prepend) {
                 $this->fallbackDirsPsr0 = array_merge(
                 $this->fallbackDirsPsr0 = array_merge(
-                    (array) $paths,
+                    $paths,
                     $this->fallbackDirsPsr0
                     $this->fallbackDirsPsr0
                 );
                 );
             } else {
             } else {
                 $this->fallbackDirsPsr0 = array_merge(
                 $this->fallbackDirsPsr0 = array_merge(
                     $this->fallbackDirsPsr0,
                     $this->fallbackDirsPsr0,
-                    (array) $paths
+                    $paths
                 );
                 );
             }
             }
 
 
@@ -201,19 +198,19 @@ class ClassLoader
 
 
         $first = $prefix[0];
         $first = $prefix[0];
         if (!isset($this->prefixesPsr0[$first][$prefix])) {
         if (!isset($this->prefixesPsr0[$first][$prefix])) {
-            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+            $this->prefixesPsr0[$first][$prefix] = $paths;
 
 
             return;
             return;
         }
         }
         if ($prepend) {
         if ($prepend) {
             $this->prefixesPsr0[$first][$prefix] = array_merge(
             $this->prefixesPsr0[$first][$prefix] = array_merge(
-                (array) $paths,
+                $paths,
                 $this->prefixesPsr0[$first][$prefix]
                 $this->prefixesPsr0[$first][$prefix]
             );
             );
         } else {
         } else {
             $this->prefixesPsr0[$first][$prefix] = array_merge(
             $this->prefixesPsr0[$first][$prefix] = array_merge(
                 $this->prefixesPsr0[$first][$prefix],
                 $this->prefixesPsr0[$first][$prefix],
-                (array) $paths
+                $paths
             );
             );
         }
         }
     }
     }
@@ -222,9 +219,9 @@ class ClassLoader
      * Registers a set of PSR-4 directories for a given namespace, either
      * Registers a set of PSR-4 directories for a given namespace, either
      * appending or prepending to the ones previously set for this namespace.
      * appending or prepending to the ones previously set for this namespace.
      *
      *
-     * @param string          $prefix  The prefix/namespace, with trailing '\\'
-     * @param string[]|string $paths   The PSR-4 base directories
-     * @param bool            $prepend Whether to prepend the directories
+     * @param string              $prefix  The prefix/namespace, with trailing '\\'
+     * @param list<string>|string $paths   The PSR-4 base directories
+     * @param bool                $prepend Whether to prepend the directories
      *
      *
      * @throws \InvalidArgumentException
      * @throws \InvalidArgumentException
      *
      *
@@ -232,17 +229,18 @@ class ClassLoader
      */
      */
     public function addPsr4($prefix, $paths, $prepend = false)
     public function addPsr4($prefix, $paths, $prepend = false)
     {
     {
+        $paths = (array) $paths;
         if (!$prefix) {
         if (!$prefix) {
             // Register directories for the root namespace.
             // Register directories for the root namespace.
             if ($prepend) {
             if ($prepend) {
                 $this->fallbackDirsPsr4 = array_merge(
                 $this->fallbackDirsPsr4 = array_merge(
-                    (array) $paths,
+                    $paths,
                     $this->fallbackDirsPsr4
                     $this->fallbackDirsPsr4
                 );
                 );
             } else {
             } else {
                 $this->fallbackDirsPsr4 = array_merge(
                 $this->fallbackDirsPsr4 = array_merge(
                     $this->fallbackDirsPsr4,
                     $this->fallbackDirsPsr4,
-                    (array) $paths
+                    $paths
                 );
                 );
             }
             }
         } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
         } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
@@ -252,18 +250,18 @@ class ClassLoader
                 throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
                 throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
             }
             }
             $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
             $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
-            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+            $this->prefixDirsPsr4[$prefix] = $paths;
         } elseif ($prepend) {
         } elseif ($prepend) {
             // Prepend directories for an already registered namespace.
             // Prepend directories for an already registered namespace.
             $this->prefixDirsPsr4[$prefix] = array_merge(
             $this->prefixDirsPsr4[$prefix] = array_merge(
-                (array) $paths,
+                $paths,
                 $this->prefixDirsPsr4[$prefix]
                 $this->prefixDirsPsr4[$prefix]
             );
             );
         } else {
         } else {
             // Append directories for an already registered namespace.
             // Append directories for an already registered namespace.
             $this->prefixDirsPsr4[$prefix] = array_merge(
             $this->prefixDirsPsr4[$prefix] = array_merge(
                 $this->prefixDirsPsr4[$prefix],
                 $this->prefixDirsPsr4[$prefix],
-                (array) $paths
+                $paths
             );
             );
         }
         }
     }
     }
@@ -272,8 +270,8 @@ class ClassLoader
      * Registers a set of PSR-0 directories for a given prefix,
      * Registers a set of PSR-0 directories for a given prefix,
      * replacing any others previously set for this prefix.
      * replacing any others previously set for this prefix.
      *
      *
-     * @param string          $prefix The prefix
-     * @param string[]|string $paths  The PSR-0 base directories
+     * @param string              $prefix The prefix
+     * @param list<string>|string $paths  The PSR-0 base directories
      *
      *
      * @return void
      * @return void
      */
      */
@@ -290,8 +288,8 @@ class ClassLoader
      * Registers a set of PSR-4 directories for a given namespace,
      * Registers a set of PSR-4 directories for a given namespace,
      * replacing any others previously set for this namespace.
      * replacing any others previously set for this namespace.
      *
      *
-     * @param string          $prefix The prefix/namespace, with trailing '\\'
-     * @param string[]|string $paths  The PSR-4 base directories
+     * @param string              $prefix The prefix/namespace, with trailing '\\'
+     * @param list<string>|string $paths  The PSR-4 base directories
      *
      *
      * @throws \InvalidArgumentException
      * @throws \InvalidArgumentException
      *
      *
@@ -425,7 +423,8 @@ class ClassLoader
     public function loadClass($class)
     public function loadClass($class)
     {
     {
         if ($file = $this->findFile($class)) {
         if ($file = $this->findFile($class)) {
-            includeFile($file);
+            $includeFile = self::$includeFile;
+            $includeFile($file);
 
 
             return true;
             return true;
         }
         }
@@ -476,9 +475,9 @@ class ClassLoader
     }
     }
 
 
     /**
     /**
-     * Returns the currently registered loaders indexed by their corresponding vendor directories.
+     * Returns the currently registered loaders keyed by their corresponding vendor directories.
      *
      *
-     * @return self[]
+     * @return array<string, self>
      */
      */
     public static function getRegisteredLoaders()
     public static function getRegisteredLoaders()
     {
     {
@@ -555,18 +554,26 @@ class ClassLoader
 
 
         return false;
         return false;
     }
     }
-}
 
 
-/**
- * Scope isolated include.
- *
- * Prevents access to $this/self from included files.
- *
- * @param  string $file
- * @return void
- * @private
- */
-function includeFile($file)
-{
-    include $file;
+    /**
+     * @return void
+     */
+    private static function initializeIncludeClosure()
+    {
+        if (self::$includeFile !== null) {
+            return;
+        }
+
+        /**
+         * Scope isolated include.
+         *
+         * Prevents access to $this/self from included files.
+         *
+         * @param  string $file
+         * @return void
+         */
+        self::$includeFile = \Closure::bind(static function($file) {
+            include $file;
+        }, null, null);
+    }
 }
 }

+ 12 - 5
vendor/composer/InstalledVersions.php

@@ -98,7 +98,7 @@ class InstalledVersions
     {
     {
         foreach (self::getInstalled() as $installed) {
         foreach (self::getInstalled() as $installed) {
             if (isset($installed['versions'][$packageName])) {
             if (isset($installed['versions'][$packageName])) {
-                return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
+                return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
             }
             }
         }
         }
 
 
@@ -119,7 +119,7 @@ class InstalledVersions
      */
      */
     public static function satisfies(VersionParser $parser, $packageName, $constraint)
     public static function satisfies(VersionParser $parser, $packageName, $constraint)
     {
     {
-        $constraint = $parser->parseConstraints($constraint);
+        $constraint = $parser->parseConstraints((string) $constraint);
         $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
         $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
 
 
         return $provided->matches($constraint);
         return $provided->matches($constraint);
@@ -328,7 +328,9 @@ class InstalledVersions
                 if (isset(self::$installedByVendor[$vendorDir])) {
                 if (isset(self::$installedByVendor[$vendorDir])) {
                     $installed[] = self::$installedByVendor[$vendorDir];
                     $installed[] = self::$installedByVendor[$vendorDir];
                 } elseif (is_file($vendorDir.'/composer/installed.php')) {
                 } elseif (is_file($vendorDir.'/composer/installed.php')) {
-                    $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
+                    /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
+                    $required = require $vendorDir.'/composer/installed.php';
+                    $installed[] = self::$installedByVendor[$vendorDir] = $required;
                     if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
                     if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
                         self::$installed = $installed[count($installed) - 1];
                         self::$installed = $installed[count($installed) - 1];
                     }
                     }
@@ -340,12 +342,17 @@ class InstalledVersions
             // only require the installed.php file if this file is loaded from its dumped location,
             // only require the installed.php file if this file is loaded from its dumped location,
             // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
             // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
             if (substr(__DIR__, -8, 1) !== 'C') {
             if (substr(__DIR__, -8, 1) !== 'C') {
-                self::$installed = require __DIR__ . '/installed.php';
+                /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
+                $required = require __DIR__ . '/installed.php';
+                self::$installed = $required;
             } else {
             } else {
                 self::$installed = array();
                 self::$installed = array();
             }
             }
         }
         }
-        $installed[] = self::$installed;
+
+        if (self::$installed !== array()) {
+            $installed[] = self::$installed;
+        }
 
 
         return $installed;
         return $installed;
     }
     }

+ 0 - 1
vendor/composer/autoload_files.php

@@ -10,7 +10,6 @@ return array(
     'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
     'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
     '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
     '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
     '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
     '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
-    'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
     '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
     '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
     '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php',
     '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php',
     '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
     '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',

+ 3 - 1
vendor/composer/autoload_psr4.php

@@ -9,7 +9,7 @@ return array(
     'think\\helper\\' => array($vendorDir . '/topthink/think-helper/src'),
     'think\\helper\\' => array($vendorDir . '/topthink/think-helper/src'),
     'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'),
     'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'),
     'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'),
     'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'),
-    'think\\' => array($vendorDir . '/karsonzhang/fastadmin-addons/src', $vendorDir . '/topthink/think-queue/src', $baseDir . '/thinkphp/library/think'),
+    'think\\' => array($vendorDir . '/karsonzhang/fastadmin-addons/src', $baseDir . '/thinkphp/library/think', $vendorDir . '/topthink/think-queue/src'),
     'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'),
     'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'),
     'Tx\\' => array($vendorDir . '/txthinking/mailer/src'),
     'Tx\\' => array($vendorDir . '/txthinking/mailer/src'),
     'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
     'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
@@ -32,12 +32,14 @@ return array(
     'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
     'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
     'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
     'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
     'PhpZip\\' => array($vendorDir . '/nelexa/zip/src'),
     'PhpZip\\' => array($vendorDir . '/nelexa/zip/src'),
+    'PhpOffice\\PhpWord\\' => array($vendorDir . '/phpoffice/phpword/src/PhpWord'),
     'PhpOffice\\PhpSpreadsheet\\' => array($vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet'),
     'PhpOffice\\PhpSpreadsheet\\' => array($vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet'),
     'Overtrue\\Socialite\\' => array($vendorDir . '/overtrue/socialite/src'),
     'Overtrue\\Socialite\\' => array($vendorDir . '/overtrue/socialite/src'),
     'Overtrue\\Pinyin\\' => array($vendorDir . '/overtrue/pinyin/src'),
     'Overtrue\\Pinyin\\' => array($vendorDir . '/overtrue/pinyin/src'),
     'MyCLabs\\Enum\\' => array($vendorDir . '/myclabs/php-enum/src'),
     'MyCLabs\\Enum\\' => array($vendorDir . '/myclabs/php-enum/src'),
     'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
     'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
     'Matrix\\' => array($vendorDir . '/markbaker/matrix/classes/src'),
     'Matrix\\' => array($vendorDir . '/markbaker/matrix/classes/src'),
+    'Laminas\\Escaper\\' => array($vendorDir . '/laminas/laminas-escaper/src'),
     'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
     'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
     'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
     'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
     'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
     'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),

+ 10 - 17
vendor/composer/autoload_real.php

@@ -33,25 +33,18 @@ class ComposerAutoloaderInit73f9e72fede2c36621e52f7b610bbb65
 
 
         $loader->register(true);
         $loader->register(true);
 
 
-        $includeFiles = \Composer\Autoload\ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65::$files;
-        foreach ($includeFiles as $fileIdentifier => $file) {
-            composerRequire73f9e72fede2c36621e52f7b610bbb65($fileIdentifier, $file);
+        $filesToLoad = \Composer\Autoload\ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65::$files;
+        $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
+            if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+                $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+
+                require $file;
+            }
+        }, null, null);
+        foreach ($filesToLoad as $fileIdentifier => $file) {
+            $requireFile($fileIdentifier, $file);
         }
         }
 
 
         return $loader;
         return $loader;
     }
     }
 }
 }
-
-/**
- * @param string $fileIdentifier
- * @param string $file
- * @return void
- */
-function composerRequire73f9e72fede2c36621e52f7b610bbb65($fileIdentifier, $file)
-{
-    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
-        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
-
-        require $file;
-    }
-}

+ 15 - 3
vendor/composer/autoload_static.php

@@ -11,7 +11,6 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
         'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
         'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
         '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
         '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
         '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
         '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
-        'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
         '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
         '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
         '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php',
         '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php',
         '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
         '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
@@ -64,6 +63,7 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
             'Psr\\Container\\' => 14,
             'Psr\\Container\\' => 14,
             'Psr\\Cache\\' => 10,
             'Psr\\Cache\\' => 10,
             'PhpZip\\' => 7,
             'PhpZip\\' => 7,
+            'PhpOffice\\PhpWord\\' => 18,
             'PhpOffice\\PhpSpreadsheet\\' => 25,
             'PhpOffice\\PhpSpreadsheet\\' => 25,
         ),
         ),
         'O' => 
         'O' => 
@@ -77,6 +77,10 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
             'Monolog\\' => 8,
             'Monolog\\' => 8,
             'Matrix\\' => 7,
             'Matrix\\' => 7,
         ),
         ),
+        'L' => 
+        array (
+            'Laminas\\Escaper\\' => 16,
+        ),
         'G' => 
         'G' => 
         array (
         array (
             'GuzzleHttp\\Psr7\\' => 16,
             'GuzzleHttp\\Psr7\\' => 16,
@@ -110,8 +114,8 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
         'think\\' => 
         'think\\' => 
         array (
         array (
             0 => __DIR__ . '/..' . '/karsonzhang/fastadmin-addons/src',
             0 => __DIR__ . '/..' . '/karsonzhang/fastadmin-addons/src',
-            1 => __DIR__ . '/..' . '/topthink/think-queue/src',
-            2 => __DIR__ . '/../..' . '/thinkphp/library/think',
+            1 => __DIR__ . '/../..' . '/thinkphp/library/think',
+            2 => __DIR__ . '/..' . '/topthink/think-queue/src',
         ),
         ),
         'ZipStream\\' => 
         'ZipStream\\' => 
         array (
         array (
@@ -202,6 +206,10 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
         array (
         array (
             0 => __DIR__ . '/..' . '/nelexa/zip/src',
             0 => __DIR__ . '/..' . '/nelexa/zip/src',
         ),
         ),
+        'PhpOffice\\PhpWord\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/phpoffice/phpword/src/PhpWord',
+        ),
         'PhpOffice\\PhpSpreadsheet\\' => 
         'PhpOffice\\PhpSpreadsheet\\' => 
         array (
         array (
             0 => __DIR__ . '/..' . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet',
             0 => __DIR__ . '/..' . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet',
@@ -226,6 +234,10 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
         array (
         array (
             0 => __DIR__ . '/..' . '/markbaker/matrix/classes/src',
             0 => __DIR__ . '/..' . '/markbaker/matrix/classes/src',
         ),
         ),
+        'Laminas\\Escaper\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/laminas/laminas-escaper/src',
+        ),
         'GuzzleHttp\\Psr7\\' => 
         'GuzzleHttp\\Psr7\\' => 
         array (
         array (
             0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',
             0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',

File diff suppressed because it is too large
+ 514 - 85
vendor/composer/installed.json


+ 73 - 55
vendor/composer/installed.php

@@ -1,9 +1,9 @@
 <?php return array(
 <?php return array(
     'root' => array(
     'root' => array(
         'name' => 'karsonzhang/fastadmin',
         'name' => 'karsonzhang/fastadmin',
-        'pretty_version' => '1.3.5.x-dev',
-        'version' => '1.3.5.9999999-dev',
-        'reference' => 'f8292a8813201872005173b7d2ec3ca556a25cfd',
+        'pretty_version' => 'dev-master',
+        'version' => 'dev-master',
+        'reference' => '3f4359a21a096f9acedc8f03efc9a66e3feeb506',
         'type' => 'project',
         'type' => 'project',
         'install_path' => __DIR__ . '/../../',
         'install_path' => __DIR__ . '/../../',
         'aliases' => array(),
         'aliases' => array(),
@@ -29,36 +29,36 @@
             'dev_requirement' => false,
             'dev_requirement' => false,
         ),
         ),
         'guzzlehttp/guzzle' => array(
         'guzzlehttp/guzzle' => array(
-            'pretty_version' => '7.5.0',
-            'version' => '7.5.0.0',
-            'reference' => 'b50a2a1251152e43f6a37f0fa053e730a67d25ba',
+            'pretty_version' => '7.7.0',
+            'version' => '7.7.0.0',
+            'reference' => 'fb7566caccf22d74d1ab270de3551f72a58399f5',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../guzzlehttp/guzzle',
             'install_path' => __DIR__ . '/../guzzlehttp/guzzle',
             'aliases' => array(),
             'aliases' => array(),
             'dev_requirement' => false,
             'dev_requirement' => false,
         ),
         ),
         'guzzlehttp/promises' => array(
         'guzzlehttp/promises' => array(
-            'pretty_version' => '1.5.2',
-            'version' => '1.5.2.0',
-            'reference' => 'b94b2807d85443f9719887892882d0329d1e2598',
+            'pretty_version' => '2.0.0',
+            'version' => '2.0.0.0',
+            'reference' => '3a494dc7dc1d7d12e511890177ae2d0e6c107da6',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../guzzlehttp/promises',
             'install_path' => __DIR__ . '/../guzzlehttp/promises',
             'aliases' => array(),
             'aliases' => array(),
             'dev_requirement' => false,
             'dev_requirement' => false,
         ),
         ),
         'guzzlehttp/psr7' => array(
         'guzzlehttp/psr7' => array(
-            'pretty_version' => '2.4.3',
-            'version' => '2.4.3.0',
-            'reference' => '67c26b443f348a51926030c83481b85718457d3d',
+            'pretty_version' => '2.5.0',
+            'version' => '2.5.0.0',
+            'reference' => 'b635f279edd83fc275f822a1188157ffea568ff6',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../guzzlehttp/psr7',
             'install_path' => __DIR__ . '/../guzzlehttp/psr7',
             'aliases' => array(),
             'aliases' => array(),
             'dev_requirement' => false,
             'dev_requirement' => false,
         ),
         ),
         'karsonzhang/fastadmin' => array(
         'karsonzhang/fastadmin' => array(
-            'pretty_version' => '1.3.5.x-dev',
-            'version' => '1.3.5.9999999-dev',
-            'reference' => 'f8292a8813201872005173b7d2ec3ca556a25cfd',
+            'pretty_version' => 'dev-master',
+            'version' => 'dev-master',
+            'reference' => '3f4359a21a096f9acedc8f03efc9a66e3feeb506',
             'type' => 'project',
             'type' => 'project',
             'install_path' => __DIR__ . '/../../',
             'install_path' => __DIR__ . '/../../',
             'aliases' => array(),
             'aliases' => array(),
@@ -73,10 +73,19 @@
             'aliases' => array(),
             'aliases' => array(),
             'dev_requirement' => false,
             'dev_requirement' => false,
         ),
         ),
+        'laminas/laminas-escaper' => array(
+            'pretty_version' => '2.9.0',
+            'version' => '2.9.0.0',
+            'reference' => '891ad70986729e20ed2e86355fcf93c9dc238a5f',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../laminas/laminas-escaper',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
         'maennchen/zipstream-php' => array(
         'maennchen/zipstream-php' => array(
-            'pretty_version' => '2.2.6',
-            'version' => '2.2.6.0',
-            'reference' => '30ad6f93cf3efe4192bc7a4c9cad11ff8f4f237f',
+            'pretty_version' => '2.1.0',
+            'version' => '2.1.0.0',
+            'reference' => 'c4c5803cc1f93df3d2448478ef79394a5981cc58',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../maennchen/zipstream-php',
             'install_path' => __DIR__ . '/../maennchen/zipstream-php',
             'aliases' => array(),
             'aliases' => array(),
@@ -101,9 +110,9 @@
             'dev_requirement' => false,
             'dev_requirement' => false,
         ),
         ),
         'monolog/monolog' => array(
         'monolog/monolog' => array(
-            'pretty_version' => '2.8.0',
-            'version' => '2.8.0.0',
-            'reference' => '720488632c590286b88b80e62aa3d3d551ad4a50',
+            'pretty_version' => '2.9.1',
+            'version' => '2.9.1.0',
+            'reference' => 'f259e2b15fb95494c83f52d3caad003bbf5ffaa1',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../monolog/monolog',
             'install_path' => __DIR__ . '/../monolog/monolog',
             'aliases' => array(),
             'aliases' => array(),
@@ -146,9 +155,9 @@
             'dev_requirement' => false,
             'dev_requirement' => false,
         ),
         ),
         'overtrue/wechat' => array(
         'overtrue/wechat' => array(
-            'pretty_version' => '4.7.0',
-            'version' => '4.7.0.0',
-            'reference' => '4accb0627803ffb6e45d2988898a0293d2a48e68',
+            'pretty_version' => '4.9.0',
+            'version' => '4.9.0.0',
+            'reference' => '92791f5d957269c633b9aa175f842f6006f945b1',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../overtrue/wechat',
             'install_path' => __DIR__ . '/../overtrue/wechat',
             'aliases' => array(),
             'aliases' => array(),
@@ -164,14 +173,23 @@
             'dev_requirement' => false,
             'dev_requirement' => false,
         ),
         ),
         'phpoffice/phpspreadsheet' => array(
         'phpoffice/phpspreadsheet' => array(
-            'pretty_version' => '1.19.0',
-            'version' => '1.19.0.0',
-            'reference' => 'a9ab55bfae02eecffb3df669a2e19ba0e2f04bbf',
+            'pretty_version' => '1.25.2',
+            'version' => '1.25.2.0',
+            'reference' => 'a317a09e7def49852400a4b3eca4a4b0790ceeb5',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../phpoffice/phpspreadsheet',
             'install_path' => __DIR__ . '/../phpoffice/phpspreadsheet',
             'aliases' => array(),
             'aliases' => array(),
             'dev_requirement' => false,
             'dev_requirement' => false,
         ),
         ),
+        'phpoffice/phpword' => array(
+            'pretty_version' => '1.1.0',
+            'version' => '1.1.0.0',
+            'reference' => '90a55955e6a772bb4cd9b1ef6a7e88c8976c2561',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../phpoffice/phpword',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
         'pimple/pimple' => array(
         'pimple/pimple' => array(
             'pretty_version' => 'v3.5.0',
             'pretty_version' => 'v3.5.0',
             'version' => '3.5.0.0',
             'version' => '3.5.0.0',
@@ -197,9 +215,9 @@
             ),
             ),
         ),
         ),
         'psr/container' => array(
         'psr/container' => array(
-            'pretty_version' => '2.0.2',
-            'version' => '2.0.2.0',
-            'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963',
+            'pretty_version' => '2.0.1',
+            'version' => '2.0.1.0',
+            'reference' => '2ae37329ee82f91efadc282cc2d527fd6065a5ef',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../psr/container',
             'install_path' => __DIR__ . '/../psr/container',
             'aliases' => array(),
             'aliases' => array(),
@@ -221,9 +239,9 @@
             ),
             ),
         ),
         ),
         'psr/http-client' => array(
         'psr/http-client' => array(
-            'pretty_version' => '1.0.1',
-            'version' => '1.0.1.0',
-            'reference' => '2dfb5f6c5eff0e91e20e913f8c5452ed95b86621',
+            'pretty_version' => '1.0.2',
+            'version' => '1.0.2.0',
+            'reference' => '0955afe48220520692d2d09f7ab7e0f93ffd6a31',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../psr/http-client',
             'install_path' => __DIR__ . '/../psr/http-client',
             'aliases' => array(),
             'aliases' => array(),
@@ -236,9 +254,9 @@
             ),
             ),
         ),
         ),
         'psr/http-factory' => array(
         'psr/http-factory' => array(
-            'pretty_version' => '1.0.1',
-            'version' => '1.0.1.0',
-            'reference' => '12ac7fcd07e5b077433f5f2bee95b3a771bf61be',
+            'pretty_version' => '1.0.2',
+            'version' => '1.0.2.0',
+            'reference' => 'e616d01114759c4c489f93b099585439f795fe35',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../psr/http-factory',
             'install_path' => __DIR__ . '/../psr/http-factory',
             'aliases' => array(),
             'aliases' => array(),
@@ -251,9 +269,9 @@
             ),
             ),
         ),
         ),
         'psr/http-message' => array(
         'psr/http-message' => array(
-            'pretty_version' => '1.0.1',
-            'version' => '1.0.1.0',
-            'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',
+            'pretty_version' => '1.1',
+            'version' => '1.1.0.0',
+            'reference' => 'cb6ce4845ce34a8ad9e68117c10ee90a29919eba',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../psr/http-message',
             'install_path' => __DIR__ . '/../psr/http-message',
             'aliases' => array(),
             'aliases' => array(),
@@ -305,9 +323,9 @@
             'dev_requirement' => false,
             'dev_requirement' => false,
         ),
         ),
         'symfony/cache' => array(
         'symfony/cache' => array(
-            'pretty_version' => 'v5.4.15',
-            'version' => '5.4.15.0',
-            'reference' => '60e87188abbacd29ccde44d69c5392a33e888e98',
+            'pretty_version' => 'v5.4.25',
+            'version' => '5.4.25.0',
+            'reference' => 'e2013521c0f07473ae69a01fce0af78fc3ec0f23',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/cache',
             'install_path' => __DIR__ . '/../symfony/cache',
             'aliases' => array(),
             'aliases' => array(),
@@ -338,9 +356,9 @@
             'dev_requirement' => false,
             'dev_requirement' => false,
         ),
         ),
         'symfony/event-dispatcher' => array(
         'symfony/event-dispatcher' => array(
-            'pretty_version' => 'v5.4.9',
-            'version' => '5.4.9.0',
-            'reference' => '8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc',
+            'pretty_version' => 'v5.4.26',
+            'version' => '5.4.26.0',
+            'reference' => '5dcc00e03413f05c1e7900090927bb7247cb0aac',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/event-dispatcher',
             'install_path' => __DIR__ . '/../symfony/event-dispatcher',
             'aliases' => array(),
             'aliases' => array(),
@@ -362,18 +380,18 @@
             ),
             ),
         ),
         ),
         'symfony/finder' => array(
         'symfony/finder' => array(
-            'pretty_version' => 'v5.4.11',
-            'version' => '5.4.11.0',
-            'reference' => '7872a66f57caffa2916a584db1aa7f12adc76f8c',
+            'pretty_version' => 'v5.4.27',
+            'version' => '5.4.27.0',
+            'reference' => 'ff4bce3c33451e7ec778070e45bd23f74214cd5d',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/finder',
             'install_path' => __DIR__ . '/../symfony/finder',
             'aliases' => array(),
             'aliases' => array(),
             'dev_requirement' => false,
             'dev_requirement' => false,
         ),
         ),
         'symfony/http-foundation' => array(
         'symfony/http-foundation' => array(
-            'pretty_version' => 'v5.4.16',
-            'version' => '5.4.16.0',
-            'reference' => '5032c5849aef24741e1970cb03511b0dd131d838',
+            'pretty_version' => 'v5.4.26',
+            'version' => '5.4.26.0',
+            'reference' => 'e7793151e99dc2ac1352ff3735d100fb3b3bfc08',
             'type' => 'library',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/http-foundation',
             'install_path' => __DIR__ . '/../symfony/http-foundation',
             'aliases' => array(),
             'aliases' => array(),
@@ -407,9 +425,9 @@
             'dev_requirement' => false,
             'dev_requirement' => false,
         ),
         ),
         'symfony/psr-http-message-bridge' => array(
         'symfony/psr-http-message-bridge' => array(
-            'pretty_version' => 'v2.1.4',
-            'version' => '2.1.4.0',
-            'reference' => 'a125b93ef378c492e274f217874906fb9babdebb',
+            'pretty_version' => 'v2.3.1',
+            'version' => '2.3.1.0',
+            'reference' => '581ca6067eb62640de5ff08ee1ba6850a0ee472e',
             'type' => 'symfony-bridge',
             'type' => 'symfony-bridge',
             'install_path' => __DIR__ . '/../symfony/psr-http-message-bridge',
             'install_path' => __DIR__ . '/../symfony/psr-http-message-bridge',
             'aliases' => array(),
             'aliases' => array(),
@@ -436,7 +454,7 @@
         'topthink/framework' => array(
         'topthink/framework' => array(
             'pretty_version' => 'dev-master',
             'pretty_version' => 'dev-master',
             'version' => 'dev-master',
             'version' => 'dev-master',
-            'reference' => 'a5f1cedf07bb3489f7e3b5254496afbf600d4e65',
+            'reference' => '096811899433eb0eb0988f1fe1db56ebb521bf34',
             'type' => 'think-framework',
             'type' => 'think-framework',
             'install_path' => __DIR__ . '/../../thinkphp',
             'install_path' => __DIR__ . '/../../thinkphp',
             'aliases' => array(
             'aliases' => array(

+ 2 - 2
vendor/composer/platform_check.php

@@ -4,8 +4,8 @@
 
 
 $issues = array();
 $issues = array();
 
 
-if (!(PHP_VERSION_ID >= 70400)) {
-    $issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
+if (!(PHP_VERSION_ID >= 70300)) {
+    $issues[] = 'Your Composer dependencies require a PHP version ">= 7.3.0". You are running ' . PHP_VERSION . '.';
 }
 }
 
 
 if ($issues) {
 if ($issues) {

+ 91 - 1
vendor/guzzlehttp/guzzle/CHANGELOG.md

@@ -2,6 +2,52 @@
 
 
 Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version.
 Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version.
 
 
+
+## 7.7.0 - 2023-05-21
+
+### Added
+
+- Support `guzzlehttp/promises` v2
+
+
+## 7.6.1 - 2023-05-15
+
+### Fixed
+
+- Fix `SetCookie::fromString` MaxAge deprecation warning and skip invalid MaxAge values
+
+
+## 7.6.0 - 2023-05-14
+
+### Added
+
+- Support for setting the minimum TLS version in a unified way
+- Apply on request the version set in options parameters
+
+
+## 7.5.2 - 2023-05-14
+
+### Fixed
+
+- Fixed set cookie constructor validation
+- Fixed handling of files with `'0'` body
+
+### Changed
+
+- Corrected docs and default connect timeout value to 300 seconds
+
+
+## 7.5.1 - 2023-04-17
+
+### Fixed
+
+- Fixed `NO_PROXY` settings so that setting the `proxy` option to `no` overrides the env variable
+
+### Changed
+
+- Adjusted `guzzlehttp/psr7` version constraint to `^1.9.1 || ^2.4.5`
+
+
 ## 7.5.0 - 2022-08-28
 ## 7.5.0 - 2022-08-28
 
 
 ### Added
 ### Added
@@ -9,20 +55,30 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
 - Support PHP 8.2
 - Support PHP 8.2
 - Add request to delay closure params
 - Add request to delay closure params
 
 
+
 ## 7.4.5 - 2022-06-20
 ## 7.4.5 - 2022-06-20
 
 
+### Fixed
+
 * Fix change in port should be considered a change in origin
 * Fix change in port should be considered a change in origin
 * Fix `CURLOPT_HTTPAUTH` option not cleared on change of origin
 * Fix `CURLOPT_HTTPAUTH` option not cleared on change of origin
 
 
+
 ## 7.4.4 - 2022-06-09
 ## 7.4.4 - 2022-06-09
 
 
+### Fixed
+
 * Fix failure to strip Authorization header on HTTP downgrade
 * Fix failure to strip Authorization header on HTTP downgrade
 * Fix failure to strip the Cookie header on change in host or HTTP downgrade
 * Fix failure to strip the Cookie header on change in host or HTTP downgrade
 
 
+
 ## 7.4.3 - 2022-05-25
 ## 7.4.3 - 2022-05-25
 
 
+### Fixed
+
 * Fix cross-domain cookie leakage
 * Fix cross-domain cookie leakage
 
 
+
 ## 7.4.2 - 2022-03-20
 ## 7.4.2 - 2022-03-20
 
 
 ### Fixed
 ### Fixed
@@ -31,6 +87,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
 - Reject non-HTTP schemes in StreamHandler
 - Reject non-HTTP schemes in StreamHandler
 - Set a default ssl.peer_name context in StreamHandler to allow `force_ip_resolve`
 - Set a default ssl.peer_name context in StreamHandler to allow `force_ip_resolve`
 
 
+
 ## 7.4.1 - 2021-12-06
 ## 7.4.1 - 2021-12-06
 
 
 ### Changed
 ### Changed
@@ -42,6 +99,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
 
 
 - Only close curl handle if it's done [#2950](https://github.com/guzzle/guzzle/pull/2950)
 - Only close curl handle if it's done [#2950](https://github.com/guzzle/guzzle/pull/2950)
 
 
+
 ## 7.4.0 - 2021-10-18
 ## 7.4.0 - 2021-10-18
 
 
 ### Added
 ### Added
@@ -59,6 +117,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
 
 
 - 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)
 - 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)
 
 
+
 ## 7.3.0 - 2021-03-23
 ## 7.3.0 - 2021-03-23
 
 
 ### Added
 ### Added
@@ -71,6 +130,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
 
 
 - Handle exceptions on invalid header consistently between PHP versions and handlers [#2872](https://github.com/guzzle/guzzle/pull/2872)
 - Handle exceptions on invalid header consistently between PHP versions and handlers [#2872](https://github.com/guzzle/guzzle/pull/2872)
 
 
+
 ## 7.2.0 - 2020-10-10
 ## 7.2.0 - 2020-10-10
 
 
 ### Added
 ### Added
@@ -93,6 +153,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
 
 
 - Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [#2786](https://github.com/guzzle/guzzle/pull/2786)
 - Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [#2786](https://github.com/guzzle/guzzle/pull/2786)
 
 
+
 ## 7.1.1 - 2020-09-30
 ## 7.1.1 - 2020-09-30
 
 
 ### Fixed
 ### Fixed
@@ -104,6 +165,7 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
 - We dont connect curl `sink` on HEAD requests.
 - We dont connect curl `sink` on HEAD requests.
 - Removed some PHP 5 workarounds
 - Removed some PHP 5 workarounds
 
 
+
 ## 7.1.0 - 2020-09-22
 ## 7.1.0 - 2020-09-22
 
 
 ### Added
 ### Added
@@ -126,14 +188,17 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version
 - `Utils::defaultCaBundle()`
 - `Utils::defaultCaBundle()`
 - `CurlFactory::LOW_CURL_VERSION_NUMBER`
 - `CurlFactory::LOW_CURL_VERSION_NUMBER`
 
 
+
 ## 7.0.1 - 2020-06-27
 ## 7.0.1 - 2020-06-27
 
 
 * Fix multiply defined functions fatal error [#2699](https://github.com/guzzle/guzzle/pull/2699)
 * Fix multiply defined functions fatal error [#2699](https://github.com/guzzle/guzzle/pull/2699)
 
 
+
 ## 7.0.0 - 2020-06-27
 ## 7.0.0 - 2020-06-27
 
 
 No changes since 7.0.0-rc1.
 No changes since 7.0.0-rc1.
 
 
+
 ## 7.0.0-rc1 - 2020-06-15
 ## 7.0.0-rc1 - 2020-06-15
 
 
 ### Changed
 ### Changed
@@ -141,6 +206,7 @@ No changes since 7.0.0-rc1.
 * Use error level for logging errors in Middleware [#2629](https://github.com/guzzle/guzzle/pull/2629)
 * Use error level for logging errors in Middleware [#2629](https://github.com/guzzle/guzzle/pull/2629)
 * Disabled IDN support by default and require ext-intl to use it [#2675](https://github.com/guzzle/guzzle/pull/2675)
 * Disabled IDN support by default and require ext-intl to use it [#2675](https://github.com/guzzle/guzzle/pull/2675)
 
 
+
 ## 7.0.0-beta2 - 2020-05-25
 ## 7.0.0-beta2 - 2020-05-25
 
 
 ### Added
 ### Added
@@ -166,6 +232,7 @@ No changes since 7.0.0-rc1.
 
 
 * Pool option `pool_size` [#2528](https://github.com/guzzle/guzzle/pull/2528)
 * Pool option `pool_size` [#2528](https://github.com/guzzle/guzzle/pull/2528)
 
 
+
 ## 7.0.0-beta1 - 2019-12-30
 ## 7.0.0-beta1 - 2019-12-30
 
 
 The diff might look very big but 95% of Guzzle users will be able to upgrade without modification.
 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
 * `uri_template()` and `UriTemplate` [#2440](https://github.com/guzzle/guzzle/pull/2440)
 * `uri_template()` and `UriTemplate` [#2440](https://github.com/guzzle/guzzle/pull/2440)
 * Request options `save_to` and `exceptions` [#2464](https://github.com/guzzle/guzzle/pull/2464)
 * Request options `save_to` and `exceptions` [#2464](https://github.com/guzzle/guzzle/pull/2464)
 
 
+
 ## 6.5.2 - 2019-12-23
 ## 6.5.2 - 2019-12-23
 
 
 * idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489)
 * idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489)
 
 
+
 ## 6.5.1 - 2019-12-21
 ## 6.5.1 - 2019-12-21
 
 
 * Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454)
 * Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454)
 * IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424)
 * IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424)
 
 
+
 ## 6.5.0 - 2019-12-07
 ## 6.5.0 - 2019-12-07
 
 
 * Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143)
 * 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
 * Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348)
 * Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348)
 * Deprecated `ClientInterface::VERSION`
 * Deprecated `ClientInterface::VERSION`
 
 
+
 ## 6.4.1 - 2019-10-23
 ## 6.4.1 - 2019-10-23
 
 
 * No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that
 * No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that
 * Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar`
 * Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar`
 
 
+
 ## 6.4.0 - 2019-10-23
 ## 6.4.0 - 2019-10-23
 
 
 * Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108)
 * 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
 * Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335)
 * Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335)
 * Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362)
 * Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362)
 
 
+
 ## 6.3.3 - 2018-04-22
 ## 6.3.3 - 2018-04-22
 
 
 * Fix: Default headers when decode_content is specified
 * 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
 * Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684)
 * Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684)
 * Improvement:  	Use `\GuzzleHttp\Promise\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827)
 * Improvement:  	Use `\GuzzleHttp\Promise\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827)
 
 
-
 + Minor code cleanups, documentation fixes and clarifications.
 + Minor code cleanups, documentation fixes and clarifications.
 
 
+
 ## 6.2.3 - 2017-02-28
 ## 6.2.3 - 2017-02-28
 
 
 * Fix deprecations with guzzle/psr7 version 1.4
 * Fix deprecations with guzzle/psr7 version 1.4
 
 
+
 ## 6.2.2 - 2016-10-08
 ## 6.2.2 - 2016-10-08
 
 
 * Allow to pass nullable Response to delay callable
 * 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
 * Fix drain case where content-length is the literal string zero
 * Fix drain case where content-length is the literal string zero
 * Obfuscate in-URL credentials in exceptions
 * Obfuscate in-URL credentials in exceptions
 
 
+
 ## 6.2.1 - 2016-07-18
 ## 6.2.1 - 2016-07-18
 
 
 * Address HTTP_PROXY security vulnerability, CVE-2016-5385:
 * 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
   a server does not honor `Connection: close`.
   a server does not honor `Connection: close`.
 * Ignore URI fragment when sending requests.
 * Ignore URI fragment when sending requests.
 
 
+
 ## 6.2.0 - 2016-03-21
 ## 6.2.0 - 2016-03-21
 
 
 * Feature: added `GuzzleHttp\json_encode` and `GuzzleHttp\json_decode`.
 * 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
 * Bug fix: provide an empty string to `http_build_query` for HHVM workaround.
 * Bug fix: provide an empty string to `http_build_query` for HHVM workaround.
   https://github.com/guzzle/guzzle/pull/1367
   https://github.com/guzzle/guzzle/pull/1367
 
 
+
 ## 6.1.1 - 2015-11-22
 ## 6.1.1 - 2015-11-22
 
 
 * Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler
 * 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
 * Bug fix: fixed regression where MockHandler was not using `sink`.
 * Bug fix: fixed regression where MockHandler was not using `sink`.
   https://github.com/guzzle/guzzle/pull/1292
   https://github.com/guzzle/guzzle/pull/1292
 
 
+
 ## 6.1.0 - 2015-09-08
 ## 6.1.0 - 2015-09-08
 
 
 * Feature: Added the `on_stats` request option to provide access to transfer
 * 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
 * Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set.
 * Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set.
   https://github.com/guzzle/guzzle/pull/1189
   https://github.com/guzzle/guzzle/pull/1189
 
 
+
 ## 6.0.2 - 2015-07-04
 ## 6.0.2 - 2015-07-04
 
 
 * Fixed a memory leak in the curl handlers in which references to callbacks
 * 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
 * Functions are now conditionally required using an additional level of
 * Functions are now conditionally required using an additional level of
   indirection to help with global Composer installations.
   indirection to help with global Composer installations.
 
 
+
 ## 6.0.1 - 2015-05-27
 ## 6.0.1 - 2015-05-27
 
 
 * Fixed a bug with serializing the `query` request option where the `&`
 * 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
   use `form_params` or `multipart` instead.
   use `form_params` or `multipart` instead.
 * Various doc fixes.
 * Various doc fixes.
 
 
+
 ## 6.0.0 - 2015-05-26
 ## 6.0.0 - 2015-05-26
 
 
 * See the UPGRADING.md document for more information.
 * 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
 * `$maxHandles` has been removed from CurlMultiHandler.
 * `$maxHandles` has been removed from CurlMultiHandler.
 * `MultipartPostBody` is now part of the `guzzlehttp/psr7` package.
 * `MultipartPostBody` is now part of the `guzzlehttp/psr7` package.
 
 
+
 ## 5.3.0 - 2015-05-19
 ## 5.3.0 - 2015-05-19
 
 
 * Mock now supports `save_to`
 * Mock now supports `save_to`
@@ -426,6 +508,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
 * Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated.
 * Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated.
 * URL scheme is now always lowercased.
 * URL scheme is now always lowercased.
 
 
+
 ## 6.0.0-beta.1
 ## 6.0.0-beta.1
 
 
 * Requires PHP >= 5.5
 * Requires PHP >= 5.5
@@ -478,6 +561,7 @@ Please see [the upgrade document](UPGRADING.md) that describes all BC breaking c
 * `GuzzleHttp\QueryParser` has been replaced with the
 * `GuzzleHttp\QueryParser` has been replaced with the
   `GuzzleHttp\Psr7\parse_query`.
   `GuzzleHttp\Psr7\parse_query`.
 
 
+
 ## 5.2.0 - 2015-01-27
 ## 5.2.0 - 2015-01-27
 
 
 * Added `AppliesHeadersInterface` to make applying headers to a request based
 * 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
   RingBridge.
   RingBridge.
 * Added a guard in the Pool class to not use recursion for request retries.
 * Added a guard in the Pool class to not use recursion for request retries.
 
 
+
 ## 5.1.0 - 2014-12-19
 ## 5.1.0 - 2014-12-19
 
 
 * Pool class no longer uses recursion when a request is intercepted.
 * 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
 * Exceptions thrown in the `end` event are now correctly wrapped with Guzzle
 * Exceptions thrown in the `end` event are now correctly wrapped with Guzzle
   specific exceptions if necessary.
   specific exceptions if necessary.
 
 
+
 ## 5.0.3 - 2014-11-03
 ## 5.0.3 - 2014-11-03
 
 
 This change updates query strings so that they are treated as un-encoded values
 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
 subsequently made, forcing the query-string to be converted into a Query
 subsequently made, forcing the query-string to be converted into a Query
 object).
 object).
 
 
+
 ## 5.0.2 - 2014-10-30
 ## 5.0.2 - 2014-10-30
 
 
 * Added a trailing `\r\n` to multipart/form-data payloads. See
 * Added a trailing `\r\n` to multipart/form-data payloads. See
@@ -543,6 +630,7 @@ object).
     string on a URL: Now allowing many more characters to be present in the
     string on a URL: Now allowing many more characters to be present in the
     query string without being percent encoded. See https://tools.ietf.org/html/rfc3986#appendix-A
     query string without being percent encoded. See https://tools.ietf.org/html/rfc3986#appendix-A
 
 
+
 ## 5.0.1 - 2014-10-16
 ## 5.0.1 - 2014-10-16
 
 
 Bugfix release.
 Bugfix release.
@@ -554,6 +642,7 @@ Bugfix release.
 * Fixed an issue where transfer statistics were not being populated in the
 * Fixed an issue where transfer statistics were not being populated in the
   RingBridge. https://github.com/guzzle/guzzle/issues/866
   RingBridge. https://github.com/guzzle/guzzle/issues/866
 
 
+
 ## 5.0.0 - 2014-10-12
 ## 5.0.0 - 2014-10-12
 
 
 Adding support for non-blocking responses and some minor API cleanup.
 Adding support for non-blocking responses and some minor API cleanup.
@@ -635,6 +724,7 @@ interfaces.
       argument. They now accept an associative array of options, including the
       argument. They now accept an associative array of options, including the
       "size" key and "metadata" key which can be used to provide custom metadata.
       "size" key and "metadata" key which can be used to provide custom metadata.
 
 
+
 ## 4.2.2 - 2014-09-08
 ## 4.2.2 - 2014-09-08
 
 
 * Fixed a memory leak in the CurlAdapter when reusing cURL handles.
 * Fixed a memory leak in the CurlAdapter when reusing cURL handles.

+ 7 - 7
vendor/guzzlehttp/guzzle/README.md

@@ -60,13 +60,13 @@ composer require guzzlehttp/guzzle
 
 
 ## Version Guidance
 ## Version Guidance
 
 
-| Version | Status         | Packagist           | Namespace    | Repo                | Docs                | PSR-7 | PHP Version  |
-|---------|----------------|---------------------|--------------|---------------------|---------------------|-------|--------------|
-| 3.x     | EOL            | `guzzle/guzzle`     | `Guzzle`     | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No    | >=5.3.3,<7.0 |
-| 4.x     | EOL            | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A                 | No    | >=5.4,<7.0   |
-| 5.x     | EOL            | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No    | >=5.4,<7.4   |
-| 6.x     | Security fixes | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes   | >=5.5,<8.0   |
-| 7.x     | Latest         | `guzzlehttp/guzzle` | `GuzzleHttp` | [v7][guzzle-7-repo] | [v7][guzzle-7-docs] | Yes   | >=7.2.5,<8.2 |
+| Version | Status              | Packagist           | Namespace    | Repo                | Docs                | PSR-7 | PHP Version  |
+|---------|---------------------|---------------------|--------------|---------------------|---------------------|-------|--------------|
+| 3.x     | EOL                 | `guzzle/guzzle`     | `Guzzle`     | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No    | >=5.3.3,<7.0 |
+| 4.x     | EOL                 | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A                 | No    | >=5.4,<7.0   |
+| 5.x     | EOL                 | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No    | >=5.4,<7.4   |
+| 6.x     | Security fixes only | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes   | >=5.5,<8.0   |
+| 7.x     | Latest              | `guzzlehttp/guzzle` | `GuzzleHttp` | [v7][guzzle-7-repo] | [v7][guzzle-7-docs] | Yes   | >=7.2.5,<8.3 |
 
 
 [guzzle-3-repo]: https://github.com/guzzle/guzzle3
 [guzzle-3-repo]: https://github.com/guzzle/guzzle3
 [guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x
 [guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x

+ 4 - 6
vendor/guzzlehttp/guzzle/composer.json

@@ -53,8 +53,8 @@
     "require": {
     "require": {
         "php": "^7.2.5 || ^8.0",
         "php": "^7.2.5 || ^8.0",
         "ext-json": "*",
         "ext-json": "*",
-        "guzzlehttp/promises": "^1.5",
-        "guzzlehttp/psr7": "^1.9 || ^2.4",
+        "guzzlehttp/promises": "^1.5.3 || ^2.0",
+        "guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
         "psr/http-client": "^1.0",
         "psr/http-client": "^1.0",
         "symfony/deprecation-contracts": "^2.2 || ^3.0"
         "symfony/deprecation-contracts": "^2.2 || ^3.0"
     },
     },
@@ -64,7 +64,8 @@
     "require-dev": {
     "require-dev": {
         "ext-curl": "*",
         "ext-curl": "*",
         "bamarni/composer-bin-plugin": "^1.8.1",
         "bamarni/composer-bin-plugin": "^1.8.1",
-        "php-http/client-integration-tests": "^3.0",
+        "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
+        "php-http/message-factory": "^1.1",
         "phpunit/phpunit": "^8.5.29 || ^9.5.23",
         "phpunit/phpunit": "^8.5.29 || ^9.5.23",
         "psr/log": "^1.1 || ^2.0 || ^3.0"
         "psr/log": "^1.1 || ^2.0 || ^3.0"
     },
     },
@@ -84,9 +85,6 @@
         "bamarni-bin": {
         "bamarni-bin": {
             "bin-links": true,
             "bin-links": true,
             "forward-command": false
             "forward-command": false
-        },
-        "branch-alias": {
-            "dev-master": "7.5-dev"
         }
         }
     },
     },
     "autoload": {
     "autoload": {

+ 22 - 16
vendor/guzzlehttp/guzzle/src/Client.php

@@ -120,13 +120,14 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
     public function send(RequestInterface $request, array $options = []): ResponseInterface
     public function send(RequestInterface $request, array $options = []): ResponseInterface
     {
     {
         $options[RequestOptions::SYNCHRONOUS] = true;
         $options[RequestOptions::SYNCHRONOUS] = true;
+
         return $this->sendAsync($request, $options)->wait();
         return $this->sendAsync($request, $options)->wait();
     }
     }
 
 
     /**
     /**
      * The HttpClient PSR (PSR-18) specify this method.
      * The HttpClient PSR (PSR-18) specify this method.
      *
      *
-     * @inheritDoc
+     * {@inheritDoc}
      */
      */
     public function sendRequest(RequestInterface $request): ResponseInterface
     public function sendRequest(RequestInterface $request): ResponseInterface
     {
     {
@@ -184,6 +185,7 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
     public function request(string $method, $uri = '', array $options = []): ResponseInterface
     public function request(string $method, $uri = '', array $options = []): ResponseInterface
     {
     {
         $options[RequestOptions::SYNCHRONOUS] = true;
         $options[RequestOptions::SYNCHRONOUS] = true;
+
         return $this->requestAsync($method, $uri, $options)->wait();
         return $this->requestAsync($method, $uri, $options)->wait();
     }
     }
 
 
@@ -228,11 +230,11 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
     {
     {
         $defaults = [
         $defaults = [
             'allow_redirects' => RedirectMiddleware::$defaultSettings,
             'allow_redirects' => RedirectMiddleware::$defaultSettings,
-            'http_errors'     => true,
-            'decode_content'  => true,
-            'verify'          => true,
-            'cookies'         => false,
-            'idn_conversion'  => false,
+            'http_errors' => true,
+            'decode_content' => true,
+            'verify' => true,
+            'cookies' => false,
+            'idn_conversion' => false,
         ];
         ];
 
 
         // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set.
         // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set.
@@ -354,10 +356,10 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
         if (isset($options['form_params'])) {
         if (isset($options['form_params'])) {
             if (isset($options['multipart'])) {
             if (isset($options['multipart'])) {
                 throw new InvalidArgumentException('You cannot use '
                 throw new InvalidArgumentException('You cannot use '
-                    . 'form_params and multipart at the same time. Use the '
-                    . 'form_params option if you want to send application/'
-                    . 'x-www-form-urlencoded requests, and the multipart '
-                    . 'option to send multipart/form-data requests.');
+                    .'form_params and multipart at the same time. Use the '
+                    .'form_params option if you want to send application/'
+                    .'x-www-form-urlencoded requests, and the multipart '
+                    .'option to send multipart/form-data requests.');
             }
             }
             $options['body'] = \http_build_query($options['form_params'], '', '&');
             $options['body'] = \http_build_query($options['form_params'], '', '&');
             unset($options['form_params']);
             unset($options['form_params']);
@@ -403,7 +405,7 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
                     // Ensure that we don't have the header in different case and set the new value.
                     // Ensure that we don't have the header in different case and set the new value.
                     $modify['set_headers'] = Psr7\Utils::caselessRemove(['Authorization'], $modify['set_headers']);
                     $modify['set_headers'] = Psr7\Utils::caselessRemove(['Authorization'], $modify['set_headers']);
                     $modify['set_headers']['Authorization'] = 'Basic '
                     $modify['set_headers']['Authorization'] = 'Basic '
-                        . \base64_encode("$value[0]:$value[1]");
+                        .\base64_encode("$value[0]:$value[1]");
                     break;
                     break;
                 case 'digest':
                 case 'digest':
                     // @todo: Do not rely on curl
                     // @todo: Do not rely on curl
@@ -437,13 +439,17 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
             }
             }
         }
         }
 
 
+        if (isset($options['version'])) {
+            $modify['version'] = $options['version'];
+        }
+
         $request = Psr7\Utils::modifyRequest($request, $modify);
         $request = Psr7\Utils::modifyRequest($request, $modify);
         if ($request->getBody() instanceof Psr7\MultipartStream) {
         if ($request->getBody() instanceof Psr7\MultipartStream) {
             // Use a multipart/form-data POST if a Content-Type is not set.
             // Use a multipart/form-data POST if a Content-Type is not set.
             // Ensure that we don't have the header in different case and set the new value.
             // Ensure that we don't have the header in different case and set the new value.
             $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']);
             $options['_conditional'] = Psr7\Utils::caselessRemove(['Content-Type'], $options['_conditional']);
             $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary='
             $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary='
-                . $request->getBody()->getBoundary();
+                .$request->getBody()->getBoundary();
         }
         }
 
 
         // Merge in conditional headers if they are not present.
         // Merge in conditional headers if they are not present.
@@ -469,9 +475,9 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
     private function invalidBody(): InvalidArgumentException
     private function invalidBody(): InvalidArgumentException
     {
     {
         return new InvalidArgumentException('Passing in the "body" request '
         return new InvalidArgumentException('Passing in the "body" request '
-            . 'option as an array to send a request is not supported. '
-            . 'Please use the "form_params" request option to send a '
-            . 'application/x-www-form-urlencoded request, or the "multipart" '
-            . 'request option to send a multipart/form-data request.');
+            .'option as an array to send a request is not supported. '
+            .'Please use the "form_params" request option to send a '
+            .'application/x-www-form-urlencoded request, or the "multipart" '
+            .'request option to send a multipart/form-data request.');
     }
     }
 }
 }

+ 14 - 12
vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php

@@ -50,10 +50,10 @@ class CookieJar implements CookieJarInterface
         $cookieJar = new self();
         $cookieJar = new self();
         foreach ($cookies as $name => $value) {
         foreach ($cookies as $name => $value) {
             $cookieJar->setCookie(new SetCookie([
             $cookieJar->setCookie(new SetCookie([
-                'Domain'  => $domain,
-                'Name'    => $name,
-                'Value'   => $value,
-                'Discard' => true
+                'Domain' => $domain,
+                'Name' => $name,
+                'Value' => $value,
+                'Discard' => true,
             ]));
             ]));
         }
         }
 
 
@@ -97,7 +97,7 @@ class CookieJar implements CookieJarInterface
     }
     }
 
 
     /**
     /**
-     * @inheritDoc
+     * {@inheritDoc}
      */
      */
     public function toArray(): array
     public function toArray(): array
     {
     {
@@ -107,12 +107,13 @@ class CookieJar implements CookieJarInterface
     }
     }
 
 
     /**
     /**
-     * @inheritDoc
+     * {@inheritDoc}
      */
      */
     public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void
     public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void
     {
     {
         if (!$domain) {
         if (!$domain) {
             $this->cookies = [];
             $this->cookies = [];
+
             return;
             return;
         } elseif (!$path) {
         } elseif (!$path) {
             $this->cookies = \array_filter(
             $this->cookies = \array_filter(
@@ -142,7 +143,7 @@ class CookieJar implements CookieJarInterface
     }
     }
 
 
     /**
     /**
-     * @inheritDoc
+     * {@inheritDoc}
      */
      */
     public function clearSessionCookies(): void
     public function clearSessionCookies(): void
     {
     {
@@ -155,7 +156,7 @@ class CookieJar implements CookieJarInterface
     }
     }
 
 
     /**
     /**
-     * @inheritDoc
+     * {@inheritDoc}
      */
      */
     public function setCookie(SetCookie $cookie): bool
     public function setCookie(SetCookie $cookie): bool
     {
     {
@@ -170,9 +171,10 @@ class CookieJar implements CookieJarInterface
         $result = $cookie->validate();
         $result = $cookie->validate();
         if ($result !== true) {
         if ($result !== true) {
             if ($this->strictMode) {
             if ($this->strictMode) {
-                throw new \RuntimeException('Invalid cookie: ' . $result);
+                throw new \RuntimeException('Invalid cookie: '.$result);
             }
             }
             $this->removeCookieIfEmpty($cookie);
             $this->removeCookieIfEmpty($cookie);
+
             return false;
             return false;
         }
         }
 
 
@@ -253,7 +255,7 @@ class CookieJar implements CookieJarInterface
     /**
     /**
      * Computes cookie path following RFC 6265 section 5.1.4
      * Computes cookie path following RFC 6265 section 5.1.4
      *
      *
-     * @link https://tools.ietf.org/html/rfc6265#section-5.1.4
+     * @see https://tools.ietf.org/html/rfc6265#section-5.1.4
      */
      */
     private function getCookiePathFromRequest(RequestInterface $request): string
     private function getCookiePathFromRequest(RequestInterface $request): string
     {
     {
@@ -289,8 +291,8 @@ class CookieJar implements CookieJarInterface
                 !$cookie->isExpired() &&
                 !$cookie->isExpired() &&
                 (!$cookie->getSecure() || $scheme === 'https')
                 (!$cookie->getSecure() || $scheme === 'https')
             ) {
             ) {
-                $values[] = $cookie->getName() . '='
-                    . $cookie->getValue();
+                $values[] = $cookie->getName().'='
+                    .$cookie->getValue();
             }
             }
         }
         }
 
 

+ 1 - 1
vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php

@@ -13,7 +13,7 @@ use Psr\Http\Message\ResponseInterface;
  * necessary. Subclasses are also responsible for storing and retrieving
  * necessary. Subclasses are also responsible for storing and retrieving
  * cookies from a file, database, etc.
  * cookies from a file, database, etc.
  *
  *
- * @link https://docs.python.org/2/library/cookielib.html Inspiration
+ * @see https://docs.python.org/2/library/cookielib.html Inspiration
  * @extends \IteratorAggregate<SetCookie>
  * @extends \IteratorAggregate<SetCookie>
  */
  */
 interface CookieJarInterface extends \Countable, \IteratorAggregate
 interface CookieJarInterface extends \Countable, \IteratorAggregate

+ 1 - 1
vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php

@@ -71,7 +71,7 @@ class SessionCookieJar extends CookieJar
                 $this->setCookie(new SetCookie($cookie));
                 $this->setCookie(new SetCookie($cookie));
             }
             }
         } elseif (\strlen($data)) {
         } elseif (\strlen($data)) {
-            throw new \RuntimeException("Invalid cookie data");
+            throw new \RuntimeException('Invalid cookie data');
         }
         }
     }
     }
 }
 }

+ 63 - 21
vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php

@@ -11,15 +11,15 @@ class SetCookie
      * @var array
      * @var array
      */
      */
     private static $defaults = [
     private static $defaults = [
-        'Name'     => null,
-        'Value'    => null,
-        'Domain'   => null,
-        'Path'     => '/',
-        'Max-Age'  => null,
-        'Expires'  => null,
-        'Secure'   => false,
-        'Discard'  => false,
-        'HttpOnly' => false
+        'Name' => null,
+        'Value' => null,
+        'Domain' => null,
+        'Path' => '/',
+        'Max-Age' => null,
+        'Expires' => null,
+        'Secure' => false,
+        'Discard' => false,
+        'HttpOnly' => false,
     ];
     ];
 
 
     /**
     /**
@@ -58,7 +58,13 @@ class SetCookie
             } else {
             } else {
                 foreach (\array_keys(self::$defaults) as $search) {
                 foreach (\array_keys(self::$defaults) as $search) {
                     if (!\strcasecmp($search, $key)) {
                     if (!\strcasecmp($search, $key)) {
-                        $data[$search] = $value;
+                        if ($search === 'Max-Age') {
+                            if (is_numeric($value)) {
+                                $data[$search] = (int) $value;
+                            }
+                        } else {
+                            $data[$search] = $value;
+                        }
                         continue 2;
                         continue 2;
                     }
                     }
                 }
                 }
@@ -74,13 +80,49 @@ class SetCookie
      */
      */
     public function __construct(array $data = [])
     public function __construct(array $data = [])
     {
     {
-        /** @var array|null $replaced will be null in case of replace error */
-        $replaced = \array_replace(self::$defaults, $data);
-        if ($replaced === null) {
-            throw new \InvalidArgumentException('Unable to replace the default values for the Cookie.');
+        $this->data = self::$defaults;
+
+        if (isset($data['Name'])) {
+            $this->setName($data['Name']);
+        }
+
+        if (isset($data['Value'])) {
+            $this->setValue($data['Value']);
+        }
+
+        if (isset($data['Domain'])) {
+            $this->setDomain($data['Domain']);
+        }
+
+        if (isset($data['Path'])) {
+            $this->setPath($data['Path']);
+        }
+
+        if (isset($data['Max-Age'])) {
+            $this->setMaxAge($data['Max-Age']);
+        }
+
+        if (isset($data['Expires'])) {
+            $this->setExpires($data['Expires']);
+        }
+
+        if (isset($data['Secure'])) {
+            $this->setSecure($data['Secure']);
+        }
+
+        if (isset($data['Discard'])) {
+            $this->setDiscard($data['Discard']);
+        }
+
+        if (isset($data['HttpOnly'])) {
+            $this->setHttpOnly($data['HttpOnly']);
+        }
+
+        // Set the remaining values that don't have extra validation logic
+        foreach (array_diff(array_keys($data), array_keys(self::$defaults)) as $key) {
+            $this->data[$key] = $data[$key];
         }
         }
 
 
-        $this->data = $replaced;
         // Extract the Expires value and turn it into a UNIX timestamp if needed
         // Extract the Expires value and turn it into a UNIX timestamp if needed
         if (!$this->getExpires() && $this->getMaxAge()) {
         if (!$this->getExpires() && $this->getMaxAge()) {
             // Calculate the Expires date
             // Calculate the Expires date
@@ -92,13 +134,13 @@ class SetCookie
 
 
     public function __toString()
     public function __toString()
     {
     {
-        $str = $this->data['Name'] . '=' . ($this->data['Value'] ?? '') . '; ';
+        $str = $this->data['Name'].'='.($this->data['Value'] ?? '').'; ';
         foreach ($this->data as $k => $v) {
         foreach ($this->data as $k => $v) {
             if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== false) {
             if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== false) {
                 if ($k === 'Expires') {
                 if ($k === 'Expires') {
-                    $str .= 'Expires=' . \gmdate('D, d M Y H:i:s \G\M\T', $v) . '; ';
+                    $str .= 'Expires='.\gmdate('D, d M Y H:i:s \G\M\T', $v).'; ';
                 } else {
                 } else {
-                    $str .= ($v === true ? $k : "{$k}={$v}") . '; ';
+                    $str .= ($v === true ? $k : "{$k}={$v}").'; ';
                 }
                 }
             }
             }
         }
         }
@@ -394,7 +436,7 @@ class SetCookie
             return false;
             return false;
         }
         }
 
 
-        return (bool) \preg_match('/\.' . \preg_quote($cookieDomain, '/') . '$/', $domain);
+        return (bool) \preg_match('/\.'.\preg_quote($cookieDomain, '/').'$/', $domain);
     }
     }
 
 
     /**
     /**
@@ -423,8 +465,8 @@ class SetCookie
             $name
             $name
         )) {
         )) {
             return 'Cookie name must not contain invalid characters: ASCII '
             return 'Cookie name must not contain invalid characters: ASCII '
-                . 'Control characters (0-31;127), space, tab and the '
-                . 'following characters: ()<>@,;:\"/?={}';
+                .'Control characters (0-31;127), space, tab and the '
+                .'following characters: ()<>@,;:\"/?={}';
         }
         }
 
 
         // Value must not be null. 0 and empty string are valid. Empty strings
         // Value must not be null. 0 and empty string are valid. Empty strings

+ 57 - 22
vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php

@@ -51,7 +51,7 @@ class CurlFactory implements CurlFactoryInterface
             unset($options['curl']['body_as_string']);
             unset($options['curl']['body_as_string']);
         }
         }
 
 
-        $easy = new EasyHandle;
+        $easy = new EasyHandle();
         $easy->request = $request;
         $easy->request = $request;
         $easy->options = $options;
         $easy->options = $options;
         $conf = $this->getDefaultConf($easy);
         $conf = $this->getDefaultConf($easy);
@@ -161,11 +161,11 @@ class CurlFactory implements CurlFactoryInterface
     private static function createRejection(EasyHandle $easy, array $ctx): PromiseInterface
     private static function createRejection(EasyHandle $easy, array $ctx): PromiseInterface
     {
     {
         static $connectionErrors = [
         static $connectionErrors = [
-            \CURLE_OPERATION_TIMEOUTED  => true,
+            \CURLE_OPERATION_TIMEOUTED => true,
             \CURLE_COULDNT_RESOLVE_HOST => true,
             \CURLE_COULDNT_RESOLVE_HOST => true,
-            \CURLE_COULDNT_CONNECT      => true,
-            \CURLE_SSL_CONNECT_ERROR    => true,
-            \CURLE_GOT_NOTHING          => true,
+            \CURLE_COULDNT_CONNECT => true,
+            \CURLE_SSL_CONNECT_ERROR => true,
+            \CURLE_GOT_NOTHING => true,
         ];
         ];
 
 
         if ($easy->createResponseException) {
         if ($easy->createResponseException) {
@@ -219,12 +219,12 @@ class CurlFactory implements CurlFactoryInterface
     private function getDefaultConf(EasyHandle $easy): array
     private function getDefaultConf(EasyHandle $easy): array
     {
     {
         $conf = [
         $conf = [
-            '_headers'              => $easy->request->getHeaders(),
-            \CURLOPT_CUSTOMREQUEST  => $easy->request->getMethod(),
-            \CURLOPT_URL            => (string) $easy->request->getUri()->withFragment(''),
+            '_headers' => $easy->request->getHeaders(),
+            \CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(),
+            \CURLOPT_URL => (string) $easy->request->getUri()->withFragment(''),
             \CURLOPT_RETURNTRANSFER => false,
             \CURLOPT_RETURNTRANSFER => false,
-            \CURLOPT_HEADER         => false,
-            \CURLOPT_CONNECTTIMEOUT => 150,
+            \CURLOPT_HEADER => false,
+            \CURLOPT_CONNECTTIMEOUT => 300,
         ];
         ];
 
 
         if (\defined('CURLOPT_PROTOCOLS')) {
         if (\defined('CURLOPT_PROTOCOLS')) {
@@ -250,6 +250,7 @@ class CurlFactory implements CurlFactoryInterface
 
 
         if ($size === null || $size > 0) {
         if ($size === null || $size > 0) {
             $this->applyBody($easy->request, $easy->options, $conf);
             $this->applyBody($easy->request, $easy->options, $conf);
+
             return;
             return;
         }
         }
 
 
@@ -341,6 +342,7 @@ class CurlFactory implements CurlFactoryInterface
         foreach (\array_keys($options['_headers']) as $key) {
         foreach (\array_keys($options['_headers']) as $key) {
             if (!\strcasecmp($key, $name)) {
             if (!\strcasecmp($key, $name)) {
                 unset($options['_headers'][$key]);
                 unset($options['_headers'][$key]);
+
                 return;
                 return;
             }
             }
         }
         }
@@ -443,13 +445,41 @@ class CurlFactory implements CurlFactoryInterface
                 $scheme = $easy->request->getUri()->getScheme();
                 $scheme = $easy->request->getUri()->getScheme();
                 if (isset($options['proxy'][$scheme])) {
                 if (isset($options['proxy'][$scheme])) {
                     $host = $easy->request->getUri()->getHost();
                     $host = $easy->request->getUri()->getHost();
-                    if (!isset($options['proxy']['no']) || !Utils::isHostInNoProxy($host, $options['proxy']['no'])) {
+                    if (isset($options['proxy']['no']) && Utils::isHostInNoProxy($host, $options['proxy']['no'])) {
+                        unset($conf[\CURLOPT_PROXY]);
+                    } else {
                         $conf[\CURLOPT_PROXY] = $options['proxy'][$scheme];
                         $conf[\CURLOPT_PROXY] = $options['proxy'][$scheme];
                     }
                     }
                 }
                 }
             }
             }
         }
         }
 
 
+        if (isset($options['crypto_method'])) {
+            if (\STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT === $options['crypto_method']) {
+                if (!defined('CURL_SSLVERSION_TLSv1_0')) {
+                    throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.0 not supported by your version of cURL');
+                }
+                $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_0;
+            } elseif (\STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT === $options['crypto_method']) {
+                if (!defined('CURL_SSLVERSION_TLSv1_1')) {
+                    throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.1 not supported by your version of cURL');
+                }
+                $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_1;
+            } elseif (\STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT === $options['crypto_method']) {
+                if (!defined('CURL_SSLVERSION_TLSv1_2')) {
+                    throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.2 not supported by your version of cURL');
+                }
+                $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_2;
+            } elseif (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT === $options['crypto_method']) {
+                if (!defined('CURL_SSLVERSION_TLSv1_3')) {
+                    throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.3 not supported by your version of cURL');
+                }
+                $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_3;
+            } else {
+                throw new \InvalidArgumentException('Invalid crypto_method request option: unknown version provided');
+            }
+        }
+
         if (isset($options['cert'])) {
         if (isset($options['cert'])) {
             $cert = $options['cert'];
             $cert = $options['cert'];
             if (\is_array($cert)) {
             if (\is_array($cert)) {
@@ -459,8 +489,8 @@ class CurlFactory implements CurlFactoryInterface
             if (!\file_exists($cert)) {
             if (!\file_exists($cert)) {
                 throw new \InvalidArgumentException("SSL certificate not found: {$cert}");
                 throw new \InvalidArgumentException("SSL certificate not found: {$cert}");
             }
             }
-            # OpenSSL (versions 0.9.3 and later) also support "P12" for PKCS#12-encoded files.
-            # see https://curl.se/libcurl/c/CURLOPT_SSLCERTTYPE.html
+            // OpenSSL (versions 0.9.3 and later) also support "P12" for PKCS#12-encoded files.
+            // see https://curl.se/libcurl/c/CURLOPT_SSLCERTTYPE.html
             $ext = pathinfo($cert, \PATHINFO_EXTENSION);
             $ext = pathinfo($cert, \PATHINFO_EXTENSION);
             if (preg_match('#^(der|p12)$#i', $ext)) {
             if (preg_match('#^(der|p12)$#i', $ext)) {
                 $conf[\CURLOPT_SSLCERTTYPE] = strtoupper($ext);
                 $conf[\CURLOPT_SSLCERTTYPE] = strtoupper($ext);
@@ -523,9 +553,10 @@ class CurlFactory implements CurlFactoryInterface
             }
             }
         } catch (\RuntimeException $e) {
         } catch (\RuntimeException $e) {
             $ctx['error'] = 'The connection unexpectedly failed without '
             $ctx['error'] = 'The connection unexpectedly failed without '
-                . 'providing an error. The request would have been retried, '
-                . 'but attempting to rewind the request body failed. '
-                . 'Exception: ' . $e;
+                .'providing an error. The request would have been retried, '
+                .'but attempting to rewind the request body failed. '
+                .'Exception: '.$e;
+
             return self::createRejection($easy, $ctx);
             return self::createRejection($easy, $ctx);
         }
         }
 
 
@@ -534,14 +565,15 @@ class CurlFactory implements CurlFactoryInterface
             $easy->options['_curl_retries'] = 1;
             $easy->options['_curl_retries'] = 1;
         } elseif ($easy->options['_curl_retries'] == 2) {
         } elseif ($easy->options['_curl_retries'] == 2) {
             $ctx['error'] = 'The cURL request was retried 3 times '
             $ctx['error'] = 'The cURL request was retried 3 times '
-                . 'and did not succeed. The most likely reason for the failure '
-                . 'is that cURL was unable to rewind the body of the request '
-                . 'and subsequent retries resulted in the same error. Turn on '
-                . 'the debug option to see what went wrong. See '
-                . 'https://bugs.php.net/bug.php?id=47204 for more information.';
+                .'and did not succeed. The most likely reason for the failure '
+                .'is that cURL was unable to rewind the body of the request '
+                .'and subsequent retries resulted in the same error. Turn on '
+                .'the debug option to see what went wrong. See '
+                .'https://bugs.php.net/bug.php?id=47204 for more information.';
+
             return self::createRejection($easy, $ctx);
             return self::createRejection($easy, $ctx);
         } else {
         } else {
-            $easy->options['_curl_retries']++;
+            ++$easy->options['_curl_retries'];
         }
         }
 
 
         return $handler($easy->request, $easy->options);
         return $handler($easy->request, $easy->options);
@@ -571,6 +603,7 @@ class CurlFactory implements CurlFactoryInterface
                     $easy->createResponse();
                     $easy->createResponse();
                 } catch (\Exception $e) {
                 } catch (\Exception $e) {
                     $easy->createResponseException = $e;
                     $easy->createResponseException = $e;
+
                     return -1;
                     return -1;
                 }
                 }
                 if ($onHeaders !== null) {
                 if ($onHeaders !== null) {
@@ -580,6 +613,7 @@ class CurlFactory implements CurlFactoryInterface
                         // Associate the exception with the handle and trigger
                         // Associate the exception with the handle and trigger
                         // a curl header write error by returning 0.
                         // a curl header write error by returning 0.
                         $easy->onHeadersException = $e;
                         $easy->onHeadersException = $e;
+
                         return -1;
                         return -1;
                     }
                     }
                 }
                 }
@@ -589,6 +623,7 @@ class CurlFactory implements CurlFactoryInterface
             } else {
             } else {
                 $easy->headers[] = $value;
                 $easy->headers[] = $value;
             }
             }
+
             return \strlen($h);
             return \strlen($h);
         };
         };
     }
     }

+ 2 - 1
vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php

@@ -164,7 +164,8 @@ class CurlMultiHandler
             \usleep(250);
             \usleep(250);
         }
         }
 
 
-        while (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM);
+        while (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM) {
+        }
 
 
         $this->processMessages();
         $this->processMessages();
     }
     }

+ 1 - 1
vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php

@@ -106,7 +106,7 @@ final class EasyHandle
      */
      */
     public function __get($name)
     public function __get($name)
     {
     {
-        $msg = $name === 'handle' ? 'The EasyHandle has been released' : 'Invalid property: ' . $name;
+        $msg = $name === 'handle' ? 'The EasyHandle has been released' : 'Invalid property: '.$name;
         throw new \BadMethodCallException($msg);
         throw new \BadMethodCallException($msg);
     }
     }
 }
 }

+ 2 - 2
vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php

@@ -14,9 +14,9 @@ final class HeaderProcessor
      *
      *
      * @param string[] $headers
      * @param string[] $headers
      *
      *
-     * @throws \RuntimeException
-     *
      * @return array{0:string, 1:int, 2:?string, 3:array}
      * @return array{0:string, 1:int, 2:?string, 3:array}
+     *
+     * @throws \RuntimeException
      */
      */
     public static function parseHeaders(array $headers): array
     public static function parseHeaders(array $headers): array
     {
     {

+ 2 - 1
vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php

@@ -138,6 +138,7 @@ class MockHandler implements \Countable
                 if ($this->onRejected) {
                 if ($this->onRejected) {
                     ($this->onRejected)($reason);
                     ($this->onRejected)($reason);
                 }
                 }
+
                 return P\Create::rejectionFor($reason);
                 return P\Create::rejectionFor($reason);
             }
             }
         );
         );
@@ -159,7 +160,7 @@ class MockHandler implements \Countable
             ) {
             ) {
                 $this->queue[] = $value;
                 $this->queue[] = $value;
             } else {
             } else {
-                throw new \TypeError('Expected a Response, Promise, Throwable or callable. Found ' . Utils::describeType($value));
+                throw new \TypeError('Expected a Response, Promise, Throwable or callable. Found '.Utils::describeType($value));
             }
             }
         }
         }
     }
     }

+ 44 - 22
vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php

@@ -67,7 +67,7 @@ class StreamHandler
             if (false !== \strpos($message, 'getaddrinfo') // DNS lookup failed
             if (false !== \strpos($message, 'getaddrinfo') // DNS lookup failed
                 || false !== \strpos($message, 'Connection refused')
                 || false !== \strpos($message, 'Connection refused')
                 || false !== \strpos($message, "couldn't connect to host") // error on HHVM
                 || false !== \strpos($message, "couldn't connect to host") // error on HHVM
-                || false !== \strpos($message, "connection attempt failed")
+                || false !== \strpos($message, 'connection attempt failed')
             ) {
             ) {
                 $e = new ConnectException($e->getMessage(), $request, $e);
                 $e = new ConnectException($e->getMessage(), $request, $e);
             } else {
             } else {
@@ -231,9 +231,10 @@ class StreamHandler
         \set_error_handler(static function ($_, $msg, $file, $line) use (&$errors): bool {
         \set_error_handler(static function ($_, $msg, $file, $line) use (&$errors): bool {
             $errors[] = [
             $errors[] = [
                 'message' => $msg,
                 'message' => $msg,
-                'file'    => $file,
-                'line'    => $line
+                'file' => $file,
+                'line' => $line,
             ];
             ];
+
             return true;
             return true;
         });
         });
 
 
@@ -247,7 +248,7 @@ class StreamHandler
             $message = 'Error creating resource: ';
             $message = 'Error creating resource: ';
             foreach ($errors as $err) {
             foreach ($errors as $err) {
                 foreach ($err as $key => $value) {
                 foreach ($err as $key => $value) {
-                    $message .= "[$key] $value" . \PHP_EOL;
+                    $message .= "[$key] $value".\PHP_EOL;
                 }
                 }
             }
             }
             throw new \RuntimeException(\trim($message));
             throw new \RuntimeException(\trim($message));
@@ -350,6 +351,7 @@ class StreamHandler
                 if (false === $records || !isset($records[0]['ip'])) {
                 if (false === $records || !isset($records[0]['ip'])) {
                     throw new ConnectException(\sprintf("Could not resolve IPv4 address for host '%s'", $uri->getHost()), $request);
                     throw new ConnectException(\sprintf("Could not resolve IPv4 address for host '%s'", $uri->getHost()), $request);
                 }
                 }
+
                 return $uri->withHost($records[0]['ip']);
                 return $uri->withHost($records[0]['ip']);
             }
             }
             if ('v6' === $options['force_ip_resolve']) {
             if ('v6' === $options['force_ip_resolve']) {
@@ -357,7 +359,8 @@ class StreamHandler
                 if (false === $records || !isset($records[0]['ipv6'])) {
                 if (false === $records || !isset($records[0]['ipv6'])) {
                     throw new ConnectException(\sprintf("Could not resolve IPv6 address for host '%s'", $uri->getHost()), $request);
                     throw new ConnectException(\sprintf("Could not resolve IPv6 address for host '%s'", $uri->getHost()), $request);
                 }
                 }
-                return $uri->withHost('[' . $records[0]['ipv6'] . ']');
+
+                return $uri->withHost('['.$records[0]['ipv6'].']');
             }
             }
         }
         }
 
 
@@ -375,11 +378,11 @@ class StreamHandler
 
 
         $context = [
         $context = [
             'http' => [
             'http' => [
-                'method'           => $request->getMethod(),
-                'header'           => $headers,
+                'method' => $request->getMethod(),
+                'header' => $headers,
                 'protocol_version' => $request->getProtocolVersion(),
                 'protocol_version' => $request->getProtocolVersion(),
-                'ignore_errors'    => true,
-                'follow_location'  => 0,
+                'ignore_errors' => true,
+                'follow_location' => 0,
             ],
             ],
             'ssl' => [
             'ssl' => [
                 'peer_name' => $request->getUri()->getHost(),
                 'peer_name' => $request->getUri()->getHost(),
@@ -388,7 +391,7 @@ class StreamHandler
 
 
         $body = (string) $request->getBody();
         $body = (string) $request->getBody();
 
 
-        if (!empty($body)) {
+        if ('' !== $body) {
             $context['http']['content'] = $body;
             $context['http']['content'] = $body;
             // Prevent the HTTP handler from adding a Content-Type header.
             // Prevent the HTTP handler from adding a Content-Type header.
             if (!$request->hasHeader('Content-Type')) {
             if (!$request->hasHeader('Content-Type')) {
@@ -472,6 +475,25 @@ class StreamHandler
         }
         }
     }
     }
 
 
+    /**
+     * @param mixed $value as passed via Request transfer options.
+     */
+    private function add_crypto_method(RequestInterface $request, array &$options, $value, array &$params): void
+    {
+        if (
+            $value === \STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT
+            || $value === \STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT
+            || $value === \STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
+            || (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && $value === \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT)
+        ) {
+            $options['http']['crypto_method'] = $value;
+
+            return;
+        }
+
+        throw new \InvalidArgumentException('Invalid crypto_method request option: unknown version provided');
+    }
+
     /**
     /**
      * @param mixed $value as passed via Request transfer options.
      * @param mixed $value as passed via Request transfer options.
      */
      */
@@ -542,27 +564,27 @@ class StreamHandler
         }
         }
 
 
         static $map = [
         static $map = [
-            \STREAM_NOTIFY_CONNECT       => 'CONNECT',
+            \STREAM_NOTIFY_CONNECT => 'CONNECT',
             \STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED',
             \STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED',
-            \STREAM_NOTIFY_AUTH_RESULT   => 'AUTH_RESULT',
-            \STREAM_NOTIFY_MIME_TYPE_IS  => 'MIME_TYPE_IS',
-            \STREAM_NOTIFY_FILE_SIZE_IS  => 'FILE_SIZE_IS',
-            \STREAM_NOTIFY_REDIRECTED    => 'REDIRECTED',
-            \STREAM_NOTIFY_PROGRESS      => 'PROGRESS',
-            \STREAM_NOTIFY_FAILURE       => 'FAILURE',
-            \STREAM_NOTIFY_COMPLETED     => 'COMPLETED',
-            \STREAM_NOTIFY_RESOLVE       => 'RESOLVE',
+            \STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT',
+            \STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS',
+            \STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS',
+            \STREAM_NOTIFY_REDIRECTED => 'REDIRECTED',
+            \STREAM_NOTIFY_PROGRESS => 'PROGRESS',
+            \STREAM_NOTIFY_FAILURE => 'FAILURE',
+            \STREAM_NOTIFY_COMPLETED => 'COMPLETED',
+            \STREAM_NOTIFY_RESOLVE => 'RESOLVE',
         ];
         ];
         static $args = ['severity', 'message', 'message_code', 'bytes_transferred', 'bytes_max'];
         static $args = ['severity', 'message', 'message_code', 'bytes_transferred', 'bytes_max'];
 
 
         $value = Utils::debugResource($value);
         $value = Utils::debugResource($value);
-        $ident = $request->getMethod() . ' ' . $request->getUri()->withFragment('');
+        $ident = $request->getMethod().' '.$request->getUri()->withFragment('');
         self::addNotification(
         self::addNotification(
             $params,
             $params,
             static function (int $code, ...$passed) use ($ident, $value, $map, $args): void {
             static function (int $code, ...$passed) use ($ident, $value, $map, $args): void {
                 \fprintf($value, '<%s> [%s] ', $ident, $map[$code]);
                 \fprintf($value, '<%s> [%s] ', $ident, $map[$code]);
                 foreach (\array_filter($passed) as $i => $v) {
                 foreach (\array_filter($passed) as $i => $v) {
-                    \fwrite($value, $args[$i] . ': "' . $v . '" ');
+                    \fwrite($value, $args[$i].': "'.$v.'" ');
                 }
                 }
                 \fwrite($value, "\n");
                 \fwrite($value, "\n");
             }
             }
@@ -577,7 +599,7 @@ class StreamHandler
         } else {
         } else {
             $params['notification'] = self::callArray([
             $params['notification'] = self::callArray([
                 $params['notification'],
                 $params['notification'],
-                $notify
+                $notify,
             ]);
             ]);
         }
         }
     }
     }

+ 6 - 6
vendor/guzzlehttp/guzzle/src/HandlerStack.php

@@ -86,14 +86,14 @@ class HandlerStack
         $stack = [];
         $stack = [];
 
 
         if ($this->handler !== null) {
         if ($this->handler !== null) {
-            $stack[] = "0) Handler: " . $this->debugCallable($this->handler);
+            $stack[] = '0) Handler: '.$this->debugCallable($this->handler);
         }
         }
 
 
         $result = '';
         $result = '';
         foreach (\array_reverse($this->stack) as $tuple) {
         foreach (\array_reverse($this->stack) as $tuple) {
-            $depth++;
+            ++$depth;
             $str = "{$depth}) Name: '{$tuple[1]}', ";
             $str = "{$depth}) Name: '{$tuple[1]}', ";
-            $str .= "Function: " . $this->debugCallable($tuple[0]);
+            $str .= 'Function: '.$this->debugCallable($tuple[0]);
             $result = "> {$str}\n{$result}";
             $result = "> {$str}\n{$result}";
             $stack[] = $str;
             $stack[] = $str;
         }
         }
@@ -122,7 +122,7 @@ class HandlerStack
      */
      */
     public function hasHandler(): bool
     public function hasHandler(): bool
     {
     {
-        return $this->handler !== null ;
+        return $this->handler !== null;
     }
     }
 
 
     /**
     /**
@@ -266,10 +266,10 @@ class HandlerStack
         if (\is_array($fn)) {
         if (\is_array($fn)) {
             return \is_string($fn[0])
             return \is_string($fn[0])
                 ? "callable({$fn[0]}::{$fn[1]})"
                 ? "callable({$fn[0]}::{$fn[1]})"
-                : "callable(['" . \get_class($fn[0]) . "', '{$fn[1]}'])";
+                : "callable(['".\get_class($fn[0])."', '{$fn[1]}'])";
         }
         }
 
 
         /** @var object $fn */
         /** @var object $fn */
-        return 'callable(' . \spl_object_hash($fn) . ')';
+        return 'callable('.\spl_object_hash($fn).')';
     }
     }
 }
 }

+ 8 - 7
vendor/guzzlehttp/guzzle/src/MessageFormatter.php

@@ -40,11 +40,11 @@ class MessageFormatter implements MessageFormatterInterface
     /**
     /**
      * Apache Common Log Format.
      * Apache Common Log Format.
      *
      *
-     * @link https://httpd.apache.org/docs/2.4/logs.html#common
+     * @see https://httpd.apache.org/docs/2.4/logs.html#common
      *
      *
      * @var string
      * @var string
      */
      */
-    public const CLF = "{hostname} {req_header_User-Agent} - [{date_common_log}] \"{method} {target} HTTP/{version}\" {code} {res_header_Content-Length}";
+    public const CLF = '{hostname} {req_header_User-Agent} - [{date_common_log}] "{method} {target} HTTP/{version}" {code} {res_header_Content-Length}';
     public const DEBUG = ">>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}";
     public const DEBUG = ">>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}";
     public const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}';
     public const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}';
 
 
@@ -90,9 +90,9 @@ class MessageFormatter implements MessageFormatterInterface
                         break;
                         break;
                     case 'req_headers':
                     case 'req_headers':
                         $result = \trim($request->getMethod()
                         $result = \trim($request->getMethod()
-                                . ' ' . $request->getRequestTarget())
-                            . ' HTTP/' . $request->getProtocolVersion() . "\r\n"
-                            . $this->headers($request);
+                                .' '.$request->getRequestTarget())
+                            .' HTTP/'.$request->getProtocolVersion()."\r\n"
+                            .$this->headers($request);
                         break;
                         break;
                     case 'res_headers':
                     case 'res_headers':
                         $result = $response ?
                         $result = $response ?
@@ -101,7 +101,7 @@ class MessageFormatter implements MessageFormatterInterface
                                 $response->getProtocolVersion(),
                                 $response->getProtocolVersion(),
                                 $response->getStatusCode(),
                                 $response->getStatusCode(),
                                 $response->getReasonPhrase()
                                 $response->getReasonPhrase()
-                            ) . "\r\n" . $this->headers($response)
+                            )."\r\n".$this->headers($response)
                             : 'NULL';
                             : 'NULL';
                         break;
                         break;
                     case 'req_body':
                     case 'req_body':
@@ -177,6 +177,7 @@ class MessageFormatter implements MessageFormatterInterface
                 }
                 }
 
 
                 $cache[$matches[1]] = $result;
                 $cache[$matches[1]] = $result;
+
                 return $result;
                 return $result;
             },
             },
             $this->template
             $this->template
@@ -190,7 +191,7 @@ class MessageFormatter implements MessageFormatterInterface
     {
     {
         $result = '';
         $result = '';
         foreach ($message->getHeaders() as $name => $values) {
         foreach ($message->getHeaders() as $name => $values) {
-            $result .= $name . ': ' . \implode(', ', $values) . "\r\n";
+            $result .= $name.': '.\implode(', ', $values)."\r\n";
         }
         }
 
 
         return \trim($result);
         return \trim($result);

+ 14 - 6
vendor/guzzlehttp/guzzle/src/Middleware.php

@@ -34,10 +34,12 @@ final class Middleware
                 }
                 }
                 $cookieJar = $options['cookies'];
                 $cookieJar = $options['cookies'];
                 $request = $cookieJar->withCookieHeader($request);
                 $request = $cookieJar->withCookieHeader($request);
+
                 return $handler($request, $options)
                 return $handler($request, $options)
                     ->then(
                     ->then(
                         static function (ResponseInterface $response) use ($cookieJar, $request): ResponseInterface {
                         static function (ResponseInterface $response) use ($cookieJar, $request): ResponseInterface {
                             $cookieJar->extractCookies($request, $response);
                             $cookieJar->extractCookies($request, $response);
+
                             return $response;
                             return $response;
                         }
                         }
                     );
                     );
@@ -60,6 +62,7 @@ final class Middleware
                 if (empty($options['http_errors'])) {
                 if (empty($options['http_errors'])) {
                     return $handler($request, $options);
                     return $handler($request, $options);
                 }
                 }
+
                 return $handler($request, $options)->then(
                 return $handler($request, $options)->then(
                     static function (ResponseInterface $response) use ($request, $bodySummarizer) {
                     static function (ResponseInterface $response) use ($request, $bodySummarizer) {
                         $code = $response->getStatusCode();
                         $code = $response->getStatusCode();
@@ -93,20 +96,22 @@ final class Middleware
                 return $handler($request, $options)->then(
                 return $handler($request, $options)->then(
                     static function ($value) use ($request, &$container, $options) {
                     static function ($value) use ($request, &$container, $options) {
                         $container[] = [
                         $container[] = [
-                            'request'  => $request,
+                            'request' => $request,
                             'response' => $value,
                             'response' => $value,
-                            'error'    => null,
-                            'options'  => $options
+                            'error' => null,
+                            'options' => $options,
                         ];
                         ];
+
                         return $value;
                         return $value;
                     },
                     },
                     static function ($reason) use ($request, &$container, $options) {
                     static function ($reason) use ($request, &$container, $options) {
                         $container[] = [
                         $container[] = [
-                            'request'  => $request,
+                            'request' => $request,
                             'response' => null,
                             'response' => null,
-                            'error'    => $reason,
-                            'options'  => $options
+                            'error' => $reason,
+                            'options' => $options,
                         ];
                         ];
+
                         return P\Create::rejectionFor($reason);
                         return P\Create::rejectionFor($reason);
                     }
                     }
                 );
                 );
@@ -138,6 +143,7 @@ final class Middleware
                 if ($after) {
                 if ($after) {
                     $after($request, $options, $response);
                     $after($request, $options, $response);
                 }
                 }
+
                 return $response;
                 return $response;
             };
             };
         };
         };
@@ -202,12 +208,14 @@ final class Middleware
                     static function ($response) use ($logger, $request, $formatter, $logLevel): ResponseInterface {
                     static function ($response) use ($logger, $request, $formatter, $logLevel): ResponseInterface {
                         $message = $formatter->format($request, $response);
                         $message = $formatter->format($request, $response);
                         $logger->log($logLevel, $message);
                         $logger->log($logLevel, $message);
+
                         return $response;
                         return $response;
                     },
                     },
                     static function ($reason) use ($logger, $request, $formatter): PromiseInterface {
                     static function ($reason) use ($logger, $request, $formatter): PromiseInterface {
                         $response = $reason instanceof RequestException ? $reason->getResponse() : null;
                         $response = $reason instanceof RequestException ? $reason->getResponse() : null;
                         $message = $formatter->format($request, $response, P\Create::exceptionFor($reason));
                         $message = $formatter->format($request, $response, P\Create::exceptionFor($reason));
                         $logger->error($message);
                         $logger->error($message);
+
                         return P\Create::rejectionFor($reason);
                         return P\Create::rejectionFor($reason);
                     }
                     }
                 );
                 );

+ 1 - 0
vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php

@@ -84,6 +84,7 @@ class PrepareBodyMiddleware
         // The expect header is unconditionally enabled
         // The expect header is unconditionally enabled
         if ($expect === true) {
         if ($expect === true) {
             $modify['set_headers']['Expect'] = '100-Continue';
             $modify['set_headers']['Expect'] = '100-Continue';
+
             return;
             return;
         }
         }
 
 

+ 4 - 4
vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php

@@ -27,10 +27,10 @@ class RedirectMiddleware
      * @var array
      * @var array
      */
      */
     public static $defaultSettings = [
     public static $defaultSettings = [
-        'max'             => 5,
-        'protocols'       => ['http', 'https'],
-        'strict'          => false,
-        'referer'         => false,
+        'max' => 5,
+        'protocols' => ['http', 'https'],
+        'strict' => false,
+        'referer' => false,
         'track_redirects' => false,
         'track_redirects' => false,
     ];
     ];
 
 

+ 14 - 2
vendor/guzzlehttp/guzzle/src/RequestOptions.php

@@ -7,7 +7,7 @@ namespace GuzzleHttp;
  *
  *
  * More documentation for each option can be found at http://guzzlephp.org/.
  * More documentation for each option can be found at http://guzzlephp.org/.
  *
  *
- * @link http://docs.guzzlephp.org/en/v6/request-options.html
+ * @see http://docs.guzzlephp.org/en/v6/request-options.html
  */
  */
 final class RequestOptions
 final class RequestOptions
 {
 {
@@ -70,10 +70,22 @@ final class RequestOptions
     /**
     /**
      * connect_timeout: (float, default=0) Float describing the number of
      * connect_timeout: (float, default=0) Float describing the number of
      * seconds to wait while trying to connect to a server. Use 0 to wait
      * seconds to wait while trying to connect to a server. Use 0 to wait
-     * indefinitely (the default behavior).
+     * 300 seconds (the default behavior).
      */
      */
     public const CONNECT_TIMEOUT = 'connect_timeout';
     public const CONNECT_TIMEOUT = 'connect_timeout';
 
 
+    /**
+     * crypto_method: (int) A value describing the minimum TLS protocol
+     * version to use.
+     *
+     * This setting must be set to one of the
+     * ``STREAM_CRYPTO_METHOD_TLS*_CLIENT`` constants. PHP 7.4 or higher is
+     * required in order to use TLS 1.3, and cURL 7.34.0 or higher is required
+     * in order to specify a crypto method, with cURL 7.52.0 or higher being
+     * required to use TLS 1.3.
+     */
+    public const CRYPTO_METHOD = 'crypto_method';
+
     /**
     /**
      * debug: (bool|resource) Set to true or set to a PHP stream returned by
      * debug: (bool|resource) Set to true or set to a PHP stream returned by
      * fopen()  enable debug output with the HTTP handler used to send a
      * fopen()  enable debug output with the HTTP handler used to send a

+ 5 - 2
vendor/guzzlehttp/guzzle/src/RetryMiddleware.php

@@ -44,7 +44,7 @@ class RetryMiddleware
     {
     {
         $this->decider = $decider;
         $this->decider = $decider;
         $this->nextHandler = $nextHandler;
         $this->nextHandler = $nextHandler;
-        $this->delay = $delay ?: __CLASS__ . '::exponentialDelay';
+        $this->delay = $delay ?: __CLASS__.'::exponentialDelay';
     }
     }
 
 
     /**
     /**
@@ -54,7 +54,7 @@ class RetryMiddleware
      */
      */
     public static function exponentialDelay(int $retries): int
     public static function exponentialDelay(int $retries): int
     {
     {
-        return (int) \pow(2, $retries - 1) * 1000;
+        return (int) 2 ** ($retries - 1) * 1000;
     }
     }
 
 
     public function __invoke(RequestInterface $request, array $options): PromiseInterface
     public function __invoke(RequestInterface $request, array $options): PromiseInterface
@@ -64,6 +64,7 @@ class RetryMiddleware
         }
         }
 
 
         $fn = $this->nextHandler;
         $fn = $this->nextHandler;
+
         return $fn($request, $options)
         return $fn($request, $options)
             ->then(
             ->then(
                 $this->onFulfilled($request, $options),
                 $this->onFulfilled($request, $options),
@@ -85,6 +86,7 @@ class RetryMiddleware
             )) {
             )) {
                 return $value;
                 return $value;
             }
             }
+
             return $this->doRetry($request, $options, $value);
             return $this->doRetry($request, $options, $value);
         };
         };
     }
     }
@@ -103,6 +105,7 @@ class RetryMiddleware
             )) {
             )) {
                 return P\Create::rejectionFor($reason);
                 return P\Create::rejectionFor($reason);
             }
             }
+
             return $this->doRetry($req, $options);
             return $this->doRetry($req, $options);
         };
         };
     }
     }

+ 11 - 11
vendor/guzzlehttp/guzzle/src/Utils.php

@@ -23,9 +23,9 @@ final class Utils
     {
     {
         switch (\gettype($input)) {
         switch (\gettype($input)) {
             case 'object':
             case 'object':
-                return 'object(' . \get_class($input) . ')';
+                return 'object('.\get_class($input).')';
             case 'array':
             case 'array':
-                return 'array(' . \count($input) . ')';
+                return 'array('.\count($input).')';
             default:
             default:
                 \ob_start();
                 \ob_start();
                 \var_dump($input);
                 \var_dump($input);
@@ -79,9 +79,9 @@ final class Utils
      *
      *
      * The returned handler is not wrapped by any default middlewares.
      * The returned handler is not wrapped by any default middlewares.
      *
      *
-     * @throws \RuntimeException if no viable Handler is available.
-     *
      * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the best handler for the given system.
      * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the best handler for the given system.
+     *
+     * @throws \RuntimeException if no viable Handler is available.
      */
      */
     public static function chooseHandler(): callable
     public static function chooseHandler(): callable
     {
     {
@@ -247,8 +247,8 @@ EOT
             }
             }
             // Special match if the area when prefixed with ".". Remove any
             // Special match if the area when prefixed with ".". Remove any
             // existing leading "." and add a new leading ".".
             // existing leading "." and add a new leading ".".
-            $area = '.' . \ltrim($area, '.');
-            if (\substr($host, -(\strlen($area))) === $area) {
+            $area = '.'.\ltrim($area, '.');
+            if (\substr($host, -\strlen($area)) === $area) {
                 return true;
                 return true;
             }
             }
         }
         }
@@ -269,13 +269,13 @@ EOT
      *
      *
      * @throws InvalidArgumentException if the JSON cannot be decoded.
      * @throws InvalidArgumentException if the JSON cannot be decoded.
      *
      *
-     * @link https://www.php.net/manual/en/function.json-decode.php
+     * @see https://www.php.net/manual/en/function.json-decode.php
      */
      */
     public static function jsonDecode(string $json, bool $assoc = false, int $depth = 512, int $options = 0)
     public static function jsonDecode(string $json, bool $assoc = false, int $depth = 512, int $options = 0)
     {
     {
         $data = \json_decode($json, $assoc, $depth, $options);
         $data = \json_decode($json, $assoc, $depth, $options);
         if (\JSON_ERROR_NONE !== \json_last_error()) {
         if (\JSON_ERROR_NONE !== \json_last_error()) {
-            throw new InvalidArgumentException('json_decode error: ' . \json_last_error_msg());
+            throw new InvalidArgumentException('json_decode error: '.\json_last_error_msg());
         }
         }
 
 
         return $data;
         return $data;
@@ -290,13 +290,13 @@ EOT
      *
      *
      * @throws InvalidArgumentException if the JSON cannot be encoded.
      * @throws InvalidArgumentException if the JSON cannot be encoded.
      *
      *
-     * @link https://www.php.net/manual/en/function.json-encode.php
+     * @see https://www.php.net/manual/en/function.json-encode.php
      */
      */
     public static function jsonEncode($value, int $options = 0, int $depth = 512): string
     public static function jsonEncode($value, int $options = 0, int $depth = 512): string
     {
     {
         $json = \json_encode($value, $options, $depth);
         $json = \json_encode($value, $options, $depth);
         if (\JSON_ERROR_NONE !== \json_last_error()) {
         if (\JSON_ERROR_NONE !== \json_last_error()) {
-            throw new InvalidArgumentException('json_encode error: ' . \json_last_error_msg());
+            throw new InvalidArgumentException('json_encode error: '.\json_last_error_msg());
         }
         }
 
 
         /** @var string */
         /** @var string */
@@ -341,7 +341,7 @@ EOT
 
 
                 $errorMessage = 'IDN conversion failed';
                 $errorMessage = 'IDN conversion failed';
                 if ($errors) {
                 if ($errors) {
-                    $errorMessage .= ' (errors: ' . implode(', ', $errors) . ')';
+                    $errorMessage .= ' (errors: '.implode(', ', $errors).')';
                 }
                 }
 
 
                 throw new InvalidArgumentException($errorMessage);
                 throw new InvalidArgumentException($errorMessage);

+ 4 - 4
vendor/guzzlehttp/guzzle/src/functions.php

@@ -50,10 +50,10 @@ function debug_resource($value = null)
  *
  *
  * The returned handler is not wrapped by any default middlewares.
  * The returned handler is not wrapped by any default middlewares.
  *
  *
- * @throws \RuntimeException if no viable Handler is available.
- *
  * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the best handler for the given system.
  * @return callable(\Psr\Http\Message\RequestInterface, array): \GuzzleHttp\Promise\PromiseInterface Returns the best handler for the given system.
  *
  *
+ * @throws \RuntimeException if no viable Handler is available.
+ *
  * @deprecated choose_handler will be removed in guzzlehttp/guzzle:8.0. Use Utils::chooseHandler instead.
  * @deprecated choose_handler will be removed in guzzlehttp/guzzle:8.0. Use Utils::chooseHandler instead.
  */
  */
 function choose_handler(): callable
 function choose_handler(): callable
@@ -141,7 +141,7 @@ function is_host_in_noproxy(string $host, array $noProxyArray): bool
  *
  *
  * @throws Exception\InvalidArgumentException if the JSON cannot be decoded.
  * @throws Exception\InvalidArgumentException if the JSON cannot be decoded.
  *
  *
- * @link https://www.php.net/manual/en/function.json-decode.php
+ * @see https://www.php.net/manual/en/function.json-decode.php
  * @deprecated json_decode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonDecode instead.
  * @deprecated json_decode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonDecode instead.
  */
  */
 function json_decode(string $json, bool $assoc = false, int $depth = 512, int $options = 0)
 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
  *
  *
  * @throws Exception\InvalidArgumentException if the JSON cannot be encoded.
  * @throws Exception\InvalidArgumentException if the JSON cannot be encoded.
  *
  *
- * @link https://www.php.net/manual/en/function.json-encode.php
+ * @see https://www.php.net/manual/en/function.json-encode.php
  * @deprecated json_encode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonEncode instead.
  * @deprecated json_encode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonEncode instead.
  */
  */
 function json_encode($value, int $options = 0, int $depth = 512): string
 function json_encode($value, int $options = 0, int $depth = 512): string

+ 1 - 1
vendor/guzzlehttp/guzzle/src/functions_include.php

@@ -2,5 +2,5 @@
 
 
 // Don't redefine the functions if included multiple times.
 // Don't redefine the functions if included multiple times.
 if (!\function_exists('GuzzleHttp\describe_type')) {
 if (!\function_exists('GuzzleHttp\describe_type')) {
-    require __DIR__ . '/functions.php';
+    require __DIR__.'/functions.php';
 }
 }

+ 28 - 0
vendor/guzzlehttp/promises/CHANGELOG.md

@@ -1,11 +1,36 @@
 # CHANGELOG
 # CHANGELOG
 
 
+
+## 2.0.0 - TBC
+
+### Added
+
+- Added PHP 7 type hints
+
+### Changed
+
+- All previously non-final non-exception classes have been marked as soft-final
+
+### Removed
+
+- Dropped PHP < 7.2 support
+- All functions in the `GuzzleHttp\Promise` namespace
+
+
+## 1.5.3 - 2023-05-21
+
+### Changed
+
+- Removed remaining usage of deprecated functions
+
+
 ## 1.5.2 - 2022-08-07
 ## 1.5.2 - 2022-08-07
 
 
 ### Changed
 ### Changed
 
 
 - Officially support PHP 8.2
 - Officially support PHP 8.2
 
 
+
 ## 1.5.1 - 2021-10-22
 ## 1.5.1 - 2021-10-22
 
 
 ### Fixed
 ### Fixed
@@ -13,6 +38,7 @@
 - Revert "Call handler when waiting on fulfilled/rejected Promise"
 - Revert "Call handler when waiting on fulfilled/rejected Promise"
 - Fix pool memory leak when empty array of promises provided
 - Fix pool memory leak when empty array of promises provided
 
 
+
 ## 1.5.0 - 2021-10-07
 ## 1.5.0 - 2021-10-07
 
 
 ### Changed
 ### Changed
@@ -24,12 +50,14 @@
 
 
 - Fix manually settle promises generated with `Utils::task`
 - Fix manually settle promises generated with `Utils::task`
 
 
+
 ## 1.4.1 - 2021-02-18
 ## 1.4.1 - 2021-02-18
 
 
 ### Fixed
 ### Fixed
 
 
 - Fixed `each_limit` skipping promises and failing
 - Fixed `each_limit` skipping promises and failing
 
 
+
 ## 1.4.0 - 2020-09-30
 ## 1.4.0 - 2020-09-30
 
 
 ### Added
 ### Added

+ 17 - 4
vendor/guzzlehttp/promises/README.md

@@ -29,6 +29,21 @@ for a general introduction to promises.
   `GuzzleHttp\Promise\Coroutine::of()`.
   `GuzzleHttp\Promise\Coroutine::of()`.
 
 
 
 
+## Installation
+
+```shell
+composer require guzzlehttp/promises
+```
+
+
+## Version Guidance
+
+| Version | Status                 | PHP Version  |
+|---------|------------------------|--------------|
+| 1.x     | Bug and security fixes | >=5.5,<8.3   |
+| 2.x     | Latest                 | >=7.2.5,<8.3 |
+
+
 ## Quick Start
 ## Quick Start
 
 
 A *promise* represents the eventual result of an asynchronous operation. The
 A *promise* represents the eventual result of an asynchronous operation. The
@@ -430,8 +445,6 @@ $loop = React\EventLoop\Factory::create();
 $loop->addPeriodicTimer(0, [$queue, 'run']);
 $loop->addPeriodicTimer(0, [$queue, 'run']);
 ```
 ```
 
 
-*TODO*: Perhaps adding a `futureTick()` on each tick would be faster?
-
 
 
 ## Implementation Notes
 ## Implementation Notes
 
 
@@ -501,8 +514,8 @@ $promise->resolve('foo');
 
 
 A static API was first introduced in 1.4.0, in order to mitigate problems with
 A static API was first introduced in 1.4.0, in order to mitigate problems with
 functions conflicting between global and local copies of the package. The
 functions conflicting between global and local copies of the package. The
-function API will be removed in 2.0.0. A migration table has been provided here
-for your convenience:
+function API was removed in 2.0.0. A migration table has been provided here for
+your convenience:
 
 
 | Original Function | Replacement Method |
 | Original Function | Replacement Method |
 |----------------|----------------|
 |----------------|----------------|

+ 10 - 10
vendor/guzzlehttp/promises/composer.json

@@ -26,32 +26,32 @@
         }
         }
     ],
     ],
     "require": {
     "require": {
-        "php": ">=5.5"
+        "php": "^7.2.5 || ^8.0"
     },
     },
     "require-dev": {
     "require-dev": {
-        "symfony/phpunit-bridge": "^4.4 || ^5.1"
+        "bamarni/composer-bin-plugin": "^1.8.1",
+        "phpunit/phpunit": "^8.5.29 || ^9.5.23"
     },
     },
     "autoload": {
     "autoload": {
         "psr-4": {
         "psr-4": {
             "GuzzleHttp\\Promise\\": "src/"
             "GuzzleHttp\\Promise\\": "src/"
-        },
-        "files": ["src/functions_include.php"]
+        }
     },
     },
     "autoload-dev": {
     "autoload-dev": {
         "psr-4": {
         "psr-4": {
             "GuzzleHttp\\Promise\\Tests\\": "tests/"
             "GuzzleHttp\\Promise\\Tests\\": "tests/"
         }
         }
     },
     },
-    "scripts": {
-        "test": "vendor/bin/simple-phpunit",
-        "test-ci": "vendor/bin/simple-phpunit --coverage-text"
-    },
     "extra": {
     "extra": {
-        "branch-alias": {
-            "dev-master": "1.5-dev"
+        "bamarni-bin": {
+            "bin-links": true,
+            "forward-command": false
         }
         }
     },
     },
     "config": {
     "config": {
+        "allow-plugins": {
+            "bamarni/composer-bin-plugin": true
+        },
         "preferred-install": "dist",
         "preferred-install": "dist",
         "sort-packages": true
         "sort-packages": true
     }
     }

+ 3 - 1
vendor/guzzlehttp/promises/src/AggregateException.php

@@ -1,5 +1,7 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 /**
 /**
@@ -7,7 +9,7 @@ namespace GuzzleHttp\Promise;
  */
  */
 class AggregateException extends RejectionException
 class AggregateException extends RejectionException
 {
 {
-    public function __construct($msg, array $reasons)
+    public function __construct(string $msg, array $reasons)
     {
     {
         parent::__construct(
         parent::__construct(
             $reasons,
             $reasons,

+ 2 - 0
vendor/guzzlehttp/promises/src/CancellationException.php

@@ -1,5 +1,7 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 /**
 /**

+ 16 - 23
vendor/guzzlehttp/promises/src/Coroutine.php

@@ -1,8 +1,9 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
-use Exception;
 use Generator;
 use Generator;
 use Throwable;
 use Throwable;
 
 
@@ -27,7 +28,7 @@ use Throwable;
  *         $value = (yield createPromise('a'));
  *         $value = (yield createPromise('a'));
  *         try {
  *         try {
  *             $value = (yield createPromise($value . 'b'));
  *             $value = (yield createPromise($value . 'b'));
- *         } catch (\Exception $e) {
+ *         } catch (\Throwable $e) {
  *             // The promise was rejected.
  *             // The promise was rejected.
  *         }
  *         }
  *         yield $value . 'c';
  *         yield $value . 'c';
@@ -40,7 +41,7 @@ use Throwable;
  *
  *
  * @return Promise
  * @return Promise
  *
  *
- * @link https://github.com/petkaantonov/bluebird/blob/master/API.md#generators inspiration
+ * @see https://github.com/petkaantonov/bluebird/blob/master/API.md#generators inspiration
  */
  */
 final class Coroutine implements PromiseInterface
 final class Coroutine implements PromiseInterface
 {
 {
@@ -62,15 +63,13 @@ final class Coroutine implements PromiseInterface
     public function __construct(callable $generatorFn)
     public function __construct(callable $generatorFn)
     {
     {
         $this->generator = $generatorFn();
         $this->generator = $generatorFn();
-        $this->result = new Promise(function () {
+        $this->result = new Promise(function (): void {
             while (isset($this->currentPromise)) {
             while (isset($this->currentPromise)) {
                 $this->currentPromise->wait();
                 $this->currentPromise->wait();
             }
             }
         });
         });
         try {
         try {
             $this->nextCoroutine($this->generator->current());
             $this->nextCoroutine($this->generator->current());
-        } catch (\Exception $exception) {
-            $this->result->reject($exception);
         } catch (Throwable $throwable) {
         } catch (Throwable $throwable) {
             $this->result->reject($throwable);
             $this->result->reject($throwable);
         }
         }
@@ -78,10 +77,8 @@ final class Coroutine implements PromiseInterface
 
 
     /**
     /**
      * Create a new coroutine.
      * Create a new coroutine.
-     *
-     * @return self
      */
      */
-    public static function of(callable $generatorFn)
+    public static function of(callable $generatorFn): self
     {
     {
         return new self($generatorFn);
         return new self($generatorFn);
     }
     }
@@ -89,42 +86,42 @@ final class Coroutine implements PromiseInterface
     public function then(
     public function then(
         callable $onFulfilled = null,
         callable $onFulfilled = null,
         callable $onRejected = null
         callable $onRejected = null
-    ) {
+    ): PromiseInterface {
         return $this->result->then($onFulfilled, $onRejected);
         return $this->result->then($onFulfilled, $onRejected);
     }
     }
 
 
-    public function otherwise(callable $onRejected)
+    public function otherwise(callable $onRejected): PromiseInterface
     {
     {
         return $this->result->otherwise($onRejected);
         return $this->result->otherwise($onRejected);
     }
     }
 
 
-    public function wait($unwrap = true)
+    public function wait(bool $unwrap = true)
     {
     {
         return $this->result->wait($unwrap);
         return $this->result->wait($unwrap);
     }
     }
 
 
-    public function getState()
+    public function getState(): string
     {
     {
         return $this->result->getState();
         return $this->result->getState();
     }
     }
 
 
-    public function resolve($value)
+    public function resolve($value): void
     {
     {
         $this->result->resolve($value);
         $this->result->resolve($value);
     }
     }
 
 
-    public function reject($reason)
+    public function reject($reason): void
     {
     {
         $this->result->reject($reason);
         $this->result->reject($reason);
     }
     }
 
 
-    public function cancel()
+    public function cancel(): void
     {
     {
         $this->currentPromise->cancel();
         $this->currentPromise->cancel();
         $this->result->cancel();
         $this->result->cancel();
     }
     }
 
 
-    private function nextCoroutine($yielded)
+    private function nextCoroutine($yielded): void
     {
     {
         $this->currentPromise = Create::promiseFor($yielded)
         $this->currentPromise = Create::promiseFor($yielded)
             ->then([$this, '_handleSuccess'], [$this, '_handleFailure']);
             ->then([$this, '_handleSuccess'], [$this, '_handleFailure']);
@@ -133,7 +130,7 @@ final class Coroutine implements PromiseInterface
     /**
     /**
      * @internal
      * @internal
      */
      */
-    public function _handleSuccess($value)
+    public function _handleSuccess($value): void
     {
     {
         unset($this->currentPromise);
         unset($this->currentPromise);
         try {
         try {
@@ -143,8 +140,6 @@ final class Coroutine implements PromiseInterface
             } else {
             } else {
                 $this->result->resolve($value);
                 $this->result->resolve($value);
             }
             }
-        } catch (Exception $exception) {
-            $this->result->reject($exception);
         } catch (Throwable $throwable) {
         } catch (Throwable $throwable) {
             $this->result->reject($throwable);
             $this->result->reject($throwable);
         }
         }
@@ -153,15 +148,13 @@ final class Coroutine implements PromiseInterface
     /**
     /**
      * @internal
      * @internal
      */
      */
-    public function _handleFailure($reason)
+    public function _handleFailure($reason): void
     {
     {
         unset($this->currentPromise);
         unset($this->currentPromise);
         try {
         try {
             $nextYield = $this->generator->throw(Create::exceptionFor($reason));
             $nextYield = $this->generator->throw(Create::exceptionFor($reason));
             // The throw was caught, so keep iterating on the coroutine
             // The throw was caught, so keep iterating on the coroutine
             $this->nextCoroutine($nextYield);
             $this->nextCoroutine($nextYield);
-        } catch (Exception $exception) {
-            $this->result->reject($exception);
         } catch (Throwable $throwable) {
         } catch (Throwable $throwable) {
             $this->result->reject($throwable);
             $this->result->reject($throwable);
         }
         }

+ 8 - 13
vendor/guzzlehttp/promises/src/Create.php

@@ -1,5 +1,7 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 final class Create
 final class Create
@@ -8,10 +10,8 @@ final class Create
      * Creates a promise for a value if the value is not a promise.
      * Creates a promise for a value if the value is not a promise.
      *
      *
      * @param mixed $value Promise or value.
      * @param mixed $value Promise or value.
-     *
-     * @return PromiseInterface
      */
      */
-    public static function promiseFor($value)
+    public static function promiseFor($value): PromiseInterface
     {
     {
         if ($value instanceof PromiseInterface) {
         if ($value instanceof PromiseInterface) {
             return $value;
             return $value;
@@ -23,6 +23,7 @@ final class Create
             $cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null;
             $cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null;
             $promise = new Promise($wfn, $cfn);
             $promise = new Promise($wfn, $cfn);
             $value->then([$promise, 'resolve'], [$promise, 'reject']);
             $value->then([$promise, 'resolve'], [$promise, 'reject']);
+
             return $promise;
             return $promise;
         }
         }
 
 
@@ -34,10 +35,8 @@ final class Create
      * If the provided reason is a promise, then it is returned as-is.
      * If the provided reason is a promise, then it is returned as-is.
      *
      *
      * @param mixed $reason Promise or reason.
      * @param mixed $reason Promise or reason.
-     *
-     * @return PromiseInterface
      */
      */
-    public static function rejectionFor($reason)
+    public static function rejectionFor($reason): PromiseInterface
     {
     {
         if ($reason instanceof PromiseInterface) {
         if ($reason instanceof PromiseInterface) {
             return $reason;
             return $reason;
@@ -50,12 +49,10 @@ final class Create
      * Create an exception for a rejected promise value.
      * Create an exception for a rejected promise value.
      *
      *
      * @param mixed $reason
      * @param mixed $reason
-     *
-     * @return \Exception|\Throwable
      */
      */
-    public static function exceptionFor($reason)
+    public static function exceptionFor($reason): \Throwable
     {
     {
-        if ($reason instanceof \Exception || $reason instanceof \Throwable) {
+        if ($reason instanceof \Throwable) {
             return $reason;
             return $reason;
         }
         }
 
 
@@ -66,10 +63,8 @@ final class Create
      * Returns an iterator for the given value.
      * Returns an iterator for the given value.
      *
      *
      * @param mixed $value
      * @param mixed $value
-     *
-     * @return \Iterator
      */
      */
-    public static function iterFor($value)
+    public static function iterFor($value): \Iterator
     {
     {
         if ($value instanceof \Iterator) {
         if ($value instanceof \Iterator) {
             return $value;
             return $value;

+ 11 - 15
vendor/guzzlehttp/promises/src/Each.php

@@ -1,5 +1,7 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 final class Each
 final class Each
@@ -20,17 +22,15 @@ final class Each
      * @param mixed    $iterable    Iterator or array to iterate over.
      * @param mixed    $iterable    Iterator or array to iterate over.
      * @param callable $onFulfilled
      * @param callable $onFulfilled
      * @param callable $onRejected
      * @param callable $onRejected
-     *
-     * @return PromiseInterface
      */
      */
     public static function of(
     public static function of(
         $iterable,
         $iterable,
         callable $onFulfilled = null,
         callable $onFulfilled = null,
         callable $onRejected = null
         callable $onRejected = null
-    ) {
+    ): PromiseInterface {
         return (new EachPromise($iterable, [
         return (new EachPromise($iterable, [
             'fulfilled' => $onFulfilled,
             'fulfilled' => $onFulfilled,
-            'rejected'  => $onRejected
+            'rejected' => $onRejected,
         ]))->promise();
         ]))->promise();
     }
     }
 
 
@@ -46,19 +46,17 @@ final class Each
      * @param int|callable $concurrency
      * @param int|callable $concurrency
      * @param callable     $onFulfilled
      * @param callable     $onFulfilled
      * @param callable     $onRejected
      * @param callable     $onRejected
-     *
-     * @return PromiseInterface
      */
      */
     public static function ofLimit(
     public static function ofLimit(
         $iterable,
         $iterable,
         $concurrency,
         $concurrency,
         callable $onFulfilled = null,
         callable $onFulfilled = null,
         callable $onRejected = null
         callable $onRejected = null
-    ) {
+    ): PromiseInterface {
         return (new EachPromise($iterable, [
         return (new EachPromise($iterable, [
-            'fulfilled'   => $onFulfilled,
-            'rejected'    => $onRejected,
-            'concurrency' => $concurrency
+            'fulfilled' => $onFulfilled,
+            'rejected' => $onRejected,
+            'concurrency' => $concurrency,
         ]))->promise();
         ]))->promise();
     }
     }
 
 
@@ -70,19 +68,17 @@ final class Each
      * @param mixed        $iterable
      * @param mixed        $iterable
      * @param int|callable $concurrency
      * @param int|callable $concurrency
      * @param callable     $onFulfilled
      * @param callable     $onFulfilled
-     *
-     * @return PromiseInterface
      */
      */
     public static function ofLimitAll(
     public static function ofLimitAll(
         $iterable,
         $iterable,
         $concurrency,
         $concurrency,
         callable $onFulfilled = null
         callable $onFulfilled = null
-    ) {
-        return each_limit(
+    ): PromiseInterface {
+        return self::ofLimit(
             $iterable,
             $iterable,
             $concurrency,
             $concurrency,
             $onFulfilled,
             $onFulfilled,
-            function ($reason, $idx, PromiseInterface $aggregate) {
+            function ($reason, $idx, PromiseInterface $aggregate): void {
                 $aggregate->reject($reason);
                 $aggregate->reject($reason);
             }
             }
         );
         );

+ 23 - 20
vendor/guzzlehttp/promises/src/EachPromise.php

@@ -1,10 +1,14 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 /**
 /**
  * Represents a promise that iterates over many promises and invokes
  * Represents a promise that iterates over many promises and invokes
  * side-effect functions in the process.
  * side-effect functions in the process.
+ *
+ * @final
  */
  */
 class EachPromise implements PromisorInterface
 class EachPromise implements PromisorInterface
 {
 {
@@ -69,7 +73,7 @@ class EachPromise implements PromisorInterface
     }
     }
 
 
     /** @psalm-suppress InvalidNullableReturnType */
     /** @psalm-suppress InvalidNullableReturnType */
-    public function promise()
+    public function promise(): PromiseInterface
     {
     {
         if ($this->aggregate) {
         if ($this->aggregate) {
             return $this->aggregate;
             return $this->aggregate;
@@ -82,21 +86,18 @@ class EachPromise implements PromisorInterface
             $this->refillPending();
             $this->refillPending();
         } catch (\Throwable $e) {
         } catch (\Throwable $e) {
             $this->aggregate->reject($e);
             $this->aggregate->reject($e);
-        } catch (\Exception $e) {
-            $this->aggregate->reject($e);
         }
         }
 
 
         /**
         /**
          * @psalm-suppress NullableReturnStatement
          * @psalm-suppress NullableReturnStatement
-         * @phpstan-ignore-next-line
          */
          */
         return $this->aggregate;
         return $this->aggregate;
     }
     }
 
 
-    private function createPromise()
+    private function createPromise(): void
     {
     {
         $this->mutex = false;
         $this->mutex = false;
-        $this->aggregate = new Promise(function () {
+        $this->aggregate = new Promise(function (): void {
             if ($this->checkIfFinished()) {
             if ($this->checkIfFinished()) {
                 return;
                 return;
             }
             }
@@ -113,7 +114,7 @@ class EachPromise implements PromisorInterface
         });
         });
 
 
         // Clear the references when the promise is resolved.
         // Clear the references when the promise is resolved.
-        $clearFn = function () {
+        $clearFn = function (): void {
             $this->iterable = $this->concurrency = $this->pending = null;
             $this->iterable = $this->concurrency = $this->pending = null;
             $this->onFulfilled = $this->onRejected = null;
             $this->onFulfilled = $this->onRejected = null;
             $this->nextPendingIndex = 0;
             $this->nextPendingIndex = 0;
@@ -122,11 +123,13 @@ class EachPromise implements PromisorInterface
         $this->aggregate->then($clearFn, $clearFn);
         $this->aggregate->then($clearFn, $clearFn);
     }
     }
 
 
-    private function refillPending()
+    private function refillPending(): void
     {
     {
         if (!$this->concurrency) {
         if (!$this->concurrency) {
             // Add all pending promises.
             // Add all pending promises.
-            while ($this->addPending() && $this->advanceIterator());
+            while ($this->addPending() && $this->advanceIterator()) {
+            }
+
             return;
             return;
         }
         }
 
 
@@ -147,10 +150,11 @@ class EachPromise implements PromisorInterface
         // next value to yield until promise callbacks are called.
         // next value to yield until promise callbacks are called.
         while (--$concurrency
         while (--$concurrency
             && $this->advanceIterator()
             && $this->advanceIterator()
-            && $this->addPending());
+            && $this->addPending()) {
+        }
     }
     }
 
 
-    private function addPending()
+    private function addPending(): bool
     {
     {
         if (!$this->iterable || !$this->iterable->valid()) {
         if (!$this->iterable || !$this->iterable->valid()) {
             return false;
             return false;
@@ -164,7 +168,7 @@ class EachPromise implements PromisorInterface
         $idx = $this->nextPendingIndex++;
         $idx = $this->nextPendingIndex++;
 
 
         $this->pending[$idx] = $promise->then(
         $this->pending[$idx] = $promise->then(
-            function ($value) use ($idx, $key) {
+            function ($value) use ($idx, $key): void {
                 if ($this->onFulfilled) {
                 if ($this->onFulfilled) {
                     call_user_func(
                     call_user_func(
                         $this->onFulfilled,
                         $this->onFulfilled,
@@ -175,7 +179,7 @@ class EachPromise implements PromisorInterface
                 }
                 }
                 $this->step($idx);
                 $this->step($idx);
             },
             },
-            function ($reason) use ($idx, $key) {
+            function ($reason) use ($idx, $key): void {
                 if ($this->onRejected) {
                 if ($this->onRejected) {
                     call_user_func(
                     call_user_func(
                         $this->onRejected,
                         $this->onRejected,
@@ -191,7 +195,7 @@ class EachPromise implements PromisorInterface
         return true;
         return true;
     }
     }
 
 
-    private function advanceIterator()
+    private function advanceIterator(): bool
     {
     {
         // Place a lock on the iterator so that we ensure to not recurse,
         // Place a lock on the iterator so that we ensure to not recurse,
         // preventing fatal generator errors.
         // preventing fatal generator errors.
@@ -204,19 +208,17 @@ class EachPromise implements PromisorInterface
         try {
         try {
             $this->iterable->next();
             $this->iterable->next();
             $this->mutex = false;
             $this->mutex = false;
+
             return true;
             return true;
         } catch (\Throwable $e) {
         } catch (\Throwable $e) {
             $this->aggregate->reject($e);
             $this->aggregate->reject($e);
             $this->mutex = false;
             $this->mutex = false;
-            return false;
-        } catch (\Exception $e) {
-            $this->aggregate->reject($e);
-            $this->mutex = false;
+
             return false;
             return false;
         }
         }
     }
     }
 
 
-    private function step($idx)
+    private function step(int $idx): void
     {
     {
         // If the promise was already resolved, then ignore this step.
         // If the promise was already resolved, then ignore this step.
         if (Is::settled($this->aggregate)) {
         if (Is::settled($this->aggregate)) {
@@ -234,11 +236,12 @@ class EachPromise implements PromisorInterface
         }
         }
     }
     }
 
 
-    private function checkIfFinished()
+    private function checkIfFinished(): bool
     {
     {
         if (!$this->pending && !$this->iterable->valid()) {
         if (!$this->pending && !$this->iterable->valid()) {
             // Resolve the promise if there's nothing left to do.
             // Resolve the promise if there's nothing left to do.
             $this->aggregate->resolve(null);
             $this->aggregate->resolve(null);
+
             return true;
             return true;
         }
         }
 
 

+ 17 - 12
vendor/guzzlehttp/promises/src/FulfilledPromise.php

@@ -1,5 +1,7 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 /**
 /**
@@ -7,11 +9,16 @@ namespace GuzzleHttp\Promise;
  *
  *
  * Thenning off of this promise will invoke the onFulfilled callback
  * Thenning off of this promise will invoke the onFulfilled callback
  * immediately and ignore other callbacks.
  * immediately and ignore other callbacks.
+ *
+ * @final
  */
  */
 class FulfilledPromise implements PromiseInterface
 class FulfilledPromise implements PromiseInterface
 {
 {
     private $value;
     private $value;
 
 
+    /**
+     * @param mixed $value
+     */
     public function __construct($value)
     public function __construct($value)
     {
     {
         if (is_object($value) && method_exists($value, 'then')) {
         if (is_object($value) && method_exists($value, 'then')) {
@@ -26,7 +33,7 @@ class FulfilledPromise implements PromiseInterface
     public function then(
     public function then(
         callable $onFulfilled = null,
         callable $onFulfilled = null,
         callable $onRejected = null
         callable $onRejected = null
-    ) {
+    ): PromiseInterface {
         // Return itself if there is no onFulfilled function.
         // Return itself if there is no onFulfilled function.
         if (!$onFulfilled) {
         if (!$onFulfilled) {
             return $this;
             return $this;
@@ -35,14 +42,12 @@ class FulfilledPromise implements PromiseInterface
         $queue = Utils::queue();
         $queue = Utils::queue();
         $p = new Promise([$queue, 'run']);
         $p = new Promise([$queue, 'run']);
         $value = $this->value;
         $value = $this->value;
-        $queue->add(static function () use ($p, $value, $onFulfilled) {
+        $queue->add(static function () use ($p, $value, $onFulfilled): void {
             if (Is::pending($p)) {
             if (Is::pending($p)) {
                 try {
                 try {
                     $p->resolve($onFulfilled($value));
                     $p->resolve($onFulfilled($value));
                 } catch (\Throwable $e) {
                 } catch (\Throwable $e) {
                     $p->reject($e);
                     $p->reject($e);
-                } catch (\Exception $e) {
-                    $p->reject($e);
                 }
                 }
             }
             }
         });
         });
@@ -50,34 +55,34 @@ class FulfilledPromise implements PromiseInterface
         return $p;
         return $p;
     }
     }
 
 
-    public function otherwise(callable $onRejected)
+    public function otherwise(callable $onRejected): PromiseInterface
     {
     {
         return $this->then(null, $onRejected);
         return $this->then(null, $onRejected);
     }
     }
 
 
-    public function wait($unwrap = true, $defaultDelivery = null)
+    public function wait(bool $unwrap = true)
     {
     {
         return $unwrap ? $this->value : null;
         return $unwrap ? $this->value : null;
     }
     }
 
 
-    public function getState()
+    public function getState(): string
     {
     {
         return self::FULFILLED;
         return self::FULFILLED;
     }
     }
 
 
-    public function resolve($value)
+    public function resolve($value): void
     {
     {
         if ($value !== $this->value) {
         if ($value !== $this->value) {
-            throw new \LogicException("Cannot resolve a fulfilled promise");
+            throw new \LogicException('Cannot resolve a fulfilled promise');
         }
         }
     }
     }
 
 
-    public function reject($reason)
+    public function reject($reason): void
     {
     {
-        throw new \LogicException("Cannot reject a fulfilled promise");
+        throw new \LogicException('Cannot reject a fulfilled promise');
     }
     }
 
 
-    public function cancel()
+    public function cancel(): void
     {
     {
         // pass
         // pass
     }
     }

+ 6 - 12
vendor/guzzlehttp/promises/src/Is.php

@@ -1,45 +1,39 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 final class Is
 final class Is
 {
 {
     /**
     /**
      * Returns true if a promise is pending.
      * Returns true if a promise is pending.
-     *
-     * @return bool
      */
      */
-    public static function pending(PromiseInterface $promise)
+    public static function pending(PromiseInterface $promise): bool
     {
     {
         return $promise->getState() === PromiseInterface::PENDING;
         return $promise->getState() === PromiseInterface::PENDING;
     }
     }
 
 
     /**
     /**
      * Returns true if a promise is fulfilled or rejected.
      * Returns true if a promise is fulfilled or rejected.
-     *
-     * @return bool
      */
      */
-    public static function settled(PromiseInterface $promise)
+    public static function settled(PromiseInterface $promise): bool
     {
     {
         return $promise->getState() !== PromiseInterface::PENDING;
         return $promise->getState() !== PromiseInterface::PENDING;
     }
     }
 
 
     /**
     /**
      * Returns true if a promise is fulfilled.
      * Returns true if a promise is fulfilled.
-     *
-     * @return bool
      */
      */
-    public static function fulfilled(PromiseInterface $promise)
+    public static function fulfilled(PromiseInterface $promise): bool
     {
     {
         return $promise->getState() === PromiseInterface::FULFILLED;
         return $promise->getState() === PromiseInterface::FULFILLED;
     }
     }
 
 
     /**
     /**
      * Returns true if a promise is rejected.
      * Returns true if a promise is rejected.
-     *
-     * @return bool
      */
      */
-    public static function rejected(PromiseInterface $promise)
+    public static function rejected(PromiseInterface $promise): bool
     {
     {
         return $promise->getState() === PromiseInterface::REJECTED;
         return $promise->getState() === PromiseInterface::REJECTED;
     }
     }

+ 27 - 24
vendor/guzzlehttp/promises/src/Promise.php

@@ -1,11 +1,15 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 /**
 /**
  * Promises/A+ implementation that avoids recursion when possible.
  * Promises/A+ implementation that avoids recursion when possible.
  *
  *
- * @link https://promisesaplus.com/
+ * @see https://promisesaplus.com/
+ *
+ * @final
  */
  */
 class Promise implements PromiseInterface
 class Promise implements PromiseInterface
 {
 {
@@ -31,33 +35,36 @@ class Promise implements PromiseInterface
     public function then(
     public function then(
         callable $onFulfilled = null,
         callable $onFulfilled = null,
         callable $onRejected = null
         callable $onRejected = null
-    ) {
+    ): PromiseInterface {
         if ($this->state === self::PENDING) {
         if ($this->state === self::PENDING) {
             $p = new Promise(null, [$this, 'cancel']);
             $p = new Promise(null, [$this, 'cancel']);
             $this->handlers[] = [$p, $onFulfilled, $onRejected];
             $this->handlers[] = [$p, $onFulfilled, $onRejected];
             $p->waitList = $this->waitList;
             $p->waitList = $this->waitList;
             $p->waitList[] = $this;
             $p->waitList[] = $this;
+
             return $p;
             return $p;
         }
         }
 
 
         // Return a fulfilled promise and immediately invoke any callbacks.
         // Return a fulfilled promise and immediately invoke any callbacks.
         if ($this->state === self::FULFILLED) {
         if ($this->state === self::FULFILLED) {
             $promise = Create::promiseFor($this->result);
             $promise = Create::promiseFor($this->result);
+
             return $onFulfilled ? $promise->then($onFulfilled) : $promise;
             return $onFulfilled ? $promise->then($onFulfilled) : $promise;
         }
         }
 
 
         // It's either cancelled or rejected, so return a rejected promise
         // It's either cancelled or rejected, so return a rejected promise
         // and immediately invoke any callbacks.
         // and immediately invoke any callbacks.
         $rejection = Create::rejectionFor($this->result);
         $rejection = Create::rejectionFor($this->result);
+
         return $onRejected ? $rejection->then(null, $onRejected) : $rejection;
         return $onRejected ? $rejection->then(null, $onRejected) : $rejection;
     }
     }
 
 
-    public function otherwise(callable $onRejected)
+    public function otherwise(callable $onRejected): PromiseInterface
     {
     {
         return $this->then(null, $onRejected);
         return $this->then(null, $onRejected);
     }
     }
 
 
-    public function wait($unwrap = true)
+    public function wait(bool $unwrap = true)
     {
     {
         $this->waitIfPending();
         $this->waitIfPending();
 
 
@@ -73,12 +80,12 @@ class Promise implements PromiseInterface
         }
         }
     }
     }
 
 
-    public function getState()
+    public function getState(): string
     {
     {
         return $this->state;
         return $this->state;
     }
     }
 
 
-    public function cancel()
+    public function cancel(): void
     {
     {
         if ($this->state !== self::PENDING) {
         if ($this->state !== self::PENDING) {
             return;
             return;
@@ -93,8 +100,6 @@ class Promise implements PromiseInterface
                 $fn();
                 $fn();
             } catch (\Throwable $e) {
             } catch (\Throwable $e) {
                 $this->reject($e);
                 $this->reject($e);
-            } catch (\Exception $e) {
-                $this->reject($e);
             }
             }
         }
         }
 
 
@@ -105,17 +110,17 @@ class Promise implements PromiseInterface
         }
         }
     }
     }
 
 
-    public function resolve($value)
+    public function resolve($value): void
     {
     {
         $this->settle(self::FULFILLED, $value);
         $this->settle(self::FULFILLED, $value);
     }
     }
 
 
-    public function reject($reason)
+    public function reject($reason): void
     {
     {
         $this->settle(self::REJECTED, $reason);
         $this->settle(self::REJECTED, $reason);
     }
     }
 
 
-    private function settle($state, $value)
+    private function settle(string $state, $value): void
     {
     {
         if ($this->state !== self::PENDING) {
         if ($this->state !== self::PENDING) {
             // Ignore calls with the same resolution.
             // Ignore calls with the same resolution.
@@ -148,7 +153,7 @@ class Promise implements PromiseInterface
         if (!is_object($value) || !method_exists($value, 'then')) {
         if (!is_object($value) || !method_exists($value, 'then')) {
             $id = $state === self::FULFILLED ? 1 : 2;
             $id = $state === self::FULFILLED ? 1 : 2;
             // It's a success, so resolve the handlers in the queue.
             // It's a success, so resolve the handlers in the queue.
-            Utils::queue()->add(static function () use ($id, $value, $handlers) {
+            Utils::queue()->add(static function () use ($id, $value, $handlers): void {
                 foreach ($handlers as $handler) {
                 foreach ($handlers as $handler) {
                     self::callHandler($id, $value, $handler);
                     self::callHandler($id, $value, $handler);
                 }
                 }
@@ -159,12 +164,12 @@ class Promise implements PromiseInterface
         } else {
         } else {
             // Resolve the handlers when the forwarded promise is resolved.
             // Resolve the handlers when the forwarded promise is resolved.
             $value->then(
             $value->then(
-                static function ($value) use ($handlers) {
+                static function ($value) use ($handlers): void {
                     foreach ($handlers as $handler) {
                     foreach ($handlers as $handler) {
                         self::callHandler(1, $value, $handler);
                         self::callHandler(1, $value, $handler);
                     }
                     }
                 },
                 },
-                static function ($reason) use ($handlers) {
+                static function ($reason) use ($handlers): void {
                     foreach ($handlers as $handler) {
                     foreach ($handlers as $handler) {
                         self::callHandler(2, $reason, $handler);
                         self::callHandler(2, $reason, $handler);
                     }
                     }
@@ -180,7 +185,7 @@ class Promise implements PromiseInterface
      * @param mixed $value   Value to pass to the callback.
      * @param mixed $value   Value to pass to the callback.
      * @param array $handler Array of handler data (promise and callbacks).
      * @param array $handler Array of handler data (promise and callbacks).
      */
      */
-    private static function callHandler($index, $value, array $handler)
+    private static function callHandler(int $index, $value, array $handler): void
     {
     {
         /** @var PromiseInterface $promise */
         /** @var PromiseInterface $promise */
         $promise = $handler[0];
         $promise = $handler[0];
@@ -211,12 +216,10 @@ class Promise implements PromiseInterface
             }
             }
         } catch (\Throwable $reason) {
         } catch (\Throwable $reason) {
             $promise->reject($reason);
             $promise->reject($reason);
-        } catch (\Exception $reason) {
-            $promise->reject($reason);
         }
         }
     }
     }
 
 
-    private function waitIfPending()
+    private function waitIfPending(): void
     {
     {
         if ($this->state !== self::PENDING) {
         if ($this->state !== self::PENDING) {
             return;
             return;
@@ -227,9 +230,9 @@ class Promise implements PromiseInterface
         } else {
         } else {
             // If there's no wait function, then reject the promise.
             // If there's no wait function, then reject the promise.
             $this->reject('Cannot wait on a promise that has '
             $this->reject('Cannot wait on a promise that has '
-                . 'no internal wait function. You must provide a wait '
-                . 'function when constructing the promise to be able to '
-                . 'wait on a promise.');
+                .'no internal wait function. You must provide a wait '
+                .'function when constructing the promise to be able to '
+                .'wait on a promise.');
         }
         }
 
 
         Utils::queue()->run();
         Utils::queue()->run();
@@ -240,13 +243,13 @@ class Promise implements PromiseInterface
         }
         }
     }
     }
 
 
-    private function invokeWaitFn()
+    private function invokeWaitFn(): void
     {
     {
         try {
         try {
             $wfn = $this->waitFn;
             $wfn = $this->waitFn;
             $this->waitFn = null;
             $this->waitFn = null;
             $wfn(true);
             $wfn(true);
-        } catch (\Exception $reason) {
+        } catch (\Throwable $reason) {
             if ($this->state === self::PENDING) {
             if ($this->state === self::PENDING) {
                 // The promise has not been resolved yet, so reject the promise
                 // The promise has not been resolved yet, so reject the promise
                 // with the exception.
                 // with the exception.
@@ -259,7 +262,7 @@ class Promise implements PromiseInterface
         }
         }
     }
     }
 
 
-    private function invokeWaitList()
+    private function invokeWaitList(): void
     {
     {
         $waitList = $this->waitList;
         $waitList = $this->waitList;
         $this->waitList = null;
         $this->waitList = null;

+ 14 - 20
vendor/guzzlehttp/promises/src/PromiseInterface.php

@@ -1,5 +1,7 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 /**
 /**
@@ -9,13 +11,13 @@ namespace GuzzleHttp\Promise;
  * which registers callbacks to receive either a promise’s eventual value or
  * which registers callbacks to receive either a promise’s eventual value or
  * the reason why the promise cannot be fulfilled.
  * the reason why the promise cannot be fulfilled.
  *
  *
- * @link https://promisesaplus.com/
+ * @see https://promisesaplus.com/
  */
  */
 interface PromiseInterface
 interface PromiseInterface
 {
 {
-    const PENDING = 'pending';
-    const FULFILLED = 'fulfilled';
-    const REJECTED = 'rejected';
+    public const PENDING = 'pending';
+    public const FULFILLED = 'fulfilled';
+    public const REJECTED = 'rejected';
 
 
     /**
     /**
      * Appends fulfillment and rejection handlers to the promise, and returns
      * Appends fulfillment and rejection handlers to the promise, and returns
@@ -23,13 +25,11 @@ interface PromiseInterface
      *
      *
      * @param callable $onFulfilled Invoked when the promise fulfills.
      * @param callable $onFulfilled Invoked when the promise fulfills.
      * @param callable $onRejected  Invoked when the promise is rejected.
      * @param callable $onRejected  Invoked when the promise is rejected.
-     *
-     * @return PromiseInterface
      */
      */
     public function then(
     public function then(
         callable $onFulfilled = null,
         callable $onFulfilled = null,
         callable $onRejected = null
         callable $onRejected = null
-    );
+    ): PromiseInterface;
 
 
     /**
     /**
      * Appends a rejection handler callback to the promise, and returns a new
      * Appends a rejection handler callback to the promise, and returns a new
@@ -38,20 +38,16 @@ interface PromiseInterface
      * fulfilled.
      * fulfilled.
      *
      *
      * @param callable $onRejected Invoked when the promise is rejected.
      * @param callable $onRejected Invoked when the promise is rejected.
-     *
-     * @return PromiseInterface
      */
      */
-    public function otherwise(callable $onRejected);
+    public function otherwise(callable $onRejected): PromiseInterface;
 
 
     /**
     /**
      * Get the state of the promise ("pending", "rejected", or "fulfilled").
      * Get the state of the promise ("pending", "rejected", or "fulfilled").
      *
      *
      * The three states can be checked against the constants defined on
      * The three states can be checked against the constants defined on
      * PromiseInterface: PENDING, FULFILLED, and REJECTED.
      * PromiseInterface: PENDING, FULFILLED, and REJECTED.
-     *
-     * @return string
      */
      */
-    public function getState();
+    public function getState(): string;
 
 
     /**
     /**
      * Resolve the promise with the given value.
      * Resolve the promise with the given value.
@@ -60,7 +56,7 @@ interface PromiseInterface
      *
      *
      * @throws \RuntimeException if the promise is already resolved.
      * @throws \RuntimeException if the promise is already resolved.
      */
      */
-    public function resolve($value);
+    public function resolve($value): void;
 
 
     /**
     /**
      * Reject the promise with the given reason.
      * Reject the promise with the given reason.
@@ -69,14 +65,14 @@ interface PromiseInterface
      *
      *
      * @throws \RuntimeException if the promise is already resolved.
      * @throws \RuntimeException if the promise is already resolved.
      */
      */
-    public function reject($reason);
+    public function reject($reason): void;
 
 
     /**
     /**
      * Cancels the promise if possible.
      * Cancels the promise if possible.
      *
      *
-     * @link https://github.com/promises-aplus/cancellation-spec/issues/7
+     * @see https://github.com/promises-aplus/cancellation-spec/issues/7
      */
      */
-    public function cancel();
+    public function cancel(): void;
 
 
     /**
     /**
      * Waits until the promise completes if possible.
      * Waits until the promise completes if possible.
@@ -86,12 +82,10 @@ interface PromiseInterface
      *
      *
      * If the promise cannot be waited on, then the promise will be rejected.
      * If the promise cannot be waited on, then the promise will be rejected.
      *
      *
-     * @param bool $unwrap
-     *
      * @return mixed
      * @return mixed
      *
      *
      * @throws \LogicException if the promise has no wait function or if the
      * @throws \LogicException if the promise has no wait function or if the
      *                         promise does not settle after waiting.
      *                         promise does not settle after waiting.
      */
      */
-    public function wait($unwrap = true);
+    public function wait(bool $unwrap = true);
 }
 }

+ 3 - 3
vendor/guzzlehttp/promises/src/PromisorInterface.php

@@ -1,5 +1,7 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 /**
 /**
@@ -9,8 +11,6 @@ interface PromisorInterface
 {
 {
     /**
     /**
      * Returns a promise.
      * Returns a promise.
-     *
-     * @return PromiseInterface
      */
      */
-    public function promise();
+    public function promise(): PromiseInterface;
 }
 }

+ 17 - 13
vendor/guzzlehttp/promises/src/RejectedPromise.php

@@ -1,5 +1,7 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 /**
 /**
@@ -7,11 +9,16 @@ namespace GuzzleHttp\Promise;
  *
  *
  * Thenning off of this promise will invoke the onRejected callback
  * Thenning off of this promise will invoke the onRejected callback
  * immediately and ignore other callbacks.
  * immediately and ignore other callbacks.
+ *
+ * @final
  */
  */
 class RejectedPromise implements PromiseInterface
 class RejectedPromise implements PromiseInterface
 {
 {
     private $reason;
     private $reason;
 
 
+    /**
+     * @param mixed $reason
+     */
     public function __construct($reason)
     public function __construct($reason)
     {
     {
         if (is_object($reason) && method_exists($reason, 'then')) {
         if (is_object($reason) && method_exists($reason, 'then')) {
@@ -26,7 +33,7 @@ class RejectedPromise implements PromiseInterface
     public function then(
     public function then(
         callable $onFulfilled = null,
         callable $onFulfilled = null,
         callable $onRejected = null
         callable $onRejected = null
-    ) {
+    ): PromiseInterface {
         // If there's no onRejected callback then just return self.
         // If there's no onRejected callback then just return self.
         if (!$onRejected) {
         if (!$onRejected) {
             return $this;
             return $this;
@@ -35,7 +42,7 @@ class RejectedPromise implements PromiseInterface
         $queue = Utils::queue();
         $queue = Utils::queue();
         $reason = $this->reason;
         $reason = $this->reason;
         $p = new Promise([$queue, 'run']);
         $p = new Promise([$queue, 'run']);
-        $queue->add(static function () use ($p, $reason, $onRejected) {
+        $queue->add(static function () use ($p, $reason, $onRejected): void {
             if (Is::pending($p)) {
             if (Is::pending($p)) {
                 try {
                 try {
                     // Return a resolved promise if onRejected does not throw.
                     // Return a resolved promise if onRejected does not throw.
@@ -43,9 +50,6 @@ class RejectedPromise implements PromiseInterface
                 } catch (\Throwable $e) {
                 } catch (\Throwable $e) {
                     // onRejected threw, so return a rejected promise.
                     // onRejected threw, so return a rejected promise.
                     $p->reject($e);
                     $p->reject($e);
-                } catch (\Exception $e) {
-                    // onRejected threw, so return a rejected promise.
-                    $p->reject($e);
                 }
                 }
             }
             }
         });
         });
@@ -53,12 +57,12 @@ class RejectedPromise implements PromiseInterface
         return $p;
         return $p;
     }
     }
 
 
-    public function otherwise(callable $onRejected)
+    public function otherwise(callable $onRejected): PromiseInterface
     {
     {
         return $this->then(null, $onRejected);
         return $this->then(null, $onRejected);
     }
     }
 
 
-    public function wait($unwrap = true, $defaultDelivery = null)
+    public function wait(bool $unwrap = true)
     {
     {
         if ($unwrap) {
         if ($unwrap) {
             throw Create::exceptionFor($this->reason);
             throw Create::exceptionFor($this->reason);
@@ -67,24 +71,24 @@ class RejectedPromise implements PromiseInterface
         return null;
         return null;
     }
     }
 
 
-    public function getState()
+    public function getState(): string
     {
     {
         return self::REJECTED;
         return self::REJECTED;
     }
     }
 
 
-    public function resolve($value)
+    public function resolve($value): void
     {
     {
-        throw new \LogicException("Cannot resolve a rejected promise");
+        throw new \LogicException('Cannot resolve a rejected promise');
     }
     }
 
 
-    public function reject($reason)
+    public function reject($reason): void
     {
     {
         if ($reason !== $this->reason) {
         if ($reason !== $this->reason) {
-            throw new \LogicException("Cannot reject a rejected promise");
+            throw new \LogicException('Cannot reject a rejected promise');
         }
         }
     }
     }
 
 
-    public function cancel()
+    public function cancel(): void
     {
     {
         // pass
         // pass
     }
     }

+ 7 - 6
vendor/guzzlehttp/promises/src/RejectionException.php

@@ -1,5 +1,7 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 /**
 /**
@@ -13,8 +15,8 @@ class RejectionException extends \RuntimeException
     private $reason;
     private $reason;
 
 
     /**
     /**
-     * @param mixed  $reason      Rejection reason.
-     * @param string $description Optional description
+     * @param mixed       $reason      Rejection reason.
+     * @param string|null $description Optional description.
      */
      */
     public function __construct($reason, $description = null)
     public function __construct($reason, $description = null)
     {
     {
@@ -23,14 +25,13 @@ class RejectionException extends \RuntimeException
         $message = 'The promise was rejected';
         $message = 'The promise was rejected';
 
 
         if ($description) {
         if ($description) {
-            $message .= ' with reason: ' . $description;
+            $message .= ' with reason: '.$description;
         } elseif (is_string($reason)
         } elseif (is_string($reason)
             || (is_object($reason) && method_exists($reason, '__toString'))
             || (is_object($reason) && method_exists($reason, '__toString'))
         ) {
         ) {
-            $message .= ' with reason: ' . $this->reason;
+            $message .= ' with reason: '.$this->reason;
         } elseif ($reason instanceof \JsonSerializable) {
         } elseif ($reason instanceof \JsonSerializable) {
-            $message .= ' with reason: '
-                . json_encode($this->reason, JSON_PRETTY_PRINT);
+            $message .= ' with reason: '.json_encode($this->reason, JSON_PRETTY_PRINT);
         }
         }
 
 
         parent::__construct($message);
         parent::__construct($message);

+ 10 - 6
vendor/guzzlehttp/promises/src/TaskQueue.php

@@ -1,5 +1,7 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 /**
 /**
@@ -10,16 +12,18 @@ namespace GuzzleHttp\Promise;
  * by calling the `run()` function of the global task queue in an event loop.
  * by calling the `run()` function of the global task queue in an event loop.
  *
  *
  *     GuzzleHttp\Promise\Utils::queue()->run();
  *     GuzzleHttp\Promise\Utils::queue()->run();
+ *
+ * @final
  */
  */
 class TaskQueue implements TaskQueueInterface
 class TaskQueue implements TaskQueueInterface
 {
 {
     private $enableShutdown = true;
     private $enableShutdown = true;
     private $queue = [];
     private $queue = [];
 
 
-    public function __construct($withShutdown = true)
+    public function __construct(bool $withShutdown = true)
     {
     {
         if ($withShutdown) {
         if ($withShutdown) {
-            register_shutdown_function(function () {
+            register_shutdown_function(function (): void {
                 if ($this->enableShutdown) {
                 if ($this->enableShutdown) {
                     // Only run the tasks if an E_ERROR didn't occur.
                     // Only run the tasks if an E_ERROR didn't occur.
                     $err = error_get_last();
                     $err = error_get_last();
@@ -31,17 +35,17 @@ class TaskQueue implements TaskQueueInterface
         }
         }
     }
     }
 
 
-    public function isEmpty()
+    public function isEmpty(): bool
     {
     {
         return !$this->queue;
         return !$this->queue;
     }
     }
 
 
-    public function add(callable $task)
+    public function add(callable $task): void
     {
     {
         $this->queue[] = $task;
         $this->queue[] = $task;
     }
     }
 
 
-    public function run()
+    public function run(): void
     {
     {
         while ($task = array_shift($this->queue)) {
         while ($task = array_shift($this->queue)) {
             /** @var callable $task */
             /** @var callable $task */
@@ -60,7 +64,7 @@ class TaskQueue implements TaskQueueInterface
      *
      *
      * Note: This shutdown will occur before any destructors are triggered.
      * Note: This shutdown will occur before any destructors are triggered.
      */
      */
-    public function disableShutdown()
+    public function disableShutdown(): void
     {
     {
         $this->enableShutdown = false;
         $this->enableShutdown = false;
     }
     }

+ 5 - 5
vendor/guzzlehttp/promises/src/TaskQueueInterface.php

@@ -1,24 +1,24 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 interface TaskQueueInterface
 interface TaskQueueInterface
 {
 {
     /**
     /**
      * Returns true if the queue is empty.
      * Returns true if the queue is empty.
-     *
-     * @return bool
      */
      */
-    public function isEmpty();
+    public function isEmpty(): bool;
 
 
     /**
     /**
      * Adds a task to the queue that will be executed the next time run is
      * Adds a task to the queue that will be executed the next time run is
      * called.
      * called.
      */
      */
-    public function add(callable $task);
+    public function add(callable $task): void;
 
 
     /**
     /**
      * Execute all of the pending task in the queue.
      * Execute all of the pending task in the queue.
      */
      */
-    public function run();
+    public function run(): void;
 }
 }

+ 26 - 43
vendor/guzzlehttp/promises/src/Utils.php

@@ -1,5 +1,7 @@
 <?php
 <?php
 
 
+declare(strict_types=1);
+
 namespace GuzzleHttp\Promise;
 namespace GuzzleHttp\Promise;
 
 
 final class Utils
 final class Utils
@@ -17,11 +19,9 @@ final class Utils
      * }
      * }
      * </code>
      * </code>
      *
      *
-     * @param TaskQueueInterface $assign Optionally specify a new queue instance.
-     *
-     * @return TaskQueueInterface
+     * @param TaskQueueInterface|null $assign Optionally specify a new queue instance.
      */
      */
-    public static function queue(TaskQueueInterface $assign = null)
+    public static function queue(TaskQueueInterface $assign = null): TaskQueueInterface
     {
     {
         static $queue;
         static $queue;
 
 
@@ -39,22 +39,18 @@ final class Utils
      * returns a promise that is fulfilled or rejected with the result.
      * returns a promise that is fulfilled or rejected with the result.
      *
      *
      * @param callable $task Task function to run.
      * @param callable $task Task function to run.
-     *
-     * @return PromiseInterface
      */
      */
-    public static function task(callable $task)
+    public static function task(callable $task): PromiseInterface
     {
     {
         $queue = self::queue();
         $queue = self::queue();
         $promise = new Promise([$queue, 'run']);
         $promise = new Promise([$queue, 'run']);
-        $queue->add(function () use ($task, $promise) {
+        $queue->add(function () use ($task, $promise): void {
             try {
             try {
                 if (Is::pending($promise)) {
                 if (Is::pending($promise)) {
                     $promise->resolve($task());
                     $promise->resolve($task());
                 }
                 }
             } catch (\Throwable $e) {
             } catch (\Throwable $e) {
                 $promise->reject($e);
                 $promise->reject($e);
-            } catch (\Exception $e) {
-                $promise->reject($e);
             }
             }
         });
         });
 
 
@@ -72,22 +68,18 @@ final class Utils
      * key mapping to the rejection reason of the promise.
      * key mapping to the rejection reason of the promise.
      *
      *
      * @param PromiseInterface $promise Promise or value.
      * @param PromiseInterface $promise Promise or value.
-     *
-     * @return array
      */
      */
-    public static function inspect(PromiseInterface $promise)
+    public static function inspect(PromiseInterface $promise): array
     {
     {
         try {
         try {
             return [
             return [
                 'state' => PromiseInterface::FULFILLED,
                 'state' => PromiseInterface::FULFILLED,
-                'value' => $promise->wait()
+                'value' => $promise->wait(),
             ];
             ];
         } catch (RejectionException $e) {
         } catch (RejectionException $e) {
             return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()];
             return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()];
         } catch (\Throwable $e) {
         } catch (\Throwable $e) {
             return ['state' => PromiseInterface::REJECTED, 'reason' => $e];
             return ['state' => PromiseInterface::REJECTED, 'reason' => $e];
-        } catch (\Exception $e) {
-            return ['state' => PromiseInterface::REJECTED, 'reason' => $e];
         }
         }
     }
     }
 
 
@@ -100,14 +92,12 @@ final class Utils
      * @see inspect for the inspection state array format.
      * @see inspect for the inspection state array format.
      *
      *
      * @param PromiseInterface[] $promises Traversable of promises to wait upon.
      * @param PromiseInterface[] $promises Traversable of promises to wait upon.
-     *
-     * @return array
      */
      */
-    public static function inspectAll($promises)
+    public static function inspectAll($promises): array
     {
     {
         $results = [];
         $results = [];
         foreach ($promises as $key => $promise) {
         foreach ($promises as $key => $promise) {
-            $results[$key] = inspect($promise);
+            $results[$key] = self::inspect($promise);
         }
         }
 
 
         return $results;
         return $results;
@@ -122,12 +112,9 @@ final class Utils
      *
      *
      * @param iterable<PromiseInterface> $promises Iterable of PromiseInterface objects to wait on.
      * @param iterable<PromiseInterface> $promises Iterable of PromiseInterface objects to wait on.
      *
      *
-     * @return array
-     *
-     * @throws \Exception on error
-     * @throws \Throwable on error in PHP >=7
+     * @throws \Throwable on error
      */
      */
-    public static function unwrap($promises)
+    public static function unwrap($promises): array
     {
     {
         $results = [];
         $results = [];
         foreach ($promises as $key => $promise) {
         foreach ($promises as $key => $promise) {
@@ -147,22 +134,21 @@ final class Utils
      *
      *
      * @param mixed $promises  Promises or values.
      * @param mixed $promises  Promises or values.
      * @param bool  $recursive If true, resolves new promises that might have been added to the stack during its own resolution.
      * @param bool  $recursive If true, resolves new promises that might have been added to the stack during its own resolution.
-     *
-     * @return PromiseInterface
      */
      */
-    public static function all($promises, $recursive = false)
+    public static function all($promises, bool $recursive = false): PromiseInterface
     {
     {
         $results = [];
         $results = [];
         $promise = Each::of(
         $promise = Each::of(
             $promises,
             $promises,
-            function ($value, $idx) use (&$results) {
+            function ($value, $idx) use (&$results): void {
                 $results[$idx] = $value;
                 $results[$idx] = $value;
             },
             },
-            function ($reason, $idx, Promise $aggregate) {
+            function ($reason, $idx, Promise $aggregate): void {
                 $aggregate->reject($reason);
                 $aggregate->reject($reason);
             }
             }
         )->then(function () use (&$results) {
         )->then(function () use (&$results) {
             ksort($results);
             ksort($results);
+
             return $results;
             return $results;
         });
         });
 
 
@@ -173,6 +159,7 @@ final class Utils
                         return self::all($promises, $recursive);
                         return self::all($promises, $recursive);
                     }
                     }
                 }
                 }
+
                 return $results;
                 return $results;
             });
             });
         }
         }
@@ -193,17 +180,15 @@ final class Utils
      *
      *
      * @param int   $count    Total number of promises.
      * @param int   $count    Total number of promises.
      * @param mixed $promises Promises or values.
      * @param mixed $promises Promises or values.
-     *
-     * @return PromiseInterface
      */
      */
-    public static function some($count, $promises)
+    public static function some(int $count, $promises): PromiseInterface
     {
     {
         $results = [];
         $results = [];
         $rejections = [];
         $rejections = [];
 
 
         return Each::of(
         return Each::of(
             $promises,
             $promises,
-            function ($value, $idx, PromiseInterface $p) use (&$results, $count) {
+            function ($value, $idx, PromiseInterface $p) use (&$results, $count): void {
                 if (Is::settled($p)) {
                 if (Is::settled($p)) {
                     return;
                     return;
                 }
                 }
@@ -212,7 +197,7 @@ final class Utils
                     $p->resolve(null);
                     $p->resolve(null);
                 }
                 }
             },
             },
-            function ($reason) use (&$rejections) {
+            function ($reason) use (&$rejections): void {
                 $rejections[] = $reason;
                 $rejections[] = $reason;
             }
             }
         )->then(
         )->then(
@@ -224,6 +209,7 @@ final class Utils
                     );
                     );
                 }
                 }
                 ksort($results);
                 ksort($results);
+
                 return array_values($results);
                 return array_values($results);
             }
             }
         );
         );
@@ -234,10 +220,8 @@ final class Utils
      * fulfillment value is not an array of 1 but the value directly.
      * fulfillment value is not an array of 1 but the value directly.
      *
      *
      * @param mixed $promises Promises or values.
      * @param mixed $promises Promises or values.
-     *
-     * @return PromiseInterface
      */
      */
-    public static function any($promises)
+    public static function any($promises): PromiseInterface
     {
     {
         return self::some(1, $promises)->then(function ($values) {
         return self::some(1, $promises)->then(function ($values) {
             return $values[0];
             return $values[0];
@@ -253,23 +237,22 @@ final class Utils
      * @see inspect for the inspection state array format.
      * @see inspect for the inspection state array format.
      *
      *
      * @param mixed $promises Promises or values.
      * @param mixed $promises Promises or values.
-     *
-     * @return PromiseInterface
      */
      */
-    public static function settle($promises)
+    public static function settle($promises): PromiseInterface
     {
     {
         $results = [];
         $results = [];
 
 
         return Each::of(
         return Each::of(
             $promises,
             $promises,
-            function ($value, $idx) use (&$results) {
+            function ($value, $idx) use (&$results): void {
                 $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value];
                 $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value];
             },
             },
-            function ($reason, $idx) use (&$results) {
+            function ($reason, $idx) use (&$results): void {
                 $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason];
                 $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason];
             }
             }
         )->then(function () use (&$results) {
         )->then(function () use (&$results) {
             ksort($results);
             ksort($results);
+
             return $results;
             return $results;
         });
         });
     }
     }

+ 0 - 363
vendor/guzzlehttp/promises/src/functions.php

@@ -1,363 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Promise;
-
-/**
- * Get the global task queue used for promise resolution.
- *
- * This task queue MUST be run in an event loop in order for promises to be
- * settled asynchronously. It will be automatically run when synchronously
- * waiting on a promise.
- *
- * <code>
- * while ($eventLoop->isRunning()) {
- *     GuzzleHttp\Promise\queue()->run();
- * }
- * </code>
- *
- * @param TaskQueueInterface $assign Optionally specify a new queue instance.
- *
- * @return TaskQueueInterface
- *
- * @deprecated queue will be removed in guzzlehttp/promises:2.0. Use Utils::queue instead.
- */
-function queue(TaskQueueInterface $assign = null)
-{
-    return Utils::queue($assign);
-}
-
-/**
- * Adds a function to run in the task queue when it is next `run()` and returns
- * a promise that is fulfilled or rejected with the result.
- *
- * @param callable $task Task function to run.
- *
- * @return PromiseInterface
- *
- * @deprecated task will be removed in guzzlehttp/promises:2.0. Use Utils::task instead.
- */
-function task(callable $task)
-{
-    return Utils::task($task);
-}
-
-/**
- * Creates a promise for a value if the value is not a promise.
- *
- * @param mixed $value Promise or value.
- *
- * @return PromiseInterface
- *
- * @deprecated promise_for will be removed in guzzlehttp/promises:2.0. Use Create::promiseFor instead.
- */
-function promise_for($value)
-{
-    return Create::promiseFor($value);
-}
-
-/**
- * Creates a rejected promise for a reason if the reason is not a promise. If
- * the provided reason is a promise, then it is returned as-is.
- *
- * @param mixed $reason Promise or reason.
- *
- * @return PromiseInterface
- *
- * @deprecated rejection_for will be removed in guzzlehttp/promises:2.0. Use Create::rejectionFor instead.
- */
-function rejection_for($reason)
-{
-    return Create::rejectionFor($reason);
-}
-
-/**
- * Create an exception for a rejected promise value.
- *
- * @param mixed $reason
- *
- * @return \Exception|\Throwable
- *
- * @deprecated exception_for will be removed in guzzlehttp/promises:2.0. Use Create::exceptionFor instead.
- */
-function exception_for($reason)
-{
-    return Create::exceptionFor($reason);
-}
-
-/**
- * Returns an iterator for the given value.
- *
- * @param mixed $value
- *
- * @return \Iterator
- *
- * @deprecated iter_for will be removed in guzzlehttp/promises:2.0. Use Create::iterFor instead.
- */
-function iter_for($value)
-{
-    return Create::iterFor($value);
-}
-
-/**
- * Synchronously waits on a promise to resolve and returns an inspection state
- * array.
- *
- * Returns a state associative array containing a "state" key mapping to a
- * valid promise state. If the state of the promise is "fulfilled", the array
- * will contain a "value" key mapping to the fulfilled value of the promise. If
- * the promise is rejected, the array will contain a "reason" key mapping to
- * the rejection reason of the promise.
- *
- * @param PromiseInterface $promise Promise or value.
- *
- * @return array
- *
- * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspect instead.
- */
-function inspect(PromiseInterface $promise)
-{
-    return Utils::inspect($promise);
-}
-
-/**
- * Waits on all of the provided promises, but does not unwrap rejected promises
- * as thrown exception.
- *
- * Returns an array of inspection state arrays.
- *
- * @see inspect for the inspection state array format.
- *
- * @param PromiseInterface[] $promises Traversable of promises to wait upon.
- *
- * @return array
- *
- * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspectAll instead.
- */
-function inspect_all($promises)
-{
-    return Utils::inspectAll($promises);
-}
-
-/**
- * Waits on all of the provided promises and returns the fulfilled values.
- *
- * Returns an array that contains the value of each promise (in the same order
- * the promises were provided). An exception is thrown if any of the promises
- * are rejected.
- *
- * @param iterable<PromiseInterface> $promises Iterable of PromiseInterface objects to wait on.
- *
- * @return array
- *
- * @throws \Exception on error
- * @throws \Throwable on error in PHP >=7
- *
- * @deprecated unwrap will be removed in guzzlehttp/promises:2.0. Use Utils::unwrap instead.
- */
-function unwrap($promises)
-{
-    return Utils::unwrap($promises);
-}
-
-/**
- * Given an array of promises, return a promise that is fulfilled when all the
- * items in the array are fulfilled.
- *
- * The promise's fulfillment value is an array with fulfillment values at
- * respective positions to the original array. If any promise in the array
- * rejects, the returned promise is rejected with the rejection reason.
- *
- * @param mixed $promises  Promises or values.
- * @param bool  $recursive If true, resolves new promises that might have been added to the stack during its own resolution.
- *
- * @return PromiseInterface
- *
- * @deprecated all will be removed in guzzlehttp/promises:2.0. Use Utils::all instead.
- */
-function all($promises, $recursive = false)
-{
-    return Utils::all($promises, $recursive);
-}
-
-/**
- * Initiate a competitive race between multiple promises or values (values will
- * become immediately fulfilled promises).
- *
- * When count amount of promises have been fulfilled, the returned promise is
- * fulfilled with an array that contains the fulfillment values of the winners
- * in order of resolution.
- *
- * This promise is rejected with a {@see AggregateException} if the number of
- * fulfilled promises is less than the desired $count.
- *
- * @param int   $count    Total number of promises.
- * @param mixed $promises Promises or values.
- *
- * @return PromiseInterface
- *
- * @deprecated some will be removed in guzzlehttp/promises:2.0. Use Utils::some instead.
- */
-function some($count, $promises)
-{
-    return Utils::some($count, $promises);
-}
-
-/**
- * Like some(), with 1 as count. However, if the promise fulfills, the
- * fulfillment value is not an array of 1 but the value directly.
- *
- * @param mixed $promises Promises or values.
- *
- * @return PromiseInterface
- *
- * @deprecated any will be removed in guzzlehttp/promises:2.0. Use Utils::any instead.
- */
-function any($promises)
-{
-    return Utils::any($promises);
-}
-
-/**
- * Returns a promise that is fulfilled when all of the provided promises have
- * been fulfilled or rejected.
- *
- * The returned promise is fulfilled with an array of inspection state arrays.
- *
- * @see inspect for the inspection state array format.
- *
- * @param mixed $promises Promises or values.
- *
- * @return PromiseInterface
- *
- * @deprecated settle will be removed in guzzlehttp/promises:2.0. Use Utils::settle instead.
- */
-function settle($promises)
-{
-    return Utils::settle($promises);
-}
-
-/**
- * Given an iterator that yields promises or values, returns a promise that is
- * fulfilled with a null value when the iterator has been consumed or the
- * aggregate promise has been fulfilled or rejected.
- *
- * $onFulfilled is a function that accepts the fulfilled value, iterator index,
- * and the aggregate promise. The callback can invoke any necessary side
- * effects and choose to resolve or reject the aggregate if needed.
- *
- * $onRejected is a function that accepts the rejection reason, iterator index,
- * and the aggregate promise. The callback can invoke any necessary side
- * effects and choose to resolve or reject the aggregate if needed.
- *
- * @param mixed    $iterable    Iterator or array to iterate over.
- * @param callable $onFulfilled
- * @param callable $onRejected
- *
- * @return PromiseInterface
- *
- * @deprecated each will be removed in guzzlehttp/promises:2.0. Use Each::of instead.
- */
-function each(
-    $iterable,
-    callable $onFulfilled = null,
-    callable $onRejected = null
-) {
-    return Each::of($iterable, $onFulfilled, $onRejected);
-}
-
-/**
- * Like each, but only allows a certain number of outstanding promises at any
- * given time.
- *
- * $concurrency may be an integer or a function that accepts the number of
- * pending promises and returns a numeric concurrency limit value to allow for
- * dynamic a concurrency size.
- *
- * @param mixed        $iterable
- * @param int|callable $concurrency
- * @param callable     $onFulfilled
- * @param callable     $onRejected
- *
- * @return PromiseInterface
- *
- * @deprecated each_limit will be removed in guzzlehttp/promises:2.0. Use Each::ofLimit instead.
- */
-function each_limit(
-    $iterable,
-    $concurrency,
-    callable $onFulfilled = null,
-    callable $onRejected = null
-) {
-    return Each::ofLimit($iterable, $concurrency, $onFulfilled, $onRejected);
-}
-
-/**
- * Like each_limit, but ensures that no promise in the given $iterable argument
- * is rejected. If any promise is rejected, then the aggregate promise is
- * rejected with the encountered rejection.
- *
- * @param mixed        $iterable
- * @param int|callable $concurrency
- * @param callable     $onFulfilled
- *
- * @return PromiseInterface
- *
- * @deprecated each_limit_all will be removed in guzzlehttp/promises:2.0. Use Each::ofLimitAll instead.
- */
-function each_limit_all(
-    $iterable,
-    $concurrency,
-    callable $onFulfilled = null
-) {
-    return Each::ofLimitAll($iterable, $concurrency, $onFulfilled);
-}
-
-/**
- * Returns true if a promise is fulfilled.
- *
- * @return bool
- *
- * @deprecated is_fulfilled will be removed in guzzlehttp/promises:2.0. Use Is::fulfilled instead.
- */
-function is_fulfilled(PromiseInterface $promise)
-{
-    return Is::fulfilled($promise);
-}
-
-/**
- * Returns true if a promise is rejected.
- *
- * @return bool
- *
- * @deprecated is_rejected will be removed in guzzlehttp/promises:2.0. Use Is::rejected instead.
- */
-function is_rejected(PromiseInterface $promise)
-{
-    return Is::rejected($promise);
-}
-
-/**
- * Returns true if a promise is fulfilled or rejected.
- *
- * @return bool
- *
- * @deprecated is_settled will be removed in guzzlehttp/promises:2.0. Use Is::settled instead.
- */
-function is_settled(PromiseInterface $promise)
-{
-    return Is::settled($promise);
-}
-
-/**
- * Create a new coroutine.
- *
- * @see Coroutine
- *
- * @return PromiseInterface
- *
- * @deprecated coroutine will be removed in guzzlehttp/promises:2.0. Use Coroutine::of instead.
- */
-function coroutine(callable $generatorFn)
-{
-    return Coroutine::of($generatorFn);
-}

+ 0 - 6
vendor/guzzlehttp/promises/src/functions_include.php

@@ -1,6 +0,0 @@
-<?php
-
-// Don't redefine the functions if included multiple times.
-if (!function_exists('GuzzleHttp\Promise\promise_for')) {
-    require __DIR__ . '/functions.php';
-}

+ 9 - 0
vendor/guzzlehttp/promises/vendor-bin/php-cs-fixer/composer.json

@@ -0,0 +1,9 @@
+{
+    "require": {
+        "php": "^7.4 || ^8.0",
+        "friendsofphp/php-cs-fixer": "3.16.0"
+    },
+    "config": {
+        "preferred-install": "dist"
+    }
+}

+ 10 - 0
vendor/guzzlehttp/promises/vendor-bin/phpstan/composer.json

@@ -0,0 +1,10 @@
+{
+    "require": {
+        "php": "^7.4 || ^8.0",
+        "phpstan/phpstan": "1.10.11",
+        "phpstan/phpstan-deprecation-rules": "1.1.3"
+    },
+    "config": {
+        "preferred-install": "dist"
+    }
+}

+ 9 - 0
vendor/guzzlehttp/promises/vendor-bin/psalm/composer.json

@@ -0,0 +1,9 @@
+{
+    "require": {
+        "php": "^7.4 || ^8.0",
+        "psalm/phar": "5.9.0"
+    },
+    "config": {
+        "preferred-install": "dist"
+    }
+}

+ 20 - 0
vendor/guzzlehttp/psr7/CHANGELOG.md

@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 
 ## Unreleased
 ## Unreleased
 
 
+## 2.5.0 - 2023-04-17
+
+### Changed
+
+- Adjusted `psr/http-message` version constraint to `^1.1 || ^2.0`
+
+## 2.4.5 - 2023-04-17
+
+### Fixed
+
+- Prevent possible warnings on unset variables in `ServerRequest::normalizeNestedFileSpec`
+- Fixed `Message::bodySummary` when `preg_match` fails
+- Fixed header validation issue
+
+## 2.4.4 - 2023-03-09
+
+### Changed
+
+- Removed the need for `AllowDynamicProperties` in `LazyOpenStream`
+
 ## 2.4.3 - 2022-10-26
 ## 2.4.3 - 2022-10-26
 
 
 ### Changed
 ### Changed

+ 8 - 0
vendor/guzzlehttp/psr7/README.md

@@ -8,6 +8,12 @@ functionality like query string parsing.
 ![Static analysis](https://github.com/guzzle/psr7/workflows/Static%20analysis/badge.svg)
 ![Static analysis](https://github.com/guzzle/psr7/workflows/Static%20analysis/badge.svg)
 
 
 
 
+# Installation
+
+```shell
+composer require guzzlehttp/psr7
+```
+
 # Stream implementation
 # Stream implementation
 
 
 This package comes with a number of stream implementations and stream
 This package comes with a number of stream implementations and stream
@@ -245,6 +251,8 @@ class EofCallbackStream implements StreamInterface
 
 
     private $callback;
     private $callback;
 
 
+    private $stream;
+
     public function __construct(StreamInterface $stream, callable $cb)
     public function __construct(StreamInterface $stream, callable $cb)
     {
     {
         $this->stream = $stream;
         $this->stream = $stream;

+ 1 - 4
vendor/guzzlehttp/psr7/composer.json

@@ -52,7 +52,7 @@
     "require": {
     "require": {
         "php": "^7.2.5 || ^8.0",
         "php": "^7.2.5 || ^8.0",
         "psr/http-factory": "^1.0",
         "psr/http-factory": "^1.0",
-        "psr/http-message": "^1.0",
+        "psr/http-message": "^1.1 || ^2.0",
         "ralouphie/getallheaders": "^3.0"
         "ralouphie/getallheaders": "^3.0"
     },
     },
     "provide": {
     "provide": {
@@ -81,9 +81,6 @@
         "bamarni-bin": {
         "bamarni-bin": {
             "bin-links": true,
             "bin-links": true,
             "forward-command": false
             "forward-command": false
-        },
-        "branch-alias": {
-            "dev-master": "2.4-dev"
         }
         }
     },
     },
     "config": {
     "config": {

+ 9 - 1
vendor/guzzlehttp/psr7/src/LazyOpenStream.php

@@ -10,7 +10,6 @@ use Psr\Http\Message\StreamInterface;
  * Lazily reads or writes to a file that is opened only after an IO operation
  * Lazily reads or writes to a file that is opened only after an IO operation
  * take place on the stream.
  * take place on the stream.
  */
  */
-#[\AllowDynamicProperties]
 final class LazyOpenStream implements StreamInterface
 final class LazyOpenStream implements StreamInterface
 {
 {
     use StreamDecoratorTrait;
     use StreamDecoratorTrait;
@@ -21,6 +20,11 @@ final class LazyOpenStream implements StreamInterface
     /** @var string */
     /** @var string */
     private $mode;
     private $mode;
 
 
+    /**
+     * @var StreamInterface
+     */
+    private $stream;
+
     /**
     /**
      * @param string $filename File to lazily open
      * @param string $filename File to lazily open
      * @param string $mode     fopen mode to use when opening the stream
      * @param string $mode     fopen mode to use when opening the stream
@@ -29,6 +33,10 @@ final class LazyOpenStream implements StreamInterface
     {
     {
         $this->filename = $filename;
         $this->filename = $filename;
         $this->mode = $mode;
         $this->mode = $mode;
+
+        // unsetting the property forces the first access to go through
+        // __get().
+        unset($this->stream);
     }
     }
 
 
     /**
     /**

+ 1 - 1
vendor/guzzlehttp/psr7/src/Message.php

@@ -77,7 +77,7 @@ final class Message
 
 
         // Matches any printable character, including unicode characters:
         // Matches any printable character, including unicode characters:
         // letters, marks, numbers, punctuation, spacing, and separators.
         // letters, marks, numbers, punctuation, spacing, and separators.
-        if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/u', $summary)) {
+        if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/u', $summary) !== 0) {
             return null;
             return null;
         }
         }
 
 

+ 6 - 7
vendor/guzzlehttp/psr7/src/MessageTrait.php

@@ -224,12 +224,9 @@ trait MessageTrait
             ));
             ));
         }
         }
 
 
-        if (! preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/', $header)) {
+        if (! preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/D', $header)) {
             throw new \InvalidArgumentException(
             throw new \InvalidArgumentException(
-                sprintf(
-                    '"%s" is not valid header name',
-                    $header
-                )
+                sprintf('"%s" is not valid header name.', $header)
             );
             );
         }
         }
     }
     }
@@ -257,8 +254,10 @@ trait MessageTrait
         // Clients must not send a request with line folding and a server sending folded headers is
         // Clients must not send a request with line folding and a server sending folded headers is
         // likely very rare. Line folding is a fairly obscure feature of HTTP/1.1 and thus not accepting
         // likely very rare. Line folding is a fairly obscure feature of HTTP/1.1 and thus not accepting
         // folding is not likely to break any legitimate use case.
         // folding is not likely to break any legitimate use case.
-        if (! preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/', $value)) {
-            throw new \InvalidArgumentException(sprintf('"%s" is not valid header value', $value));
+        if (! preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/D', $value)) {
+            throw new \InvalidArgumentException(
+                sprintf('"%s" is not valid header value.', $value)
+            );
         }
         }
     }
     }
 }
 }

+ 4 - 4
vendor/guzzlehttp/psr7/src/ServerRequest.php

@@ -144,10 +144,10 @@ class ServerRequest extends Request implements ServerRequestInterface
         foreach (array_keys($files['tmp_name']) as $key) {
         foreach (array_keys($files['tmp_name']) as $key) {
             $spec = [
             $spec = [
                 'tmp_name' => $files['tmp_name'][$key],
                 'tmp_name' => $files['tmp_name'][$key],
-                'size'     => $files['size'][$key],
-                'error'    => $files['error'][$key],
-                'name'     => $files['name'][$key],
-                'type'     => $files['type'][$key],
+                'size'     => $files['size'][$key] ?? null,
+                'error'    => $files['error'][$key] ?? null,
+                'name'     => $files['name'][$key] ?? null,
+                'type'     => $files['type'][$key] ?? null,
             ];
             ];
             $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec);
             $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec);
         }
         }

+ 5 - 0
vendor/laminas/laminas-escaper/.laminas-ci.json

@@ -0,0 +1,5 @@
+{
+    "ignore_php_platform_requirements": {
+        "8.1": true
+    }
+}

+ 1 - 0
vendor/laminas/laminas-escaper/COPYRIGHT.md

@@ -0,0 +1 @@
+Copyright (c) 2020 Laminas Project a Series of LF Projects, LLC. (https://getlaminas.org/)

+ 26 - 0
vendor/laminas/laminas-escaper/LICENSE.md

@@ -0,0 +1,26 @@
+Copyright (c) 2020 Laminas Project a Series of LF Projects, LLC.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+- Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+- Neither the name of Laminas Foundation nor the names of its contributors may
+  be used to endorse or promote products derived from this software without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+ 28 - 0
vendor/laminas/laminas-escaper/README.md

@@ -0,0 +1,28 @@
+# laminas-escaper
+
+[![Build Status](https://github.com/laminas/laminas-escaper/actions/workflows/continuous-integration.yml/badge.svg)](https://github.com/laminas/laminas-escaper/actions/workflows/continuous-integration.yml)
+[![Coverage Status](https://coveralls.io/repos/github/laminas/laminas-escaper/badge.svg?branch=master)](https://coveralls.io/github/laminas/laminas-escaper?branch=master)
+
+The OWASP Top 10 web security risks study lists Cross-Site Scripting (XSS) in
+second place. PHP’s sole functionality against XSS is limited to two functions
+of which one is commonly misapplied. Thus, the laminas-escaper component was written.
+It offers developers a way to escape output and defend from XSS and related
+vulnerabilities by introducing contextual escaping based on peer-reviewed rules.
+
+## Installation
+
+Run the following to install this library:
+
+```bash
+$ composer require laminas/laminas-escaper
+```
+
+## Documentation
+
+Browse the documentation online at https://docs.laminas.dev/laminas-escaper/
+
+## Support
+
+* [Issues](https://github.com/laminas/laminas-escaper/issues/)
+* [Chat](https://laminas.dev/chat/)
+* [Forum](https://discourse.laminas.dev/)

+ 60 - 0
vendor/laminas/laminas-escaper/composer.json

@@ -0,0 +1,60 @@
+{
+    "name": "laminas/laminas-escaper",
+    "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs",
+    "license": "BSD-3-Clause",
+    "keywords": [
+        "laminas",
+        "escaper"
+    ],
+    "homepage": "https://laminas.dev",
+    "support": {
+        "docs": "https://docs.laminas.dev/laminas-escaper/",
+        "issues": "https://github.com/laminas/laminas-escaper/issues",
+        "source": "https://github.com/laminas/laminas-escaper",
+        "rss": "https://github.com/laminas/laminas-escaper/releases.atom",
+        "chat": "https://laminas.dev/chat",
+        "forum": "https://discourse.laminas.dev"
+    },
+    "config": {
+        "sort-packages": true
+    },
+    "extra": {
+    },
+    "require": {
+        "php": "^7.3 || ~8.0.0 || ~8.1.0"
+    },
+    "suggest": {
+        "ext-iconv": "*",
+        "ext-mbstring": "*"
+    },
+    "require-dev": {
+        "laminas/laminas-coding-standard": "~2.3.0",
+        "phpunit/phpunit": "^9.3",
+        "psalm/plugin-phpunit": "^0.12.2",
+        "vimeo/psalm": "^3.16"
+    },
+    "autoload": {
+        "psr-4": {
+            "Laminas\\Escaper\\": "src/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "LaminasTest\\Escaper\\": "test/"
+        }
+    },
+    "scripts": {
+        "check": [
+            "@cs-check",
+            "@test"
+        ],
+        "cs-check": "phpcs",
+        "cs-fix": "phpcbf",
+        "static-analysis": "psalm --shepherd --stats",
+        "test": "phpunit --colors=always",
+        "test-coverage": "phpunit --colors=always --coverage-clover clover.xml"
+    },
+    "conflict": {
+        "zendframework/zend-escaper": "*"
+    }
+}

+ 21 - 0
vendor/laminas/laminas-escaper/phpcs.xml.dist

@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<ruleset
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:noNamespaceSchemaLocation="./vendor/squizlabs/php_codesniffer/phpcs.xsd">
+
+    <arg name="basepath" value="."/>
+    <arg name="cache" value=".phpcs-cache"/>
+    <arg name="colors"/>
+    <arg name="extensions" value="php"/>
+    <arg name="parallel" value="80"/>
+
+    <!-- Show progress -->
+    <arg value="p"/>
+
+    <!-- Paths to check -->
+    <file>src</file>
+    <file>test</file>
+
+    <!-- Include all rules from Laminas Coding Standard -->
+    <rule ref="LaminasCodingStandard"/>
+</ruleset>

+ 59 - 0
vendor/laminas/laminas-escaper/psalm-baseline.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<files psalm-version="3.18.2@19aa905f7c3c7350569999a93c40ae91ae4e1626">
+  <file src="src/Escaper.php">
+    <MixedArgument occurrences="10">
+      <code>$chr</code>
+      <code>$chr</code>
+      <code>$chr</code>
+      <code>$chr</code>
+      <code>$chr</code>
+      <code>$chr</code>
+      <code>$chr</code>
+      <code>$chr</code>
+      <code>$chr</code>
+      <code>$chr</code>
+    </MixedArgument>
+    <MixedArgumentTypeCoercion occurrences="3">
+      <code>$this-&gt;cssMatcher</code>
+      <code>$this-&gt;htmlAttrMatcher</code>
+      <code>$this-&gt;jsMatcher</code>
+    </MixedArgumentTypeCoercion>
+    <MixedAssignment occurrences="3">
+      <code>$chr</code>
+      <code>$chr</code>
+      <code>$chr</code>
+    </MixedAssignment>
+    <MixedOperand occurrences="1">
+      <code>static::$htmlNamedEntityMap[$ord]</code>
+    </MixedOperand>
+    <PossiblyInvalidArgument occurrences="1">
+      <code>$from</code>
+    </PossiblyInvalidArgument>
+  </file>
+  <file src="test/EscaperTest.php">
+    <InvalidReturnStatement occurrences="5"/>
+    <InvalidReturnType occurrences="5">
+      <code>array&lt;string, array{0: string, 1: string}&gt;</code>
+      <code>array&lt;string, array{0: string, 1: string}&gt;</code>
+      <code>array&lt;string, array{0: string, 1: string}&gt;</code>
+      <code>array&lt;string, array{0: string, 1: string}&gt;</code>
+      <code>array&lt;string, array{0: string}&gt;</code>
+    </InvalidReturnType>
+    <MissingReturnType occurrences="9">
+      <code>testCssEscapingReturnsStringIfContainsOnlyDigits</code>
+      <code>testCssEscapingReturnsStringIfZeroLength</code>
+      <code>testHtmlAttributeEscapingEscapesOwaspRecommendedRanges</code>
+      <code>testJavascriptEscapingReturnsStringIfContainsOnlyDigits</code>
+      <code>testJavascriptEscapingReturnsStringIfZeroLength</code>
+      <code>testReturnsEncodingFromGetter</code>
+      <code>testSettingEncodingToEmptyStringShouldThrowException</code>
+      <code>testSettingEncodingToInvalidValueShouldThrowException</code>
+      <code>testUnicodeCodepointConversionToUtf8</code>
+    </MissingReturnType>
+  </file>
+  <file src="vendor/symfony/polyfill-mbstring/bootstrap80.php">
+    <ParseError occurrences="1">
+      <code>=</code>
+    </ParseError>
+  </file>
+</files>

+ 34 - 0
vendor/laminas/laminas-escaper/psalm.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<psalm
+    totallyTyped="true"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns="https://getpsalm.org/schema/config"
+    xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
+    errorBaseline="psalm-baseline.xml"
+>
+    <projectFiles>
+        <directory name="src"/>
+        <directory name="test"/>
+        <ignoreFiles>
+            <directory name="vendor"/>
+        </ignoreFiles>
+    </projectFiles>
+
+    <issueHandlers>
+        <InternalMethod>
+            <errorLevel type="suppress">
+                <referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::method"/>
+            </errorLevel>
+            <errorLevel type="suppress">
+                <referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::willReturn"/>
+            </errorLevel>
+            <errorLevel type="suppress">
+                <referencedMethod name="PHPUnit\Framework\MockObject\Builder\InvocationMocker::with"/>
+            </errorLevel>
+        </InternalMethod>
+    </issueHandlers>
+
+    <plugins>
+        <pluginClass class="Psalm\PhpUnitPlugin\Plugin"/>
+    </plugins>
+</psalm>

+ 422 - 0
vendor/laminas/laminas-escaper/src/Escaper.php

@@ -0,0 +1,422 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Laminas\Escaper;
+
+use function bin2hex;
+use function ctype_digit;
+use function function_exists;
+use function hexdec;
+use function htmlspecialchars;
+use function iconv;
+use function in_array;
+use function mb_convert_encoding;
+use function ord;
+use function preg_match;
+use function preg_replace_callback;
+use function rawurlencode;
+use function sprintf;
+use function strlen;
+use function strtolower;
+use function strtoupper;
+use function substr;
+
+use const ENT_QUOTES;
+use const ENT_SUBSTITUTE;
+
+/**
+ * Context specific methods for use in secure output escaping
+ */
+class Escaper
+{
+    /**
+     * Entity Map mapping Unicode codepoints to any available named HTML entities.
+     *
+     * While HTML supports far more named entities, the lowest common denominator
+     * has become HTML5's XML Serialisation which is restricted to the those named
+     * entities that XML supports. Using HTML entities would result in this error:
+     *     XML Parsing Error: undefined entity
+     *
+     * @var array
+     */
+    protected static $htmlNamedEntityMap = [
+        34 => 'quot', // quotation mark
+        38 => 'amp', // ampersand
+        60 => 'lt', // less-than sign
+        62 => 'gt', // greater-than sign
+    ];
+
+    /**
+     * Current encoding for escaping. If not UTF-8, we convert strings from this encoding
+     * pre-escaping and back to this encoding post-escaping.
+     *
+     * @var string
+     */
+    protected $encoding = 'utf-8';
+
+    /**
+     * Holds the value of the special flags passed as second parameter to
+     * htmlspecialchars().
+     *
+     * @var int
+     */
+    protected $htmlSpecialCharsFlags;
+
+    /**
+     * Static Matcher which escapes characters for HTML Attribute contexts
+     *
+     * @var callable
+     */
+    protected $htmlAttrMatcher;
+
+    /**
+     * Static Matcher which escapes characters for Javascript contexts
+     *
+     * @var callable
+     */
+    protected $jsMatcher;
+
+    /**
+     * Static Matcher which escapes characters for CSS Attribute contexts
+     *
+     * @var callable
+     */
+    protected $cssMatcher;
+
+    /**
+     * List of all encoding supported by this class
+     *
+     * @var array
+     */
+    protected $supportedEncodings = [
+        'iso-8859-1',
+        'iso8859-1',
+        'iso-8859-5',
+        'iso8859-5',
+        'iso-8859-15',
+        'iso8859-15',
+        'utf-8',
+        'cp866',
+        'ibm866',
+        '866',
+        'cp1251',
+        'windows-1251',
+        'win-1251',
+        '1251',
+        'cp1252',
+        'windows-1252',
+        '1252',
+        'koi8-r',
+        'koi8-ru',
+        'koi8r',
+        'big5',
+        '950',
+        'gb2312',
+        '936',
+        'big5-hkscs',
+        'shift_jis',
+        'sjis',
+        'sjis-win',
+        'cp932',
+        '932',
+        'euc-jp',
+        'eucjp',
+        'eucjp-win',
+        'macroman',
+    ];
+
+    /**
+     * Constructor: Single parameter allows setting of global encoding for use by
+     * the current object.
+     *
+     * @throws Exception\InvalidArgumentException
+     */
+    public function __construct(?string $encoding = null)
+    {
+        if ($encoding !== null) {
+            if ($encoding === '') {
+                throw new Exception\InvalidArgumentException(
+                    static::class . ' constructor parameter does not allow a blank value'
+                );
+            }
+
+            $encoding = strtolower($encoding);
+            if (! in_array($encoding, $this->supportedEncodings)) {
+                throw new Exception\InvalidArgumentException(
+                    'Value of \'' . $encoding . '\' passed to ' . static::class
+                    . ' constructor parameter is invalid. Provide an encoding supported by htmlspecialchars()'
+                );
+            }
+
+            $this->encoding = $encoding;
+        }
+
+        // We take advantage of ENT_SUBSTITUTE flag to correctly deal with invalid UTF-8 sequences.
+        $this->htmlSpecialCharsFlags = ENT_QUOTES | ENT_SUBSTITUTE;
+
+        // set matcher callbacks
+        $this->htmlAttrMatcher = [$this, 'htmlAttrMatcher'];
+        $this->jsMatcher       = [$this, 'jsMatcher'];
+        $this->cssMatcher      = [$this, 'cssMatcher'];
+    }
+
+    /**
+     * Return the encoding that all output/input is expected to be encoded in.
+     *
+     * @return string
+     */
+    public function getEncoding()
+    {
+        return $this->encoding;
+    }
+
+    /**
+     * Escape a string for the HTML Body context where there are very few characters
+     * of special meaning. Internally this will use htmlspecialchars().
+     *
+     * @return string
+     */
+    public function escapeHtml(string $string)
+    {
+        return htmlspecialchars($string, $this->htmlSpecialCharsFlags, $this->encoding);
+    }
+
+    /**
+     * Escape a string for the HTML Attribute context. We use an extended set of characters
+     * to escape that are not covered by htmlspecialchars() to cover cases where an attribute
+     * might be unquoted or quoted illegally (e.g. backticks are valid quotes for IE).
+     *
+     * @return string
+     */
+    public function escapeHtmlAttr(string $string)
+    {
+        $string = $this->toUtf8($string);
+        if ($string === '' || ctype_digit($string)) {
+            return $string;
+        }
+
+        $result = preg_replace_callback('/[^a-z0-9,\.\-_]/iSu', $this->htmlAttrMatcher, $string);
+        return $this->fromUtf8($result);
+    }
+
+    /**
+     * Escape a string for the Javascript context. This does not use json_encode(). An extended
+     * set of characters are escaped beyond ECMAScript's rules for Javascript literal string
+     * escaping in order to prevent misinterpretation of Javascript as HTML leading to the
+     * injection of special characters and entities. The escaping used should be tolerant
+     * of cases where HTML escaping was not applied on top of Javascript escaping correctly.
+     * Backslash escaping is not used as it still leaves the escaped character as-is and so
+     * is not useful in a HTML context.
+     *
+     * @return string
+     */
+    public function escapeJs(string $string)
+    {
+        $string = $this->toUtf8($string);
+        if ($string === '' || ctype_digit($string)) {
+            return $string;
+        }
+
+        $result = preg_replace_callback('/[^a-z0-9,\._]/iSu', $this->jsMatcher, $string);
+        return $this->fromUtf8($result);
+    }
+
+    /**
+     * Escape a string for the URI or Parameter contexts. This should not be used to escape
+     * an entire URI - only a subcomponent being inserted. The function is a simple proxy
+     * to rawurlencode() which now implements RFC 3986 since PHP 5.3 completely.
+     *
+     * @return string
+     */
+    public function escapeUrl(string $string)
+    {
+        return rawurlencode($string);
+    }
+
+    /**
+     * Escape a string for the CSS context. CSS escaping can be applied to any string being
+     * inserted into CSS and escapes everything except alphanumerics.
+     *
+     * @return string
+     */
+    public function escapeCss(string $string)
+    {
+        $string = $this->toUtf8($string);
+        if ($string === '' || ctype_digit($string)) {
+            return $string;
+        }
+
+        $result = preg_replace_callback('/[^a-z0-9]/iSu', $this->cssMatcher, $string);
+        return $this->fromUtf8($result);
+    }
+
+    /**
+     * Callback function for preg_replace_callback that applies HTML Attribute
+     * escaping to all matches.
+     *
+     * @param array $matches
+     * @return string
+     */
+    protected function htmlAttrMatcher($matches)
+    {
+        $chr = $matches[0];
+        $ord = ord($chr);
+
+        /**
+         * The following replaces characters undefined in HTML with the
+         * hex entity for the Unicode replacement character.
+         */
+        if (
+            ($ord <= 0x1f && $chr !== "\t" && $chr !== "\n" && $chr !== "\r")
+            || ($ord >= 0x7f && $ord <= 0x9f)
+        ) {
+            return '&#xFFFD;';
+        }
+
+        /**
+         * Check if the current character to escape has a name entity we should
+         * replace it with while grabbing the integer value of the character.
+         */
+        if (strlen($chr) > 1) {
+            $chr = $this->convertEncoding($chr, 'UTF-32BE', 'UTF-8');
+        }
+
+        $hex = bin2hex($chr);
+        $ord = hexdec($hex);
+        if (isset(static::$htmlNamedEntityMap[$ord])) {
+            return '&' . static::$htmlNamedEntityMap[$ord] . ';';
+        }
+
+        /**
+         * Per OWASP recommendations, we'll use upper hex entities
+         * for any other characters where a named entity does not exist.
+         */
+        if ($ord > 255) {
+            return sprintf('&#x%04X;', $ord);
+        }
+        return sprintf('&#x%02X;', $ord);
+    }
+
+    /**
+     * Callback function for preg_replace_callback that applies Javascript
+     * escaping to all matches.
+     *
+     * @param array $matches
+     * @return string
+     */
+    protected function jsMatcher($matches)
+    {
+        $chr = $matches[0];
+        if (strlen($chr) === 1) {
+            return sprintf('\\x%02X', ord($chr));
+        }
+        $chr = $this->convertEncoding($chr, 'UTF-16BE', 'UTF-8');
+        $hex = strtoupper(bin2hex($chr));
+        if (strlen($hex) <= 4) {
+            return sprintf('\\u%04s', $hex);
+        }
+        $highSurrogate = substr($hex, 0, 4);
+        $lowSurrogate  = substr($hex, 4, 4);
+        return sprintf('\\u%04s\\u%04s', $highSurrogate, $lowSurrogate);
+    }
+
+    /**
+     * Callback function for preg_replace_callback that applies CSS
+     * escaping to all matches.
+     *
+     * @param array $matches
+     * @return string
+     */
+    protected function cssMatcher($matches)
+    {
+        $chr = $matches[0];
+        if (strlen($chr) === 1) {
+            $ord = ord($chr);
+        } else {
+            $chr = $this->convertEncoding($chr, 'UTF-32BE', 'UTF-8');
+            $ord = hexdec(bin2hex($chr));
+        }
+        return sprintf('\\%X ', $ord);
+    }
+
+    /**
+     * Converts a string to UTF-8 from the base encoding. The base encoding is set via this
+     *
+     * @param string $string
+     * @throws Exception\RuntimeException
+     * @return string
+     */
+    protected function toUtf8($string)
+    {
+        if ($this->getEncoding() === 'utf-8') {
+            $result = $string;
+        } else {
+            $result = $this->convertEncoding($string, 'UTF-8', $this->getEncoding());
+        }
+
+        if (! $this->isUtf8($result)) {
+            throw new Exception\RuntimeException(
+                sprintf('String to be escaped was not valid UTF-8 or could not be converted: %s', $result)
+            );
+        }
+
+        return $result;
+    }
+
+    /**
+     * Converts a string from UTF-8 to the base encoding. The base encoding is set via this
+     *
+     * @param string $string
+     * @return string
+     */
+    protected function fromUtf8($string)
+    {
+        if ($this->getEncoding() === 'utf-8') {
+            return $string;
+        }
+
+        return $this->convertEncoding($string, $this->getEncoding(), 'UTF-8');
+    }
+
+    /**
+     * Checks if a given string appears to be valid UTF-8 or not.
+     *
+     * @param string $string
+     * @return bool
+     */
+    protected function isUtf8($string)
+    {
+        return $string === '' || preg_match('/^./su', $string);
+    }
+
+    /**
+     * Encoding conversion helper which wraps iconv and mbstring where they exist or throws
+     * and exception where neither is available.
+     *
+     * @param string $string
+     * @param string $to
+     * @param array|string $from
+     * @throws Exception\RuntimeException
+     * @return string
+     */
+    protected function convertEncoding($string, $to, $from)
+    {
+        if (function_exists('iconv')) {
+            $result = iconv($from, $to, $string);
+        } elseif (function_exists('mb_convert_encoding')) {
+            $result = mb_convert_encoding($string, $to, $from);
+        } else {
+            throw new Exception\RuntimeException(
+                static::class
+                . ' requires either the iconv or mbstring extension to be installed'
+                . ' when escaping for non UTF-8 strings.'
+            );
+        }
+
+        if ($result === false) {
+            return ''; // return non-fatal blank string on encoding errors from users
+        }
+        return $result;
+    }
+}

+ 9 - 0
vendor/laminas/laminas-escaper/src/Exception/ExceptionInterface.php

@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Laminas\Escaper\Exception;
+
+interface ExceptionInterface
+{
+}

+ 13 - 0
vendor/laminas/laminas-escaper/src/Exception/InvalidArgumentException.php

@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Laminas\Escaper\Exception;
+
+/**
+ * Invalid argument exception
+ */
+class InvalidArgumentException extends \InvalidArgumentException implements
+    ExceptionInterface
+{
+}

+ 13 - 0
vendor/laminas/laminas-escaper/src/Exception/RuntimeException.php

@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Laminas\Escaper\Exception;
+
+/**
+ * Invalid argument exception
+ */
+class RuntimeException extends \RuntimeException implements
+    ExceptionInterface
+{
+}

+ 1 - 0
vendor/maennchen/zipstream-php/.github/FUNDING.yml

@@ -0,0 +1 @@
+open_collective: zipstream

+ 12 - 0
vendor/maennchen/zipstream-php/.github/ISSUE_TEMPLATE.md

@@ -0,0 +1,12 @@
+# Description of the problem
+
+Please be very descriptive and include as much details as possible.
+
+# Example code
+
+# Informations
+
+* ZipStream-PHP version:
+* PHP version:
+
+Please include any supplemental information you deem relevant to this issue.

+ 6 - 0
vendor/maennchen/zipstream-php/.gitignore

@@ -0,0 +1,6 @@
+clover.xml
+composer.lock
+coverage.clover
+.idea
+phpunit.xml
+vendor

+ 0 - 4
vendor/maennchen/zipstream-php/.phive/phars.xml

@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phive xmlns="https://phar.io/phive">
-  <phar name="phpdocumentor" version="^3.3.1" installed="3.3.1" location="./tools/phpdocumentor" copy="false"/>
-</phive>

+ 0 - 71
vendor/maennchen/zipstream-php/.php-cs-fixer.dist.php

@@ -1,71 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/**
- * PHP-CS-Fixer config for ZipStream-PHP
- * @author Nicolas CARPi <nico-git@deltablot.email>
- * @copyright 2022 Nicolas CARPi
- * @see https://github.com/maennchen/ZipStream-PHP
- * @license MIT
- * @package maennchen/ZipStream-PHP
- */
-
-use PhpCsFixer\Config;
-use PhpCsFixer\Finder;
-
-$finder = Finder::create()
-    ->exclude('.github')
-    ->exclude('.phpdoc')
-    ->exclude('docs')
-    ->exclude('tools')
-    ->exclude('vendor')
-    ->in(__DIR__);
-
-$config = new Config();
-return $config->setRules([
-        '@PER' => true,
-        '@PER:risky' => true,
-        '@PHP81Migration' => true,
-        '@PHPUnit84Migration:risky' => true,
-        'array_syntax' => ['syntax' => 'short'],
-        'class_attributes_separation' => true,
-        'declare_strict_types' => true,
-        'dir_constant' => true,
-        'is_null' => true,
-        'no_homoglyph_names' => true,
-        'no_null_property_initialization' => true,
-        'no_php4_constructor' => true,
-        'no_unused_imports' => true,
-        'no_useless_else' => true,
-        'non_printable_character' => true,
-        'ordered_imports' => true,
-        'ordered_class_elements' => true,
-        'php_unit_construct' => true,
-        'pow_to_exponentiation' => true,
-        'psr_autoloading' => true,
-        'random_api_migration' => true,
-        'return_assignment' => true,
-        'self_accessor' => true,
-        'semicolon_after_instruction' => true,
-        'short_scalar_cast' => true,
-        'simplified_null_return' => true,
-        'single_blank_line_before_namespace' => true,
-        'single_class_element_per_statement' => true,
-        'single_line_comment_style' => true,
-        'single_quote' => true,
-        'space_after_semicolon' => true,
-        'standardize_not_equals' => true,
-        'strict_param' => true,
-        'ternary_operator_spaces' => true,
-        'trailing_comma_in_multiline' => true,
-        'trim_array_spaces' => true,
-        'unary_operator_spaces' => true,
-        'global_namespace_import' => [
-            'import_classes' => true,
-            'import_functions' => true,
-            'import_constants' => true,
-        ],
-    ])
-    ->setFinder($finder)
-    ->setRiskyAllowed(true);

+ 0 - 15
vendor/maennchen/zipstream-php/.phpdoc/template/base.html.twig

@@ -1,15 +0,0 @@
-{% extends 'layout.html.twig' %}
-
-{% set topMenu = {
-    "menu": [
-        { "name": "Guides", "url": "https://maennchen.dev/ZipStream-PHP/guide/index.html"},
-        { "name": "API", "url": "https://maennchen.dev/ZipStream-PHP/classes/ZipStream-ZipStream.html"},
-        { "name": "Issues", "url": "https://github.com/maennchen/ZipStream-PHP/issues"},
-    ],
-    "social": [
-        { "iconClass": "fab fa-github", "url": "https://github.com/maennchen/ZipStream-PHP"},
-        { "iconClass": "fas fa-envelope-open-text", "url": "https://github.com/maennchen/ZipStream-PHP/discussions"},
-        { "iconClass": "fas fa-money-bill", "url": "https://opencollective.com/zipstream"},
-    ]
-}
-%}

Some files were not shown because too many files changed in this diff