Przeglądaj źródła

增加打包工人扫码录入

jason 2 tygodni temu
rodzic
commit
dd0a7b3b93
100 zmienionych plików z 370 dodań i 11863 usunięć
  1. 3 1
      .gitignore
  2. 0 46
      .idea/Gong-Ying-Lian.iml
  3. 0 59
      .idea/php.xml
  4. 96 0
      app/api/controller/Worker.php
  5. 0 3
      app/api/service/StockService.php
  6. 44 0
      app/api/service/WorkerService.php
  7. 1 1
      app/api/service/auth/ApiAuthService.php
  8. 19 0
      app/api/validate/Worker.php
  9. 25 0
      app/common/model/ScanLog.php
  10. 40 0
      app/common/model/Worker.php
  11. 142 338
      composer.lock
  12. 0 7
      vendor/autoload.php
  13. 0 117
      vendor/bin/var-dump-server
  14. 0 5
      vendor/bin/var-dump-server.bat
  15. 0 572
      vendor/composer/ClassLoader.php
  16. 0 350
      vendor/composer/InstalledVersions.php
  17. 0 21
      vendor/composer/LICENSE
  18. 0 21
      vendor/composer/autoload_classmap.php
  19. 0 20
      vendor/composer/autoload_files.php
  20. 0 11
      vendor/composer/autoload_namespaces.php
  21. 0 39
      vendor/composer/autoload_psr4.php
  22. 0 80
      vendor/composer/autoload_real.php
  23. 0 256
      vendor/composer/autoload_static.php
  24. 0 2780
      vendor/composer/installed.json
  25. 0 392
      vendor/composer/installed.php
  26. 0 19
      vendor/composer/pcre/LICENSE
  27. 0 189
      vendor/composer/pcre/README.md
  28. 0 54
      vendor/composer/pcre/composer.json
  29. 0 22
      vendor/composer/pcre/extension.neon
  30. 0 46
      vendor/composer/pcre/src/MatchAllResult.php
  31. 0 46
      vendor/composer/pcre/src/MatchAllStrictGroupsResult.php
  32. 0 48
      vendor/composer/pcre/src/MatchAllWithOffsetsResult.php
  33. 0 39
      vendor/composer/pcre/src/MatchResult.php
  34. 0 39
      vendor/composer/pcre/src/MatchStrictGroupsResult.php
  35. 0 41
      vendor/composer/pcre/src/MatchWithOffsetsResult.php
  36. 0 142
      vendor/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php
  37. 0 70
      vendor/composer/pcre/src/PHPStan/PregMatchFlags.php
  38. 0 65
      vendor/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php
  39. 0 119
      vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php
  40. 0 91
      vendor/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php
  41. 0 112
      vendor/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php
  42. 0 55
      vendor/composer/pcre/src/PcreException.php
  43. 0 430
      vendor/composer/pcre/src/Preg.php
  44. 0 176
      vendor/composer/pcre/src/Regex.php
  45. 0 43
      vendor/composer/pcre/src/ReplaceResult.php
  46. 0 20
      vendor/composer/pcre/src/UnexpectedNullMatchException.php
  47. 0 26
      vendor/composer/platform_check.php
  48. 0 224
      vendor/ergebnis/classy/CHANGELOG.md
  49. 0 16
      vendor/ergebnis/classy/LICENSE.md
  50. 0 118
      vendor/ergebnis/classy/README.md
  51. 0 75
      vendor/ergebnis/classy/composer.json
  52. 0 79
      vendor/ergebnis/classy/src/Construct.php
  53. 0 277
      vendor/ergebnis/classy/src/Constructs.php
  54. 0 42
      vendor/ergebnis/classy/src/Exception/DirectoryDoesNotExist.php
  55. 0 18
      vendor/ergebnis/classy/src/Exception/ExceptionInterface.php
  56. 0 57
      vendor/ergebnis/classy/src/Exception/MultipleDefinitionsFound.php
  57. 0 41
      vendor/ergebnis/classy/src/Exception/ParseError.php
  58. 0 22
      vendor/ergebnis/classy/src/Exception/ShouldNotHappen.php
  59. 0 9
      vendor/ezyang/htmlpurifier/CREDITS
  60. 0 504
      vendor/ezyang/htmlpurifier/LICENSE
  61. 0 29
      vendor/ezyang/htmlpurifier/README.md
  62. 0 1
      vendor/ezyang/htmlpurifier/VERSION
  63. 0 45
      vendor/ezyang/htmlpurifier/composer.json
  64. 0 11
      vendor/ezyang/htmlpurifier/library/HTMLPurifier.auto.php
  65. 0 14
      vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload-legacy.php
  66. 0 25
      vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload.php
  67. 0 4
      vendor/ezyang/htmlpurifier/library/HTMLPurifier.composer.php
  68. 0 25
      vendor/ezyang/htmlpurifier/library/HTMLPurifier.func.php
  69. 0 236
      vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php
  70. 0 30
      vendor/ezyang/htmlpurifier/library/HTMLPurifier.kses.php
  71. 0 11
      vendor/ezyang/htmlpurifier/library/HTMLPurifier.path.php
  72. 0 297
      vendor/ezyang/htmlpurifier/library/HTMLPurifier.php
  73. 0 230
      vendor/ezyang/htmlpurifier/library/HTMLPurifier.safe-includes.php
  74. 0 71
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/Arborize.php
  75. 0 148
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrCollections.php
  76. 0 144
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef.php
  77. 0 140
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS.php
  78. 0 34
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/AlphaValue.php
  79. 0 113
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Background.php
  80. 0 157
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php
  81. 0 56
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Border.php
  82. 0 161
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Color.php
  83. 0 48
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Composite.php
  84. 0 44
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php
  85. 0 77
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Filter.php
  86. 0 176
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Font.php
  87. 0 217
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/FontFamily.php
  88. 0 32
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Ident.php
  89. 0 56
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php
  90. 0 77
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Length.php
  91. 0 112
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/ListStyle.php
  92. 0 71
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Multiple.php
  93. 0 90
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Number.php
  94. 0 54
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Percentage.php
  95. 0 46
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Ratio.php
  96. 0 46
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/TextDecoration.php
  97. 0 77
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/URI.php
  98. 0 44
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Clone.php
  99. 0 73
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Enum.php
  100. 0 48
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Bool.php

+ 3 - 1
.gitignore

@@ -1,3 +1,5 @@
 .env
 runtime/*
-vendor/*
+vendor/*
+/.idea
+/.vscode

+ 0 - 46
.idea/Gong-Ying-Lian.iml

@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="WEB_MODULE" version="4">
-  <component name="NewModuleRootManager">
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/app" isTestSource="false" packagePrefix="app\" />
-      <sourceFolder url="file://$MODULE_DIR$/extend" isTestSource="false" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/ergebnis/classy" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/ezyang/htmlpurifier" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/league/flysystem" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/league/flysystem-cached-adapter" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/league/mime-type-detection" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/maennchen/zipstream-php" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/markbaker/complex" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/markbaker/matrix" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/phpoffice/phpspreadsheet" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/predis/predis" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/cache" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/container" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-client" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-factory" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-message" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/log" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/simple-cache" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/deprecation-contracts" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-foundation" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php83" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/var-dumper" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/topthink/framework" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/topthink/think-annotation" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/topthink/think-captcha" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/topthink/think-container" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/topthink/think-cors" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/topthink/think-filesystem" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/topthink/think-helper" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/topthink/think-multi-app" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/topthink/think-orm" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/topthink/think-template" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/topthink/think-validate" />
-      <excludeFolder url="file://$MODULE_DIR$/vendor/topthink/think-view" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>

+ 0 - 59
.idea/php.xml

@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="MessDetectorOptionsConfiguration">
-    <option name="transferred" value="true" />
-  </component>
-  <component name="PHPCSFixerOptionsConfiguration">
-    <option name="transferred" value="true" />
-  </component>
-  <component name="PHPCodeSnifferOptionsConfiguration">
-    <option name="highlightLevel" value="WARNING" />
-    <option name="transferred" value="true" />
-  </component>
-  <component name="PhpIncludePathManager">
-    <include_path>
-      <path value="$PROJECT_DIR$/vendor/topthink/think-multi-app" />
-      <path value="$PROJECT_DIR$/vendor/topthink/think-orm" />
-      <path value="$PROJECT_DIR$/vendor/topthink/think-annotation" />
-      <path value="$PROJECT_DIR$/vendor/topthink/think-validate" />
-      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-php83" />
-      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-mbstring" />
-      <path value="$PROJECT_DIR$/vendor/symfony/http-foundation" />
-      <path value="$PROJECT_DIR$/vendor/maennchen/zipstream-php" />
-      <path value="$PROJECT_DIR$/vendor/symfony/deprecation-contracts" />
-      <path value="$PROJECT_DIR$/vendor/symfony/var-dumper" />
-      <path value="$PROJECT_DIR$/vendor/league/flysystem" />
-      <path value="$PROJECT_DIR$/vendor/league/flysystem-cached-adapter" />
-      <path value="$PROJECT_DIR$/vendor/league/mime-type-detection" />
-      <path value="$PROJECT_DIR$/vendor/composer" />
-      <path value="$PROJECT_DIR$/vendor/psr/simple-cache" />
-      <path value="$PROJECT_DIR$/vendor/psr/http-client" />
-      <path value="$PROJECT_DIR$/vendor/psr/http-message" />
-      <path value="$PROJECT_DIR$/vendor/psr/http-factory" />
-      <path value="$PROJECT_DIR$/vendor/psr/container" />
-      <path value="$PROJECT_DIR$/vendor/psr/cache" />
-      <path value="$PROJECT_DIR$/vendor/phpoffice/phpspreadsheet" />
-      <path value="$PROJECT_DIR$/vendor/psr/log" />
-      <path value="$PROJECT_DIR$/vendor/ergebnis/classy" />
-      <path value="$PROJECT_DIR$/vendor/ezyang/htmlpurifier" />
-      <path value="$PROJECT_DIR$/vendor/markbaker/matrix" />
-      <path value="$PROJECT_DIR$/vendor/markbaker/complex" />
-      <path value="$PROJECT_DIR$/vendor/topthink/think-view" />
-      <path value="$PROJECT_DIR$/vendor/topthink/think-container" />
-      <path value="$PROJECT_DIR$/vendor/topthink/think-captcha" />
-      <path value="$PROJECT_DIR$/vendor/topthink/think-helper" />
-      <path value="$PROJECT_DIR$/vendor/predis/predis" />
-      <path value="$PROJECT_DIR$/vendor/topthink/think-template" />
-      <path value="$PROJECT_DIR$/vendor/topthink/think-cors" />
-      <path value="$PROJECT_DIR$/vendor/topthink/framework" />
-      <path value="$PROJECT_DIR$/vendor/topthink/think-filesystem" />
-    </include_path>
-  </component>
-  <component name="PhpProjectSharedConfiguration" php_language_level="8.0" />
-  <component name="PhpStanOptionsConfiguration">
-    <option name="transferred" value="true" />
-  </component>
-  <component name="PsalmOptionsConfiguration">
-    <option name="transferred" value="true" />
-  </component>
-</project>

+ 96 - 0
app/api/controller/Worker.php

@@ -0,0 +1,96 @@
+<?php
+
+namespace app\api\controller;
+
+use app\api\service\auth\MysqlAdapter;
+use app\common\model\ScanLog;
+use app\common\model\StockConfig;
+use app\api\service\StockService;
+use app\common\model\StockLog;
+use think\exception\HttpResponseException;
+use think\exception\ValidateException;
+use app\api\validate\Worker as WorkerValidate;
+use think\facade\Cache;
+use think\facade\Db;
+use think\Response;
+
+/**
+ * 打包工人相关接口
+ */
+class Worker extends Base
+{
+
+    /**
+     * 判断权限
+     * @access protected
+     */
+    protected function _initialize()
+    {
+        if(strpos($this->userinfo->role, "4") === false){
+            $this->error(__('没有权限'));
+        }
+    }
+
+    //首页
+    public function index(StockConfig $stockConfig)
+    {
+        $data = [];
+        $data['today'] = ScanLog::where('user_id', $this->userinfo['id'])->whereTime('createtime', 'today')->count();
+        $data['yesterday'] = ScanLog::where('user_id', $this->userinfo['id'])->whereTime('createtime', 'yesterday')->count();
+        $this->success('ok', $data);
+    }
+
+    //添加出入库
+    public function scan(ScanLog $scanLog)
+    {
+        $data = $this->request->post();
+        $result = false;
+        Db::startTrans();
+        try {
+            validate(WorkerValidate::class)->scene('scan')->check($data);
+
+            //$resData = $stockService::setGoOutStock($this->userinfo['id'], $data);
+
+            $result = $scanLog->save([
+                'user_id'    => $this->userinfo['id'],
+                'code'       => $data['code'],
+                'order_status' => 0,
+                'remark' => 0,
+            ]);
+            Db::commit();
+        }catch (ValidateException $e) {
+            return $this->error($e->getError());
+        } catch (\Exception $e) {
+            Db::rollback();
+            $this->error($e->getMessage());
+        }
+        if ($result === false) {
+            $this->error(__('没有新增任何数据'));
+        }
+        $this->success();
+    }
+
+    //扫描记录
+    public function scanlog(ScanLog $scanLog)
+    {
+        $where = [];
+        $limit = $this->request->post('limit/d', 10);  //条数
+        $time = $this->request->post('create_time/s'); //日期
+        if(!empty($type))    $where[] = ['a.type', '=', $type];
+        if(!empty($type_id)) $where[] = ['a.type_id', '=',$type_id];
+        if(!empty($spec_id)) $where[] = ['a.variety_id', '=',$spec_id];
+        if(!empty($time)){
+            $arr = explode(',', $time);
+            $where[] = ['a.createtime', '>=', strtotime($arr[0])];
+            $where[] = ['a.createtime', '<=', strtotime($arr[1])];
+        }
+        $list = ScanLog::where('user_id', $this->userinfo['id'])
+            ->whereTime('createtime', 'today')
+            ->order('id desc')
+            ->paginate($limit);
+        $this->success('ok', $list);
+    }
+
+   
+   
+}

+ 0 - 3
app/api/service/StockService.php

@@ -10,9 +10,6 @@ use app\common\model\StockDetail;
  * 出入库
  */
 class StockService {
-
-   
-      
       //出入库:  id 库存的id
       public static function setGoOutStock(int $uid, array $data): array
       {     

+ 44 - 0
app/api/service/WorkerService.php

@@ -0,0 +1,44 @@
+<?php
+declare(strict_types=1);
+namespace app\api\service;
+
+use app\common\model\ShopList;
+use app\common\model\StockConfig;
+use app\common\model\ProductConfig;
+use app\common\model\StockDetail;
+/**
+ * 打包工接口逻辑
+ */
+class WorkerService {
+      //出入库:  id 库存的id
+      public static function setGoOutStock(int $uid, array $data): array
+      {     
+            $result = [];
+            foreach ($data['variety'] as $item) 
+            {
+                  if(count($item) != 4 || empty(floatval($item['num'])))  throw new \Exception('参数有误!');
+                  $weight = ($data['type']== '1') ? -$item['num']: $item['num'];
+                
+                  //根据品种扣除库存
+                  $stock = StockDetail::setStockConfigNum((int)$item['variety_id'], (string)$weight, $data['type_id']);
+
+                  //记录数据
+                  $result[] = [
+                        'user_id'         => $uid, 
+                        'type_id'         => $data['type_id'],
+                        'type'            => $data['type'],
+                        'variety_id'      => $item['variety_id'],
+                        'change'          => $item['num'],
+                        'after'           => $stock,
+                        'remark'          => $item['remark']
+                  ];
+            }
+            return $result;
+      }
+
+
+   
+
+
+   
+}

+ 1 - 1
app/api/service/auth/ApiAuthService.php

@@ -38,7 +38,7 @@ class ApiAuthService
         $user->save();
 
         Cache::store('redis')->set('user_info_'.$user->id, $user->toArray(), Config::get('app.user_login.keepalive_time'));
-        return ['userinfo'=>$user,'token'=>$token];
+        return ['userinfo'=>$user,'token'=>$token, 'page' => 'worker'];
     }
 
    

+ 19 - 0
app/api/validate/Worker.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\api\validate;
+
+use think\Validate;
+
+class Worker extends Validate
+{
+    protected $rule =   [
+        'code'  => 'require|length:10,20',
+    ];
+    
+    protected $message  =   [
+        'code'      => '长度必须在10-20之间',
+    ];
+
+    protected $scene = [
+        'scan'  =>  ['code'],
+    ]; 
+}

+ 25 - 0
app/common/model/ScanLog.php

@@ -0,0 +1,25 @@
+<?php
+declare(strict_types=1);
+
+namespace app\common\model;
+
+use think\Model;
+
+class ScanLog Extends Model
+{
+    // 自动写入时间戳字段
+    protected $autoWriteTimestamp = true;
+    protected $createTime = 'createtime';
+    protected $updateTime = 'updatetime';
+
+    protected $type = [
+        'createtime'     =>  'timestamp:Y-m-d H:i',
+        'updatetime'     =>  'timestamp:Y-m-d H:i',
+    ];
+
+    // 关联已识别到的单号记录
+    public function worker()
+    {
+        return $this->hasOne(Worker::class,'tracking_number','code')->field('express_company,product_name,labor_cost');
+    }
+}

+ 40 - 0
app/common/model/Worker.php

@@ -0,0 +1,40 @@
+<?php
+declare(strict_types=1);
+
+namespace app\common\model;
+
+use app\common\model\base\BaseModel;
+
+class Worker extends BaseModel
+{
+
+    //客户
+    public function customer()
+    {
+        return $this->hasOne(Customer::class,'id','customer_id');
+    }
+
+
+    public function staff()
+    {
+        return $this->hasOne(User::class,'id','staff_id');
+    }
+
+
+    //获取店铺,规格id
+    public static function getSpecsIdByShopId(string $shop_id): object
+    {
+        return self::where('shop_id', $shop_id)->findOrEmpty();
+    }
+
+
+    //获取店铺客户信息
+    public static function getCustomerByShopId(int $shop_id): object
+    {
+        return self::alias('a')
+            ->where('a.id', $shop_id)
+            ->leftjoin('customer b', 'a.customer_id = b.id')
+            ->field('b.id, b.account_term,b.cycle')
+            ->find();
+    }
+}

Plik diff jest za duży
+ 142 - 338
composer.lock


+ 0 - 7
vendor/autoload.php

@@ -1,7 +0,0 @@
-<?php
-
-// autoload.php @generated by Composer
-
-require_once __DIR__ . '/composer/autoload_real.php';
-
-return ComposerAutoloaderInitda8298e611526d4409180cd4bea64bcc::getLoader();

+ 0 - 117
vendor/bin/var-dump-server

@@ -1,117 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-/**
- * Proxy PHP file generated by Composer
- *
- * This file includes the referenced bin path (../symfony/var-dumper/Resources/bin/var-dump-server)
- * using a stream wrapper to prevent the shebang from being output on PHP<8
- *
- * @generated
- */
-
-namespace Composer;
-
-$GLOBALS['_composer_bin_dir'] = __DIR__;
-$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
-
-if (PHP_VERSION_ID < 80000) {
-    if (!class_exists('Composer\BinProxyWrapper')) {
-        /**
-         * @internal
-         */
-        final class BinProxyWrapper
-        {
-            private $handle;
-            private $position;
-            private $realpath;
-
-            public function stream_open($path, $mode, $options, &$opened_path)
-            {
-                // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
-                $opened_path = substr($path, 17);
-                $this->realpath = realpath($opened_path) ?: $opened_path;
-                $opened_path = $this->realpath;
-                $this->handle = fopen($this->realpath, $mode);
-                $this->position = 0;
-
-                return (bool) $this->handle;
-            }
-
-            public function stream_read($count)
-            {
-                $data = fread($this->handle, $count);
-
-                if ($this->position === 0) {
-                    $data = preg_replace('{^#!.*\r?\n}', '', $data);
-                }
-
-                $this->position += strlen($data);
-
-                return $data;
-            }
-
-            public function stream_cast($castAs)
-            {
-                return $this->handle;
-            }
-
-            public function stream_close()
-            {
-                fclose($this->handle);
-            }
-
-            public function stream_lock($operation)
-            {
-                return $operation ? flock($this->handle, $operation) : true;
-            }
-
-            public function stream_seek($offset, $whence)
-            {
-                if (0 === fseek($this->handle, $offset, $whence)) {
-                    $this->position = ftell($this->handle);
-                    return true;
-                }
-
-                return false;
-            }
-
-            public function stream_tell()
-            {
-                return $this->position;
-            }
-
-            public function stream_eof()
-            {
-                return feof($this->handle);
-            }
-
-            public function stream_stat()
-            {
-                return array();
-            }
-
-            public function stream_set_option($option, $arg1, $arg2)
-            {
-                return true;
-            }
-
-            public function url_stat($path, $flags)
-            {
-                $path = substr($path, 17);
-                if (file_exists($path)) {
-                    return stat($path);
-                }
-
-                return false;
-            }
-        }
-    }
-
-    if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) {
-        include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server');
-        exit(0);
-    }
-}
-
-include __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server';

+ 0 - 5
vendor/bin/var-dump-server.bat

@@ -1,5 +0,0 @@
-@ECHO OFF
-setlocal DISABLEDELAYEDEXPANSION
-SET BIN_TARGET=%~dp0/var-dump-server
-SET COMPOSER_RUNTIME_BIN_DIR=%~dp0
-php "%BIN_TARGET%" %*

+ 0 - 572
vendor/composer/ClassLoader.php

@@ -1,572 +0,0 @@
-<?php
-
-/*
- * This file is part of Composer.
- *
- * (c) Nils Adermann <naderman@naderman.de>
- *     Jordi Boggiano <j.boggiano@seld.be>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Composer\Autoload;
-
-/**
- * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
- *
- *     $loader = new \Composer\Autoload\ClassLoader();
- *
- *     // register classes with namespaces
- *     $loader->add('Symfony\Component', __DIR__.'/component');
- *     $loader->add('Symfony',           __DIR__.'/framework');
- *
- *     // activate the autoloader
- *     $loader->register();
- *
- *     // to enable searching the include path (eg. for PEAR packages)
- *     $loader->setUseIncludePath(true);
- *
- * In this example, if you try to use a class in the Symfony\Component
- * namespace or one of its children (Symfony\Component\Console for instance),
- * the autoloader will first look for the class under the component/
- * directory, and it will then fallback to the framework/ directory if not
- * found before giving up.
- *
- * This class is loosely based on the Symfony UniversalClassLoader.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- * @author Jordi Boggiano <j.boggiano@seld.be>
- * @see    https://www.php-fig.org/psr/psr-0/
- * @see    https://www.php-fig.org/psr/psr-4/
- */
-class ClassLoader
-{
-    /** @var ?string */
-    private $vendorDir;
-
-    // PSR-4
-    /**
-     * @var array[]
-     * @psalm-var array<string, array<string, int>>
-     */
-    private $prefixLengthsPsr4 = array();
-    /**
-     * @var array[]
-     * @psalm-var array<string, array<int, string>>
-     */
-    private $prefixDirsPsr4 = array();
-    /**
-     * @var array[]
-     * @psalm-var array<string, string>
-     */
-    private $fallbackDirsPsr4 = array();
-
-    // PSR-0
-    /**
-     * @var array[]
-     * @psalm-var array<string, array<string, string[]>>
-     */
-    private $prefixesPsr0 = array();
-    /**
-     * @var array[]
-     * @psalm-var array<string, string>
-     */
-    private $fallbackDirsPsr0 = array();
-
-    /** @var bool */
-    private $useIncludePath = false;
-
-    /**
-     * @var string[]
-     * @psalm-var array<string, string>
-     */
-    private $classMap = array();
-
-    /** @var bool */
-    private $classMapAuthoritative = false;
-
-    /**
-     * @var bool[]
-     * @psalm-var array<string, bool>
-     */
-    private $missingClasses = array();
-
-    /** @var ?string */
-    private $apcuPrefix;
-
-    /**
-     * @var self[]
-     */
-    private static $registeredLoaders = array();
-
-    /**
-     * @param ?string $vendorDir
-     */
-    public function __construct($vendorDir = null)
-    {
-        $this->vendorDir = $vendorDir;
-    }
-
-    /**
-     * @return string[]
-     */
-    public function getPrefixes()
-    {
-        if (!empty($this->prefixesPsr0)) {
-            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
-        }
-
-        return array();
-    }
-
-    /**
-     * @return array[]
-     * @psalm-return array<string, array<int, string>>
-     */
-    public function getPrefixesPsr4()
-    {
-        return $this->prefixDirsPsr4;
-    }
-
-    /**
-     * @return array[]
-     * @psalm-return array<string, string>
-     */
-    public function getFallbackDirs()
-    {
-        return $this->fallbackDirsPsr0;
-    }
-
-    /**
-     * @return array[]
-     * @psalm-return array<string, string>
-     */
-    public function getFallbackDirsPsr4()
-    {
-        return $this->fallbackDirsPsr4;
-    }
-
-    /**
-     * @return string[] Array of classname => path
-     * @psalm-return array<string, string>
-     */
-    public function getClassMap()
-    {
-        return $this->classMap;
-    }
-
-    /**
-     * @param string[] $classMap Class to filename map
-     * @psalm-param array<string, string> $classMap
-     *
-     * @return void
-     */
-    public function addClassMap(array $classMap)
-    {
-        if ($this->classMap) {
-            $this->classMap = array_merge($this->classMap, $classMap);
-        } else {
-            $this->classMap = $classMap;
-        }
-    }
-
-    /**
-     * Registers a set of PSR-0 directories for a given prefix, either
-     * appending or prepending to the ones previously set for this prefix.
-     *
-     * @param string          $prefix  The prefix
-     * @param string[]|string $paths   The PSR-0 root directories
-     * @param bool            $prepend Whether to prepend the directories
-     *
-     * @return void
-     */
-    public function add($prefix, $paths, $prepend = false)
-    {
-        if (!$prefix) {
-            if ($prepend) {
-                $this->fallbackDirsPsr0 = array_merge(
-                    (array) $paths,
-                    $this->fallbackDirsPsr0
-                );
-            } else {
-                $this->fallbackDirsPsr0 = array_merge(
-                    $this->fallbackDirsPsr0,
-                    (array) $paths
-                );
-            }
-
-            return;
-        }
-
-        $first = $prefix[0];
-        if (!isset($this->prefixesPsr0[$first][$prefix])) {
-            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
-
-            return;
-        }
-        if ($prepend) {
-            $this->prefixesPsr0[$first][$prefix] = array_merge(
-                (array) $paths,
-                $this->prefixesPsr0[$first][$prefix]
-            );
-        } else {
-            $this->prefixesPsr0[$first][$prefix] = array_merge(
-                $this->prefixesPsr0[$first][$prefix],
-                (array) $paths
-            );
-        }
-    }
-
-    /**
-     * Registers a set of PSR-4 directories for a given namespace, either
-     * appending or prepending to the ones previously set for this namespace.
-     *
-     * @param string          $prefix  The prefix/namespace, with trailing '\\'
-     * @param string[]|string $paths   The PSR-4 base directories
-     * @param bool            $prepend Whether to prepend the directories
-     *
-     * @throws \InvalidArgumentException
-     *
-     * @return void
-     */
-    public function addPsr4($prefix, $paths, $prepend = false)
-    {
-        if (!$prefix) {
-            // Register directories for the root namespace.
-            if ($prepend) {
-                $this->fallbackDirsPsr4 = array_merge(
-                    (array) $paths,
-                    $this->fallbackDirsPsr4
-                );
-            } else {
-                $this->fallbackDirsPsr4 = array_merge(
-                    $this->fallbackDirsPsr4,
-                    (array) $paths
-                );
-            }
-        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
-            // Register directories for a new namespace.
-            $length = strlen($prefix);
-            if ('\\' !== $prefix[$length - 1]) {
-                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
-            }
-            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
-            $this->prefixDirsPsr4[$prefix] = (array) $paths;
-        } elseif ($prepend) {
-            // Prepend directories for an already registered namespace.
-            $this->prefixDirsPsr4[$prefix] = array_merge(
-                (array) $paths,
-                $this->prefixDirsPsr4[$prefix]
-            );
-        } else {
-            // Append directories for an already registered namespace.
-            $this->prefixDirsPsr4[$prefix] = array_merge(
-                $this->prefixDirsPsr4[$prefix],
-                (array) $paths
-            );
-        }
-    }
-
-    /**
-     * Registers a set of PSR-0 directories for a given prefix,
-     * replacing any others previously set for this prefix.
-     *
-     * @param string          $prefix The prefix
-     * @param string[]|string $paths  The PSR-0 base directories
-     *
-     * @return void
-     */
-    public function set($prefix, $paths)
-    {
-        if (!$prefix) {
-            $this->fallbackDirsPsr0 = (array) $paths;
-        } else {
-            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
-        }
-    }
-
-    /**
-     * Registers a set of PSR-4 directories for a given namespace,
-     * replacing any others previously set for this namespace.
-     *
-     * @param string          $prefix The prefix/namespace, with trailing '\\'
-     * @param string[]|string $paths  The PSR-4 base directories
-     *
-     * @throws \InvalidArgumentException
-     *
-     * @return void
-     */
-    public function setPsr4($prefix, $paths)
-    {
-        if (!$prefix) {
-            $this->fallbackDirsPsr4 = (array) $paths;
-        } else {
-            $length = strlen($prefix);
-            if ('\\' !== $prefix[$length - 1]) {
-                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
-            }
-            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
-            $this->prefixDirsPsr4[$prefix] = (array) $paths;
-        }
-    }
-
-    /**
-     * Turns on searching the include path for class files.
-     *
-     * @param bool $useIncludePath
-     *
-     * @return void
-     */
-    public function setUseIncludePath($useIncludePath)
-    {
-        $this->useIncludePath = $useIncludePath;
-    }
-
-    /**
-     * Can be used to check if the autoloader uses the include path to check
-     * for classes.
-     *
-     * @return bool
-     */
-    public function getUseIncludePath()
-    {
-        return $this->useIncludePath;
-    }
-
-    /**
-     * Turns off searching the prefix and fallback directories for classes
-     * that have not been registered with the class map.
-     *
-     * @param bool $classMapAuthoritative
-     *
-     * @return void
-     */
-    public function setClassMapAuthoritative($classMapAuthoritative)
-    {
-        $this->classMapAuthoritative = $classMapAuthoritative;
-    }
-
-    /**
-     * Should class lookup fail if not found in the current class map?
-     *
-     * @return bool
-     */
-    public function isClassMapAuthoritative()
-    {
-        return $this->classMapAuthoritative;
-    }
-
-    /**
-     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
-     *
-     * @param string|null $apcuPrefix
-     *
-     * @return void
-     */
-    public function setApcuPrefix($apcuPrefix)
-    {
-        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
-    }
-
-    /**
-     * The APCu prefix in use, or null if APCu caching is not enabled.
-     *
-     * @return string|null
-     */
-    public function getApcuPrefix()
-    {
-        return $this->apcuPrefix;
-    }
-
-    /**
-     * Registers this instance as an autoloader.
-     *
-     * @param bool $prepend Whether to prepend the autoloader or not
-     *
-     * @return void
-     */
-    public function register($prepend = false)
-    {
-        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
-
-        if (null === $this->vendorDir) {
-            return;
-        }
-
-        if ($prepend) {
-            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
-        } else {
-            unset(self::$registeredLoaders[$this->vendorDir]);
-            self::$registeredLoaders[$this->vendorDir] = $this;
-        }
-    }
-
-    /**
-     * Unregisters this instance as an autoloader.
-     *
-     * @return void
-     */
-    public function unregister()
-    {
-        spl_autoload_unregister(array($this, 'loadClass'));
-
-        if (null !== $this->vendorDir) {
-            unset(self::$registeredLoaders[$this->vendorDir]);
-        }
-    }
-
-    /**
-     * Loads the given class or interface.
-     *
-     * @param  string    $class The name of the class
-     * @return true|null True if loaded, null otherwise
-     */
-    public function loadClass($class)
-    {
-        if ($file = $this->findFile($class)) {
-            includeFile($file);
-
-            return true;
-        }
-
-        return null;
-    }
-
-    /**
-     * Finds the path to the file where the class is defined.
-     *
-     * @param string $class The name of the class
-     *
-     * @return string|false The path if found, false otherwise
-     */
-    public function findFile($class)
-    {
-        // class map lookup
-        if (isset($this->classMap[$class])) {
-            return $this->classMap[$class];
-        }
-        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
-            return false;
-        }
-        if (null !== $this->apcuPrefix) {
-            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
-            if ($hit) {
-                return $file;
-            }
-        }
-
-        $file = $this->findFileWithExtension($class, '.php');
-
-        // Search for Hack files if we are running on HHVM
-        if (false === $file && defined('HHVM_VERSION')) {
-            $file = $this->findFileWithExtension($class, '.hh');
-        }
-
-        if (null !== $this->apcuPrefix) {
-            apcu_add($this->apcuPrefix.$class, $file);
-        }
-
-        if (false === $file) {
-            // Remember that this class does not exist.
-            $this->missingClasses[$class] = true;
-        }
-
-        return $file;
-    }
-
-    /**
-     * Returns the currently registered loaders indexed by their corresponding vendor directories.
-     *
-     * @return self[]
-     */
-    public static function getRegisteredLoaders()
-    {
-        return self::$registeredLoaders;
-    }
-
-    /**
-     * @param  string       $class
-     * @param  string       $ext
-     * @return string|false
-     */
-    private function findFileWithExtension($class, $ext)
-    {
-        // PSR-4 lookup
-        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
-
-        $first = $class[0];
-        if (isset($this->prefixLengthsPsr4[$first])) {
-            $subPath = $class;
-            while (false !== $lastPos = strrpos($subPath, '\\')) {
-                $subPath = substr($subPath, 0, $lastPos);
-                $search = $subPath . '\\';
-                if (isset($this->prefixDirsPsr4[$search])) {
-                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
-                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
-                        if (file_exists($file = $dir . $pathEnd)) {
-                            return $file;
-                        }
-                    }
-                }
-            }
-        }
-
-        // PSR-4 fallback dirs
-        foreach ($this->fallbackDirsPsr4 as $dir) {
-            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
-                return $file;
-            }
-        }
-
-        // PSR-0 lookup
-        if (false !== $pos = strrpos($class, '\\')) {
-            // namespaced class name
-            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
-                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
-        } else {
-            // PEAR-like class name
-            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
-        }
-
-        if (isset($this->prefixesPsr0[$first])) {
-            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
-                if (0 === strpos($class, $prefix)) {
-                    foreach ($dirs as $dir) {
-                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
-                            return $file;
-                        }
-                    }
-                }
-            }
-        }
-
-        // PSR-0 fallback dirs
-        foreach ($this->fallbackDirsPsr0 as $dir) {
-            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
-                return $file;
-            }
-        }
-
-        // PSR-0 include paths.
-        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
-            return $file;
-        }
-
-        return false;
-    }
-}
-
-/**
- * Scope isolated include.
- *
- * Prevents access to $this/self from included files.
- *
- * @param  string $file
- * @return void
- * @private
- */
-function includeFile($file)
-{
-    include $file;
-}

+ 0 - 350
vendor/composer/InstalledVersions.php

@@ -1,350 +0,0 @@
-<?php
-
-/*
- * This file is part of Composer.
- *
- * (c) Nils Adermann <naderman@naderman.de>
- *     Jordi Boggiano <j.boggiano@seld.be>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Composer;
-
-use Composer\Autoload\ClassLoader;
-use Composer\Semver\VersionParser;
-
-/**
- * This class is copied in every Composer installed project and available to all
- *
- * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
- *
- * To require its presence, you can require `composer-runtime-api ^2.0`
- */
-class InstalledVersions
-{
-    /**
-     * @var mixed[]|null
-     * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
-     */
-    private static $installed;
-
-    /**
-     * @var bool|null
-     */
-    private static $canGetVendors;
-
-    /**
-     * @var array[]
-     * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
-     */
-    private static $installedByVendor = array();
-
-    /**
-     * Returns a list of all package names which are present, either by being installed, replaced or provided
-     *
-     * @return string[]
-     * @psalm-return list<string>
-     */
-    public static function getInstalledPackages()
-    {
-        $packages = array();
-        foreach (self::getInstalled() as $installed) {
-            $packages[] = array_keys($installed['versions']);
-        }
-
-        if (1 === \count($packages)) {
-            return $packages[0];
-        }
-
-        return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
-    }
-
-    /**
-     * Returns a list of all package names with a specific type e.g. 'library'
-     *
-     * @param  string   $type
-     * @return string[]
-     * @psalm-return list<string>
-     */
-    public static function getInstalledPackagesByType($type)
-    {
-        $packagesByType = array();
-
-        foreach (self::getInstalled() as $installed) {
-            foreach ($installed['versions'] as $name => $package) {
-                if (isset($package['type']) && $package['type'] === $type) {
-                    $packagesByType[] = $name;
-                }
-            }
-        }
-
-        return $packagesByType;
-    }
-
-    /**
-     * Checks whether the given package is installed
-     *
-     * This also returns true if the package name is provided or replaced by another package
-     *
-     * @param  string $packageName
-     * @param  bool   $includeDevRequirements
-     * @return bool
-     */
-    public static function isInstalled($packageName, $includeDevRequirements = true)
-    {
-        foreach (self::getInstalled() as $installed) {
-            if (isset($installed['versions'][$packageName])) {
-                return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Checks whether the given package satisfies a version constraint
-     *
-     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
-     *
-     *   Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
-     *
-     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality
-     * @param  string        $packageName
-     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
-     * @return bool
-     */
-    public static function satisfies(VersionParser $parser, $packageName, $constraint)
-    {
-        $constraint = $parser->parseConstraints($constraint);
-        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
-
-        return $provided->matches($constraint);
-    }
-
-    /**
-     * Returns a version constraint representing all the range(s) which are installed for a given package
-     *
-     * It is easier to use this via isInstalled() with the $constraint argument if you need to check
-     * whether a given version of a package is installed, and not just whether it exists
-     *
-     * @param  string $packageName
-     * @return string Version constraint usable with composer/semver
-     */
-    public static function getVersionRanges($packageName)
-    {
-        foreach (self::getInstalled() as $installed) {
-            if (!isset($installed['versions'][$packageName])) {
-                continue;
-            }
-
-            $ranges = array();
-            if (isset($installed['versions'][$packageName]['pretty_version'])) {
-                $ranges[] = $installed['versions'][$packageName]['pretty_version'];
-            }
-            if (array_key_exists('aliases', $installed['versions'][$packageName])) {
-                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
-            }
-            if (array_key_exists('replaced', $installed['versions'][$packageName])) {
-                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
-            }
-            if (array_key_exists('provided', $installed['versions'][$packageName])) {
-                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
-            }
-
-            return implode(' || ', $ranges);
-        }
-
-        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
-    }
-
-    /**
-     * @param  string      $packageName
-     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
-     */
-    public static function getVersion($packageName)
-    {
-        foreach (self::getInstalled() as $installed) {
-            if (!isset($installed['versions'][$packageName])) {
-                continue;
-            }
-
-            if (!isset($installed['versions'][$packageName]['version'])) {
-                return null;
-            }
-
-            return $installed['versions'][$packageName]['version'];
-        }
-
-        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
-    }
-
-    /**
-     * @param  string      $packageName
-     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
-     */
-    public static function getPrettyVersion($packageName)
-    {
-        foreach (self::getInstalled() as $installed) {
-            if (!isset($installed['versions'][$packageName])) {
-                continue;
-            }
-
-            if (!isset($installed['versions'][$packageName]['pretty_version'])) {
-                return null;
-            }
-
-            return $installed['versions'][$packageName]['pretty_version'];
-        }
-
-        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
-    }
-
-    /**
-     * @param  string      $packageName
-     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
-     */
-    public static function getReference($packageName)
-    {
-        foreach (self::getInstalled() as $installed) {
-            if (!isset($installed['versions'][$packageName])) {
-                continue;
-            }
-
-            if (!isset($installed['versions'][$packageName]['reference'])) {
-                return null;
-            }
-
-            return $installed['versions'][$packageName]['reference'];
-        }
-
-        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
-    }
-
-    /**
-     * @param  string      $packageName
-     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
-     */
-    public static function getInstallPath($packageName)
-    {
-        foreach (self::getInstalled() as $installed) {
-            if (!isset($installed['versions'][$packageName])) {
-                continue;
-            }
-
-            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
-        }
-
-        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
-    }
-
-    /**
-     * @return array
-     * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
-     */
-    public static function getRootPackage()
-    {
-        $installed = self::getInstalled();
-
-        return $installed[0]['root'];
-    }
-
-    /**
-     * Returns the raw installed.php data for custom implementations
-     *
-     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
-     * @return array[]
-     * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
-     */
-    public static function getRawData()
-    {
-        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
-
-        if (null === self::$installed) {
-            // only require the installed.php file if this file is loaded from its dumped location,
-            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
-            if (substr(__DIR__, -8, 1) !== 'C') {
-                self::$installed = include __DIR__ . '/installed.php';
-            } else {
-                self::$installed = array();
-            }
-        }
-
-        return self::$installed;
-    }
-
-    /**
-     * Returns the raw data of all installed.php which are currently loaded for custom implementations
-     *
-     * @return array[]
-     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
-     */
-    public static function getAllRawData()
-    {
-        return self::getInstalled();
-    }
-
-    /**
-     * Lets you reload the static array from another file
-     *
-     * This is only useful for complex integrations in which a project needs to use
-     * this class but then also needs to execute another project's autoloader in process,
-     * and wants to ensure both projects have access to their version of installed.php.
-     *
-     * A typical case would be PHPUnit, where it would need to make sure it reads all
-     * the data it needs from this class, then call reload() with
-     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
-     * the project in which it runs can then also use this class safely, without
-     * interference between PHPUnit's dependencies and the project's dependencies.
-     *
-     * @param  array[] $data A vendor/composer/installed.php data set
-     * @return void
-     *
-     * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
-     */
-    public static function reload($data)
-    {
-        self::$installed = $data;
-        self::$installedByVendor = array();
-    }
-
-    /**
-     * @return array[]
-     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
-     */
-    private static function getInstalled()
-    {
-        if (null === self::$canGetVendors) {
-            self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
-        }
-
-        $installed = array();
-
-        if (self::$canGetVendors) {
-            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
-                if (isset(self::$installedByVendor[$vendorDir])) {
-                    $installed[] = self::$installedByVendor[$vendorDir];
-                } elseif (is_file($vendorDir.'/composer/installed.php')) {
-                    $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
-                    if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
-                        self::$installed = $installed[count($installed) - 1];
-                    }
-                }
-            }
-        }
-
-        if (null === self::$installed) {
-            // only require the installed.php file if this file is loaded from its dumped location,
-            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
-            if (substr(__DIR__, -8, 1) !== 'C') {
-                self::$installed = require __DIR__ . '/installed.php';
-            } else {
-                self::$installed = array();
-            }
-        }
-        $installed[] = self::$installed;
-
-        return $installed;
-    }
-}

+ 0 - 21
vendor/composer/LICENSE

@@ -1,21 +0,0 @@
-
-Copyright (c) Nils Adermann, Jordi Boggiano
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-

+ 0 - 21
vendor/composer/autoload_classmap.php

@@ -1,21 +0,0 @@
-<?php
-
-// autoload_classmap.php @generated by Composer
-
-$vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname($vendorDir);
-
-return array(
-    'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
-    'DateError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateError.php',
-    'DateException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateException.php',
-    'DateInvalidOperationException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php',
-    'DateInvalidTimeZoneException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php',
-    'DateMalformedIntervalStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php',
-    'DateMalformedPeriodStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php',
-    'DateMalformedStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php',
-    'DateObjectError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateObjectError.php',
-    'DateRangeError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateRangeError.php',
-    'Override' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/Override.php',
-    'SQLite3Exception' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/SQLite3Exception.php',
-);

+ 0 - 20
vendor/composer/autoload_files.php

@@ -1,20 +0,0 @@
-<?php
-
-// autoload_files.php @generated by Composer
-
-$vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname($vendorDir);
-
-return array(
-    '9b552a3cc426e3287cc811caefa3cf53' => $vendorDir . '/topthink/think-helper/src/helper.php',
-    '35fab96057f1bf5e7aba31a8a6d5fdde' => $vendorDir . '/topthink/think-orm/stubs/load_stubs.php',
-    '15ec93fa4ce4b2d53816a1a5f2c514e2' => $vendorDir . '/topthink/think-validate/src/helper.php',
-    '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
-    '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
-    '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
-    '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
-    '662a729f963d39afe703c9d9b7ab4a8c' => $vendorDir . '/symfony/polyfill-php83/bootstrap.php',
-    '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
-    '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
-    '1cfd2761b63b0a29ed23657ea394cb2d' => $vendorDir . '/topthink/think-captcha/src/helper.php',
-);

+ 0 - 11
vendor/composer/autoload_namespaces.php

@@ -1,11 +0,0 @@
-<?php
-
-// autoload_namespaces.php @generated by Composer
-
-$vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname($vendorDir);
-
-return array(
-    'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'),
-    '' => array($baseDir . '/extend'),
-);

+ 0 - 39
vendor/composer/autoload_psr4.php

@@ -1,39 +0,0 @@
-<?php
-
-// autoload_psr4.php @generated by Composer
-
-$vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname($vendorDir);
-
-return array(
-    'think\\view\\driver\\' => array($vendorDir . '/topthink/think-view/src'),
-    'think\\cors\\' => array($vendorDir . '/topthink/think-cors/src'),
-    'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'),
-    'think\\app\\' => array($vendorDir . '/topthink/think-multi-app/src'),
-    'think\\annotation\\' => array($vendorDir . '/topthink/think-annotation/src'),
-    'think\\' => array($vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-container/src', $vendorDir . '/topthink/think-filesystem/src', $vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-orm/src', $vendorDir . '/topthink/think-template/src', $vendorDir . '/topthink/think-validate/src'),
-    'app\\' => array($baseDir . '/app'),
-    'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'),
-    'Symfony\\Polyfill\\Php83\\' => array($vendorDir . '/symfony/polyfill-php83'),
-    'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
-    'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'),
-    'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'),
-    'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
-    'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
-    'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),
-    'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'),
-    'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
-    'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
-    'Predis\\' => array($vendorDir . '/predis/predis/src'),
-    'PhpOffice\\PhpSpreadsheet\\' => array($vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet'),
-    'Matrix\\' => array($vendorDir . '/markbaker/matrix/classes/src'),
-    'League\\MimeTypeDetection\\' => array($vendorDir . '/league/mime-type-detection/src'),
-    'League\\Flysystem\\Cached\\' => array($vendorDir . '/league/flysystem-cached-adapter/src'),
-    'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'),
-    'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
-    'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
-    'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
-    'Ergebnis\\Classy\\' => array($vendorDir . '/ergebnis/classy/src'),
-    'Composer\\Pcre\\' => array($vendorDir . '/composer/pcre/src'),
-    'Complex\\' => array($vendorDir . '/markbaker/complex/classes/src'),
-);

+ 0 - 80
vendor/composer/autoload_real.php

@@ -1,80 +0,0 @@
-<?php
-
-// autoload_real.php @generated by Composer
-
-class ComposerAutoloaderInitda8298e611526d4409180cd4bea64bcc
-{
-    private static $loader;
-
-    public static function loadClassLoader($class)
-    {
-        if ('Composer\Autoload\ClassLoader' === $class) {
-            require __DIR__ . '/ClassLoader.php';
-        }
-    }
-
-    /**
-     * @return \Composer\Autoload\ClassLoader
-     */
-    public static function getLoader()
-    {
-        if (null !== self::$loader) {
-            return self::$loader;
-        }
-
-        require __DIR__ . '/platform_check.php';
-
-        spl_autoload_register(array('ComposerAutoloaderInitda8298e611526d4409180cd4bea64bcc', 'loadClassLoader'), true, true);
-        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
-        spl_autoload_unregister(array('ComposerAutoloaderInitda8298e611526d4409180cd4bea64bcc', 'loadClassLoader'));
-
-        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
-        if ($useStaticLoader) {
-            require __DIR__ . '/autoload_static.php';
-
-            call_user_func(\Composer\Autoload\ComposerStaticInitda8298e611526d4409180cd4bea64bcc::getInitializer($loader));
-        } else {
-            $map = require __DIR__ . '/autoload_namespaces.php';
-            foreach ($map as $namespace => $path) {
-                $loader->set($namespace, $path);
-            }
-
-            $map = require __DIR__ . '/autoload_psr4.php';
-            foreach ($map as $namespace => $path) {
-                $loader->setPsr4($namespace, $path);
-            }
-
-            $classMap = require __DIR__ . '/autoload_classmap.php';
-            if ($classMap) {
-                $loader->addClassMap($classMap);
-            }
-        }
-
-        $loader->register(true);
-
-        if ($useStaticLoader) {
-            $includeFiles = Composer\Autoload\ComposerStaticInitda8298e611526d4409180cd4bea64bcc::$files;
-        } else {
-            $includeFiles = require __DIR__ . '/autoload_files.php';
-        }
-        foreach ($includeFiles as $fileIdentifier => $file) {
-            composerRequireda8298e611526d4409180cd4bea64bcc($fileIdentifier, $file);
-        }
-
-        return $loader;
-    }
-}
-
-/**
- * @param string $fileIdentifier
- * @param string $file
- * @return void
- */
-function composerRequireda8298e611526d4409180cd4bea64bcc($fileIdentifier, $file)
-{
-    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
-        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
-
-        require $file;
-    }
-}

+ 0 - 256
vendor/composer/autoload_static.php

@@ -1,256 +0,0 @@
-<?php
-
-// autoload_static.php @generated by Composer
-
-namespace Composer\Autoload;
-
-class ComposerStaticInitda8298e611526d4409180cd4bea64bcc
-{
-    public static $files = array (
-        '9b552a3cc426e3287cc811caefa3cf53' => __DIR__ . '/..' . '/topthink/think-helper/src/helper.php',
-        '35fab96057f1bf5e7aba31a8a6d5fdde' => __DIR__ . '/..' . '/topthink/think-orm/stubs/load_stubs.php',
-        '15ec93fa4ce4b2d53816a1a5f2c514e2' => __DIR__ . '/..' . '/topthink/think-validate/src/helper.php',
-        '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
-        '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
-        '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
-        '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
-        '662a729f963d39afe703c9d9b7ab4a8c' => __DIR__ . '/..' . '/symfony/polyfill-php83/bootstrap.php',
-        '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
-        '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
-        '1cfd2761b63b0a29ed23657ea394cb2d' => __DIR__ . '/..' . '/topthink/think-captcha/src/helper.php',
-    );
-
-    public static $prefixLengthsPsr4 = array (
-        't' => 
-        array (
-            'think\\view\\driver\\' => 18,
-            'think\\cors\\' => 11,
-            'think\\captcha\\' => 14,
-            'think\\app\\' => 10,
-            'think\\annotation\\' => 17,
-            'think\\' => 6,
-        ),
-        'a' => 
-        array (
-            'app\\' => 4,
-        ),
-        'Z' => 
-        array (
-            'ZipStream\\' => 10,
-        ),
-        'S' => 
-        array (
-            'Symfony\\Polyfill\\Php83\\' => 23,
-            'Symfony\\Polyfill\\Mbstring\\' => 26,
-            'Symfony\\Component\\VarDumper\\' => 28,
-            'Symfony\\Component\\HttpFoundation\\' => 33,
-        ),
-        'P' => 
-        array (
-            'Psr\\SimpleCache\\' => 16,
-            'Psr\\Log\\' => 8,
-            'Psr\\Http\\Message\\' => 17,
-            'Psr\\Http\\Client\\' => 16,
-            'Psr\\Container\\' => 14,
-            'Psr\\Cache\\' => 10,
-            'Predis\\' => 7,
-            'PhpOffice\\PhpSpreadsheet\\' => 25,
-        ),
-        'M' => 
-        array (
-            'Matrix\\' => 7,
-        ),
-        'L' => 
-        array (
-            'League\\MimeTypeDetection\\' => 25,
-            'League\\Flysystem\\Cached\\' => 24,
-            'League\\Flysystem\\' => 17,
-        ),
-        'G' => 
-        array (
-            'GuzzleHttp\\Psr7\\' => 16,
-            'GuzzleHttp\\Promise\\' => 19,
-            'GuzzleHttp\\' => 11,
-        ),
-        'E' => 
-        array (
-            'Ergebnis\\Classy\\' => 16,
-        ),
-        'C' => 
-        array (
-            'Composer\\Pcre\\' => 14,
-            'Complex\\' => 8,
-        ),
-    );
-
-    public static $prefixDirsPsr4 = array (
-        'think\\view\\driver\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/topthink/think-view/src',
-        ),
-        'think\\cors\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/topthink/think-cors/src',
-        ),
-        'think\\captcha\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/topthink/think-captcha/src',
-        ),
-        'think\\app\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/topthink/think-multi-app/src',
-        ),
-        'think\\annotation\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/topthink/think-annotation/src',
-        ),
-        'think\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/topthink/framework/src/think',
-            1 => __DIR__ . '/..' . '/topthink/think-container/src',
-            2 => __DIR__ . '/..' . '/topthink/think-filesystem/src',
-            3 => __DIR__ . '/..' . '/topthink/think-helper/src',
-            4 => __DIR__ . '/..' . '/topthink/think-orm/src',
-            5 => __DIR__ . '/..' . '/topthink/think-template/src',
-            6 => __DIR__ . '/..' . '/topthink/think-validate/src',
-        ),
-        'app\\' => 
-        array (
-            0 => __DIR__ . '/../..' . '/app',
-        ),
-        'ZipStream\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/maennchen/zipstream-php/src',
-        ),
-        'Symfony\\Polyfill\\Php83\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/symfony/polyfill-php83',
-        ),
-        'Symfony\\Polyfill\\Mbstring\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
-        ),
-        'Symfony\\Component\\VarDumper\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/symfony/var-dumper',
-        ),
-        'Symfony\\Component\\HttpFoundation\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/symfony/http-foundation',
-        ),
-        'Psr\\SimpleCache\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/psr/simple-cache/src',
-        ),
-        'Psr\\Log\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/psr/log/src',
-        ),
-        'Psr\\Http\\Message\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/psr/http-factory/src',
-            1 => __DIR__ . '/..' . '/psr/http-message/src',
-        ),
-        'Psr\\Http\\Client\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/psr/http-client/src',
-        ),
-        'Psr\\Container\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/psr/container/src',
-        ),
-        'Psr\\Cache\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/psr/cache/src',
-        ),
-        'Predis\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/predis/predis/src',
-        ),
-        'PhpOffice\\PhpSpreadsheet\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet',
-        ),
-        'Matrix\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/markbaker/matrix/classes/src',
-        ),
-        'League\\MimeTypeDetection\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/league/mime-type-detection/src',
-        ),
-        'League\\Flysystem\\Cached\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/league/flysystem-cached-adapter/src',
-        ),
-        'League\\Flysystem\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/league/flysystem/src',
-        ),
-        'GuzzleHttp\\Psr7\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',
-        ),
-        'GuzzleHttp\\Promise\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/guzzlehttp/promises/src',
-        ),
-        'GuzzleHttp\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src',
-        ),
-        'Ergebnis\\Classy\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/ergebnis/classy/src',
-        ),
-        'Composer\\Pcre\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/composer/pcre/src',
-        ),
-        'Complex\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/markbaker/complex/classes/src',
-        ),
-    );
-
-    public static $prefixesPsr0 = array (
-        'H' => 
-        array (
-            'HTMLPurifier' => 
-            array (
-                0 => __DIR__ . '/..' . '/ezyang/htmlpurifier/library',
-            ),
-        ),
-    );
-
-    public static $fallbackDirsPsr0 = array (
-        0 => __DIR__ . '/../..' . '/extend',
-    );
-
-    public static $classMap = array (
-        'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
-        'DateError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateError.php',
-        'DateException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateException.php',
-        'DateInvalidOperationException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php',
-        'DateInvalidTimeZoneException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php',
-        'DateMalformedIntervalStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php',
-        'DateMalformedPeriodStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php',
-        'DateMalformedStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php',
-        'DateObjectError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateObjectError.php',
-        'DateRangeError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateRangeError.php',
-        'Override' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/Override.php',
-        'SQLite3Exception' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/SQLite3Exception.php',
-    );
-
-    public static function getInitializer(ClassLoader $loader)
-    {
-        return \Closure::bind(function () use ($loader) {
-            $loader->prefixLengthsPsr4 = ComposerStaticInitda8298e611526d4409180cd4bea64bcc::$prefixLengthsPsr4;
-            $loader->prefixDirsPsr4 = ComposerStaticInitda8298e611526d4409180cd4bea64bcc::$prefixDirsPsr4;
-            $loader->prefixesPsr0 = ComposerStaticInitda8298e611526d4409180cd4bea64bcc::$prefixesPsr0;
-            $loader->fallbackDirsPsr0 = ComposerStaticInitda8298e611526d4409180cd4bea64bcc::$fallbackDirsPsr0;
-            $loader->classMap = ComposerStaticInitda8298e611526d4409180cd4bea64bcc::$classMap;
-
-        }, null, ClassLoader::class);
-    }
-}

+ 0 - 2780
vendor/composer/installed.json

@@ -1,2780 +0,0 @@
-{
-    "packages": [
-        {
-            "name": "composer/pcre",
-            "version": "3.3.2",
-            "version_normalized": "3.3.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/pcre.git",
-                "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
-                "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": "^7.4 || ^8.0"
-            },
-            "conflict": {
-                "phpstan/phpstan": "<1.11.10"
-            },
-            "require-dev": {
-                "phpstan/phpstan": "^1.12 || ^2",
-                "phpstan/phpstan-strict-rules": "^1 || ^2",
-                "phpunit/phpunit": "^8 || ^9"
-            },
-            "time": "2024-11-12T16:29:46+00:00",
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-main": "3.x-dev"
-                },
-                "phpstan": {
-                    "includes": [
-                        "extension.neon"
-                    ]
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Composer\\Pcre\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
-            "keywords": [
-                "PCRE",
-                "preg",
-                "regex",
-                "regular expression"
-            ],
-            "support": {
-                "issues": "https://github.com/composer/pcre/issues",
-                "source": "https://github.com/composer/pcre/tree/3.3.2"
-            },
-            "funding": [
-                {
-                    "url": "https://packagist.com",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/composer",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
-                    "type": "tidelift"
-                }
-            ],
-            "install-path": "./pcre"
-        },
-        {
-            "name": "ergebnis/classy",
-            "version": "1.9.0",
-            "version_normalized": "1.9.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ergebnis/classy.git",
-                "reference": "05c3ac7d8d9d337c4cf1d5602a339f57cb2a27ef"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ergebnis/classy/zipball/05c3ac7d8d9d337c4cf1d5602a339f57cb2a27ef",
-                "reference": "05c3ac7d8d9d337c4cf1d5602a339f57cb2a27ef",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
-            },
-            "require-dev": {
-                "ergebnis/composer-normalize": "^2.48.1",
-                "ergebnis/license": "^2.7.0",
-                "ergebnis/php-cs-fixer-config": "^6.54.0",
-                "ergebnis/phpstan-rules": "^2.11.0",
-                "ergebnis/phpunit-slow-test-detector": "^2.20.0",
-                "fakerphp/faker": "^1.24.1",
-                "infection/infection": "~0.26.6",
-                "phpstan/extension-installer": "^1.4.3",
-                "phpstan/phpstan": "^2.1.22",
-                "phpstan/phpstan-deprecation-rules": "^2.0.3",
-                "phpstan/phpstan-phpunit": "^2.0.7",
-                "phpstan/phpstan-strict-rules": "^2.0.6",
-                "phpunit/phpunit": "^9.6.19",
-                "rector/rector": "^2.1.4"
-            },
-            "time": "2025-09-04T10:17:22+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Ergebnis\\Classy\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Andreas Möller",
-                    "email": "am@localheinz.com",
-                    "homepage": "https://localheinz.com"
-                }
-            ],
-            "description": "Provides a finder for classy constructs (classes, enums, interfaces, and traits).",
-            "homepage": "https://github.com/ergebnis/classy",
-            "keywords": [
-                "classes",
-                "classy",
-                "constructs",
-                "finder",
-                "interfaces",
-                "traits"
-            ],
-            "support": {
-                "issues": "https://github.com/ergebnis/classy/issues",
-                "source": "https://github.com/ergebnis/classy"
-            },
-            "install-path": "../ergebnis/classy"
-        },
-        {
-            "name": "ezyang/htmlpurifier",
-            "version": "v4.18.0",
-            "version_normalized": "4.18.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ezyang/htmlpurifier.git",
-                "reference": "cb56001e54359df7ae76dc522d08845dc741621b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b",
-                "reference": "cb56001e54359df7ae76dc522d08845dc741621b",
-                "shasum": ""
-            },
-            "require": {
-                "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
-            },
-            "require-dev": {
-                "cerdic/css-tidy": "^1.7 || ^2.0",
-                "simpletest/simpletest": "dev-master"
-            },
-            "suggest": {
-                "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.",
-                "ext-bcmath": "Used for unit conversion and imagecrash protection",
-                "ext-iconv": "Converts text to and from non-UTF-8 encodings",
-                "ext-tidy": "Used for pretty-printing HTML"
-            },
-            "time": "2024-11-01T03:51:45+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "files": [
-                    "library/HTMLPurifier.composer.php"
-                ],
-                "psr-0": {
-                    "HTMLPurifier": "library/"
-                },
-                "exclude-from-classmap": [
-                    "/library/HTMLPurifier/Language/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "LGPL-2.1-or-later"
-            ],
-            "authors": [
-                {
-                    "name": "Edward Z. Yang",
-                    "email": "admin@htmlpurifier.org",
-                    "homepage": "http://ezyang.com"
-                }
-            ],
-            "description": "Standards compliant HTML filter written in PHP",
-            "homepage": "http://htmlpurifier.org/",
-            "keywords": [
-                "html"
-            ],
-            "support": {
-                "issues": "https://github.com/ezyang/htmlpurifier/issues",
-                "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0"
-            },
-            "install-path": "../ezyang/htmlpurifier"
-        },
-        {
-            "name": "guzzlehttp/guzzle",
-            "version": "7.9.2",
-            "version_normalized": "7.9.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "d281ed313b989f213357e3be1a179f02196ac99b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b",
-                "reference": "d281ed313b989f213357e3be1a179f02196ac99b",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "ext-json": "*",
-                "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
-                "guzzlehttp/psr7": "^2.7.0",
-                "php": "^7.2.5 || ^8.0",
-                "psr/http-client": "^1.0",
-                "symfony/deprecation-contracts": "^2.2 || ^3.0"
-            },
-            "provide": {
-                "psr/http-client-implementation": "1.0"
-            },
-            "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.8.2",
-                "ext-curl": "*",
-                "guzzle/client-integration-tests": "3.0.2",
-                "php-http/message-factory": "^1.1",
-                "phpunit/phpunit": "^8.5.39 || ^9.6.20",
-                "psr/log": "^1.1 || ^2.0 || ^3.0"
-            },
-            "suggest": {
-                "ext-curl": "Required for CURL handler support",
-                "ext-intl": "Required for Internationalized Domain Name (IDN) support",
-                "psr/log": "Required for using the Log middleware"
-            },
-            "time": "2024-07-24T11:22:20+00:00",
-            "type": "library",
-            "extra": {
-                "bamarni-bin": {
-                    "bin-links": true,
-                    "forward-command": false
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "files": [
-                    "src/functions_include.php"
-                ],
-                "psr-4": {
-                    "GuzzleHttp\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Graham Campbell",
-                    "email": "hello@gjcampbell.co.uk",
-                    "homepage": "https://github.com/GrahamCampbell"
-                },
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "Jeremy Lindblom",
-                    "email": "jeremeamia@gmail.com",
-                    "homepage": "https://github.com/jeremeamia"
-                },
-                {
-                    "name": "George Mponos",
-                    "email": "gmponos@gmail.com",
-                    "homepage": "https://github.com/gmponos"
-                },
-                {
-                    "name": "Tobias Nyholm",
-                    "email": "tobias.nyholm@gmail.com",
-                    "homepage": "https://github.com/Nyholm"
-                },
-                {
-                    "name": "Márk Sági-Kazár",
-                    "email": "mark.sagikazar@gmail.com",
-                    "homepage": "https://github.com/sagikazarmark"
-                },
-                {
-                    "name": "Tobias Schultze",
-                    "email": "webmaster@tubo-world.de",
-                    "homepage": "https://github.com/Tobion"
-                }
-            ],
-            "description": "Guzzle is a PHP HTTP client library",
-            "keywords": [
-                "client",
-                "curl",
-                "framework",
-                "http",
-                "http client",
-                "psr-18",
-                "psr-7",
-                "rest",
-                "web service"
-            ],
-            "support": {
-                "issues": "https://github.com/guzzle/guzzle/issues",
-                "source": "https://github.com/guzzle/guzzle/tree/7.9.2"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/GrahamCampbell",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/Nyholm",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
-                    "type": "tidelift"
-                }
-            ],
-            "install-path": "../guzzlehttp/guzzle"
-        },
-        {
-            "name": "guzzlehttp/promises",
-            "version": "2.3.0",
-            "version_normalized": "2.3.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/promises.git",
-                "reference": "481557b130ef3790cf82b713667b43030dc9c957"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
-                "reference": "481557b130ef3790cf82b713667b43030dc9c957",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": "^7.2.5 || ^8.0"
-            },
-            "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.8.2",
-                "phpunit/phpunit": "^8.5.44 || ^9.6.25"
-            },
-            "time": "2025-08-22T14:34:08+00:00",
-            "type": "library",
-            "extra": {
-                "bamarni-bin": {
-                    "bin-links": true,
-                    "forward-command": false
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "GuzzleHttp\\Promise\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Graham Campbell",
-                    "email": "hello@gjcampbell.co.uk",
-                    "homepage": "https://github.com/GrahamCampbell"
-                },
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "Tobias Nyholm",
-                    "email": "tobias.nyholm@gmail.com",
-                    "homepage": "https://github.com/Nyholm"
-                },
-                {
-                    "name": "Tobias Schultze",
-                    "email": "webmaster@tubo-world.de",
-                    "homepage": "https://github.com/Tobion"
-                }
-            ],
-            "description": "Guzzle promises library",
-            "keywords": [
-                "promise"
-            ],
-            "support": {
-                "issues": "https://github.com/guzzle/promises/issues",
-                "source": "https://github.com/guzzle/promises/tree/2.3.0"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/GrahamCampbell",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/Nyholm",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
-                    "type": "tidelift"
-                }
-            ],
-            "install-path": "../guzzlehttp/promises"
-        },
-        {
-            "name": "guzzlehttp/psr7",
-            "version": "2.8.0",
-            "version_normalized": "2.8.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/psr7.git",
-                "reference": "21dc724a0583619cd1652f673303492272778051"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
-                "reference": "21dc724a0583619cd1652f673303492272778051",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": "^7.2.5 || ^8.0",
-                "psr/http-factory": "^1.0",
-                "psr/http-message": "^1.1 || ^2.0",
-                "ralouphie/getallheaders": "^3.0"
-            },
-            "provide": {
-                "psr/http-factory-implementation": "1.0",
-                "psr/http-message-implementation": "1.0"
-            },
-            "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.8.2",
-                "http-interop/http-factory-tests": "0.9.0",
-                "phpunit/phpunit": "^8.5.44 || ^9.6.25"
-            },
-            "suggest": {
-                "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
-            },
-            "time": "2025-08-23T21:21:41+00:00",
-            "type": "library",
-            "extra": {
-                "bamarni-bin": {
-                    "bin-links": true,
-                    "forward-command": false
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "GuzzleHttp\\Psr7\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Graham Campbell",
-                    "email": "hello@gjcampbell.co.uk",
-                    "homepage": "https://github.com/GrahamCampbell"
-                },
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "George Mponos",
-                    "email": "gmponos@gmail.com",
-                    "homepage": "https://github.com/gmponos"
-                },
-                {
-                    "name": "Tobias Nyholm",
-                    "email": "tobias.nyholm@gmail.com",
-                    "homepage": "https://github.com/Nyholm"
-                },
-                {
-                    "name": "Márk Sági-Kazár",
-                    "email": "mark.sagikazar@gmail.com",
-                    "homepage": "https://github.com/sagikazarmark"
-                },
-                {
-                    "name": "Tobias Schultze",
-                    "email": "webmaster@tubo-world.de",
-                    "homepage": "https://github.com/Tobion"
-                },
-                {
-                    "name": "Márk Sági-Kazár",
-                    "email": "mark.sagikazar@gmail.com",
-                    "homepage": "https://sagikazarmark.hu"
-                }
-            ],
-            "description": "PSR-7 message implementation that also provides common utility methods",
-            "keywords": [
-                "http",
-                "message",
-                "psr-7",
-                "request",
-                "response",
-                "stream",
-                "uri",
-                "url"
-            ],
-            "support": {
-                "issues": "https://github.com/guzzle/psr7/issues",
-                "source": "https://github.com/guzzle/psr7/tree/2.8.0"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/GrahamCampbell",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/Nyholm",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
-                    "type": "tidelift"
-                }
-            ],
-            "install-path": "../guzzlehttp/psr7"
-        },
-        {
-            "name": "league/flysystem",
-            "version": "1.1.10",
-            "version_normalized": "1.1.10.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/thephpleague/flysystem.git",
-                "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1",
-                "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "ext-fileinfo": "*",
-                "league/mime-type-detection": "^1.3",
-                "php": "^7.2.5 || ^8.0"
-            },
-            "conflict": {
-                "league/flysystem-sftp": "<1.0.6"
-            },
-            "require-dev": {
-                "phpspec/prophecy": "^1.11.1",
-                "phpunit/phpunit": "^8.5.8"
-            },
-            "suggest": {
-                "ext-ftp": "Allows you to use FTP server storage",
-                "ext-openssl": "Allows you to use FTPS server storage",
-                "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
-                "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
-                "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
-                "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
-                "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
-                "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
-                "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
-                "league/flysystem-webdav": "Allows you to use WebDAV storage",
-                "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
-                "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
-                "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
-            },
-            "time": "2022-10-04T09:16:37+00:00",
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1-dev"
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "League\\Flysystem\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Frank de Jonge",
-                    "email": "info@frenky.net"
-                }
-            ],
-            "description": "Filesystem abstraction: Many filesystems, one API.",
-            "keywords": [
-                "Cloud Files",
-                "WebDAV",
-                "abstraction",
-                "aws",
-                "cloud",
-                "copy.com",
-                "dropbox",
-                "file systems",
-                "files",
-                "filesystem",
-                "filesystems",
-                "ftp",
-                "rackspace",
-                "remote",
-                "s3",
-                "sftp",
-                "storage"
-            ],
-            "support": {
-                "issues": "https://github.com/thephpleague/flysystem/issues",
-                "source": "https://github.com/thephpleague/flysystem/tree/1.1.10"
-            },
-            "funding": [
-                {
-                    "url": "https://offset.earth/frankdejonge",
-                    "type": "other"
-                }
-            ],
-            "install-path": "../league/flysystem"
-        },
-        {
-            "name": "league/flysystem-cached-adapter",
-            "version": "1.1.0",
-            "version_normalized": "1.1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/thephpleague/flysystem-cached-adapter.git",
-                "reference": "d1925efb2207ac4be3ad0c40b8277175f99ffaff"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/flysystem-cached-adapter/zipball/d1925efb2207ac4be3ad0c40b8277175f99ffaff",
-                "reference": "d1925efb2207ac4be3ad0c40b8277175f99ffaff",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "league/flysystem": "~1.0",
-                "psr/cache": "^1.0.0"
-            },
-            "require-dev": {
-                "mockery/mockery": "~0.9",
-                "phpspec/phpspec": "^3.4",
-                "phpunit/phpunit": "^5.7",
-                "predis/predis": "~1.0",
-                "tedivm/stash": "~0.12"
-            },
-            "suggest": {
-                "ext-phpredis": "Pure C implemented extension for PHP"
-            },
-            "time": "2020-07-25T15:56:04+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "League\\Flysystem\\Cached\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "frankdejonge",
-                    "email": "info@frenky.net"
-                }
-            ],
-            "description": "An adapter decorator to enable meta-data caching.",
-            "support": {
-                "issues": "https://github.com/thephpleague/flysystem-cached-adapter/issues",
-                "source": "https://github.com/thephpleague/flysystem-cached-adapter/tree/master"
-            },
-            "install-path": "../league/flysystem-cached-adapter"
-        },
-        {
-            "name": "league/mime-type-detection",
-            "version": "1.15.0",
-            "version_normalized": "1.15.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/thephpleague/mime-type-detection.git",
-                "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
-                "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "ext-fileinfo": "*",
-                "php": "^7.4 || ^8.0"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^3.2",
-                "phpstan/phpstan": "^0.12.68",
-                "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0"
-            },
-            "time": "2024-01-28T23:22:08+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "League\\MimeTypeDetection\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Frank de Jonge",
-                    "email": "info@frankdejonge.nl"
-                }
-            ],
-            "description": "Mime-type detection for Flysystem",
-            "support": {
-                "issues": "https://github.com/thephpleague/mime-type-detection/issues",
-                "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/frankdejonge",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/league/flysystem",
-                    "type": "tidelift"
-                }
-            ],
-            "install-path": "../league/mime-type-detection"
-        },
-        {
-            "name": "maennchen/zipstream-php",
-            "version": "3.1.1",
-            "version_normalized": "3.1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/maennchen/ZipStream-PHP.git",
-                "reference": "6187e9cc4493da94b9b63eb2315821552015fca9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/6187e9cc4493da94b9b63eb2315821552015fca9",
-                "reference": "6187e9cc4493da94b9b63eb2315821552015fca9",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "ext-mbstring": "*",
-                "ext-zlib": "*",
-                "php-64bit": "^8.1"
-            },
-            "require-dev": {
-                "ext-zip": "*",
-                "friendsofphp/php-cs-fixer": "^3.16",
-                "mikey179/vfsstream": "^1.6",
-                "php-coveralls/php-coveralls": "^2.5",
-                "phpunit/phpunit": "^10.0",
-                "vimeo/psalm": "^5.0"
-            },
-            "suggest": {
-                "guzzlehttp/psr7": "^2.4",
-                "psr/http-message": "^2.0"
-            },
-            "time": "2024-10-10T12:33:01+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "ZipStream\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Paul Duncan",
-                    "email": "pabs@pablotron.org"
-                },
-                {
-                    "name": "Jonatan Männchen",
-                    "email": "jonatan@maennchen.ch"
-                },
-                {
-                    "name": "Jesse Donat",
-                    "email": "donatj@gmail.com"
-                },
-                {
-                    "name": "András Kolesár",
-                    "email": "kolesar@kolesar.hu"
-                }
-            ],
-            "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.",
-            "keywords": [
-                "stream",
-                "zip"
-            ],
-            "support": {
-                "issues": "https://github.com/maennchen/ZipStream-PHP/issues",
-                "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.1"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/maennchen",
-                    "type": "github"
-                }
-            ],
-            "install-path": "../maennchen/zipstream-php"
-        },
-        {
-            "name": "markbaker/complex",
-            "version": "3.0.2",
-            "version_normalized": "3.0.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/MarkBaker/PHPComplex.git",
-                "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9",
-                "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.2 || ^8.0"
-            },
-            "require-dev": {
-                "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
-                "phpcompatibility/php-compatibility": "^9.3",
-                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
-                "squizlabs/php_codesniffer": "^3.7"
-            },
-            "time": "2022-12-06T16:21:08+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Complex\\": "classes/src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mark Baker",
-                    "email": "mark@lange.demon.co.uk"
-                }
-            ],
-            "description": "PHP Class for working with complex numbers",
-            "homepage": "https://github.com/MarkBaker/PHPComplex",
-            "keywords": [
-                "complex",
-                "mathematics"
-            ],
-            "support": {
-                "issues": "https://github.com/MarkBaker/PHPComplex/issues",
-                "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2"
-            },
-            "install-path": "../markbaker/complex"
-        },
-        {
-            "name": "markbaker/matrix",
-            "version": "3.0.1",
-            "version_normalized": "3.0.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/MarkBaker/PHPMatrix.git",
-                "reference": "728434227fe21be27ff6d86621a1b13107a2562c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c",
-                "reference": "728434227fe21be27ff6d86621a1b13107a2562c",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1 || ^8.0"
-            },
-            "require-dev": {
-                "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
-                "phpcompatibility/php-compatibility": "^9.3",
-                "phpdocumentor/phpdocumentor": "2.*",
-                "phploc/phploc": "^4.0",
-                "phpmd/phpmd": "2.*",
-                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
-                "sebastian/phpcpd": "^4.0",
-                "squizlabs/php_codesniffer": "^3.7"
-            },
-            "time": "2022-12-02T22:17:43+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Matrix\\": "classes/src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mark Baker",
-                    "email": "mark@demon-angel.eu"
-                }
-            ],
-            "description": "PHP Class for working with matrices",
-            "homepage": "https://github.com/MarkBaker/PHPMatrix",
-            "keywords": [
-                "mathematics",
-                "matrix",
-                "vector"
-            ],
-            "support": {
-                "issues": "https://github.com/MarkBaker/PHPMatrix/issues",
-                "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1"
-            },
-            "install-path": "../markbaker/matrix"
-        },
-        {
-            "name": "phpoffice/phpspreadsheet",
-            "version": "1.30.0",
-            "version_normalized": "1.30.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
-                "reference": "2f39286e0136673778b7a142b3f0d141e43d1714"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/2f39286e0136673778b7a142b3f0d141e43d1714",
-                "reference": "2f39286e0136673778b7a142b3f0d141e43d1714",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "composer/pcre": "^1||^2||^3",
-                "ext-ctype": "*",
-                "ext-dom": "*",
-                "ext-fileinfo": "*",
-                "ext-gd": "*",
-                "ext-iconv": "*",
-                "ext-libxml": "*",
-                "ext-mbstring": "*",
-                "ext-simplexml": "*",
-                "ext-xml": "*",
-                "ext-xmlreader": "*",
-                "ext-xmlwriter": "*",
-                "ext-zip": "*",
-                "ext-zlib": "*",
-                "ezyang/htmlpurifier": "^4.15",
-                "maennchen/zipstream-php": "^2.1 || ^3.0",
-                "markbaker/complex": "^3.0",
-                "markbaker/matrix": "^3.0",
-                "php": "^7.4 || ^8.0",
-                "psr/http-client": "^1.0",
-                "psr/http-factory": "^1.0",
-                "psr/simple-cache": "^1.0 || ^2.0 || ^3.0"
-            },
-            "require-dev": {
-                "dealerdirect/phpcodesniffer-composer-installer": "dev-main",
-                "dompdf/dompdf": "^1.0 || ^2.0 || ^3.0",
-                "friendsofphp/php-cs-fixer": "^3.2",
-                "mitoteam/jpgraph": "^10.3",
-                "mpdf/mpdf": "^8.1.1",
-                "phpcompatibility/php-compatibility": "^9.3",
-                "phpstan/phpstan": "^1.1",
-                "phpstan/phpstan-phpunit": "^1.0",
-                "phpunit/phpunit": "^8.5 || ^9.0",
-                "squizlabs/php_codesniffer": "^3.7",
-                "tecnickcom/tcpdf": "^6.5"
-            },
-            "suggest": {
-                "dompdf/dompdf": "Option for rendering PDF with PDF Writer",
-                "ext-intl": "PHP Internationalization Functions",
-                "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers",
-                "mpdf/mpdf": "Option for rendering PDF with PDF Writer",
-                "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer"
-            },
-            "time": "2025-08-10T06:28:02+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Maarten Balliauw",
-                    "homepage": "https://blog.maartenballiauw.be"
-                },
-                {
-                    "name": "Mark Baker",
-                    "homepage": "https://markbakeruk.net"
-                },
-                {
-                    "name": "Franck Lefevre",
-                    "homepage": "https://rootslabs.net"
-                },
-                {
-                    "name": "Erik Tilt"
-                },
-                {
-                    "name": "Adrien Crivelli"
-                }
-            ],
-            "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
-            "homepage": "https://github.com/PHPOffice/PhpSpreadsheet",
-            "keywords": [
-                "OpenXML",
-                "excel",
-                "gnumeric",
-                "ods",
-                "php",
-                "spreadsheet",
-                "xls",
-                "xlsx"
-            ],
-            "support": {
-                "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
-                "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.30.0"
-            },
-            "install-path": "../phpoffice/phpspreadsheet"
-        },
-        {
-            "name": "predis/predis",
-            "version": "v3.0.1",
-            "version_normalized": "3.0.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/predis/predis.git",
-                "reference": "34fb0a7da0330df1bab4280fcac4afdeeccc3edf"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/predis/predis/zipball/34fb0a7da0330df1bab4280fcac4afdeeccc3edf",
-                "reference": "34fb0a7da0330df1bab4280fcac4afdeeccc3edf",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": "^7.2 || ^8.0",
-                "psr/http-message": "^1.0|^2.0"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^3.3",
-                "phpstan/phpstan": "^1.9",
-                "phpunit/phpcov": "^6.0 || ^8.0",
-                "phpunit/phpunit": "^8.0 || ~9.4.4"
-            },
-            "suggest": {
-                "ext-relay": "Faster connection with in-memory caching (>=0.6.2)"
-            },
-            "time": "2025-05-16T18:30:32+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Predis\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Till Krüss",
-                    "homepage": "https://till.im",
-                    "role": "Maintainer"
-                }
-            ],
-            "description": "A flexible and feature-complete Redis/Valkey client for PHP.",
-            "homepage": "http://github.com/predis/predis",
-            "keywords": [
-                "nosql",
-                "predis",
-                "redis"
-            ],
-            "support": {
-                "issues": "https://github.com/predis/predis/issues",
-                "source": "https://github.com/predis/predis/tree/v3.0.1"
-            },
-            "funding": [
-                {
-                    "url": "https://github.com/sponsors/tillkruss",
-                    "type": "github"
-                }
-            ],
-            "install-path": "../predis/predis"
-        },
-        {
-            "name": "psr/cache",
-            "version": "1.0.1",
-            "version_normalized": "1.0.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/cache.git",
-                "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
-                "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "time": "2016-08-06T20:24:11+00:00",
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Cache\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for caching libraries",
-            "keywords": [
-                "cache",
-                "psr",
-                "psr-6"
-            ],
-            "support": {
-                "source": "https://github.com/php-fig/cache/tree/master"
-            },
-            "install-path": "../psr/cache"
-        },
-        {
-            "name": "psr/container",
-            "version": "2.0.2",
-            "version_normalized": "2.0.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/container.git",
-                "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
-                "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.4.0"
-            },
-            "time": "2021-11-05T16:47:00+00:00",
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Container\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
-                }
-            ],
-            "description": "Common Container Interface (PHP FIG PSR-11)",
-            "homepage": "https://github.com/php-fig/container",
-            "keywords": [
-                "PSR-11",
-                "container",
-                "container-interface",
-                "container-interop",
-                "psr"
-            ],
-            "support": {
-                "issues": "https://github.com/php-fig/container/issues",
-                "source": "https://github.com/php-fig/container/tree/2.0.2"
-            },
-            "install-path": "../psr/container"
-        },
-        {
-            "name": "psr/http-client",
-            "version": "1.0.3",
-            "version_normalized": "1.0.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/http-client.git",
-                "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
-                "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0 || ^8.0",
-                "psr/http-message": "^1.0 || ^2.0"
-            },
-            "time": "2023-09-23T14:17:50+00:00",
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Http\\Client\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for HTTP clients",
-            "homepage": "https://github.com/php-fig/http-client",
-            "keywords": [
-                "http",
-                "http-client",
-                "psr",
-                "psr-18"
-            ],
-            "support": {
-                "source": "https://github.com/php-fig/http-client"
-            },
-            "install-path": "../psr/http-client"
-        },
-        {
-            "name": "psr/http-factory",
-            "version": "1.0.2",
-            "version_normalized": "1.0.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/http-factory.git",
-                "reference": "e616d01114759c4c489f93b099585439f795fe35"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
-                "reference": "e616d01114759c4c489f93b099585439f795fe35",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": ">=7.0.0",
-                "psr/http-message": "^1.0 || ^2.0"
-            },
-            "time": "2023-04-10T20:10:41+00:00",
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interfaces for PSR-7 HTTP message factories",
-            "keywords": [
-                "factory",
-                "http",
-                "message",
-                "psr",
-                "psr-17",
-                "psr-7",
-                "request",
-                "response"
-            ],
-            "support": {
-                "source": "https://github.com/php-fig/http-factory/tree/1.0.2"
-            },
-            "install-path": "../psr/http-factory"
-        },
-        {
-            "name": "psr/http-message",
-            "version": "1.1",
-            "version_normalized": "1.1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/http-message.git",
-                "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
-                "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.2 || ^8.0"
-            },
-            "time": "2023-04-04T09:50:52+00:00",
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.1.x-dev"
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for HTTP messages",
-            "homepage": "https://github.com/php-fig/http-message",
-            "keywords": [
-                "http",
-                "http-message",
-                "psr",
-                "psr-7",
-                "request",
-                "response"
-            ],
-            "support": {
-                "source": "https://github.com/php-fig/http-message/tree/1.1"
-            },
-            "install-path": "../psr/http-message"
-        },
-        {
-            "name": "psr/log",
-            "version": "3.0.1",
-            "version_normalized": "3.0.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "79dff0b268932c640297f5208d6298f71855c03e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e",
-                "reference": "79dff0b268932c640297f5208d6298f71855c03e",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": ">=8.0.0"
-            },
-            "time": "2024-08-21T13:31:24+00:00",
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.x-dev"
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Log\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
-            "keywords": [
-                "log",
-                "psr",
-                "psr-3"
-            ],
-            "support": {
-                "source": "https://github.com/php-fig/log/tree/3.0.1"
-            },
-            "install-path": "../psr/log"
-        },
-        {
-            "name": "psr/simple-cache",
-            "version": "3.0.0",
-            "version_normalized": "3.0.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/simple-cache.git",
-                "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865",
-                "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.0"
-            },
-            "time": "2021-10-29T13:26:27+00:00",
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0.x-dev"
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Psr\\SimpleCache\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interfaces for simple caching",
-            "keywords": [
-                "cache",
-                "caching",
-                "psr",
-                "psr-16",
-                "simple-cache"
-            ],
-            "support": {
-                "source": "https://github.com/php-fig/simple-cache/tree/3.0.0"
-            },
-            "install-path": "../psr/simple-cache"
-        },
-        {
-            "name": "ralouphie/getallheaders",
-            "version": "3.0.3",
-            "version_normalized": "3.0.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ralouphie/getallheaders.git",
-                "reference": "120b605dfeb996808c31b6477290a714d356e822"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
-                "reference": "120b605dfeb996808c31b6477290a714d356e822",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": ">=5.6"
-            },
-            "require-dev": {
-                "php-coveralls/php-coveralls": "^2.1",
-                "phpunit/phpunit": "^5 || ^6.5"
-            },
-            "time": "2019-03-08T08:55:37+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "files": [
-                    "src/getallheaders.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Ralph Khattar",
-                    "email": "ralph.khattar@gmail.com"
-                }
-            ],
-            "description": "A polyfill for getallheaders.",
-            "support": {
-                "issues": "https://github.com/ralouphie/getallheaders/issues",
-                "source": "https://github.com/ralouphie/getallheaders/tree/develop"
-            },
-            "install-path": "../ralouphie/getallheaders"
-        },
-        {
-            "name": "symfony/deprecation-contracts",
-            "version": "v3.5.1",
-            "version_normalized": "3.5.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/deprecation-contracts.git",
-                "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
-                "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": ">=8.1"
-            },
-            "time": "2024-09-25T14:20:29+00:00",
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/contracts",
-                    "name": "symfony/contracts"
-                },
-                "branch-alias": {
-                    "dev-main": "3.5-dev"
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "files": [
-                    "function.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "A generic function and convention to trigger deprecation notices",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "install-path": "../symfony/deprecation-contracts"
-        },
-        {
-            "name": "symfony/http-foundation",
-            "version": "v6.4.22",
-            "version_normalized": "6.4.22.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "6b7c97fe1ddac8df3cc9ba6410c8abc683e148ae"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6b7c97fe1ddac8df3cc9ba6410c8abc683e148ae",
-                "reference": "6b7c97fe1ddac8df3cc9ba6410c8abc683e148ae",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": ">=8.1",
-                "symfony/deprecation-contracts": "^2.5|^3",
-                "symfony/polyfill-mbstring": "~1.1",
-                "symfony/polyfill-php83": "^1.27"
-            },
-            "conflict": {
-                "symfony/cache": "<6.4.12|>=7.0,<7.1.5"
-            },
-            "require-dev": {
-                "doctrine/dbal": "^2.13.1|^3|^4",
-                "predis/predis": "^1.1|^2.0",
-                "symfony/cache": "^6.4.12|^7.1.5",
-                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
-                "symfony/expression-language": "^5.4|^6.0|^7.0",
-                "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0",
-                "symfony/mime": "^5.4|^6.0|^7.0",
-                "symfony/rate-limiter": "^5.4|^6.0|^7.0"
-            },
-            "time": "2025-05-11T15:36:20+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\HttpFoundation\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Defines an object-oriented layer for the HTTP specification",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/http-foundation/tree/v6.4.22"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "install-path": "../symfony/http-foundation"
-        },
-        {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.32.0",
-            "version_normalized": "1.32.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
-                "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "ext-iconv": "*",
-                "php": ">=7.2"
-            },
-            "provide": {
-                "ext-mbstring": "*"
-            },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
-            "time": "2024-12-23T08:48:59+00:00",
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/polyfill",
-                    "name": "symfony/polyfill"
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for the Mbstring extension",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "install-path": "../symfony/polyfill-mbstring"
-        },
-        {
-            "name": "symfony/polyfill-php83",
-            "version": "v1.32.0",
-            "version_normalized": "1.32.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-php83.git",
-                "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491",
-                "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": ">=7.2"
-            },
-            "time": "2024-09-09T11:45:10+00:00",
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/polyfill",
-                    "name": "symfony/polyfill"
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php83\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "install-path": "../symfony/polyfill-php83"
-        },
-        {
-            "name": "symfony/var-dumper",
-            "version": "v6.4.21",
-            "version_normalized": "6.4.21.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/22560f80c0c5cd58cc0bcaf73455ffd81eb380d5",
-                "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": ">=8.1",
-                "symfony/deprecation-contracts": "^2.5|^3",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "conflict": {
-                "symfony/console": "<5.4"
-            },
-            "require-dev": {
-                "ext-iconv": "*",
-                "symfony/console": "^5.4|^6.0|^7.0",
-                "symfony/error-handler": "^6.3|^7.0",
-                "symfony/http-kernel": "^5.4|^6.0|^7.0",
-                "symfony/process": "^5.4|^6.0|^7.0",
-                "symfony/uid": "^5.4|^6.0|^7.0",
-                "twig/twig": "^2.13|^3.0.4"
-            },
-            "time": "2025-04-09T07:34:50+00:00",
-            "bin": [
-                "Resources/bin/var-dump-server"
-            ],
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "files": [
-                    "Resources/functions/dump.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Component\\VarDumper\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides mechanisms for walking through any arbitrary PHP variable",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "debug",
-                "dump"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/var-dumper/tree/v6.4.21"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "install-path": "../symfony/var-dumper"
-        },
-        {
-            "name": "topthink/framework",
-            "version": "v8.1.2",
-            "version_normalized": "8.1.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/top-think/framework.git",
-                "reference": "8faec5c9b7a7f2a66ca3140a57e81bd6cd37567c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/top-think/framework/zipball/8faec5c9b7a7f2a66ca3140a57e81bd6cd37567c",
-                "reference": "8faec5c9b7a7f2a66ca3140a57e81bd6cd37567c",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "ext-ctype": "*",
-                "ext-json": "*",
-                "ext-mbstring": "*",
-                "php": ">=8.0.0",
-                "psr/http-message": "^1.0",
-                "psr/log": "^1.0|^2.0|^3.0",
-                "psr/simple-cache": "^1.0|^2.0|^3.0",
-                "topthink/think-container": "^3.0",
-                "topthink/think-helper": "^3.1",
-                "topthink/think-orm": "^3.0|^4.0",
-                "topthink/think-validate": "^3.0"
-            },
-            "require-dev": {
-                "guzzlehttp/psr7": "^2.1.0",
-                "mikey179/vfsstream": "^1.6",
-                "mockery/mockery": "^1.2",
-                "phpunit/phpunit": "^9.5"
-            },
-            "time": "2025-01-14T08:04:03+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "files": [],
-                "psr-4": {
-                    "think\\": "src/think/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "liu21st",
-                    "email": "liu21st@gmail.com"
-                },
-                {
-                    "name": "yunwuxin",
-                    "email": "448901948@qq.com"
-                }
-            ],
-            "description": "The ThinkPHP Framework.",
-            "homepage": "http://thinkphp.cn/",
-            "keywords": [
-                "framework",
-                "orm",
-                "thinkphp"
-            ],
-            "support": {
-                "issues": "https://github.com/top-think/framework/issues",
-                "source": "https://github.com/top-think/framework/tree/v8.1.2"
-            },
-            "install-path": "../topthink/framework"
-        },
-        {
-            "name": "topthink/think-annotation",
-            "version": "v2.0.4",
-            "version_normalized": "2.0.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/top-think/think-annotation.git",
-                "reference": "293dae6f2d7bdb6fed1a89babe176f6059738ccf"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/top-think/think-annotation/zipball/293dae6f2d7bdb6fed1a89babe176f6059738ccf",
-                "reference": "293dae6f2d7bdb6fed1a89babe176f6059738ccf",
-                "shasum": ""
-            },
-            "require": {
-                "ergebnis/classy": "^1.4",
-                "php": "^8.0",
-                "topthink/framework": "^6.0 || ^8.0"
-            },
-            "require-dev": {
-                "topthink/think-ide-helper": "^1.0"
-            },
-            "time": "2023-07-01T10:56:40+00:00",
-            "type": "library",
-            "extra": {
-                "think": {
-                    "services": [
-                        "think\\annotation\\Service"
-                    ],
-                    "config": {
-                        "annotation": "src/config.php"
-                    }
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "think\\annotation\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "yunwuxin",
-                    "email": "448901948@qq.com"
-                }
-            ],
-            "description": "Annotation For ThinkPHP6",
-            "support": {
-                "issues": "https://github.com/top-think/think-annotation/issues",
-                "source": "https://github.com/top-think/think-annotation/tree/v2.0.4"
-            },
-            "install-path": "../topthink/think-annotation"
-        },
-        {
-            "name": "topthink/think-captcha",
-            "version": "v3.0.11",
-            "version_normalized": "3.0.11.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/top-think/think-captcha.git",
-                "reference": "4f24f560a31011329e3d144732e5370d7676b3fb"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/top-think/think-captcha/zipball/4f24f560a31011329e3d144732e5370d7676b3fb",
-                "reference": "4f24f560a31011329e3d144732e5370d7676b3fb",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "topthink/framework": "^6.0|^8.0"
-            },
-            "time": "2024-11-22T12:59:35+00:00",
-            "type": "library",
-            "extra": {
-                "think": {
-                    "config": {
-                        "captcha": "src/config.php"
-                    },
-                    "services": [
-                        "think\\captcha\\CaptchaService"
-                    ]
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "files": [
-                    "src/helper.php"
-                ],
-                "psr-4": {
-                    "think\\captcha\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "yunwuxin",
-                    "email": "448901948@qq.com"
-                }
-            ],
-            "description": "captcha package for thinkphp",
-            "support": {
-                "issues": "https://github.com/top-think/think-captcha/issues",
-                "source": "https://github.com/top-think/think-captcha/tree/v3.0.11"
-            },
-            "install-path": "../topthink/think-captcha"
-        },
-        {
-            "name": "topthink/think-container",
-            "version": "v3.0.1",
-            "version_normalized": "3.0.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/top-think/think-container.git",
-                "reference": "a24d442a02fb2a4716de232ff1a4f006c178a370"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/top-think/think-container/zipball/a24d442a02fb2a4716de232ff1a4f006c178a370",
-                "reference": "a24d442a02fb2a4716de232ff1a4f006c178a370",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": ">=8.0",
-                "psr/container": "^2.0",
-                "topthink/think-helper": "^3.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.5"
-            },
-            "time": "2025-01-07T08:19:23+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "files": [],
-                "psr-4": {
-                    "think\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "liu21st",
-                    "email": "liu21st@gmail.com"
-                }
-            ],
-            "description": "PHP Container & Facade Manager",
-            "support": {
-                "issues": "https://github.com/top-think/think-container/issues",
-                "source": "https://github.com/top-think/think-container/tree/v3.0.1"
-            },
-            "install-path": "../topthink/think-container"
-        },
-        {
-            "name": "topthink/think-cors",
-            "version": "v1.0.2",
-            "version_normalized": "1.0.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/top-think/think-cors.git",
-                "reference": "822d90b357daa5aa5e1d01668615599f428ad132"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/top-think/think-cors/zipball/822d90b357daa5aa5e1d01668615599f428ad132",
-                "reference": "822d90b357daa5aa5e1d01668615599f428ad132",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "topthink/framework": "^6.0|^8.0"
-            },
-            "time": "2024-04-26T06:32:17+00:00",
-            "type": "library",
-            "extra": {
-                "think": {
-                    "config": {
-                        "cors": "src/config.php"
-                    },
-                    "services": [
-                        "think\\cors\\Service"
-                    ]
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "think\\cors\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "yunwuxin",
-                    "email": "448901948@qq.com"
-                }
-            ],
-            "description": "The Cors Library For ThinkPHP",
-            "support": {
-                "issues": "https://github.com/top-think/think-cors/issues",
-                "source": "https://github.com/top-think/think-cors/tree/v1.0.2"
-            },
-            "install-path": "../topthink/think-cors"
-        },
-        {
-            "name": "topthink/think-filesystem",
-            "version": "v2.0.3",
-            "version_normalized": "2.0.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/top-think/think-filesystem.git",
-                "reference": "e8e51adb9f3a3f3aac2aa3ef73b7b439100f777d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/top-think/think-filesystem/zipball/e8e51adb9f3a3f3aac2aa3ef73b7b439100f777d",
-                "reference": "e8e51adb9f3a3f3aac2aa3ef73b7b439100f777d",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "league/flysystem": "^1.1.4",
-                "league/flysystem-cached-adapter": "^1.0",
-                "php": ">=7.2.5",
-                "topthink/framework": "^6.1|^8.0"
-            },
-            "require-dev": {
-                "mikey179/vfsstream": "^1.6",
-                "mockery/mockery": "^1.2",
-                "phpunit/phpunit": "^8.0"
-            },
-            "time": "2024-10-16T03:37:24+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "think\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "yunwuxin",
-                    "email": "448901948@qq.com"
-                }
-            ],
-            "description": "The ThinkPHP6.1 Filesystem Package",
-            "support": {
-                "issues": "https://github.com/top-think/think-filesystem/issues",
-                "source": "https://github.com/top-think/think-filesystem/tree/v2.0.3"
-            },
-            "install-path": "../topthink/think-filesystem"
-        },
-        {
-            "name": "topthink/think-helper",
-            "version": "v3.1.11",
-            "version_normalized": "3.1.11.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/top-think/think-helper.git",
-                "reference": "1d6ada9b9f3130046bf6922fe1bd159c8d88a33c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/top-think/think-helper/zipball/1d6ada9b9f3130046bf6922fe1bd159c8d88a33c",
-                "reference": "1d6ada9b9f3130046bf6922fe1bd159c8d88a33c",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": ">=7.1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.5"
-            },
-            "time": "2025-04-07T06:55:59+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "files": [
-                    "src/helper.php"
-                ],
-                "psr-4": {
-                    "think\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "yunwuxin",
-                    "email": "448901948@qq.com"
-                }
-            ],
-            "description": "The ThinkPHP6 Helper Package",
-            "support": {
-                "issues": "https://github.com/top-think/think-helper/issues",
-                "source": "https://github.com/top-think/think-helper/tree/v3.1.11"
-            },
-            "install-path": "../topthink/think-helper"
-        },
-        {
-            "name": "topthink/think-multi-app",
-            "version": "v1.1.1",
-            "version_normalized": "1.1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/top-think/think-multi-app.git",
-                "reference": "f93c604d5cfac2b613756273224ee2f88e457b88"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/top-think/think-multi-app/zipball/f93c604d5cfac2b613756273224ee2f88e457b88",
-                "reference": "f93c604d5cfac2b613756273224ee2f88e457b88",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": ">=7.1.0",
-                "topthink/framework": "^6.0|^8.0"
-            },
-            "time": "2024-11-25T08:52:44+00:00",
-            "type": "library",
-            "extra": {
-                "think": {
-                    "services": [
-                        "think\\app\\Service"
-                    ]
-                }
-            },
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "think\\app\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "liu21st",
-                    "email": "liu21st@gmail.com"
-                }
-            ],
-            "description": "thinkphp multi app support",
-            "support": {
-                "issues": "https://github.com/top-think/think-multi-app/issues",
-                "source": "https://github.com/top-think/think-multi-app/tree/v1.1.1"
-            },
-            "install-path": "../topthink/think-multi-app"
-        },
-        {
-            "name": "topthink/think-orm",
-            "version": "v3.0.34",
-            "version_normalized": "3.0.34.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/top-think/think-orm.git",
-                "reference": "715e55da149fe32a12d68ef10e5b00e70bd3dbec"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/top-think/think-orm/zipball/715e55da149fe32a12d68ef10e5b00e70bd3dbec",
-                "reference": "715e55da149fe32a12d68ef10e5b00e70bd3dbec",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "ext-json": "*",
-                "ext-pdo": "*",
-                "php": ">=8.0.0",
-                "psr/log": ">=1.0",
-                "psr/simple-cache": ">=1.0",
-                "topthink/think-helper": "^3.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^9.6|^10"
-            },
-            "suggest": {
-                "ext-mongodb": "provide mongodb support"
-            },
-            "time": "2025-01-14T06:03:33+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "files": [
-                    "stubs/load_stubs.php"
-                ],
-                "psr-4": {
-                    "think\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "liu21st",
-                    "email": "liu21st@gmail.com"
-                }
-            ],
-            "description": "the PHP Database&ORM Framework",
-            "keywords": [
-                "database",
-                "orm"
-            ],
-            "support": {
-                "issues": "https://github.com/top-think/think-orm/issues",
-                "source": "https://github.com/top-think/think-orm/tree/v3.0.34"
-            },
-            "install-path": "../topthink/think-orm"
-        },
-        {
-            "name": "topthink/think-template",
-            "version": "v3.0.2",
-            "version_normalized": "3.0.2.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/top-think/think-template.git",
-                "reference": "0b88bd449f0f7626dd75b05f557c8bc208c08b0c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/top-think/think-template/zipball/0b88bd449f0f7626dd75b05f557c8bc208c08b0c",
-                "reference": "0b88bd449f0f7626dd75b05f557c8bc208c08b0c",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": ">=8.0.0",
-                "psr/simple-cache": ">=1.0"
-            },
-            "time": "2024-10-16T03:41:06+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "think\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "liu21st",
-                    "email": "liu21st@gmail.com"
-                }
-            ],
-            "description": "the php template engine",
-            "support": {
-                "issues": "https://github.com/top-think/think-template/issues",
-                "source": "https://github.com/top-think/think-template/tree/v3.0.2"
-            },
-            "install-path": "../topthink/think-template"
-        },
-        {
-            "name": "topthink/think-validate",
-            "version": "v3.0.7",
-            "version_normalized": "3.0.7.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/top-think/think-validate.git",
-                "reference": "85063f6d4ef8ed122f17a36179dc3e0949b30988"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/top-think/think-validate/zipball/85063f6d4ef8ed122f17a36179dc3e0949b30988",
-                "reference": "85063f6d4ef8ed122f17a36179dc3e0949b30988",
-                "shasum": "",
-                "mirrors": [
-                    {
-                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
-                        "preferred": true
-                    }
-                ]
-            },
-            "require": {
-                "php": ">=8.0",
-                "topthink/think-container": ">=3.0"
-            },
-            "time": "2025-06-11T05:51:40+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "files": [
-                    "src/helper.php"
-                ],
-                "psr-4": {
-                    "think\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "liu21st",
-                    "email": "liu21st@gmail.com"
-                }
-            ],
-            "description": "think validate",
-            "support": {
-                "issues": "https://github.com/top-think/think-validate/issues",
-                "source": "https://github.com/top-think/think-validate/tree/v3.0.7"
-            },
-            "install-path": "../topthink/think-validate"
-        },
-        {
-            "name": "topthink/think-view",
-            "version": "v2.0.0",
-            "version_normalized": "2.0.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/top-think/think-view.git",
-                "reference": "d2a076011c96d2edd8016703a827fb54b2683c62"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/top-think/think-view/zipball/d2a076011c96d2edd8016703a827fb54b2683c62",
-                "reference": "d2a076011c96d2edd8016703a827fb54b2683c62",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=8.0.0",
-                "topthink/think-template": "^3.0"
-            },
-            "time": "2023-02-25T12:18:09+00:00",
-            "type": "library",
-            "installation-source": "dist",
-            "autoload": {
-                "psr-4": {
-                    "think\\view\\driver\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "liu21st",
-                    "email": "liu21st@gmail.com"
-                }
-            ],
-            "description": "thinkphp template driver",
-            "support": {
-                "issues": "https://github.com/top-think/think-view/issues",
-                "source": "https://github.com/top-think/think-view/tree/v2.0.0"
-            },
-            "install-path": "../topthink/think-view"
-        }
-    ],
-    "dev": true,
-    "dev-package-names": [
-        "symfony/var-dumper"
-    ]
-}

+ 0 - 392
vendor/composer/installed.php

@@ -1,392 +0,0 @@
-<?php return array(
-    'root' => array(
-        'pretty_version' => 'dev-master',
-        'version' => 'dev-master',
-        'type' => 'project',
-        'install_path' => __DIR__ . '/../../',
-        'aliases' => array(),
-        'reference' => '0b1827e35d6502db30cba0324ed75aed077808d9',
-        'name' => 'topthink/think',
-        'dev' => true,
-    ),
-    'versions' => array(
-        'composer/pcre' => array(
-            'pretty_version' => '3.3.2',
-            'version' => '3.3.2.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/./pcre',
-            'aliases' => array(),
-            'reference' => 'b2bed4734f0cc156ee1fe9c0da2550420d99a21e',
-            'dev_requirement' => false,
-        ),
-        'ergebnis/classy' => array(
-            'pretty_version' => '1.9.0',
-            'version' => '1.9.0.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../ergebnis/classy',
-            'aliases' => array(),
-            'reference' => '05c3ac7d8d9d337c4cf1d5602a339f57cb2a27ef',
-            'dev_requirement' => false,
-        ),
-        'ezyang/htmlpurifier' => array(
-            'pretty_version' => 'v4.18.0',
-            'version' => '4.18.0.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../ezyang/htmlpurifier',
-            'aliases' => array(),
-            'reference' => 'cb56001e54359df7ae76dc522d08845dc741621b',
-            'dev_requirement' => false,
-        ),
-        'guzzlehttp/guzzle' => array(
-            'pretty_version' => '7.9.2',
-            'version' => '7.9.2.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../guzzlehttp/guzzle',
-            'aliases' => array(),
-            'reference' => 'd281ed313b989f213357e3be1a179f02196ac99b',
-            'dev_requirement' => false,
-        ),
-        'guzzlehttp/promises' => array(
-            'pretty_version' => '2.3.0',
-            'version' => '2.3.0.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../guzzlehttp/promises',
-            'aliases' => array(),
-            'reference' => '481557b130ef3790cf82b713667b43030dc9c957',
-            'dev_requirement' => false,
-        ),
-        'guzzlehttp/psr7' => array(
-            'pretty_version' => '2.8.0',
-            'version' => '2.8.0.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../guzzlehttp/psr7',
-            'aliases' => array(),
-            'reference' => '21dc724a0583619cd1652f673303492272778051',
-            'dev_requirement' => false,
-        ),
-        'league/flysystem' => array(
-            'pretty_version' => '1.1.10',
-            'version' => '1.1.10.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../league/flysystem',
-            'aliases' => array(),
-            'reference' => '3239285c825c152bcc315fe0e87d6b55f5972ed1',
-            'dev_requirement' => false,
-        ),
-        'league/flysystem-cached-adapter' => array(
-            'pretty_version' => '1.1.0',
-            'version' => '1.1.0.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../league/flysystem-cached-adapter',
-            'aliases' => array(),
-            'reference' => 'd1925efb2207ac4be3ad0c40b8277175f99ffaff',
-            'dev_requirement' => false,
-        ),
-        'league/mime-type-detection' => array(
-            'pretty_version' => '1.15.0',
-            'version' => '1.15.0.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../league/mime-type-detection',
-            'aliases' => array(),
-            'reference' => 'ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301',
-            'dev_requirement' => false,
-        ),
-        'maennchen/zipstream-php' => array(
-            'pretty_version' => '3.1.1',
-            'version' => '3.1.1.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../maennchen/zipstream-php',
-            'aliases' => array(),
-            'reference' => '6187e9cc4493da94b9b63eb2315821552015fca9',
-            'dev_requirement' => false,
-        ),
-        'markbaker/complex' => array(
-            'pretty_version' => '3.0.2',
-            'version' => '3.0.2.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../markbaker/complex',
-            'aliases' => array(),
-            'reference' => '95c56caa1cf5c766ad6d65b6344b807c1e8405b9',
-            'dev_requirement' => false,
-        ),
-        'markbaker/matrix' => array(
-            'pretty_version' => '3.0.1',
-            'version' => '3.0.1.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../markbaker/matrix',
-            'aliases' => array(),
-            'reference' => '728434227fe21be27ff6d86621a1b13107a2562c',
-            'dev_requirement' => false,
-        ),
-        'phpoffice/phpspreadsheet' => array(
-            'pretty_version' => '1.30.0',
-            'version' => '1.30.0.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../phpoffice/phpspreadsheet',
-            'aliases' => array(),
-            'reference' => '2f39286e0136673778b7a142b3f0d141e43d1714',
-            'dev_requirement' => false,
-        ),
-        'predis/predis' => array(
-            'pretty_version' => 'v3.0.1',
-            'version' => '3.0.1.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../predis/predis',
-            'aliases' => array(),
-            'reference' => '34fb0a7da0330df1bab4280fcac4afdeeccc3edf',
-            'dev_requirement' => false,
-        ),
-        'psr/cache' => array(
-            'pretty_version' => '1.0.1',
-            'version' => '1.0.1.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../psr/cache',
-            'aliases' => array(),
-            'reference' => 'd11b50ad223250cf17b86e38383413f5a6764bf8',
-            'dev_requirement' => false,
-        ),
-        'psr/container' => array(
-            'pretty_version' => '2.0.2',
-            'version' => '2.0.2.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../psr/container',
-            'aliases' => array(),
-            'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963',
-            'dev_requirement' => false,
-        ),
-        'psr/http-client' => array(
-            'pretty_version' => '1.0.3',
-            'version' => '1.0.3.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../psr/http-client',
-            'aliases' => array(),
-            'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90',
-            'dev_requirement' => false,
-        ),
-        'psr/http-client-implementation' => array(
-            'dev_requirement' => false,
-            'provided' => array(
-                0 => '1.0',
-            ),
-        ),
-        'psr/http-factory' => array(
-            'pretty_version' => '1.0.2',
-            'version' => '1.0.2.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../psr/http-factory',
-            'aliases' => array(),
-            'reference' => 'e616d01114759c4c489f93b099585439f795fe35',
-            'dev_requirement' => false,
-        ),
-        'psr/http-factory-implementation' => array(
-            'dev_requirement' => false,
-            'provided' => array(
-                0 => '1.0',
-            ),
-        ),
-        'psr/http-message' => array(
-            'pretty_version' => '1.1',
-            'version' => '1.1.0.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../psr/http-message',
-            'aliases' => array(),
-            'reference' => 'cb6ce4845ce34a8ad9e68117c10ee90a29919eba',
-            'dev_requirement' => false,
-        ),
-        'psr/http-message-implementation' => array(
-            'dev_requirement' => false,
-            'provided' => array(
-                0 => '1.0',
-            ),
-        ),
-        'psr/log' => array(
-            'pretty_version' => '3.0.1',
-            'version' => '3.0.1.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../psr/log',
-            'aliases' => array(),
-            'reference' => '79dff0b268932c640297f5208d6298f71855c03e',
-            'dev_requirement' => false,
-        ),
-        'psr/simple-cache' => array(
-            'pretty_version' => '3.0.0',
-            'version' => '3.0.0.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../psr/simple-cache',
-            'aliases' => array(),
-            'reference' => '764e0b3939f5ca87cb904f570ef9be2d78a07865',
-            'dev_requirement' => false,
-        ),
-        'ralouphie/getallheaders' => array(
-            'pretty_version' => '3.0.3',
-            'version' => '3.0.3.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../ralouphie/getallheaders',
-            'aliases' => array(),
-            'reference' => '120b605dfeb996808c31b6477290a714d356e822',
-            'dev_requirement' => false,
-        ),
-        'symfony/deprecation-contracts' => array(
-            'pretty_version' => 'v3.5.1',
-            'version' => '3.5.1.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
-            'aliases' => array(),
-            'reference' => '74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6',
-            'dev_requirement' => false,
-        ),
-        'symfony/http-foundation' => array(
-            'pretty_version' => 'v6.4.22',
-            'version' => '6.4.22.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../symfony/http-foundation',
-            'aliases' => array(),
-            'reference' => '6b7c97fe1ddac8df3cc9ba6410c8abc683e148ae',
-            'dev_requirement' => false,
-        ),
-        'symfony/polyfill-mbstring' => array(
-            'pretty_version' => 'v1.32.0',
-            'version' => '1.32.0.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
-            'aliases' => array(),
-            'reference' => '6d857f4d76bd4b343eac26d6b539585d2bc56493',
-            'dev_requirement' => false,
-        ),
-        'symfony/polyfill-php83' => array(
-            'pretty_version' => 'v1.32.0',
-            'version' => '1.32.0.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../symfony/polyfill-php83',
-            'aliases' => array(),
-            'reference' => '2fb86d65e2d424369ad2905e83b236a8805ba491',
-            'dev_requirement' => false,
-        ),
-        'symfony/var-dumper' => array(
-            'pretty_version' => 'v6.4.21',
-            'version' => '6.4.21.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../symfony/var-dumper',
-            'aliases' => array(),
-            'reference' => '22560f80c0c5cd58cc0bcaf73455ffd81eb380d5',
-            'dev_requirement' => true,
-        ),
-        'topthink/framework' => array(
-            'pretty_version' => 'v8.1.2',
-            'version' => '8.1.2.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../topthink/framework',
-            'aliases' => array(),
-            'reference' => '8faec5c9b7a7f2a66ca3140a57e81bd6cd37567c',
-            'dev_requirement' => false,
-        ),
-        'topthink/think' => array(
-            'pretty_version' => 'dev-master',
-            'version' => 'dev-master',
-            'type' => 'project',
-            'install_path' => __DIR__ . '/../../',
-            'aliases' => array(),
-            'reference' => '0b1827e35d6502db30cba0324ed75aed077808d9',
-            'dev_requirement' => false,
-        ),
-        'topthink/think-annotation' => array(
-            'pretty_version' => 'v2.0.4',
-            'version' => '2.0.4.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../topthink/think-annotation',
-            'aliases' => array(),
-            'reference' => '293dae6f2d7bdb6fed1a89babe176f6059738ccf',
-            'dev_requirement' => false,
-        ),
-        'topthink/think-captcha' => array(
-            'pretty_version' => 'v3.0.11',
-            'version' => '3.0.11.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../topthink/think-captcha',
-            'aliases' => array(),
-            'reference' => '4f24f560a31011329e3d144732e5370d7676b3fb',
-            'dev_requirement' => false,
-        ),
-        'topthink/think-container' => array(
-            'pretty_version' => 'v3.0.1',
-            'version' => '3.0.1.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../topthink/think-container',
-            'aliases' => array(),
-            'reference' => 'a24d442a02fb2a4716de232ff1a4f006c178a370',
-            'dev_requirement' => false,
-        ),
-        'topthink/think-cors' => array(
-            'pretty_version' => 'v1.0.2',
-            'version' => '1.0.2.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../topthink/think-cors',
-            'aliases' => array(),
-            'reference' => '822d90b357daa5aa5e1d01668615599f428ad132',
-            'dev_requirement' => false,
-        ),
-        'topthink/think-filesystem' => array(
-            'pretty_version' => 'v2.0.3',
-            'version' => '2.0.3.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../topthink/think-filesystem',
-            'aliases' => array(),
-            'reference' => 'e8e51adb9f3a3f3aac2aa3ef73b7b439100f777d',
-            'dev_requirement' => false,
-        ),
-        'topthink/think-helper' => array(
-            'pretty_version' => 'v3.1.11',
-            'version' => '3.1.11.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../topthink/think-helper',
-            'aliases' => array(),
-            'reference' => '1d6ada9b9f3130046bf6922fe1bd159c8d88a33c',
-            'dev_requirement' => false,
-        ),
-        'topthink/think-multi-app' => array(
-            'pretty_version' => 'v1.1.1',
-            'version' => '1.1.1.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../topthink/think-multi-app',
-            'aliases' => array(),
-            'reference' => 'f93c604d5cfac2b613756273224ee2f88e457b88',
-            'dev_requirement' => false,
-        ),
-        'topthink/think-orm' => array(
-            'pretty_version' => 'v3.0.34',
-            'version' => '3.0.34.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../topthink/think-orm',
-            'aliases' => array(),
-            'reference' => '715e55da149fe32a12d68ef10e5b00e70bd3dbec',
-            'dev_requirement' => false,
-        ),
-        'topthink/think-template' => array(
-            'pretty_version' => 'v3.0.2',
-            'version' => '3.0.2.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../topthink/think-template',
-            'aliases' => array(),
-            'reference' => '0b88bd449f0f7626dd75b05f557c8bc208c08b0c',
-            'dev_requirement' => false,
-        ),
-        'topthink/think-validate' => array(
-            'pretty_version' => 'v3.0.7',
-            'version' => '3.0.7.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../topthink/think-validate',
-            'aliases' => array(),
-            'reference' => '85063f6d4ef8ed122f17a36179dc3e0949b30988',
-            'dev_requirement' => false,
-        ),
-        'topthink/think-view' => array(
-            'pretty_version' => 'v2.0.0',
-            'version' => '2.0.0.0',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../topthink/think-view',
-            'aliases' => array(),
-            'reference' => 'd2a076011c96d2edd8016703a827fb54b2683c62',
-            'dev_requirement' => false,
-        ),
-    ),
-);

+ 0 - 19
vendor/composer/pcre/LICENSE

@@ -1,19 +0,0 @@
-Copyright (C) 2021 Composer
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 189
vendor/composer/pcre/README.md

@@ -1,189 +0,0 @@
-composer/pcre
-=============
-
-PCRE wrapping library that offers type-safe `preg_*` replacements.
-
-This library gives you a way to ensure `preg_*` functions do not fail silently, returning
-unexpected `null`s that may not be handled.
-
-As of 3.0 this library enforces [`PREG_UNMATCHED_AS_NULL`](#preg_unmatched_as_null) usage
-for all matching and replaceCallback functions, [read more below](#preg_unmatched_as_null)
-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. 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
-[rawr/t-regx](https://packagist.org/packages/rawr/t-regx) instead.
-
-[![Continuous Integration](https://github.com/composer/pcre/workflows/Continuous%20Integration/badge.svg?branch=main)](https://github.com/composer/pcre/actions)
-
-
-Installation
-------------
-
-Install the latest version with:
-
-```bash
-$ composer require composer/pcre
-```
-
-
-Requirements
-------------
-
-* PHP 7.4.0 is required for 3.x versions
-* PHP 7.2.0 is required for 2.x versions
-* PHP 5.3.2 is required for 1.x versions
-
-
-Basic usage
------------
-
-Instead of:
-
-```php
-if (preg_match('{fo+}', $string, $matches)) { ... }
-if (preg_match('{fo+}', $string, $matches, PREG_OFFSET_CAPTURE)) { ... }
-if (preg_match_all('{fo+}', $string, $matches)) { ... }
-$newString = preg_replace('{fo+}', 'bar', $string);
-$newString = preg_replace_callback('{fo+}', function ($match) { return strtoupper($match[0]); }, $string);
-$newString = preg_replace_callback_array(['{fo+}' => fn ($match) => strtoupper($match[0])], $string);
-$filtered = preg_grep('{[a-z]}', $elements);
-$array = preg_split('{[a-z]+}', $string);
-```
-
-You can now call these on the `Preg` class:
-
-```php
-use Composer\Pcre\Preg;
-
-if (Preg::match('{fo+}', $string, $matches)) { ... }
-if (Preg::matchWithOffsets('{fo+}', $string, $matches)) { ... }
-if (Preg::matchAll('{fo+}', $string, $matches)) { ... }
-$newString = Preg::replace('{fo+}', 'bar', $string);
-$newString = Preg::replaceCallback('{fo+}', function ($match) { return strtoupper($match[0]); }, $string);
-$newString = Preg::replaceCallbackArray(['{fo+}' => fn ($match) => strtoupper($match[0])], $string);
-$filtered = Preg::grep('{[a-z]}', $elements);
-$array = Preg::split('{[a-z]+}', $string);
-```
-
-The main difference is if anything fails to match/replace/.., it will throw a `Composer\Pcre\PcreException`
-instead of returning `null` (or false in some cases), so you can now use the return values safely relying on
-the fact that they can only be strings (for replace), ints (for match) or arrays (for grep/split).
-
-Additionally the `Preg` class provides match methods that return `bool` rather than `int`, for stricter type safety
-when the number of pattern matches is not useful:
-
-```php
-use Composer\Pcre\Preg;
-
-if (Preg::isMatch('{fo+}', $string, $matches)) // bool
-if (Preg::isMatchAll('{fo+}', $string, $matches)) // bool
-```
-
-Finally the `Preg` class provides a few `*StrictGroups` method variants that ensure match groups
-are always present and thus non-nullable, making it easier to write type-safe code:
-
-```php
-use Composer\Pcre\Preg;
-
-// $matches is guaranteed to be an array of strings, if a subpattern does not match and produces a null it will throw
-if (Preg::matchStrictGroups('{fo+}', $string, $matches))
-if (Preg::matchAllStrictGroups('{fo+}', $string, $matches))
-```
-
-**Note:** This is generally safe to use as long as you do not have optional subpatterns (i.e. `(something)?`
-or `(something)*` or branches with a `|` that result in some groups not being matched at all).
-A subpattern that can match an empty string like `(.*)` is **not** optional, it will be present as an
-empty string in the matches. A non-matching subpattern, even if optional like `(?:foo)?` will anyway not be present in
-matches so it is also not a problem to use these with `*StrictGroups` methods.
-
-If you would prefer a slightly more verbose usage, replacing by-ref arguments by result objects, you can use the `Regex` class:
-
-```php
-use Composer\Pcre\Regex;
-
-// this is useful when you are just interested in knowing if something matched
-// as it returns a bool instead of int(1/0) for match
-$bool = Regex::isMatch('{fo+}', $string);
-
-$result = Regex::match('{fo+}', $string);
-if ($result->matched) { something($result->matches); }
-
-$result = Regex::matchWithOffsets('{fo+}', $string);
-if ($result->matched) { something($result->matches); }
-
-$result = Regex::matchAll('{fo+}', $string);
-if ($result->matched && $result->count > 3) { something($result->matches); }
-
-$newString = Regex::replace('{fo+}', 'bar', $string)->result;
-$newString = Regex::replaceCallback('{fo+}', function ($match) { return strtoupper($match[0]); }, $string)->result;
-$newString = Regex::replaceCallbackArray(['{fo+}' => fn ($match) => strtoupper($match[0])], $string)->result;
-```
-
-Note that `preg_grep` and `preg_split` are only callable via the `Preg` class as they do not have
-complex return types warranting a specific result object.
-
-See the [MatchResult](src/MatchResult.php), [MatchWithOffsetsResult](src/MatchWithOffsetsResult.php), [MatchAllResult](src/MatchAllResult.php),
-[MatchAllWithOffsetsResult](src/MatchAllWithOffsetsResult.php), and [ReplaceResult](src/ReplaceResult.php) class sources for more details.
-
-Restrictions / Limitations
---------------------------
-
-Due to type safety requirements a few restrictions are in place.
-
-- matching using `PREG_OFFSET_CAPTURE` is made available via `matchWithOffsets` and `matchAllWithOffsets`.
-  You cannot pass the flag to `match`/`matchAll`.
-- `Preg::split` will also reject `PREG_SPLIT_OFFSET_CAPTURE` and you should use `splitWithOffsets`
-  instead.
-- `matchAll` rejects `PREG_SET_ORDER` as it also changes the shape of the returned matches. There
-  is no alternative provided as you can fairly easily code around it.
-- `preg_filter` is not supported as it has a rather crazy API, most likely you should rather
-  use `Preg::grep` in combination with some loop and `Preg::replace`.
-- `replace`, `replaceCallback` and `replaceCallbackArray` do not support an array `$subject`,
-  only simple strings.
-- As of 2.0, the library always uses `PREG_UNMATCHED_AS_NULL` for matching, which offers [much
-  saner/more predictable results](#preg_unmatched_as_null). As of 3.0 the flag is also set for
-  `replaceCallback` and `replaceCallbackArray`.
-
-#### PREG_UNMATCHED_AS_NULL
-
-As of 2.0, this library always uses PREG_UNMATCHED_AS_NULL for all `match*` and `isMatch*`
-functions. As of 3.0 it is also done for `replaceCallback` and `replaceCallbackArray`.
-
-This means your matches will always contain all matching groups, either as null if unmatched
-or as string if it matched.
-
-The advantages in clarity and predictability are clearer if you compare the two outputs of
-running this with and without PREG_UNMATCHED_AS_NULL in $flags:
-
-```php
-preg_match('/(a)(b)*(c)(d)*/', 'ac', $matches, $flags);
-```
-
-| no flag | PREG_UNMATCHED_AS_NULL |
-| --- | --- |
-| array (size=4)              | array (size=5) |
-| 0 => string 'ac' (length=2) |   0 => string 'ac' (length=2) |
-| 1 => string 'a' (length=1)  |   1 => string 'a' (length=1) |
-| 2 => string '' (length=0)   |   2 => null |
-| 3 => string 'c' (length=1)  |   3 => string 'c' (length=1) |
-|                             |   4 => null |
-| 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
--------
-
-composer/pcre is licensed under the MIT License, see the LICENSE file for details.

+ 0 - 54
vendor/composer/pcre/composer.json

@@ -1,54 +0,0 @@
-{
-    "name": "composer/pcre",
-    "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
-    "type": "library",
-    "license": "MIT",
-    "keywords": [
-        "pcre",
-        "regex",
-        "preg",
-        "regular expression"
-    ],
-    "authors": [
-        {
-            "name": "Jordi Boggiano",
-            "email": "j.boggiano@seld.be",
-            "homepage": "http://seld.be"
-        }
-    ],
-    "require": {
-        "php": "^7.4 || ^8.0"
-    },
-    "require-dev": {
-        "phpunit/phpunit": "^8 || ^9",
-        "phpstan/phpstan": "^1.12 || ^2",
-        "phpstan/phpstan-strict-rules": "^1 || ^2"
-    },
-    "conflict": {
-        "phpstan/phpstan": "<1.11.10"
-    },
-    "autoload": {
-        "psr-4": {
-            "Composer\\Pcre\\": "src"
-        }
-    },
-    "autoload-dev": {
-        "psr-4": {
-            "Composer\\Pcre\\": "tests"
-        }
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-main": "3.x-dev"
-        },
-        "phpstan": {
-            "includes": [
-                "extension.neon"
-            ]
-        }
-    },
-    "scripts": {
-        "test": "@php vendor/bin/phpunit",
-        "phpstan": "@php phpstan analyse"
-    }
-}

+ 0 - 22
vendor/composer/pcre/extension.neon

@@ -1,22 +0,0 @@
-# composer/pcre PHPStan extensions
-#
-# These can be reused by third party packages by including 'vendor/composer/pcre/extension.neon'
-# in your phpstan config
-
-services:
-    -
-        class: Composer\Pcre\PHPStan\PregMatchParameterOutTypeExtension
-        tags:
-            - phpstan.staticMethodParameterOutTypeExtension
-    -
-        class: Composer\Pcre\PHPStan\PregMatchTypeSpecifyingExtension
-        tags:
-            - phpstan.typeSpecifier.staticMethodTypeSpecifyingExtension
-    -
-        class: Composer\Pcre\PHPStan\PregReplaceCallbackClosureTypeExtension
-        tags:
-            - phpstan.staticMethodParameterClosureTypeExtension
-
-rules:
-    - Composer\Pcre\PHPStan\UnsafeStrictGroupsCallRule
-    - Composer\Pcre\PHPStan\InvalidRegexPatternRule

+ 0 - 46
vendor/composer/pcre/src/MatchAllResult.php

@@ -1,46 +0,0 @@
-<?php
-
-/*
- * This file is part of composer/pcre.
- *
- * (c) Composer <https://github.com/composer>
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\Pcre;
-
-final class MatchAllResult
-{
-    /**
-     * An array of match group => list of matched strings
-     *
-     * @readonly
-     * @var array<int|string, list<string|null>>
-     */
-    public $matches;
-
-    /**
-     * @readonly
-     * @var 0|positive-int
-     */
-    public $count;
-
-    /**
-     * @readonly
-     * @var bool
-     */
-    public $matched;
-
-    /**
-     * @param 0|positive-int $count
-     * @param array<int|string, list<string|null>> $matches
-     */
-    public function __construct(int $count, array $matches)
-    {
-        $this->matches = $matches;
-        $this->matched = (bool) $count;
-        $this->count = $count;
-    }
-}

+ 0 - 46
vendor/composer/pcre/src/MatchAllStrictGroupsResult.php

@@ -1,46 +0,0 @@
-<?php
-
-/*
- * This file is part of composer/pcre.
- *
- * (c) Composer <https://github.com/composer>
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\Pcre;
-
-final class MatchAllStrictGroupsResult
-{
-    /**
-     * An array of match group => list of matched strings
-     *
-     * @readonly
-     * @var array<int|string, list<string>>
-     */
-    public $matches;
-
-    /**
-     * @readonly
-     * @var 0|positive-int
-     */
-    public $count;
-
-    /**
-     * @readonly
-     * @var bool
-     */
-    public $matched;
-
-    /**
-     * @param 0|positive-int $count
-     * @param array<list<string>> $matches
-     */
-    public function __construct(int $count, array $matches)
-    {
-        $this->matches = $matches;
-        $this->matched = (bool) $count;
-        $this->count = $count;
-    }
-}

+ 0 - 48
vendor/composer/pcre/src/MatchAllWithOffsetsResult.php

@@ -1,48 +0,0 @@
-<?php
-
-/*
- * This file is part of composer/pcre.
- *
- * (c) Composer <https://github.com/composer>
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\Pcre;
-
-final class MatchAllWithOffsetsResult
-{
-    /**
-     * An array of match group => list of matches, every match being a pair of string matched + offset in bytes (or -1 if no match)
-     *
-     * @readonly
-     * @var array<int|string, list<array{string|null, int}>>
-     * @phpstan-var array<int|string, list<array{string|null, int<-1, max>}>>
-     */
-    public $matches;
-
-    /**
-     * @readonly
-     * @var 0|positive-int
-     */
-    public $count;
-
-    /**
-     * @readonly
-     * @var bool
-     */
-    public $matched;
-
-    /**
-     * @param 0|positive-int $count
-     * @param array<int|string, list<array{string|null, int}>> $matches
-     * @phpstan-param array<int|string, list<array{string|null, int<-1, max>}>> $matches
-     */
-    public function __construct(int $count, array $matches)
-    {
-        $this->matches = $matches;
-        $this->matched = (bool) $count;
-        $this->count = $count;
-    }
-}

+ 0 - 39
vendor/composer/pcre/src/MatchResult.php

@@ -1,39 +0,0 @@
-<?php
-
-/*
- * This file is part of composer/pcre.
- *
- * (c) Composer <https://github.com/composer>
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\Pcre;
-
-final class MatchResult
-{
-    /**
-     * An array of match group => string matched
-     *
-     * @readonly
-     * @var array<int|string, string|null>
-     */
-    public $matches;
-
-    /**
-     * @readonly
-     * @var bool
-     */
-    public $matched;
-
-    /**
-     * @param 0|positive-int $count
-     * @param array<string|null> $matches
-     */
-    public function __construct(int $count, array $matches)
-    {
-        $this->matches = $matches;
-        $this->matched = (bool) $count;
-    }
-}

+ 0 - 39
vendor/composer/pcre/src/MatchStrictGroupsResult.php

@@ -1,39 +0,0 @@
-<?php
-
-/*
- * This file is part of composer/pcre.
- *
- * (c) Composer <https://github.com/composer>
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\Pcre;
-
-final class MatchStrictGroupsResult
-{
-    /**
-     * An array of match group => string matched
-     *
-     * @readonly
-     * @var array<int|string, string>
-     */
-    public $matches;
-
-    /**
-     * @readonly
-     * @var bool
-     */
-    public $matched;
-
-    /**
-     * @param 0|positive-int $count
-     * @param array<string> $matches
-     */
-    public function __construct(int $count, array $matches)
-    {
-        $this->matches = $matches;
-        $this->matched = (bool) $count;
-    }
-}

+ 0 - 41
vendor/composer/pcre/src/MatchWithOffsetsResult.php

@@ -1,41 +0,0 @@
-<?php
-
-/*
- * This file is part of composer/pcre.
- *
- * (c) Composer <https://github.com/composer>
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\Pcre;
-
-final class MatchWithOffsetsResult
-{
-    /**
-     * An array of match group => pair of string matched + offset in bytes (or -1 if no match)
-     *
-     * @readonly
-     * @var array<int|string, array{string|null, int}>
-     * @phpstan-var array<int|string, array{string|null, int<-1, max>}>
-     */
-    public $matches;
-
-    /**
-     * @readonly
-     * @var bool
-     */
-    public $matched;
-
-    /**
-     * @param 0|positive-int $count
-     * @param array<array{string|null, int}> $matches
-     * @phpstan-param array<int|string, array{string|null, int<-1, max>}> $matches
-     */
-    public function __construct(int $count, array $matches)
-    {
-        $this->matches = $matches;
-        $this->matched = (bool) $count;
-    }
-}

+ 0 - 142
vendor/composer/pcre/src/PHPStan/InvalidRegexPatternRule.php

@@ -1,142 +0,0 @@
-<?php declare(strict_types = 1);
-
-namespace Composer\Pcre\PHPStan;
-
-use Composer\Pcre\Preg;
-use Composer\Pcre\Regex;
-use Composer\Pcre\PcreException;
-use Nette\Utils\RegexpException;
-use Nette\Utils\Strings;
-use PhpParser\Node;
-use PhpParser\Node\Expr\StaticCall;
-use PhpParser\Node\Name\FullyQualified;
-use PHPStan\Analyser\Scope;
-use PHPStan\Rules\Rule;
-use PHPStan\Rules\RuleErrorBuilder;
-use function in_array;
-use function sprintf;
-
-/**
- * Copy of PHPStan's RegularExpressionPatternRule
- *
- * @implements Rule<StaticCall>
- */
-class InvalidRegexPatternRule implements Rule
-{
-    public function getNodeType(): string
-    {
-        return StaticCall::class;
-    }
-
-    public function processNode(Node $node, Scope $scope): array
-    {
-        $patterns = $this->extractPatterns($node, $scope);
-
-        $errors = [];
-        foreach ($patterns as $pattern) {
-            $errorMessage = $this->validatePattern($pattern);
-            if ($errorMessage === null) {
-                continue;
-            }
-
-            $errors[] = RuleErrorBuilder::message(sprintf('Regex pattern is invalid: %s', $errorMessage))->identifier('regexp.pattern')->build();
-        }
-
-        return $errors;
-    }
-
-    /**
-     * @return string[]
-     */
-    private function extractPatterns(StaticCall $node, Scope $scope): array
-    {
-        if (!$node->class instanceof FullyQualified) {
-            return [];
-        }
-        $isRegex = $node->class->toString() === Regex::class;
-        $isPreg = $node->class->toString() === Preg::class;
-        if (!$isRegex && !$isPreg) {
-            return [];
-        }
-        if (!$node->name instanceof Node\Identifier || !Preg::isMatch('{^(match|isMatch|grep|replace|split)}', $node->name->name)) {
-            return [];
-        }
-
-        $functionName = $node->name->name;
-        if (!isset($node->getArgs()[0])) {
-            return [];
-        }
-
-        $patternNode = $node->getArgs()[0]->value;
-        $patternType = $scope->getType($patternNode);
-
-        $patternStrings = [];
-
-        foreach ($patternType->getConstantStrings() as $constantStringType) {
-            if ($functionName === 'replaceCallbackArray') {
-                continue;
-            }
-
-            $patternStrings[] = $constantStringType->getValue();
-        }
-
-        foreach ($patternType->getConstantArrays() as $constantArrayType) {
-            if (
-                in_array($functionName, [
-                    'replace',
-                    'replaceCallback',
-                ], true)
-            ) {
-                foreach ($constantArrayType->getValueTypes() as $arrayKeyType) {
-                    foreach ($arrayKeyType->getConstantStrings() as $constantString) {
-                        $patternStrings[] = $constantString->getValue();
-                    }
-                }
-            }
-
-            if ($functionName !== 'replaceCallbackArray') {
-                continue;
-            }
-
-            foreach ($constantArrayType->getKeyTypes() as $arrayKeyType) {
-                foreach ($arrayKeyType->getConstantStrings() as $constantString) {
-                    $patternStrings[] = $constantString->getValue();
-                }
-            }
-        }
-
-        return $patternStrings;
-    }
-
-    private function validatePattern(string $pattern): ?string
-    {
-        try {
-            $msg = null;
-            $prev = set_error_handler(function (int $severity, string $message, string $file) use (&$msg): bool {
-                $msg = preg_replace("#^preg_match(_all)?\\(.*?\\): #", '', $message);
-
-                return true;
-            });
-
-            if ($pattern === '') {
-                return 'Empty string is not a valid regular expression';
-            }
-
-            Preg::match($pattern, '');
-            if ($msg !== null) {
-                return $msg;
-            }
-        } catch (PcreException $e) {
-            if ($e->getCode() === PREG_INTERNAL_ERROR && $msg !== null) {
-                return $msg;
-            }
-
-            return preg_replace('{.*? failed executing ".*": }', '', $e->getMessage());
-        } finally {
-            restore_error_handler();
-        }
-
-        return null;
-    }
-
-}

+ 0 - 70
vendor/composer/pcre/src/PHPStan/PregMatchFlags.php

@@ -1,70 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace Composer\Pcre\PHPStan;
-
-use PHPStan\Analyser\Scope;
-use PHPStan\Type\ArrayType;
-use PHPStan\Type\Constant\ConstantArrayType;
-use PHPStan\Type\Constant\ConstantIntegerType;
-use PHPStan\Type\IntersectionType;
-use PHPStan\Type\TypeCombinator;
-use PHPStan\Type\Type;
-use PhpParser\Node\Arg;
-use PHPStan\Type\Php\RegexArrayShapeMatcher;
-use PHPStan\Type\TypeTraverser;
-use PHPStan\Type\UnionType;
-
-final class PregMatchFlags
-{
-    static public function getType(?Arg $flagsArg, Scope $scope): ?Type
-    {
-        if ($flagsArg === null) {
-            return new ConstantIntegerType(PREG_UNMATCHED_AS_NULL);
-        }
-
-        $flagsType = $scope->getType($flagsArg->value);
-
-        $constantScalars = $flagsType->getConstantScalarValues();
-        if ($constantScalars === []) {
-            return null;
-        }
-
-        $internalFlagsTypes = [];
-        foreach ($flagsType->getConstantScalarValues() as $constantScalarValue) {
-            if (!is_int($constantScalarValue)) {
-                return null;
-            }
-
-            $internalFlagsTypes[] = new ConstantIntegerType($constantScalarValue | PREG_UNMATCHED_AS_NULL);
-        }
-        return TypeCombinator::union(...$internalFlagsTypes);
-    }
-
-    static public function removeNullFromMatches(Type $matchesType): Type
-    {
-        return TypeTraverser::map($matchesType, static function (Type $type, callable $traverse): Type {
-            if ($type instanceof UnionType || $type instanceof IntersectionType) {
-                return $traverse($type);
-            }
-
-            if ($type instanceof ConstantArrayType) {
-                return new ConstantArrayType(
-                    $type->getKeyTypes(),
-                    array_map(static function (Type $valueType) use ($traverse): Type {
-                        return $traverse($valueType);
-                    }, $type->getValueTypes()),
-                    $type->getNextAutoIndexes(),
-                    [],
-                    $type->isList()
-                );
-            }
-
-            if ($type instanceof ArrayType) {
-                return new ArrayType($type->getKeyType(), $traverse($type->getItemType()));
-            }
-
-            return TypeCombinator::removeNull($type);
-        });
-    }
-
-}

+ 0 - 65
vendor/composer/pcre/src/PHPStan/PregMatchParameterOutTypeExtension.php

@@ -1,65 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace Composer\Pcre\PHPStan;
-
-use Composer\Pcre\Preg;
-use PhpParser\Node\Expr\StaticCall;
-use PHPStan\Analyser\Scope;
-use PHPStan\Reflection\MethodReflection;
-use PHPStan\Reflection\ParameterReflection;
-use PHPStan\TrinaryLogic;
-use PHPStan\Type\Php\RegexArrayShapeMatcher;
-use PHPStan\Type\StaticMethodParameterOutTypeExtension;
-use PHPStan\Type\Type;
-
-final class PregMatchParameterOutTypeExtension implements StaticMethodParameterOutTypeExtension
-{
-    /**
-     * @var RegexArrayShapeMatcher
-     */
-    private $regexShapeMatcher;
-
-    public function __construct(
-        RegexArrayShapeMatcher $regexShapeMatcher
-    )
-    {
-        $this->regexShapeMatcher = $regexShapeMatcher;
-    }
-
-    public function isStaticMethodSupported(MethodReflection $methodReflection, ParameterReflection $parameter): bool
-    {
-        return
-            $methodReflection->getDeclaringClass()->getName() === Preg::class
-            && in_array($methodReflection->getName(), [
-                'match', 'isMatch', 'matchStrictGroups', 'isMatchStrictGroups',
-                'matchAll', 'isMatchAll', 'matchAllStrictGroups', 'isMatchAllStrictGroups'
-            ], true)
-            && $parameter->getName() === 'matches';
-    }
-
-    public function getParameterOutTypeFromStaticMethodCall(MethodReflection $methodReflection, StaticCall $methodCall, ParameterReflection $parameter, Scope $scope): ?Type
-    {
-        $args = $methodCall->getArgs();
-        $patternArg = $args[0] ?? null;
-        $matchesArg = $args[2] ?? null;
-        $flagsArg = $args[3] ?? null;
-
-        if (
-            $patternArg === null || $matchesArg === null
-        ) {
-            return null;
-        }
-
-        $flagsType = PregMatchFlags::getType($flagsArg, $scope);
-        if ($flagsType === null) {
-            return null;
-        }
-
-        if (stripos($methodReflection->getName(), 'matchAll') !== false) {
-            return $this->regexShapeMatcher->matchAllExpr($patternArg->value, $flagsType, TrinaryLogic::createMaybe(), $scope);
-        }
-
-        return $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createMaybe(), $scope);
-    }
-
-}

+ 0 - 119
vendor/composer/pcre/src/PHPStan/PregMatchTypeSpecifyingExtension.php

@@ -1,119 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace Composer\Pcre\PHPStan;
-
-use Composer\Pcre\Preg;
-use PhpParser\Node\Expr\StaticCall;
-use PHPStan\Analyser\Scope;
-use PHPStan\Analyser\SpecifiedTypes;
-use PHPStan\Analyser\TypeSpecifier;
-use PHPStan\Analyser\TypeSpecifierAwareExtension;
-use PHPStan\Analyser\TypeSpecifierContext;
-use PHPStan\Reflection\MethodReflection;
-use PHPStan\TrinaryLogic;
-use PHPStan\Type\Constant\ConstantArrayType;
-use PHPStan\Type\Php\RegexArrayShapeMatcher;
-use PHPStan\Type\StaticMethodTypeSpecifyingExtension;
-use PHPStan\Type\TypeCombinator;
-use PHPStan\Type\Type;
-
-final class PregMatchTypeSpecifyingExtension implements StaticMethodTypeSpecifyingExtension, TypeSpecifierAwareExtension
-{
-    /**
-     * @var TypeSpecifier
-     */
-    private $typeSpecifier;
-
-    /**
-     * @var RegexArrayShapeMatcher
-     */
-    private $regexShapeMatcher;
-
-    public function __construct(RegexArrayShapeMatcher $regexShapeMatcher)
-    {
-        $this->regexShapeMatcher = $regexShapeMatcher;
-    }
-
-    public function setTypeSpecifier(TypeSpecifier $typeSpecifier): void
-    {
-        $this->typeSpecifier = $typeSpecifier;
-    }
-
-    public function getClass(): string
-    {
-        return Preg::class;
-    }
-
-    public function isStaticMethodSupported(MethodReflection $methodReflection, StaticCall $node, TypeSpecifierContext $context): bool
-    {
-        return in_array($methodReflection->getName(), [
-                'match', 'isMatch', 'matchStrictGroups', 'isMatchStrictGroups',
-                'matchAll', 'isMatchAll', 'matchAllStrictGroups', 'isMatchAllStrictGroups'
-            ], true)
-            && !$context->null();
-    }
-
-    public function specifyTypes(MethodReflection $methodReflection, StaticCall $node, Scope $scope, TypeSpecifierContext $context): SpecifiedTypes
-    {
-        $args = $node->getArgs();
-        $patternArg = $args[0] ?? null;
-        $matchesArg = $args[2] ?? null;
-        $flagsArg = $args[3] ?? null;
-
-        if (
-            $patternArg === null || $matchesArg === null
-        ) {
-            return new SpecifiedTypes();
-        }
-
-        $flagsType = PregMatchFlags::getType($flagsArg, $scope);
-        if ($flagsType === null) {
-            return new SpecifiedTypes();
-        }
-
-        if (stripos($methodReflection->getName(), 'matchAll') !== false) {
-            $matchedType = $this->regexShapeMatcher->matchAllExpr($patternArg->value, $flagsType, TrinaryLogic::createFromBoolean($context->true()), $scope);
-        } else {
-            $matchedType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createFromBoolean($context->true()), $scope);
-        }
-
-        if ($matchedType === null) {
-            return new SpecifiedTypes();
-        }
-
-        if (
-            in_array($methodReflection->getName(), ['matchStrictGroups', 'isMatchStrictGroups', 'matchAllStrictGroups', 'isMatchAllStrictGroups'], true)
-        ) {
-            $matchedType = PregMatchFlags::removeNullFromMatches($matchedType);
-        }
-
-        $overwrite = false;
-        if ($context->false()) {
-            $overwrite = true;
-            $context = $context->negate();
-        }
-
-        // @phpstan-ignore function.alreadyNarrowedType
-        if (method_exists('PHPStan\Analyser\SpecifiedTypes', 'setRootExpr')) {
-            $typeSpecifier = $this->typeSpecifier->create(
-                $matchesArg->value,
-                $matchedType,
-                $context,
-                $scope
-            )->setRootExpr($node);
-
-            return $overwrite ? $typeSpecifier->setAlwaysOverwriteTypes() : $typeSpecifier;
-        }
-
-        // @phpstan-ignore arguments.count
-        return $this->typeSpecifier->create(
-            $matchesArg->value,
-            $matchedType,
-            $context,
-            // @phpstan-ignore argument.type
-            $overwrite,
-            $scope,
-            $node
-        );
-    }
-}

+ 0 - 91
vendor/composer/pcre/src/PHPStan/PregReplaceCallbackClosureTypeExtension.php

@@ -1,91 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace Composer\Pcre\PHPStan;
-
-use Composer\Pcre\Preg;
-use Composer\Pcre\Regex;
-use PhpParser\Node\Expr\StaticCall;
-use PHPStan\Analyser\Scope;
-use PHPStan\Reflection\MethodReflection;
-use PHPStan\Reflection\Native\NativeParameterReflection;
-use PHPStan\Reflection\ParameterReflection;
-use PHPStan\TrinaryLogic;
-use PHPStan\Type\ClosureType;
-use PHPStan\Type\Constant\ConstantArrayType;
-use PHPStan\Type\Php\RegexArrayShapeMatcher;
-use PHPStan\Type\StaticMethodParameterClosureTypeExtension;
-use PHPStan\Type\StringType;
-use PHPStan\Type\TypeCombinator;
-use PHPStan\Type\Type;
-
-final class PregReplaceCallbackClosureTypeExtension implements StaticMethodParameterClosureTypeExtension
-{
-    /**
-     * @var RegexArrayShapeMatcher
-     */
-    private $regexShapeMatcher;
-
-    public function __construct(RegexArrayShapeMatcher $regexShapeMatcher)
-    {
-        $this->regexShapeMatcher = $regexShapeMatcher;
-    }
-
-    public function isStaticMethodSupported(MethodReflection $methodReflection, ParameterReflection $parameter): bool
-    {
-        return in_array($methodReflection->getDeclaringClass()->getName(), [Preg::class, Regex::class], true)
-            && in_array($methodReflection->getName(), ['replaceCallback', 'replaceCallbackStrictGroups'], true)
-            && $parameter->getName() === 'replacement';
-    }
-
-    public function getTypeFromStaticMethodCall(MethodReflection $methodReflection, StaticCall $methodCall, ParameterReflection $parameter, Scope $scope): ?Type
-    {
-        $args = $methodCall->getArgs();
-        $patternArg = $args[0] ?? null;
-        $flagsArg = $args[5] ?? null;
-
-        if (
-            $patternArg === null
-        ) {
-            return null;
-        }
-
-        $flagsType = PregMatchFlags::getType($flagsArg, $scope);
-
-        $matchesType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createYes(), $scope);
-        if ($matchesType === null) {
-            return null;
-        }
-
-        if ($methodReflection->getName() === 'replaceCallbackStrictGroups' && count($matchesType->getConstantArrays()) === 1) {
-            $matchesType = $matchesType->getConstantArrays()[0];
-            $matchesType = new ConstantArrayType(
-                $matchesType->getKeyTypes(),
-                array_map(static function (Type $valueType): Type {
-                    if (count($valueType->getConstantArrays()) === 1) {
-                        $valueTypeArray = $valueType->getConstantArrays()[0];
-                        return new ConstantArrayType(
-                            $valueTypeArray->getKeyTypes(),
-                            array_map(static function (Type $valueType): Type {
-                                return TypeCombinator::removeNull($valueType);
-                            }, $valueTypeArray->getValueTypes()),
-                            $valueTypeArray->getNextAutoIndexes(),
-                            [],
-                            $valueTypeArray->isList()
-                        );
-                    }
-                    return TypeCombinator::removeNull($valueType);
-                }, $matchesType->getValueTypes()),
-                $matchesType->getNextAutoIndexes(),
-                [],
-                $matchesType->isList()
-            );
-        }
-
-        return new ClosureType(
-            [
-                new NativeParameterReflection($parameter->getName(), $parameter->isOptional(), $matchesType, $parameter->passedByReference(), $parameter->isVariadic(), $parameter->getDefaultValue()),
-            ],
-            new StringType()
-        );
-    }
-}

+ 0 - 112
vendor/composer/pcre/src/PHPStan/UnsafeStrictGroupsCallRule.php

@@ -1,112 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace Composer\Pcre\PHPStan;
-
-use Composer\Pcre\Preg;
-use Composer\Pcre\Regex;
-use PhpParser\Node;
-use PhpParser\Node\Expr\StaticCall;
-use PhpParser\Node\Name\FullyQualified;
-use PHPStan\Analyser\Scope;
-use PHPStan\Analyser\SpecifiedTypes;
-use PHPStan\Rules\Rule;
-use PHPStan\Rules\RuleErrorBuilder;
-use PHPStan\TrinaryLogic;
-use PHPStan\Type\ObjectType;
-use PHPStan\Type\Type;
-use PHPStan\Type\TypeCombinator;
-use PHPStan\Type\Php\RegexArrayShapeMatcher;
-use function sprintf;
-
-/**
- * @implements Rule<StaticCall>
- */
-final class UnsafeStrictGroupsCallRule implements Rule
-{
-    /**
-     * @var RegexArrayShapeMatcher
-     */
-    private $regexShapeMatcher;
-
-    public function __construct(RegexArrayShapeMatcher $regexShapeMatcher)
-    {
-        $this->regexShapeMatcher = $regexShapeMatcher;
-    }
-
-    public function getNodeType(): string
-    {
-        return StaticCall::class;
-    }
-
-    public function processNode(Node $node, Scope $scope): array
-    {
-        if (!$node->class instanceof FullyQualified) {
-            return [];
-        }
-        $isRegex = $node->class->toString() === Regex::class;
-        $isPreg = $node->class->toString() === Preg::class;
-        if (!$isRegex && !$isPreg) {
-            return [];
-        }
-        if (!$node->name instanceof Node\Identifier || !in_array($node->name->name, ['matchStrictGroups', 'isMatchStrictGroups', 'matchAllStrictGroups', 'isMatchAllStrictGroups'], true)) {
-            return [];
-        }
-
-        $args = $node->getArgs();
-        if (!isset($args[0])) {
-            return [];
-        }
-
-        $patternArg = $args[0] ?? null;
-        if ($isPreg) {
-            if (!isset($args[2])) { // no matches set, skip as the matches won't be used anyway
-                return [];
-            }
-            $flagsArg = $args[3] ?? null;
-        } else {
-            $flagsArg = $args[2] ?? null;
-        }
-
-        if ($patternArg === null) {
-            return [];
-        }
-
-        $flagsType = PregMatchFlags::getType($flagsArg, $scope);
-        if ($flagsType === null) {
-            return [];
-        }
-
-        $matchedType = $this->regexShapeMatcher->matchExpr($patternArg->value, $flagsType, TrinaryLogic::createYes(), $scope);
-        if ($matchedType === null) {
-            return [
-                RuleErrorBuilder::message(sprintf('The %s call is potentially unsafe as $matches\' type could not be inferred.', $node->name->name))
-                    ->identifier('composerPcre.maybeUnsafeStrictGroups')
-                    ->build(),
-            ];
-        }
-
-        if (count($matchedType->getConstantArrays()) === 1) {
-            $matchedType = $matchedType->getConstantArrays()[0];
-            $nullableGroups = [];
-            foreach ($matchedType->getValueTypes() as $index => $type) {
-                if (TypeCombinator::containsNull($type)) {
-                    $nullableGroups[] = $matchedType->getKeyTypes()[$index]->getValue();
-                }
-            }
-
-            if (\count($nullableGroups) > 0) {
-                return [
-                    RuleErrorBuilder::message(sprintf(
-                        'The %s call is unsafe as match group%s "%s" %s optional and may be null.',
-                        $node->name->name,
-                        \count($nullableGroups) > 1 ? 's' : '',
-                        implode('", "', $nullableGroups),
-                        \count($nullableGroups) > 1 ? 'are' : 'is'
-                    ))->identifier('composerPcre.unsafeStrictGroups')->build(),
-                ];
-            }
-        }
-
-        return [];
-    }
-}

+ 0 - 55
vendor/composer/pcre/src/PcreException.php

@@ -1,55 +0,0 @@
-<?php
-
-/*
- * This file is part of composer/pcre.
- *
- * (c) Composer <https://github.com/composer>
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\Pcre;
-
-class PcreException extends \RuntimeException
-{
-    /**
-     * @param  string $function
-     * @param  string|string[] $pattern
-     * @return self
-     */
-    public static function fromFunction($function, $pattern)
-    {
-        $code = preg_last_error();
-
-        if (is_array($pattern)) {
-            $pattern = implode(', ', $pattern);
-        }
-
-        return new PcreException($function.'(): failed executing "'.$pattern.'": '.self::pcreLastErrorMessage($code), $code);
-    }
-
-    /**
-     * @param  int $code
-     * @return string
-     */
-    private static function pcreLastErrorMessage($code)
-    {
-        if (function_exists('preg_last_error_msg')) {
-            return preg_last_error_msg();
-        }
-
-        $constants = get_defined_constants(true);
-        if (!isset($constants['pcre']) || !is_array($constants['pcre'])) {
-            return 'UNDEFINED_ERROR';
-        }
-
-        foreach ($constants['pcre'] as $const => $val) {
-            if ($val === $code && substr($const, -6) === '_ERROR') {
-                return $const;
-            }
-        }
-
-        return 'UNDEFINED_ERROR';
-    }
-}

+ 0 - 430
vendor/composer/pcre/src/Preg.php

@@ -1,430 +0,0 @@
-<?php
-
-/*
- * This file is part of composer/pcre.
- *
- * (c) Composer <https://github.com/composer>
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\Pcre;
-
-class Preg
-{
-    /** @internal */
-    public const ARRAY_MSG = '$subject as an array is not supported. You can use \'foreach\' instead.';
-    /** @internal */
-    public const INVALID_TYPE_MSG = '$subject must be a string, %s given.';
-
-    /**
-     * @param non-empty-string   $pattern
-     * @param array<mixed> $matches Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     * @return 0|1
-     *
-     * @param-out array<int|string, string|null> $matches
-     */
-    public static function match(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): int
-    {
-        self::checkOffsetCapture($flags, 'matchWithOffsets');
-
-        $result = preg_match($pattern, $subject, $matches, $flags | PREG_UNMATCHED_AS_NULL, $offset);
-        if ($result === false) {
-            throw PcreException::fromFunction('preg_match', $pattern);
-        }
-
-        return $result;
-    }
-
-    /**
-     * Variant of `match()` which outputs non-null matches (or throws)
-     *
-     * @param non-empty-string $pattern
-     * @param array<mixed> $matches Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     * @return 0|1
-     * @throws UnexpectedNullMatchException
-     *
-     * @param-out array<int|string, string> $matches
-     */
-    public static function matchStrictGroups(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): int
-    {
-        $result = self::match($pattern, $subject, $matchesInternal, $flags, $offset);
-        $matches = self::enforceNonNullMatches($pattern, $matchesInternal, 'match');
-
-        return $result;
-    }
-
-    /**
-     * Runs preg_match with PREG_OFFSET_CAPTURE
-     *
-     * @param non-empty-string   $pattern
-     * @param array<mixed> $matches Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL|PREG_OFFSET_CAPTURE> $flags PREG_UNMATCHED_AS_NULL and PREG_OFFSET_CAPTURE are always set, no other flags are supported
-     * @return 0|1
-     *
-     * @param-out array<int|string, array{string|null, int<-1, max>}> $matches
-     */
-    public static function matchWithOffsets(string $pattern, string $subject, ?array &$matches, int $flags = 0, int $offset = 0): int
-    {
-        $result = preg_match($pattern, $subject, $matches, $flags | PREG_UNMATCHED_AS_NULL | PREG_OFFSET_CAPTURE, $offset);
-        if ($result === false) {
-            throw PcreException::fromFunction('preg_match', $pattern);
-        }
-
-        return $result;
-    }
-
-    /**
-     * @param non-empty-string   $pattern
-     * @param array<mixed> $matches Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     * @return 0|positive-int
-     *
-     * @param-out array<int|string, list<string|null>> $matches
-     */
-    public static function matchAll(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): int
-    {
-        self::checkOffsetCapture($flags, 'matchAllWithOffsets');
-        self::checkSetOrder($flags);
-
-        $result = preg_match_all($pattern, $subject, $matches, $flags | PREG_UNMATCHED_AS_NULL, $offset);
-        if (!is_int($result)) { // PHP < 8 may return null, 8+ returns int|false
-            throw PcreException::fromFunction('preg_match_all', $pattern);
-        }
-
-        return $result;
-    }
-
-    /**
-     * Variant of `match()` which outputs non-null matches (or throws)
-     *
-     * @param non-empty-string   $pattern
-     * @param array<mixed> $matches Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     * @return 0|positive-int
-     * @throws UnexpectedNullMatchException
-     *
-     * @param-out array<int|string, list<string>> $matches
-     */
-    public static function matchAllStrictGroups(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): int
-    {
-        $result = self::matchAll($pattern, $subject, $matchesInternal, $flags, $offset);
-        $matches = self::enforceNonNullMatchAll($pattern, $matchesInternal, 'matchAll');
-
-        return $result;
-    }
-
-    /**
-     * Runs preg_match_all with PREG_OFFSET_CAPTURE
-     *
-     * @param non-empty-string   $pattern
-     * @param array<mixed> $matches Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL|PREG_OFFSET_CAPTURE> $flags PREG_UNMATCHED_AS_NULL and PREG_MATCH_OFFSET are always set, no other flags are supported
-     * @return 0|positive-int
-     *
-     * @param-out array<int|string, list<array{string|null, int<-1, max>}>> $matches
-     */
-    public static function matchAllWithOffsets(string $pattern, string $subject, ?array &$matches, int $flags = 0, int $offset = 0): int
-    {
-        self::checkSetOrder($flags);
-
-        $result = preg_match_all($pattern, $subject, $matches, $flags | PREG_UNMATCHED_AS_NULL | PREG_OFFSET_CAPTURE, $offset);
-        if (!is_int($result)) { // PHP < 8 may return null, 8+ returns int|false
-            throw PcreException::fromFunction('preg_match_all', $pattern);
-        }
-
-        return $result;
-    }
-
-    /**
-     * @param string|string[] $pattern
-     * @param string|string[] $replacement
-     * @param string $subject
-     * @param int             $count Set by method
-     *
-     * @param-out int<0, max> $count
-     */
-    public static function replace($pattern, $replacement, $subject, int $limit = -1, ?int &$count = null): string
-    {
-        if (!is_scalar($subject)) {
-            if (is_array($subject)) {
-                throw new \InvalidArgumentException(static::ARRAY_MSG);
-            }
-
-            throw new \TypeError(sprintf(static::INVALID_TYPE_MSG, gettype($subject)));
-        }
-
-        $result = preg_replace($pattern, $replacement, $subject, $limit, $count);
-        if ($result === null) {
-            throw PcreException::fromFunction('preg_replace', $pattern);
-        }
-
-        return $result;
-    }
-
-    /**
-     * @param string|string[] $pattern
-     * @param ($flags is PREG_OFFSET_CAPTURE ? (callable(array<int|string, array{string|null, int<-1, max>}>): string) : callable(array<int|string, string|null>): string) $replacement
-     * @param string $subject
-     * @param int             $count Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL|PREG_OFFSET_CAPTURE> $flags PREG_OFFSET_CAPTURE is supported, PREG_UNMATCHED_AS_NULL is always set
-     *
-     * @param-out int<0, max> $count
-     */
-    public static function replaceCallback($pattern, callable $replacement, $subject, int $limit = -1, ?int &$count = null, int $flags = 0): string
-    {
-        if (!is_scalar($subject)) {
-            if (is_array($subject)) {
-                throw new \InvalidArgumentException(static::ARRAY_MSG);
-            }
-
-            throw new \TypeError(sprintf(static::INVALID_TYPE_MSG, gettype($subject)));
-        }
-
-        $result = preg_replace_callback($pattern, $replacement, $subject, $limit, $count, $flags | PREG_UNMATCHED_AS_NULL);
-        if ($result === null) {
-            throw PcreException::fromFunction('preg_replace_callback', $pattern);
-        }
-
-        return $result;
-    }
-
-    /**
-     * Variant of `replaceCallback()` which outputs non-null matches (or throws)
-     *
-     * @param string $pattern
-     * @param ($flags is PREG_OFFSET_CAPTURE ? (callable(array<int|string, array{string, int<0, max>}>): string) : callable(array<int|string, string>): string) $replacement
-     * @param string $subject
-     * @param int $count Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL|PREG_OFFSET_CAPTURE> $flags PREG_OFFSET_CAPTURE is supported, PREG_UNMATCHED_AS_NULL is always set
-     *
-     * @param-out int<0, max> $count
-     */
-    public static function replaceCallbackStrictGroups(string $pattern, callable $replacement, $subject, int $limit = -1, ?int &$count = null, int $flags = 0): string
-    {
-        return self::replaceCallback($pattern, function (array $matches) use ($pattern, $replacement) {
-            return $replacement(self::enforceNonNullMatches($pattern, $matches, 'replaceCallback'));
-        }, $subject, $limit, $count, $flags);
-    }
-
-    /**
-     * @param ($flags is PREG_OFFSET_CAPTURE ? (array<string, callable(array<int|string, array{string|null, int<-1, max>}>): string>) : array<string, callable(array<int|string, string|null>): string>) $pattern
-     * @param string $subject
-     * @param int    $count Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL|PREG_OFFSET_CAPTURE> $flags PREG_OFFSET_CAPTURE is supported, PREG_UNMATCHED_AS_NULL is always set
-     *
-     * @param-out int<0, max> $count
-     */
-    public static function replaceCallbackArray(array $pattern, $subject, int $limit = -1, ?int &$count = null, int $flags = 0): string
-    {
-        if (!is_scalar($subject)) {
-            if (is_array($subject)) {
-                throw new \InvalidArgumentException(static::ARRAY_MSG);
-            }
-
-            throw new \TypeError(sprintf(static::INVALID_TYPE_MSG, gettype($subject)));
-        }
-
-        $result = preg_replace_callback_array($pattern, $subject, $limit, $count, $flags | PREG_UNMATCHED_AS_NULL);
-        if ($result === null) {
-            $pattern = array_keys($pattern);
-            throw PcreException::fromFunction('preg_replace_callback_array', $pattern);
-        }
-
-        return $result;
-    }
-
-    /**
-     * @param int-mask<PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_OFFSET_CAPTURE> $flags PREG_SPLIT_NO_EMPTY or PREG_SPLIT_DELIM_CAPTURE
-     * @return list<string>
-     */
-    public static function split(string $pattern, string $subject, int $limit = -1, int $flags = 0): array
-    {
-        if (($flags & PREG_SPLIT_OFFSET_CAPTURE) !== 0) {
-            throw new \InvalidArgumentException('PREG_SPLIT_OFFSET_CAPTURE is not supported as it changes the type of $matches, use splitWithOffsets() instead');
-        }
-
-        $result = preg_split($pattern, $subject, $limit, $flags);
-        if ($result === false) {
-            throw PcreException::fromFunction('preg_split', $pattern);
-        }
-
-        return $result;
-    }
-
-    /**
-     * @param int-mask<PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_OFFSET_CAPTURE> $flags PREG_SPLIT_NO_EMPTY or PREG_SPLIT_DELIM_CAPTURE, PREG_SPLIT_OFFSET_CAPTURE is always set
-     * @return list<array{string, int}>
-     * @phpstan-return list<array{string, int<0, max>}>
-     */
-    public static function splitWithOffsets(string $pattern, string $subject, int $limit = -1, int $flags = 0): array
-    {
-        $result = preg_split($pattern, $subject, $limit, $flags | PREG_SPLIT_OFFSET_CAPTURE);
-        if ($result === false) {
-            throw PcreException::fromFunction('preg_split', $pattern);
-        }
-
-        return $result;
-    }
-
-    /**
-     * @template T of string|\Stringable
-     * @param string   $pattern
-     * @param array<T> $array
-     * @param int-mask<PREG_GREP_INVERT> $flags PREG_GREP_INVERT
-     * @return array<T>
-     */
-    public static function grep(string $pattern, array $array, int $flags = 0): array
-    {
-        $result = preg_grep($pattern, $array, $flags);
-        if ($result === false) {
-            throw PcreException::fromFunction('preg_grep', $pattern);
-        }
-
-        return $result;
-    }
-
-    /**
-     * Variant of match() which returns a bool instead of int
-     *
-     * @param non-empty-string   $pattern
-     * @param array<mixed> $matches Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     *
-     * @param-out array<int|string, string|null> $matches
-     */
-    public static function isMatch(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): bool
-    {
-        return (bool) static::match($pattern, $subject, $matches, $flags, $offset);
-    }
-
-    /**
-     * Variant of `isMatch()` which outputs non-null matches (or throws)
-     *
-     * @param non-empty-string $pattern
-     * @param array<mixed> $matches Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     * @throws UnexpectedNullMatchException
-     *
-     * @param-out array<int|string, string> $matches
-     */
-    public static function isMatchStrictGroups(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): bool
-    {
-        return (bool) self::matchStrictGroups($pattern, $subject, $matches, $flags, $offset);
-    }
-
-    /**
-     * Variant of matchAll() which returns a bool instead of int
-     *
-     * @param non-empty-string   $pattern
-     * @param array<mixed> $matches Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     *
-     * @param-out array<int|string, list<string|null>> $matches
-     */
-    public static function isMatchAll(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): bool
-    {
-        return (bool) static::matchAll($pattern, $subject, $matches, $flags, $offset);
-    }
-
-    /**
-     * Variant of `isMatchAll()` which outputs non-null matches (or throws)
-     *
-     * @param non-empty-string $pattern
-     * @param array<mixed> $matches Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     *
-     * @param-out array<int|string, list<string>> $matches
-     */
-    public static function isMatchAllStrictGroups(string $pattern, string $subject, ?array &$matches = null, int $flags = 0, int $offset = 0): bool
-    {
-        return (bool) self::matchAllStrictGroups($pattern, $subject, $matches, $flags, $offset);
-    }
-
-    /**
-     * Variant of matchWithOffsets() which returns a bool instead of int
-     *
-     * Runs preg_match with PREG_OFFSET_CAPTURE
-     *
-     * @param non-empty-string   $pattern
-     * @param array<mixed> $matches Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     *
-     * @param-out array<int|string, array{string|null, int<-1, max>}> $matches
-     */
-    public static function isMatchWithOffsets(string $pattern, string $subject, ?array &$matches, int $flags = 0, int $offset = 0): bool
-    {
-        return (bool) static::matchWithOffsets($pattern, $subject, $matches, $flags, $offset);
-    }
-
-    /**
-     * Variant of matchAllWithOffsets() which returns a bool instead of int
-     *
-     * Runs preg_match_all with PREG_OFFSET_CAPTURE
-     *
-     * @param non-empty-string   $pattern
-     * @param array<mixed> $matches Set by method
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     *
-     * @param-out array<int|string, list<array{string|null, int<-1, max>}>> $matches
-     */
-    public static function isMatchAllWithOffsets(string $pattern, string $subject, ?array &$matches, int $flags = 0, int $offset = 0): bool
-    {
-        return (bool) static::matchAllWithOffsets($pattern, $subject, $matches, $flags, $offset);
-    }
-
-    private static function checkOffsetCapture(int $flags, string $useFunctionName): void
-    {
-        if (($flags & PREG_OFFSET_CAPTURE) !== 0) {
-            throw new \InvalidArgumentException('PREG_OFFSET_CAPTURE is not supported as it changes the type of $matches, use ' . $useFunctionName . '() instead');
-        }
-    }
-
-    private static function checkSetOrder(int $flags): void
-    {
-        if (($flags & PREG_SET_ORDER) !== 0) {
-            throw new \InvalidArgumentException('PREG_SET_ORDER is not supported as it changes the type of $matches');
-        }
-    }
-
-    /**
-     * @param array<int|string, string|null|array{string|null, int}> $matches
-     * @return array<int|string, string>
-     * @throws UnexpectedNullMatchException
-     */
-    private static function enforceNonNullMatches(string $pattern, array $matches, string $variantMethod)
-    {
-        foreach ($matches as $group => $match) {
-            if (is_string($match) || (is_array($match) && is_string($match[0]))) {
-                continue;
-            }
-
-            throw new UnexpectedNullMatchException('Pattern "'.$pattern.'" had an unexpected unmatched group "'.$group.'", make sure the pattern always matches or use '.$variantMethod.'() instead.');
-        }
-
-        /** @var array<string> */
-        return $matches;
-    }
-
-    /**
-     * @param array<int|string, list<string|null>> $matches
-     * @return array<int|string, list<string>>
-     * @throws UnexpectedNullMatchException
-     */
-    private static function enforceNonNullMatchAll(string $pattern, array $matches, string $variantMethod)
-    {
-        foreach ($matches as $group => $groupMatches) {
-            foreach ($groupMatches as $match) {
-                if (null === $match) {
-                    throw new UnexpectedNullMatchException('Pattern "'.$pattern.'" had an unexpected unmatched group "'.$group.'", make sure the pattern always matches or use '.$variantMethod.'() instead.');
-                }
-            }
-        }
-
-        /** @var array<int|string, list<string>> */
-        return $matches;
-    }
-}

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

@@ -1,176 +0,0 @@
-<?php
-
-/*
- * This file is part of composer/pcre.
- *
- * (c) Composer <https://github.com/composer>
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\Pcre;
-
-class Regex
-{
-    /**
-     * @param non-empty-string $pattern
-     */
-    public static function isMatch(string $pattern, string $subject, int $offset = 0): bool
-    {
-        return (bool) Preg::match($pattern, $subject, $matches, 0, $offset);
-    }
-
-    /**
-     * @param non-empty-string $pattern
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     */
-    public static function match(string $pattern, string $subject, int $flags = 0, int $offset = 0): MatchResult
-    {
-        self::checkOffsetCapture($flags, 'matchWithOffsets');
-
-        $count = Preg::match($pattern, $subject, $matches, $flags, $offset);
-
-        return new MatchResult($count, $matches);
-    }
-
-    /**
-     * Variant of `match()` which returns non-null matches (or throws)
-     *
-     * @param non-empty-string $pattern
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     * @throws UnexpectedNullMatchException
-     */
-    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);
-    }
-
-    /**
-     * Runs preg_match with PREG_OFFSET_CAPTURE
-     *
-     * @param non-empty-string $pattern
-     * @param int-mask<PREG_UNMATCHED_AS_NULL|PREG_OFFSET_CAPTURE> $flags PREG_UNMATCHED_AS_NULL and PREG_MATCH_OFFSET are always set, no other flags are supported
-     */
-    public static function matchWithOffsets(string $pattern, string $subject, int $flags = 0, int $offset = 0): MatchWithOffsetsResult
-    {
-        $count = Preg::matchWithOffsets($pattern, $subject, $matches, $flags, $offset);
-
-        return new MatchWithOffsetsResult($count, $matches);
-    }
-
-    /**
-     * @param non-empty-string $pattern
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     */
-    public static function matchAll(string $pattern, string $subject, int $flags = 0, int $offset = 0): MatchAllResult
-    {
-        self::checkOffsetCapture($flags, 'matchAllWithOffsets');
-        self::checkSetOrder($flags);
-
-        $count = Preg::matchAll($pattern, $subject, $matches, $flags, $offset);
-
-        return new MatchAllResult($count, $matches);
-    }
-
-    /**
-     * Variant of `matchAll()` which returns non-null matches (or throws)
-     *
-     * @param non-empty-string $pattern
-     * @param int-mask<PREG_UNMATCHED_AS_NULL> $flags PREG_UNMATCHED_AS_NULL is always set, no other flags are supported
-     * @throws UnexpectedNullMatchException
-     */
-    public static function matchAllStrictGroups(string $pattern, string $subject, int $flags = 0, int $offset = 0): MatchAllStrictGroupsResult
-    {
-        self::checkOffsetCapture($flags, 'matchAllWithOffsets');
-        self::checkSetOrder($flags);
-
-        // @phpstan-ignore composerPcre.maybeUnsafeStrictGroups
-        $count = Preg::matchAllStrictGroups($pattern, $subject, $matches, $flags, $offset);
-
-        return new MatchAllStrictGroupsResult($count, $matches);
-    }
-
-    /**
-     * Runs preg_match_all with PREG_OFFSET_CAPTURE
-     *
-     * @param non-empty-string $pattern
-     * @param int-mask<PREG_UNMATCHED_AS_NULL|PREG_OFFSET_CAPTURE> $flags PREG_UNMATCHED_AS_NULL and PREG_MATCH_OFFSET are always set, no other flags are supported
-     */
-    public static function matchAllWithOffsets(string $pattern, string $subject, int $flags = 0, int $offset = 0): MatchAllWithOffsetsResult
-    {
-        self::checkSetOrder($flags);
-
-        $count = Preg::matchAllWithOffsets($pattern, $subject, $matches, $flags, $offset);
-
-        return new MatchAllWithOffsetsResult($count, $matches);
-    }
-    /**
-     * @param string|string[] $pattern
-     * @param string|string[] $replacement
-     * @param string          $subject
-     */
-    public static function replace($pattern, $replacement, $subject, int $limit = -1): ReplaceResult
-    {
-        $result = Preg::replace($pattern, $replacement, $subject, $limit, $count);
-
-        return new ReplaceResult($count, $result);
-    }
-
-    /**
-     * @param string|string[] $pattern
-     * @param ($flags is PREG_OFFSET_CAPTURE ? (callable(array<int|string, array{string|null, int<-1, max>}>): string) : callable(array<int|string, string|null>): string) $replacement
-     * @param string          $subject
-     * @param int-mask<PREG_UNMATCHED_AS_NULL|PREG_OFFSET_CAPTURE> $flags PREG_OFFSET_CAPTURE is supported, PREG_UNMATCHED_AS_NULL is always set
-     */
-    public static function replaceCallback($pattern, callable $replacement, $subject, int $limit = -1, int $flags = 0): ReplaceResult
-    {
-        $result = Preg::replaceCallback($pattern, $replacement, $subject, $limit, $count, $flags);
-
-        return new ReplaceResult($count, $result);
-    }
-
-    /**
-     * Variant of `replaceCallback()` which outputs non-null matches (or throws)
-     *
-     * @param string $pattern
-     * @param ($flags is PREG_OFFSET_CAPTURE ? (callable(array<int|string, array{string, int<0, max>}>): string) : callable(array<int|string, string>): string) $replacement
-     * @param string          $subject
-     * @param int-mask<PREG_UNMATCHED_AS_NULL|PREG_OFFSET_CAPTURE> $flags PREG_OFFSET_CAPTURE is supported, PREG_UNMATCHED_AS_NULL is always set
-     */
-    public static function replaceCallbackStrictGroups($pattern, callable $replacement, $subject, int $limit = -1, int $flags = 0): ReplaceResult
-    {
-        $result = Preg::replaceCallbackStrictGroups($pattern, $replacement, $subject, $limit, $count, $flags);
-
-        return new ReplaceResult($count, $result);
-    }
-
-    /**
-     * @param ($flags is PREG_OFFSET_CAPTURE ? (array<string, callable(array<int|string, array{string|null, int<-1, max>}>): string>) : array<string, callable(array<int|string, string|null>): string>) $pattern
-     * @param string $subject
-     * @param int-mask<PREG_UNMATCHED_AS_NULL|PREG_OFFSET_CAPTURE> $flags PREG_OFFSET_CAPTURE is supported, PREG_UNMATCHED_AS_NULL is always set
-     */
-    public static function replaceCallbackArray(array $pattern, $subject, int $limit = -1, int $flags = 0): ReplaceResult
-    {
-        $result = Preg::replaceCallbackArray($pattern, $subject, $limit, $count, $flags);
-
-        return new ReplaceResult($count, $result);
-    }
-
-    private static function checkOffsetCapture(int $flags, string $useFunctionName): void
-    {
-        if (($flags & PREG_OFFSET_CAPTURE) !== 0) {
-            throw new \InvalidArgumentException('PREG_OFFSET_CAPTURE is not supported as it changes the return type, use '.$useFunctionName.'() instead');
-        }
-    }
-
-    private static function checkSetOrder(int $flags): void
-    {
-        if (($flags & PREG_SET_ORDER) !== 0) {
-            throw new \InvalidArgumentException('PREG_SET_ORDER is not supported as it changes the return type');
-        }
-    }
-}

+ 0 - 43
vendor/composer/pcre/src/ReplaceResult.php

@@ -1,43 +0,0 @@
-<?php
-
-/*
- * This file is part of composer/pcre.
- *
- * (c) Composer <https://github.com/composer>
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\Pcre;
-
-final class ReplaceResult
-{
-    /**
-     * @readonly
-     * @var string
-     */
-    public $result;
-
-    /**
-     * @readonly
-     * @var 0|positive-int
-     */
-    public $count;
-
-    /**
-     * @readonly
-     * @var bool
-     */
-    public $matched;
-
-    /**
-     * @param 0|positive-int $count
-     */
-    public function __construct(int $count, string $result)
-    {
-        $this->count = $count;
-        $this->matched = (bool) $count;
-        $this->result = $result;
-    }
-}

+ 0 - 20
vendor/composer/pcre/src/UnexpectedNullMatchException.php

@@ -1,20 +0,0 @@
-<?php
-
-/*
- * This file is part of composer/pcre.
- *
- * (c) Composer <https://github.com/composer>
- *
- * For the full copyright and license information, please view
- * the LICENSE file that was distributed with this source code.
- */
-
-namespace Composer\Pcre;
-
-class UnexpectedNullMatchException extends PcreException
-{
-    public static function fromFunction($function, $pattern)
-    {
-        throw new \LogicException('fromFunction should not be called on '.self::class.', use '.PcreException::class);
-    }
-}

+ 0 - 26
vendor/composer/platform_check.php

@@ -1,26 +0,0 @@
-<?php
-
-// platform_check.php @generated by Composer
-
-$issues = array();
-
-if (!(PHP_VERSION_ID >= 80100)) {
-    $issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.';
-}
-
-if ($issues) {
-    if (!headers_sent()) {
-        header('HTTP/1.1 500 Internal Server Error');
-    }
-    if (!ini_get('display_errors')) {
-        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
-            fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
-        } elseif (!headers_sent()) {
-            echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
-        }
-    }
-    trigger_error(
-        'Composer detected issues in your platform: ' . implode(' ', $issues),
-        E_USER_ERROR
-    );
-}

+ 0 - 224
vendor/ergebnis/classy/CHANGELOG.md

@@ -1,224 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-## Unreleased
-
-For a full diff see [`1.9.0...main`][1.9.0...main].
-
-## [`1.9.0`][1.9.0]
-
-For a full diff see [`1.8.0...1.9.0`][1.8.0...1.9.0].
-
-### Added
-
-- Added support for PHP 8.5 ([#1075]), by [@localheinz]
-
-## [`1.8.0`][1.8.0]
-
-For a full diff see [`1.7.0...1.8.0`][1.7.0...1.8.0].
-
-### Changed
-
-- Allowed installation on PHP 8.5 ([#1068]), by [@localheinz]
-
-## [`1.7.0`][1.7.0]
-
-For a full diff see [`1.6.0...1.7.0`][1.6.0...1.7.0].
-
-### Added
-
-- Added support for PHP 8.0 ([#926]), by [@localheinz]
-- Added support for PHP 7.4 ([#929]), by [@localheinz]
-- Added support for PHP 8.4 ([#987]), by [@tacman]
-
-## [`1.6.0`][1.6.0]
-
-For a full diff see [`1.5.0...1.6.0`][1.5.0...1.6.0].
-
-### Added
-
-- Added support for PHP 8.3 ([#795]), by [@localheinz]
-
-## [`1.5.0`][1.5.0]
-
-For a full diff see [`1.4.0...1.5.0`][1.4.0...1.5.0].
-
-### Changed
-
-- Dropped support for PHP 8.0 ([#702]), by [@localheinz]
-
-## [`1.4.0`][1.4.0]
-
-For a full diff see [`1.3.0...1.4.0`][1.3.0...1.4.0].
-
-### Changed
-
-- Dropped support for PHP 7.4 ([#619]), by [@localheinz]
-
-## [`1.3.0`][1.3.0]
-
-For a full diff see [`1.2.0...1.3.0`][1.2.0...1.3.0].
-
-### Fixed
-
-- Dropped support for PHP 7.2 ([#481]), by [@localheinz]
-- Dropped support for PHP 7.3 ([#486]), by [@localheinz]
-
-## [`1.2.0`][1.2.0]
-
-For a full diff see [`1.1.1...1.2.0`][1.1.0...1.2.0].
-
-### Added
-
-- Added support for `enum` ([#478]), by [@localheinz]
-
-### Deprecated
-
-- Deprecated `Construct::__toString()` ([#467]), by [@localheinz]
-
-## [`1.1.1`][1.1.1]
-
-For a full diff see [`1.1.0...1.1.1`][1.1.0...1.1.1].
-
-### Fixed
-
-- Determine classy names within namespace with single segment on PHP 8.0 ([#343]), by [@localheinz]
-
-## [`1.1.0`][1.1.0]
-
-For a full diff see [`1.0.1...1.1.0`][1.0.1...1.1.0].
-
-### Changed
-
-- Added support for PHP 8.0 ([#235]), by [@localheinz]
-
-## [`1.0.1`][1.0.1]
-
-For a full diff see [`1.0.0...1.0.1`][1.0.0...1.0.1].
-
-### Changed
-
-- Dropped support for PHP 7.1 ([#231]), by [@localheinz]
-*
-## [`1.0.0`][1.0.0]
-
-For a full diff see [`0.5.2...1.0.0`][0.5.2...1.0.0].
-
-## [`0.5.2`][0.5.2]
-
-For a full diff see [`0.5.1...0.5.2`][0.5.1...0.5.2].
-
-### Fixed
-
-- Brought back support for PHP 7.1 ([#103]), by [@localheinz]
-
-## [`0.5.1`][0.5.1]
-
-For a full diff see [`0.5.0...0.5.1`][0.5.0...0.5.1].
-
-### Fixed
-
-- Removed an inappropriate `replace` configuration from `composer.json` ([#100]), by [@localheinz]
-
-## [`0.5.0`][0.5.0]
-
-For a full diff see [`0.4.0...0.5.0`][0.4.0...0.5.0].
-
-### Changed
-
-- Renamed vendor namespace `Localheinz` to `Ergebnis` after move to [@ergebnis] ([#88]), by [@localheinz]
-
-  Run
-
-  ```
-  $ composer remove localheinz/classy
-  ```
-
-  and
-
-  ```
-  $ composer require ergebnis/classy
-  ```
-
-  to update.
-
-  Run
-
-  ```
-  $ find . -type f -exec sed -i '.bak' 's/Localheinz\\Classy/Ergebnis\\Classy/g' {} \;
-  ```
-
-  to replace occurrences of `Localheinz\Classy` with `Ergebnis\Classy`.
-
-  Run
-
-  ```
-  $ find -type f -name '*.bak' -delete
-  ```
-
-  to delete backup files created in the previous step.
-
-### Fixed
-
-- Dropped support for PHP 7.1 ([#77]), by [@localheinz]
-
-[0.5.0]: https://github.com/localheinz/ergebnis/classy/releases/tag/0.5.0
-[0.5.1]: https://github.com/localheinz/ergebnis/classy/releases/tag/0.5.1
-[0.5.2]: https://github.com/localheinz/ergebnis/classy/releases/tag/0.5.2
-[1.0.0]: https://github.com/localheinz/ergebnis/classy/releases/tag/1.0.0
-[1.0.1]: https://github.com/localheinz/ergebnis/classy/releases/tag/1.0.1
-[1.1.0]: https://github.com/localheinz/ergebnis/classy/releases/tag/1.1.0
-[1.1.1]: https://github.com/localheinz/ergebnis/classy/releases/tag/1.1.1
-[1.2.0]: https://github.com/localheinz/ergebnis/classy/releases/tag/1.2.0
-[1.3.0]: https://github.com/localheinz/ergebnis/classy/releases/tag/1.3.0
-[1.4.0]: https://github.com/localheinz/ergebnis/classy/releases/tag/1.4.0
-[1.5.0]: https://github.com/localheinz/ergebnis/classy/releases/tag/1.5.0
-[1.6.0]: https://github.com/localheinz/ergebnis/classy/releases/tag/1.6.0
-[1.7.0]: https://github.com/localheinz/ergebnis/classy/releases/tag/1.7.0
-[1.8.0]: https://github.com/localheinz/ergebnis/classy/releases/tag/1.8.0
-[1.9.0]: https://github.com/localheinz/ergebnis/classy/releases/tag/1.9.0
-
-[0.4.0...0.5.0]: https://github.com/ergebnis/classy/compare/0.4.0...0.5.0
-[0.5.0...0.5.1]: https://github.com/ergebnis/classy/compare/0.5.0...0.5.1
-[0.5.1...0.5.2]: https://github.com/ergebnis/classy/compare/0.5.1...0.5.2
-[0.5.2...1.0.0]: https://github.com/ergebnis/classy/compare/0.5.2...1.0.0
-[1.0.0...1.0.1]: https://github.com/ergebnis/classy/compare/1.0.0...1.0.1
-[1.0.1...1.1.0]: https://github.com/ergebnis/classy/compare/1.0.1...1.1.0
-[1.1.0...1.1.1]: https://github.com/ergebnis/classy/compare/1.1.0...1.1.1
-[1.1.1...1.2.0]: https://github.com/ergebnis/classy/compare/1.1.1...1.2.0
-[1.2.0...1.3.0]: https://github.com/ergebnis/classy/compare/1.2.0...1.3.0
-[1.3.0...1.4.0]: https://github.com/ergebnis/classy/compare/1.3.0...1.4.0
-[1.4.0...1.5.0]: https://github.com/ergebnis/classy/compare/1.4.0...1.5.0
-[1.5.0...1.6.0]: https://github.com/ergebnis/classy/compare/1.5.0...1.6.0
-[1.6.0...1.7.0]: https://github.com/ergebnis/classy/compare/1.6.0...1.7.0
-[1.7.0...1.8.0]: https://github.com/ergebnis/classy/compare/1.7.0...1.8.0
-[1.8.0...1.9.0]: https://github.com/ergebnis/classy/compare/1.8.0...1.9.0
-[1.9.0...main]: https://github.com/ergebnis/classy/compare/1.9.0...main
-
-[#77]: https://github.com/ergebnis/classy/pull/77
-[#88]: https://github.com/ergebnis/classy/pull/88
-[#100]: https://github.com/ergebnis/classy/pull/100
-[#103]: https://github.com/ergebnis/classy/pull/103
-[#231]: https://github.com/ergebnis/classy/pull/231
-[#235]: https://github.com/ergebnis/classy/pull/235
-[#343]: https://github.com/ergebnis/classy/pull/343
-[#467]: https://github.com/ergebnis/classy/pull/467
-[#478]: https://github.com/ergebnis/classy/pull/478
-[#481]: https://github.com/ergebnis/classy/pull/481
-[#486]: https://github.com/ergebnis/classy/pull/486
-[#619]: https://github.com/ergebnis/classy/pull/619
-[#702]: https://github.com/ergebnis/classy/pull/702
-[#795]: https://github.com/ergebnis/classy/pull/795
-[#926]: https://github.com/ergebnis/classy/pull/926
-[#929]: https://github.com/ergebnis/classy/pull/929
-[#930]: https://github.com/ergebnis/classy/pull/930
-[#987]: https://github.com/ergebnis/classy/pull/987
-[#1068]: https://github.com/ergebnis/classy/pull/1068
-[#1075]: https://github.com/ergebnis/classy/pull/1075
-
-[@ergebnis]: https://github.com/ergebnis
-[@localheinz]: https://github.com/localheinz
-[@tacman]: https://github.com/tacman

+ 0 - 16
vendor/ergebnis/classy/LICENSE.md

@@ -1,16 +0,0 @@
-# The MIT License (MIT)
-
-Copyright (c) 2017-2025 Andreas Möller
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the _Software_), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
-Software.
-
-THE SOFTWARE IS PROVIDED **AS IS**, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 118
vendor/ergebnis/classy/README.md

@@ -1,118 +0,0 @@
-# classy
-
-[![Integrate](https://github.com/ergebnis/classy/workflows/Integrate/badge.svg)](https://github.com/ergebnis/classy/actions)
-[![Merge](https://github.com/ergebnis/classy/workflows/Merge/badge.svg)](https://github.com/ergebnis/classy/actions)
-[![Release](https://github.com/ergebnis/classy/workflows/Release/badge.svg)](https://github.com/ergebnis/classy/actions)
-[![Renew](https://github.com/ergebnis/classy/workflows/Renew/badge.svg)](https://github.com/ergebnis/classy/actions)
-
-[![Code Coverage](https://codecov.io/gh/ergebnis/classy/branch/main/graph/badge.svg)](https://codecov.io/gh/ergebnis/classy)
-
-[![Latest Stable Version](https://poser.pugx.org/ergebnis/classy/v/stable)](https://packagist.org/packages/ergebnis/classy)
-[![Total Downloads](https://poser.pugx.org/ergebnis/classy/downloads)](https://packagist.org/packages/ergebnis/classy)
-[![Monthly Downloads](http://poser.pugx.org/ergebnis/classy/d/monthly)](https://packagist.org/packages/ergebnis/classy)
-
-This project provides a [`composer`](https://getcomposer.org) package with a finder for classy constructs ([classes](https://www.php.net/manual/en/language.oop5.php), [enums](https://www.php.net/manual/en/language.types.enumerations.php), [interfaces](https://www.php.net/manual/en/language.oop5.interfaces.php), and [traits](https://www.php.net/manual/en/language.oop5.traits.php)).
-
-## Installation
-
-Run
-
-```sh
-composer require ergebnis/classy
-```
-
-## Usage
-
-### Collect classy constructs from source code
-
-Use `Classy\Constructs::fromSource()` to collect classy constructs in source code:
-
-```php
-<?php
-
-declare(strict_types=1);
-
-use Ergebnis\Classy;
-
-$source = <<<'PHP'
-<?php
-
-namespace Example;
-
-class Foo {}
-
-enum Bar {}
-
-interface Baz {}
-
-trait Qux {}
-PHP;
-
-$constructs = Classy\Constructs::fromSource($source);
-
-$names = array_map(static function (Classy\Construct $construct): string {
-    return $construct->name();
-}, $constructs);
-
-var_dump($names); // ['Example\Bar', 'Example\Baz', 'Example\Foo', 'Example\Qux']
-```
-
-### Collect classy constructs from a directory
-
-Use `Classy\Constructs::fromDirectory()` to collect classy constructs in a directory:
-
-```php
-<?php
-
-declare(strict_types=1);
-
-use Ergebnis\Classy;
-
-$constructs = Classy\Constructs::fromDirectory(__DIR__ . '/example');
-
-$names = array_map(static function (Classy\Construct $construct): string {
-    return $construct->name();
-}, $constructs);
-
-var_dump($names); // ['Example\Bar', 'Example\Bar\Baz', 'Example\Foo\Bar\Baz']
-```
-
-## Changelog
-
-The maintainers of this project record notable changes to this project in a [changelog](CHANGELOG.md).
-
-## Contributing
-
-The maintainers of this project suggest following the [contribution guide](.github/CONTRIBUTING.md).
-
-## Code of Conduct
-
-The maintainers of this project ask contributors to follow the [code of conduct](https://github.com/ergebnis/.github/blob/main/CODE_OF_CONDUCT.md).
-
-## General Support Policy
-
-The maintainers of this project provide limited support.
-
-You can support the maintenance of this project by [sponsoring @ergebnis](https://github.com/sponsors/ergebnis).
-
-## PHP Version Support Policy
-
-This project supports PHP versions with [active and security support](https://www.php.net/supported-versions.php).
-
-The maintainers of this project add support for a PHP version following its initial release and drop support for a PHP version when it has reached the end of security support.
-
-## Security Policy
-
-This project has a [security policy](.github/SECURITY.md).
-
-## License
-
-This project uses the [MIT license](LICENSE.md).
-
-## Credits
-
-The algorithm for finding classes in PHP files in [`Constructs`](src/Constructs.php) has been adopted from [`Zend\File\ClassFileLocator`](https://github.com/zendframework/zend-file/blob/release-2.7.1/src/ClassFileLocator.php) (originally licensed under BSD-3-Clause).
-
-## Social
-
-Follow [@localheinz](https://twitter.com/intent/follow?screen_name=localheinz) and [@ergebnis](https://twitter.com/intent/follow?screen_name=ergebnis) on Twitter.

+ 0 - 75
vendor/ergebnis/classy/composer.json

@@ -1,75 +0,0 @@
-{
-  "name": "ergebnis/classy",
-  "description": "Provides a finder for classy constructs (classes, enums, interfaces, and traits).",
-  "license": "MIT",
-  "type": "library",
-  "keywords": [
-    "finder",
-    "classy",
-    "constructs",
-    "classes",
-    "interfaces",
-    "traits"
-  ],
-  "authors": [
-    {
-      "name": "Andreas Möller",
-      "email": "am@localheinz.com",
-      "homepage": "https://localheinz.com"
-    }
-  ],
-  "homepage": "https://github.com/ergebnis/classy",
-  "support": {
-    "issues": "https://github.com/ergebnis/classy/issues",
-    "source": "https://github.com/ergebnis/classy"
-  },
-  "require": {
-    "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
-    "ext-tokenizer": "*"
-  },
-  "require-dev": {
-    "ergebnis/composer-normalize": "^2.48.1",
-    "ergebnis/license": "^2.7.0",
-    "ergebnis/php-cs-fixer-config": "^6.54.0",
-    "ergebnis/phpstan-rules": "^2.11.0",
-    "ergebnis/phpunit-slow-test-detector": "^2.20.0",
-    "fakerphp/faker": "^1.24.1",
-    "infection/infection": "~0.26.6",
-    "phpstan/extension-installer": "^1.4.3",
-    "phpstan/phpstan": "^2.1.22",
-    "phpstan/phpstan-deprecation-rules": "^2.0.3",
-    "phpstan/phpstan-phpunit": "^2.0.7",
-    "phpstan/phpstan-strict-rules": "^2.0.6",
-    "phpunit/phpunit": "^9.6.19",
-    "rector/rector": "^2.1.4"
-  },
-  "autoload": {
-    "psr-4": {
-      "Ergebnis\\Classy\\": "src/"
-    }
-  },
-  "autoload-dev": {
-    "psr-4": {
-      "Ergebnis\\Classy\\Test\\": "test/"
-    },
-    "classmap": [
-      "test/Fixture"
-    ]
-  },
-  "config": {
-    "allow-plugins": {
-      "composer/package-versions-deprecated": true,
-      "ergebnis/composer-normalize": true,
-      "infection/extension-installer": true,
-      "phpstan/extension-installer": true
-    },
-    "audit": {
-      "abandoned": "report"
-    },
-    "platform": {
-      "php": "7.4.33"
-    },
-    "preferred-install": "dist",
-    "sort-packages": true
-  }
-}

+ 0 - 79
vendor/ergebnis/classy/src/Construct.php

@@ -1,79 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/**
- * Copyright (c) 2017-2025 Andreas Möller
- *
- * For the full copyright and license information, please view
- * the LICENSE.md file that was distributed with this source code.
- *
- * @see https://github.com/ergebnis/classy
- */
-
-namespace Ergebnis\Classy;
-
-final class Construct
-{
-    private string $name;
-
-    /**
-     * @var list<string>
-     */
-    private array $fileNames = [];
-
-    private function __construct(string $name)
-    {
-        $this->name = $name;
-    }
-
-    /**
-     * @deprecated Will be removed in the next major release.
-     *
-     * Returns a string representation of the construct.
-     */
-    public function __toString(): string
-    {
-        return $this->name;
-    }
-
-    /**
-     * Creates a new construct from a construct name.
-     */
-    public static function fromName(string $name): self
-    {
-        return new self($name);
-    }
-
-    /**
-     * Returns the name of the construct.
-     */
-    public function name(): string
-    {
-        return $this->name;
-    }
-
-    /**
-     * Returns a list of file names in which the construct is defined.
-     *
-     * @return list<string>
-     */
-    public function fileNames(): array
-    {
-        return $this->fileNames;
-    }
-
-    /**
-     * Clones the construct and adds the file name to the list of files the construct is defined in.
-     */
-    public function definedIn(string ...$fileNames): self
-    {
-        $instance = clone $this;
-
-        foreach ($fileNames as $fileName) {
-            $instance->fileNames[] = $fileName;
-        }
-
-        return $instance;
-    }
-}

+ 0 - 277
vendor/ergebnis/classy/src/Constructs.php

@@ -1,277 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/**
- * Copyright (c) 2017-2025 Andreas Möller
- *
- * For the full copyright and license information, please view
- * the LICENSE.md file that was distributed with this source code.
- *
- * @see https://github.com/ergebnis/classy
- */
-
-namespace Ergebnis\Classy;
-
-final class Constructs
-{
-    /**
-     * Returns a list of constructs defined in source code.
-     *
-     * @throws Exception\ParseError
-     *
-     * @return list<Construct>
-     */
-    public static function fromSource(string $source): array
-    {
-        $constructs = [];
-
-        try {
-            $sequence = \token_get_all(
-                $source,
-                \TOKEN_PARSE,
-            );
-        } catch (\ParseError $exception) {
-            throw Exception\ParseError::fromParseError($exception);
-        }
-
-        $count = \count($sequence);
-        $namespacePrefix = '';
-
-        $namespaceSegmentOrNamespaceTokens = [
-            \T_STRING,
-        ];
-
-        /**
-         * @see https://wiki.php.net/rfc/namespaced_names_as_token
-         */
-        if (
-            \PHP_VERSION_ID >= 80000
-            && \defined('T_NAME_QUALIFIED')
-        ) {
-            /** @var list<int> $namespaceSegmentOrNamespaceTokens */
-            $namespaceSegmentOrNamespaceTokens = [
-                \T_STRING,
-                \T_NAME_QUALIFIED,
-            ];
-        }
-
-        $classyTokens = [
-            \T_CLASS,
-            \T_INTERFACE,
-            \T_TRAIT,
-        ];
-
-        /**
-         * @see https://wiki.php.net/rfc/enumerations
-         */
-        if (
-            \PHP_VERSION_ID >= 80100
-            && \defined('T_ENUM')
-        ) {
-            $classyTokens = [
-                \T_CLASS,
-                \T_ENUM,
-                \T_INTERFACE,
-                \T_TRAIT,
-            ];
-        }
-
-        for ($index = 0; $index < $count; ++$index) {
-            $token = $sequence[$index];
-
-            // collect namespace name
-            if (\is_array($token) && \T_NAMESPACE === $token[0]) {
-                $namespaceSegments = [];
-
-                // collect namespace segments
-                for ($index = self::significantAfter($index, $sequence, $count); $index < $count; ++$index) {
-                    $token = $sequence[$index];
-
-                    if (\is_array($token) && !\in_array($token[0], $namespaceSegmentOrNamespaceTokens, true)) {
-                        continue;
-                    }
-
-                    $content = self::content($token);
-
-                    if (\in_array($content, ['{', ';'], true)) {
-                        break;
-                    }
-
-                    $namespaceSegments[] = $content;
-                }
-
-                $namespace = \implode('\\', $namespaceSegments);
-                $namespacePrefix = $namespace . '\\';
-            }
-
-            // skip non-classy tokens
-            if (!\is_array($token) || !\in_array($token[0], $classyTokens, true)) {
-                continue;
-            }
-
-            // skip anonymous classes
-            if (\T_CLASS === $token[0]) {
-                $current = self::significantBefore($index, $sequence);
-                $token = $sequence[$current];
-
-                // if significant token before T_CLASS is T_NEW, it's an instantiation of an anonymous class
-                if (\is_array($token) && \T_NEW === $token[0]) {
-                    continue;
-                }
-            }
-
-            $index = self::significantAfter($index, $sequence, $count);
-            $token = $sequence[$index];
-
-            $constructs[] = Construct::fromName($namespacePrefix . self::content($token));
-        }
-
-        \usort($constructs, static function (Construct $a, Construct $b): int {
-            return \strcmp(
-                $a->name(),
-                $b->name(),
-            );
-        });
-
-        return $constructs;
-    }
-
-    /**
-     * Returns a list of constructs defined in a directory.
-     *
-     * @throws Exception\DirectoryDoesNotExist
-     * @throws Exception\MultipleDefinitionsFound
-     *
-     * @return list<Construct>
-     */
-    public static function fromDirectory(string $directory): array
-    {
-        if (!\is_dir($directory)) {
-            throw Exception\DirectoryDoesNotExist::fromDirectory($directory);
-        }
-
-        $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(
-            $directory,
-            \FilesystemIterator::FOLLOW_SYMLINKS,
-        ));
-
-        $constructs = [];
-
-        foreach ($iterator as $fileInfo) {
-            /** @var \SplFileInfo $fileInfo */
-            if (!$fileInfo->isFile()) {
-                continue;
-            }
-
-            if ($fileInfo->getBasename('.php') === $fileInfo->getBasename()) {
-                continue;
-            }
-
-            /** @var string $fileName */
-            $fileName = $fileInfo->getRealPath();
-
-            /** @var string $source */
-            $source = \file_get_contents($fileName);
-
-            try {
-                $constructsFromFile = self::fromSource($source);
-            } catch (Exception\ParseError $exception) {
-                throw Exception\ParseError::fromFileNameAndParseError(
-                    $fileName,
-                    $exception,
-                );
-            }
-
-            if (0 === \count($constructsFromFile)) {
-                continue;
-            }
-
-            foreach ($constructsFromFile as $construct) {
-                $name = $construct->name();
-
-                if (\array_key_exists($name, $constructs)) {
-                    $construct = $constructs[$name];
-                }
-
-                $constructs[$name] = $construct->definedIn($fileName);
-            }
-        }
-
-        \usort($constructs, static function (Construct $a, Construct $b): int {
-            return \strcmp(
-                $a->name(),
-                $b->name(),
-            );
-        });
-
-        $constructsWithMultipleDefinitions = \array_filter($constructs, static function (Construct $construct): bool {
-            return 1 < \count($construct->fileNames());
-        });
-
-        if (0 < \count($constructsWithMultipleDefinitions)) {
-            throw Exception\MultipleDefinitionsFound::fromConstructs($constructsWithMultipleDefinitions);
-        }
-
-        return \array_values($constructs);
-    }
-
-    /**
-     * Returns the index of the significant token after the index.
-     *
-     * @param array<int, array{0: int, 1: string, 2: int}|string> $sequence
-     */
-    private static function significantAfter(
-        int $index,
-        array $sequence,
-        int $count
-    ): int {
-        for ($current = $index + 1; $current < $count; ++$current) {
-            $token = $sequence[$current];
-
-            if (\is_array($token) && \in_array($token[0], [\T_COMMENT, \T_DOC_COMMENT, \T_WHITESPACE], true)) {
-                continue;
-            }
-
-            return $current;
-        }
-
-        throw Exception\ShouldNotHappen::create();
-    }
-
-    /**
-     * Returns the index of the significant token after the index.
-     *
-     * @param array<int, array{0: int, 1: string, 2: int}|string> $sequence
-     */
-    private static function significantBefore(
-        int $index,
-        array $sequence
-    ): int {
-        for ($current = $index - 1; -1 < $current; --$current) {
-            $token = $sequence[$current];
-
-            if (\is_array($token) && \in_array($token[0], [\T_COMMENT, \T_DOC_COMMENT, \T_WHITESPACE], true)) {
-                continue;
-            }
-
-            return $current;
-        }
-
-        throw Exception\ShouldNotHappen::create();
-    }
-
-    /**
-     * Returns the string content of a token.
-     *
-     * @param array{0: int, 1: string, 2: int}|string $token
-     */
-    private static function content($token): string
-    {
-        if (\is_array($token)) {
-            return $token[1];
-        }
-
-        return $token;
-    }
-}

+ 0 - 42
vendor/ergebnis/classy/src/Exception/DirectoryDoesNotExist.php

@@ -1,42 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/**
- * Copyright (c) 2017-2025 Andreas Möller
- *
- * For the full copyright and license information, please view
- * the LICENSE.md file that was distributed with this source code.
- *
- * @see https://github.com/ergebnis/classy
- */
-
-namespace Ergebnis\Classy\Exception;
-
-final class DirectoryDoesNotExist extends \InvalidArgumentException implements ExceptionInterface
-{
-    private string $directory = '';
-
-    /**
-     * Returns a new exception from a directory.
-     */
-    public static function fromDirectory(string $directory): self
-    {
-        $exception = new self(\sprintf(
-            'Directory "%s" does not exist.',
-            $directory,
-        ));
-
-        $exception->directory = $directory;
-
-        return $exception;
-    }
-
-    /**
-     * Returns the directory.
-     */
-    public function directory(): string
-    {
-        return $this->directory;
-    }
-}

+ 0 - 18
vendor/ergebnis/classy/src/Exception/ExceptionInterface.php

@@ -1,18 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/**
- * Copyright (c) 2017-2025 Andreas Möller
- *
- * For the full copyright and license information, please view
- * the LICENSE.md file that was distributed with this source code.
- *
- * @see https://github.com/ergebnis/classy
- */
-
-namespace Ergebnis\Classy\Exception;
-
-interface ExceptionInterface extends \Throwable
-{
-}

+ 0 - 57
vendor/ergebnis/classy/src/Exception/MultipleDefinitionsFound.php

@@ -1,57 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/**
- * Copyright (c) 2017-2025 Andreas Möller
- *
- * For the full copyright and license information, please view
- * the LICENSE.md file that was distributed with this source code.
- *
- * @see https://github.com/ergebnis/classy
- */
-
-namespace Ergebnis\Classy\Exception;
-
-use Ergebnis\Classy\Construct;
-
-final class MultipleDefinitionsFound extends \RuntimeException implements ExceptionInterface
-{
-    /**
-     * @var list<Construct>
-     */
-    private array $constructs = [];
-
-    /**
-     * Returns a new exception from constructs.
-     *
-     * @param list<Construct> $constructs
-     */
-    public static function fromConstructs(array $constructs): self
-    {
-        $exception = new self(\sprintf(
-            "Multiple definitions have been found for the following constructs:\n\n%s",
-            \implode("\n", \array_map(static function (Construct $construct): string {
-                return \sprintf(
-                    ' - "%s" defined in "%s"',
-                    $construct->name(),
-                    \implode('", "', $construct->fileNames()),
-                );
-            }, $constructs)),
-        ));
-
-        $exception->constructs = $constructs;
-
-        return $exception;
-    }
-
-    /**
-     * Returns a list of constructs.
-     *
-     * @return list<Construct>
-     */
-    public function constructs(): array
-    {
-        return $this->constructs;
-    }
-}

+ 0 - 41
vendor/ergebnis/classy/src/Exception/ParseError.php

@@ -1,41 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/**
- * Copyright (c) 2017-2025 Andreas Möller
- *
- * For the full copyright and license information, please view
- * the LICENSE.md file that was distributed with this source code.
- *
- * @see https://github.com/ergebnis/classy
- */
-
-namespace Ergebnis\Classy\Exception;
-
-final class ParseError extends \ParseError implements ExceptionInterface
-{
-    public static function fromParseError(\ParseError $exception): self
-    {
-        return new self(
-            $exception->getMessage(),
-            0,
-            $exception,
-        );
-    }
-
-    public static function fromFileNameAndParseError(
-        string $fileName,
-        \ParseError $exception
-    ): self {
-        return new self(
-            \sprintf(
-                'A parse error occurred when parsing "%s": "%s".',
-                $fileName,
-                $exception->getMessage(),
-            ),
-            0,
-            $exception,
-        );
-    }
-}

+ 0 - 22
vendor/ergebnis/classy/src/Exception/ShouldNotHappen.php

@@ -1,22 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/**
- * Copyright (c) 2017-2025 Andreas Möller
- *
- * For the full copyright and license information, please view
- * the LICENSE.md file that was distributed with this source code.
- *
- * @see https://github.com/ergebnis/classy
- */
-
-namespace Ergebnis\Classy\Exception;
-
-final class ShouldNotHappen extends \LogicException implements ExceptionInterface
-{
-    public static function create(): self
-    {
-        return new self('This should not happen.');
-    }
-}

+ 0 - 9
vendor/ezyang/htmlpurifier/CREDITS

@@ -1,9 +0,0 @@
-
-CREDITS
-
-Almost everything written by Edward Z. Yang (Ambush Commander).  Lots of thanks
-to the DevNetwork Community for their help (see docs/ref-devnetwork.html for
-more details), Feyd especially (namely IPv6 and optimization).  Thanks to RSnake
-for letting me package his fantastic XSS cheatsheet for a smoketest.
-
-    vim: et sw=4 sts=4

+ 0 - 504
vendor/ezyang/htmlpurifier/LICENSE

@@ -1,504 +0,0 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-    vim: et sw=4 sts=4

+ 0 - 29
vendor/ezyang/htmlpurifier/README.md

@@ -1,29 +0,0 @@
-HTML Purifier [![Build Status](https://github.com/ezyang/htmlpurifier/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/ezyang/htmlpurifier/actions/workflows/ci.yml)
-=============
-
-HTML Purifier is an HTML filtering solution that uses a unique combination
-of robust whitelists and aggressive parsing to ensure that not only are
-XSS attacks thwarted, but the resulting HTML is standards compliant.
-
-HTML Purifier is oriented towards richly formatted documents from
-untrusted sources that require CSS and a full tag-set.  This library can
-be configured to accept a more restrictive set of tags, but it won't be
-as efficient as more bare-bones parsers. It will, however, do the job
-right, which may be more important.
-
-Places to go:
-
-* See INSTALL for a quick installation guide
-* See docs/ for developer-oriented documentation, code examples and
-  an in-depth installation guide.
-* See WYSIWYG for information on editors like TinyMCE and FCKeditor
-
-HTML Purifier can be found on the web at: [http://htmlpurifier.org/](http://htmlpurifier.org/)
-
-## Installation
-
-Package available on [Composer](https://packagist.org/packages/ezyang/htmlpurifier).
-
-If you're using Composer to manage dependencies, you can use
-
-    $ composer require ezyang/htmlpurifier

+ 0 - 1
vendor/ezyang/htmlpurifier/VERSION

@@ -1 +0,0 @@
-4.18.0

+ 0 - 45
vendor/ezyang/htmlpurifier/composer.json

@@ -1,45 +0,0 @@
-{
-    "name": "ezyang/htmlpurifier",
-    "description": "Standards compliant HTML filter written in PHP",
-    "type": "library",
-    "keywords": ["html"],
-    "homepage": "http://htmlpurifier.org/",
-    "license": "LGPL-2.1-or-later",
-    "authors": [
-        {
-            "name": "Edward Z. Yang",
-            "email": "admin@htmlpurifier.org",
-            "homepage": "http://ezyang.com"
-        }
-    ],
-    "require": {
-        "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
-    },
-    "require-dev": {
-        "cerdic/css-tidy": "^1.7 || ^2.0",
-        "simpletest/simpletest": "dev-master"
-    },
-    "autoload": {
-        "psr-0": { "HTMLPurifier": "library/" },
-        "files": ["library/HTMLPurifier.composer.php"],
-        "exclude-from-classmap": [
-            "/library/HTMLPurifier/Language/"
-        ]
-    },
-    "suggest": {
-        "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.",
-        "ext-iconv": "Converts text to and from non-UTF-8 encodings",
-        "ext-bcmath": "Used for unit conversion and imagecrash protection",
-        "ext-tidy": "Used for pretty-printing HTML"
-    },
-    "config": {
-        "sort-packages": true
-    },
-    "repositories": [
-        {
-            "type": "vcs",
-            "url": "https://github.com/ezyang/simpletest.git",
-            "no-api": true
-        }
-    ]
-}

+ 0 - 11
vendor/ezyang/htmlpurifier/library/HTMLPurifier.auto.php

@@ -1,11 +0,0 @@
-<?php
-
-/**
- * This is a stub include that automatically configures the include path.
- */
-
-set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path() );
-require_once 'HTMLPurifier/Bootstrap.php';
-require_once 'HTMLPurifier.autoload.php';
-
-// vim: et sw=4 sts=4

+ 0 - 14
vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload-legacy.php

@@ -1,14 +0,0 @@
-<?php
-
-/**
- * @file
- * Legacy autoloader for systems lacking spl_autoload_register
- *
- */
-
-spl_autoload_register(function($class)
-{
-     return HTMLPurifier_Bootstrap::autoload($class);
-});
-
-// vim: et sw=4 sts=4

+ 0 - 25
vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload.php

@@ -1,25 +0,0 @@
-<?php
-
-/**
- * @file
- * Convenience file that registers autoload handler for HTML Purifier.
- * It also does some sanity checks.
- */
-
-if (function_exists('spl_autoload_register') && function_exists('spl_autoload_unregister')) {
-    // We need unregister for our pre-registering functionality
-    HTMLPurifier_Bootstrap::registerAutoload();
-    if (function_exists('__autoload')) {
-        // Be polite and ensure that userland autoload gets retained
-        spl_autoload_register('__autoload');
-    }
-} elseif (!function_exists('__autoload')) {
-    require dirname(__FILE__) . '/HTMLPurifier.autoload-legacy.php';
-}
-
-// phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.zend_ze1_compatibility_modeRemoved
-if (ini_get('zend.ze1_compatibility_mode')) {
-    trigger_error("HTML Purifier is not compatible with zend.ze1_compatibility_mode; please turn it off", E_USER_ERROR);
-}
-
-// vim: et sw=4 sts=4

+ 0 - 4
vendor/ezyang/htmlpurifier/library/HTMLPurifier.composer.php

@@ -1,4 +0,0 @@
-<?php
-if (!defined('HTMLPURIFIER_PREFIX')) {
-    define('HTMLPURIFIER_PREFIX', dirname(__FILE__));
-}

+ 0 - 25
vendor/ezyang/htmlpurifier/library/HTMLPurifier.func.php

@@ -1,25 +0,0 @@
-<?php
-
-/**
- * @file
- * Defines a function wrapper for HTML Purifier for quick use.
- * @note ''HTMLPurifier()'' is NOT the same as ''new HTMLPurifier()''
- */
-
-/**
- * Purify HTML.
- * @param string $html String HTML to purify
- * @param mixed $config Configuration to use, can be any value accepted by
- *        HTMLPurifier_Config::create()
- * @return string
- */
-function HTMLPurifier($html, $config = null)
-{
-    static $purifier = false;
-    if (!$purifier) {
-        $purifier = new HTMLPurifier();
-    }
-    return $purifier->purify($html, $config);
-}
-
-// vim: et sw=4 sts=4

+ 0 - 236
vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php

@@ -1,236 +0,0 @@
-<?php
-
-/**
- * @file
- * This file was auto-generated by generate-includes.php and includes all of
- * the core files required by HTML Purifier. Use this if performance is a
- * primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS
- * FILE, changes will be overwritten the next time the script is run.
- *
- * @version 4.18.0
- *
- * @warning
- *      You must *not* include any other HTML Purifier files before this file,
- *      because 'require' not 'require_once' is used.
- *
- * @warning
- *      This file requires that the include path contains the HTML Purifier
- *      library directory; this is not auto-set.
- */
-
-require 'HTMLPurifier.php';
-require 'HTMLPurifier/Arborize.php';
-require 'HTMLPurifier/AttrCollections.php';
-require 'HTMLPurifier/AttrDef.php';
-require 'HTMLPurifier/AttrTransform.php';
-require 'HTMLPurifier/AttrTypes.php';
-require 'HTMLPurifier/AttrValidator.php';
-require 'HTMLPurifier/Bootstrap.php';
-require 'HTMLPurifier/Definition.php';
-require 'HTMLPurifier/CSSDefinition.php';
-require 'HTMLPurifier/ChildDef.php';
-require 'HTMLPurifier/Config.php';
-require 'HTMLPurifier/ConfigSchema.php';
-require 'HTMLPurifier/ContentSets.php';
-require 'HTMLPurifier/Context.php';
-require 'HTMLPurifier/DefinitionCache.php';
-require 'HTMLPurifier/DefinitionCacheFactory.php';
-require 'HTMLPurifier/Doctype.php';
-require 'HTMLPurifier/DoctypeRegistry.php';
-require 'HTMLPurifier/ElementDef.php';
-require 'HTMLPurifier/Encoder.php';
-require 'HTMLPurifier/EntityLookup.php';
-require 'HTMLPurifier/EntityParser.php';
-require 'HTMLPurifier/ErrorCollector.php';
-require 'HTMLPurifier/ErrorStruct.php';
-require 'HTMLPurifier/Exception.php';
-require 'HTMLPurifier/Filter.php';
-require 'HTMLPurifier/Generator.php';
-require 'HTMLPurifier/HTMLDefinition.php';
-require 'HTMLPurifier/HTMLModule.php';
-require 'HTMLPurifier/HTMLModuleManager.php';
-require 'HTMLPurifier/IDAccumulator.php';
-require 'HTMLPurifier/Injector.php';
-require 'HTMLPurifier/Language.php';
-require 'HTMLPurifier/LanguageFactory.php';
-require 'HTMLPurifier/Length.php';
-require 'HTMLPurifier/Lexer.php';
-require 'HTMLPurifier/Node.php';
-require 'HTMLPurifier/PercentEncoder.php';
-require 'HTMLPurifier/PropertyList.php';
-require 'HTMLPurifier/PropertyListIterator.php';
-require 'HTMLPurifier/Queue.php';
-require 'HTMLPurifier/Strategy.php';
-require 'HTMLPurifier/StringHash.php';
-require 'HTMLPurifier/StringHashParser.php';
-require 'HTMLPurifier/TagTransform.php';
-require 'HTMLPurifier/Token.php';
-require 'HTMLPurifier/TokenFactory.php';
-require 'HTMLPurifier/URI.php';
-require 'HTMLPurifier/URIDefinition.php';
-require 'HTMLPurifier/URIFilter.php';
-require 'HTMLPurifier/URIParser.php';
-require 'HTMLPurifier/URIScheme.php';
-require 'HTMLPurifier/URISchemeRegistry.php';
-require 'HTMLPurifier/UnitConverter.php';
-require 'HTMLPurifier/VarParser.php';
-require 'HTMLPurifier/VarParserException.php';
-require 'HTMLPurifier/Zipper.php';
-require 'HTMLPurifier/AttrDef/CSS.php';
-require 'HTMLPurifier/AttrDef/Clone.php';
-require 'HTMLPurifier/AttrDef/Enum.php';
-require 'HTMLPurifier/AttrDef/Integer.php';
-require 'HTMLPurifier/AttrDef/Lang.php';
-require 'HTMLPurifier/AttrDef/Switch.php';
-require 'HTMLPurifier/AttrDef/Text.php';
-require 'HTMLPurifier/AttrDef/URI.php';
-require 'HTMLPurifier/AttrDef/CSS/Number.php';
-require 'HTMLPurifier/AttrDef/CSS/AlphaValue.php';
-require 'HTMLPurifier/AttrDef/CSS/Background.php';
-require 'HTMLPurifier/AttrDef/CSS/BackgroundPosition.php';
-require 'HTMLPurifier/AttrDef/CSS/Border.php';
-require 'HTMLPurifier/AttrDef/CSS/Color.php';
-require 'HTMLPurifier/AttrDef/CSS/Composite.php';
-require 'HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php';
-require 'HTMLPurifier/AttrDef/CSS/Filter.php';
-require 'HTMLPurifier/AttrDef/CSS/Font.php';
-require 'HTMLPurifier/AttrDef/CSS/FontFamily.php';
-require 'HTMLPurifier/AttrDef/CSS/Ident.php';
-require 'HTMLPurifier/AttrDef/CSS/ImportantDecorator.php';
-require 'HTMLPurifier/AttrDef/CSS/Length.php';
-require 'HTMLPurifier/AttrDef/CSS/ListStyle.php';
-require 'HTMLPurifier/AttrDef/CSS/Multiple.php';
-require 'HTMLPurifier/AttrDef/CSS/Percentage.php';
-require 'HTMLPurifier/AttrDef/CSS/Ratio.php';
-require 'HTMLPurifier/AttrDef/CSS/TextDecoration.php';
-require 'HTMLPurifier/AttrDef/CSS/URI.php';
-require 'HTMLPurifier/AttrDef/HTML/Bool.php';
-require 'HTMLPurifier/AttrDef/HTML/Nmtokens.php';
-require 'HTMLPurifier/AttrDef/HTML/Class.php';
-require 'HTMLPurifier/AttrDef/HTML/Color.php';
-require 'HTMLPurifier/AttrDef/HTML/ContentEditable.php';
-require 'HTMLPurifier/AttrDef/HTML/FrameTarget.php';
-require 'HTMLPurifier/AttrDef/HTML/ID.php';
-require 'HTMLPurifier/AttrDef/HTML/Pixels.php';
-require 'HTMLPurifier/AttrDef/HTML/Length.php';
-require 'HTMLPurifier/AttrDef/HTML/LinkTypes.php';
-require 'HTMLPurifier/AttrDef/HTML/MultiLength.php';
-require 'HTMLPurifier/AttrDef/URI/Email.php';
-require 'HTMLPurifier/AttrDef/URI/Host.php';
-require 'HTMLPurifier/AttrDef/URI/IPv4.php';
-require 'HTMLPurifier/AttrDef/URI/IPv6.php';
-require 'HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php';
-require 'HTMLPurifier/AttrTransform/Background.php';
-require 'HTMLPurifier/AttrTransform/BdoDir.php';
-require 'HTMLPurifier/AttrTransform/BgColor.php';
-require 'HTMLPurifier/AttrTransform/BoolToCSS.php';
-require 'HTMLPurifier/AttrTransform/Border.php';
-require 'HTMLPurifier/AttrTransform/EnumToCSS.php';
-require 'HTMLPurifier/AttrTransform/ImgRequired.php';
-require 'HTMLPurifier/AttrTransform/ImgSpace.php';
-require 'HTMLPurifier/AttrTransform/Input.php';
-require 'HTMLPurifier/AttrTransform/Lang.php';
-require 'HTMLPurifier/AttrTransform/Length.php';
-require 'HTMLPurifier/AttrTransform/Name.php';
-require 'HTMLPurifier/AttrTransform/NameSync.php';
-require 'HTMLPurifier/AttrTransform/Nofollow.php';
-require 'HTMLPurifier/AttrTransform/SafeEmbed.php';
-require 'HTMLPurifier/AttrTransform/SafeObject.php';
-require 'HTMLPurifier/AttrTransform/SafeParam.php';
-require 'HTMLPurifier/AttrTransform/ScriptRequired.php';
-require 'HTMLPurifier/AttrTransform/TargetBlank.php';
-require 'HTMLPurifier/AttrTransform/TargetNoopener.php';
-require 'HTMLPurifier/AttrTransform/TargetNoreferrer.php';
-require 'HTMLPurifier/AttrTransform/Textarea.php';
-require 'HTMLPurifier/ChildDef/Chameleon.php';
-require 'HTMLPurifier/ChildDef/Custom.php';
-require 'HTMLPurifier/ChildDef/Empty.php';
-require 'HTMLPurifier/ChildDef/List.php';
-require 'HTMLPurifier/ChildDef/Required.php';
-require 'HTMLPurifier/ChildDef/Optional.php';
-require 'HTMLPurifier/ChildDef/StrictBlockquote.php';
-require 'HTMLPurifier/ChildDef/Table.php';
-require 'HTMLPurifier/DefinitionCache/Decorator.php';
-require 'HTMLPurifier/DefinitionCache/Null.php';
-require 'HTMLPurifier/DefinitionCache/Serializer.php';
-require 'HTMLPurifier/DefinitionCache/Decorator/Cleanup.php';
-require 'HTMLPurifier/DefinitionCache/Decorator/Memory.php';
-require 'HTMLPurifier/HTMLModule/Bdo.php';
-require 'HTMLPurifier/HTMLModule/CommonAttributes.php';
-require 'HTMLPurifier/HTMLModule/Edit.php';
-require 'HTMLPurifier/HTMLModule/Forms.php';
-require 'HTMLPurifier/HTMLModule/Hypertext.php';
-require 'HTMLPurifier/HTMLModule/Iframe.php';
-require 'HTMLPurifier/HTMLModule/Image.php';
-require 'HTMLPurifier/HTMLModule/Legacy.php';
-require 'HTMLPurifier/HTMLModule/List.php';
-require 'HTMLPurifier/HTMLModule/Name.php';
-require 'HTMLPurifier/HTMLModule/Nofollow.php';
-require 'HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php';
-require 'HTMLPurifier/HTMLModule/Object.php';
-require 'HTMLPurifier/HTMLModule/Presentation.php';
-require 'HTMLPurifier/HTMLModule/Proprietary.php';
-require 'HTMLPurifier/HTMLModule/Ruby.php';
-require 'HTMLPurifier/HTMLModule/SafeEmbed.php';
-require 'HTMLPurifier/HTMLModule/SafeObject.php';
-require 'HTMLPurifier/HTMLModule/SafeScripting.php';
-require 'HTMLPurifier/HTMLModule/Scripting.php';
-require 'HTMLPurifier/HTMLModule/StyleAttribute.php';
-require 'HTMLPurifier/HTMLModule/Tables.php';
-require 'HTMLPurifier/HTMLModule/Target.php';
-require 'HTMLPurifier/HTMLModule/TargetBlank.php';
-require 'HTMLPurifier/HTMLModule/TargetNoopener.php';
-require 'HTMLPurifier/HTMLModule/TargetNoreferrer.php';
-require 'HTMLPurifier/HTMLModule/Text.php';
-require 'HTMLPurifier/HTMLModule/Tidy.php';
-require 'HTMLPurifier/HTMLModule/XMLCommonAttributes.php';
-require 'HTMLPurifier/HTMLModule/Tidy/Name.php';
-require 'HTMLPurifier/HTMLModule/Tidy/Proprietary.php';
-require 'HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php';
-require 'HTMLPurifier/HTMLModule/Tidy/Strict.php';
-require 'HTMLPurifier/HTMLModule/Tidy/Transitional.php';
-require 'HTMLPurifier/HTMLModule/Tidy/XHTML.php';
-require 'HTMLPurifier/Injector/AutoParagraph.php';
-require 'HTMLPurifier/Injector/DisplayLinkURI.php';
-require 'HTMLPurifier/Injector/Linkify.php';
-require 'HTMLPurifier/Injector/PurifierLinkify.php';
-require 'HTMLPurifier/Injector/RemoveEmpty.php';
-require 'HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php';
-require 'HTMLPurifier/Injector/SafeObject.php';
-require 'HTMLPurifier/Lexer/DOMLex.php';
-require 'HTMLPurifier/Lexer/DirectLex.php';
-require 'HTMLPurifier/Node/Comment.php';
-require 'HTMLPurifier/Node/Element.php';
-require 'HTMLPurifier/Node/Text.php';
-require 'HTMLPurifier/Strategy/Composite.php';
-require 'HTMLPurifier/Strategy/Core.php';
-require 'HTMLPurifier/Strategy/FixNesting.php';
-require 'HTMLPurifier/Strategy/MakeWellFormed.php';
-require 'HTMLPurifier/Strategy/RemoveForeignElements.php';
-require 'HTMLPurifier/Strategy/ValidateAttributes.php';
-require 'HTMLPurifier/TagTransform/Font.php';
-require 'HTMLPurifier/TagTransform/Simple.php';
-require 'HTMLPurifier/Token/Comment.php';
-require 'HTMLPurifier/Token/Tag.php';
-require 'HTMLPurifier/Token/Empty.php';
-require 'HTMLPurifier/Token/End.php';
-require 'HTMLPurifier/Token/Start.php';
-require 'HTMLPurifier/Token/Text.php';
-require 'HTMLPurifier/URIFilter/DisableExternal.php';
-require 'HTMLPurifier/URIFilter/DisableExternalResources.php';
-require 'HTMLPurifier/URIFilter/DisableResources.php';
-require 'HTMLPurifier/URIFilter/HostBlacklist.php';
-require 'HTMLPurifier/URIFilter/MakeAbsolute.php';
-require 'HTMLPurifier/URIFilter/Munge.php';
-require 'HTMLPurifier/URIFilter/SafeIframe.php';
-require 'HTMLPurifier/URIScheme/data.php';
-require 'HTMLPurifier/URIScheme/file.php';
-require 'HTMLPurifier/URIScheme/ftp.php';
-require 'HTMLPurifier/URIScheme/http.php';
-require 'HTMLPurifier/URIScheme/https.php';
-require 'HTMLPurifier/URIScheme/mailto.php';
-require 'HTMLPurifier/URIScheme/news.php';
-require 'HTMLPurifier/URIScheme/nntp.php';
-require 'HTMLPurifier/URIScheme/tel.php';
-require 'HTMLPurifier/VarParser/Flexible.php';
-require 'HTMLPurifier/VarParser/Native.php';

+ 0 - 30
vendor/ezyang/htmlpurifier/library/HTMLPurifier.kses.php

@@ -1,30 +0,0 @@
-<?php
-
-/**
- * @file
- * Emulation layer for code that used kses(), substituting in HTML Purifier.
- */
-
-require_once dirname(__FILE__) . '/HTMLPurifier.auto.php';
-
-function kses($string, $allowed_html, $allowed_protocols = null)
-{
-    $config = HTMLPurifier_Config::createDefault();
-    $allowed_elements = array();
-    $allowed_attributes = array();
-    foreach ($allowed_html as $element => $attributes) {
-        $allowed_elements[$element] = true;
-        foreach ($attributes as $attribute => $x) {
-            $allowed_attributes["$element.$attribute"] = true;
-        }
-    }
-    $config->set('HTML.AllowedElements', $allowed_elements);
-    $config->set('HTML.AllowedAttributes', $allowed_attributes);
-    if ($allowed_protocols !== null) {
-        $config->set('URI.AllowedSchemes', $allowed_protocols);
-    }
-    $purifier = new HTMLPurifier($config);
-    return $purifier->purify($string);
-}
-
-// vim: et sw=4 sts=4

+ 0 - 11
vendor/ezyang/htmlpurifier/library/HTMLPurifier.path.php

@@ -1,11 +0,0 @@
-<?php
-
-/**
- * @file
- * Convenience stub file that adds HTML Purifier's library file to the path
- * without any other side-effects.
- */
-
-set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path() );
-
-// vim: et sw=4 sts=4

+ 0 - 297
vendor/ezyang/htmlpurifier/library/HTMLPurifier.php

@@ -1,297 +0,0 @@
-<?php
-
-/*! @mainpage
- *
- * HTML Purifier is an HTML filter that will take an arbitrary snippet of
- * HTML and rigorously test, validate and filter it into a version that
- * is safe for output onto webpages. It achieves this by:
- *
- *  -# Lexing (parsing into tokens) the document,
- *  -# Executing various strategies on the tokens:
- *      -# Removing all elements not in the whitelist,
- *      -# Making the tokens well-formed,
- *      -# Fixing the nesting of the nodes, and
- *      -# Validating attributes of the nodes; and
- *  -# Generating HTML from the purified tokens.
- *
- * However, most users will only need to interface with the HTMLPurifier
- * and HTMLPurifier_Config.
- */
-
-/*
-    HTML Purifier 4.18.0 - Standards Compliant HTML Filtering
-    Copyright (C) 2006-2008 Edward Z. Yang
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-/**
- * Facade that coordinates HTML Purifier's subsystems in order to purify HTML.
- *
- * @note There are several points in which configuration can be specified
- *       for HTML Purifier.  The precedence of these (from lowest to
- *       highest) is as follows:
- *          -# Instance: new HTMLPurifier($config)
- *          -# Invocation: purify($html, $config)
- *       These configurations are entirely independent of each other and
- *       are *not* merged (this behavior may change in the future).
- *
- * @todo We need an easier way to inject strategies using the configuration
- *       object.
- */
-class HTMLPurifier
-{
-
-    /**
-     * Version of HTML Purifier.
-     * @type string
-     */
-    public $version = '4.18.0';
-
-    /**
-     * Constant with version of HTML Purifier.
-     */
-    const VERSION = '4.18.0';
-
-    /**
-     * Global configuration object.
-     * @type HTMLPurifier_Config
-     */
-    public $config;
-
-    /**
-     * Array of extra filter objects to run on HTML,
-     * for backwards compatibility.
-     * @type HTMLPurifier_Filter[]
-     */
-    private $filters = array();
-
-    /**
-     * Single instance of HTML Purifier.
-     * @type HTMLPurifier
-     */
-    private static $instance;
-
-    /**
-     * @type HTMLPurifier_Strategy_Core
-     */
-    protected $strategy;
-
-    /**
-     * @type HTMLPurifier_Generator
-     */
-    protected $generator;
-
-    /**
-     * Resultant context of last run purification.
-     * Is an array of contexts if the last called method was purifyArray().
-     * @type HTMLPurifier_Context
-     */
-    public $context;
-
-    /**
-     * Initializes the purifier.
-     *
-     * @param HTMLPurifier_Config|mixed $config Optional HTMLPurifier_Config object
-     *                for all instances of the purifier, if omitted, a default
-     *                configuration is supplied (which can be overridden on a
-     *                per-use basis).
-     *                The parameter can also be any type that
-     *                HTMLPurifier_Config::create() supports.
-     */
-    public function __construct($config = null)
-    {
-        $this->config = HTMLPurifier_Config::create($config);
-        $this->strategy = new HTMLPurifier_Strategy_Core();
-    }
-
-    /**
-     * Adds a filter to process the output. First come first serve
-     *
-     * @param HTMLPurifier_Filter $filter HTMLPurifier_Filter object
-     */
-    public function addFilter($filter)
-    {
-        trigger_error(
-            'HTMLPurifier->addFilter() is deprecated, use configuration directives' .
-            ' in the Filter namespace or Filter.Custom',
-            E_USER_WARNING
-        );
-        $this->filters[] = $filter;
-    }
-
-    /**
-     * Filters an HTML snippet/document to be XSS-free and standards-compliant.
-     *
-     * @param string $html String of HTML to purify
-     * @param HTMLPurifier_Config $config Config object for this operation,
-     *                if omitted, defaults to the config object specified during this
-     *                object's construction. The parameter can also be any type
-     *                that HTMLPurifier_Config::create() supports.
-     *
-     * @return string Purified HTML
-     */
-    public function purify($html, $config = null)
-    {
-        // :TODO: make the config merge in, instead of replace
-        $config = $config ? HTMLPurifier_Config::create($config) : $this->config;
-
-        // implementation is partially environment dependant, partially
-        // configuration dependant
-        $lexer = HTMLPurifier_Lexer::create($config);
-
-        $context = new HTMLPurifier_Context();
-
-        // setup HTML generator
-        $this->generator = new HTMLPurifier_Generator($config, $context);
-        $context->register('Generator', $this->generator);
-
-        // set up global context variables
-        if ($config->get('Core.CollectErrors')) {
-            // may get moved out if other facilities use it
-            $language_factory = HTMLPurifier_LanguageFactory::instance();
-            $language = $language_factory->create($config, $context);
-            $context->register('Locale', $language);
-
-            $error_collector = new HTMLPurifier_ErrorCollector($context);
-            $context->register('ErrorCollector', $error_collector);
-        }
-
-        // setup id_accumulator context, necessary due to the fact that
-        // AttrValidator can be called from many places
-        $id_accumulator = HTMLPurifier_IDAccumulator::build($config, $context);
-        $context->register('IDAccumulator', $id_accumulator);
-
-        $html = HTMLPurifier_Encoder::convertToUTF8($html, $config, $context);
-
-        // setup filters
-        $filter_flags = $config->getBatch('Filter');
-        $custom_filters = $filter_flags['Custom'];
-        unset($filter_flags['Custom']);
-        $filters = array();
-        foreach ($filter_flags as $filter => $flag) {
-            if (!$flag) {
-                continue;
-            }
-            if (strpos($filter, '.') !== false) {
-                continue;
-            }
-            $class = "HTMLPurifier_Filter_$filter";
-            $filters[] = new $class;
-        }
-        foreach ($custom_filters as $filter) {
-            // maybe "HTMLPurifier_Filter_$filter", but be consistent with AutoFormat
-            $filters[] = $filter;
-        }
-        $filters = array_merge($filters, $this->filters);
-        // maybe prepare(), but later
-
-        for ($i = 0, $filter_size = count($filters); $i < $filter_size; $i++) {
-            $html = $filters[$i]->preFilter($html, $config, $context);
-        }
-
-        // purified HTML
-        $html =
-            $this->generator->generateFromTokens(
-                // list of tokens
-                $this->strategy->execute(
-                    // list of un-purified tokens
-                    $lexer->tokenizeHTML(
-                        // un-purified HTML
-                        $html,
-                        $config,
-                        $context
-                    ),
-                    $config,
-                    $context
-                )
-            );
-
-        for ($i = $filter_size - 1; $i >= 0; $i--) {
-            $html = $filters[$i]->postFilter($html, $config, $context);
-        }
-
-        $html = HTMLPurifier_Encoder::convertFromUTF8($html, $config, $context);
-        $this->context =& $context;
-        return $html;
-    }
-
-    /**
-     * Filters an array of HTML snippets
-     *
-     * @param string[] $array_of_html Array of html snippets
-     * @param HTMLPurifier_Config $config Optional config object for this operation.
-     *                See HTMLPurifier::purify() for more details.
-     *
-     * @return string[] Array of purified HTML
-     */
-    public function purifyArray($array_of_html, $config = null)
-    {
-        $context_array = array();
-        $array = array();
-        foreach($array_of_html as $key=>$value){
-            if (is_array($value)) {
-                $array[$key] = $this->purifyArray($value, $config);
-            } else {
-                $array[$key] = $this->purify($value, $config);
-            }
-            $context_array[$key] = $this->context;
-        }
-        $this->context = $context_array;
-        return $array;
-    }
-
-    /**
-     * Singleton for enforcing just one HTML Purifier in your system
-     *
-     * @param HTMLPurifier|HTMLPurifier_Config $prototype Optional prototype
-     *                   HTMLPurifier instance to overload singleton with,
-     *                   or HTMLPurifier_Config instance to configure the
-     *                   generated version with.
-     *
-     * @return HTMLPurifier
-     */
-    public static function instance($prototype = null)
-    {
-        if (!self::$instance || $prototype) {
-            if ($prototype instanceof HTMLPurifier) {
-                self::$instance = $prototype;
-            } elseif ($prototype) {
-                self::$instance = new HTMLPurifier($prototype);
-            } else {
-                self::$instance = new HTMLPurifier();
-            }
-        }
-        return self::$instance;
-    }
-
-    /**
-     * Singleton for enforcing just one HTML Purifier in your system
-     *
-     * @param HTMLPurifier|HTMLPurifier_Config $prototype Optional prototype
-     *                   HTMLPurifier instance to overload singleton with,
-     *                   or HTMLPurifier_Config instance to configure the
-     *                   generated version with.
-     *
-     * @return HTMLPurifier
-     * @note Backwards compatibility, see instance()
-     */
-    public static function getInstance($prototype = null)
-    {
-        return HTMLPurifier::instance($prototype);
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 230
vendor/ezyang/htmlpurifier/library/HTMLPurifier.safe-includes.php

@@ -1,230 +0,0 @@
-<?php
-
-/**
- * @file
- * This file was auto-generated by generate-includes.php and includes all of
- * the core files required by HTML Purifier. This is a convenience stub that
- * includes all files using dirname(__FILE__) and require_once. PLEASE DO NOT
- * EDIT THIS FILE, changes will be overwritten the next time the script is run.
- *
- * Changes to include_path are not necessary.
- */
-
-$__dir = dirname(__FILE__);
-
-require_once $__dir . '/HTMLPurifier.php';
-require_once $__dir . '/HTMLPurifier/Arborize.php';
-require_once $__dir . '/HTMLPurifier/AttrCollections.php';
-require_once $__dir . '/HTMLPurifier/AttrDef.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform.php';
-require_once $__dir . '/HTMLPurifier/AttrTypes.php';
-require_once $__dir . '/HTMLPurifier/AttrValidator.php';
-require_once $__dir . '/HTMLPurifier/Bootstrap.php';
-require_once $__dir . '/HTMLPurifier/Definition.php';
-require_once $__dir . '/HTMLPurifier/CSSDefinition.php';
-require_once $__dir . '/HTMLPurifier/ChildDef.php';
-require_once $__dir . '/HTMLPurifier/Config.php';
-require_once $__dir . '/HTMLPurifier/ConfigSchema.php';
-require_once $__dir . '/HTMLPurifier/ContentSets.php';
-require_once $__dir . '/HTMLPurifier/Context.php';
-require_once $__dir . '/HTMLPurifier/DefinitionCache.php';
-require_once $__dir . '/HTMLPurifier/DefinitionCacheFactory.php';
-require_once $__dir . '/HTMLPurifier/Doctype.php';
-require_once $__dir . '/HTMLPurifier/DoctypeRegistry.php';
-require_once $__dir . '/HTMLPurifier/ElementDef.php';
-require_once $__dir . '/HTMLPurifier/Encoder.php';
-require_once $__dir . '/HTMLPurifier/EntityLookup.php';
-require_once $__dir . '/HTMLPurifier/EntityParser.php';
-require_once $__dir . '/HTMLPurifier/ErrorCollector.php';
-require_once $__dir . '/HTMLPurifier/ErrorStruct.php';
-require_once $__dir . '/HTMLPurifier/Exception.php';
-require_once $__dir . '/HTMLPurifier/Filter.php';
-require_once $__dir . '/HTMLPurifier/Generator.php';
-require_once $__dir . '/HTMLPurifier/HTMLDefinition.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule.php';
-require_once $__dir . '/HTMLPurifier/HTMLModuleManager.php';
-require_once $__dir . '/HTMLPurifier/IDAccumulator.php';
-require_once $__dir . '/HTMLPurifier/Injector.php';
-require_once $__dir . '/HTMLPurifier/Language.php';
-require_once $__dir . '/HTMLPurifier/LanguageFactory.php';
-require_once $__dir . '/HTMLPurifier/Length.php';
-require_once $__dir . '/HTMLPurifier/Lexer.php';
-require_once $__dir . '/HTMLPurifier/Node.php';
-require_once $__dir . '/HTMLPurifier/PercentEncoder.php';
-require_once $__dir . '/HTMLPurifier/PropertyList.php';
-require_once $__dir . '/HTMLPurifier/PropertyListIterator.php';
-require_once $__dir . '/HTMLPurifier/Queue.php';
-require_once $__dir . '/HTMLPurifier/Strategy.php';
-require_once $__dir . '/HTMLPurifier/StringHash.php';
-require_once $__dir . '/HTMLPurifier/StringHashParser.php';
-require_once $__dir . '/HTMLPurifier/TagTransform.php';
-require_once $__dir . '/HTMLPurifier/Token.php';
-require_once $__dir . '/HTMLPurifier/TokenFactory.php';
-require_once $__dir . '/HTMLPurifier/URI.php';
-require_once $__dir . '/HTMLPurifier/URIDefinition.php';
-require_once $__dir . '/HTMLPurifier/URIFilter.php';
-require_once $__dir . '/HTMLPurifier/URIParser.php';
-require_once $__dir . '/HTMLPurifier/URIScheme.php';
-require_once $__dir . '/HTMLPurifier/URISchemeRegistry.php';
-require_once $__dir . '/HTMLPurifier/UnitConverter.php';
-require_once $__dir . '/HTMLPurifier/VarParser.php';
-require_once $__dir . '/HTMLPurifier/VarParserException.php';
-require_once $__dir . '/HTMLPurifier/Zipper.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/Clone.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/Enum.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/Integer.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/Lang.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/Switch.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/Text.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/URI.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Number.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/AlphaValue.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Background.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Border.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Color.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Composite.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Filter.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Font.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/FontFamily.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Ident.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Length.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/ListStyle.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Multiple.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Percentage.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Ratio.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/TextDecoration.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/CSS/URI.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Bool.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Nmtokens.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Class.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Color.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/HTML/ContentEditable.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/HTML/FrameTarget.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/HTML/ID.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Pixels.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Length.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/HTML/LinkTypes.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/HTML/MultiLength.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/URI/Email.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/URI/Host.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/URI/IPv4.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/URI/IPv6.php';
-require_once $__dir . '/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/Background.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/BdoDir.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/BgColor.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/BoolToCSS.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/Border.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/EnumToCSS.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/ImgRequired.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/ImgSpace.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/Input.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/Lang.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/Length.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/Name.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/NameSync.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/Nofollow.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/SafeEmbed.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/SafeObject.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/SafeParam.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/ScriptRequired.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/TargetBlank.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/TargetNoopener.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/TargetNoreferrer.php';
-require_once $__dir . '/HTMLPurifier/AttrTransform/Textarea.php';
-require_once $__dir . '/HTMLPurifier/ChildDef/Chameleon.php';
-require_once $__dir . '/HTMLPurifier/ChildDef/Custom.php';
-require_once $__dir . '/HTMLPurifier/ChildDef/Empty.php';
-require_once $__dir . '/HTMLPurifier/ChildDef/List.php';
-require_once $__dir . '/HTMLPurifier/ChildDef/Required.php';
-require_once $__dir . '/HTMLPurifier/ChildDef/Optional.php';
-require_once $__dir . '/HTMLPurifier/ChildDef/StrictBlockquote.php';
-require_once $__dir . '/HTMLPurifier/ChildDef/Table.php';
-require_once $__dir . '/HTMLPurifier/DefinitionCache/Decorator.php';
-require_once $__dir . '/HTMLPurifier/DefinitionCache/Null.php';
-require_once $__dir . '/HTMLPurifier/DefinitionCache/Serializer.php';
-require_once $__dir . '/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php';
-require_once $__dir . '/HTMLPurifier/DefinitionCache/Decorator/Memory.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Bdo.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/CommonAttributes.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Edit.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Forms.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Hypertext.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Iframe.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Image.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Legacy.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/List.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Name.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Nofollow.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Object.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Presentation.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Proprietary.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Ruby.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/SafeEmbed.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/SafeObject.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/SafeScripting.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Scripting.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/StyleAttribute.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Tables.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Target.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/TargetBlank.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/TargetNoopener.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/TargetNoreferrer.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Text.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/XMLCommonAttributes.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy/Name.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy/Proprietary.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy/Strict.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy/Transitional.php';
-require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy/XHTML.php';
-require_once $__dir . '/HTMLPurifier/Injector/AutoParagraph.php';
-require_once $__dir . '/HTMLPurifier/Injector/DisplayLinkURI.php';
-require_once $__dir . '/HTMLPurifier/Injector/Linkify.php';
-require_once $__dir . '/HTMLPurifier/Injector/PurifierLinkify.php';
-require_once $__dir . '/HTMLPurifier/Injector/RemoveEmpty.php';
-require_once $__dir . '/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php';
-require_once $__dir . '/HTMLPurifier/Injector/SafeObject.php';
-require_once $__dir . '/HTMLPurifier/Lexer/DOMLex.php';
-require_once $__dir . '/HTMLPurifier/Lexer/DirectLex.php';
-require_once $__dir . '/HTMLPurifier/Node/Comment.php';
-require_once $__dir . '/HTMLPurifier/Node/Element.php';
-require_once $__dir . '/HTMLPurifier/Node/Text.php';
-require_once $__dir . '/HTMLPurifier/Strategy/Composite.php';
-require_once $__dir . '/HTMLPurifier/Strategy/Core.php';
-require_once $__dir . '/HTMLPurifier/Strategy/FixNesting.php';
-require_once $__dir . '/HTMLPurifier/Strategy/MakeWellFormed.php';
-require_once $__dir . '/HTMLPurifier/Strategy/RemoveForeignElements.php';
-require_once $__dir . '/HTMLPurifier/Strategy/ValidateAttributes.php';
-require_once $__dir . '/HTMLPurifier/TagTransform/Font.php';
-require_once $__dir . '/HTMLPurifier/TagTransform/Simple.php';
-require_once $__dir . '/HTMLPurifier/Token/Comment.php';
-require_once $__dir . '/HTMLPurifier/Token/Tag.php';
-require_once $__dir . '/HTMLPurifier/Token/Empty.php';
-require_once $__dir . '/HTMLPurifier/Token/End.php';
-require_once $__dir . '/HTMLPurifier/Token/Start.php';
-require_once $__dir . '/HTMLPurifier/Token/Text.php';
-require_once $__dir . '/HTMLPurifier/URIFilter/DisableExternal.php';
-require_once $__dir . '/HTMLPurifier/URIFilter/DisableExternalResources.php';
-require_once $__dir . '/HTMLPurifier/URIFilter/DisableResources.php';
-require_once $__dir . '/HTMLPurifier/URIFilter/HostBlacklist.php';
-require_once $__dir . '/HTMLPurifier/URIFilter/MakeAbsolute.php';
-require_once $__dir . '/HTMLPurifier/URIFilter/Munge.php';
-require_once $__dir . '/HTMLPurifier/URIFilter/SafeIframe.php';
-require_once $__dir . '/HTMLPurifier/URIScheme/data.php';
-require_once $__dir . '/HTMLPurifier/URIScheme/file.php';
-require_once $__dir . '/HTMLPurifier/URIScheme/ftp.php';
-require_once $__dir . '/HTMLPurifier/URIScheme/http.php';
-require_once $__dir . '/HTMLPurifier/URIScheme/https.php';
-require_once $__dir . '/HTMLPurifier/URIScheme/mailto.php';
-require_once $__dir . '/HTMLPurifier/URIScheme/news.php';
-require_once $__dir . '/HTMLPurifier/URIScheme/nntp.php';
-require_once $__dir . '/HTMLPurifier/URIScheme/tel.php';
-require_once $__dir . '/HTMLPurifier/VarParser/Flexible.php';
-require_once $__dir . '/HTMLPurifier/VarParser/Native.php';

+ 0 - 71
vendor/ezyang/htmlpurifier/library/HTMLPurifier/Arborize.php

@@ -1,71 +0,0 @@
-<?php
-
-/**
- * Converts a stream of HTMLPurifier_Token into an HTMLPurifier_Node,
- * and back again.
- *
- * @note This transformation is not an equivalence.  We mutate the input
- * token stream to make it so; see all [MUT] markers in code.
- */
-class HTMLPurifier_Arborize
-{
-    public static function arborize($tokens, $config, $context) {
-        $definition = $config->getHTMLDefinition();
-        $parent = new HTMLPurifier_Token_Start($definition->info_parent);
-        $stack = array($parent->toNode());
-        foreach ($tokens as $token) {
-            $token->skip = null; // [MUT]
-            $token->carryover = null; // [MUT]
-            if ($token instanceof HTMLPurifier_Token_End) {
-                $token->start = null; // [MUT]
-                $r = array_pop($stack);
-                //assert($r->name === $token->name);
-                //assert(empty($token->attr));
-                $r->endCol = $token->col;
-                $r->endLine = $token->line;
-                $r->endArmor = $token->armor;
-                continue;
-            }
-            $node = $token->toNode();
-            $stack[count($stack)-1]->children[] = $node;
-            if ($token instanceof HTMLPurifier_Token_Start) {
-                $stack[] = $node;
-            }
-        }
-        //assert(count($stack) == 1);
-        return $stack[0];
-    }
-
-    public static function flatten($node, $config, $context) {
-        $level = 0;
-        $nodes = array($level => new HTMLPurifier_Queue(array($node)));
-        $closingTokens = array();
-        $tokens = array();
-        do {
-            while (!$nodes[$level]->isEmpty()) {
-                $node = $nodes[$level]->shift(); // FIFO
-                list($start, $end) = $node->toTokenPair();
-                if ($level > 0) {
-                    $tokens[] = $start;
-                }
-                if ($end !== NULL) {
-                    $closingTokens[$level][] = $end;
-                }
-                if ($node instanceof HTMLPurifier_Node_Element) {
-                    $level++;
-                    $nodes[$level] = new HTMLPurifier_Queue();
-                    foreach ($node->children as $childNode) {
-                        $nodes[$level]->push($childNode);
-                    }
-                }
-            }
-            $level--;
-            if ($level && isset($closingTokens[$level])) {
-                while ($token = array_pop($closingTokens[$level])) {
-                    $tokens[] = $token;
-                }
-            }
-        } while ($level > 0);
-        return $tokens;
-    }
-}

+ 0 - 148
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrCollections.php

@@ -1,148 +0,0 @@
-<?php
-
-/**
- * Defines common attribute collections that modules reference
- */
-
-class HTMLPurifier_AttrCollections
-{
-
-    /**
-     * Associative array of attribute collections, indexed by name.
-     * @type array
-     */
-    public $info = array();
-
-    /**
-     * Performs all expansions on internal data for use by other inclusions
-     * It also collects all attribute collection extensions from
-     * modules
-     * @param HTMLPurifier_AttrTypes $attr_types HTMLPurifier_AttrTypes instance
-     * @param HTMLPurifier_HTMLModule[] $modules Hash array of HTMLPurifier_HTMLModule members
-     */
-    public function __construct($attr_types, $modules)
-    {
-        $this->doConstruct($attr_types, $modules);
-    }
-
-    public function doConstruct($attr_types, $modules)
-    {
-        // load extensions from the modules
-        foreach ($modules as $module) {
-            foreach ($module->attr_collections as $coll_i => $coll) {
-                if (!isset($this->info[$coll_i])) {
-                    $this->info[$coll_i] = array();
-                }
-                foreach ($coll as $attr_i => $attr) {
-                    if ($attr_i === 0 && isset($this->info[$coll_i][$attr_i])) {
-                        // merge in includes
-                        $this->info[$coll_i][$attr_i] = array_merge(
-                            $this->info[$coll_i][$attr_i],
-                            $attr
-                        );
-                        continue;
-                    }
-                    $this->info[$coll_i][$attr_i] = $attr;
-                }
-            }
-        }
-        // perform internal expansions and inclusions
-        foreach ($this->info as $name => $attr) {
-            // merge attribute collections that include others
-            $this->performInclusions($this->info[$name]);
-            // replace string identifiers with actual attribute objects
-            $this->expandIdentifiers($this->info[$name], $attr_types);
-        }
-    }
-
-    /**
-     * Takes a reference to an attribute associative array and performs
-     * all inclusions specified by the zero index.
-     * @param array &$attr Reference to attribute array
-     */
-    public function performInclusions(&$attr)
-    {
-        if (!isset($attr[0])) {
-            return;
-        }
-        $merge = $attr[0];
-        $seen  = array(); // recursion guard
-        // loop through all the inclusions
-        for ($i = 0; isset($merge[$i]); $i++) {
-            if (isset($seen[$merge[$i]])) {
-                continue;
-            }
-            $seen[$merge[$i]] = true;
-            // foreach attribute of the inclusion, copy it over
-            if (!isset($this->info[$merge[$i]])) {
-                continue;
-            }
-            foreach ($this->info[$merge[$i]] as $key => $value) {
-                if (isset($attr[$key])) {
-                    continue;
-                } // also catches more inclusions
-                $attr[$key] = $value;
-            }
-            if (isset($this->info[$merge[$i]][0])) {
-                // recursion
-                $merge = array_merge($merge, $this->info[$merge[$i]][0]);
-            }
-        }
-        unset($attr[0]);
-    }
-
-    /**
-     * Expands all string identifiers in an attribute array by replacing
-     * them with the appropriate values inside HTMLPurifier_AttrTypes
-     * @param array &$attr Reference to attribute array
-     * @param HTMLPurifier_AttrTypes $attr_types HTMLPurifier_AttrTypes instance
-     */
-    public function expandIdentifiers(&$attr, $attr_types)
-    {
-        // because foreach will process new elements we add, make sure we
-        // skip duplicates
-        $processed = array();
-
-        foreach ($attr as $def_i => $def) {
-            // skip inclusions
-            if ($def_i === 0) {
-                continue;
-            }
-
-            if (isset($processed[$def_i])) {
-                continue;
-            }
-
-            // determine whether or not attribute is required
-            if ($required = (strpos($def_i, '*') !== false)) {
-                // rename the definition
-                unset($attr[$def_i]);
-                $def_i = trim($def_i, '*');
-                $attr[$def_i] = $def;
-            }
-
-            $processed[$def_i] = true;
-
-            // if we've already got a literal object, move on
-            if (is_object($def)) {
-                // preserve previous required
-                $attr[$def_i]->required = ($required || $attr[$def_i]->required);
-                continue;
-            }
-
-            if ($def === false) {
-                unset($attr[$def_i]);
-                continue;
-            }
-
-            if ($t = $attr_types->get($def)) {
-                $attr[$def_i] = $t;
-                $attr[$def_i]->required = $required;
-            } else {
-                unset($attr[$def_i]);
-            }
-        }
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 144
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef.php

@@ -1,144 +0,0 @@
-<?php
-
-/**
- * Base class for all validating attribute definitions.
- *
- * This family of classes forms the core for not only HTML attribute validation,
- * but also any sort of string that needs to be validated or cleaned (which
- * means CSS properties and composite definitions are defined here too).
- * Besides defining (through code) what precisely makes the string valid,
- * subclasses are also responsible for cleaning the code if possible.
- */
-
-abstract class HTMLPurifier_AttrDef
-{
-
-    /**
-     * Tells us whether or not an HTML attribute is minimized.
-     * Has no meaning in other contexts.
-     * @type bool
-     */
-    public $minimized = false;
-
-    /**
-     * Tells us whether or not an HTML attribute is required.
-     * Has no meaning in other contexts
-     * @type bool
-     */
-    public $required = false;
-
-    /**
-     * Validates and cleans passed string according to a definition.
-     *
-     * @param string $string String to be validated and cleaned.
-     * @param HTMLPurifier_Config $config Mandatory HTMLPurifier_Config object.
-     * @param HTMLPurifier_Context $context Mandatory HTMLPurifier_Context object.
-     */
-    abstract public function validate($string, $config, $context);
-
-    /**
-     * Convenience method that parses a string as if it were CDATA.
-     *
-     * This method process a string in the manner specified at
-     * <http://www.w3.org/TR/html4/types.html#h-6.2> by removing
-     * leading and trailing whitespace, ignoring line feeds, and replacing
-     * carriage returns and tabs with spaces.  While most useful for HTML
-     * attributes specified as CDATA, it can also be applied to most CSS
-     * values.
-     *
-     * @note This method is not entirely standards compliant, as trim() removes
-     *       more types of whitespace than specified in the spec. In practice,
-     *       this is rarely a problem, as those extra characters usually have
-     *       already been removed by HTMLPurifier_Encoder.
-     *
-     * @warning This processing is inconsistent with XML's whitespace handling
-     *          as specified by section 3.3.3 and referenced XHTML 1.0 section
-     *          4.7.  However, note that we are NOT necessarily
-     *          parsing XML, thus, this behavior may still be correct. We
-     *          assume that newlines have been normalized.
-     */
-    public function parseCDATA($string)
-    {
-        $string = trim($string);
-        $string = str_replace(array("\n", "\t", "\r"), ' ', $string);
-        return $string;
-    }
-
-    /**
-     * Factory method for creating this class from a string.
-     * @param string $string String construction info
-     * @return HTMLPurifier_AttrDef Created AttrDef object corresponding to $string
-     */
-    public function make($string)
-    {
-        // default implementation, return a flyweight of this object.
-        // If $string has an effect on the returned object (i.e. you
-        // need to overload this method), it is best
-        // to clone or instantiate new copies. (Instantiation is safer.)
-        return $this;
-    }
-
-    /**
-     * Removes spaces from rgb(0, 0, 0) so that shorthand CSS properties work
-     * properly. THIS IS A HACK!
-     * @param string $string a CSS colour definition
-     * @return string
-     */
-    protected function mungeRgb($string)
-    {
-        $p = '\s*(\d+(\.\d+)?([%]?))\s*';
-
-        if (preg_match('/(rgba|hsla)\(/', $string)) {
-            return preg_replace('/(rgba|hsla)\('.$p.','.$p.','.$p.','.$p.'\)/', '\1(\2,\5,\8,\11)', $string);
-        }
-
-        return preg_replace('/(rgb|hsl)\('.$p.','.$p.','.$p.'\)/', '\1(\2,\5,\8)', $string);
-    }
-
-    /**
-     * Parses a possibly escaped CSS string and returns the "pure"
-     * version of it.
-     */
-    protected function expandCSSEscape($string)
-    {
-        // flexibly parse it
-        $ret = '';
-        for ($i = 0, $c = strlen($string); $i < $c; $i++) {
-            if ($string[$i] === '\\') {
-                $i++;
-                if ($i >= $c) {
-                    $ret .= '\\';
-                    break;
-                }
-                if (ctype_xdigit($string[$i])) {
-                    $code = $string[$i];
-                    for ($a = 1, $i++; $i < $c && $a < 6; $i++, $a++) {
-                        if (!ctype_xdigit($string[$i])) {
-                            break;
-                        }
-                        $code .= $string[$i];
-                    }
-                    // We have to be extremely careful when adding
-                    // new characters, to make sure we're not breaking
-                    // the encoding.
-                    $char = HTMLPurifier_Encoder::unichr(hexdec($code));
-                    if (HTMLPurifier_Encoder::cleanUTF8($char) === '') {
-                        continue;
-                    }
-                    $ret .= $char;
-                    if ($i < $c && trim($string[$i]) !== '') {
-                        $i--;
-                    }
-                    continue;
-                }
-                if ($string[$i] === "\n") {
-                    continue;
-                }
-            }
-            $ret .= $string[$i];
-        }
-        return $ret;
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 140
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS.php

@@ -1,140 +0,0 @@
-<?php
-
-/**
- * Validates the HTML attribute style, otherwise known as CSS.
- * @note We don't implement the whole CSS specification, so it might be
- *       difficult to reuse this component in the context of validating
- *       actual stylesheet declarations.
- * @note If we were really serious about validating the CSS, we would
- *       tokenize the styles and then parse the tokens. Obviously, we
- *       are not doing that. Doing that could seriously harm performance,
- *       but would make these components a lot more viable for a CSS
- *       filtering solution.
- */
-class HTMLPurifier_AttrDef_CSS extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * @param string $css
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($css, $config, $context)
-    {
-        $css = $this->parseCDATA($css);
-
-        $definition = $config->getCSSDefinition();
-        $allow_duplicates = $config->get("CSS.AllowDuplicates");
-
-        $universal_attrdef = new HTMLPurifier_AttrDef_Enum(
-            array(
-                'initial',
-                'inherit',
-                'unset',
-            )
-        );
-
-        // According to the CSS2.1 spec, the places where a
-        // non-delimiting semicolon can appear are in strings
-        // escape sequences.   So here is some dumb hack to
-        // handle quotes.
-        $len = strlen($css);
-        $accum = "";
-        $declarations = array();
-        $quoted = false;
-        for ($i = 0; $i < $len; $i++) {
-            $c = strcspn($css, ";'\"", $i);
-            $accum .= substr($css, $i, $c);
-            $i += $c;
-            if ($i == $len) break;
-            $d = $css[$i];
-            if ($quoted) {
-                $accum .= $d;
-                if ($d == $quoted) {
-                    $quoted = false;
-                }
-            } else {
-                if ($d == ";") {
-                    $declarations[] = $accum;
-                    $accum = "";
-                } else {
-                    $accum .= $d;
-                    $quoted = $d;
-                }
-            }
-        }
-        if ($accum != "") $declarations[] = $accum;
-
-        $propvalues = array();
-        $new_declarations = '';
-
-        /**
-         * Name of the current CSS property being validated.
-         */
-        $property = false;
-        $context->register('CurrentCSSProperty', $property);
-
-        foreach ($declarations as $declaration) {
-            if (!$declaration) {
-                continue;
-            }
-            if (!strpos($declaration, ':')) {
-                continue;
-            }
-            list($property, $value) = explode(':', $declaration, 2);
-            $property = trim($property);
-            $value = trim($value);
-            $ok = false;
-            do {
-                if (isset($definition->info[$property])) {
-                    $ok = true;
-                    break;
-                }
-                if (ctype_lower($property)) {
-                    break;
-                }
-                $property = strtolower($property);
-                if (isset($definition->info[$property])) {
-                    $ok = true;
-                    break;
-                }
-            } while (0);
-            if (!$ok) {
-                continue;
-            }
-            $result = $universal_attrdef->validate($value, $config, $context);
-            if ($result === false) {
-                $result = $definition->info[$property]->validate(
-                    $value,
-                    $config,
-                    $context
-                );
-            }
-            if ($result === false) {
-                continue;
-            }
-            if ($allow_duplicates) {
-                $new_declarations .= "$property:$result;";
-            } else {
-                $propvalues[$property] = $result;
-            }
-        }
-
-        $context->destroy('CurrentCSSProperty');
-
-        // procedure does not write the new CSS simultaneously, so it's
-        // slightly inefficient, but it's the only way of getting rid of
-        // duplicates. Perhaps config to optimize it, but not now.
-
-        foreach ($propvalues as $prop => $value) {
-            $new_declarations .= "$prop:$value;";
-        }
-
-        return $new_declarations ? $new_declarations : false;
-
-    }
-
-}
-
-// vim: et sw=4 sts=4

+ 0 - 34
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/AlphaValue.php

@@ -1,34 +0,0 @@
-<?php
-
-class HTMLPurifier_AttrDef_CSS_AlphaValue extends HTMLPurifier_AttrDef_CSS_Number
-{
-
-    public function __construct()
-    {
-        parent::__construct(false); // opacity is non-negative, but we will clamp it
-    }
-
-    /**
-     * @param string $number
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return string
-     */
-    public function validate($number, $config, $context)
-    {
-        $result = parent::validate($number, $config, $context);
-        if ($result === false) {
-            return $result;
-        }
-        $float = (float)$result;
-        if ($float < 0.0) {
-            $result = '0';
-        }
-        if ($float > 1.0) {
-            $result = '1';
-        }
-        return $result;
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 113
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Background.php

@@ -1,113 +0,0 @@
-<?php
-
-/**
- * Validates shorthand CSS property background.
- * @warning Does not support url tokens that have internal spaces.
- */
-class HTMLPurifier_AttrDef_CSS_Background extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * Local copy of component validators.
-     * @type HTMLPurifier_AttrDef[]
-     * @note See HTMLPurifier_AttrDef_Font::$info for a similar impl.
-     */
-    protected $info;
-
-    /**
-     * @param HTMLPurifier_Config $config
-     */
-    public function __construct($config)
-    {
-        $def = $config->getCSSDefinition();
-        $this->info['background-color'] = $def->info['background-color'];
-        $this->info['background-image'] = $def->info['background-image'];
-        $this->info['background-repeat'] = $def->info['background-repeat'];
-        $this->info['background-attachment'] = $def->info['background-attachment'];
-        $this->info['background-position'] = $def->info['background-position'];
-        $this->info['background-size'] = $def->info['background-size'];
-    }
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        // regular pre-processing
-        $string = $this->parseCDATA($string);
-        if ($string === '') {
-            return false;
-        }
-
-        // munge rgb() decl if necessary
-        $string = $this->mungeRgb($string);
-
-        // assumes URI doesn't have spaces in it
-        $bits = explode(' ', $string); // bits to process
-
-        $caught = array();
-        $caught['color'] = false;
-        $caught['image'] = false;
-        $caught['repeat'] = false;
-        $caught['attachment'] = false;
-        $caught['position'] = false;
-        $caught['size'] = false;
-
-        $i = 0; // number of catches
-
-        foreach ($bits as $bit) {
-            if ($bit === '') {
-                continue;
-            }
-            foreach ($caught as $key => $status) {
-                if ($key != 'position') {
-                    if ($status !== false) {
-                        continue;
-                    }
-                    $r = $this->info['background-' . $key]->validate($bit, $config, $context);
-                } else {
-                    $r = $bit;
-                }
-                if ($r === false) {
-                    continue;
-                }
-                if ($key == 'position') {
-                    if ($caught[$key] === false) {
-                        $caught[$key] = '';
-                    }
-                    $caught[$key] .= $r . ' ';
-                } else {
-                    $caught[$key] = $r;
-                }
-                $i++;
-                break;
-            }
-        }
-
-        if (!$i) {
-            return false;
-        }
-        if ($caught['position'] !== false) {
-            $caught['position'] = $this->info['background-position']->
-                validate($caught['position'], $config, $context);
-        }
-
-        $ret = array();
-        foreach ($caught as $value) {
-            if ($value === false) {
-                continue;
-            }
-            $ret[] = $value;
-        }
-
-        if (empty($ret)) {
-            return false;
-        }
-        return implode(' ', $ret);
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 157
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php

@@ -1,157 +0,0 @@
-<?php
-
-/* W3C says:
-    [ // adjective and number must be in correct order, even if
-      // you could switch them without introducing ambiguity.
-      // some browsers support that syntax
-        [
-            <percentage> | <length> | left | center | right
-        ]
-        [
-            <percentage> | <length> | top | center | bottom
-        ]?
-    ] |
-    [ // this signifies that the vertical and horizontal adjectives
-      // can be arbitrarily ordered, however, there can only be two,
-      // one of each, or none at all
-        [
-            left | center | right
-        ] ||
-        [
-            top | center | bottom
-        ]
-    ]
-    top, left = 0%
-    center, (none) = 50%
-    bottom, right = 100%
-*/
-
-/* QuirksMode says:
-    keyword + length/percentage must be ordered correctly, as per W3C
-
-    Internet Explorer and Opera, however, support arbitrary ordering. We
-    should fix it up.
-
-    Minor issue though, not strictly necessary.
-*/
-
-// control freaks may appreciate the ability to convert these to
-// percentages or something, but it's not necessary
-
-/**
- * Validates the value of background-position.
- */
-class HTMLPurifier_AttrDef_CSS_BackgroundPosition extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * @type HTMLPurifier_AttrDef_CSS_Length
-     */
-    protected $length;
-
-    /**
-     * @type HTMLPurifier_AttrDef_CSS_Percentage
-     */
-    protected $percentage;
-
-    public function __construct()
-    {
-        $this->length = new HTMLPurifier_AttrDef_CSS_Length();
-        $this->percentage = new HTMLPurifier_AttrDef_CSS_Percentage();
-    }
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        $string = $this->parseCDATA($string);
-        $bits = explode(' ', $string);
-
-        $keywords = array();
-        $keywords['h'] = false; // left, right
-        $keywords['v'] = false; // top, bottom
-        $keywords['ch'] = false; // center (first word)
-        $keywords['cv'] = false; // center (second word)
-        $measures = array();
-
-        $i = 0;
-
-        $lookup = array(
-            'top' => 'v',
-            'bottom' => 'v',
-            'left' => 'h',
-            'right' => 'h',
-            'center' => 'c'
-        );
-
-        foreach ($bits as $bit) {
-            if ($bit === '') {
-                continue;
-            }
-
-            // test for keyword
-            $lbit = ctype_lower($bit) ? $bit : strtolower($bit);
-            if (isset($lookup[$lbit])) {
-                $status = $lookup[$lbit];
-                if ($status == 'c') {
-                    if ($i == 0) {
-                        $status = 'ch';
-                    } else {
-                        $status = 'cv';
-                    }
-                }
-                $keywords[$status] = $lbit;
-                $i++;
-            }
-
-            // test for length
-            $r = $this->length->validate($bit, $config, $context);
-            if ($r !== false) {
-                $measures[] = $r;
-                $i++;
-            }
-
-            // test for percentage
-            $r = $this->percentage->validate($bit, $config, $context);
-            if ($r !== false) {
-                $measures[] = $r;
-                $i++;
-            }
-        }
-
-        if (!$i) {
-            return false;
-        } // no valid values were caught
-
-        $ret = array();
-
-        // first keyword
-        if ($keywords['h']) {
-            $ret[] = $keywords['h'];
-        } elseif ($keywords['ch']) {
-            $ret[] = $keywords['ch'];
-            $keywords['cv'] = false; // prevent re-use: center = center center
-        } elseif (count($measures)) {
-            $ret[] = array_shift($measures);
-        }
-
-        if ($keywords['v']) {
-            $ret[] = $keywords['v'];
-        } elseif ($keywords['cv']) {
-            $ret[] = $keywords['cv'];
-        } elseif (count($measures)) {
-            $ret[] = array_shift($measures);
-        }
-
-        if (empty($ret)) {
-            return false;
-        }
-        return implode(' ', $ret);
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 56
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Border.php

@@ -1,56 +0,0 @@
-<?php
-
-/**
- * Validates the border property as defined by CSS.
- */
-class HTMLPurifier_AttrDef_CSS_Border extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * Local copy of properties this property is shorthand for.
-     * @type HTMLPurifier_AttrDef[]
-     */
-    protected $info = array();
-
-    /**
-     * @param HTMLPurifier_Config $config
-     */
-    public function __construct($config)
-    {
-        $def = $config->getCSSDefinition();
-        $this->info['border-width'] = $def->info['border-width'];
-        $this->info['border-style'] = $def->info['border-style'];
-        $this->info['border-top-color'] = $def->info['border-top-color'];
-    }
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        $string = $this->parseCDATA($string);
-        $string = $this->mungeRgb($string);
-        $bits = explode(' ', $string);
-        $done = array(); // segments we've finished
-        $ret = ''; // return value
-        foreach ($bits as $bit) {
-            foreach ($this->info as $propname => $validator) {
-                if (isset($done[$propname])) {
-                    continue;
-                }
-                $r = $validator->validate($bit, $config, $context);
-                if ($r !== false) {
-                    $ret .= $r . ' ';
-                    $done[$propname] = true;
-                    break;
-                }
-            }
-        }
-        return rtrim($ret);
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 161
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Color.php

@@ -1,161 +0,0 @@
-<?php
-
-/**
- * Validates Color as defined by CSS.
- */
-class HTMLPurifier_AttrDef_CSS_Color extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * @type HTMLPurifier_AttrDef_CSS_AlphaValue
-     */
-    protected $alpha;
-
-    public function __construct()
-    {
-        $this->alpha = new HTMLPurifier_AttrDef_CSS_AlphaValue();
-    }
-
-    /**
-     * @param string $color
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($color, $config, $context)
-    {
-        static $colors = null;
-        if ($colors === null) {
-            $colors = $config->get('Core.ColorKeywords');
-        }
-
-        $color = trim($color);
-        if ($color === '') {
-            return false;
-        }
-
-        $lower = strtolower($color);
-        if (isset($colors[$lower])) {
-            return $colors[$lower];
-        }
-
-        if (preg_match('#(rgb|rgba|hsl|hsla)\(#', $color, $matches) === 1) {
-            $length = strlen($color);
-            if (strpos($color, ')') !== $length - 1) {
-                return false;
-            }
-
-            // get used function : rgb, rgba, hsl or hsla
-            $function = $matches[1];
-
-            $parameters_size = 3;
-            $alpha_channel = false;
-            if (substr($function, -1) === 'a') {
-                $parameters_size = 4;
-                $alpha_channel = true;
-            }
-
-            /*
-             * Allowed types for values :
-             * parameter_position => [type => max_value]
-             */
-            $allowed_types = array(
-                1 => array('percentage' => 100, 'integer' => 255),
-                2 => array('percentage' => 100, 'integer' => 255),
-                3 => array('percentage' => 100, 'integer' => 255),
-            );
-            $allow_different_types = false;
-
-            if (strpos($function, 'hsl') !== false) {
-                $allowed_types = array(
-                    1 => array('integer' => 360),
-                    2 => array('percentage' => 100),
-                    3 => array('percentage' => 100),
-                );
-                $allow_different_types = true;
-            }
-
-            $values = trim(str_replace($function, '', $color), ' ()');
-
-            $parts = explode(',', $values);
-            if (count($parts) !== $parameters_size) {
-                return false;
-            }
-
-            $type = false;
-            $new_parts = array();
-            $i = 0;
-
-            foreach ($parts as $part) {
-                $i++;
-                $part = trim($part);
-
-                if ($part === '') {
-                    return false;
-                }
-
-                // different check for alpha channel
-                if ($alpha_channel === true && $i === count($parts)) {
-                    $result = $this->alpha->validate($part, $config, $context);
-
-                    if ($result === false) {
-                        return false;
-                    }
-
-                    $new_parts[] = (string)$result;
-                    continue;
-                }
-
-                if (substr($part, -1) === '%') {
-                    $current_type = 'percentage';
-                } else {
-                    $current_type = 'integer';
-                }
-
-                if (!array_key_exists($current_type, $allowed_types[$i])) {
-                    return false;
-                }
-
-                if (!$type) {
-                    $type = $current_type;
-                }
-
-                if ($allow_different_types === false && $type != $current_type) {
-                    return false;
-                }
-
-                $max_value = $allowed_types[$i][$current_type];
-
-                if ($current_type == 'integer') {
-                    // Return value between range 0 -> $max_value
-                    $new_parts[] = (int)max(min($part, $max_value), 0);
-                } elseif ($current_type == 'percentage') {
-                    $new_parts[] = (float)max(min(rtrim($part, '%'), $max_value), 0) . '%';
-                }
-            }
-
-            $new_values = implode(',', $new_parts);
-
-            $color = $function . '(' . $new_values . ')';
-        } else {
-            // hexadecimal handling
-            if ($color[0] === '#') {
-                $hex = substr($color, 1);
-            } else {
-                $hex = $color;
-                $color = '#' . $color;
-            }
-            $length = strlen($hex);
-            if ($length !== 3 && $length !== 6) {
-                return false;
-            }
-            if (!ctype_xdigit($hex)) {
-                return false;
-            }
-        }
-        return $color;
-    }
-
-}
-
-// vim: et sw=4 sts=4

+ 0 - 48
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Composite.php

@@ -1,48 +0,0 @@
-<?php
-
-/**
- * Allows multiple validators to attempt to validate attribute.
- *
- * Composite is just what it sounds like: a composite of many validators.
- * This means that multiple HTMLPurifier_AttrDef objects will have a whack
- * at the string.  If one of them passes, that's what is returned.  This is
- * especially useful for CSS values, which often are a choice between
- * an enumerated set of predefined values or a flexible data type.
- */
-class HTMLPurifier_AttrDef_CSS_Composite extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * List of objects that may process strings.
-     * @type HTMLPurifier_AttrDef[]
-     * @todo Make protected
-     */
-    public $defs;
-
-    /**
-     * @param HTMLPurifier_AttrDef[] $defs List of HTMLPurifier_AttrDef objects
-     */
-    public function __construct($defs)
-    {
-        $this->defs = $defs;
-    }
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        foreach ($this->defs as $i => $def) {
-            $result = $this->defs[$i]->validate($string, $config, $context);
-            if ($result !== false) {
-                return $result;
-            }
-        }
-        return false;
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 44
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php

@@ -1,44 +0,0 @@
-<?php
-
-/**
- * Decorator which enables CSS properties to be disabled for specific elements.
- */
-class HTMLPurifier_AttrDef_CSS_DenyElementDecorator extends HTMLPurifier_AttrDef
-{
-    /**
-     * @type HTMLPurifier_AttrDef
-     */
-    public $def;
-    /**
-     * @type string
-     */
-    public $element;
-
-    /**
-     * @param HTMLPurifier_AttrDef $def Definition to wrap
-     * @param string $element Element to deny
-     */
-    public function __construct($def, $element)
-    {
-        $this->def = $def;
-        $this->element = $element;
-    }
-
-    /**
-     * Checks if CurrentToken is set and equal to $this->element
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        $token = $context->get('CurrentToken', true);
-        if ($token && $token->name == $this->element) {
-            return false;
-        }
-        return $this->def->validate($string, $config, $context);
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 77
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Filter.php

@@ -1,77 +0,0 @@
-<?php
-
-/**
- * Microsoft's proprietary filter: CSS property
- * @note Currently supports the alpha filter. In the future, this will
- *       probably need an extensible framework
- */
-class HTMLPurifier_AttrDef_CSS_Filter extends HTMLPurifier_AttrDef
-{
-    /**
-     * @type HTMLPurifier_AttrDef_Integer
-     */
-    protected $intValidator;
-
-    public function __construct()
-    {
-        $this->intValidator = new HTMLPurifier_AttrDef_Integer();
-    }
-
-    /**
-     * @param string $value
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($value, $config, $context)
-    {
-        $value = $this->parseCDATA($value);
-        if ($value === 'none') {
-            return $value;
-        }
-        // if we looped this we could support multiple filters
-        $function_length = strcspn($value, '(');
-        $function = trim(substr($value, 0, $function_length));
-        if ($function !== 'alpha' &&
-            $function !== 'Alpha' &&
-            $function !== 'progid:DXImageTransform.Microsoft.Alpha'
-        ) {
-            return false;
-        }
-        $cursor = $function_length + 1;
-        $parameters_length = strcspn($value, ')', $cursor);
-        $parameters = substr($value, $cursor, $parameters_length);
-        $params = explode(',', $parameters);
-        $ret_params = array();
-        $lookup = array();
-        foreach ($params as $param) {
-            list($key, $value) = explode('=', $param);
-            $key = trim($key);
-            $value = trim($value);
-            if (isset($lookup[$key])) {
-                continue;
-            }
-            if ($key !== 'opacity') {
-                continue;
-            }
-            $value = $this->intValidator->validate($value, $config, $context);
-            if ($value === false) {
-                continue;
-            }
-            $int = (int)$value;
-            if ($int > 100) {
-                $value = '100';
-            }
-            if ($int < 0) {
-                $value = '0';
-            }
-            $ret_params[] = "$key=$value";
-            $lookup[$key] = true;
-        }
-        $ret_parameters = implode(',', $ret_params);
-        $ret_function = "$function($ret_parameters)";
-        return $ret_function;
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 176
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Font.php

@@ -1,176 +0,0 @@
-<?php
-
-/**
- * Validates shorthand CSS property font.
- */
-class HTMLPurifier_AttrDef_CSS_Font extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * Local copy of validators
-     * @type HTMLPurifier_AttrDef[]
-     * @note If we moved specific CSS property definitions to their own
-     *       classes instead of having them be assembled at run time by
-     *       CSSDefinition, this wouldn't be necessary.  We'd instantiate
-     *       our own copies.
-     */
-    protected $info = array();
-
-    /**
-     * @param HTMLPurifier_Config $config
-     */
-    public function __construct($config)
-    {
-        $def = $config->getCSSDefinition();
-        $this->info['font-style'] = $def->info['font-style'];
-        $this->info['font-variant'] = $def->info['font-variant'];
-        $this->info['font-weight'] = $def->info['font-weight'];
-        $this->info['font-size'] = $def->info['font-size'];
-        $this->info['line-height'] = $def->info['line-height'];
-        $this->info['font-family'] = $def->info['font-family'];
-    }
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        static $system_fonts = array(
-            'caption' => true,
-            'icon' => true,
-            'menu' => true,
-            'message-box' => true,
-            'small-caption' => true,
-            'status-bar' => true
-        );
-
-        // regular pre-processing
-        $string = $this->parseCDATA($string);
-        if ($string === '') {
-            return false;
-        }
-
-        // check if it's one of the keywords
-        $lowercase_string = strtolower($string);
-        if (isset($system_fonts[$lowercase_string])) {
-            return $lowercase_string;
-        }
-
-        $bits = explode(' ', $string); // bits to process
-        $stage = 0; // this indicates what we're looking for
-        $caught = array(); // which stage 0 properties have we caught?
-        $stage_1 = array('font-style', 'font-variant', 'font-weight');
-        $final = ''; // output
-
-        for ($i = 0, $size = count($bits); $i < $size; $i++) {
-            if ($bits[$i] === '') {
-                continue;
-            }
-            switch ($stage) {
-                case 0: // attempting to catch font-style, font-variant or font-weight
-                    foreach ($stage_1 as $validator_name) {
-                        if (isset($caught[$validator_name])) {
-                            continue;
-                        }
-                        $r = $this->info[$validator_name]->validate(
-                            $bits[$i],
-                            $config,
-                            $context
-                        );
-                        if ($r !== false) {
-                            $final .= $r . ' ';
-                            $caught[$validator_name] = true;
-                            break;
-                        }
-                    }
-                    // all three caught, continue on
-                    if (count($caught) >= 3) {
-                        $stage = 1;
-                    }
-                    if ($r !== false) {
-                        break;
-                    }
-                case 1: // attempting to catch font-size and perhaps line-height
-                    $found_slash = false;
-                    if (strpos($bits[$i], '/') !== false) {
-                        list($font_size, $line_height) =
-                            explode('/', $bits[$i]);
-                        if ($line_height === '') {
-                            // ooh, there's a space after the slash!
-                            $line_height = false;
-                            $found_slash = true;
-                        }
-                    } else {
-                        $font_size = $bits[$i];
-                        $line_height = false;
-                    }
-                    $r = $this->info['font-size']->validate(
-                        $font_size,
-                        $config,
-                        $context
-                    );
-                    if ($r !== false) {
-                        $final .= $r;
-                        // attempt to catch line-height
-                        if ($line_height === false) {
-                            // we need to scroll forward
-                            for ($j = $i + 1; $j < $size; $j++) {
-                                if ($bits[$j] === '') {
-                                    continue;
-                                }
-                                if ($bits[$j] === '/') {
-                                    if ($found_slash) {
-                                        return false;
-                                    } else {
-                                        $found_slash = true;
-                                        continue;
-                                    }
-                                }
-                                $line_height = $bits[$j];
-                                break;
-                            }
-                        } else {
-                            // slash already found
-                            $found_slash = true;
-                            $j = $i;
-                        }
-                        if ($found_slash) {
-                            $i = $j;
-                            $r = $this->info['line-height']->validate(
-                                $line_height,
-                                $config,
-                                $context
-                            );
-                            if ($r !== false) {
-                                $final .= '/' . $r;
-                            }
-                        }
-                        $final .= ' ';
-                        $stage = 2;
-                        break;
-                    }
-                    return false;
-                case 2: // attempting to catch font-family
-                    $font_family =
-                        implode(' ', array_slice($bits, $i, $size - $i));
-                    $r = $this->info['font-family']->validate(
-                        $font_family,
-                        $config,
-                        $context
-                    );
-                    if ($r !== false) {
-                        $final .= $r . ' ';
-                        // processing completed successfully
-                        return rtrim($final);
-                    }
-                    return false;
-            }
-        }
-        return false;
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 217
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/FontFamily.php

@@ -1,217 +0,0 @@
-<?php
-
-/**
- * Validates a font family list according to CSS spec
- */
-class HTMLPurifier_AttrDef_CSS_FontFamily extends HTMLPurifier_AttrDef
-{
-
-    protected $mask = null;
-
-    public function __construct()
-    {
-        // Lowercase letters
-        $l = range('a', 'z');
-        // Uppercase letters
-        $u = range('A', 'Z');
-        // Digits
-        $d = range('0', '9');
-        // Special bytes used by UTF-8
-        $b = array_map('chr', range(0x80, 0xFF));
-        // All valid characters for the mask
-        $c = array_merge($l, $u, $d, $b);
-        // Concatenate all valid characters into a string 
-        // Use '_- ' as an initial value
-        $this->mask = array_reduce($c, function ($carry, $value) {
-            return $carry . $value;
-        }, '_- ');
-
-        /*
-            PHP's internal strcspn implementation is
-            O(length of string * length of mask), making it inefficient
-            for large masks.  However, it's still faster than
-            preg_match 8)
-          for (p = s1;;) {
-            spanp = s2;
-            do {
-              if (*spanp == c || p == s1_end) {
-                return p - s1;
-              }
-            } while (spanp++ < (s2_end - 1));
-            c = *++p;
-          }
-         */
-        // possible optimization: invert the mask.
-    }
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        static $generic_names = array(
-            'serif' => true,
-            'sans-serif' => true,
-            'monospace' => true,
-            'fantasy' => true,
-            'cursive' => true
-        );
-        $allowed_fonts = $config->get('CSS.AllowedFonts');
-
-        // assume that no font names contain commas in them
-        $fonts = explode(',', $string);
-        $final = '';
-        foreach ($fonts as $font) {
-            $font = trim($font);
-            if ($font === '') {
-                continue;
-            }
-            // match a generic name
-            if (isset($generic_names[$font])) {
-                if ($allowed_fonts === null || isset($allowed_fonts[$font])) {
-                    $final .= $font . ', ';
-                }
-                continue;
-            }
-            // match a quoted name
-            if ($font[0] === '"' || $font[0] === "'") {
-                $length = strlen($font);
-                if ($length <= 2) {
-                    continue;
-                }
-                $quote = $font[0];
-                if ($font[$length - 1] !== $quote) {
-                    continue;
-                }
-                $font = substr($font, 1, $length - 2);
-            }
-
-            $font = $this->expandCSSEscape($font);
-
-            // $font is a pure representation of the font name
-
-            if ($allowed_fonts !== null && !isset($allowed_fonts[$font])) {
-                continue;
-            }
-
-            if (ctype_alnum($font) && $font !== '') {
-                // very simple font, allow it in unharmed
-                $final .= $font . ', ';
-                continue;
-            }
-
-            // bugger out on whitespace.  form feed (0C) really
-            // shouldn't show up regardless
-            $font = str_replace(array("\n", "\t", "\r", "\x0C"), ' ', $font);
-
-            // Here, there are various classes of characters which need
-            // to be treated differently:
-            //  - Alphanumeric characters are essentially safe.  We
-            //    handled these above.
-            //  - Spaces require quoting, though most parsers will do
-            //    the right thing if there aren't any characters that
-            //    can be misinterpreted
-            //  - Dashes rarely occur, but they fairly unproblematic
-            //    for parsing/rendering purposes.
-            //  The above characters cover the majority of Western font
-            //  names.
-            //  - Arbitrary Unicode characters not in ASCII.  Because
-            //    most parsers give little thought to Unicode, treatment
-            //    of these codepoints is basically uniform, even for
-            //    punctuation-like codepoints.  These characters can
-            //    show up in non-Western pages and are supported by most
-            //    major browsers, for example: "MS 明朝" is a
-            //    legitimate font-name
-            //    <http://ja.wikipedia.org/wiki/MS_明朝>.  See
-            //    the CSS3 spec for more examples:
-            //    <http://www.w3.org/TR/2011/WD-css3-fonts-20110324/localizedfamilynames.png>
-            //    You can see live samples of these on the Internet:
-            //    <http://www.google.co.jp/search?q=font-family+MS+明朝|ゴシック>
-            //    However, most of these fonts have ASCII equivalents:
-            //    for example, 'MS Mincho', and it's considered
-            //    professional to use ASCII font names instead of
-            //    Unicode font names.  Thanks Takeshi Terada for
-            //    providing this information.
-            //  The following characters, to my knowledge, have not been
-            //  used to name font names.
-            //  - Single quote.  While theoretically you might find a
-            //    font name that has a single quote in its name (serving
-            //    as an apostrophe, e.g. Dave's Scribble), I haven't
-            //    been able to find any actual examples of this.
-            //    Internet Explorer's cssText translation (which I
-            //    believe is invoked by innerHTML) normalizes any
-            //    quoting to single quotes, and fails to escape single
-            //    quotes.  (Note that this is not IE's behavior for all
-            //    CSS properties, just some sort of special casing for
-            //    font-family).  So a single quote *cannot* be used
-            //    safely in the font-family context if there will be an
-            //    innerHTML/cssText translation.  Note that Firefox 3.x
-            //    does this too.
-            //  - Double quote.  In IE, these get normalized to
-            //    single-quotes, no matter what the encoding.  (Fun
-            //    fact, in IE8, the 'content' CSS property gained
-            //    support, where they special cased to preserve encoded
-            //    double quotes, but still translate unadorned double
-            //    quotes into single quotes.)  So, because their
-            //    fixpoint behavior is identical to single quotes, they
-            //    cannot be allowed either.  Firefox 3.x displays
-            //    single-quote style behavior.
-            //  - Backslashes are reduced by one (so \\ -> \) every
-            //    iteration, so they cannot be used safely.  This shows
-            //    up in IE7, IE8 and FF3
-            //  - Semicolons, commas and backticks are handled properly.
-            //  - The rest of the ASCII punctuation is handled properly.
-            // We haven't checked what browsers do to unadorned
-            // versions, but this is not important as long as the
-            // browser doesn't /remove/ surrounding quotes (as IE does
-            // for HTML).
-            //
-            // With these results in hand, we conclude that there are
-            // various levels of safety:
-            //  - Paranoid: alphanumeric, spaces and dashes(?)
-            //  - International: Paranoid + non-ASCII Unicode
-            //  - Edgy: Everything except quotes, backslashes
-            //  - NoJS: Standards compliance, e.g. sod IE. Note that
-            //    with some judicious character escaping (since certain
-            //    types of escaping doesn't work) this is theoretically
-            //    OK as long as innerHTML/cssText is not called.
-            // We believe that international is a reasonable default
-            // (that we will implement now), and once we do more
-            // extensive research, we may feel comfortable with dropping
-            // it down to edgy.
-
-            // Edgy: alphanumeric, spaces, dashes, underscores and Unicode.  Use of
-            // str(c)spn assumes that the string was already well formed
-            // Unicode (which of course it is).
-            if (strspn($font, $this->mask) !== strlen($font)) {
-                continue;
-            }
-
-            // Historical:
-            // In the absence of innerHTML/cssText, these ugly
-            // transforms don't pose a security risk (as \\ and \"
-            // might--these escapes are not supported by most browsers).
-            // We could try to be clever and use single-quote wrapping
-            // when there is a double quote present, but I have choosen
-            // not to implement that.  (NOTE: you can reduce the amount
-            // of escapes by one depending on what quoting style you use)
-            // $font = str_replace('\\', '\\5C ', $font);
-            // $font = str_replace('"',  '\\22 ', $font);
-            // $font = str_replace("'",  '\\27 ', $font);
-
-            // font possibly with spaces, requires quoting
-            $final .= "'$font', ";
-        }
-        $final = rtrim($final, ', ');
-        if ($final === '') {
-            return false;
-        }
-        return $final;
-    }
-
-}
-
-// vim: et sw=4 sts=4

+ 0 - 32
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Ident.php

@@ -1,32 +0,0 @@
-<?php
-
-/**
- * Validates based on {ident} CSS grammar production
- */
-class HTMLPurifier_AttrDef_CSS_Ident extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        $string = trim($string);
-
-        // early abort: '' and '0' (strings that convert to false) are invalid
-        if (!$string) {
-            return false;
-        }
-
-        $pattern = '/^(-?[A-Za-z_][A-Za-z_\-0-9]*)$/';
-        if (!preg_match($pattern, $string)) {
-            return false;
-        }
-        return $string;
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 56
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php

@@ -1,56 +0,0 @@
-<?php
-
-/**
- * Decorator which enables !important to be used in CSS values.
- */
-class HTMLPurifier_AttrDef_CSS_ImportantDecorator extends HTMLPurifier_AttrDef
-{
-    /**
-     * @type HTMLPurifier_AttrDef
-     */
-    public $def;
-    /**
-     * @type bool
-     */
-    public $allow;
-
-    /**
-     * @param HTMLPurifier_AttrDef $def Definition to wrap
-     * @param bool $allow Whether or not to allow !important
-     */
-    public function __construct($def, $allow = false)
-    {
-        $this->def = $def;
-        $this->allow = $allow;
-    }
-
-    /**
-     * Intercepts and removes !important if necessary
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        // test for ! and important tokens
-        $string = trim($string);
-        $is_important = false;
-        // :TODO: optimization: test directly for !important and ! important
-        if (strlen($string) >= 9 && substr($string, -9) === 'important') {
-            $temp = rtrim(substr($string, 0, -9));
-            // use a temp, because we might want to restore important
-            if (strlen($temp) >= 1 && substr($temp, -1) === '!') {
-                $string = rtrim(substr($temp, 0, -1));
-                $is_important = true;
-            }
-        }
-        $string = $this->def->validate($string, $config, $context);
-        if ($this->allow && $is_important) {
-            $string .= ' !important';
-        }
-        return $string;
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 77
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Length.php

@@ -1,77 +0,0 @@
-<?php
-
-/**
- * Represents a Length as defined by CSS.
- */
-class HTMLPurifier_AttrDef_CSS_Length extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * @type HTMLPurifier_Length|string
-     */
-    protected $min;
-
-    /**
-     * @type HTMLPurifier_Length|string
-     */
-    protected $max;
-
-    /**
-     * @param HTMLPurifier_Length|string $min Minimum length, or null for no bound. String is also acceptable.
-     * @param HTMLPurifier_Length|string $max Maximum length, or null for no bound. String is also acceptable.
-     */
-    public function __construct($min = null, $max = null)
-    {
-        $this->min = $min !== null ? HTMLPurifier_Length::make($min) : null;
-        $this->max = $max !== null ? HTMLPurifier_Length::make($max) : null;
-    }
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        $string = $this->parseCDATA($string);
-
-        // Optimizations
-        if ($string === '') {
-            return false;
-        }
-        if ($string === '0') {
-            return '0';
-        }
-        if (strlen($string) === 1) {
-            return false;
-        }
-
-        $length = HTMLPurifier_Length::make($string);
-        if (!$length->isValid()) {
-            return false;
-        }
-
-        if ($this->min) {
-            $c = $length->compareTo($this->min);
-            if ($c === false) {
-                return false;
-            }
-            if ($c < 0) {
-                return false;
-            }
-        }
-        if ($this->max) {
-            $c = $length->compareTo($this->max);
-            if ($c === false) {
-                return false;
-            }
-            if ($c > 0) {
-                return false;
-            }
-        }
-        return $length->toString();
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 112
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/ListStyle.php

@@ -1,112 +0,0 @@
-<?php
-
-/**
- * Validates shorthand CSS property list-style.
- * @warning Does not support url tokens that have internal spaces.
- */
-class HTMLPurifier_AttrDef_CSS_ListStyle extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * Local copy of validators.
-     * @type HTMLPurifier_AttrDef[]
-     * @note See HTMLPurifier_AttrDef_CSS_Font::$info for a similar impl.
-     */
-    protected $info;
-
-    /**
-     * @param HTMLPurifier_Config $config
-     */
-    public function __construct($config)
-    {
-        $def = $config->getCSSDefinition();
-        $this->info['list-style-type'] = $def->info['list-style-type'];
-        $this->info['list-style-position'] = $def->info['list-style-position'];
-        $this->info['list-style-image'] = $def->info['list-style-image'];
-    }
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        // regular pre-processing
-        $string = $this->parseCDATA($string);
-        if ($string === '') {
-            return false;
-        }
-
-        // assumes URI doesn't have spaces in it
-        $bits = explode(' ', strtolower($string)); // bits to process
-
-        $caught = array();
-        $caught['type'] = false;
-        $caught['position'] = false;
-        $caught['image'] = false;
-
-        $i = 0; // number of catches
-        $none = false;
-
-        foreach ($bits as $bit) {
-            if ($i >= 3) {
-                return;
-            } // optimization bit
-            if ($bit === '') {
-                continue;
-            }
-            foreach ($caught as $key => $status) {
-                if ($status !== false) {
-                    continue;
-                }
-                $r = $this->info['list-style-' . $key]->validate($bit, $config, $context);
-                if ($r === false) {
-                    continue;
-                }
-                if ($r === 'none') {
-                    if ($none) {
-                        continue;
-                    } else {
-                        $none = true;
-                    }
-                    if ($key == 'image') {
-                        continue;
-                    }
-                }
-                $caught[$key] = $r;
-                $i++;
-                break;
-            }
-        }
-
-        if (!$i) {
-            return false;
-        }
-
-        $ret = array();
-
-        // construct type
-        if ($caught['type']) {
-            $ret[] = $caught['type'];
-        }
-
-        // construct image
-        if ($caught['image']) {
-            $ret[] = $caught['image'];
-        }
-
-        // construct position
-        if ($caught['position']) {
-            $ret[] = $caught['position'];
-        }
-
-        if (empty($ret)) {
-            return false;
-        }
-        return implode(' ', $ret);
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 71
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Multiple.php

@@ -1,71 +0,0 @@
-<?php
-
-/**
- * Framework class for strings that involve multiple values.
- *
- * Certain CSS properties such as border-width and margin allow multiple
- * lengths to be specified.  This class can take a vanilla border-width
- * definition and multiply it, usually into a max of four.
- *
- * @note Even though the CSS specification isn't clear about it, inherit
- *       can only be used alone: it will never manifest as part of a multi
- *       shorthand declaration.  Thus, this class does not allow inherit.
- */
-class HTMLPurifier_AttrDef_CSS_Multiple extends HTMLPurifier_AttrDef
-{
-    /**
-     * Instance of component definition to defer validation to.
-     * @type HTMLPurifier_AttrDef
-     * @todo Make protected
-     */
-    public $single;
-
-    /**
-     * Max number of values allowed.
-     * @todo Make protected
-     */
-    public $max;
-
-    /**
-     * @param HTMLPurifier_AttrDef $single HTMLPurifier_AttrDef to multiply
-     * @param int $max Max number of values allowed (usually four)
-     */
-    public function __construct($single, $max = 4)
-    {
-        $this->single = $single;
-        $this->max = $max;
-    }
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        $string = $this->mungeRgb($this->parseCDATA($string));
-        if ($string === '') {
-            return false;
-        }
-        $parts = explode(' ', $string); // parseCDATA replaced \r, \t and \n
-        $length = count($parts);
-        $final = '';
-        for ($i = 0, $num = 0; $i < $length && $num < $this->max; $i++) {
-            if (ctype_space($parts[$i])) {
-                continue;
-            }
-            $result = $this->single->validate($parts[$i], $config, $context);
-            if ($result !== false) {
-                $final .= $result . ' ';
-                $num++;
-            }
-        }
-        if ($final === '') {
-            return false;
-        }
-        return rtrim($final);
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 90
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Number.php

@@ -1,90 +0,0 @@
-<?php
-
-/**
- * Validates a number as defined by the CSS spec.
- */
-class HTMLPurifier_AttrDef_CSS_Number extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * Indicates whether or not only positive values are allowed.
-     * @type bool
-     */
-    protected $non_negative = false;
-
-    /**
-     * @param bool $non_negative indicates whether negatives are forbidden
-     */
-    public function __construct($non_negative = false)
-    {
-        $this->non_negative = $non_negative;
-    }
-
-    /**
-     * @param string $number
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return string|bool
-     * @warning Some contexts do not pass $config, $context. These
-     *          variables should not be used without checking HTMLPurifier_Length
-     */
-    public function validate($number, $config, $context)
-    {
-        $number = $this->parseCDATA($number);
-
-        if ($number === '') {
-            return false;
-        }
-        if ($number === '0') {
-            return '0';
-        }
-
-        $sign = '';
-        switch ($number[0]) {
-            case '-':
-                if ($this->non_negative) {
-                    return false;
-                }
-                $sign = '-';
-            case '+':
-                $number = substr($number, 1);
-        }
-
-        if (ctype_digit($number)) {
-            $number = ltrim($number, '0');
-            return $number ? $sign . $number : '0';
-        }
-
-        // Period is the only non-numeric character allowed
-        if (strpos($number, '.') === false) {
-            return false;
-        }
-
-        list($left, $right) = explode('.', $number, 2);
-
-        if ($left === '' && $right === '') {
-            return false;
-        }
-        if ($left !== '' && !ctype_digit($left)) {
-            return false;
-        }
-
-        // Remove leading zeros until positive number or a zero stays left
-        if (ltrim($left, '0') != '') {
-            $left = ltrim($left, '0');
-        } else {
-            $left = '0';
-        }
-
-        $right = rtrim($right, '0');
-
-        if ($right === '') {
-            return $left ? $sign . $left : '0';
-        } elseif (!ctype_digit($right)) {
-            return false;
-        }
-        return $sign . $left . '.' . $right;
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 54
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Percentage.php

@@ -1,54 +0,0 @@
-<?php
-
-/**
- * Validates a Percentage as defined by the CSS spec.
- */
-class HTMLPurifier_AttrDef_CSS_Percentage extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * Instance to defer number validation to.
-     * @type HTMLPurifier_AttrDef_CSS_Number
-     */
-    protected $number_def;
-
-    /**
-     * @param bool $non_negative Whether to forbid negative values
-     */
-    public function __construct($non_negative = false)
-    {
-        $this->number_def = new HTMLPurifier_AttrDef_CSS_Number($non_negative);
-    }
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        $string = $this->parseCDATA($string);
-
-        if ($string === '') {
-            return false;
-        }
-        $length = strlen($string);
-        if ($length === 1) {
-            return false;
-        }
-        if ($string[$length - 1] !== '%') {
-            return false;
-        }
-
-        $number = substr($string, 0, $length - 1);
-        $number = $this->number_def->validate($number, $config, $context);
-
-        if ($number === false) {
-            return false;
-        }
-        return "$number%";
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 46
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Ratio.php

@@ -1,46 +0,0 @@
-<?php
-
-/**
- * Validates a ratio as defined by the CSS spec.
- */
-class HTMLPurifier_AttrDef_CSS_Ratio extends HTMLPurifier_AttrDef
-{
-    /**
-     * @param   string               $ratio   Ratio to validate
-     * @param   HTMLPurifier_Config  $config  Configuration options
-     * @param   HTMLPurifier_Context $context Context
-     *
-     * @return  string|boolean
-     *
-     * @warning Some contexts do not pass $config, $context. These
-     *          variables should not be used without checking HTMLPurifier_Length
-     */
-    public function validate($ratio, $config, $context)
-    {
-        $ratio = $this->parseCDATA($ratio);
-
-        $parts = explode('/', $ratio, 2);
-        $length = count($parts);
-
-        if ($length < 1 || $length > 2) {
-            return false;
-        }
-
-        $num = new \HTMLPurifier_AttrDef_CSS_Number();
-
-        if ($length === 1) {
-            return $num->validate($parts[0], $config, $context);
-        }
-
-        $num1 = $num->validate($parts[0], $config, $context);
-        $num2 = $num->validate($parts[1], $config, $context);
-
-        if ($num1 === false || $num2 === false) {
-            return false;
-        }
-
-        return $num1 . '/' . $num2;
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 46
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/TextDecoration.php

@@ -1,46 +0,0 @@
-<?php
-
-/**
- * Validates the value for the CSS property text-decoration
- * @note This class could be generalized into a version that acts sort of
- *       like Enum except you can compound the allowed values.
- */
-class HTMLPurifier_AttrDef_CSS_TextDecoration extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        static $allowed_values = array(
-            'line-through' => true,
-            'overline' => true,
-            'underline' => true,
-        );
-
-        $string = strtolower($this->parseCDATA($string));
-
-        if ($string === 'none') {
-            return $string;
-        }
-
-        $parts = explode(' ', $string);
-        $final = '';
-        foreach ($parts as $part) {
-            if (isset($allowed_values[$part])) {
-                $final .= $part . ' ';
-            }
-        }
-        $final = rtrim($final);
-        if ($final === '') {
-            return false;
-        }
-        return $final;
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 77
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/URI.php

@@ -1,77 +0,0 @@
-<?php
-
-/**
- * Validates a URI in CSS syntax, which uses url('http://example.com')
- * @note While theoretically speaking a URI in a CSS document could
- *       be non-embedded, as of CSS2 there is no such usage so we're
- *       generalizing it. This may need to be changed in the future.
- * @warning Since HTMLPurifier_AttrDef_CSS blindly uses semicolons as
- *          the separator, you cannot put a literal semicolon in
- *          in the URI. Try percent encoding it, in that case.
- */
-class HTMLPurifier_AttrDef_CSS_URI extends HTMLPurifier_AttrDef_URI
-{
-
-    public function __construct()
-    {
-        parent::__construct(true); // always embedded
-    }
-
-    /**
-     * @param string $uri_string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($uri_string, $config, $context)
-    {
-        // parse the URI out of the string and then pass it onto
-        // the parent object
-
-        $uri_string = $this->parseCDATA($uri_string);
-        if (strpos($uri_string, 'url(') !== 0) {
-            return false;
-        }
-        $uri_string = substr($uri_string, 4);
-        if (strlen($uri_string) == 0) {
-            return false;
-        }
-        $new_length = strlen($uri_string) - 1;
-        if ($uri_string[$new_length] != ')') {
-            return false;
-        }
-        $uri = trim(substr($uri_string, 0, $new_length));
-
-        if (!empty($uri) && ($uri[0] == "'" || $uri[0] == '"')) {
-            $quote = $uri[0];
-            $new_length = strlen($uri) - 1;
-            if ($uri[$new_length] !== $quote) {
-                return false;
-            }
-            $uri = substr($uri, 1, $new_length - 1);
-        }
-
-        $uri = $this->expandCSSEscape($uri);
-
-        $result = parent::validate($uri, $config, $context);
-
-        if ($result === false) {
-            return false;
-        }
-
-        // extra sanity check; should have been done by URI
-        $result = str_replace(array('"', "\\", "\n", "\x0c", "\r"), "", $result);
-
-        // suspicious characters are ()'; we're going to percent encode
-        // them for safety.
-        $result = str_replace(array('(', ')', "'"), array('%28', '%29', '%27'), $result);
-
-        // there's an extra bug where ampersands lose their escaping on
-        // an innerHTML cycle, so a very unlucky query parameter could
-        // then change the meaning of the URL.  Unfortunately, there's
-        // not much we can do about that...
-        return "url(\"$result\")";
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 44
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Clone.php

@@ -1,44 +0,0 @@
-<?php
-
-/**
- * Dummy AttrDef that mimics another AttrDef, BUT it generates clones
- * with make.
- */
-class HTMLPurifier_AttrDef_Clone extends HTMLPurifier_AttrDef
-{
-    /**
-     * What we're cloning.
-     * @type HTMLPurifier_AttrDef
-     */
-    protected $clone;
-
-    /**
-     * @param HTMLPurifier_AttrDef $clone
-     */
-    public function __construct($clone)
-    {
-        $this->clone = $clone;
-    }
-
-    /**
-     * @param string $v
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($v, $config, $context)
-    {
-        return $this->clone->validate($v, $config, $context);
-    }
-
-    /**
-     * @param string $string
-     * @return HTMLPurifier_AttrDef
-     */
-    public function make($string)
-    {
-        return clone $this->clone;
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 73
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Enum.php

@@ -1,73 +0,0 @@
-<?php
-
-// Enum = Enumerated
-/**
- * Validates a keyword against a list of valid values.
- * @warning The case-insensitive compare of this function uses PHP's
- *          built-in strtolower and ctype_lower functions, which may
- *          cause problems with international comparisons
- */
-class HTMLPurifier_AttrDef_Enum extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * Lookup table of valid values.
-     * @type array
-     * @todo Make protected
-     */
-    public $valid_values = array();
-
-    /**
-     * Bool indicating whether or not enumeration is case sensitive.
-     * @note In general this is always case insensitive.
-     */
-    protected $case_sensitive = false; // values according to W3C spec
-
-    /**
-     * @param array $valid_values List of valid values
-     * @param bool $case_sensitive Whether or not case sensitive
-     */
-    public function __construct($valid_values = array(), $case_sensitive = false)
-    {
-        $this->valid_values = array_flip($valid_values);
-        $this->case_sensitive = $case_sensitive;
-    }
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        $string = trim($string);
-        if (!$this->case_sensitive) {
-            // we may want to do full case-insensitive libraries
-            $string = ctype_lower($string) ? $string : strtolower($string);
-        }
-        $result = isset($this->valid_values[$string]);
-
-        return $result ? $string : false;
-    }
-
-    /**
-     * @param string $string In form of comma-delimited list of case-insensitive
-     *      valid values. Example: "foo,bar,baz". Prepend "s:" to make
-     *      case sensitive
-     * @return HTMLPurifier_AttrDef_Enum
-     */
-    public function make($string)
-    {
-        if (strlen($string) > 2 && $string[0] == 's' && $string[1] == ':') {
-            $string = substr($string, 2);
-            $sensitive = true;
-        } else {
-            $sensitive = false;
-        }
-        $values = explode(',', $string);
-        return new HTMLPurifier_AttrDef_Enum($values, $sensitive);
-    }
-}
-
-// vim: et sw=4 sts=4

+ 0 - 48
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Bool.php

@@ -1,48 +0,0 @@
-<?php
-
-/**
- * Validates a boolean attribute
- */
-class HTMLPurifier_AttrDef_HTML_Bool extends HTMLPurifier_AttrDef
-{
-
-    /**
-     * @type string
-     */
-    protected $name;
-
-    /**
-     * @type bool
-     */
-    public $minimized = true;
-
-    /**
-     * @param bool|string $name
-     */
-    public function __construct($name = false)
-    {
-        $this->name = $name;
-    }
-
-    /**
-     * @param string $string
-     * @param HTMLPurifier_Config $config
-     * @param HTMLPurifier_Context $context
-     * @return bool|string
-     */
-    public function validate($string, $config, $context)
-    {
-        return $this->name;
-    }
-
-    /**
-     * @param string $string Name of attribute
-     * @return HTMLPurifier_AttrDef_HTML_Bool
-     */
-    public function make($string)
-    {
-        return new HTMLPurifier_AttrDef_HTML_Bool($string);
-    }
-}
-
-// vim: et sw=4 sts=4

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików