dddmo 5 月之前
父节点
当前提交
cbdc6e0835
共有 100 个文件被更改,包括 1849 次插入1779 次删除
  1. 16 4
      .env
  2. 0 350
      app/JsonRpc/NewsService.php
  3. 0 84
      app/JsonRpc/NewsServiceInterface.php
  4. 0 27
      app/Model/ArticleData.php
  5. 0 27
      app/Model/Category.php
  6. 0 27
      app/Model/Link.php
  7. 0 19
      app/Model/Model.php
  8. 0 27
      app/Model/Website.php
  9. 0 27
      app/Model/WebsiteColumn.php
  10. 0 27
      app/Model/WebsiteRole.php
  11. 0 27
      app/Model/WebsiteRoleUser.php
  12. 185 186
      composer.lock
  13. 29 0
      config/autoload/databases.php
  14. 1 1
      config/autoload/server.php
  15. 0 0
      runtime/container/classes.cache
  16. 0 0
      runtime/container/scan.cache
  17. 1 1
      runtime/hyperf.pid
  18. 12 0
      runtime/logs/hyperf.log
  19. 30 23
      vendor/composer/autoload_classmap.php
  20. 30 23
      vendor/composer/autoload_static.php
  21. 203 193
      vendor/composer/installed.json
  22. 268 268
      vendor/composer/installed.php
  23. 9 1
      vendor/composer/pcre/README.md
  24. 12 4
      vendor/composer/pcre/composer.json
  25. 2 0
      vendor/composer/pcre/src/Regex.php
  26. 15 0
      vendor/composer/semver/CHANGELOG.md
  27. 2 2
      vendor/composer/semver/composer.json
  28. 0 11
      vendor/composer/semver/phpstan-baseline.neon
  29. 1 1
      vendor/composer/semver/src/CompilingMatcher.php
  30. 5 0
      vendor/composer/semver/src/VersionParser.php
  31. 8 1
      vendor/doctrine/annotations/README.md
  32. 1 1
      vendor/doctrine/annotations/UPGRADE.md
  33. 3 3
      vendor/doctrine/annotations/composer.json
  34. 8 1
      vendor/doctrine/annotations/docs/en/index.rst
  35. 10 3
      vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php
  36. 3 3
      vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php
  37. 5 3
      vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php
  38. 3 2
      vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php
  39. 0 15
      vendor/doctrine/annotations/psalm.xml
  40. 34 10
      vendor/fidry/cpu-core-counter/README.md
  41. 179 0
      vendor/fidry/cpu-core-counter/src/CpuCoreCounter.php
  42. 4 2
      vendor/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php
  43. 5 2
      vendor/fidry/cpu-core-counter/src/Finder/NProcFinder.php
  44. 7 4
      vendor/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php
  45. 122 0
      vendor/friendsofphp/php-cs-fixer/CHANGELOG.md
  46. 14 7
      vendor/friendsofphp/php-cs-fixer/composer.json
  47. 12 10
      vendor/friendsofphp/php-cs-fixer/src/AbstractDoctrineAnnotationFixer.php
  48. 1 90
      vendor/friendsofphp/php-cs-fixer/src/AbstractFixer.php
  49. 14 0
      vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocToTypeDeclarationFixer.php
  50. 3 3
      vendor/friendsofphp/php-cs-fixer/src/Cache/Cache.php
  51. 3 3
      vendor/friendsofphp/php-cs-fixer/src/Cache/FileHandler.php
  52. 1 1
      vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidFixerConfigurationException.php
  53. 7 7
      vendor/friendsofphp/php-cs-fixer/src/Console/Application.php
  54. 28 20
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/DescribeCommand.php
  55. 8 8
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/FixCommand.php
  56. 1 1
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListSetsCommand.php
  57. 7 7
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/SelfUpdateCommand.php
  58. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/WorkerCommand.php
  59. 16 16
      vendor/friendsofphp/php-cs-fixer/src/Console/ConfigurationResolver.php
  60. 9 9
      vendor/friendsofphp/php-cs-fixer/src/Console/Output/ErrorOutput.php
  61. 4 4
      vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/DotsOutput.php
  62. 1 1
      vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/ProgressOutputFactory.php
  63. 1 1
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JunitReporter.php
  64. 3 3
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterFactory.php
  65. 4 4
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/TextReporter.php
  66. 3 3
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterFactory.php
  67. 1 1
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/TextReporter.php
  68. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClient.php
  69. 1 1
      vendor/friendsofphp/php-cs-fixer/src/Console/WarningsDetector.php
  70. 3 3
      vendor/friendsofphp/php-cs-fixer/src/Differ/DiffConsoleFormatter.php
  71. 7 4
      vendor/friendsofphp/php-cs-fixer/src/DocBlock/Annotation.php
  72. 22 6
      vendor/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php
  73. 1 1
      vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/DocLexer.php
  74. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Tokens.php
  75. 5 5
      vendor/friendsofphp/php-cs-fixer/src/Documentation/FixerDocumentGenerator.php
  76. 1 1
      vendor/friendsofphp/php-cs-fixer/src/Documentation/RuleSetDocumentationGenerator.php
  77. 1 1
      vendor/friendsofphp/php-cs-fixer/src/Error/SourceExceptionFactory.php
  78. 1 1
      vendor/friendsofphp/php-cs-fixer/src/FileReader.php
  79. 48 0
      vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php
  80. 1 1
      vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractShortOperatorFixer.php
  81. 33 18
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasFunctionsFixer.php
  82. 18 7
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoMixedEchoPrintFixer.php
  83. 15 15
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/RandomApiMigrationFixer.php
  84. 1 0
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/SetTypeToCastFixer.php
  85. 18 7
      vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/ArraySyntaxFixer.php
  86. 13 0
      vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoWhitespaceBeforeCommaInArrayFixer.php
  87. 6 2
      vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NormalizeIndexBraceFixer.php
  88. 13 0
      vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php
  89. 13 0
      vendor/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/AttributeEmptyParenthesesFixer.php
  90. 16 1
      vendor/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/OrderedAttributesFixer.php
  91. 25 3
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php
  92. 61 34
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesPositionFixer.php
  93. 33 7
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/CurlyBracesPositionFixer.php
  94. 14 1
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoTrailingCommaInSinglelineFixer.php
  95. 13 0
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NonPrintableCharacterFixer.php
  96. 15 0
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NumericLiteralSeparatorFixer.php
  97. 28 17
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/PsrAutoloadingFixer.php
  98. 24 13
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/ConstantCaseFixer.php
  99. 13 0
      vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/CastSpacesFixer.php
  100. 26 15
      vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassAttributesSeparationFixer.php

+ 16 - 4
.env

@@ -1,4 +1,4 @@
-APP_NAME=news_producer
+APP_NAME=collector_producer
 APP_ENV=dev
 
 
@@ -12,7 +12,19 @@ DB_CHARSET=utf8mb4
 DB_COLLATION=utf8mb4_unicode_ci
 DB_PREFIX=
 
-REDIS_HOST=101.254.114.211
-REDIS_AUTH=YPWWnFnNebc7427B
-REDIS_PORT=26739
+
+
+DB_DRIVER2=mysql
+DB_HOST2=101.254.114.211
+DB_PORT2=13306
+DB_DATABASE2=collector
+DB_USERNAME2=root
+DB_PASSWORD2=xKmapDpKCxMMSkbe
+DB_CHARSET2=utf8mb4
+DB_COLLATION2=utf8mb4_unicode_ci
+DB_PREFIX2=col_
+
+REDIS_HOST=localhost
+REDIS_AUTH=(null)
+REDIS_PORT=6379
 REDIS_DB=0

+ 0 - 350
app/JsonRpc/NewsService.php

@@ -1,350 +0,0 @@
-<?php
-namespace App\JsonRpc;
-
-use App\Model\Article;
-use App\Model\ArticleData;
-use App\Model\Category;
-use App\Model\WebsiteCategory;
-use Hyperf\DbConnection\Db;
-use Hyperf\RpcServer\Annotation\RpcService;
-use App\Tools\Result;
-
-
-#[RpcService(name: "NewsService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
-class NewsService implements NewsServiceInterface
-{
-    /**
-     * @param array $data
-     * @return array|mixed
-     */
-    //*********getCategoryInfo********** */
-    public function getCategoryInfo(array $data): array
-    {
-        $where = [
-            ['name','like','%'.$data['keyWord'].'%'],
-            ['website_id','=',$data['website_id']],
-            ['pid','=',$data['pid']??0]
-        ];
-        $rep = Category::where($where)->limit($data['pageSize'])->orderBy("sort","asc")->offset(($data['page']-1)*$data['pageSize'])->get();
-        $count =  Category::where($where)->count();
-        $data = [
-            'rows'=>$rep->toArray(),
-            'count'=>$count
-        ];
-        if(empty($rep->toArray())){
-            return Result::error("没有栏目数据");
-        }
-        return Result::success($data);
-    }
-
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function getCategoryList(array $data): array
-    {
-        $where = [
-            ['name','like','%'.$data['keyWord'].'%'],
-            ['website_id','=',$data['website_id']],
-            ['pid','=',$data['pid']??0]
-        ];
-        $rep = Category::where($where)->limit($data['pageSize'])->orderBy("sort","asc")->offset(($data['page']-1)*$data['pageSize'])->get();
-        $count =  Category::where($where)->count();
-        $data = [
-            'rows'=>$rep->toArray(),
-            'count'=>$count
-        ];
-        if(empty($rep->toArray())){
-            return Result::error("没有栏目数据");
-        }
-        return Result::success($data);
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function categoryList(array $data): array
-    {
-       $result =  Category::where($data)->get();
-        if(empty($result)){
-            return Result::error("没有栏目数据");
-        }
-        return Result::success($result);
-    }
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function addCategory(array $data): array
-    {
-        $id = Category::insertGetId($data);
-        if(empty($id)){
-            return Result::error("添加失败");
-        }
-        return Result::success(['id'=>$id]);
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function delCategory(array $data): array
-    {
-        $categoryList = Category::where(['pid'=>$data['id']])->get();
-        var_dump("分类列表:",$data,$categoryList);
-        if($categoryList->toArray()){
-            return Result::error("分类下面有子分类不能删除");
-        }
-        $articleList = Article::where(['catid'=>$data['id']])->get();
-        var_dump("文章列表:",$articleList);
-        if($articleList->toArray()){
-            return Result::error("分类下面有资讯不能删除");
-        }
-        $result = Category::where($data)->delete();
-        if(!$result){
-            return Result::error("删除失败");
-        }
-        return Result::success($result);
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function updateCategory(array $data): array
-    {
-        $where = [
-            'id'=>$data['id']
-        ];
-        $result = Category::where($where)->update($data);
-        if($result){
-            return Result::success($result);
-        }else{
-            return Result::error("更新失败");
-        }
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function getArticleList(array $data): array
-    {
-        $where= [];
-        
-        if(isset($data['keyWord'])){
-            $where[] =   ['article.title','like','%'.$data['keyWord'].'%'];
-            $where[] =   ['article.status','!=','5'];
-        }
-        if(isset($data['catid'])){
-            $where[] =   ['article.catid',$data['catid']];
-            $where[] =   ['article.status', '1'];
-        }elseif(isset($data['keyword'])){
-            $where[] =   ['article.title','like','%'.$data['keyword'].'%'];
-            $where[] =   ['article.status', '1'];
-        }else{
-            $where[] =   ['article.catid',$data['catid']];
-            $where[] =   ['article.title','like','%'.$data['keyword'].'%'];
-            $where[] =   ['article.status', '1'];
-        }
-        $rep = Article::where($where)
-            ->leftJoin('category','article.catid','category.id')
-            ->leftJoin("article_data","article.id","article_data.article_id")
-            ->select("article.*","category.name","article_data.content")
-            ->orderBy("article.id","desc")
-            ->limit($data['pageSize'])
-            ->offset(($data['page']-1)*$data['pageSize'])->get();
-        $count =  Article::where($where)->count();
-        $data = [
-            'rows'=>$rep->toArray(),
-            'count'=>$count
-        ];
-        if(empty($rep)){
-            return Result::error("没有信息数据");
-        }
-        return Result::success($data);
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function addArticle(array $data): array
-    {
-        Db::beginTransaction();
-        try{
-
-        $data['cat_arr_id'] = isset($data['cat_arr_id'])?json_encode($data['cat_arr_id']):'';
-        $data['tag'] = isset($data['tag'])?json_encode($data['tag']):'';
-            $articleData = $data;
-            unset($articleData['content']);
-            $id = Article::insertGetId($articleData);
-            $articleDataContent = [
-                'article_id'=>$id,
-                'content'=>$data['content']
-            ];
-            ArticleData::insertGetId($articleDataContent);
-            Db::commit();
-        } catch(\Throwable $ex){
-            Db::rollBack();
-            var_dump($ex->getMessage());
-            return Result::error("创建失败",0);
-        }
-
-        return Result::success(['id'=>$id]);
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function delArticle(array $data): array
-    {
-        $result = Article::where($data)->update(['status'=>5]);
-        if(!$result){
-            return Result::error("删除失败");
-        }
-        return Result::success($result);
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function updateArticle(array $data): array
-    {
-        Db::beginTransaction();
-        try{
-            $data['cat_arr_id'] = isset($data['cat_arr_id'])?json_encode($data['cat_arr_id']):'';
-            $data['tag'] = isset($data['tag'])?json_encode($data['tag']):'';
-            $articleData = $data;
-            unset($articleData['content']);
-            unset($articleData['status_name']);
-            unset($articleData['name']);
-            unset($articleData['content']);
-            unset($articleData['pid_arr']);
-            unset($articleData['pid']);
-            $id = Article::where(['id'=>$data['id']])->update($articleData);
-            $articleDataContent = [
-                'content'=>$data['content']
-            ];
-            ArticleData::where(['article_id'=>$data['id']])->update($articleDataContent);
-        } catch(\Throwable $ex){
-            Db::rollBack();
-            var_dump($ex->getMessage());
-            return Result::error("更新失败",0);
-        }
-        return Result::success([]);
-
-    }
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function getArticleInfo(array $data): array
-    {
-        $where = [
-            'article.id'=>$data['id']
-        ];
-        $result = Article::where($where)->leftJoin("article_data","article.id","article_data.article_id")->first();
-        if($result){
-            return Result::success($result->toArray());
-        }else{
-            return Result::error("查询失败",0);
-        }
-    }
-    /**
-     *  获取新闻
-     * @param array $data
-     * @return array
-    */
-    public function getWebsiteArticlett(array $data): array   
-    {
-    
-       $category = WebsiteCategory::where('website_id',$data['website_id'])->select('category_id')->get();
-       $category = $category->toArray();
-       $result= [];
-       if($category){
-            $category_ids = [];
-            foreach($category as $val){
-                array_push($category_ids,$val['category_id']);
-            }
-            if(isset($data['placeid'])){
-                $placeid=$data['placeid']-1;
-                $result=Article::where('status',1)->where('level',$data['level'])->whereIn("catid",$category_ids)->orderBy("created_at","desc")->offset($placeid)->limit($data['pageSize'])->get();
-            }else{
-                $result=Article::where('status',1)->where('level',$data['level'])->whereIn("catid",$category_ids)->orderBy("created_at","desc")->offset(0)->limit($data['pageSize'])->get();
-            }
-            if(empty($result)){
-                return Result::error("暂无头条新闻",0);
-            }            
-            return Result::success($result); 
-        }else{
-            return Result::error("本网站下暂无相关栏目",0);
-        }
-    }
-    /**
-     * 获取模块新闻
-     * @param array $data
-     * @return array
-    */
-   
-    public function getWebsiteModelArticles(array $data): array    
-    {
-        $catid=$data['catid'];
-        $category = WebsiteCategory::where('website_id',$data['website_id'])->where('category_id',$catid)->select('category_id')->get();
-        $category = $category->toArray();
-        if(!empty($category)){
-            $where=[
-                'status' => 1,
-                'catid' => $catid,
-            ];
-            if($data['level']==1){
-                $level=[
-                    0=>'1',
-                    1=>'4',
-                    2=>'5'
-                ];
-                $result = Article::where($where)->whereIn('level',$level)->orderBy("created_at","desc")->limit($data['pagesize'])->get();
-            }elseif($data['level']==2){
-                $level='2';
-                $result = Article::where($where)->where('level',$level)->orderBy("created_at","desc")->limit($data['pagesize'])->get();
-
-            }else{
-                $level='3';
-                $result = Article::where($where)->where('level',$level)->orderBy("created_at","desc")->limit($data['pagesize'])->get();
-            }
-            $result= $result->toArray();
-            if(!empty($result) && isset($data['placeid']) && !empty($data['placeid'])){
-                $placeid=$data['placeid']-1;
-                if($level==2 || $level==3){
-                    $where =[
-                        'level' => $level
-                    ];
-                    $result = Article::where($where)
-                    ->orderBy("created_at","desc")
-                    ->offset($placeid)
-                    ->limit($data['pagesize'])->get();
-                }else{
-                    $result = Article::where($where)
-                    ->whereIn('level',$level)
-                    ->offset($placeid)
-                    ->orderBy("created_at","desc")
-                    ->limit($data['pagesize'])->get();
-                } 
-            }
-            if(empty($result)){
-                return Result::error("此栏目暂无相关新闻",0);
-            }
-        }else{
-            return Result::error("此网站暂无此栏目",0);
-        
-        }
-        return Result::success($result);  
-        
-    }
-    
-}

+ 0 - 84
app/JsonRpc/NewsServiceInterface.php

@@ -1,84 +0,0 @@
-<?php
-namespace App\JsonRpc;
-interface NewsServiceInterface
-{
-    
-    /**
-     * @param array $data
-     *  @return array
-    */
-    public function getCategoryList(array $data):array;
-    /**
-     * @param array $data
-     *  @return array
-     */
-    public function categoryList(array $data):array;
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function addCategory(array $data):array;
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function delCategory(array $data):array;
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function updateCategory(array $data):array;
-
-    /**
-     * @param string $keyword
-     * @param int $page
-     * @param int $pageSize
-     */
-    public function getArticleList(array $data):array;
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function addArticle(array $data):array;
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function delArticle(array $data):array;
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function updateArticle(array $data):array;
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function getArticleInfo(array $data):array;
-     /**
-     * @param array $data
-     * @return array|mixed
-     */
-    public function getCategoryInfo(array $data):array;
-
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function getWebsiteArticlett(array $data):array;
-    /**
-     * @param array $data
-     * @return array
-     */
-    public function getWebsiteModelArticles(array $data):array;
-
-}
-
-

+ 0 - 27
app/Model/ArticleData.php

@@ -1,27 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace App\Model;
-
-use Hyperf\DbConnection\Model\Model;
-
-/**
- */
-class ArticleData extends Model
-{
-    /**
-     * The table associated with the model.
-     */
-    protected ?string $table = 'article_data';
-
-    /**
-     * The attributes that are mass assignable.
-     */
-    protected array $fillable = [];
-
-    /**
-     * The attributes that should be cast to native types.
-     */
-    protected array $casts = [];
-}

+ 0 - 27
app/Model/Category.php

@@ -1,27 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace App\Model;
-
-use Hyperf\DbConnection\Model\Model;
-
-/**
- */
-class Category extends Model
-{
-    /**
-     * The table associated with the model.
-     */
-    protected ?string $table = 'category';
-
-    /**
-     * The attributes that are mass assignable.
-     */
-    protected array $fillable = [];
-
-    /**
-     * The attributes that should be cast to native types.
-     */
-    protected array $casts = [];
-}

+ 0 - 27
app/Model/Link.php

@@ -1,27 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace App\Model;
-
-use Hyperf\DbConnection\Model\Model;
-
-/**
- */
-class Link extends Model
-{
-    /**
-     * The table associated with the model.
-     */
-    protected ?string $table = 'link';
-
-    /**
-     * The attributes that are mass assignable.
-     */
-    protected array $fillable = [];
-
-    /**
-     * The attributes that should be cast to native types.
-     */
-    protected array $casts = [];
-}

+ 0 - 19
app/Model/Model.php

@@ -1,19 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of Hyperf.
- *
- * @link     https://www.hyperf.io
- * @document https://hyperf.wiki
- * @contact  group@hyperf.io
- * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
- */
-
-namespace App\Model;
-
-use Hyperf\DbConnection\Model\Model as BaseModel;
-
-abstract class Model extends BaseModel
-{
-}

+ 0 - 27
app/Model/Website.php

@@ -1,27 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace App\Model;
-
-use Hyperf\DbConnection\Model\Model;
-
-/**
- */
-class Website extends Model
-{
-    /**
-     * The table associated with the model.
-     */
-    protected ?string $table = 'website';
-
-    /**
-     * The attributes that are mass assignable.
-     */
-    protected array $fillable = [];
-
-    /**
-     * The attributes that should be cast to native types.
-     */
-    protected array $casts = [];
-}

+ 0 - 27
app/Model/WebsiteColumn.php

@@ -1,27 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace App\Model;
-
-use Hyperf\DbConnection\Model\Model;
-
-/**
- */
-class WebsiteColumn extends Model
-{
-    /**
-     * The table associated with the model.
-     */
-    protected ?string $table = 'website_column';
-
-    /**
-     * The attributes that are mass assignable.
-     */
-    protected array $fillable = [];
-
-    /**
-     * The attributes that should be cast to native types.
-     */
-    protected array $casts = [];
-}

+ 0 - 27
app/Model/WebsiteRole.php

@@ -1,27 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace App\Model;
-
-use Hyperf\DbConnection\Model\Model;
-
-/**
- */
-class WebsiteRole extends Model
-{
-    /**
-     * The table associated with the model.
-     */
-    protected ?string $table = 'website_role';
-
-    /**
-     * The attributes that are mass assignable.
-     */
-    protected array $fillable = [];
-
-    /**
-     * The attributes that should be cast to native types.
-     */
-    protected array $casts = [];
-}

+ 0 - 27
app/Model/WebsiteRoleUser.php

@@ -1,27 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace App\Model;
-
-use Hyperf\DbConnection\Model\Model;
-
-/**
- */
-class WebsiteRoleUser extends Model
-{
-    /**
-     * The table associated with the model.
-     */
-    protected ?string $table = 'website_role_user';
-
-    /**
-     * The attributes that are mass assignable.
-     */
-    protected array $fillable = [];
-
-    /**
-     * The attributes that should be cast to native types.
-     */
-    protected array $casts = [];
-}

文件差异内容过多而无法显示
+ 185 - 186
composer.lock


+ 29 - 0
config/autoload/databases.php

@@ -13,6 +13,35 @@ use function Hyperf\Support\env;
 
 return [
     'default' => [
+        'driver' => env('DB_DRIVER2', 'mysql'),
+        'host' => env('DB_HOST2', 'localhost'),
+        'database' => env('DB_DATABASE2', 'hyperf'),
+        'port' => env('DB_PORT2', 3306),
+        'username' => env('DB_USERNAME2', 'root'),
+        'password' => env('DB_PASSWORD2', ''),
+        'charset' => env('DB_CHARSET2', 'utf8'),
+        'collation' => env('DB_COLLATION2', 'utf8_unicode_ci'),
+        'prefix' => env('DB_PREFIX2', ''),
+        'pool' => [
+            'min_connections' => 1,
+            'max_connections' => 10,
+            'connect_timeout' => 10.0,
+            'wait_timeout' => 3.0,
+            'heartbeat' => -1,
+            'max_idle_time' => (float) env('DB_MAX_IDLE_TIME', 60),
+        ],
+        'variables' => [
+            'time_zone' => '+08:00', // 设置MySQL连接的时区
+        ],
+        'commands' => [
+            'gen:model' => [
+                'path' => 'app/Model',
+                'force_casts' => true,
+                'inheritance' => 'Model',
+            ],
+        ],
+    ],
+    'secondary' => [
         'driver' => env('DB_DRIVER', 'mysql'),
         'host' => env('DB_HOST', 'localhost'),
         'database' => env('DB_DATABASE', 'hyperf'),

+ 1 - 1
config/autoload/server.php

@@ -20,7 +20,7 @@ return [
             'name' => 'jsonrpc-http',
             'type' => Server::SERVER_HTTP,
             'host' => '0.0.0.0',
-            'port' => 9505,
+            'port' => 9509,
             'sock_type' => SWOOLE_SOCK_TCP,
             'callbacks' => [
                 Event::ON_REQUEST => [Hyperf\JsonRpc\HttpServer::class, 'onRequest'],

文件差异内容过多而无法显示
+ 0 - 0
runtime/container/classes.cache


文件差异内容过多而无法显示
+ 0 - 0
runtime/container/scan.cache


+ 1 - 1
runtime/hyperf.pid

@@ -1 +1 @@
-137
+439

+ 12 - 0
runtime/logs/hyperf.log

@@ -0,0 +1,12 @@
+[2024-11-11T07:09:14.025620+00:00] sql.INFO: [141.22] select * from `article` [] []
+[2024-11-11T07:10:46.911661+00:00] sql.INFO: [148.07] select * from `article` limit 1 [] []
+[2024-11-11T07:10:47.007749+00:00] sql.INFO: [70.84] select * from `col_article` limit 1 [] []
+[2024-11-11T07:24:22.378221+00:00] sql.INFO: [85.85] select * from `col_web` where (`name` = '中华人民共和国公安部') limit 1 [] []
+[2024-11-11T07:24:22.660190+00:00] sql.INFO: [267.67] insert into `col_web` (`name`, `url`) values ('中华人民共和国公安部', 'https://www.mps.gov.cn/') [] []
+[2024-11-11T07:24:26.380734+00:00] sql.INFO: [15.95] select * from `col_web` where (`name` = '中华人民共和国公安部') limit 1 [] []
+[2024-11-11T07:26:54.043337+00:00] sql.INFO: [82.76] select * from `col_web` where (`name` = '中华人民共和国公安部') limit 1 [] []
+[2024-11-11T07:27:49.603806+00:00] sql.INFO: [19.4] select * from `col_web` where (`name` = '中华人民共和国公安部') limit 1 [] []
+[2024-11-11T07:27:55.025670+00:00] sql.INFO: [167.04] select * from `col_web` where (`name` = '中华人民共和国公安部') limit 1 [] []
+[2024-11-11T07:27:55.249209+00:00] sql.INFO: [208.33] insert into `col_web` (`name`, `url`, `created_at`) values ('中华人民共和国公安部', 'https://www.mps.gov.cn/', '2024-11-11 15:27:55') [] []
+[2024-11-11T08:12:42.450348+00:00] sql.INFO: [116.62] select * from `col_web` [] []
+[2024-11-11T08:13:15.416245+00:00] sql.INFO: [17.45] select * from `col_web` where (`name` like '%公安部%') limit 1 [] []

+ 30 - 23
vendor/composer/autoload_classmap.php

@@ -11,20 +11,13 @@ return array(
     'App\\Controller\\IndexController' => $baseDir . '/app/Controller/IndexController.php',
     'App\\Exception\\Handler\\AppExceptionHandler' => $baseDir . '/app/Exception/Handler/AppExceptionHandler.php',
     'App\\Exception\\Handler\\JsonRpcExceptionHandler' => $baseDir . '/app/Exception/Handler/JsonRpcExceptionHandler.php',
-    'App\\JsonRpc\\NewsService' => $baseDir . '/app/JsonRpc/NewsService.php',
-    'App\\JsonRpc\\NewsServiceInterface' => $baseDir . '/app/JsonRpc/NewsServiceInterface.php',
+    'App\\JsonRpc\\CollectorService' => $baseDir . '/app/JsonRpc/CollectorService.php',
+    'App\\JsonRpc\\CollectorServiceInterface' => $baseDir . '/app/JsonRpc/CollectorServiceInterface.php',
     'App\\Listener\\DbQueryExecutedListener' => $baseDir . '/app/Listener/DbQueryExecutedListener.php',
     'App\\Listener\\ResumeExitCoordinatorListener' => $baseDir . '/app/Listener/ResumeExitCoordinatorListener.php',
     'App\\Model\\Article' => $baseDir . '/app/Model/Article.php',
-    'App\\Model\\ArticleData' => $baseDir . '/app/Model/ArticleData.php',
-    'App\\Model\\Category' => $baseDir . '/app/Model/Category.php',
-    'App\\Model\\Link' => $baseDir . '/app/Model/Link.php',
-    'App\\Model\\Model' => $baseDir . '/app/Model/Model.php',
-    'App\\Model\\Website' => $baseDir . '/app/Model/Website.php',
-    'App\\Model\\WebsiteCategory' => $baseDir . '/app/Model/WebsiteCategory.php',
-    'App\\Model\\WebsiteColumn' => $baseDir . '/app/Model/WebsiteColumn.php',
-    'App\\Model\\WebsiteRole' => $baseDir . '/app/Model/WebsiteRole.php',
-    'App\\Model\\WebsiteRoleUser' => $baseDir . '/app/Model/WebsiteRoleUser.php',
+    'App\\Model\\OldModel\\Article' => $baseDir . '/app/Model/OldModel/Article.php',
+    'App\\Model\\Web' => $baseDir . '/app/Model/Web.php',
     'App\\Tools\\Result' => $baseDir . '/app/Tools/Result.php',
     'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
     'CURLStringFile' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php',
@@ -120,6 +113,12 @@ return array(
     'Composer\\Pcre\\MatchResult' => $vendorDir . '/composer/pcre/src/MatchResult.php',
     'Composer\\Pcre\\MatchStrictGroupsResult' => $vendorDir . '/composer/pcre/src/MatchStrictGroupsResult.php',
     'Composer\\Pcre\\MatchWithOffsetsResult' => $vendorDir . '/composer/pcre/src/MatchWithOffsetsResult.php',
+    'Composer\\Pcre\\PHPStan\\InvalidRegexPatternRule' => $vendorDir . '/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php',
+    'Composer\\Pcre\\PHPStan\\PregMatchFlags' => $vendorDir . '/composer/pcre/src/PHPStan/PregMatchFlags.php',
+    'Composer\\Pcre\\PHPStan\\PregMatchParameterOutTypeExtension' => $vendorDir . '/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php',
+    'Composer\\Pcre\\PHPStan\\PregMatchTypeSpecifyingExtension' => $vendorDir . '/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php',
+    'Composer\\Pcre\\PHPStan\\PregReplaceCallbackClosureTypeExtension' => $vendorDir . '/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php',
+    'Composer\\Pcre\\PHPStan\\UnsafeStrictGroupsCallRule' => $vendorDir . '/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php',
     'Composer\\Pcre\\PcreException' => $vendorDir . '/composer/pcre/src/PcreException.php',
     'Composer\\Pcre\\Preg' => $vendorDir . '/composer/pcre/src/Preg.php',
     'Composer\\Pcre\\Regex' => $vendorDir . '/composer/pcre/src/Regex.php',
@@ -168,6 +167,7 @@ return array(
     'DeepCopy\\Matcher\\PropertyTypeMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php',
     'DeepCopy\\Reflection\\ReflectionHelper' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php',
     'DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php',
+    'DeepCopy\\TypeFilter\\Date\\DatePeriodFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DatePeriodFilter.php',
     'DeepCopy\\TypeFilter\\ReplaceFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php',
     'DeepCopy\\TypeFilter\\ShallowCopyFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php',
     'DeepCopy\\TypeFilter\\Spl\\ArrayObjectFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php',
@@ -312,6 +312,7 @@ return array(
     'Fidry\\CpuCoreCounter\\Finder\\CpuCoreFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php',
     'Fidry\\CpuCoreCounter\\Finder\\CpuInfoFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php',
     'Fidry\\CpuCoreCounter\\Finder\\DummyCpuCoreFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php',
+    'Fidry\\CpuCoreCounter\\Finder\\EnvVariableFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/EnvVariableFinder.php',
     'Fidry\\CpuCoreCounter\\Finder\\FinderRegistry' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/FinderRegistry.php',
     'Fidry\\CpuCoreCounter\\Finder\\HwLogicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php',
     'Fidry\\CpuCoreCounter\\Finder\\HwPhysicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php',
@@ -329,6 +330,7 @@ return array(
     'Fidry\\CpuCoreCounter\\Finder\\WmicPhysicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php',
     'Fidry\\CpuCoreCounter\\Finder\\_NProcessorFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php',
     'Fidry\\CpuCoreCounter\\NumberOfCpuCoreNotFound' => $vendorDir . '/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php',
+    'Fidry\\CpuCoreCounter\\ParallelisationResult' => $vendorDir . '/fidry/cpu-core-counter/src/ParallelisationResult.php',
     'Fig\\Http\\Message\\RequestMethodInterface' => $vendorDir . '/fig/http-message-util/src/RequestMethodInterface.php',
     'Fig\\Http\\Message\\StatusCodeInterface' => $vendorDir . '/fig/http-message-util/src/StatusCodeInterface.php',
     'GrahamCampbell\\ResultType\\Error' => $vendorDir . '/graham-campbell/result-type/src/Error.php',
@@ -631,6 +633,7 @@ return array(
     'Hyperf\\Context\\Traits\\CoroutineProxy' => $vendorDir . '/hyperf/context/src/Traits/CoroutineProxy.php',
     'Hyperf\\Contract\\ApplicationInterface' => $vendorDir . '/hyperf/contract/src/ApplicationInterface.php',
     'Hyperf\\Contract\\Arrayable' => $vendorDir . '/hyperf/contract/src/Arrayable.php',
+    'Hyperf\\Contract\\CanBeEscapedWhenCastToString' => $vendorDir . '/hyperf/contract/src/CanBeEscapedWhenCastToString.php',
     'Hyperf\\Contract\\Castable' => $vendorDir . '/hyperf/contract/src/Castable.php',
     'Hyperf\\Contract\\CastsAttributes' => $vendorDir . '/hyperf/contract/src/CastsAttributes.php',
     'Hyperf\\Contract\\CastsInboundAttributes' => $vendorDir . '/hyperf/contract/src/CastsInboundAttributes.php',
@@ -739,6 +742,7 @@ return array(
     'Hyperf\\Database\\Events\\TransactionBeginning' => $vendorDir . '/hyperf/database/src/Events/TransactionBeginning.php',
     'Hyperf\\Database\\Events\\TransactionCommitted' => $vendorDir . '/hyperf/database/src/Events/TransactionCommitted.php',
     'Hyperf\\Database\\Events\\TransactionRolledBack' => $vendorDir . '/hyperf/database/src/Events/TransactionRolledBack.php',
+    'Hyperf\\Database\\Exception\\ClassMorphViolationException' => $vendorDir . '/hyperf/database/src/Exception/ClassMorphViolationException.php',
     'Hyperf\\Database\\Exception\\InvalidArgumentException' => $vendorDir . '/hyperf/database/src/Exception/InvalidArgumentException.php',
     'Hyperf\\Database\\Exception\\InvalidBindingException' => $vendorDir . '/hyperf/database/src/Exception/InvalidBindingException.php',
     'Hyperf\\Database\\Exception\\InvalidCastException' => $vendorDir . '/hyperf/database/src/Exception/InvalidCastException.php',
@@ -1100,6 +1104,7 @@ return array(
     'Hyperf\\Framework\\Event\\OnWorkerStop' => $vendorDir . '/hyperf/framework/src/Event/OnWorkerStop.php',
     'Hyperf\\Framework\\Event\\OtherWorkerStart' => $vendorDir . '/hyperf/framework/src/Event/OtherWorkerStart.php',
     'Hyperf\\Framework\\Exception\\NotImplementedException' => $vendorDir . '/hyperf/framework/src/Exception/NotImplementedException.php',
+    'Hyperf\\Framework\\Logger\\ConsoleLogger' => $vendorDir . '/hyperf/framework/src/Logger/ConsoleLogger.php',
     'Hyperf\\Framework\\Logger\\StdoutLogger' => $vendorDir . '/hyperf/framework/src/Logger/StdoutLogger.php',
     'Hyperf\\Framework\\SymfonyEventDispatcher' => $vendorDir . '/hyperf/framework/src/SymfonyEventDispatcher.php',
     'Hyperf\\Guzzle\\ClientFactory' => $vendorDir . '/hyperf/guzzle/src/ClientFactory.php',
@@ -1444,6 +1449,7 @@ return array(
     'Hyperf\\Support\\Backoff\\ArrayBackoff' => $vendorDir . '/hyperf/support/src/Backoff/ArrayBackoff.php',
     'Hyperf\\Support\\ClearStatCache' => $vendorDir . '/hyperf/support/src/ClearStatCache.php',
     'Hyperf\\Support\\Composer' => $vendorDir . '/hyperf/support/src/Composer.php',
+    'Hyperf\\Support\\DotenvManager' => $vendorDir . '/hyperf/support/src/DotenvManager.php',
     'Hyperf\\Support\\Exception\\ExceptionThrower' => $vendorDir . '/hyperf/support/src/Exception/ExceptionThrower.php',
     'Hyperf\\Support\\Exception\\IPReadFailedException' => $vendorDir . '/hyperf/support/src/Exception/IPReadFailedException.php',
     'Hyperf\\Support\\Exception\\InvalidArgumentException' => $vendorDir . '/hyperf/support/src/Exception/InvalidArgumentException.php',
@@ -1501,6 +1507,8 @@ return array(
     'Hyperf\\Watcher\\Driver\\FindNewerDriver' => $vendorDir . '/hyperf/watcher/src/Driver/FindNewerDriver.php',
     'Hyperf\\Watcher\\Driver\\FswatchDriver' => $vendorDir . '/hyperf/watcher/src/Driver/FswatchDriver.php',
     'Hyperf\\Watcher\\Driver\\ScanFileDriver' => $vendorDir . '/hyperf/watcher/src/Driver/ScanFileDriver.php',
+    'Hyperf\\Watcher\\Event\\BeforeServerRestart' => $vendorDir . '/hyperf/watcher/src/Event/BeforeServerRestart.php',
+    'Hyperf\\Watcher\\Listener\\ReloadDotenvListener' => $vendorDir . '/hyperf/watcher/src/Listener/ReloadDotenvListener.php',
     'Hyperf\\Watcher\\Option' => $vendorDir . '/hyperf/watcher/src/Option.php',
     'Hyperf\\Watcher\\Process' => $vendorDir . '/hyperf/watcher/src/Process.php',
     'Hyperf\\Watcher\\Watcher' => $vendorDir . '/hyperf/watcher/src/Watcher.php',
@@ -2295,12 +2303,11 @@ return array(
     'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/MethodNameMatch.php',
     'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/ParametersMatch.php',
     'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/Stub.php',
-    'PHPUnit\\Framework\\MockObject\\CannotUseAddMethodsException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseAddMethodsException.php',
     'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php',
     'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php',
     'PHPUnit\\Framework\\MockObject\\DoubledCloneMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/DoubledCloneMethod.php',
     'PHPUnit\\Framework\\MockObject\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php',
-    'PHPUnit\\Framework\\MockObject\\Generator\\ClassAlreadyExistsException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ClassAlreadyExistsException.php',
+    'PHPUnit\\Framework\\MockObject\\Generator\\CannotUseAddMethodsException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/CannotUseAddMethodsException.php',
     'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsEnumerationException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.php',
     'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsFinalException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ClassIsFinalException.php',
     'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsReadonlyException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ClassIsReadonlyException.php',
@@ -2313,6 +2320,7 @@ return array(
     'PHPUnit\\Framework\\MockObject\\Generator\\MockMethodSet' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/MockMethodSet.php',
     'PHPUnit\\Framework\\MockObject\\Generator\\MockTrait' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/MockTrait.php',
     'PHPUnit\\Framework\\MockObject\\Generator\\MockType' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/MockType.php',
+    'PHPUnit\\Framework\\MockObject\\Generator\\NameAlreadyInUseException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/NameAlreadyInUseException.php',
     'PHPUnit\\Framework\\MockObject\\Generator\\OriginalConstructorInvocationRequiredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/OriginalConstructorInvocationRequiredException.php',
     'PHPUnit\\Framework\\MockObject\\Generator\\ReflectionException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ReflectionException.php',
     'PHPUnit\\Framework\\MockObject\\Generator\\RuntimeException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/RuntimeException.php',
@@ -2338,8 +2346,8 @@ return array(
     'PHPUnit\\Framework\\MockObject\\MockObjectApi' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/MockObjectApi.php',
     'PHPUnit\\Framework\\MockObject\\MockObjectInternal' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Interface/MockObjectInternal.php',
     'PHPUnit\\Framework\\MockObject\\NeverReturningMethodException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/NeverReturningMethodException.php',
+    'PHPUnit\\Framework\\MockObject\\NoMoreReturnValuesConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/NoMoreReturnValuesConfiguredException.php',
     'PHPUnit\\Framework\\MockObject\\ProxiedCloneMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/ProxiedCloneMethod.php',
-    'PHPUnit\\Framework\\MockObject\\ReflectionException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReflectionException.php',
     'PHPUnit\\Framework\\MockObject\\ReturnValueGenerator' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/ReturnValueGenerator.php',
     'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php',
     'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/AnyInvokedCount.php',
@@ -2400,7 +2408,6 @@ return array(
     'PHPUnit\\Framework\\UnknownClassOrInterfaceException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/UnknownClassOrInterfaceException.php',
     'PHPUnit\\Framework\\UnknownTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/UnknownTypeException.php',
     'PHPUnit\\Logging\\EventLogger' => $vendorDir . '/phpunit/phpunit/src/Logging/EventLogger.php',
-    'PHPUnit\\Logging\\Exception' => $vendorDir . '/phpunit/phpunit/src/Logging/Exception.php',
     'PHPUnit\\Logging\\JUnit\\JunitXmlLogger' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/JunitXmlLogger.php',
     'PHPUnit\\Logging\\JUnit\\Subscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/Subscriber.php',
     'PHPUnit\\Logging\\JUnit\\TestErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestErroredSubscriber.php',
@@ -2539,7 +2546,7 @@ return array(
     'PHPUnit\\Runner\\ClassDoesNotExtendTestCaseException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/ClassDoesNotExtendTestCaseException.php',
     'PHPUnit\\Runner\\ClassIsAbstractException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/ClassIsAbstractException.php',
     'PHPUnit\\Runner\\CodeCoverage' => $vendorDir . '/phpunit/phpunit/src/Runner/CodeCoverage.php',
-    'PHPUnit\\Runner\\DirectoryCannotBeCreatedException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/DirectoryCannotBeCreatedException.php',
+    'PHPUnit\\Runner\\DirectoryDoesNotExistException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/DirectoryDoesNotExistException.php',
     'PHPUnit\\Runner\\ErrorException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/ErrorException.php',
     'PHPUnit\\Runner\\ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Runner/ErrorHandler.php',
     'PHPUnit\\Runner\\Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/Exception.php',
@@ -2562,11 +2569,9 @@ return array(
     'PHPUnit\\Runner\\GarbageCollection\\TestFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/GarbageCollection/Subscriber/TestFinishedSubscriber.php',
     'PHPUnit\\Runner\\InvalidOrderException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/InvalidOrderException.php',
     'PHPUnit\\Runner\\InvalidPhptFileException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/InvalidPhptFileException.php',
-    'PHPUnit\\Runner\\NoIgnoredEventException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/NoIgnoredEventException.php',
     'PHPUnit\\Runner\\ParameterDoesNotExistException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/ParameterDoesNotExistException.php',
     'PHPUnit\\Runner\\PhptExternalFileCannotBeLoadedException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/PhptExternalFileCannotBeLoadedException.php',
     'PHPUnit\\Runner\\PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Runner/PhptTestCase.php',
-    'PHPUnit\\Runner\\ReflectionException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/ReflectionException.php',
     'PHPUnit\\Runner\\ResultCache\\DefaultResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/DefaultResultCache.php',
     'PHPUnit\\Runner\\ResultCache\\NullResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/NullResultCache.php',
     'PHPUnit\\Runner\\ResultCache\\ResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/ResultCache.php',
@@ -2616,6 +2621,7 @@ return array(
     'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php',
     'PHPUnit\\TestRunner\\TestResult\\TestTriggeredWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredWarningSubscriber.php',
     'PHPUnit\\TextUI\\Application' => $vendorDir . '/phpunit/phpunit/src/TextUI/Application.php',
+    'PHPUnit\\TextUI\\CannotOpenSocketException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/CannotOpenSocketException.php',
     'PHPUnit\\TextUI\\CliArguments\\Builder' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Cli/Builder.php',
     'PHPUnit\\TextUI\\CliArguments\\Configuration' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Cli/Configuration.php',
     'PHPUnit\\TextUI\\CliArguments\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Cli/Exception.php',
@@ -2658,7 +2664,6 @@ return array(
     'PHPUnit\\TextUI\\Configuration\\Group' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/Group.php',
     'PHPUnit\\TextUI\\Configuration\\GroupCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/GroupCollection.php',
     'PHPUnit\\TextUI\\Configuration\\GroupCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/GroupCollectionIterator.php',
-    'PHPUnit\\TextUI\\Configuration\\IncludePathNotConfiguredException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/IncludePathNotConfiguredException.php',
     'PHPUnit\\TextUI\\Configuration\\IniSetting' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/IniSetting.php',
     'PHPUnit\\TextUI\\Configuration\\IniSettingCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/IniSettingCollection.php',
     'PHPUnit\\TextUI\\Configuration\\IniSettingCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/IniSettingCollectionIterator.php',
@@ -2692,9 +2697,7 @@ return array(
     'PHPUnit\\TextUI\\Configuration\\Variable' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/Variable.php',
     'PHPUnit\\TextUI\\Configuration\\VariableCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/VariableCollection.php',
     'PHPUnit\\TextUI\\Configuration\\VariableCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/VariableCollectionIterator.php',
-    'PHPUnit\\TextUI\\DirectoryDoesNotExistException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/DirectoryDoesNotExistException.php',
     'PHPUnit\\TextUI\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/Exception.php',
-    'PHPUnit\\TextUI\\ExtensionsNotConfiguredException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/ExtensionsNotConfiguredException.php',
     'PHPUnit\\TextUI\\Help' => $vendorDir . '/phpunit/phpunit/src/TextUI/Help.php',
     'PHPUnit\\TextUI\\InvalidSocketException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/InvalidSocketException.php',
     'PHPUnit\\TextUI\\Output\\DefaultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Printer/DefaultPrinter.php',
@@ -2725,7 +2728,6 @@ return array(
     'PHPUnit\\TextUI\\Output\\Printer' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Printer/Printer.php',
     'PHPUnit\\TextUI\\Output\\SummaryPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/SummaryPrinter.php',
     'PHPUnit\\TextUI\\Output\\TestDox\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/TestDox/ResultPrinter.php',
-    'PHPUnit\\TextUI\\ReflectionException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/ReflectionException.php',
     'PHPUnit\\TextUI\\RuntimeException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/RuntimeException.php',
     'PHPUnit\\TextUI\\ShellExitCodeCalculator' => $vendorDir . '/phpunit/phpunit/src/TextUI/ShellExitCodeCalculator.php',
     'PHPUnit\\TextUI\\TestDirectoryNotFoundException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/TestDirectoryNotFoundException.php',
@@ -2766,7 +2768,6 @@ return array(
     'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Text' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Logging/TestDox/Text.php',
     'PHPUnit\\TextUI\\XmlConfiguration\\Migration' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/Migration.php',
     'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilder' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/MigrationBuilder.php',
-    'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilderException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/MigrationBuilderException.php',
     'PHPUnit\\TextUI\\XmlConfiguration\\MigrationException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/MigrationException.php',
     'PHPUnit\\TextUI\\XmlConfiguration\\Migrator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrator.php',
     'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromFilterWhitelistToCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php',
@@ -2811,6 +2812,8 @@ return array(
     'PHPUnit\\Util\\Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php',
     'PHPUnit\\Util\\Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php',
     'PHPUnit\\Util\\GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php',
+    'PHPUnit\\Util\\Http\\Downloader' => $vendorDir . '/phpunit/phpunit/src/Util/Http/Downloader.php',
+    'PHPUnit\\Util\\Http\\PhpDownloader' => $vendorDir . '/phpunit/phpunit/src/Util/Http/PhpDownloader.php',
     'PHPUnit\\Util\\InvalidDirectoryException' => $vendorDir . '/phpunit/phpunit/src/Util/Exception/InvalidDirectoryException.php',
     'PHPUnit\\Util\\InvalidJsonException' => $vendorDir . '/phpunit/phpunit/src/Util/Exception/InvalidJsonException.php',
     'PHPUnit\\Util\\InvalidVersionOperatorException' => $vendorDir . '/phpunit/phpunit/src/Util/Exception/InvalidVersionOperatorException.php',
@@ -3095,6 +3098,7 @@ return array(
     'PhpCsFixer\\Fixer\\Comment\\SingleLineCommentSpacingFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentSpacingFixer.php',
     'PhpCsFixer\\Fixer\\Comment\\SingleLineCommentStyleFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentStyleFixer.php',
     'PhpCsFixer\\Fixer\\ConfigurableFixerInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ConfigurableFixerInterface.php',
+    'PhpCsFixer\\Fixer\\ConfigurableFixerTrait' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ConfigurableFixerTrait.php',
     'PhpCsFixer\\Fixer\\ConstantNotation\\NativeConstantInvocationFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ConstantNotation/NativeConstantInvocationFixer.php',
     'PhpCsFixer\\Fixer\\ControlStructure\\ControlStructureBracesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureBracesFixer.php',
     'PhpCsFixer\\Fixer\\ControlStructure\\ControlStructureContinuationPositionFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureContinuationPositionFixer.php',
@@ -3157,6 +3161,7 @@ return array(
     'PhpCsFixer\\Fixer\\Import\\SingleImportPerStatementFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleImportPerStatementFixer.php',
     'PhpCsFixer\\Fixer\\Import\\SingleLineAfterImportsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleLineAfterImportsFixer.php',
     'PhpCsFixer\\Fixer\\Indentation' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Indentation.php',
+    'PhpCsFixer\\Fixer\\InternalFixerInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/InternalFixerInterface.php',
     'PhpCsFixer\\Fixer\\LanguageConstruct\\ClassKeywordFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ClassKeywordFixer.php',
     'PhpCsFixer\\Fixer\\LanguageConstruct\\ClassKeywordRemoveFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ClassKeywordRemoveFixer.php',
     'PhpCsFixer\\Fixer\\LanguageConstruct\\CombineConsecutiveIssetsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveIssetsFixer.php',
@@ -3207,6 +3212,7 @@ return array(
     'PhpCsFixer\\Fixer\\PhpTag\\FullOpeningTagFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/FullOpeningTagFixer.php',
     'PhpCsFixer\\Fixer\\PhpTag\\LinebreakAfterOpeningTagFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/LinebreakAfterOpeningTagFixer.php',
     'PhpCsFixer\\Fixer\\PhpTag\\NoClosingTagFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/NoClosingTagFixer.php',
+    'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitAssertNewNamesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitAssertNewNamesFixer.php',
     'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitAttributesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitAttributesFixer.php',
     'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitConstructFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitConstructFixer.php',
     'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderNameFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderNameFixer.php',
@@ -3371,6 +3377,7 @@ return array(
     'PhpCsFixer\\RuleSet\\Sets\\PHPUnit60MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit60MigrationRiskySet.php',
     'PhpCsFixer\\RuleSet\\Sets\\PHPUnit75MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit75MigrationRiskySet.php',
     'PhpCsFixer\\RuleSet\\Sets\\PHPUnit84MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit84MigrationRiskySet.php',
+    'PhpCsFixer\\RuleSet\\Sets\\PHPUnit91MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit91MigrationRiskySet.php',
     'PhpCsFixer\\RuleSet\\Sets\\PSR12RiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12RiskySet.php',
     'PhpCsFixer\\RuleSet\\Sets\\PSR12Set' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12Set.php',
     'PhpCsFixer\\RuleSet\\Sets\\PSR1Set' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR1Set.php',

+ 30 - 23
vendor/composer/autoload_static.php

@@ -695,20 +695,13 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'App\\Controller\\IndexController' => __DIR__ . '/../..' . '/app/Controller/IndexController.php',
         'App\\Exception\\Handler\\AppExceptionHandler' => __DIR__ . '/../..' . '/app/Exception/Handler/AppExceptionHandler.php',
         'App\\Exception\\Handler\\JsonRpcExceptionHandler' => __DIR__ . '/../..' . '/app/Exception/Handler/JsonRpcExceptionHandler.php',
-        'App\\JsonRpc\\NewsService' => __DIR__ . '/../..' . '/app/JsonRpc/NewsService.php',
-        'App\\JsonRpc\\NewsServiceInterface' => __DIR__ . '/../..' . '/app/JsonRpc/NewsServiceInterface.php',
+        'App\\JsonRpc\\CollectorService' => __DIR__ . '/../..' . '/app/JsonRpc/CollectorService.php',
+        'App\\JsonRpc\\CollectorServiceInterface' => __DIR__ . '/../..' . '/app/JsonRpc/CollectorServiceInterface.php',
         'App\\Listener\\DbQueryExecutedListener' => __DIR__ . '/../..' . '/app/Listener/DbQueryExecutedListener.php',
         'App\\Listener\\ResumeExitCoordinatorListener' => __DIR__ . '/../..' . '/app/Listener/ResumeExitCoordinatorListener.php',
         'App\\Model\\Article' => __DIR__ . '/../..' . '/app/Model/Article.php',
-        'App\\Model\\ArticleData' => __DIR__ . '/../..' . '/app/Model/ArticleData.php',
-        'App\\Model\\Category' => __DIR__ . '/../..' . '/app/Model/Category.php',
-        'App\\Model\\Link' => __DIR__ . '/../..' . '/app/Model/Link.php',
-        'App\\Model\\Model' => __DIR__ . '/../..' . '/app/Model/Model.php',
-        'App\\Model\\Website' => __DIR__ . '/../..' . '/app/Model/Website.php',
-        'App\\Model\\WebsiteCategory' => __DIR__ . '/../..' . '/app/Model/WebsiteCategory.php',
-        'App\\Model\\WebsiteColumn' => __DIR__ . '/../..' . '/app/Model/WebsiteColumn.php',
-        'App\\Model\\WebsiteRole' => __DIR__ . '/../..' . '/app/Model/WebsiteRole.php',
-        'App\\Model\\WebsiteRoleUser' => __DIR__ . '/../..' . '/app/Model/WebsiteRoleUser.php',
+        'App\\Model\\OldModel\\Article' => __DIR__ . '/../..' . '/app/Model/OldModel/Article.php',
+        'App\\Model\\Web' => __DIR__ . '/../..' . '/app/Model/Web.php',
         'App\\Tools\\Result' => __DIR__ . '/../..' . '/app/Tools/Result.php',
         'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
         'CURLStringFile' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php',
@@ -804,6 +797,12 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'Composer\\Pcre\\MatchResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchResult.php',
         'Composer\\Pcre\\MatchStrictGroupsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchStrictGroupsResult.php',
         'Composer\\Pcre\\MatchWithOffsetsResult' => __DIR__ . '/..' . '/composer/pcre/src/MatchWithOffsetsResult.php',
+        'Composer\\Pcre\\PHPStan\\InvalidRegexPatternRule' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php',
+        'Composer\\Pcre\\PHPStan\\PregMatchFlags' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/PregMatchFlags.php',
+        'Composer\\Pcre\\PHPStan\\PregMatchParameterOutTypeExtension' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php',
+        'Composer\\Pcre\\PHPStan\\PregMatchTypeSpecifyingExtension' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php',
+        'Composer\\Pcre\\PHPStan\\PregReplaceCallbackClosureTypeExtension' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php',
+        'Composer\\Pcre\\PHPStan\\UnsafeStrictGroupsCallRule' => __DIR__ . '/..' . '/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php',
         'Composer\\Pcre\\PcreException' => __DIR__ . '/..' . '/composer/pcre/src/PcreException.php',
         'Composer\\Pcre\\Preg' => __DIR__ . '/..' . '/composer/pcre/src/Preg.php',
         'Composer\\Pcre\\Regex' => __DIR__ . '/..' . '/composer/pcre/src/Regex.php',
@@ -852,6 +851,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'DeepCopy\\Matcher\\PropertyTypeMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php',
         'DeepCopy\\Reflection\\ReflectionHelper' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php',
         'DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php',
+        'DeepCopy\\TypeFilter\\Date\\DatePeriodFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DatePeriodFilter.php',
         'DeepCopy\\TypeFilter\\ReplaceFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php',
         'DeepCopy\\TypeFilter\\ShallowCopyFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php',
         'DeepCopy\\TypeFilter\\Spl\\ArrayObjectFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php',
@@ -996,6 +996,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'Fidry\\CpuCoreCounter\\Finder\\CpuCoreFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php',
         'Fidry\\CpuCoreCounter\\Finder\\CpuInfoFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php',
         'Fidry\\CpuCoreCounter\\Finder\\DummyCpuCoreFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php',
+        'Fidry\\CpuCoreCounter\\Finder\\EnvVariableFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/EnvVariableFinder.php',
         'Fidry\\CpuCoreCounter\\Finder\\FinderRegistry' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/FinderRegistry.php',
         'Fidry\\CpuCoreCounter\\Finder\\HwLogicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php',
         'Fidry\\CpuCoreCounter\\Finder\\HwPhysicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php',
@@ -1013,6 +1014,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'Fidry\\CpuCoreCounter\\Finder\\WmicPhysicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php',
         'Fidry\\CpuCoreCounter\\Finder\\_NProcessorFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php',
         'Fidry\\CpuCoreCounter\\NumberOfCpuCoreNotFound' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php',
+        'Fidry\\CpuCoreCounter\\ParallelisationResult' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/ParallelisationResult.php',
         'Fig\\Http\\Message\\RequestMethodInterface' => __DIR__ . '/..' . '/fig/http-message-util/src/RequestMethodInterface.php',
         'Fig\\Http\\Message\\StatusCodeInterface' => __DIR__ . '/..' . '/fig/http-message-util/src/StatusCodeInterface.php',
         'GrahamCampbell\\ResultType\\Error' => __DIR__ . '/..' . '/graham-campbell/result-type/src/Error.php',
@@ -1315,6 +1317,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'Hyperf\\Context\\Traits\\CoroutineProxy' => __DIR__ . '/..' . '/hyperf/context/src/Traits/CoroutineProxy.php',
         'Hyperf\\Contract\\ApplicationInterface' => __DIR__ . '/..' . '/hyperf/contract/src/ApplicationInterface.php',
         'Hyperf\\Contract\\Arrayable' => __DIR__ . '/..' . '/hyperf/contract/src/Arrayable.php',
+        'Hyperf\\Contract\\CanBeEscapedWhenCastToString' => __DIR__ . '/..' . '/hyperf/contract/src/CanBeEscapedWhenCastToString.php',
         'Hyperf\\Contract\\Castable' => __DIR__ . '/..' . '/hyperf/contract/src/Castable.php',
         'Hyperf\\Contract\\CastsAttributes' => __DIR__ . '/..' . '/hyperf/contract/src/CastsAttributes.php',
         'Hyperf\\Contract\\CastsInboundAttributes' => __DIR__ . '/..' . '/hyperf/contract/src/CastsInboundAttributes.php',
@@ -1423,6 +1426,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'Hyperf\\Database\\Events\\TransactionBeginning' => __DIR__ . '/..' . '/hyperf/database/src/Events/TransactionBeginning.php',
         'Hyperf\\Database\\Events\\TransactionCommitted' => __DIR__ . '/..' . '/hyperf/database/src/Events/TransactionCommitted.php',
         'Hyperf\\Database\\Events\\TransactionRolledBack' => __DIR__ . '/..' . '/hyperf/database/src/Events/TransactionRolledBack.php',
+        'Hyperf\\Database\\Exception\\ClassMorphViolationException' => __DIR__ . '/..' . '/hyperf/database/src/Exception/ClassMorphViolationException.php',
         'Hyperf\\Database\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/hyperf/database/src/Exception/InvalidArgumentException.php',
         'Hyperf\\Database\\Exception\\InvalidBindingException' => __DIR__ . '/..' . '/hyperf/database/src/Exception/InvalidBindingException.php',
         'Hyperf\\Database\\Exception\\InvalidCastException' => __DIR__ . '/..' . '/hyperf/database/src/Exception/InvalidCastException.php',
@@ -1784,6 +1788,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'Hyperf\\Framework\\Event\\OnWorkerStop' => __DIR__ . '/..' . '/hyperf/framework/src/Event/OnWorkerStop.php',
         'Hyperf\\Framework\\Event\\OtherWorkerStart' => __DIR__ . '/..' . '/hyperf/framework/src/Event/OtherWorkerStart.php',
         'Hyperf\\Framework\\Exception\\NotImplementedException' => __DIR__ . '/..' . '/hyperf/framework/src/Exception/NotImplementedException.php',
+        'Hyperf\\Framework\\Logger\\ConsoleLogger' => __DIR__ . '/..' . '/hyperf/framework/src/Logger/ConsoleLogger.php',
         'Hyperf\\Framework\\Logger\\StdoutLogger' => __DIR__ . '/..' . '/hyperf/framework/src/Logger/StdoutLogger.php',
         'Hyperf\\Framework\\SymfonyEventDispatcher' => __DIR__ . '/..' . '/hyperf/framework/src/SymfonyEventDispatcher.php',
         'Hyperf\\Guzzle\\ClientFactory' => __DIR__ . '/..' . '/hyperf/guzzle/src/ClientFactory.php',
@@ -2128,6 +2133,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'Hyperf\\Support\\Backoff\\ArrayBackoff' => __DIR__ . '/..' . '/hyperf/support/src/Backoff/ArrayBackoff.php',
         'Hyperf\\Support\\ClearStatCache' => __DIR__ . '/..' . '/hyperf/support/src/ClearStatCache.php',
         'Hyperf\\Support\\Composer' => __DIR__ . '/..' . '/hyperf/support/src/Composer.php',
+        'Hyperf\\Support\\DotenvManager' => __DIR__ . '/..' . '/hyperf/support/src/DotenvManager.php',
         'Hyperf\\Support\\Exception\\ExceptionThrower' => __DIR__ . '/..' . '/hyperf/support/src/Exception/ExceptionThrower.php',
         'Hyperf\\Support\\Exception\\IPReadFailedException' => __DIR__ . '/..' . '/hyperf/support/src/Exception/IPReadFailedException.php',
         'Hyperf\\Support\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/hyperf/support/src/Exception/InvalidArgumentException.php',
@@ -2185,6 +2191,8 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'Hyperf\\Watcher\\Driver\\FindNewerDriver' => __DIR__ . '/..' . '/hyperf/watcher/src/Driver/FindNewerDriver.php',
         'Hyperf\\Watcher\\Driver\\FswatchDriver' => __DIR__ . '/..' . '/hyperf/watcher/src/Driver/FswatchDriver.php',
         'Hyperf\\Watcher\\Driver\\ScanFileDriver' => __DIR__ . '/..' . '/hyperf/watcher/src/Driver/ScanFileDriver.php',
+        'Hyperf\\Watcher\\Event\\BeforeServerRestart' => __DIR__ . '/..' . '/hyperf/watcher/src/Event/BeforeServerRestart.php',
+        'Hyperf\\Watcher\\Listener\\ReloadDotenvListener' => __DIR__ . '/..' . '/hyperf/watcher/src/Listener/ReloadDotenvListener.php',
         'Hyperf\\Watcher\\Option' => __DIR__ . '/..' . '/hyperf/watcher/src/Option.php',
         'Hyperf\\Watcher\\Process' => __DIR__ . '/..' . '/hyperf/watcher/src/Process.php',
         'Hyperf\\Watcher\\Watcher' => __DIR__ . '/..' . '/hyperf/watcher/src/Watcher.php',
@@ -2979,12 +2987,11 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/MethodNameMatch.php',
         'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/ParametersMatch.php',
         'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/Stub.php',
-        'PHPUnit\\Framework\\MockObject\\CannotUseAddMethodsException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseAddMethodsException.php',
         'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php',
         'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php',
         'PHPUnit\\Framework\\MockObject\\DoubledCloneMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/DoubledCloneMethod.php',
         'PHPUnit\\Framework\\MockObject\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php',
-        'PHPUnit\\Framework\\MockObject\\Generator\\ClassAlreadyExistsException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ClassAlreadyExistsException.php',
+        'PHPUnit\\Framework\\MockObject\\Generator\\CannotUseAddMethodsException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/CannotUseAddMethodsException.php',
         'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsEnumerationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.php',
         'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsFinalException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ClassIsFinalException.php',
         'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsReadonlyException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ClassIsReadonlyException.php',
@@ -2997,6 +3004,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PHPUnit\\Framework\\MockObject\\Generator\\MockMethodSet' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/MockMethodSet.php',
         'PHPUnit\\Framework\\MockObject\\Generator\\MockTrait' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/MockTrait.php',
         'PHPUnit\\Framework\\MockObject\\Generator\\MockType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/MockType.php',
+        'PHPUnit\\Framework\\MockObject\\Generator\\NameAlreadyInUseException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/NameAlreadyInUseException.php',
         'PHPUnit\\Framework\\MockObject\\Generator\\OriginalConstructorInvocationRequiredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/OriginalConstructorInvocationRequiredException.php',
         'PHPUnit\\Framework\\MockObject\\Generator\\ReflectionException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ReflectionException.php',
         'PHPUnit\\Framework\\MockObject\\Generator\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/RuntimeException.php',
@@ -3022,8 +3030,8 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PHPUnit\\Framework\\MockObject\\MockObjectApi' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/MockObjectApi.php',
         'PHPUnit\\Framework\\MockObject\\MockObjectInternal' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Interface/MockObjectInternal.php',
         'PHPUnit\\Framework\\MockObject\\NeverReturningMethodException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/NeverReturningMethodException.php',
+        'PHPUnit\\Framework\\MockObject\\NoMoreReturnValuesConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/NoMoreReturnValuesConfiguredException.php',
         'PHPUnit\\Framework\\MockObject\\ProxiedCloneMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/ProxiedCloneMethod.php',
-        'PHPUnit\\Framework\\MockObject\\ReflectionException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReflectionException.php',
         'PHPUnit\\Framework\\MockObject\\ReturnValueGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/ReturnValueGenerator.php',
         'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php',
         'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/AnyInvokedCount.php',
@@ -3084,7 +3092,6 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PHPUnit\\Framework\\UnknownClassOrInterfaceException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/UnknownClassOrInterfaceException.php',
         'PHPUnit\\Framework\\UnknownTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/UnknownTypeException.php',
         'PHPUnit\\Logging\\EventLogger' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/EventLogger.php',
-        'PHPUnit\\Logging\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/Exception.php',
         'PHPUnit\\Logging\\JUnit\\JunitXmlLogger' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/JunitXmlLogger.php',
         'PHPUnit\\Logging\\JUnit\\Subscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/Subscriber.php',
         'PHPUnit\\Logging\\JUnit\\TestErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestErroredSubscriber.php',
@@ -3223,7 +3230,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PHPUnit\\Runner\\ClassDoesNotExtendTestCaseException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/ClassDoesNotExtendTestCaseException.php',
         'PHPUnit\\Runner\\ClassIsAbstractException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/ClassIsAbstractException.php',
         'PHPUnit\\Runner\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/CodeCoverage.php',
-        'PHPUnit\\Runner\\DirectoryCannotBeCreatedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/DirectoryCannotBeCreatedException.php',
+        'PHPUnit\\Runner\\DirectoryDoesNotExistException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/DirectoryDoesNotExistException.php',
         'PHPUnit\\Runner\\ErrorException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/ErrorException.php',
         'PHPUnit\\Runner\\ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ErrorHandler.php',
         'PHPUnit\\Runner\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/Exception.php',
@@ -3246,11 +3253,9 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PHPUnit\\Runner\\GarbageCollection\\TestFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/GarbageCollection/Subscriber/TestFinishedSubscriber.php',
         'PHPUnit\\Runner\\InvalidOrderException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/InvalidOrderException.php',
         'PHPUnit\\Runner\\InvalidPhptFileException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/InvalidPhptFileException.php',
-        'PHPUnit\\Runner\\NoIgnoredEventException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/NoIgnoredEventException.php',
         'PHPUnit\\Runner\\ParameterDoesNotExistException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/ParameterDoesNotExistException.php',
         'PHPUnit\\Runner\\PhptExternalFileCannotBeLoadedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/PhptExternalFileCannotBeLoadedException.php',
         'PHPUnit\\Runner\\PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/PhptTestCase.php',
-        'PHPUnit\\Runner\\ReflectionException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/ReflectionException.php',
         'PHPUnit\\Runner\\ResultCache\\DefaultResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/DefaultResultCache.php',
         'PHPUnit\\Runner\\ResultCache\\NullResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/NullResultCache.php',
         'PHPUnit\\Runner\\ResultCache\\ResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/ResultCache.php',
@@ -3300,6 +3305,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php',
         'PHPUnit\\TestRunner\\TestResult\\TestTriggeredWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredWarningSubscriber.php',
         'PHPUnit\\TextUI\\Application' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Application.php',
+        'PHPUnit\\TextUI\\CannotOpenSocketException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/CannotOpenSocketException.php',
         'PHPUnit\\TextUI\\CliArguments\\Builder' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Cli/Builder.php',
         'PHPUnit\\TextUI\\CliArguments\\Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Cli/Configuration.php',
         'PHPUnit\\TextUI\\CliArguments\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Cli/Exception.php',
@@ -3342,7 +3348,6 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PHPUnit\\TextUI\\Configuration\\Group' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/Group.php',
         'PHPUnit\\TextUI\\Configuration\\GroupCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/GroupCollection.php',
         'PHPUnit\\TextUI\\Configuration\\GroupCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/GroupCollectionIterator.php',
-        'PHPUnit\\TextUI\\Configuration\\IncludePathNotConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/IncludePathNotConfiguredException.php',
         'PHPUnit\\TextUI\\Configuration\\IniSetting' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/IniSetting.php',
         'PHPUnit\\TextUI\\Configuration\\IniSettingCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/IniSettingCollection.php',
         'PHPUnit\\TextUI\\Configuration\\IniSettingCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/IniSettingCollectionIterator.php',
@@ -3376,9 +3381,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PHPUnit\\TextUI\\Configuration\\Variable' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/Variable.php',
         'PHPUnit\\TextUI\\Configuration\\VariableCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/VariableCollection.php',
         'PHPUnit\\TextUI\\Configuration\\VariableCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/VariableCollectionIterator.php',
-        'PHPUnit\\TextUI\\DirectoryDoesNotExistException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/DirectoryDoesNotExistException.php',
         'PHPUnit\\TextUI\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/Exception.php',
-        'PHPUnit\\TextUI\\ExtensionsNotConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/ExtensionsNotConfiguredException.php',
         'PHPUnit\\TextUI\\Help' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Help.php',
         'PHPUnit\\TextUI\\InvalidSocketException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/InvalidSocketException.php',
         'PHPUnit\\TextUI\\Output\\DefaultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Printer/DefaultPrinter.php',
@@ -3409,7 +3412,6 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PHPUnit\\TextUI\\Output\\Printer' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Printer/Printer.php',
         'PHPUnit\\TextUI\\Output\\SummaryPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/SummaryPrinter.php',
         'PHPUnit\\TextUI\\Output\\TestDox\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/TestDox/ResultPrinter.php',
-        'PHPUnit\\TextUI\\ReflectionException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/ReflectionException.php',
         'PHPUnit\\TextUI\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/RuntimeException.php',
         'PHPUnit\\TextUI\\ShellExitCodeCalculator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/ShellExitCodeCalculator.php',
         'PHPUnit\\TextUI\\TestDirectoryNotFoundException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/TestDirectoryNotFoundException.php',
@@ -3450,7 +3452,6 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Text' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Logging/TestDox/Text.php',
         'PHPUnit\\TextUI\\XmlConfiguration\\Migration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/Migration.php',
         'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/MigrationBuilder.php',
-        'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilderException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/MigrationBuilderException.php',
         'PHPUnit\\TextUI\\XmlConfiguration\\MigrationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/MigrationException.php',
         'PHPUnit\\TextUI\\XmlConfiguration\\Migrator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrator.php',
         'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromFilterWhitelistToCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php',
@@ -3495,6 +3496,8 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PHPUnit\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filesystem.php',
         'PHPUnit\\Util\\Filter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filter.php',
         'PHPUnit\\Util\\GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/GlobalState.php',
+        'PHPUnit\\Util\\Http\\Downloader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Http/Downloader.php',
+        'PHPUnit\\Util\\Http\\PhpDownloader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Http/PhpDownloader.php',
         'PHPUnit\\Util\\InvalidDirectoryException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception/InvalidDirectoryException.php',
         'PHPUnit\\Util\\InvalidJsonException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception/InvalidJsonException.php',
         'PHPUnit\\Util\\InvalidVersionOperatorException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception/InvalidVersionOperatorException.php',
@@ -3779,6 +3782,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PhpCsFixer\\Fixer\\Comment\\SingleLineCommentSpacingFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentSpacingFixer.php',
         'PhpCsFixer\\Fixer\\Comment\\SingleLineCommentStyleFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Comment/SingleLineCommentStyleFixer.php',
         'PhpCsFixer\\Fixer\\ConfigurableFixerInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ConfigurableFixerInterface.php',
+        'PhpCsFixer\\Fixer\\ConfigurableFixerTrait' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ConfigurableFixerTrait.php',
         'PhpCsFixer\\Fixer\\ConstantNotation\\NativeConstantInvocationFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ConstantNotation/NativeConstantInvocationFixer.php',
         'PhpCsFixer\\Fixer\\ControlStructure\\ControlStructureBracesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureBracesFixer.php',
         'PhpCsFixer\\Fixer\\ControlStructure\\ControlStructureContinuationPositionFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/ControlStructureContinuationPositionFixer.php',
@@ -3841,6 +3845,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PhpCsFixer\\Fixer\\Import\\SingleImportPerStatementFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleImportPerStatementFixer.php',
         'PhpCsFixer\\Fixer\\Import\\SingleLineAfterImportsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Import/SingleLineAfterImportsFixer.php',
         'PhpCsFixer\\Fixer\\Indentation' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Indentation.php',
+        'PhpCsFixer\\Fixer\\InternalFixerInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/InternalFixerInterface.php',
         'PhpCsFixer\\Fixer\\LanguageConstruct\\ClassKeywordFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ClassKeywordFixer.php',
         'PhpCsFixer\\Fixer\\LanguageConstruct\\ClassKeywordRemoveFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/ClassKeywordRemoveFixer.php',
         'PhpCsFixer\\Fixer\\LanguageConstruct\\CombineConsecutiveIssetsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/LanguageConstruct/CombineConsecutiveIssetsFixer.php',
@@ -3891,6 +3896,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PhpCsFixer\\Fixer\\PhpTag\\FullOpeningTagFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/FullOpeningTagFixer.php',
         'PhpCsFixer\\Fixer\\PhpTag\\LinebreakAfterOpeningTagFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/LinebreakAfterOpeningTagFixer.php',
         'PhpCsFixer\\Fixer\\PhpTag\\NoClosingTagFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpTag/NoClosingTagFixer.php',
+        'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitAssertNewNamesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitAssertNewNamesFixer.php',
         'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitAttributesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitAttributesFixer.php',
         'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitConstructFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitConstructFixer.php',
         'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderNameFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderNameFixer.php',
@@ -4055,6 +4061,7 @@ class ComposerStaticInit88f2a4d4a4e81dc7d415bcdf39930654
         'PhpCsFixer\\RuleSet\\Sets\\PHPUnit60MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit60MigrationRiskySet.php',
         'PhpCsFixer\\RuleSet\\Sets\\PHPUnit75MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit75MigrationRiskySet.php',
         'PhpCsFixer\\RuleSet\\Sets\\PHPUnit84MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit84MigrationRiskySet.php',
+        'PhpCsFixer\\RuleSet\\Sets\\PHPUnit91MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHPUnit91MigrationRiskySet.php',
         'PhpCsFixer\\RuleSet\\Sets\\PSR12RiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12RiskySet.php',
         'PhpCsFixer\\RuleSet\\Sets\\PSR12Set' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR12Set.php',
         'PhpCsFixer\\RuleSet\\Sets\\PSR1Set' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PSR1Set.php',

文件差异内容过多而无法显示
+ 203 - 193
vendor/composer/installed.json


文件差异内容过多而无法显示
+ 268 - 268
vendor/composer/installed.php


+ 9 - 1
vendor/composer/pcre/README.md

@@ -12,7 +12,8 @@ to understand the implications.
 
 It thus makes it easier to work with static analysis tools like PHPStan or Psalm as it
 simplifies and reduces the possible return values from all the `preg_*` functions which
-are quite packed with edge cases.
+are quite packed with edge cases. As of v2.2.0 / v3.2.0 the library also comes with a
+[PHPStan extension](#phpstan-extension) for parsing regular expressions and giving you even better output types.
 
 This library is a thin wrapper around `preg_*` functions with [some limitations](#restrictions--limitations).
 If you are looking for a richer API to handle regular expressions have a look at
@@ -175,6 +176,13 @@ preg_match('/(a)(b)*(c)(d)*/', 'ac', $matches, $flags);
 | group 2 (any unmatched group preceding one that matched) is set to `''`. You cannot tell if it matched an empty string or did not match at all | group 2 is `null` when unmatched and a string if it matched, easy to check for |
 | group 4 (any optional group without a matching one following) is missing altogether. So you have to check with `isset()`, but really you want `isset($m[4]) && $m[4] !== ''` for safety unless you are very careful to check that a non-optional group follows it | group 4 is always set, and null in this case as there was no match, easy to check for with `$m[4] !== null` |
 
+PHPStan Extension
+-----------------
+
+To use the PHPStan extension if you do not use `phpstan/extension-installer` you can include `vendor/composer/pcre/extension.neon` in your PHPStan config.
+
+The extension provides much better type information for $matches as well as regex validation where possible.
+
 License
 -------
 

+ 12 - 4
vendor/composer/pcre/composer.json

@@ -20,10 +20,13 @@
         "php": "^7.4 || ^8.0"
     },
     "require-dev": {
-        "symfony/phpunit-bridge": "^5",
-        "phpstan/phpstan": "^1.3",
+        "phpunit/phpunit": "^8 || ^9",
+        "phpstan/phpstan": "^1.11.10",
         "phpstan/phpstan-strict-rules": "^1.1"
     },
+    "conflict": {
+        "phpstan/phpstan": "<1.11.10"
+    },
     "autoload": {
         "psr-4": {
             "Composer\\Pcre\\": "src"
@@ -37,10 +40,15 @@
     "extra": {
         "branch-alias": {
             "dev-main": "3.x-dev"
+        },
+        "phpstan": {
+            "includes": [
+                "extension.neon"
+            ]
         }
     },
     "scripts": {
-        "test": "vendor/bin/simple-phpunit",
-        "phpstan": "phpstan analyse"
+        "test": "@php vendor/bin/phpunit",
+        "phpstan": "@php phpstan analyse"
     }
 }

+ 2 - 0
vendor/composer/pcre/src/Regex.php

@@ -43,6 +43,7 @@ class Regex
      */
     public static function matchStrictGroups(string $pattern, string $subject, int $flags = 0, int $offset = 0): MatchStrictGroupsResult
     {
+        // @phpstan-ignore composerPcre.maybeUnsafeStrictGroups
         $count = Preg::matchStrictGroups($pattern, $subject, $matches, $flags, $offset);
 
         return new MatchStrictGroupsResult($count, $matches);
@@ -87,6 +88,7 @@ class Regex
         self::checkOffsetCapture($flags, 'matchAllWithOffsets');
         self::checkSetOrder($flags);
 
+        // @phpstan-ignore composerPcre.maybeUnsafeStrictGroups
         $count = Preg::matchAllStrictGroups($pattern, $subject, $matches, $flags, $offset);
 
         return new MatchAllStrictGroupsResult($count, $matches);

+ 15 - 0
vendor/composer/semver/CHANGELOG.md

@@ -3,6 +3,18 @@
 All notable changes to this project will be documented in this file.
 This project adheres to [Semantic Versioning](http://semver.org/).
 
+### [3.4.3] 2024-09-19
+
+  * Fixed some type annotations
+
+### [3.4.2] 2024-07-12
+
+  * Fixed PHP 5.3 syntax error
+
+### [3.4.1] 2024-07-12
+
+  * Fixed normalizeStability's return type to enforce valid stabilities
+
 ### [3.4.0] 2023-08-31
 
   * Support larger major version numbers (#149)
@@ -179,6 +191,9 @@ This project adheres to [Semantic Versioning](http://semver.org/).
     - Namespace: `Composer\Test\Package\LinkConstraint` -> `Composer\Test\Semver\Constraint`
   * Changed: code style using php-cs-fixer.
 
+[3.4.3]: https://github.com/composer/semver/compare/3.4.2...3.4.3
+[3.4.2]: https://github.com/composer/semver/compare/3.4.1...3.4.2
+[3.4.1]: https://github.com/composer/semver/compare/3.4.0...3.4.1
 [3.4.0]: https://github.com/composer/semver/compare/3.3.2...3.4.0
 [3.3.2]: https://github.com/composer/semver/compare/3.3.1...3.3.2
 [3.3.1]: https://github.com/composer/semver/compare/3.3.0...3.3.1

+ 2 - 2
vendor/composer/semver/composer.json

@@ -34,8 +34,8 @@
         "php": "^5.3.2 || ^7.0 || ^8.0"
     },
     "require-dev": {
-        "symfony/phpunit-bridge": "^4.2 || ^5",
-        "phpstan/phpstan": "^1.4"
+        "symfony/phpunit-bridge": "^3 || ^7",
+        "phpstan/phpstan": "^1.11"
     },
     "autoload": {
         "psr-4": {

+ 0 - 11
vendor/composer/semver/phpstan-baseline.neon

@@ -1,11 +0,0 @@
-parameters:
-	ignoreErrors:
-		-
-			message: "#^Parameter \\#1 \\$operator of class Composer\\\\Semver\\\\Constraint\\\\Constraint constructor expects '\\!\\='\\|'\\<'\\|'\\<\\='\\|'\\<\\>'\\|'\\='\\|'\\=\\='\\|'\\>'\\|'\\>\\=', non\\-falsy\\-string given\\.$#"
-			count: 1
-			path: src/VersionParser.php
-
-		-
-			message: "#^Strict comparison using \\=\\=\\= between null and non\\-empty\\-string will always evaluate to false\\.$#"
-			count: 2
-			path: src/VersionParser.php

+ 1 - 1
vendor/composer/semver/src/CompilingMatcher.php

@@ -64,7 +64,7 @@ class CompilingMatcher
      * @phpstan-param Constraint::OP_*  $operator
      * @param string              $version
      *
-     * @return mixed
+     * @return bool
      */
     public static function match(ConstraintInterface $constraint, $operator, $version)
     {

+ 5 - 0
vendor/composer/semver/src/VersionParser.php

@@ -82,11 +82,16 @@ class VersionParser
      * @param string $stability
      *
      * @return string
+     * @phpstan-return 'stable'|'RC'|'beta'|'alpha'|'dev'
      */
     public static function normalizeStability($stability)
     {
         $stability = strtolower((string) $stability);
 
+        if (!in_array($stability, array('stable', 'rc', 'beta', 'alpha', 'dev'), true)) {
+            throw new \InvalidArgumentException('Invalid stability string "'.$stability.'", expected one of stable, RC, beta, alpha or dev');
+        }
+
         return $stability === 'rc' ? 'RC' : $stability;
     }
 

+ 8 - 1
vendor/doctrine/annotations/README.md

@@ -4,6 +4,13 @@ which are a native replacement for annotations. As such, this library is
 considered feature complete, and should receive exclusively bugfixes and
 security fixes.
 
+We do not recommend using this library in new projects and encourage authors
+of downstream libraries to offer support for attributes as an alternative to
+Doctrine Annotations.
+
+Have a look at [our blog](https://www.doctrine-project.org/2022/11/04/annotations-to-attributes.html)
+to learn more.
+
 # Doctrine Annotations
 
 [![Build Status](https://github.com/doctrine/annotations/workflows/Continuous%20Integration/badge.svg?label=build)](https://github.com/doctrine/persistence/actions)
@@ -16,7 +23,7 @@ Docblock Annotations Parser library (extracted from [Doctrine Common](https://gi
 
 ## Documentation
 
-See the [doctrine-project website](https://www.doctrine-project.org/projects/doctrine-annotations/en/latest/index.html).
+See the [doctrine-project website](https://www.doctrine-project.org/projects/doctrine-annotations/en/stable/index.html).
 
 ## Contributing
 

+ 1 - 1
vendor/doctrine/annotations/UPGRADE.md

@@ -7,7 +7,7 @@
 `Doctrine\Common\Lexer\Token` objects. When using `doctrine/lexer` 2, these
 implement `ArrayAccess` as a way for you to still be able to treat them as
 arrays in some ways.
-- `CachedReader` and `FileCacheReader` have been removed.
+- `CachedReader` and `FileCacheReader` have been removed use `PsrCachedReader` instead.
 - `AnnotationRegistry` methods related to registering annotations instead of
   using autoloading have been removed.
 - Parameter type declarations have been added to all methods of all classes. If

+ 3 - 3
vendor/doctrine/annotations/composer.json

@@ -40,10 +40,10 @@
     "require-dev": {
         "doctrine/cache": "^2.0",
         "doctrine/coding-standard": "^10",
-        "phpstan/phpstan": "^1.8.0",
+        "phpstan/phpstan": "^1.10.28",
         "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
-        "symfony/cache": "^5.4 || ^6",
-        "vimeo/psalm": "^4.10"
+        "symfony/cache": "^5.4 || ^6.4 || ^7",
+        "vimeo/psalm": "^4.30 || ^5.14"
     },
     "suggest": {
         "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"

+ 8 - 1
vendor/doctrine/annotations/docs/en/index.rst

@@ -7,6 +7,13 @@ which are a native replacement for annotations. As such, this library is
 considered feature complete, and should receive exclusively bugfixes and
 security fixes.
 
+We do not recommend using this library in new projects and encourage authors
+of downstream libraries to offer support for attributes as an alternative to
+Doctrine Annotations.
+
+Have a look at [our blog](https://www.doctrine-project.org/2022/11/04/annotations-to-attributes.html)
+to learn more.
+
 Introduction
 ============
 
@@ -38,7 +45,7 @@ You can install the Annotation component with composer:
 
 .. code-block::
 
-    $ composer require doctrine/annotations
+    $ composer require doctrine/annotations
 
 Create an annotation class
 ==========================

+ 10 - 3
vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php

@@ -12,8 +12,11 @@ use ReflectionProperty;
 use function array_merge;
 use function class_exists;
 use function extension_loaded;
+use function filter_var;
 use function ini_get;
 
+use const FILTER_VALIDATE_BOOLEAN;
+
 /**
  * A reader for docblock annotations.
  */
@@ -105,13 +108,17 @@ class AnnotationReader implements Reader
     public function __construct(?DocParser $parser = null)
     {
         if (
-            extension_loaded('Zend Optimizer+') && (ini_get('zend_optimizerplus.save_comments') === '0' ||
-            ini_get('opcache.save_comments') === '0')
+            extension_loaded('Zend Optimizer+') &&
+            (filter_var(ini_get('zend_optimizerplus.save_comments'), FILTER_VALIDATE_BOOLEAN)  === false ||
+            filter_var(ini_get('opcache.save_comments'), FILTER_VALIDATE_BOOLEAN) === false)
         ) {
             throw AnnotationException::optimizerPlusSaveComments();
         }
 
-        if (extension_loaded('Zend OPcache') && ini_get('opcache.save_comments') === 0) {
+        if (
+            extension_loaded('Zend OPcache') &&
+            filter_var(ini_get('opcache.save_comments'), FILTER_VALIDATE_BOOLEAN) === false
+        ) {
             throw AnnotationException::optimizerPlusSaveComments();
         }
 

+ 3 - 3
vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php

@@ -74,7 +74,7 @@ final class DocLexer extends AbstractLexer
     }
 
     /**
-     * {@inheritdoc}
+     * {@inheritDoc}
      */
     protected function getCatchablePatterns()
     {
@@ -86,7 +86,7 @@ final class DocLexer extends AbstractLexer
     }
 
     /**
-     * {@inheritdoc}
+     * {@inheritDoc}
      */
     protected function getNonCatchablePatterns()
     {
@@ -94,7 +94,7 @@ final class DocLexer extends AbstractLexer
     }
 
     /**
-     * {@inheritdoc}
+     * {@inheritDoc}
      */
     protected function getType(&$value)
     {

+ 5 - 3
vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php

@@ -49,6 +49,8 @@ use const PHP_VERSION_ID;
  * A parser for docblock annotations.
  *
  * It is strongly discouraged to change the default annotation parsing process.
+ *
+ * @psalm-type Arguments = array{positional_arguments?: array<int, mixed>, named_arguments?: array<string, mixed>}
  */
 final class DocParser
 {
@@ -1026,7 +1028,7 @@ EXCEPTION
     /**
      * MethodCall ::= ["(" [Values] ")"]
      *
-     * @return mixed[]
+     * @psalm-return Arguments
      *
      * @throws AnnotationException
      * @throws ReflectionException
@@ -1053,7 +1055,7 @@ EXCEPTION
     /**
      * Values ::= Array | Value {"," Value}* [","]
      *
-     * @return mixed[]
+     * @psalm-return Arguments
      *
      * @throws AnnotationException
      * @throws ReflectionException
@@ -1415,7 +1417,7 @@ EXCEPTION
     /**
      * Resolve positional arguments (without name) to named ones
      *
-     * @param array<string,mixed> $arguments
+     * @psalm-param Arguments $arguments
      *
      * @return array<string,mixed>
      */

+ 3 - 2
vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php

@@ -12,6 +12,7 @@ use function array_map;
 use function array_merge;
 use function assert;
 use function filemtime;
+use function is_file;
 use function max;
 use function rawurlencode;
 use function time;
@@ -195,7 +196,7 @@ final class PsrCachedReader implements Reader
         $parent = $class->getParentClass();
 
         $lastModification =  max(array_merge(
-            [$filename ? filemtime($filename) : 0],
+            [$filename !== false && is_file($filename) ? filemtime($filename) : 0],
             array_map(function (ReflectionClass $reflectionTrait): int {
                 return $this->getTraitLastModificationTime($reflectionTrait);
             }, $class->getTraits()),
@@ -219,7 +220,7 @@ final class PsrCachedReader implements Reader
         }
 
         $lastModificationTime = max(array_merge(
-            [$fileName ? filemtime($fileName) : 0],
+            [$fileName !== false && is_file($fileName) ? filemtime($fileName) : 0],
             array_map(function (ReflectionClass $reflectionTrait): int {
                 return $this->getTraitLastModificationTime($reflectionTrait);
             }, $reflectionTrait->getTraits())

+ 0 - 15
vendor/doctrine/annotations/psalm.xml

@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-<psalm
-    errorLevel="7"
-    resolveFromConfigFile="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"
->
-    <projectFiles>
-        <directory name="lib/Doctrine/Common/Annotations" />
-        <ignoreFiles>
-            <directory name="vendor" />
-        </ignoreFiles>
-    </projectFiles>
-</psalm>

+ 34 - 10
vendor/fidry/cpu-core-counter/README.md

@@ -16,6 +16,10 @@ use Fidry\CpuCoreCounter\Finder\DummyCpuCoreFinder;
 
 $counter = new CpuCoreCounter();
 
+// For knowing the number of cores you can use for launching parallel processes:
+$counter->getAvailableForParallelisation()->availableCpus;
+
+// Get the number of CPU cores (by default it will use the logical cores count):
 try {
     $counter->getCount();   // e.g. 8
 } catch (NumberOfCpuCoreNotFound) {
@@ -29,6 +33,10 @@ $counter = new CpuCoreCounter([
     new DummyCpuCoreFinder(1),  // Fallback value
 ]);
 
+// A type-safe alternative form:
+$counter->getCountWithFallback(1);
+
+// Note that the result is memoized.
 $counter->getCount();   // e.g. 8
 
 ```
@@ -68,30 +76,46 @@ $cores = (new CpuCoreCounter($finders))->getCount();
 `FinderRegistry` provides two helpful entries:
 
 - `::getDefaultLogicalFinders()`: gives an ordered list of finders that will
-  look for the _logical_ CPU cores count
+  look for the _logical_ CPU cores count.
 - `::getDefaultPhysicalFinders()`: gives an ordered list of finders that will
-  look for the _physical_ CPU cores count
+  look for the _physical_ CPU cores count.
 
-By default when using `CpuCoreCounter`, it will use the logical finders since
+By default, when using `CpuCoreCounter`, it will use the logical finders since
 it is more likely what you are looking for and is what is used by PHP source to
 build the PHP binary.
 
 
 ### Checks what finders find what on your system
 
-You have two commands available that provides insight about what the finders
+You have three scrips available that provides insight about what the finders
 can find:
 
-```
-$ make diagnose                                     # From this repository
-$ ./vendor/fidry/cpu-core-counter/bin/diagnose.php  # From the library
+```shell
+# Checks what each given finder will find on your system with details about the
+# information it had.
+make diagnose                                     # From this repository
+./vendor/fidry/cpu-core-counter/bin/diagnose.php  # From the library
 ```
 
 And:
+```shell
+# Execute all finders and display the result they found.
+make execute                                     # From this repository
+./vendor/fidry/cpu-core-counter/bin/execute.php  # From the library
 ```
-$ make execute                                     # From this repository
-$ ./vendor/fidry/cpu-core-counter/bin/execute.php  # From the library
-```
+
+
+### Debug the results found
+
+You have 3 methods available to help you find out what happened:
+
+1. If you are using the default configuration of finder registries, you can check
+   the previous section which will provide plenty of information.
+2. If what you are interested in is how many CPU cores were found, you can use
+   the `CpuCoreCounter::trace()` method.
+3. If what you are interested in is how the calculation of CPU cores available
+   for parallelisation was done, you can inspect the values of `ParallelisationResult`
+   returned by `CpuCoreCounter::getAvailableForParallelisation()`.
 
 
 ## Backward Compatibility Promise (BCP)

+ 179 - 0
vendor/fidry/cpu-core-counter/src/CpuCoreCounter.php

@@ -14,7 +14,14 @@ declare(strict_types=1);
 namespace Fidry\CpuCoreCounter;
 
 use Fidry\CpuCoreCounter\Finder\CpuCoreFinder;
+use Fidry\CpuCoreCounter\Finder\EnvVariableFinder;
 use Fidry\CpuCoreCounter\Finder\FinderRegistry;
+use InvalidArgumentException;
+use function implode;
+use function max;
+use function sprintf;
+use function sys_getloadavg;
+use const PHP_EOL;
 
 final class CpuCoreCounter
 {
@@ -36,6 +43,89 @@ final class CpuCoreCounter
         $this->finders = $finders ?? FinderRegistry::getDefaultLogicalFinders();
     }
 
+    /**
+     * @param positive-int|0    $reservedCpus      Number of CPUs to reserve. This is useful when you want
+     *                                             to reserve some CPUs for other processes. If the main
+     *                                             process is going to be busy still, you may want to set
+     *                                             this value to 1.
+     * @param non-zero-int|null $countLimit        The maximum number of CPUs to return. If not provided, it
+     *                                             may look for a limit in the environment variables, e.g.
+     *                                             KUBERNETES_CPU_LIMIT. If negative, the limit will be
+     *                                             the total number of cores found minus the absolute value.
+     *                                             For instance if the system has 10 cores and countLimit=-2,
+     *                                             then the effective limit considered will be 8.
+     * @param float|null        $loadLimit         Element of [0., 1.]. Percentage representing the
+     *                                             amount of cores that should be used among the available
+     *                                             resources. For instance, if set to 0.7, it will use 70%
+     *                                             of the available cores, i.e. if 1 core is reserved, 11
+     *                                             cores are available and 5 are busy, it will use 70%
+     *                                             of (11-1-5)=5 cores, so 3 cores. Set this parameter to null
+     *                                             to skip this check. Beware that 1 does not mean "no limit",
+     *                                             but 100% of the _available_ resources, i.e. with the
+     *                                             previous example, it will return 5 cores. How busy is
+     *                                             the system is determined by the system load average
+     *                                             (see $systemLoadAverage).
+     * @param float|null        $systemLoadAverage The system load average. If passed, it will use
+     *                                             this information to limit the available cores based
+     *                                             on the _available_ resources. For instance, if there
+     *                                             is 10 cores but 3 are busy, then only 7 cores will
+     *                                             be considered for further calculation. If set to
+     *                                             `null`, it will use `sys_getloadavg()` to check the
+     *                                             load of the system in the past minute. You can
+     *                                             otherwise pass an arbitrary value. Should be a
+     *                                             positive float.
+     *
+     * @see https://php.net/manual/en/function.sys-getloadavg.php
+     */
+    public function getAvailableForParallelisation(
+        int $reservedCpus = 0,
+        ?int $countLimit = null,
+        ?float $loadLimit = null,
+        ?float $systemLoadAverage = 0.
+    ): ParallelisationResult {
+        self::checkCountLimit($countLimit);
+        self::checkLoadLimit($loadLimit);
+        self::checkSystemLoadAverage($systemLoadAverage);
+
+        $totalCoreCount = $this->getCountWithFallback(1);
+        $availableCores = max(1, $totalCoreCount - $reservedCpus);
+
+        // Adjust available CPUs based on current load
+        if (null !== $loadLimit) {
+            $correctedSystemLoadAverage = null === $systemLoadAverage
+                ? sys_getloadavg()[0] ?? 0.
+                : $systemLoadAverage;
+
+            $availableCores = max(
+                1,
+                $loadLimit * ($availableCores - $correctedSystemLoadAverage)
+            );
+        }
+
+        if (null === $countLimit) {
+            $correctedCountLimit = self::getKubernetesLimit();
+        } else {
+            $correctedCountLimit = $countLimit > 0
+                ? $countLimit
+                : max(1, $totalCoreCount + $countLimit);
+        }
+
+        if (null !== $correctedCountLimit && $availableCores > $correctedCountLimit) {
+            $availableCores = $correctedCountLimit;
+        }
+
+        return new ParallelisationResult(
+            $reservedCpus,
+            $countLimit,
+            $loadLimit,
+            $systemLoadAverage,
+            $correctedCountLimit,
+            $correctedSystemLoadAverage ?? $systemLoadAverage,
+            $totalCoreCount,
+            (int) $availableCores
+        );
+    }
+
     /**
      * @throws NumberOfCpuCoreNotFound
      *
@@ -51,6 +141,48 @@ final class CpuCoreCounter
         return $this->count;
     }
 
+    /**
+     * @param positive-int $fallback
+     *
+     * @return positive-int
+     */
+    public function getCountWithFallback(int $fallback): int
+    {
+        try {
+            return $this->getCount();
+        } catch (NumberOfCpuCoreNotFound $exception) {
+            return $fallback;
+        }
+    }
+
+    /**
+     * This method is mostly for debugging purposes.
+     */
+    public function trace(): string
+    {
+        $output = [];
+
+        foreach ($this->finders as $finder) {
+            $output[] = sprintf(
+                'Executing the finder "%s":',
+                $finder->toString()
+            );
+            $output[] = $finder->diagnose();
+
+            $cores = $finder->find();
+
+            if (null !== $cores) {
+                $output[] = 'Result found: '.$cores;
+
+                break;
+            }
+
+            $output[] = '–––';
+        }
+
+        return implode(PHP_EOL, $output);
+    }
+
     /**
      * @throws NumberOfCpuCoreNotFound
      *
@@ -86,4 +218,51 @@ final class CpuCoreCounter
 
         throw NumberOfCpuCoreNotFound::create();
     }
+
+    /**
+     * @return positive-int|null
+     */
+    public static function getKubernetesLimit(): ?int
+    {
+        $finder = new EnvVariableFinder('KUBERNETES_CPU_LIMIT');
+
+        return $finder->find();
+    }
+
+    private static function checkCountLimit(?int $countLimit): void
+    {
+        if (0 === $countLimit) {
+            throw new InvalidArgumentException(
+                'The count limit must be a non zero integer. Got "0".'
+            );
+        }
+    }
+
+    private static function checkLoadLimit(?float $loadLimit): void
+    {
+        if (null === $loadLimit) {
+            return;
+        }
+
+        if ($loadLimit < 0. || $loadLimit > 1.) {
+            throw new InvalidArgumentException(
+                sprintf(
+                    'The load limit must be in the range [0., 1.], got "%s".',
+                    $loadLimit
+                )
+            );
+        }
+    }
+
+    private static function checkSystemLoadAverage(?float $systemLoadAverage): void
+    {
+        if (null !== $systemLoadAverage && $systemLoadAverage < 0.) {
+            throw new InvalidArgumentException(
+                sprintf(
+                    'The system load average must be a positive float, got "%s".',
+                    $systemLoadAverage
+                )
+            );
+        }
+    }
 }

+ 4 - 2
vendor/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php

@@ -49,10 +49,12 @@ final class CpuInfoFinder implements CpuCoreFinder
         }
 
         return sprintf(
-            'Found the file "%s" with the content:%s%s',
+            'Found the file "%s" with the content:%s%s%sWill return "%s".',
             self::CPU_INFO_PATH,
             PHP_EOL,
-            $cpuInfo
+            $cpuInfo,
+            PHP_EOL,
+            self::countCpuCores($cpuInfo)
         );
     }
 

+ 5 - 2
vendor/fidry/cpu-core-counter/src/Finder/NProcFinder.php

@@ -30,10 +30,13 @@ final class NProcFinder extends ProcOpenBasedFinder
     private $all;
 
     /**
-     * @param bool $all If disabled will give the number of cores available for the current process only.
+     * @param bool $all If disabled will give the number of cores available for the current process
+     *                  only. This is disabled by default as it is known to be "buggy" on virtual
+     *                  environments as the virtualization tool, e.g. VMWare, might over-commit
+     *                  resources by default.
      */
     public function __construct(
-        bool $all = true,
+        bool $all = false,
         ?ProcessExecutor $executor = null
     ) {
         parent::__construct($executor);

+ 7 - 4
vendor/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php

@@ -56,16 +56,19 @@ abstract class ProcOpenBasedFinder implements CpuCoreFinder
 
         return $failed
             ? sprintf(
-                'Executed the command "%s" which wrote the following output to the STDERR:%s%s',
+                'Executed the command "%s" which wrote the following output to the STDERR:%s%s%sWill return "null".',
                 $command,
                 PHP_EOL,
-                $stderr
+                $stderr,
+                PHP_EOL
             )
             : sprintf(
-                'Executed the command "%s" and got the following (STDOUT) output:%s%s',
+                'Executed the command "%s" and got the following (STDOUT) output:%s%s%sWill return "%s".',
                 $command,
                 PHP_EOL,
-                $stdout
+                $stdout,
+                PHP_EOL,
+                $this->countCpuCores($stdout) ?? 'null'
             );
     }
 

+ 122 - 0
vendor/friendsofphp/php-cs-fixer/CHANGELOG.md

@@ -3,6 +3,128 @@ CHANGELOG for PHP CS Fixer
 
 This file contains changelogs for stable releases only.
 
+Changelog for v3.64.0
+---------------------
+
+* feat: Symfony - adjust configuration for sets (#8188)
+* feat: Symfony.trailing_comma_in_multiline - adjust configuration (#8161)
+* feat: Update PSR2, PSR12 and PER-CS2 with `single_space_around_construct` config (#8171)
+* CI: Update PHPStan to 1.12.0 and fix the error that appeared (#8184)
+
+Changelog for v3.63.2
+---------------------
+
+* fix: `FullyQualifiedStrictTypesFixer` - reset cache even if there is no `use` (#8183)
+
+Changelog for v3.63.1
+---------------------
+
+* dummy release
+
+Changelog for v3.63.0
+---------------------
+
+* feat: Add `array_destructuring` as option for `trailing_comma_in_multiline` (#8172)
+* feat: remove braces even for single import (#8156)
+* feat: TrailingCommaInMultilineFixer - dynamically evaluate config against PHP version (#8167)
+* fix: Do not shorten FQN for class resolution if imported symbol is not a class (#7705)
+* fix: Ensure PHP binary path is used as a single CLI argument in parallel worker process (#8180)
+* fix: `PhpUnitAttributesFixer` - fix priorities with `PhpUnitDataProvider(.+)Fixer` (#8169)
+* chore: add  tags for data providers that will change PHPStan's baseline (#8178)
+* chore: add `@return` tags for data providers already having PHPDoc (#8176)
+* chore: add `@return` tags for data providers that do not have array in data (#8179)
+* chore: remove duplicates from data providers (#8164)
+* chore: remove duplicates from data providers that are copies in code (#8145)
+* chore: remove `beStrictAboutTodoAnnotatedTests` from PHPUnit's config (#8160)
+* CI: Update PHPStan to 1.11.10 (#8163)
+* CI: Update PHPStan to 1.11.11 and fix error that changed (#8174)
+* docs: fix indent on rule `date_time_create_from_format_call` (#8173)
+
+Changelog for v3.62.0
+---------------------
+
+* feat: set new_with_parentheses for anonymous_class to false in PER-CS2.0 (#8140)
+* chore: NewWithParenthesesFixer - create TODO to change the default configuration to match PER-CS2 (#8148)
+
+Changelog for v3.61.1
+---------------------
+
+* fix: `NoSuperfluousPhpdocTagsFixer` - fix "Undefined array key 0" error (#8150)
+
+Changelog for v3.61.0
+---------------------
+
+* feat: no_superfluous_phpdoc_tags - also cover ?type (#8125)
+* feat: support PHPUnit v9.1 naming for some asserts (#7997)
+* fix: Do not mangle non-whitespace token in `PhpdocIndentFixer` (#8147)
+* DX: add more typehints for `class-string` (#8139)
+* DX: refactor `ProjectCodeTest::provideDataProviderMethodCases` (#8138)
+
+Changelog for v3.60.0
+---------------------
+
+* feat: Add sprintf in the list of compiler optimized functions (#8092)
+* feat: `PhpUnitAttributesFixer` - add option to keep annotations (#8090)
+* chore: cleanup tests that had `@requires PHP 7.4` ages ago (#8122)
+* chore: cleanup `TokensAnalyzerTest` (#8123)
+* chore: fix example issue reported by reportPossiblyNonexistentGeneralArrayOffset from PHPStan (#8089)
+* chore: NoSuperfluousPhpdocTagsFixer - no need to call heavy toComparableNames method to add null type (#8132)
+* chore: PHPStan 11 array rules (#8011)
+* chore: PhpUnitSizeClassFixerTest - solve PHP 8.4 issues (#8105)
+* chore: reduce PHPStan errors in PhpUnitAttributesFixer (#8091)
+* chore: reuse test methods (#8119)
+* CI: check autoload (#8121)
+* CI: Update PHPStan to 1.11.8 (#8133)
+* deps: upgrade dev-tools (#8102)
+* DX: check for duplicated test data (#8131)
+* DX: check for duplicated test methods (#8124)
+* DX: check for duplicated test methods (as AutoReview test) (#8134)
+* DX: do not exclude duplicates that are clearly mistakes (#8135)
+* DX: Dump `offsetAccess.notFound` errors to baseline (#8107)
+* fix: Better way of walking types in `TypeExpression` (#8076)
+* fix: CI for PHP 8.4 (#8114)
+* fix: update `TokensTest` to shrink PHPStan's baseline (#8112)
+* fix: `no_useless_concat_operator` - do not break variable (2) (#7927)
+* fix: `NullableTypeDeclarationFixer` - don't convert standalone `null` into nullable union type (#8098)
+* fix: `NullableTypeDeclarationFixer` - don't convert standalone `NULL` into nullable union type (#8111)
+* fix: `NullableTypeDeclarationFixer` - insert correct token (#8118)
+* fix: `PhpUnitAttributesFixer` - handle multiple annotations of the same name (#8075)
+
+Changelog for v3.59.3
+---------------------
+
+* refactor: refactor to templated trait+interface (#7988)
+
+Changelog for v3.59.2
+---------------------
+
+* fix: "list" is reserved type (#8087)
+* chore: add missing type in method prototype (#8088)
+* CI: bump Ubuntu version (#8086)
+* deps: bump infection to unblock PHPUnit 11, and few more as chore (#8083)
+
+Changelog for v3.59.1
+---------------------
+
+* fix: Bump React's JSON decoder buffer size (#8068)
+* docs: options - handle enums in dicts (#8082)
+
+Changelog for v3.59.0
+---------------------
+
+* feat(Docker): Multi-arch build (support for `arm64`) (#8079)
+* feat: `@PhpCsFixer` ruleset - normalise implicit backslashes in single quoted strings (#7965)
+* feat: `SimpleToComplexStringVariableFixer` - support variable being an array (#8064)
+* fix: Look up for PHPDoc's variable name by only chars allowed in the variables (#8062)
+* fix: Update `PhpUnitTestCaseStaticMethodCallsFixer::STATIC_METHODS` (#8073)
+* fix: `native_constant_invocation` - array constants with native constant names (#8008)
+* chore: update PHPStan (#8060)
+* CI: Update PHPStan to 1.11.4 (#8074)
+* docs: don't expose list as config type for dicts (#8081)
+* docs: Make wording in `final_class` docs less dismissive (#8065)
+* docs: Update 1-bug_report.yml (#8067)
+* DX: Remove version from Docker Compose files (#8061)
+
 Changelog for v3.58.1
 ---------------------
 

+ 14 - 7
vendor/friendsofphp/php-cs-fixer/composer.json

@@ -46,16 +46,16 @@
         "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0"
     },
     "require-dev": {
-        "facile-it/paraunit": "^1.3 || ^2.0",
-        "infection/infection": "^0.27.11",
+        "facile-it/paraunit": "^1.3 || ^2.3",
+        "infection/infection": "^0.29.5",
         "justinrainbow/json-schema": "^5.2",
         "keradus/cli-executor": "^2.1",
         "mikey179/vfsstream": "^1.6.11",
         "php-coveralls/php-coveralls": "^2.7",
         "php-cs-fixer/accessible-object": "^1.1",
-        "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4",
-        "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4",
-        "phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2",
+        "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5",
+        "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5",
+        "phpunit/phpunit": "^9.6.19 || ^10.5.21 || ^11.2",
         "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0",
         "symfony/yaml": "^5.4 || ^6.0 || ^7.0"
     },
@@ -66,12 +66,18 @@
     "autoload": {
         "psr-4": {
             "PhpCsFixer\\": "src/"
-        }
+        },
+        "exclude-from-classmap": [
+            "src/Fixer/Internal/*"
+        ]
     },
     "autoload-dev": {
         "psr-4": {
             "PhpCsFixer\\Tests\\": "tests/"
-        }
+        },
+        "exclude-from-classmap": [
+            "tests/Fixtures/"
+        ]
     },
     "bin": [
         "php-cs-fixer"
@@ -121,6 +127,7 @@
         "self-check": [
             "./dev-tools/check_file_permissions.sh",
             "./dev-tools/check_trailing_spaces.sh",
+            "@composer dump-autoload --dry-run --optimize --strict-psr",
             "@normalize",
             "@unused-deps",
             "@require-checker",

+ 12 - 10
vendor/friendsofphp/php-cs-fixer/src/AbstractDoctrineAnnotationFixer.php

@@ -26,6 +26,17 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
 
 /**
  * @internal
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  scalar_types?: bool,
+ *  union_types?: bool
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  scalar_types: bool,
+ *  union_types: bool
+ * }
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
  */
 abstract class AbstractDoctrineAnnotationFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
@@ -53,7 +64,7 @@ abstract class AbstractDoctrineAnnotationFixer extends AbstractFixer implements
 
             $doctrineAnnotationTokens = DoctrineAnnotationTokens::createFromDocComment(
                 $docCommentToken,
-                $this->configuration['ignored_tags']
+                $this->configuration['ignored_tags'] // @phpstan-ignore-line
             );
 
             $this->fixAnnotations($doctrineAnnotationTokens);
@@ -71,15 +82,6 @@ abstract class AbstractDoctrineAnnotationFixer extends AbstractFixer implements
         return new FixerConfigurationResolver([
             (new FixerOptionBuilder('ignored_tags', 'List of tags that must not be treated as Doctrine Annotations.'))
                 ->setAllowedTypes(['string[]'])
-                ->setAllowedValues([static function (array $values): bool {
-                    foreach ($values as $value) {
-                        if (!\is_string($value)) {
-                            return false;
-                        }
-                    }
-
-                    return true;
-                }])
                 ->setDefault([
                     // PHPDocumentor 1
                     'abstract',

+ 1 - 90
vendor/friendsofphp/php-cs-fixer/src/AbstractFixer.php

@@ -14,19 +14,11 @@ declare(strict_types=1);
 
 namespace PhpCsFixer;
 
-use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException;
-use PhpCsFixer\ConfigurationException\InvalidForEnvFixerConfigurationException;
 use PhpCsFixer\ConfigurationException\RequiredFixerConfigurationException;
-use PhpCsFixer\Console\Application;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
 use PhpCsFixer\Fixer\FixerInterface;
 use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
-use PhpCsFixer\FixerConfiguration\DeprecatedFixerOption;
-use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
-use PhpCsFixer\FixerConfiguration\InvalidOptionsForEnvException;
 use PhpCsFixer\Tokenizer\Tokens;
-use Symfony\Component\OptionsResolver\Exception\ExceptionInterface;
-use Symfony\Component\OptionsResolver\Exception\MissingOptionsException;
 
 /**
  * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
@@ -35,21 +27,11 @@ use Symfony\Component\OptionsResolver\Exception\MissingOptionsException;
  */
 abstract class AbstractFixer implements FixerInterface
 {
-    /**
-     * @var null|array<string, mixed>
-     */
-    protected $configuration;
-
     /**
      * @var WhitespacesFixerConfig
      */
     protected $whitespacesConfig;
 
-    /**
-     * @var null|FixerConfigurationResolverInterface
-     */
-    private $configurationDefinition;
-
     public function __construct()
     {
         if ($this instanceof ConfigurableFixerInterface) {
@@ -67,7 +49,7 @@ abstract class AbstractFixer implements FixerInterface
 
     final public function fix(\SplFileInfo $file, Tokens $tokens): void
     {
-        if ($this instanceof ConfigurableFixerInterface && null === $this->configuration) {
+        if ($this instanceof ConfigurableFixerInterface && property_exists($this, 'configuration') && null === $this->configuration) {
             throw new RequiredFixerConfigurationException($this->getName(), 'Configuration is required.');
         }
 
@@ -99,68 +81,6 @@ abstract class AbstractFixer implements FixerInterface
         return true;
     }
 
-    /**
-     * @param array<string, mixed> $configuration
-     */
-    public function configure(array $configuration): void
-    {
-        if (!$this instanceof ConfigurableFixerInterface) {
-            throw new \LogicException('Cannot configure using Abstract parent, child not implementing "PhpCsFixer\Fixer\ConfigurableFixerInterface".');
-        }
-
-        foreach ($this->getConfigurationDefinition()->getOptions() as $option) {
-            if (!$option instanceof DeprecatedFixerOption) {
-                continue;
-            }
-
-            $name = $option->getName();
-            if (\array_key_exists($name, $configuration)) {
-                Utils::triggerDeprecation(new \InvalidArgumentException(sprintf(
-                    'Option "%s" for rule "%s" is deprecated and will be removed in version %d.0. %s',
-                    $name,
-                    $this->getName(),
-                    Application::getMajorVersion() + 1,
-                    str_replace('`', '"', $option->getDeprecationMessage())
-                )));
-            }
-        }
-
-        try {
-            $this->configuration = $this->getConfigurationDefinition()->resolve($configuration);
-        } catch (MissingOptionsException $exception) {
-            throw new RequiredFixerConfigurationException(
-                $this->getName(),
-                sprintf('Missing required configuration: %s', $exception->getMessage()),
-                $exception
-            );
-        } catch (InvalidOptionsForEnvException $exception) {
-            throw new InvalidForEnvFixerConfigurationException(
-                $this->getName(),
-                sprintf('Invalid configuration for env: %s', $exception->getMessage()),
-                $exception
-            );
-        } catch (ExceptionInterface $exception) {
-            throw new InvalidFixerConfigurationException(
-                $this->getName(),
-                sprintf('Invalid configuration: %s', $exception->getMessage()),
-                $exception
-            );
-        }
-    }
-
-    public function getConfigurationDefinition(): FixerConfigurationResolverInterface
-    {
-        if (!$this instanceof ConfigurableFixerInterface) {
-            throw new \LogicException(sprintf('Cannot get configuration definition using Abstract parent, child "%s" not implementing "PhpCsFixer\Fixer\ConfigurableFixerInterface".', static::class));
-        }
-
-        if (null === $this->configurationDefinition) {
-            $this->configurationDefinition = $this->createConfigurationDefinition();
-        }
-
-        return $this->configurationDefinition;
-    }
-
     public function setWhitespacesConfig(WhitespacesFixerConfig $config): void
     {
         if (!$this instanceof WhitespacesAwareFixerInterface) {
@@ -172,15 +92,6 @@ abstract class AbstractFixer implements FixerInterface
 
     abstract protected function applyFix(\SplFileInfo $file, Tokens $tokens): void;
 
-    protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
-    {
-        if (!$this instanceof ConfigurableFixerInterface) {
-            throw new \LogicException('Cannot create configuration definition using Abstract parent, child not implementing "PhpCsFixer\Fixer\ConfigurableFixerInterface".');
-        }
-
-        throw new \LogicException('Not implemented.');
-    }
-
     private function getDefaultWhitespacesFixerConfig(): WhitespacesFixerConfig
     {
         static $defaultWhitespacesFixerConfig = null;

+ 14 - 0
vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocToTypeDeclarationFixer.php

@@ -18,6 +18,7 @@ use PhpCsFixer\DocBlock\Annotation;
 use PhpCsFixer\DocBlock\DocBlock;
 use PhpCsFixer\DocBlock\TypeExpression;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
 use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@@ -31,9 +32,22 @@ use PhpCsFixer\Tokenizer\Tokens;
  * @internal
  *
  * @phpstan-type _CommonTypeInfo array{commonType: string, isNullable: bool}
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  scalar_types?: bool,
+ *  union_types?: bool
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  scalar_types: bool,
+ *  union_types: bool
+ * }
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
  */
 abstract class AbstractPhpdocToTypeDeclarationFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     private const REGEX_CLASS = '(?:\\\?+'.TypeExpression::REGEX_IDENTIFIER
         .'(\\\\'.TypeExpression::REGEX_IDENTIFIER.')*+)';
 

+ 3 - 3
vendor/friendsofphp/php-cs-fixer/src/Cache/Cache.php

@@ -76,7 +76,7 @@ final class Cache implements CacheInterface
         ]);
 
         if (JSON_ERROR_NONE !== json_last_error() || false === $json) {
-            throw new \UnexpectedValueException(sprintf(
+            throw new \UnexpectedValueException(\sprintf(
                 'Cannot encode cache signature to JSON, error: "%s". If you have non-UTF8 chars in your signature, like in license for `header_comment`, consider enabling `ext-mbstring` or install `symfony/polyfill-mbstring`.',
                 json_last_error_msg()
             ));
@@ -93,7 +93,7 @@ final class Cache implements CacheInterface
         $data = json_decode($json, true);
 
         if (null === $data && JSON_ERROR_NONE !== json_last_error()) {
-            throw new \InvalidArgumentException(sprintf(
+            throw new \InvalidArgumentException(\sprintf(
                 'Value needs to be a valid JSON string, got "%s", error: "%s".',
                 $json,
                 json_last_error_msg()
@@ -112,7 +112,7 @@ final class Cache implements CacheInterface
         $missingKeys = array_diff_key(array_flip($requiredKeys), $data);
 
         if (\count($missingKeys) > 0) {
-            throw new \InvalidArgumentException(sprintf(
+            throw new \InvalidArgumentException(\sprintf(
                 'JSON data is missing keys %s',
                 Utils::naturalLanguageJoin(array_keys($missingKeys))
             ));

+ 3 - 3
vendor/friendsofphp/php-cs-fixer/src/Cache/FileHandler.php

@@ -140,7 +140,7 @@ final class FileHandler implements FileHandlerInterface
 
         if ($this->fileInfo->isDir()) {
             throw new IOException(
-                sprintf('Cannot write cache file "%s" as the location exists as directory.', $this->fileInfo->getRealPath()),
+                \sprintf('Cannot write cache file "%s" as the location exists as directory.', $this->fileInfo->getRealPath()),
                 0,
                 null,
                 $this->fileInfo->getPathname()
@@ -149,7 +149,7 @@ final class FileHandler implements FileHandlerInterface
 
         if ($this->fileInfo->isFile() && !$this->fileInfo->isWritable()) {
             throw new IOException(
-                sprintf('Cannot write to file "%s" as it is not writable.', $this->fileInfo->getRealPath()),
+                \sprintf('Cannot write to file "%s" as it is not writable.', $this->fileInfo->getRealPath()),
                 0,
                 null,
                 $this->fileInfo->getPathname()
@@ -171,7 +171,7 @@ final class FileHandler implements FileHandlerInterface
 
         if (!@is_dir($dir)) {
             throw new IOException(
-                sprintf('Directory of cache file "%s" does not exists and couldn\'t be created.', $file),
+                \sprintf('Directory of cache file "%s" does not exists and couldn\'t be created.', $file),
                 0,
                 null,
                 $file

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/ConfigurationException/InvalidFixerConfigurationException.php

@@ -30,7 +30,7 @@ class InvalidFixerConfigurationException extends InvalidConfigurationException
     public function __construct(string $fixerName, string $message, ?\Throwable $previous = null)
     {
         parent::__construct(
-            sprintf('[%s] %s', $fixerName, $message),
+            \sprintf('[%s] %s', $fixerName, $message),
             FixCommandExitStatusCalculator::EXIT_STATUS_FLAG_HAS_INVALID_FIXER_CONFIG,
             $previous
         );

+ 7 - 7
vendor/friendsofphp/php-cs-fixer/src/Console/Application.php

@@ -44,8 +44,8 @@ use Symfony\Component\Console\Output\OutputInterface;
 final class Application extends BaseApplication
 {
     public const NAME = 'PHP CS Fixer';
-    public const VERSION = '3.58.1';
-    public const VERSION_CODENAME = '7th Gear';
+    public const VERSION = '3.64.0';
+    public const VERSION_CODENAME = 'Space Sets';
 
     private ToolInfo $toolInfo;
     private ?Command $executedCommand = null;
@@ -89,7 +89,7 @@ final class Application extends BaseApplication
 
             if (\count($warnings) > 0) {
                 foreach ($warnings as $warning) {
-                    $stdErr->writeln(sprintf($stdErr->isDecorated() ? '<bg=yellow;fg=black;>%s</>' : '%s', $warning));
+                    $stdErr->writeln(\sprintf($stdErr->isDecorated() ? '<bg=yellow;fg=black;>%s</>' : '%s', $warning));
                 }
                 $stdErr->writeln('');
             }
@@ -107,7 +107,7 @@ final class Application extends BaseApplication
                 $stdErr->writeln('');
                 $stdErr->writeln($stdErr->isDecorated() ? '<bg=yellow;fg=black;>Detected deprecations in use:</>' : 'Detected deprecations in use:');
                 foreach ($triggeredDeprecations as $deprecation) {
-                    $stdErr->writeln(sprintf('- %s', $deprecation));
+                    $stdErr->writeln(\sprintf('- %s', $deprecation));
                 }
             }
         }
@@ -120,7 +120,7 @@ final class Application extends BaseApplication
      */
     public static function getAbout(bool $decorated = false): string
     {
-        $longVersion = sprintf('%s <info>%s</info>', self::NAME, self::VERSION);
+        $longVersion = \sprintf('%s <info>%s</info>', self::NAME, self::VERSION);
 
         $commit = '@git-commit@';
         $versionCommit = '';
@@ -131,8 +131,8 @@ final class Application extends BaseApplication
 
         $about = implode('', [
             $longVersion,
-            $versionCommit ? sprintf(' <info>(%s)</info>', $versionCommit) : '', // @phpstan-ignore-line to avoid `Ternary operator condition is always true|false.`
-            self::VERSION_CODENAME ? sprintf(' <info>%s</info>', self::VERSION_CODENAME) : '', // @phpstan-ignore-line to avoid `Ternary operator condition is always true|false.`
+            $versionCommit ? \sprintf(' <info>(%s)</info>', $versionCommit) : '', // @phpstan-ignore-line to avoid `Ternary operator condition is always true|false.`
+            self::VERSION_CODENAME ? \sprintf(' <info>%s</info>', self::VERSION_CODENAME) : '', // @phpstan-ignore-line to avoid `Ternary operator condition is always true|false.`
             ' by <comment>Fabien Potencier</comment>, <comment>Dariusz Ruminski</comment> and <comment>contributors</comment>.',
         ]);
 

+ 28 - 20
vendor/friendsofphp/php-cs-fixer/src/Console/Command/DescribeCommand.php

@@ -24,6 +24,7 @@ use PhpCsFixer\Fixer\ConfigurableFixerInterface;
 use PhpCsFixer\Fixer\DeprecatedFixerInterface;
 use PhpCsFixer\Fixer\ExperimentalFixerInterface;
 use PhpCsFixer\Fixer\FixerInterface;
+use PhpCsFixer\Fixer\InternalFixerInterface;
 use PhpCsFixer\FixerConfiguration\AliasedFixerOption;
 use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
 use PhpCsFixer\FixerConfiguration\DeprecatedFixerOption;
@@ -130,7 +131,7 @@ final class DescribeCommand extends Command
 
             $this->describeList($output, $e->getType());
 
-            throw new \InvalidArgumentException(sprintf(
+            throw new \InvalidArgumentException(\sprintf(
                 '%s "%s" not found.%s',
                 ucfirst($e->getType()),
                 $name,
@@ -154,24 +155,24 @@ final class DescribeCommand extends Command
 
         $definition = $fixer->getDefinition();
 
-        $output->writeln(sprintf('<fg=blue>Description of the <info>`%s`</info> rule.</>', $name));
+        $output->writeln(\sprintf('<fg=blue>Description of the <info>`%s`</info> rule.</>', $name));
         $output->writeln('');
 
         if ($output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) {
-            $output->writeln(sprintf('Fixer class: <comment>%s</comment>.', \get_class($fixer)));
+            $output->writeln(\sprintf('Fixer class: <comment>%s</comment>.', \get_class($fixer)));
             $output->writeln('');
         }
 
         if ($fixer instanceof DeprecatedFixerInterface) {
             $successors = $fixer->getSuccessorsNames();
             $message = [] === $successors
-                ? sprintf('it will be removed in version %d.0', Application::getMajorVersion() + 1)
-                : sprintf('use %s instead', Utils::naturalLanguageJoinWithBackticks($successors));
+                ? \sprintf('it will be removed in version %d.0', Application::getMajorVersion() + 1)
+                : \sprintf('use %s instead', Utils::naturalLanguageJoinWithBackticks($successors));
 
             $endMessage = '. '.ucfirst($message);
             Utils::triggerDeprecation(new \RuntimeException(str_replace('`', '"', "Rule \"{$name}\" is deprecated{$endMessage}.")));
             $message = Preg::replace('/(`[^`]+`)/', '<info>$1</info>', $message);
-            $output->writeln(sprintf('<error>DEPRECATED</error>: %s.', $message));
+            $output->writeln(\sprintf('<error>DEPRECATED</error>: %s.', $message));
             $output->writeln('');
         }
 
@@ -192,6 +193,13 @@ final class DescribeCommand extends Command
             $output->writeln('');
         }
 
+        if ($fixer instanceof InternalFixerInterface) {
+            $output->writeln('<error>Fixer applying this rule is INTERNAL.</error>.');
+            $output->writeln('It is expected to be used only on PHP CS Fixer project itself.');
+
+            $output->writeln('');
+        }
+
         if ($fixer->isRisky()) {
             $output->writeln('<error>Fixer applying this rule is RISKY.</error>');
 
@@ -208,7 +216,7 @@ final class DescribeCommand extends Command
             $configurationDefinition = $fixer->getConfigurationDefinition();
             $options = $configurationDefinition->getOptions();
 
-            $output->writeln(sprintf('Fixer is configurable using following option%s:', 1 === \count($options) ? '' : 's'));
+            $output->writeln(\sprintf('Fixer is configurable using following option%s:', 1 === \count($options) ? '' : 's'));
 
             foreach ($options as $option) {
                 $line = '* <info>'.OutputFormatter::escape($option->getName()).'</info>';
@@ -231,7 +239,7 @@ final class DescribeCommand extends Command
                 $line .= ': '.lcfirst(Preg::replace('/\.$/', '', $description)).'; ';
 
                 if ($option->hasDefault()) {
-                    $line .= sprintf(
+                    $line .= \sprintf(
                         'defaults to <comment>%s</comment>',
                         Utils::toString($option->getDefault())
                     );
@@ -282,7 +290,7 @@ final class DescribeCommand extends Command
             $differ = new FullDiffer();
             $diffFormatter = new DiffConsoleFormatter(
                 $output->isDecorated(),
-                sprintf(
+                \sprintf(
                     '<comment>   ---------- begin diff ----------</comment>%s%%s%s<comment>   ----------- end diff -----------</comment>',
                     PHP_EOL,
                     PHP_EOL
@@ -309,12 +317,12 @@ final class DescribeCommand extends Command
 
                 if ($fixer instanceof ConfigurableFixerInterface) {
                     if (null === $configuration) {
-                        $output->writeln(sprintf(' * Example #%d. Fixing with the <comment>default</comment> configuration.', $index + 1));
+                        $output->writeln(\sprintf(' * Example #%d. Fixing with the <comment>default</comment> configuration.', $index + 1));
                     } else {
-                        $output->writeln(sprintf(' * Example #%d. Fixing with configuration: <comment>%s</comment>.', $index + 1, Utils::toString($codeSample->getConfiguration())));
+                        $output->writeln(\sprintf(' * Example #%d. Fixing with configuration: <comment>%s</comment>.', $index + 1, Utils::toString($codeSample->getConfiguration())));
                     }
                 } else {
-                    $output->writeln(sprintf(' * Example #%d.', $index + 1));
+                    $output->writeln(\sprintf(' * Example #%d.', $index + 1));
                 }
 
                 $output->writeln([$diffFormatter->format($diff, '   %s'), '']);
@@ -330,9 +338,9 @@ final class DescribeCommand extends Command
 
             foreach ($ruleSetConfigs as $set => $config) {
                 if (null !== $config) {
-                    $output->writeln(sprintf('* <info>%s</info> with config: <comment>%s</comment>', $set, Utils::toString($config)));
+                    $output->writeln(\sprintf('* <info>%s</info> with config: <comment>%s</comment>', $set, Utils::toString($config)));
                 } else {
-                    $output->writeln(sprintf('* <info>%s</info> with <comment>default</comment> config', $set));
+                    $output->writeln(\sprintf('* <info>%s</info> with <comment>default</comment> config', $set));
                 }
             }
 
@@ -349,7 +357,7 @@ final class DescribeCommand extends Command
         $ruleSetDefinitions = RuleSets::getSetDefinitions();
         $fixers = $this->getFixers();
 
-        $output->writeln(sprintf('<fg=blue>Description of the <info>`%s`</info> set.</>', $ruleSetDefinitions[$name]->getName()));
+        $output->writeln(\sprintf('<fg=blue>Description of the <info>`%s`</info> set.</>', $ruleSetDefinitions[$name]->getName()));
         $output->writeln('');
 
         $output->writeln($this->replaceRstLinks($ruleSetDefinitions[$name]->getDescription()));
@@ -365,7 +373,7 @@ final class DescribeCommand extends Command
         foreach ($ruleSetDefinitions[$name]->getRules() as $rule => $config) {
             if (str_starts_with($rule, '@')) {
                 $set = $ruleSetDefinitions[$rule];
-                $help .= sprintf(
+                $help .= \sprintf(
                     " * <info>%s</info>%s\n   | %s\n\n",
                     $rule,
                     $set->isRisky() ? ' <error>risky</error>' : '',
@@ -379,12 +387,12 @@ final class DescribeCommand extends Command
             $fixer = $fixers[$rule];
 
             $definition = $fixer->getDefinition();
-            $help .= sprintf(
+            $help .= \sprintf(
                 " * <info>%s</info>%s\n   | %s\n%s\n",
                 $rule,
                 $fixer->isRisky() ? ' <error>risky</error>' : '',
                 $definition->getSummary(),
-                true !== $config ? sprintf("   <comment>| Configuration: %s</comment>\n", Utils::toString($config)) : ''
+                true !== $config ? \sprintf("   <comment>| Configuration: %s</comment>\n", Utils::toString($config)) : ''
             );
         }
 
@@ -440,7 +448,7 @@ final class DescribeCommand extends Command
 
             $items = $this->getSetNames();
             foreach ($items as $item) {
-                $output->writeln(sprintf('* <info>%s</info>', $item));
+                $output->writeln(\sprintf('* <info>%s</info>', $item));
             }
         }
 
@@ -449,7 +457,7 @@ final class DescribeCommand extends Command
 
             $items = array_keys($this->getFixers());
             foreach ($items as $item) {
-                $output->writeln(sprintf('* <info>%s</info>', $item));
+                $output->writeln(\sprintf('* <info>%s</info>', $item));
             }
         }
     }

+ 8 - 8
vendor/friendsofphp/php-cs-fixer/src/Console/Command/FixCommand.php

@@ -263,10 +263,10 @@ use Symfony\Component\Stopwatch\Stopwatch;
             $stdErr->writeln(Application::getAboutWithRuntime(true));
             $isParallel = $resolver->getParallelConfig()->getMaxProcesses() > 1;
 
-            $stdErr->writeln(sprintf(
+            $stdErr->writeln(\sprintf(
                 'Running analysis on %d core%s.',
                 $resolver->getParallelConfig()->getMaxProcesses(),
-                $isParallel ? sprintf(
+                $isParallel ? \sprintf(
                     's with %d file%s per process',
                     $resolver->getParallelConfig()->getFilesPerProcess(),
                     $resolver->getParallelConfig()->getFilesPerProcess() > 1 ? 's' : ''
@@ -275,26 +275,26 @@ use Symfony\Component\Stopwatch\Stopwatch;
 
             /** @TODO v4 remove warnings related to parallel runner */
             $usageDocs = 'https://cs.symfony.com/doc/usage.html';
-            $stdErr->writeln(sprintf(
+            $stdErr->writeln(\sprintf(
                 $stdErr->isDecorated() ? '<bg=yellow;fg=black;>%s</>' : '%s',
                 $isParallel
                     ? 'Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!'
-                    : sprintf(
+                    : \sprintf(
                         'You can enable parallel runner and speed up the analysis! Please see %s for more information.',
                         $stdErr->isDecorated()
-                            ? sprintf('<href=%s;bg=yellow;fg=red;bold>usage docs</>', OutputFormatter::escape($usageDocs))
+                            ? \sprintf('<href=%s;bg=yellow;fg=red;bold>usage docs</>', OutputFormatter::escape($usageDocs))
                             : $usageDocs
                     )
             ));
 
             $configFile = $resolver->getConfigFile();
-            $stdErr->writeln(sprintf('Loaded config <comment>%s</comment>%s.', $resolver->getConfig()->getName(), null === $configFile ? '' : ' from "'.$configFile.'"'));
+            $stdErr->writeln(\sprintf('Loaded config <comment>%s</comment>%s.', $resolver->getConfig()->getName(), null === $configFile ? '' : ' from "'.$configFile.'"'));
 
             if ($resolver->getUsingCache()) {
                 $cacheFile = $resolver->getCacheFile();
 
                 if (is_file($cacheFile)) {
-                    $stdErr->writeln(sprintf('Using cache file "%s".', $cacheFile));
+                    $stdErr->writeln(\sprintf('Using cache file "%s".', $cacheFile));
                 }
             }
         }
@@ -303,7 +303,7 @@ use Symfony\Component\Stopwatch\Stopwatch;
 
         if (null !== $stdErr && $resolver->configFinderIsOverridden()) {
             $stdErr->writeln(
-                sprintf($stdErr->isDecorated() ? '<bg=yellow;fg=black;>%s</>' : '%s', 'Paths from configuration file have been overridden by paths provided as command arguments.')
+                \sprintf($stdErr->isDecorated() ? '<bg=yellow;fg=black;>%s</>' : '%s', 'Paths from configuration file have been overridden by paths provided as command arguments.')
             );
         }
 

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListSetsCommand.php

@@ -80,7 +80,7 @@ final class ListSetsCommand extends Command
             $formats = $factory->getFormats();
             sort($formats);
 
-            throw new InvalidConfigurationException(sprintf('The format "%s" is not defined, supported are %s.', $format, Utils::naturalLanguageJoin($formats)));
+            throw new InvalidConfigurationException(\sprintf('The format "%s" is not defined, supported are %s.', $format, Utils::naturalLanguageJoin($formats)));
         }
 
         return $reporter;

+ 7 - 7
vendor/friendsofphp/php-cs-fixer/src/Console/Command/SelfUpdateCommand.php

@@ -102,7 +102,7 @@ final class SelfUpdateCommand extends Command
             $latestVersion = $this->versionChecker->getLatestVersion();
             $latestVersionOfCurrentMajor = $this->versionChecker->getLatestVersionOfMajor($currentMajor);
         } catch (\Exception $exception) {
-            $output->writeln(sprintf(
+            $output->writeln(\sprintf(
                 '<error>Unable to determine newest version: %s</error>',
                 $exception->getMessage()
             ));
@@ -122,8 +122,8 @@ final class SelfUpdateCommand extends Command
             0 !== $this->versionChecker->compareVersions($latestVersionOfCurrentMajor, $latestVersion)
             && true !== $input->getOption('force')
         ) {
-            $output->writeln(sprintf('<info>A new major version of PHP CS Fixer is available</info> (<comment>%s</comment>)', $latestVersion));
-            $output->writeln(sprintf('<info>Before upgrading please read</info> https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/%s/UPGRADE-v%s.md', $latestVersion, $currentMajor + 1));
+            $output->writeln(\sprintf('<info>A new major version of PHP CS Fixer is available</info> (<comment>%s</comment>)', $latestVersion));
+            $output->writeln(\sprintf('<info>Before upgrading please read</info> https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/%s/UPGRADE-v%s.md', $latestVersion, $currentMajor + 1));
             $output->writeln('<info>If you are ready to upgrade run this command with</info> <comment>-f</comment>');
             $output->writeln('<info>Checking for new minor/patch version...</info>');
 
@@ -143,7 +143,7 @@ final class SelfUpdateCommand extends Command
         }
 
         if (!is_writable($localFilename)) {
-            $output->writeln(sprintf('<error>No permission to update</error> "%s" <error>file.</error>', $localFilename));
+            $output->writeln(\sprintf('<error>No permission to update</error> "%s" <error>file.</error>', $localFilename));
 
             return 1;
         }
@@ -152,7 +152,7 @@ final class SelfUpdateCommand extends Command
         $remoteFilename = $this->toolInfo->getPharDownloadUri($remoteTag);
 
         if (false === @copy($remoteFilename, $tempFilename)) {
-            $output->writeln(sprintf('<error>Unable to download new version</error> %s <error>from the server.</error>', $remoteTag));
+            $output->writeln(\sprintf('<error>Unable to download new version</error> %s <error>from the server.</error>', $remoteTag));
 
             return 1;
         }
@@ -162,7 +162,7 @@ final class SelfUpdateCommand extends Command
         $pharInvalidityReason = $this->pharChecker->checkFileValidity($tempFilename);
         if (null !== $pharInvalidityReason) {
             unlink($tempFilename);
-            $output->writeln(sprintf('<error>The download of</error> %s <error>is corrupt (%s).</error>', $remoteTag, $pharInvalidityReason));
+            $output->writeln(\sprintf('<error>The download of</error> %s <error>is corrupt (%s).</error>', $remoteTag, $pharInvalidityReason));
             $output->writeln('<error>Please re-run the "self-update" command to try again.</error>');
 
             return 1;
@@ -170,7 +170,7 @@ final class SelfUpdateCommand extends Command
 
         rename($tempFilename, $localFilename);
 
-        $output->writeln(sprintf('<info>PHP CS Fixer updated</info> (<comment>%s</comment> -> <comment>%s</comment>)', $currentVersion, $remoteTag));
+        $output->writeln(\sprintf('<info>PHP CS Fixer updated</info> (<comment>%s</comment> -> <comment>%s</comment>)', $currentVersion, $remoteTag));
 
         return 0;
     }

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Console/Command/WorkerCommand.php

@@ -110,7 +110,7 @@ final class WorkerCommand extends Command
         $loop = new StreamSelectLoop();
         $tcpConnector = new TcpConnector($loop);
         $tcpConnector
-            ->connect(sprintf('127.0.0.1:%d', $port))
+            ->connect(\sprintf('127.0.0.1:%d', $port))
             ->then(
                 /** @codeCoverageIgnore */
                 function (ConnectionInterface $connection) use ($loop, $runner, $identifier): void {
@@ -148,7 +148,7 @@ final class WorkerCommand extends Command
 
                         if (ParallelAction::RUNNER_REQUEST_ANALYSIS !== $action) {
                             // At this point we only expect analysis requests, if any other action happen, we need to fix the code.
-                            throw new \LogicException(sprintf('Unexpected action ParallelAction::%s.', $action));
+                            throw new \LogicException(\sprintf('Unexpected action ParallelAction::%s.', $action));
                         }
 
                         /** @var iterable<int, string> $files */

+ 16 - 16
vendor/friendsofphp/php-cs-fixer/src/Console/ConfigurationResolver.php

@@ -348,7 +348,7 @@ final class ConfigurationResolver
                 );
 
                 if (\count($riskyFixers) > 0) {
-                    throw new InvalidConfigurationException(sprintf('The rules contain risky fixers (%s), but they are not allowed to run. Perhaps you forget to use --allow-risky=yes option?', Utils::naturalLanguageJoin($riskyFixers)));
+                    throw new InvalidConfigurationException(\sprintf('The rules contain risky fixers (%s), but they are not allowed to run. Perhaps you forget to use --allow-risky=yes option?', Utils::naturalLanguageJoin($riskyFixers)));
                 }
             }
         }
@@ -392,7 +392,7 @@ final class ConfigurationResolver
                             : $cwd.\DIRECTORY_SEPARATOR.$path;
 
                         if (!file_exists($absolutePath)) {
-                            throw new InvalidConfigurationException(sprintf(
+                            throw new InvalidConfigurationException(\sprintf(
                                 'The path "%s" is not readable.',
                                 $path
                             ));
@@ -422,7 +422,7 @@ final class ConfigurationResolver
                         ? ProgressOutputType::NONE
                         : ProgressOutputType::BAR;
                 } elseif (!\in_array($progressType, ProgressOutputType::all(), true)) {
-                    throw new InvalidConfigurationException(sprintf(
+                    throw new InvalidConfigurationException(\sprintf(
                         'The progress type "%s" is not defined, supported are %s.',
                         $progressType,
                         Utils::naturalLanguageJoin(ProgressOutputType::all())
@@ -452,7 +452,7 @@ final class ConfigurationResolver
                 $formats = $reporterFactory->getFormats();
                 sort($formats);
 
-                throw new InvalidConfigurationException(sprintf('The format "%s" is not defined, supported are %s.', $format, Utils::naturalLanguageJoin($formats)));
+                throw new InvalidConfigurationException(\sprintf('The format "%s" is not defined, supported are %s.', $format, Utils::naturalLanguageJoin($formats)));
             }
         }
 
@@ -551,7 +551,7 @@ final class ConfigurationResolver
 
         if (null !== $configFile) {
             if (false === file_exists($configFile) || false === is_readable($configFile)) {
-                throw new InvalidConfigurationException(sprintf('Cannot read config file "%s".', $configFile));
+                throw new InvalidConfigurationException(\sprintf('Cannot read config file "%s".', $configFile));
             }
 
             return [$configFile];
@@ -660,7 +660,7 @@ final class ConfigurationResolver
             $rules = json_decode($rules, true);
 
             if (JSON_ERROR_NONE !== json_last_error()) {
-                throw new InvalidConfigurationException(sprintf('Invalid JSON rules input: "%s".', json_last_error_msg()));
+                throw new InvalidConfigurationException(\sprintf('Invalid JSON rules input: "%s".', json_last_error_msg()));
             }
 
             return $rules;
@@ -701,7 +701,7 @@ final class ConfigurationResolver
 
         foreach ($rules as $key => $value) {
             if (\is_int($key)) {
-                throw new InvalidConfigurationException(sprintf('Missing value for "%s" rule/set.', $value));
+                throw new InvalidConfigurationException(\sprintf('Missing value for "%s" rule/set.', $value));
             }
 
             $ruleSet[$key] = true;
@@ -777,7 +777,7 @@ final class ConfigurationResolver
             foreach ($unknownFixers as $unknownFixer) {
                 if (isset($renamedRules[$unknownFixer])) { // Check if present as old renamed rule
                     $hasOldRule = true;
-                    $message .= sprintf(
+                    $message .= \sprintf(
                         '"%s" is renamed (did you mean "%s"?%s), ',
                         $unknownFixer,
                         $renamedRules[$unknownFixer]['new_name'],
@@ -786,7 +786,7 @@ final class ConfigurationResolver
                 } else { // Go to normal matcher if it is not a renamed rule
                     $matcher = new WordMatcher($availableFixers);
                     $alternative = $matcher->match($unknownFixer);
-                    $message .= sprintf(
+                    $message .= \sprintf(
                         '"%s"%s, ',
                         $unknownFixer,
                         null === $alternative ? '' : ' (did you mean "'.$alternative.'"?)'
@@ -808,8 +808,8 @@ final class ConfigurationResolver
             if (isset($rules[$fixerName]) && $fixer instanceof DeprecatedFixerInterface) {
                 $successors = $fixer->getSuccessorsNames();
                 $messageEnd = [] === $successors
-                    ? sprintf(' and will be removed in version %d.0.', Application::getMajorVersion() + 1)
-                    : sprintf('. Use %s instead.', str_replace('`', '"', Utils::naturalLanguageJoinWithBackticks($successors)));
+                    ? \sprintf(' and will be removed in version %d.0.', Application::getMajorVersion() + 1)
+                    : \sprintf('. Use %s instead.', str_replace('`', '"', Utils::naturalLanguageJoinWithBackticks($successors)));
 
                 Utils::triggerDeprecation(new \RuntimeException("Rule \"{$fixerName}\" is deprecated{$messageEnd}"));
             }
@@ -836,7 +836,7 @@ final class ConfigurationResolver
             $modes,
             true
         )) {
-            throw new InvalidConfigurationException(sprintf(
+            throw new InvalidConfigurationException(\sprintf(
                 'The path-mode "%s" is not defined, supported are %s.',
                 $this->options['path-mode'],
                 Utils::naturalLanguageJoin($modes)
@@ -926,7 +926,7 @@ final class ConfigurationResolver
     private function setOption(string $name, $value): void
     {
         if (!\array_key_exists($name, $this->options)) {
-            throw new InvalidConfigurationException(sprintf('Unknown option name: "%s".', $name));
+            throw new InvalidConfigurationException(\sprintf('Unknown option name: "%s".', $name));
         }
 
         $this->options[$name] = $value;
@@ -937,7 +937,7 @@ final class ConfigurationResolver
         $value = $this->options[$optionName];
 
         if (!\is_string($value)) {
-            throw new InvalidConfigurationException(sprintf('Expected boolean or string value for option "%s".', $optionName));
+            throw new InvalidConfigurationException(\sprintf('Expected boolean or string value for option "%s".', $optionName));
         }
 
         if ('yes' === $value) {
@@ -948,7 +948,7 @@ final class ConfigurationResolver
             return false;
         }
 
-        throw new InvalidConfigurationException(sprintf('Expected "yes" or "no" for option "%s", got "%s".', $optionName, $value));
+        throw new InvalidConfigurationException(\sprintf('Expected "yes" or "no" for option "%s", got "%s".', $optionName, $value));
     }
 
     private static function separatedContextLessInclude(string $path): ConfigInterface
@@ -957,7 +957,7 @@ final class ConfigurationResolver
 
         // verify that the config has an instance of Config
         if (!$config instanceof ConfigInterface) {
-            throw new InvalidConfigurationException(sprintf('The config file: "%s" does not return a "PhpCsFixer\ConfigInterface" instance. Got: "%s".', $path, \is_object($config) ? \get_class($config) : \gettype($config)));
+            throw new InvalidConfigurationException(\sprintf('The config file: "%s" does not return a "PhpCsFixer\ConfigInterface" instance. Got: "%s".', $path, \is_object($config) ? \get_class($config) : \gettype($config)));
         }
 
         return $config;

+ 9 - 9
vendor/friendsofphp/php-cs-fixer/src/Console/Output/ErrorOutput.php

@@ -44,7 +44,7 @@ final class ErrorOutput
      */
     public function listErrors(string $process, array $errors): void
     {
-        $this->output->writeln(['', sprintf(
+        $this->output->writeln(['', \sprintf(
             'Files that were not fixed due to errors reported during %s:',
             $process
         )]);
@@ -52,13 +52,13 @@ final class ErrorOutput
         $showDetails = $this->output->getVerbosity() >= OutputInterface::VERBOSITY_VERY_VERBOSE;
         $showTrace = $this->output->getVerbosity() >= OutputInterface::VERBOSITY_DEBUG;
         foreach ($errors as $i => $error) {
-            $this->output->writeln(sprintf('%4d) %s', $i + 1, $error->getFilePath()));
+            $this->output->writeln(\sprintf('%4d) %s', $i + 1, $error->getFilePath()));
             $e = $error->getSource();
             if (!$showDetails || null === $e) {
                 continue;
             }
 
-            $class = sprintf('[%s]', \get_class($e));
+            $class = \sprintf('[%s]', \get_class($e));
             $message = $e->getMessage();
             $code = $e->getCode();
             if (0 !== $code) {
@@ -80,7 +80,7 @@ final class ErrorOutput
                     $line .= str_repeat(' ', $length - \strlen($line));
                 }
 
-                $this->output->writeln(sprintf('      <error>  %s  </error>', $this->prepareOutput($line)));
+                $this->output->writeln(\sprintf('      <error>  %s  </error>', $this->prepareOutput($line)));
             }
 
             if ($showTrace && !$e instanceof LintingException) { // stack trace of lint exception is of no interest
@@ -99,13 +99,13 @@ final class ErrorOutput
 
             if (Error::TYPE_LINT === $error->getType() && 0 < \count($error->getAppliedFixers())) {
                 $this->output->writeln('');
-                $this->output->writeln(sprintf('      Applied fixers: <comment>%s</comment>', implode(', ', $error->getAppliedFixers())));
+                $this->output->writeln(\sprintf('      Applied fixers: <comment>%s</comment>', implode(', ', $error->getAppliedFixers())));
 
                 $diff = $error->getDiff();
                 if (null !== $diff) {
                     $diffFormatter = new DiffConsoleFormatter(
                         $this->isDecorated,
-                        sprintf(
+                        \sprintf(
                             '<comment>      ---------- begin diff ----------</comment>%s%%s%s<comment>      ----------- end diff -----------</comment>',
                             PHP_EOL,
                             PHP_EOL
@@ -132,18 +132,18 @@ final class ErrorOutput
     private function outputTrace(array $trace): void
     {
         if (isset($trace['class'], $trace['type'], $trace['function'])) {
-            $this->output->writeln(sprintf(
+            $this->output->writeln(\sprintf(
                 '      <comment>%s</comment>%s<comment>%s()</comment>',
                 $this->prepareOutput($trace['class']),
                 $this->prepareOutput($trace['type']),
                 $this->prepareOutput($trace['function'])
             ));
         } elseif (isset($trace['function'])) {
-            $this->output->writeln(sprintf('      <comment>%s()</comment>', $this->prepareOutput($trace['function'])));
+            $this->output->writeln(\sprintf('      <comment>%s()</comment>', $this->prepareOutput($trace['function'])));
         }
 
         if (isset($trace['file'])) {
-            $this->output->writeln(sprintf('        in <info>%s</info> at line <info>%d</info>', $this->prepareOutput($trace['file']), $trace['line']));
+            $this->output->writeln(\sprintf('        in <info>%s</info> at line <info>%d</info>', $this->prepareOutput($trace['file']), $trace['line']));
         }
     }
 

+ 4 - 4
vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/DotsOutput.php

@@ -82,7 +82,7 @@ final class DotsOutput implements ProgressOutputInterface
     public function onFixerFileProcessed(FixerFileProcessedEvent $event): void
     {
         $status = self::$eventStatusMap[$event->getStatus()];
-        $this->getOutput()->write($this->getOutput()->isDecorated() ? sprintf($status['format'], $status['symbol']) : $status['symbol']);
+        $this->getOutput()->write($this->getOutput()->isDecorated() ? \sprintf($status['format'], $status['symbol']) : $status['symbol']);
 
         ++$this->processedFiles;
 
@@ -90,7 +90,7 @@ final class DotsOutput implements ProgressOutputInterface
         $isLast = $this->processedFiles === $this->context->getFilesCount();
 
         if (0 === $symbolsOnCurrentLine || $isLast) {
-            $this->getOutput()->write(sprintf(
+            $this->getOutput()->write(\sprintf(
                 '%s %'.\strlen((string) $this->context->getFilesCount()).'d / %d (%3d%%)',
                 $isLast && 0 !== $symbolsOnCurrentLine ? str_repeat(' ', $this->symbolsPerLine - $symbolsOnCurrentLine) : '',
                 $this->processedFiles,
@@ -114,10 +114,10 @@ final class DotsOutput implements ProgressOutputInterface
                 continue;
             }
 
-            $symbols[$symbol] = sprintf('%s-%s', $this->getOutput()->isDecorated() ? sprintf($status['format'], $symbol) : $symbol, $status['description']);
+            $symbols[$symbol] = \sprintf('%s-%s', $this->getOutput()->isDecorated() ? \sprintf($status['format'], $symbol) : $symbol, $status['description']);
         }
 
-        $this->getOutput()->write(sprintf("\nLegend: %s\n", implode(', ', $symbols)));
+        $this->getOutput()->write(\sprintf("\nLegend: %s\n", implode(', ', $symbols)));
     }
 
     private function getOutput(): OutputInterface

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/ProgressOutputFactory.php

@@ -38,7 +38,7 @@ final class ProgressOutputFactory
 
         if (!$this->isBuiltInType($outputType)) {
             throw new \InvalidArgumentException(
-                sprintf(
+                \sprintf(
                     'Something went wrong, "%s" output type is not supported',
                     $outputType
                 )

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JunitReporter.php

@@ -59,7 +59,7 @@ final class JunitReporter implements ReporterInterface
         if ($reportSummary->getTime() > 0) {
             $testsuite->setAttribute(
                 'time',
-                sprintf(
+                \sprintf(
                     '%.3f',
                     $reportSummary->getTime() / 1_000
                 )

+ 3 - 3
vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReporterFactory.php

@@ -36,7 +36,7 @@ final class ReporterFactory
 
             foreach (SymfonyFinder::create()->files()->name('*Reporter.php')->in(__DIR__) as $file) {
                 $relativeNamespace = $file->getRelativePath();
-                $builtInReporters[] = sprintf(
+                $builtInReporters[] = \sprintf(
                     '%s\%s%s',
                     __NAMESPACE__,
                     '' !== $relativeNamespace ? $relativeNamespace.'\\' : '',
@@ -60,7 +60,7 @@ final class ReporterFactory
         $format = $reporter->getFormat();
 
         if (isset($this->reporters[$format])) {
-            throw new \UnexpectedValueException(sprintf('Reporter for format "%s" is already registered.', $format));
+            throw new \UnexpectedValueException(\sprintf('Reporter for format "%s" is already registered.', $format));
         }
 
         $this->reporters[$format] = $reporter;
@@ -82,7 +82,7 @@ final class ReporterFactory
     public function getReporter(string $format): ReporterInterface
     {
         if (!isset($this->reporters[$format])) {
-            throw new \UnexpectedValueException(sprintf('Reporter for format "%s" is not registered.', $format));
+            throw new \UnexpectedValueException(\sprintf('Reporter for format "%s" is not registered.', $format));
         }
 
         return $this->reporters[$format];

+ 4 - 4
vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/TextReporter.php

@@ -35,7 +35,7 @@ final class TextReporter implements ReporterInterface
         $identifiedFiles = 0;
         foreach ($reportSummary->getChanged() as $file => $fixResult) {
             ++$identifiedFiles;
-            $output .= sprintf('%4d) %s', $identifiedFiles, $file);
+            $output .= \sprintf('%4d) %s', $identifiedFiles, $file);
 
             if ($reportSummary->shouldAddAppliedFixers()) {
                 $output .= $this->getAppliedFixers(
@@ -62,7 +62,7 @@ final class TextReporter implements ReporterInterface
      */
     private function getAppliedFixers(bool $isDecoratedOutput, array $appliedFixers): string
     {
-        return sprintf(
+        return \sprintf(
             $isDecoratedOutput ? ' (<comment>%s</comment>)' : ' (%s)',
             implode(', ', $appliedFixers)
         );
@@ -74,7 +74,7 @@ final class TextReporter implements ReporterInterface
             return '';
         }
 
-        $diffFormatter = new DiffConsoleFormatter($isDecoratedOutput, sprintf(
+        $diffFormatter = new DiffConsoleFormatter($isDecoratedOutput, \sprintf(
             '<comment>      ---------- begin diff ----------</comment>%s%%s%s<comment>      ----------- end diff -----------</comment>',
             PHP_EOL,
             PHP_EOL
@@ -89,7 +89,7 @@ final class TextReporter implements ReporterInterface
             return '';
         }
 
-        return PHP_EOL.sprintf(
+        return PHP_EOL.\sprintf(
             '%s %d of %d %s in %.3f seconds, %.2f MB memory used'.PHP_EOL,
             $isDryRun ? 'Found' : 'Fixed',
             $identifiedFiles,

+ 3 - 3
vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReporterFactory.php

@@ -38,7 +38,7 @@ final class ReporterFactory
 
             foreach (SymfonyFinder::create()->files()->name('*Reporter.php')->in(__DIR__) as $file) {
                 $relativeNamespace = $file->getRelativePath();
-                $builtInReporters[] = sprintf(
+                $builtInReporters[] = \sprintf(
                     '%s\%s%s',
                     __NAMESPACE__,
                     '' !== $relativeNamespace ? $relativeNamespace.'\\' : '',
@@ -59,7 +59,7 @@ final class ReporterFactory
         $format = $reporter->getFormat();
 
         if (isset($this->reporters[$format])) {
-            throw new \UnexpectedValueException(sprintf('Reporter for format "%s" is already registered.', $format));
+            throw new \UnexpectedValueException(\sprintf('Reporter for format "%s" is already registered.', $format));
         }
 
         $this->reporters[$format] = $reporter;
@@ -81,7 +81,7 @@ final class ReporterFactory
     public function getReporter(string $format): ReporterInterface
     {
         if (!isset($this->reporters[$format])) {
-            throw new \UnexpectedValueException(sprintf('Reporter for format "%s" is not registered.', $format));
+            throw new \UnexpectedValueException(\sprintf('Reporter for format "%s" is not registered.', $format));
         }
 
         return $this->reporters[$format];

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/TextReporter.php

@@ -37,7 +37,7 @@ final class TextReporter implements ReporterInterface
         $output = '';
 
         foreach ($sets as $i => $set) {
-            $output .= sprintf('%2d) %s', $i + 1, $set->getName()).PHP_EOL.'      '.$set->getDescription().PHP_EOL;
+            $output .= \sprintf('%2d) %s', $i + 1, $set->getName()).PHP_EOL.'      '.$set->getDescription().PHP_EOL;
 
             if ($set->isRisky()) {
                 $output .= '      Set contains risky rules.'.PHP_EOL;

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClient.php

@@ -34,7 +34,7 @@ final class GithubClient implements GithubClientInterface
         );
 
         if (false === $result) {
-            throw new \RuntimeException(sprintf('Failed to load tags at "%s".', $this->url));
+            throw new \RuntimeException(\sprintf('Failed to load tags at "%s".', $this->url));
         }
 
         /**
@@ -47,7 +47,7 @@ final class GithubClient implements GithubClientInterface
          */
         $result = json_decode($result, true);
         if (JSON_ERROR_NONE !== json_last_error()) {
-            throw new \RuntimeException(sprintf(
+            throw new \RuntimeException(\sprintf(
                 'Failed to read response from "%s" as JSON: %s.',
                 $this->url,
                 json_last_error_msg()

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/Console/WarningsDetector.php

@@ -50,7 +50,7 @@ final class WarningsDetector
         if ($this->toolInfo->isInstalledByComposer()) {
             $details = $this->toolInfo->getComposerInstallationDetails();
             if (ToolInfo::COMPOSER_LEGACY_PACKAGE_NAME === $details['name']) {
-                $this->warnings[] = sprintf(
+                $this->warnings[] = \sprintf(
                     'You are running PHP CS Fixer installed with old vendor `%s`. Please update to `%s`.',
                     ToolInfo::COMPOSER_LEGACY_PACKAGE_NAME,
                     ToolInfo::COMPOSER_PACKAGE_NAME

+ 3 - 3
vendor/friendsofphp/php-cs-fixer/src/Differ/DiffConsoleFormatter.php

@@ -42,7 +42,7 @@ final class DiffConsoleFormatter
             ? $this->template
             : Preg::replace('/<[^<>]+>/', '', $this->template);
 
-        return sprintf(
+        return \sprintf(
             $template,
             implode(
                 PHP_EOL,
@@ -61,7 +61,7 @@ final class DiffConsoleFormatter
                                         $colour = 'cyan';
                                     }
 
-                                    return sprintf('<fg=%s>%s</fg=%s>', $colour, OutputFormatter::escape($matches[0]), $colour);
+                                    return \sprintf('<fg=%s>%s</fg=%s>', $colour, OutputFormatter::escape($matches[0]), $colour);
                                 },
                                 $line,
                                 1,
@@ -73,7 +73,7 @@ final class DiffConsoleFormatter
                             }
                         }
 
-                        return sprintf($lineTemplate, $line);
+                        return \sprintf($lineTemplate, $line);
                     },
                     Preg::split('#\R#u', $diff)
                 )

+ 7 - 4
vendor/friendsofphp/php-cs-fixer/src/DocBlock/Annotation.php

@@ -171,14 +171,17 @@ final class Annotation
     }
 
     /**
-     * @return null|string
-     *
      * @internal
      */
-    public function getVariableName()
+    public function getVariableName(): ?string
     {
         $type = preg_quote($this->getTypesContent() ?? '', '/');
-        $regex = "/@{$this->tag->getName()}\\s+({$type}\\s*)?(&\\s*)?(\\.{3}\\s*)?(?<variable>\\$.+?)(?:[\\s*]|$)/";
+        $regex = \sprintf(
+            '/@%s\s+(%s\s*)?(&\s*)?(\.{3}\s*)?(?<variable>\$%s)(?:.*|$)/',
+            $this->tag->getName(),
+            $type,
+            TypeExpression::REGEX_IDENTIFIER
+        );
 
         if (Preg::match($regex, $this->lines[0]->getContent(), $matches)) {
             return $matches['variable'];

+ 22 - 6
vendor/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php

@@ -271,23 +271,37 @@ final class TypeExpression
      */
     public function walkTypes(\Closure $callback): void
     {
-        foreach (array_reverse($this->innerTypeExpressions) as [
-            'start_index' => $startIndex,
+        $innerValueOrig = $this->value;
+
+        $startIndexOffset = 0;
+
+        foreach ($this->innerTypeExpressions as [
+            'start_index' => $startIndexOrig,
             'expression' => $inner,
         ]) {
-            $initialValueLength = \strlen($inner->toString());
+            $innerLengthOrig = \strlen($inner->toString());
 
             $inner->walkTypes($callback);
 
             $this->value = substr_replace(
                 $this->value,
                 $inner->toString(),
-                $startIndex,
-                $initialValueLength
+                $startIndexOrig + $startIndexOffset,
+                $innerLengthOrig
             );
+
+            $startIndexOffset += \strlen($inner->toString()) - $innerLengthOrig;
         }
 
         $callback($this);
+
+        if ($this->value !== $innerValueOrig) {
+            $this->isUnionType = false;
+            $this->typesGlue = '|';
+            $this->innerTypeExpressions = [];
+
+            $this->parse();
+        }
     }
 
     /**
@@ -393,7 +407,9 @@ final class TypeExpression
             $consumedValueLength = \strlen($matches[0][0]);
             $index += $consumedValueLength;
 
-            if (\strlen($this->value) === $index) {
+            if (\strlen($this->value) <= $index) {
+                \assert(\strlen($this->value) === $index);
+
                 return;
             }
         }

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/DocLexer.php

@@ -151,7 +151,7 @@ final class DocLexer
     private function scan(string $input): void
     {
         if (!isset($this->regex)) {
-            $this->regex = sprintf(
+            $this->regex = \sprintf(
                 '/(%s)|%s/%s',
                 implode(')|(', $this->getCatchablePatterns()),
                 implode('|', $this->getNonCatchablePatterns()),

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/Tokens.php

@@ -256,7 +256,7 @@ final class Tokens extends \SplFixedArray
                 $type = \get_class($token);
             }
 
-            throw new \InvalidArgumentException(sprintf('Token must be an instance of PhpCsFixer\Doctrine\Annotation\Token, "%s" given.', $type));
+            throw new \InvalidArgumentException(\sprintf('Token must be an instance of PhpCsFixer\Doctrine\Annotation\Token, "%s" given.', $type));
         }
 
         parent::offsetSet($index, $token);
@@ -270,7 +270,7 @@ final class Tokens extends \SplFixedArray
     public function offsetUnset($index): void
     {
         if (!isset($this[$index])) {
-            throw new \OutOfBoundsException(sprintf('Index "%s" is invalid or does not exist.', $index));
+            throw new \OutOfBoundsException(\sprintf('Index "%s" is invalid or does not exist.', $index));
         }
 
         $max = \count($this) - 1;

+ 5 - 5
vendor/friendsofphp/php-cs-fixer/src/Documentation/FixerDocumentGenerator.php

@@ -83,7 +83,7 @@ final class FixerDocumentGenerator
             $alternatives = $fixer->getSuccessorsNames();
 
             if (0 !== \count($alternatives)) {
-                $deprecationDescription .= RstUtils::toRst(sprintf(
+                $deprecationDescription .= RstUtils::toRst(\sprintf(
                     "\n\nYou should use %s instead.",
                     Utils::naturalLanguageJoinWithBackticks($alternatives)
                 ), 0);
@@ -167,7 +167,7 @@ final class FixerDocumentGenerator
                 if (null === $allowed) {
                     $allowedKind = 'Allowed types';
                     $allowed = array_map(
-                        static fn (string $value): string => '``'.(str_ends_with($value, '[]') ? sprintf('list<%s>', substr($value, 0, -2)) : $value).'``',
+                        static fn (string $value): string => '``'.Utils::convertArrayTypeToList($value).'``',
                         $option->getAllowedTypes(),
                     );
                 } else {
@@ -202,7 +202,7 @@ final class FixerDocumentGenerator
                 RST;
 
             foreach ($samples as $index => $sample) {
-                $title = sprintf('Example #%d', $index + 1);
+                $title = \sprintf('Example #%d', $index + 1);
                 $titleLine = str_repeat('~', \strlen($title));
                 $doc .= "\n\n{$title}\n{$titleLine}";
 
@@ -210,7 +210,7 @@ final class FixerDocumentGenerator
                     if (null === $sample->getConfiguration()) {
                         $doc .= "\n\n*Default* configuration.";
                     } else {
-                        $doc .= sprintf(
+                        $doc .= \sprintf(
                             "\n\nWith configuration: ``%s``.",
                             Utils::toString($sample->getConfiguration())
                         );
@@ -380,7 +380,7 @@ final class FixerDocumentGenerator
                    the sample is not suitable for current version of PHP (%s).
                 RST;
 
-            return sprintf($error, PHP_VERSION);
+            return \sprintf($error, PHP_VERSION);
         }
 
         $old = $sample->getCode();

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/Documentation/RuleSetDocumentationGenerator.php

@@ -58,7 +58,7 @@ final class RuleSetDocumentationGenerator
 
             if (0 !== \count($alternatives)) {
                 $deprecationDescription .= RstUtils::toRst(
-                    sprintf(
+                    \sprintf(
                         "\n\nYou should use %s instead.",
                         Utils::naturalLanguageJoinWithBackticks($alternatives)
                     ),

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/Error/SourceExceptionFactory.php

@@ -37,7 +37,7 @@ final class SourceExceptionFactory
             }
         } catch (\Throwable $e) {
             $exception = new \RuntimeException(
-                sprintf('[%s] %s', $exceptionClass, $error['message']),
+                \sprintf('[%s] %s', $exceptionClass, $error['message']),
                 $error['code']
             );
         }

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/FileReader.php

@@ -61,7 +61,7 @@ final class FileReader
         if (false === $content) {
             $error = error_get_last();
 
-            throw new \RuntimeException(sprintf(
+            throw new \RuntimeException(\sprintf(
                 'Failed to read content from "%s".%s',
                 $realPath,
                 null !== $error ? ' '.$error['message'] : ''

+ 48 - 0
vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php

@@ -19,6 +19,7 @@ use PhpCsFixer\DocBlock\DocBlock;
 use PhpCsFixer\DocBlock\Line;
 use PhpCsFixer\Indicator\PhpUnitTestCaseIndicator;
 use PhpCsFixer\Tokenizer\Analyzer\AttributeAnalyzer;
+use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer;
 use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer;
 use PhpCsFixer\Tokenizer\Analyzer\WhitespacesAnalyzer;
 use PhpCsFixer\Tokenizer\CT;
@@ -98,6 +99,52 @@ abstract class AbstractPhpUnitFixer extends AbstractFixer
         return $tokens[$index]->isGivenKind(T_DOC_COMMENT);
     }
 
+    /**
+     * @return iterable<array{
+     *     index: int,
+     *     loweredName: string,
+     *     openBraceIndex: int,
+     *     closeBraceIndex: int,
+     * }>
+     */
+    protected function getPreviousAssertCall(Tokens $tokens, int $startIndex, int $endIndex): iterable
+    {
+        $functionsAnalyzer = new FunctionsAnalyzer();
+
+        for ($index = $endIndex; $index > $startIndex; --$index) {
+            $index = $tokens->getPrevTokenOfKind($index, [[T_STRING]]);
+
+            if (null === $index) {
+                return;
+            }
+
+            // test if "assert" something call
+            $loweredContent = strtolower($tokens[$index]->getContent());
+
+            if (!str_starts_with($loweredContent, 'assert')) {
+                continue;
+            }
+
+            // test candidate for simple calls like: ([\]+'some fixable call'(...))
+            $openBraceIndex = $tokens->getNextMeaningfulToken($index);
+
+            if (!$tokens[$openBraceIndex]->equals('(')) {
+                continue;
+            }
+
+            if (!$functionsAnalyzer->isTheSameClassCall($tokens, $index)) {
+                continue;
+            }
+
+            yield [
+                'index' => $index,
+                'loweredName' => $loweredContent,
+                'openBraceIndex' => $openBraceIndex,
+                'closeBraceIndex' => $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openBraceIndex),
+            ];
+        }
+    }
+
     private function createDocBlock(Tokens $tokens, int $docBlockIndex, string $annotation): void
     {
         $lineEnd = $this->whitespacesConfig->getLineEnding();
@@ -138,6 +185,7 @@ abstract class AbstractPhpUnitFixer extends AbstractFixer
             }
         }
         $doc = $this->makeDocBlockMultiLineIfNeeded($doc, $tokens, $docBlockIndex, $annotation);
+
         $lines = $this->addInternalAnnotation($doc, $tokens, $docBlockIndex, $annotation);
         $lines = implode('', $lines);
 

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractShortOperatorFixer.php

@@ -241,7 +241,7 @@ abstract class AbstractShortOperatorFixer extends AbstractFixer
             return false;
         }
 
-        throw new \InvalidArgumentException(sprintf('Not supported operator "%s".', $operatorToken->toJson()));
+        throw new \InvalidArgumentException(\sprintf('Not supported operator "%s".', $operatorToken->toJson()));
     }
 
     private function belongsToSwitchOrAlternativeSyntax(AlternativeSyntaxAnalyzer $alternativeSyntaxAnalyzer, Tokens $tokens, int $index): bool

+ 33 - 18
vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasFunctionsFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Alias;
 
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@@ -31,9 +32,21 @@ use PhpCsFixer\Tokenizer\Tokens;
 /**
  * @author Vladimir Reznichenko <kalessil@gmail.com>
  * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  sets?: list<'@all'|'@exif'|'@ftp'|'@IMAP'|'@internal'|'@ldap'|'@mbreg'|'@mysqli'|'@oci'|'@odbc'|'@openssl'|'@pcntl'|'@pg'|'@posix'|'@snmp'|'@sodium'|'@time'>
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  sets: list<'@all'|'@exif'|'@ftp'|'@IMAP'|'@internal'|'@ldap'|'@mbreg'|'@mysqli'|'@oci'|'@odbc'|'@openssl'|'@pcntl'|'@pg'|'@posix'|'@snmp'|'@sodium'|'@time'>
+ * }
  */
 final class NoAliasFunctionsFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     private const SETS = [
         '@internal' => [
             'diskfreespace' => 'disk_free_space',
@@ -160,23 +173,6 @@ final class NoAliasFunctionsFixer extends AbstractFixer implements ConfigurableF
      */
     private array $aliases = [];
 
-    public function configure(array $configuration): void
-    {
-        parent::configure($configuration);
-
-        $this->aliases = [];
-
-        foreach ($this->configuration['sets'] as $set) {
-            if ('@all' === $set) {
-                $this->aliases = array_merge(...array_values(self::SETS));
-
-                break;
-            }
-
-            $this->aliases = array_merge($this->aliases, self::SETS[$set]);
-        }
-    }
-
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(
@@ -240,6 +236,25 @@ mbereg_search_getregs();
         return true;
     }
 
+    protected function configurePostNormalisation(): void
+    {
+        $this->aliases = [];
+
+        foreach ($this->configuration['sets'] as $set) {
+            if ('@all' === $set) {
+                $this->aliases = array_merge(...array_values(self::SETS));
+
+                break;
+            }
+
+            if (!isset(self::SETS[$set])) {
+                throw new \LogicException(\sprintf('Set %s passed option validation, but not part of ::SETS.', $set));
+            }
+
+            $this->aliases = array_merge($this->aliases, self::SETS[$set]);
+        }
+    }
+
     protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
     {
         $functionsAnalyzer = new FunctionsAnalyzer();
@@ -306,7 +321,7 @@ mbereg_search_getregs();
         $list = "List of sets to fix. Defined sets are:\n\n";
 
         foreach ($sets as $set => $description) {
-            $list .= sprintf("* `%s` (%s);\n", $set, $description);
+            $list .= \sprintf("* `%s` (%s);\n", $set, $description);
         }
 
         $list = rtrim($list, ";\n").'.';

+ 18 - 7
vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoMixedEchoPrintFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Alias;
 
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
 use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@@ -28,21 +29,26 @@ use PhpCsFixer\Tokenizer\Tokens;
 
 /**
  * @author Sullivan Senechal <soullivaneuh@gmail.com>
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  use?: 'echo'|'print'
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  use: 'echo'|'print'
+ * }
  */
 final class NoMixedEchoPrintFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     /**
      * @var T_ECHO|T_PRINT
      */
     private int $candidateTokenType;
 
-    public function configure(array $configuration): void
-    {
-        parent::configure($configuration);
-
-        $this->candidateTokenType = 'echo' === $this->configuration['use'] ? T_PRINT : T_ECHO;
-    }
-
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(
@@ -69,6 +75,11 @@ final class NoMixedEchoPrintFixer extends AbstractFixer implements ConfigurableF
         return $tokens->isTokenKindFound($this->candidateTokenType);
     }
 
+    protected function configurePostNormalisation(): void
+    {
+        $this->candidateTokenType = 'echo' === $this->configuration['use'] ? T_PRINT : T_ECHO;
+    }
+
     protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
     {
         foreach ($tokens as $index => $token) {

+ 15 - 15
vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/RandomApiMigrationFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Alias;
 
 use PhpCsFixer\AbstractFunctionReferenceFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
 use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@@ -29,9 +30,21 @@ use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
 
 /**
  * @author Vladimir Reznichenko <kalessil@gmail.com>
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  replacements?: array<string, string>
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  replacements: array<string, string>
+ * }
  */
 final class RandomApiMigrationFixer extends AbstractFunctionReferenceFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     /**
      * @var array<string, array<int, int>>
      */
@@ -43,11 +56,6 @@ final class RandomApiMigrationFixer extends AbstractFunctionReferenceFixer imple
         'random_int' => [0, 2],
     ];
 
-    public function configure(array $configuration): void
-    {
-        parent::configure($configuration);
-    }
-
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(
@@ -119,23 +127,15 @@ final class RandomApiMigrationFixer extends AbstractFunctionReferenceFixer imple
     {
         return new FixerConfigurationResolver([
             (new FixerOptionBuilder('replacements', 'Mapping between replaced functions with the new ones.'))
-                ->setAllowedTypes(['array'])
+                ->setAllowedTypes(['array<string, string>'])
                 ->setAllowedValues([static function (array $value): bool {
                     foreach ($value as $functionName => $replacement) {
                         if (!\array_key_exists($functionName, self::$argumentCounts)) {
-                            throw new InvalidOptionsException(sprintf(
+                            throw new InvalidOptionsException(\sprintf(
                                 'Function "%s" is not handled by the fixer.',
                                 $functionName
                             ));
                         }
-
-                        if (!\is_string($replacement)) {
-                            throw new InvalidOptionsException(sprintf(
-                                'Replacement for function "%s" must be a string, "%s" given.',
-                                $functionName,
-                                get_debug_type($replacement)
-                            ));
-                        }
                     }
 
                     return true;

+ 1 - 0
vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/SetTypeToCastFixer.php

@@ -149,6 +149,7 @@ settype($bar, "null");
             if ('null' === $type) {
                 $this->fixSettypeNullCall($tokens, $functionNameIndex, $argumentToken);
             } else {
+                \assert(isset($map[$type]));
                 $this->fixSettypeCall($tokens, $functionNameIndex, $argumentToken, new Token($map[$type]));
             }
         }

+ 18 - 7
vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/ArraySyntaxFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ArrayNotation;
 
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
 use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@@ -30,21 +31,26 @@ use PhpCsFixer\Tokenizer\Tokens;
  * @author Gregor Harlan <gharlan@web.de>
  * @author Sebastiaan Stok <s.stok@rollerscapes.net>
  * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  syntax?: 'long'|'short'
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  syntax: 'long'|'short'
+ * }
  */
 final class ArraySyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     /**
      * @var CT::T_ARRAY_SQUARE_BRACE_OPEN|T_ARRAY
      */
     private $candidateTokenKind;
 
-    public function configure(array $configuration): void
-    {
-        parent::configure($configuration);
-
-        $this->resolveCandidateTokenKind();
-    }
-
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(
@@ -76,6 +82,11 @@ final class ArraySyntaxFixer extends AbstractFixer implements ConfigurableFixerI
         return $tokens->isTokenKindFound($this->candidateTokenKind);
     }
 
+    protected function configurePostNormalisation(): void
+    {
+        $this->resolveCandidateTokenKind();
+    }
+
     protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
     {
         for ($index = $tokens->count() - 1; 0 <= $index; --$index) {

+ 13 - 0
vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoWhitespaceBeforeCommaInArrayFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ArrayNotation;
 
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
 use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@@ -27,9 +28,21 @@ use PhpCsFixer\Tokenizer\Tokens;
 
 /**
  * @author Adam Marczuk <adam@marczuk.info>
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  after_heredoc?: bool
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  after_heredoc: bool
+ * }
  */
 final class NoWhitespaceBeforeCommaInArrayFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(

+ 6 - 2
vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NormalizeIndexBraceFixer.php

@@ -15,9 +15,10 @@ declare(strict_types=1);
 namespace PhpCsFixer\Fixer\ArrayNotation;
 
 use PhpCsFixer\AbstractFixer;
-use PhpCsFixer\FixerDefinition\CodeSample;
 use PhpCsFixer\FixerDefinition\FixerDefinition;
 use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
+use PhpCsFixer\FixerDefinition\VersionSpecification;
+use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample;
 use PhpCsFixer\Tokenizer\CT;
 use PhpCsFixer\Tokenizer\Token;
 use PhpCsFixer\Tokenizer\Tokens;
@@ -31,7 +32,10 @@ final class NormalizeIndexBraceFixer extends AbstractFixer
     {
         return new FixerDefinition(
             'Array index should always be written by using square braces.',
-            [new CodeSample("<?php\necho \$sample{\$index};\n")]
+            [new VersionSpecificCodeSample(
+                "<?php\necho \$sample{\$index};\n",
+                new VersionSpecification(null, 8_04_00 - 1)
+            )]
         );
     }
 

+ 13 - 0
vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ArrayNotation;
 
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
 use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@@ -29,9 +30,21 @@ use PhpCsFixer\Tokenizer\Tokens;
 
 /**
  * @author Adam Marczuk <adam@marczuk.info>
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  ensure_single_space?: bool
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  ensure_single_space: bool
+ * }
  */
 final class WhitespaceAfterCommaInArrayFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(

+ 13 - 0
vendor/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/AttributeEmptyParenthesesFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\AttributeNotation;
 
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
 use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@@ -28,9 +29,21 @@ use PhpCsFixer\Tokenizer\Tokens;
 
 /**
  * @author HypeMC <hypemc@gmail.com>
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  use_parentheses?: bool
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  use_parentheses: bool
+ * }
  */
 final class AttributeEmptyParenthesesFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(

+ 16 - 1
vendor/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/OrderedAttributesFixer.php

@@ -17,6 +17,7 @@ namespace PhpCsFixer\Fixer\AttributeNotation;
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
 use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@@ -38,9 +39,23 @@ use Symfony\Component\OptionsResolver\Options;
  * @author HypeMC <hypemc@gmail.com>
  *
  * @phpstan-import-type _AttributeItems from AttributeAnalysis
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  order?: list<string>,
+ *  sort_algorithm?: 'alpha'|'custom'
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  order: array<string, int>,
+ *  sort_algorithm: 'alpha'|'custom'
+ * }
  */
 final class OrderedAttributesFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     public const ORDER_ALPHA = 'alpha';
     public const ORDER_CUSTOM = 'custom';
 
@@ -263,7 +278,7 @@ final class OrderedAttributesFixer extends AbstractFixer implements Configurable
                     ($this->configuration['order'][$b['name']] ?? PHP_INT_MAX);
             }
 
-            throw new \InvalidArgumentException(sprintf('Invalid sort algorithm "%s" provided.', $sortAlgorithm));
+            throw new \InvalidArgumentException(\sprintf('Invalid sort algorithm "%s" provided.', $sortAlgorithm));
         });
 
         return $elements;

+ 25 - 3
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Basic;
 
 use PhpCsFixer\AbstractProxyFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\Fixer\ControlStructure\ControlStructureBracesFixer;
 use PhpCsFixer\Fixer\ControlStructure\ControlStructureContinuationPositionFixer;
 use PhpCsFixer\Fixer\DeprecatedFixerInterface;
@@ -37,9 +38,29 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
  * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
  *
  * @deprecated
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  allow_single_line_anonymous_class_with_empty_body?: bool,
+ *  allow_single_line_closure?: bool,
+ *  position_after_anonymous_constructs?: 'next'|'same',
+ *  position_after_control_structures?: 'next'|'same',
+ *  position_after_functions_and_oop_constructs?: 'next'|'same'
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  allow_single_line_anonymous_class_with_empty_body: bool,
+ *  allow_single_line_closure: bool,
+ *  position_after_anonymous_constructs: 'next'|'same',
+ *  position_after_control_structures: 'next'|'same',
+ *  position_after_functions_and_oop_constructs: 'next'|'same'
+ * }
  */
 final class BracesFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface, DeprecatedFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     /**
      * @internal
      */
@@ -152,10 +173,8 @@ class Foo
         return array_keys($this->proxyFixers);
     }
 
-    public function configure(array $configuration): void
+    protected function configurePostNormalisation(): void
     {
-        parent::configure($configuration);
-
         $this->getBracesPositionFixer()->configure([
             'control_structures_opening_brace' => $this->translatePositionOption($this->configuration['position_after_control_structures']),
             'functions_opening_brace' => $this->translatePositionOption($this->configuration['position_after_functions_and_oop_constructs']),
@@ -243,6 +262,9 @@ class Foo
         return $this->controlStructureContinuationPositionFixer;
     }
 
+    /**
+     * @return BracesPositionFixer::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END|BracesPositionFixer::SAME_LINE
+     */
     private function translatePositionOption(string $option): string
     {
         return self::LINE_NEXT === $option

+ 61 - 34
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesPositionFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Basic;
 
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\Fixer\Indentation;
 use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
@@ -30,8 +31,33 @@ use PhpCsFixer\Tokenizer\Token;
 use PhpCsFixer\Tokenizer\Tokens;
 use PhpCsFixer\Tokenizer\TokensAnalyzer;
 
+/**
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  allow_single_line_anonymous_functions?: bool,
+ *  allow_single_line_empty_anonymous_classes?: bool,
+ *  anonymous_classes_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  anonymous_functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  classes_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  control_structures_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line'
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  allow_single_line_anonymous_functions: bool,
+ *  allow_single_line_empty_anonymous_classes: bool,
+ *  anonymous_classes_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  anonymous_functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  classes_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  control_structures_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line'
+ * }
+ */
 final class BracesPositionFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     use Indentation;
 
     /**
@@ -144,6 +170,41 @@ $bar = function () { $result = true;
         return -2;
     }
 
+    /** @protected */
+    public function createConfigurationDefinition(): FixerConfigurationResolverInterface
+    {
+        return new FixerConfigurationResolver([
+            (new FixerOptionBuilder('control_structures_opening_brace', 'The position of the opening brace of control structures‘ body.'))
+                ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
+                ->setDefault(self::SAME_LINE)
+                ->getOption(),
+            (new FixerOptionBuilder('functions_opening_brace', 'The position of the opening brace of functions‘ body.'))
+                ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
+                ->setDefault(self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END)
+                ->getOption(),
+            (new FixerOptionBuilder('anonymous_functions_opening_brace', 'The position of the opening brace of anonymous functions‘ body.'))
+                ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
+                ->setDefault(self::SAME_LINE)
+                ->getOption(),
+            (new FixerOptionBuilder('classes_opening_brace', 'The position of the opening brace of classes‘ body.'))
+                ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
+                ->setDefault(self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END)
+                ->getOption(),
+            (new FixerOptionBuilder('anonymous_classes_opening_brace', 'The position of the opening brace of anonymous classes‘ body.'))
+                ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
+                ->setDefault(self::SAME_LINE)
+                ->getOption(),
+            (new FixerOptionBuilder('allow_single_line_empty_anonymous_classes', 'Allow anonymous classes to have opening and closing braces on the same line.'))
+                ->setAllowedTypes(['bool'])
+                ->setDefault(true)
+                ->getOption(),
+            (new FixerOptionBuilder('allow_single_line_anonymous_functions', 'Allow anonymous functions to have opening and closing braces on the same line.'))
+                ->setAllowedTypes(['bool'])
+                ->setDefault(true)
+                ->getOption(),
+        ]);
+    }
+
     protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
     {
         $classyTokens = Token::getClassyTokenKinds();
@@ -338,40 +399,6 @@ $bar = function () { $result = true;
         }
     }
 
-    protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
-    {
-        return new FixerConfigurationResolver([
-            (new FixerOptionBuilder('control_structures_opening_brace', 'The position of the opening brace of control structures‘ body.'))
-                ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
-                ->setDefault(self::SAME_LINE)
-                ->getOption(),
-            (new FixerOptionBuilder('functions_opening_brace', 'The position of the opening brace of functions‘ body.'))
-                ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
-                ->setDefault(self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END)
-                ->getOption(),
-            (new FixerOptionBuilder('anonymous_functions_opening_brace', 'The position of the opening brace of anonymous functions‘ body.'))
-                ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
-                ->setDefault(self::SAME_LINE)
-                ->getOption(),
-            (new FixerOptionBuilder('classes_opening_brace', 'The position of the opening brace of classes‘ body.'))
-                ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
-                ->setDefault(self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END)
-                ->getOption(),
-            (new FixerOptionBuilder('anonymous_classes_opening_brace', 'The position of the opening brace of anonymous classes‘ body.'))
-                ->setAllowedValues([self::NEXT_LINE_UNLESS_NEWLINE_AT_SIGNATURE_END, self::SAME_LINE])
-                ->setDefault(self::SAME_LINE)
-                ->getOption(),
-            (new FixerOptionBuilder('allow_single_line_empty_anonymous_classes', 'Allow anonymous classes to have opening and closing braces on the same line.'))
-                ->setAllowedTypes(['bool'])
-                ->setDefault(true)
-                ->getOption(),
-            (new FixerOptionBuilder('allow_single_line_anonymous_functions', 'Allow anonymous functions to have opening and closing braces on the same line.'))
-                ->setAllowedTypes(['bool'])
-                ->setDefault(true)
-                ->getOption(),
-        ]);
-    }
-
     private function findParenthesisEnd(Tokens $tokens, int $structureTokenIndex): int
     {
         $nextIndex = $tokens->getNextMeaningfulToken($structureTokenIndex);

+ 33 - 7
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/CurlyBracesPositionFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Basic;
 
 use PhpCsFixer\AbstractProxyFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\Fixer\DeprecatedFixerInterface;
 use PhpCsFixer\Fixer\Indentation;
 use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
@@ -25,9 +26,33 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
 
 /**
  * @deprecated
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  allow_single_line_anonymous_functions?: bool,
+ *  allow_single_line_empty_anonymous_classes?: bool,
+ *  anonymous_classes_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  anonymous_functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  classes_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  control_structures_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line'
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  allow_single_line_anonymous_functions: bool,
+ *  allow_single_line_empty_anonymous_classes: bool,
+ *  anonymous_classes_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  anonymous_functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  classes_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  control_structures_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
+ *  functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line'
+ * }
  */
 final class CurlyBracesPositionFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, DeprecatedFixerInterface, WhitespacesAwareFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     use Indentation;
 
     /**
@@ -61,13 +86,6 @@ final class CurlyBracesPositionFixer extends AbstractProxyFixer implements Confi
         );
     }
 
-    public function configure(array $configuration): void
-    {
-        $this->bracesPositionFixer->configure($configuration);
-
-        parent::configure($configuration);
-    }
-
     /**
      * {@inheritdoc}
      *
@@ -86,6 +104,14 @@ final class CurlyBracesPositionFixer extends AbstractProxyFixer implements Confi
         ];
     }
 
+    /**
+     * @param _AutogeneratedInputConfiguration $configuration
+     */
+    protected function configurePreNormalisation(array $configuration): void
+    {
+        $this->bracesPositionFixer->configure($configuration);
+    }
+
     protected function createProxyFixers(): array
     {
         return [

+ 14 - 1
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoTrailingCommaInSinglelineFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Basic;
 
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\AllowedValueSubset;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@@ -27,8 +28,21 @@ use PhpCsFixer\Tokenizer\Analyzer\AttributeAnalyzer;
 use PhpCsFixer\Tokenizer\CT;
 use PhpCsFixer\Tokenizer\Tokens;
 
+/**
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  elements?: list<'arguments'|'array'|'array_destructuring'|'group_import'>
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  elements: list<'arguments'|'array'|'array_destructuring'|'group_import'>
+ * }
+ */
 final class NoTrailingCommaInSinglelineFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(
@@ -95,7 +109,6 @@ final class NoTrailingCommaInSinglelineFixer extends AbstractFixer implements Co
 
     private function shouldBeCleared(Tokens $tokens, int $openIndex): bool
     {
-        /** @var list<string> $elements */
         $elements = $this->configuration['elements'];
 
         if ($tokens[$openIndex]->isGivenKind(CT::T_ARRAY_SQUARE_BRACE_OPEN)) {

+ 13 - 0
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NonPrintableCharacterFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Basic;
 
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
 use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@@ -30,9 +31,21 @@ use PhpCsFixer\Tokenizer\Tokens;
  * Removes Zero-width space (ZWSP), Non-breaking space (NBSP) and other invisible unicode symbols.
  *
  * @author Ivan Boprzenkov <ivan.borzenkov@gmail.com>
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  use_escape_sequences_in_strings?: bool
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  use_escape_sequences_in_strings: bool
+ * }
  */
 final class NonPrintableCharacterFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     /**
      * @var array<string, array{string, string}>
      */

+ 15 - 0
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NumericLiteralSeparatorFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Basic;
 
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
 use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@@ -35,9 +36,23 @@ use PhpCsFixer\Tokenizer\Tokens;
  *
  * @author Marvin Heilemann <marvin.heilemann+github@googlemail.com>
  * @author Greg Korba <greg@codito.dev>
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  override_existing?: bool,
+ *  strategy?: 'no_separator'|'use_separator'
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  override_existing: bool,
+ *  strategy: 'no_separator'|'use_separator'
+ * }
  */
 final class NumericLiteralSeparatorFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     public const STRATEGY_USE_SEPARATOR = 'use_separator';
     public const STRATEGY_NO_SEPARATOR = 'no_separator';
 

+ 28 - 17
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/PsrAutoloadingFixer.php

@@ -17,6 +17,7 @@ namespace PhpCsFixer\Fixer\Basic;
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\DocBlock\TypeExpression;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
 use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@@ -35,9 +36,21 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
  * @author Bram Gotink <bram@gotink.me>
  * @author Graham Campbell <hello@gjcampbell.co.uk>
  * @author Kuba Werłos <werlos@gmail.com>
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  dir?: null|string
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  dir: null|string
+ * }
  */
 final class PsrAutoloadingFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(
@@ -64,21 +77,6 @@ class InvalidName {}
         );
     }
 
-    public function configure(array $configuration): void
-    {
-        parent::configure($configuration);
-
-        if (null !== $this->configuration['dir']) {
-            $realpath = realpath($this->configuration['dir']);
-
-            if (false === $realpath) {
-                throw new \InvalidArgumentException(sprintf('Failed to resolve configured directory "%s".', $this->configuration['dir']));
-            }
-
-            $this->configuration['dir'] = $realpath;
-        }
-    }
-
     public function isCandidate(Tokens $tokens): bool
     {
         return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds());
@@ -115,7 +113,7 @@ class InvalidName {}
         }
 
         try {
-            $tokens = Tokens::fromCode(sprintf('<?php class %s {}', $file->getBasename('.php')));
+            $tokens = Tokens::fromCode(\sprintf('<?php class %s {}', $file->getBasename('.php')));
 
             if ($tokens[3]->isKeyword() || $tokens[3]->isMagicConstant()) {
                 // name cannot be a class name - detected by PHP 5.x
@@ -130,6 +128,19 @@ class InvalidName {}
         return !Preg::match('{[/\\\](stub|fixture)s?[/\\\]}i', $file->getRealPath());
     }
 
+    protected function configurePostNormalisation(): void
+    {
+        if (null !== $this->configuration['dir']) {
+            $realpath = realpath($this->configuration['dir']);
+
+            if (false === $realpath) {
+                throw new \InvalidArgumentException(\sprintf('Failed to resolve configured directory "%s".', $this->configuration['dir']));
+            }
+
+            $this->configuration['dir'] = $realpath;
+        }
+    }
+
     protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
     {
         return new FixerConfigurationResolver([
@@ -230,7 +241,7 @@ class InvalidName {}
         $namespaceParts = array_reverse(explode('\\', $maxNamespace));
 
         foreach ($namespaceParts as $namespacePart) {
-            $nameCandidate = sprintf('%s_%s', $namespacePart, $name);
+            $nameCandidate = \sprintf('%s_%s', $namespacePart, $name);
 
             if (strtolower($nameCandidate) !== strtolower(substr($currentName, -\strlen($nameCandidate)))) {
                 break;

+ 24 - 13
vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/ConstantCaseFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\Casing;
 
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
 use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@@ -29,9 +30,21 @@ use PhpCsFixer\Tokenizer\Tokens;
  * Fixer for constants case.
  *
  * @author Pol Dellaiera <pol.dellaiera@protonmail.com>
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  case?: 'lower'|'upper'
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  case: 'lower'|'upper'
+ * }
  */
 final class ConstantCaseFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     /**
      * Hold the function that will be used to convert the constants.
      *
@@ -39,19 +52,6 @@ final class ConstantCaseFixer extends AbstractFixer implements ConfigurableFixer
      */
     private $fixFunction;
 
-    public function configure(array $configuration): void
-    {
-        parent::configure($configuration);
-
-        if ('lower' === $this->configuration['case']) {
-            $this->fixFunction = static fn (string $content): string => strtolower($content);
-        }
-
-        if ('upper' === $this->configuration['case']) {
-            $this->fixFunction = static fn (string $content): string => strtoupper($content);
-        }
-    }
-
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(
@@ -68,6 +68,17 @@ final class ConstantCaseFixer extends AbstractFixer implements ConfigurableFixer
         return $tokens->isTokenKindFound(T_STRING);
     }
 
+    protected function configurePostNormalisation(): void
+    {
+        if ('lower' === $this->configuration['case']) {
+            $this->fixFunction = static fn (string $content): string => strtolower($content);
+        }
+
+        if ('upper' === $this->configuration['case']) {
+            $this->fixFunction = static fn (string $content): string => strtoupper($content);
+        }
+    }
+
     protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
     {
         return new FixerConfigurationResolver([

+ 13 - 0
vendor/friendsofphp/php-cs-fixer/src/Fixer/CastNotation/CastSpacesFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\CastNotation;
 
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
 use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
@@ -27,9 +28,21 @@ use PhpCsFixer\Tokenizer\Tokens;
 
 /**
  * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  space?: 'none'|'single'
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  space: 'none'|'single'
+ * }
  */
 final class CastSpacesFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     private const INSIDE_CAST_SPACE_REPLACE_MAP = [
         ' ' => '',
         "\t" => '',

+ 26 - 15
vendor/friendsofphp/php-cs-fixer/src/Fixer/ClassNotation/ClassAttributesSeparationFixer.php

@@ -16,6 +16,7 @@ namespace PhpCsFixer\Fixer\ClassNotation;
 
 use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
 use PhpCsFixer\Fixer\WhitespacesAwareFixerInterface;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
 use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
@@ -45,9 +46,21 @@ use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
  *      elements: non-empty-list<_Element>
  *  }
  * @phpstan-type _Element array{token: Token, type: string, index: int, start?: int, end?: int}
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  elements?: array<string, string>
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  elements: array<string, string>
+ * }
  */
 final class ClassAttributesSeparationFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     /**
      * @internal
      */
@@ -65,17 +78,6 @@ final class ClassAttributesSeparationFixer extends AbstractFixer implements Conf
      */
     private array $classElementTypes = [];
 
-    public function configure(array $configuration): void
-    {
-        parent::configure($configuration);
-
-        $this->classElementTypes = []; // reset previous configuration
-
-        foreach ($this->configuration['elements'] as $elementType => $spacing) {
-            $this->classElementTypes[$elementType] = $spacing;
-        }
-    }
-
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(
@@ -172,6 +174,15 @@ class Sample
         return $tokens->isAnyTokenKindsFound(Token::getClassyTokenKinds());
     }
 
+    protected function configurePostNormalisation(): void
+    {
+        $this->classElementTypes = []; // reset previous configuration
+
+        foreach ($this->configuration['elements'] as $elementType => $spacing) {
+            $this->classElementTypes[$elementType] = $spacing;
+        }
+    }
+
     protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
     {
         foreach ($this->getElementsByClass($tokens) as $class) {
@@ -199,14 +210,14 @@ class Sample
     {
         return new FixerConfigurationResolver([
             (new FixerOptionBuilder('elements', 'Dictionary of `const|method|property|trait_import|case` => `none|one|only_if_meta` values.'))
-                ->setAllowedTypes(['string[]'])
+                ->setAllowedTypes(['array<string, string>'])
                 ->setAllowedValues([static function (array $option): bool {
                     foreach ($option as $type => $spacing) {
                         $supportedTypes = ['const', 'method', 'property', 'trait_import', 'case'];
 
                         if (!\in_array($type, $supportedTypes, true)) {
                             throw new InvalidOptionsException(
-                                sprintf(
+                                \sprintf(
                                     'Unexpected element type, expected any of %s, got "%s".',
                                     Utils::naturalLanguageJoin($supportedTypes),
                                     \gettype($type).'#'.$type
@@ -218,7 +229,7 @@ class Sample
 
                         if (!\in_array($spacing, $supportedSpacings, true)) {
                             throw new InvalidOptionsException(
-                                sprintf(
+                                \sprintf(
                                     'Unexpected spacing for element type "%s", expected any of %s, got "%s".',
                                     $spacing,
                                     Utils::naturalLanguageJoin($supportedSpacings),
@@ -352,7 +363,7 @@ class Sample
             return $tokens[$aboveElementDocCandidateIndex]->isGivenKind([T_DOC_COMMENT, CT::T_ATTRIBUTE_CLOSE]) ? 2 : 1;
         }
 
-        throw new \RuntimeException(sprintf('Unknown spacing "%s".', $spacing));
+        throw new \RuntimeException(\sprintf('Unknown spacing "%s".', $spacing));
     }
 
     /**

部分文件因为文件数量过多而无法显示