From 46b64572601f9a18143ad63f777181f4b884396e Mon Sep 17 00:00:00 2001 From: zhoudw <zhoudw@infobird.com> Date: Mon, 27 Dec 2021 09:28:55 +0800 Subject: [PATCH] hy --- runtime/container/classes.cache | 1 config/autoload/databases.php | 39 config/autoload/commands.php | 13 app/Utils/guid.php | 78 config/autoload/logger.php | 30 runtime/container/proxy/App_Controller_WebsocketController.proxy.php | 211 + config/autoload/cache.php | 18 app/Controller/WebsocketController.php | 203 + index.html | 75 config/autoload/processes.php | 13 config/autoload/listeners.php | 13 runtime/hyperf.pid | 1 composer.lock | 7102 +++++++++++++++++++++++++++++++++++++++++++++++ config/autoload/devtool.php | 44 composer.json | 78 runtime/container/proxy/App_Service_TransferService.proxy.php | 102 config/autoload/redis.php | 27 config/routes.php | 16 app/Utils/Http.php | 196 + config/autoload/exceptions.php | 20 config/container.php | 24 config/autoload/server.php | 53 app/Utils/HashMap.php | 122 config/autoload/aspects.php | 13 config/config.php | 33 app/Service/TransferService.php | 110 runtime/container/aspects.cache | 1 runtime/container/proxy/App_Utils_Http.proxy.php | 145 app/Model/Model.php | 18 bin/hyperf.php | 23 config/autoload/annotations.php | 21 runtime/container/scan.cache | 1 app/Exception/Handler/AppExceptionHandler.php | 43 config/autoload/middlewares.php | 15 app/Listener/DbQueryExecutedListener.php | 61 config/autoload/dependencies.php | 13 36 files changed, 8,976 insertions(+), 0 deletions(-) diff --git a/app/Controller/WebsocketController.php b/app/Controller/WebsocketController.php new file mode 100644 index 0000000..4f9fc70 --- /dev/null +++ b/app/Controller/WebsocketController.php @@ -0,0 +1,203 @@ +<?php +/* + * @Author: your name + * @Date: 2021-12-24 10:26:10 + * @LastEditTime: 2021-12-24 17:21:42 + * @LastEditors: Please set LastEditors + * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + * @FilePath: /hy-websocket/app/Controller/WebsocketController.php + */ + +declare(strict_types=1); + +namespace App\Controller; + +use Hyperf\Contract\OnCloseInterface; +use Hyperf\Contract\OnMessageInterface; +use Hyperf\Contract\OnOpenInterface; +use Swoole\Http\Request; +use Swoole\Http\Response; +use Swoole\WebSocket\Frame; +use Swoole\WebSocket\Server; +use Hyperf\Di\Annotation\Inject; +use App\Service\TransferService; +use Hyperf\Logger\LoggerFactory; +use Hyperf\Contract\ConfigInterface; + +class WebsocketController implements OnMessageInterface, OnOpenInterface, OnCloseInterface +{ + /** + * @Inject + * @var TransferService + */ + private $transferService; + /** + * + * @var \Psr\Log\LoggerInterface + */ + public $logger; + + /** + * @Inject() + * @var ConfigInterface + */ + private $config; + + private $server_config; + + private $allow_ip; + + public function __construct(LoggerFactory $loggerFactory) + { + // 第一个参数对应日志的 name, 第二个参数对应 config/autoload/logger.php 内的 key + $this->logger = $loggerFactory->get('log','default'); + //获取 server.php 里的内容 + $this->server_config = $this->config->get('server.servers',''); + $this->allow_ip = $this->server_config[0]['allow_ip']; + } + + public function onClose($server, int $fd, int $reactorId): void + { + //客户端异常关闭 + //语音文件传输完毕,关闭文件。 + $host = $this->allow_ip; + $group_key = $this->transferService->get($host.':'.$fd.':group'); + $this->transferService->lrem($group_key,$fd,0); + $set_ket = $host.':'.$fd.':group'; + $this->transferService->delete($set_ket); + } + + public function onStart($server): void + { + $host = $this->allow_ip; + $keyList = $this->transferService->keys("*{$host}*"); + foreach ($keyList as $key => $value) { + $this->transferService->delete($value); + } + } + /** + * @param Response|Server $server + */ + public function onMessage($server, Frame $frame): void + { + $ret = array('code' => 0, 'data' => null); + $msgData = $this->is_json($frame->data,true); + if($msgData){ + $frameData = $msgData; + $url = $frameData['url']; + $data = $frameData['data']; + $action = substr($url, strrpos($url, "/") + 1); + switch ($action) + { + case "reg": + $groupId = $data['group_id']; + $session = $data['session_id']; + $this->bind($groupId,'',$frame->fd); + $key = "practice_scenes_ws_cur_session_info:".$session; + $node_key = 'practice_scenes_ws_cur_session_node_info:'.$session; + $redisData = $this->transferService->get($key); + if($redisData){ + $ret['data'] =json_decode($redisData,true); + $this->transferService->delete($key); + }else{ + $redisData = $this->transferService->get($node_key); + if($redisData){ + $ret['data'] = json_decode($redisData,true); + }else{ + $ret['data'] = ''; + } + } + $ret['event'] = "re_bind"; + $server->push($frame->fd, json_encode($ret)); + break; + case "data": + $groupId = $data['group_id']; + $ret['event'] = "data"; + $ret['data'] = $data; + $connections = array(); + if(empty($groupId)){ + // 获取所有无分组标识在线终端 + $onlines = count($server->connections); + if ($onlines > 0) { + $connections = $server->connections; + } + }else{ + // 获取所有分组标识在线终端 key = groupID:host + $key = $groupId . ':' . $this->allow_ip; + $connections = $this->transferService->lrange($key, 0, -1); + } + $connections = array_unique($connections); + // 广播获取的在线终端 + foreach ($connections as $fd) { + $ingfd = (int)$fd; + $server->push($ingfd,json_encode($ret)); + } + break; + case "ping": + $server->push($frame->fd, $data.'pong'); + break; + default: + $ret['code'] = 404; + $ret['msg'] = 'event no existent'; + $server->push($frame->fd,json_encode($ret)); + return; + } + }else{ + $ret['code'] = -1; + $ret['msg'] = 'data is null or data no json'; + $server->push($frame->fd, json_encode($ret)); + return; + } + } + + public function onOpen($server, Request $request): void + { + // $server->push($request->fd, 'Opened'); + // var_dump($request); + } + + /** + * 功能:1、判断是否是json + * @param string $data + * @param bool $assoc + * @return bool|mixed|string + */ + public function is_json($data = '', $assoc = false) + { + $data = json_decode($data, $assoc); + if ($data && (is_object($data)) || (is_array($data) && ! empty(current($data)))) { + return $data; + } + return false; + } + + /** + * 当前链接的绑定事件。 + * 绑定的几种状态: + * 1.无分组 + * host -> fds (获取当前节点的在线链接列表) + * host:fd -> value (获取当前节点当前链接的绑定数据) + * host:fd:group -> host (获取当前节点当前链接的绑定分组) + * 2.有分组 + * groupID:host -> fds + * host:fd -> value + * host:fd:group -> groupID:host + * @param string $groupID 需要绑定当前链接所在分组的分组标识,如果为空则使用默认分组 + * @param string $value 需要绑定当前链接对应的业务数据,如果为空则不绑定 + */ + public function bind($groupID = '', $value = '',$fd){ + $host = $this->allow_ip; + // 绑定分组和当前链接对应的分组标识 + if(empty($groupID)){ + $this->transferService->rpush($host, $fd); + $this->transferService->set($host.':'.$fd.':group', $host); + }else{ + $this->transferService->rpush($groupID.':'.$host, $fd); + $this->transferService->set($host.':'.$fd.':group', $groupID.':'.$host); + } + // 绑定业务数据 + if(!empty($value)){ + $this->transferService->set($host.':'.$fd, $value); + } + } +} diff --git a/app/Exception/Handler/AppExceptionHandler.php b/app/Exception/Handler/AppExceptionHandler.php new file mode 100644 index 0000000..188d298 --- /dev/null +++ b/app/Exception/Handler/AppExceptionHandler.php @@ -0,0 +1,43 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +namespace App\Exception\Handler; + +use Hyperf\Contract\StdoutLoggerInterface; +use Hyperf\ExceptionHandler\ExceptionHandler; +use Hyperf\HttpMessage\Stream\SwooleStream; +use Psr\Http\Message\ResponseInterface; +use Throwable; + +class AppExceptionHandler extends ExceptionHandler +{ + /** + * @var StdoutLoggerInterface + */ + protected $logger; + + public function __construct(StdoutLoggerInterface $logger) + { + $this->logger = $logger; + } + + public function handle(Throwable $throwable, ResponseInterface $response) + { + $this->logger->error(sprintf('%s[%s] in %s', $throwable->getMessage(), $throwable->getLine(), $throwable->getFile())); + $this->logger->error($throwable->getTraceAsString()); + return $response->withHeader('Server', 'Hyperf')->withStatus(500)->withBody(new SwooleStream('Internal Server Error.')); + } + + public function isValid(Throwable $throwable): bool + { + return true; + } +} diff --git a/app/Listener/DbQueryExecutedListener.php b/app/Listener/DbQueryExecutedListener.php new file mode 100644 index 0000000..abe5a52 --- /dev/null +++ b/app/Listener/DbQueryExecutedListener.php @@ -0,0 +1,61 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +namespace App\Listener; + +use Hyperf\Database\Events\QueryExecuted; +use Hyperf\Event\Annotation\Listener; +use Hyperf\Event\Contract\ListenerInterface; +use Hyperf\Logger\LoggerFactory; +use Hyperf\Utils\Arr; +use Hyperf\Utils\Str; +use Psr\Container\ContainerInterface; +use Psr\Log\LoggerInterface; + +/** + * @Listener + */ +class DbQueryExecutedListener implements ListenerInterface +{ + /** + * @var LoggerInterface + */ + private $logger; + + public function __construct(ContainerInterface $container) + { + $this->logger = $container->get(LoggerFactory::class)->get('sql'); + } + + public function listen(): array + { + return [ + QueryExecuted::class, + ]; + } + + /** + * @param QueryExecuted $event + */ + public function process(object $event) + { + if ($event instanceof QueryExecuted) { + $sql = $event->sql; + if (! Arr::isAssoc($event->bindings)) { + foreach ($event->bindings as $key => $value) { + $sql = Str::replaceFirst('?', "'{$value}'", $sql); + } + } + + $this->logger->info(sprintf('[%s] %s', $event->time, $sql)); + } + } +} diff --git a/app/Model/Model.php b/app/Model/Model.php new file mode 100644 index 0000000..fe03061 --- /dev/null +++ b/app/Model/Model.php @@ -0,0 +1,18 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +namespace App\Model; + +use Hyperf\DbConnection\Model\Model as BaseModel; + +abstract class Model extends BaseModel +{ +} diff --git a/app/Service/TransferService.php b/app/Service/TransferService.php new file mode 100644 index 0000000..a7d394a --- /dev/null +++ b/app/Service/TransferService.php @@ -0,0 +1,110 @@ +<?php +namespace App\Service; +use Hyperf\Redis\Redis; +use Hyperf\Di\Annotation\Inject; +use Hyperf\Config\Annotation\Value; + +use App\Utils\Http; + +class TransferService extends Http +{ + /** + * + * @Inject + * @var Redis + */ + private $redis; + + public function ping() + { + $result=$this->redis->ping(); + } + + public function setnx($strKey,$value) + { + $this->redis->setnx($strKey,$value); + } + + public function set($strKey,$value) + { + $this->redis->set($strKey,$value); + } + + public function get($strKey) + { + return $this->redis->get($strKey); + } + + public function delete($strKey) + { + $this->redis->del($strKey); + } + + public function incrby($str_key,$value=0){ + $this->redis->incrby($str_key,$value); + } + + public function incr($fd){ + return $this->redis->incr($fd); + } + + public function decr($strKey) + { + return $this->redis->decr($strKey); + } + + public function decrby($strKey,$num) + { + return $this->redis->decrby($strKey,$num); + } + + public function lSize($strKey) + { + return $this->redis->lSize($strKey); + } + + public function lGet($strKey,$index) + { + return $this->redis->lGet($strKey,$index); + } + + public function lrem($strKey,$value,$index) + { + return $this->redis->lrem($strKey,$value,$index); + } + + public function lPush($strKey,$value) + { + $this->redis->lPush($strKey,$value); + } + + public function rPush($strKey,$value) + { + $this->redis->rPush($strKey,$value); + } + + public function lPop($strKey) + { + return $this->redis->lPop($strKey); + } + + public function rPop($strKey) + { + return $this->redis->rPop($strKey); + } + + public function lSet($strKey,$index,$value) + { + return $this->redis->lSet($strKey,$index,$value); + } + + public function lrange($strKey,$index,$length) + { + return $this->redis->lrange($strKey,$index,$length); + } + + public function keys($strKey) + { + return $this->redis->keys($strKey); + } +} \ No newline at end of file diff --git a/app/Utils/HashMap.php b/app/Utils/HashMap.php new file mode 100644 index 0000000..1836de7 --- /dev/null +++ b/app/Utils/HashMap.php @@ -0,0 +1,122 @@ +<?php + +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +namespace App\Utils; + +class HashMap +{ + var $m_table; + + + public function __construct() + { + $this->m_table = array (); + } + + public function put($key, $value) + { + if (!array_key_exists($key, $this->m_table)) + { + $this->m_table[$key] = $value; + return null; + } + else + { + $tempValue = $this->m_table[$key]; + $this->m_table[$key] = $value; + return $tempValue; + } + } + + + public function get($key) + { + if (array_key_exists($key, $this->m_table)) + return $this->m_table[$key]; + return null; + } + + public function remove($key) + { + if(array_key_exists($key, $this->m_table)) + { + unset($this->m_table[$key]); + } + return $this->m_table; + } + + public function keys() + { + return array_keys($this->m_table); + } + + public function values() + { + return array_values($this->m_table); + } + + public function put_all($map) + { + if(!$map->isEmpty()&& $map->size()>0) + { + $keys = $map->keys(); + foreach($keys as $key) + { + $this->put($key,$map->get($key)); + } + } + } + + public function clear() + { + unset($this->m_table); + //$this->m_table = null; + $this->m_table = array (); + } + + public function contains_value($value) + { + while ($curValue = current($this->m_table)) + { + if ($curValue == $value) + { + return true; + } + next($this->m_table); + } + return false; + } + + public function containsKey($key) + { + if (array_key_exists($key, $this->m_table)) + { + return true; + } + else + { + return false; + } + } + + public function size() + { + return count($this->m_table); + } + + public function is_empty() + { + return (count($this->m_table) == 0); + } + + public function toString() + { + print_r($this->m_table); + } +} + +?> \ No newline at end of file diff --git a/app/Utils/Http.php b/app/Utils/Http.php new file mode 100644 index 0000000..5b2e919 --- /dev/null +++ b/app/Utils/Http.php @@ -0,0 +1,196 @@ +<?php +namespace App\Utils; + +use GuzzleHttp\Client; +use GuzzleHttp\HandlerStack; +use Hyperf\Guzzle\CoroutineHandler; +use GuzzleHttp\Exception\ClientException; + +use Hyperf\Di\Annotation\Inject; +use Hyperf\Guzzle\ClientFactory; + +class Http { + + /** + * @Inject + * @var ClientFactory + */ + private $clientFactory; + + function get_host($url,&$path){ + $pos=strpos($url,"/",8); + if (!$pos) { + $path="/"; + return $url; + } + + $path=substr($url,$pos); + return substr($url,0,$pos); + } + + public function get_content_length($url,$time_out=60) + { + if ($url=="") { + return 0; + } + + try { + + $options = [ + 'base_uri' => "", + 'handler' => HandlerStack::create(new CoroutineHandler()), + 'timeout' => $time_out, + 'swoole' => [ + 'timeout' => $time_out, + 'socket_buffer_size' => 1024 * 1024 * 2, + ], + ]; + + $path=""; + $host=$this->get_host($url,$path); + if ($host=="") { + return 0; + } + $options["base_uri"]=$host; + $client = $this->clientFactory->create($options); + $response=$client->get($path); + if ($response->getStatusCode()!=200) { + return 0; + } + + $str_size = $response->getHeader('Content-Length'); + $size = intval($str_size[0]); + return $size; + } catch (ClientException $e) { + //获取协程中出现的异常。 + $response_e=$e->getResponse(); + } + + return 0; + } + + public function get_web_result($url,$time_out=10) + { + if ($url=="") { + return ""; + } + + $path=""; + $host=$this->get_host($url,$path); + if ($host=="") { + return ""; + } + $options = [ + 'base_uri' => $host, + 'handler' => HandlerStack::create(new CoroutineHandler()), + 'timeout' => $time_out, + 'swoole' => [ + 'timeout' => $time_out, + 'socket_buffer_size' => 1024 * 1024 * 2, + ], + ]; + + try { + //var_dump($this->clientFactory); + $client = $this->clientFactory->create($options); + $response=$client->get($path); + if ($response->getStatusCode()==200) { + $strContent=$response->getBody()->getContents(); + //echo "$strContent\r\n"; + return $strContent; + } + + } catch (ClientException $e) { + //获取协程中出现的异常。 + var_dump($e->getResponse()); + } + return ""; + } + + public function post_web_result($url,$post_data,$time_out=10) + { + + if ($url=="") { + return ""; + } + + + $path=""; + $host=$this->get_host($url,$path); + if ($host=="") { + return ""; + } + + $options = [ + 'base_uri' => $host, + 'handler' => HandlerStack::create(new CoroutineHandler()), + 'timeout' => $time_out, + 'swoole' => [ + 'timeout' => $time_out, + 'socket_buffer_size' => 1024 * 1024 * 2, + ], + ]; + + try { + $client = $this->clientFactory->create($options); + $response = $client->request('POST', $url, ['form_params' => $post_data]); + //debug + //$response = $client->request('POST', $url, ['form_params' => $post_data,'debug' => true]); + if ($response->getStatusCode()==200) { + $strContent=$response->getBody()->getContents(); + //echo "$strContent\r\n"; + return $strContent; + } + + } catch (ClientException $e) { + //获取协程中出现的异常。 + //var_dump($e->getResponse()); + } + return ""; + } + + public function post_json_result($url,$post_data,$time_out=10) + { + + if ($url=="") { + return ""; + } + + $path=""; + $host=$this->get_host($url,$path); + if ($host=="") { + return ""; + } + + $options = [ + 'base_uri' => $host, + 'handler' => HandlerStack::create(new CoroutineHandler()), + 'timeout' => $time_out, + 'swoole' => [ + 'timeout' => $time_out, + 'socket_buffer_size' => 1024 * 1024 * 2, + ], + ]; + + try { + $client = $this->clientFactory->create($options); + if (is_array($post_data)) { + $response = $client->request('POST', $url, ['body' => json_encode($post_data),"headers"=>['Accept'=> 'application/json']]); + }else{ + $response = $client->request('POST', $url, ['body' => $post_data,"headers"=>['Accept'=> 'application/json']]); + } + //debug + //$response = $client->request('POST', $url, ['form_params' => $post_data,'debug' => true]); + if ($response->getStatusCode()==200) { + $strContent=$response->getBody()->getContents(); + //echo "$strContent\r\n"; + return $strContent; + } + + } catch (ClientException $e) { + //获取协程中出现的异常。 + var_dump($e->getResponse()); + } + return ""; + } +} \ No newline at end of file diff --git a/app/Utils/guid.php b/app/Utils/guid.php new file mode 100644 index 0000000..67a5490 --- /dev/null +++ b/app/Utils/guid.php @@ -0,0 +1,78 @@ +<?php + +/** + *文件名:UserInfo.php + *编写人:杨林康 + *时间 :2014-04-23 + *功能 :生成Guid + *备注 :使用时GUID::create()生成guid + */ +namespace App\Utils; + +class guid +{ + public static function create() + { + $microTime = microtime(); + list($a_dec, $a_sec) = explode(" ", $microTime); + $dec_hex = dechex($a_dec* 1000000); + $sec_hex = dechex($a_sec); + guid::ensureLength($dec_hex, 5); + guid::ensureLength($sec_hex, 6); + $guid = ""; + $guid .= $dec_hex; + $guid .= guid::createGuidSection(3); + $guid .= '-'; + $guid .= guid::createGuidSection(4); + $guid .= '-'; + $guid .= guid::createGuidSection(4); + $guid .= '-'; + $guid .= guid::createGuidSection(4); + $guid .= '-'; + $guid .= $sec_hex; + $guid .= guid::createGuidSection(6); + $ret = str_replace("-","",$guid); + return $ret; + } + + public static function getGuid(){ + $microTime = microtime(); + list($a_dec, $a_sec) = explode(" ", $microTime); + $dec_hex = dechex($a_dec* 1000000); + $sec_hex = dechex($a_sec); + guid::ensureLength($dec_hex, 5); + guid::ensureLength($sec_hex, 6); + $guid = ""; + $guid .= $dec_hex; + $guid .= guid::createGuidSection(3); + $guid .= guid::createGuidSection(4); + $guid .= guid::createGuidSection(4); + $guid .= guid::createGuidSection(4); + $guid .= $sec_hex; + $guid .= guid::createGuidSection(6); + return $guid; + } + + public static function ensureLength(&$string, $length) + { + $strlen = strlen($string); + if($strlen < $length) + { + $string = str_pad($string,$length,"0"); + } + else if($strlen > $length) + { + $string = substr($string, 0, $length); + } + } + + public static function createGuidSection($characters) + { + $return = ""; + for($i=0; $i<$characters; $i++) + { + $return .= dechex(mt_rand(0,15)); + } + return $return; + } +} \ No newline at end of file diff --git a/bin/hyperf.php b/bin/hyperf.php new file mode 100644 index 0000000..10edca5 --- /dev/null +++ b/bin/hyperf.php @@ -0,0 +1,23 @@ +#!/usr/bin/env php +<?php + +ini_set('display_errors', 'on'); +ini_set('display_startup_errors', 'on'); +ini_set('memory_limit', '1G'); + +error_reporting(E_ALL); + +! defined('BASE_PATH') && define('BASE_PATH', dirname(__DIR__, 1)); +! defined('SWOOLE_HOOK_FLAGS') && define('SWOOLE_HOOK_FLAGS', SWOOLE_HOOK_ALL); + +require BASE_PATH . '/vendor/autoload.php'; + +// Self-called anonymous function that creates its own scope and keep the global namespace clean. +(function () { + Hyperf\Di\ClassLoader::init(); + /** @var Psr\Container\ContainerInterface $container */ + $container = require BASE_PATH . '/config/container.php'; + + $application = $container->get(Hyperf\Contract\ApplicationInterface::class); + $application->run(); +})(); diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..73d8516 --- /dev/null +++ b/composer.json @@ -0,0 +1,78 @@ +{ + "name": "hyperf/hyperf-skeleton", + "type": "project", + "keywords": [ + "php", + "swoole", + "framework", + "hyperf", + "microservice", + "middleware" + ], + "description": "A coroutine framework that focuses on hyperspeed and flexible, specifically use for build microservices and middlewares.", + "license": "Apache-2.0", + "require": { + "php": ">=7.3", + "hyperf/cache": "~2.2.0", + "hyperf/command": "~2.2.0", + "hyperf/config": "~2.2.0", + "hyperf/di": "^2.2", + "hyperf/framework": "~2.2.0", + "hyperf/guzzle": "~2.2.0", + "hyperf/http-server": "~2.2.0", + "hyperf/logger": "~2.2.0", + "hyperf/memory": "~2.2.0", + "hyperf/process": "~2.2.0", + "hyperf/redis": "~2.2.0", + "hyperf/websocket-server": "^2.2" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.0", + "hyperf/devtool": "~2.2.0", + "hyperf/ide-helper": "~2.2.0", + "hyperf/testing": "~2.2.0", + "mockery/mockery": "^1.0", + "phpstan/phpstan": "^0.12", + "swoole/ide-helper": "^4.5" + }, + "suggest": { + "ext-openssl": "Required to use HTTPS.", + "ext-json": "Required to use JSON.", + "ext-pdo": "Required to use MySQL Client.", + "ext-pdo_mysql": "Required to use MySQL Client.", + "ext-redis": "Required to use Redis Client." + }, + "autoload": { + "psr-4": { + "App\\": "app/" + }, + "files": [] + }, + "autoload-dev": { + "psr-4": { + "HyperfTest\\": "./test/" + } + }, + "minimum-stability": "dev", + "prefer-stable": true, + "config": { + "optimize-autoloader": true, + "sort-packages": true + }, + "extra": [], + "scripts": { + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-autoload-dump": [ + "rm -rf runtime/container" + ], + "test": "co-phpunit --prepend test/bootstrap.php -c phpunit.xml --colors=always", + "cs-fix": "php-cs-fixer fix $1", + "analyse": "phpstan analyse --memory-limit 300M -l 0 -c phpstan.neon ./app ./config", + "start": [ + "Composer\\Config::disableProcessTimeout", + "php ./bin/hyperf.php start" + ] + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..b8c599a --- /dev/null +++ b/composer.lock @@ -0,0 +1,7102 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "d77fe9d75f0110c1f8eef2addafdad9e", + "packages": [ + { + "name": "doctrine/annotations", + "version": "1.13.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.2" + }, + "time": "2021-08-05T19:00:23+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "vimeo/psalm": "^4.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:16:43+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T18:47:58+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" + }, + { + "name": "fig/http-message-util", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message-util.git", + "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765", + "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "suggest": { + "psr/http-message": "The package containing the PSR-7 interfaces" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Fig\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "issues": "https://github.com/php-fig/http-message-util/issues", + "source": "https://github.com/php-fig/http-message-util/tree/1.1.5" + }, + "time": "2020-11-24T22:02:12+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "0690bde05318336c7221785f2a932467f98b64ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca", + "reference": "0690bde05318336c7221785f2a932467f98b64ca", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "phpoption/phpoption": "^1.8" + }, + "require-dev": { + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2021-11-21T21:41:47+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.4.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "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.4.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "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" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "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.4.1" + }, + "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" + } + ], + "time": "2021-12-06T18:43:05+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "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/1.5.1" + }, + "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" + } + ], + "time": "2021-10-22T20:56:57+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.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.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "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.1.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" + } + ], + "time": "2021-10-06T17:43:30+00:00" + }, + { + "name": "hyperf/cache", + "version": "v2.2.15", + "source": { + "type": "git", + "url": "https://github.com/hyperf/cache.git", + "reference": "3bafd85dae6f333567231339a9019cea35457379" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/cache/zipball/3bafd85dae6f333567231339a9019cea35457379", + "reference": "3bafd85dae6f333567231339a9019cea35457379", + "shasum": "" + }, + "require": { + "hyperf/contract": "~2.2.0", + "hyperf/utils": "~2.2.0", + "php": ">=7.2", + "psr/container": "^1.0|^2.0", + "psr/simple-cache": "^1.0" + }, + "suggest": { + "hyperf/di": "Use cache annotations.", + "hyperf/event": "Use listener to delete annotation cache." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Cache\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A cache component for hyperf.", + "homepage": "https://hyperf.io", + "keywords": [ + "cache", + "hyperf", + "php" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-11-02T10:34:27+00:00" + }, + { + "name": "hyperf/command", + "version": "v2.2.9", + "source": { + "type": "git", + "url": "https://github.com/hyperf/command.git", + "reference": "eb15924c33532e9eced5c7401f94e064324ed03e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/command/zipball/eb15924c33532e9eced5c7401f94e064324ed03e", + "reference": "eb15924c33532e9eced5c7401f94e064324ed03e", + "shasum": "" + }, + "require": { + "hyperf/utils": "~2.2.0", + "php": ">=7.2", + "psr/event-dispatcher": "^1.0", + "symfony/console": "^5.0" + }, + "suggest": { + "hyperf/di": "Required to use annotations." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Command\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Command for hyperf", + "keywords": [ + "command", + "php", + "swoole" + ], + "support": { + "issues": "https://github.com/hyperf/command/issues", + "source": "https://github.com/hyperf/command/tree/v2.2.9" + }, + "time": "2021-09-16T07:20:30+00:00" + }, + { + "name": "hyperf/config", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/hyperf/config.git", + "reference": "ccdcc79ec244612c04f186e65b222ad778db75e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/config/zipball/ccdcc79ec244612c04f186e65b222ad778db75e9", + "reference": "ccdcc79ec244612c04f186e65b222ad778db75e9", + "shasum": "" + }, + "require": { + "hyperf/contract": "~2.2.0", + "hyperf/utils": "~2.2.0", + "php": ">=7.2", + "psr/container": "^1.0|^2.0", + "symfony/finder": "^5.0" + }, + "suggest": { + "hyperf/di": "Allows using @Value annotation", + "hyperf/event": "Allows using @Value annotation", + "hyperf/framework": "Allows using @Value annotation", + "vlucas/phpdotenv": "Allows using enviroment value to override the config" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Config\\ConfigProvider" + } + }, + "autoload": { + "files": [ + "./src/Functions.php" + ], + "psr-4": { + "Hyperf\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "An independent component that provides configuration container.", + "homepage": "https://hyperf.io", + "keywords": [ + "config", + "configuration", + "hyperf", + "php", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-07-18T06:50:14+00:00" + }, + { + "name": "hyperf/contract", + "version": "v2.2.8", + "source": { + "type": "git", + "url": "https://github.com/hyperf/contract.git", + "reference": "6fe18888f8f868a7dad78fefe9397e45a39f3b2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/contract/zipball/6fe18888f8f868a7dad78fefe9397e45a39f3b2e", + "reference": "6fe18888f8f868a7dad78fefe9397e45a39f3b2e", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Contract\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The contracts of Hyperf.", + "homepage": "https://hyperf.io", + "keywords": [ + "hyperf", + "php", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-09-08T04:11:54+00:00" + }, + { + "name": "hyperf/di", + "version": "v2.2.20", + "source": { + "type": "git", + "url": "https://github.com/hyperf/di.git", + "reference": "9efb9451d0df5d9a7636b0eb768f9c36d674a077" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/di/zipball/9efb9451d0df5d9a7636b0eb768f9c36d674a077", + "reference": "9efb9451d0df5d9a7636b0eb768f9c36d674a077", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.6", + "doctrine/instantiator": "^1.0", + "nikic/php-parser": "^4.1", + "php": ">=7.3", + "php-di/phpdoc-reader": "^2.2", + "psr/container": "^1.0|^2.0", + "symfony/finder": "^5.0", + "vlucas/phpdotenv": "^5.0" + }, + "suggest": { + "ext-pcntl": "Required to scan annotations.", + "hyperf/config": "Require this component for annotation scan progress to retrieve the scan path." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Di\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Di\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A DI for Hyperf.", + "homepage": "https://hyperf.io", + "keywords": [ + "annotation", + "di", + "hyperf", + "php", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-12-10T07:57:48+00:00" + }, + { + "name": "hyperf/dispatcher", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/hyperf/dispatcher.git", + "reference": "fdd464fe5fac01c60732eddc2da7c3184e93995c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/dispatcher/zipball/fdd464fe5fac01c60732eddc2da7c3184e93995c", + "reference": "fdd464fe5fac01c60732eddc2da7c3184e93995c", + "shasum": "" + }, + "require": { + "hyperf/contract": "~2.2.0", + "php": ">=7.2", + "psr/container": "^1.0|^2.0", + "psr/http-message": "^1.0", + "psr/http-server-middleware": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Dispatcher\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Dispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A HTTP Server for Hyperf.", + "homepage": "https://hyperf.io", + "keywords": [ + "dispatcher", + "filter", + "hyperf", + "middleware", + "php", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-07-18T06:50:14+00:00" + }, + { + "name": "hyperf/engine", + "version": "v1.1.6", + "source": { + "type": "git", + "url": "https://github.com/hyperf/engine.git", + "reference": "f583f01f458f8c69080e06e6dce715c86edc9f86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/engine/zipball/f583f01f458f8c69080e06e6dce715c86edc9f86", + "reference": "f583f01f458f8c69080e06e6dce715c86edc9f86", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.0", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^9.4", + "swoole/ide-helper": "dev-master" + }, + "suggest": { + "ext-swoole": ">=4.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Engine\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "keywords": [ + "hyperf", + "php" + ], + "support": { + "issues": "https://github.com/hyperf/engine/issues", + "source": "https://github.com/hyperf/engine/tree/v1.1.6" + }, + "time": "2021-07-11T10:22:13+00:00" + }, + { + "name": "hyperf/event", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/hyperf/event.git", + "reference": "9c2ab56737d080d799b9b1f905716c7bf0d61ef6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/event/zipball/9c2ab56737d080d799b9b1f905716c7bf0d61ef6", + "reference": "9c2ab56737d080d799b9b1f905716c7bf0d61ef6", + "shasum": "" + }, + "require": { + "hyperf/contract": "~2.2.0", + "php": ">=7.2", + "psr/event-dispatcher": "^1.0" + }, + "suggest": { + "hyperf/di": "Required to use annotatioins." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Event\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Event\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "an event manager that implements PSR-14.", + "homepage": "https://hyperf.io", + "keywords": [ + "event", + "hyperf", + "php", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-07-18T06:50:14+00:00" + }, + { + "name": "hyperf/exception-handler", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/hyperf/exception-handler.git", + "reference": "4e10fc994e06940a91704b248e389bf96f70ca10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/exception-handler/zipball/4e10fc994e06940a91704b248e389bf96f70ca10", + "reference": "4e10fc994e06940a91704b248e389bf96f70ca10", + "shasum": "" + }, + "require": { + "hyperf/contract": "~2.2.0", + "hyperf/dispatcher": "~2.2.0", + "hyperf/utils": "~2.2.0", + "php": ">=7.2", + "psr/container": "^1.0|^2.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\ExceptionHandler\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\ExceptionHandler\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Exception handler for hyperf", + "homepage": "https://hyperf.io", + "keywords": [ + "exception-handler", + "php", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-07-18T06:50:14+00:00" + }, + { + "name": "hyperf/framework", + "version": "v2.2.14", + "source": { + "type": "git", + "url": "https://github.com/hyperf/framework.git", + "reference": "9210ea3e922914813b290b42b2548bf6ff14f537" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/framework/zipball/9210ea3e922914813b290b42b2548bf6ff14f537", + "reference": "9210ea3e922914813b290b42b2548bf6ff14f537", + "shasum": "" + }, + "require": { + "fig/http-message-util": "^1.1.2", + "hyperf/contract": "~2.2.0", + "hyperf/utils": "~2.2.0", + "php": ">=7.2", + "psr/container": "^1.0|^2.0", + "psr/event-dispatcher": "^1.0", + "psr/log": "^1.0|^2.0|^3.0" + }, + "suggest": { + "ext-swoole": "Required to use swoole engine.", + "hyperf/command": "Required to use Command annotation.", + "hyperf/di": "Required to use Command annotation.", + "hyperf/dispatcher": "Required to use BootApplication event.", + "symfony/event-dispatcher": "Required to use symfony event dispatcher (^5.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Framework\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Framework\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A coroutine framework that focuses on hyperspeed and flexible, specifically use for build microservices and middlewares.", + "homepage": "https://hyperf.io", + "keywords": [ + "Microservice", + "framework", + "hyperf", + "middleware", + "php", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-10-28T10:13:44+00:00" + }, + { + "name": "hyperf/guzzle", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/hyperf/guzzle.git", + "reference": "cae5b639bf41db207618c09d9e227de3bf5efed8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/guzzle/zipball/cae5b639bf41db207618c09d9e227de3bf5efed8", + "reference": "cae5b639bf41db207618c09d9e227de3bf5efed8", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.3|^7.0", + "hyperf/utils": "~2.2.0", + "php": ">=7.0", + "psr/container": "^1.0|^2.0", + "psr/http-message": "^1.0" + }, + "suggest": { + "hyperf/pool": "Required to use pool handler." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Guzzle\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Guzzle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Swoole coroutine handler for guzzle", + "keywords": [ + "Guzzle", + "handler", + "php", + "swoole" + ], + "support": { + "issues": "https://github.com/hyperf/guzzle/issues", + "source": "https://github.com/hyperf/guzzle/tree/v2.2.0" + }, + "time": "2021-07-18T06:50:14+00:00" + }, + { + "name": "hyperf/http-message", + "version": "v2.2.19", + "source": { + "type": "git", + "url": "https://github.com/hyperf/http-message.git", + "reference": "eddcfe8242a2ddf635a497e02445cb9a43143f79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/http-message/zipball/eddcfe8242a2ddf635a497e02445cb9a43143f79", + "reference": "eddcfe8242a2ddf635a497e02445cb9a43143f79", + "shasum": "" + }, + "require": { + "hyperf/utils": "~2.2.0", + "laminas/laminas-mime": "^2.7", + "psr/http-message": "^1.0" + }, + "suggest": { + "psr/container": "Required to replace RequestParserInterface." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\HttpMessage\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\HttpMessage\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "microservice framework base on swoole", + "keywords": [ + "http-message", + "hyperf", + "php", + "swoole" + ], + "support": { + "issues": "https://github.com/hyperf/http-message/issues", + "source": "https://github.com/hyperf/http-message/tree/v2.2.19" + }, + "time": "2021-12-06T02:15:59+00:00" + }, + { + "name": "hyperf/http-server", + "version": "v2.2.19", + "source": { + "type": "git", + "url": "https://github.com/hyperf/http-server.git", + "reference": "6d4ef300be1e17d53bad79f45cffff805537b9e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/http-server/zipball/6d4ef300be1e17d53bad79f45cffff805537b9e6", + "reference": "6d4ef300be1e17d53bad79f45cffff805537b9e6", + "shasum": "" + }, + "require": { + "hyperf/contract": "~2.2.0", + "hyperf/dispatcher": "~2.2.0", + "hyperf/event": "~2.2.0", + "hyperf/exception-handler": "~2.2.0", + "hyperf/http-message": "~2.2.0", + "hyperf/macroable": "~2.2.0", + "hyperf/server": "~2.2.0", + "hyperf/utils": "~2.2.0", + "nikic/fast-route": "^1.3", + "php": ">=7.2", + "psr/container": "^1.0|^2.0" + }, + "suggest": { + "hyperf/di": "Required to use annotations." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\HttpServer\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\HttpServer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A HTTP Server for Hyperf.", + "homepage": "https://hyperf.io", + "keywords": [ + "http", + "http-server", + "hyperf", + "php", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-12-06T02:42:11+00:00" + }, + { + "name": "hyperf/logger", + "version": "v2.2.14", + "source": { + "type": "git", + "url": "https://github.com/hyperf/logger.git", + "reference": "7474e7cb4a8d3ec237771b3023707d6da7bdc02b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/logger/zipball/7474e7cb4a8d3ec237771b3023707d6da7bdc02b", + "reference": "7474e7cb4a8d3ec237771b3023707d6da7bdc02b", + "shasum": "" + }, + "require": { + "hyperf/contract": "~2.2.0", + "hyperf/utils": "~2.2.0", + "monolog/monolog": "^2.0", + "php": ">=7.2", + "psr/container": "^1.0|^2.0", + "psr/log": "^1.0|^2.0|^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Logger\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Logger\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A logger component for hyperf.", + "homepage": "https://hyperf.io", + "keywords": [ + "hyperf", + "logger", + "php" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-10-28T10:13:44+00:00" + }, + { + "name": "hyperf/macroable", + "version": "v2.2.13", + "source": { + "type": "git", + "url": "https://github.com/hyperf/macroable.git", + "reference": "e82df0983d43b2c8c4a801172ca2190ba8c2e0cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/macroable/zipball/e82df0983d43b2c8c4a801172ca2190ba8c2e0cf", + "reference": "e82df0983d43b2c8c4a801172ca2190ba8c2e0cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Macroable\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Hyperf Macroable package which come from illuminate/macroable", + "homepage": "https://hyperf.io", + "keywords": [ + "hyperf", + "macroable", + "php", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-10-25T01:29:21+00:00" + }, + { + "name": "hyperf/memory", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/hyperf/memory.git", + "reference": "e26bfea8c73af4604b217a1b449fbc64a06985d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/memory/zipball/e26bfea8c73af4604b217a1b449fbc64a06985d3", + "reference": "e26bfea8c73af4604b217a1b449fbc64a06985d3", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Memory\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Memory\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "An independent component that use to operate and manage memory.", + "homepage": "https://hyperf.io", + "keywords": [ + "hyperf", + "memory", + "php", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-07-18T06:50:14+00:00" + }, + { + "name": "hyperf/pool", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/hyperf/pool.git", + "reference": "80c02966b9cb8ac939b8c52f6d4981206d69c57d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/pool/zipball/80c02966b9cb8ac939b8c52f6d4981206d69c57d", + "reference": "80c02966b9cb8ac939b8c52f6d4981206d69c57d", + "shasum": "" + }, + "require": { + "hyperf/contract": "~2.2.0", + "hyperf/utils": "~2.2.0", + "php": ">=7.2", + "psr/container": "^1.0|^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Pool\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Pool\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "An independent universal connection pool component.", + "homepage": "https://hyperf.io", + "keywords": [ + "connection-pool", + "hyperf", + "php", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-07-18T06:50:14+00:00" + }, + { + "name": "hyperf/process", + "version": "v2.2.20", + "source": { + "type": "git", + "url": "https://github.com/hyperf/process.git", + "reference": "a7c1f79e5b870352c58e3055c79553ccee707066" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/process/zipball/a7c1f79e5b870352c58e3055c79553ccee707066", + "reference": "a7c1f79e5b870352c58e3055c79553ccee707066", + "shasum": "" + }, + "require": { + "hyperf/contract": "~2.2.0", + "hyperf/utils": "~2.2.0", + "php": ">=7.2", + "psr/container": "^1.0|^2.0", + "psr/event-dispatcher": "^1.0" + }, + "suggest": { + "hyperf/di": "Required to use annotations.", + "hyperf/event": "Required to dump the message before and after process.", + "hyperf/framework": "Required to use BootProcessListener." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Process\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Process\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A process component for hyperf.", + "homepage": "https://hyperf.io", + "keywords": [ + "hyperf", + "php", + "process" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-12-06T03:17:19+00:00" + }, + { + "name": "hyperf/redis", + "version": "v2.2.9", + "source": { + "type": "git", + "url": "https://github.com/hyperf/redis.git", + "reference": "8f49d3911d14b60cbb15bad3dc09b7a892051430" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/redis/zipball/8f49d3911d14b60cbb15bad3dc09b7a892051430", + "reference": "8f49d3911d14b60cbb15bad3dc09b7a892051430", + "shasum": "" + }, + "require": { + "ext-redis": "*", + "hyperf/contract": "~2.2.0", + "hyperf/pool": "~2.2.0", + "hyperf/utils": "~2.2.0", + "php": ">=7.2", + "psr/container": "^1.0|^2.0" + }, + "suggest": { + "ext-redis": "Required to use sentinel mode (>=5.2).", + "hyperf/di": "Create the RedisPool via dependency injection." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Redis\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Redis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A redis component for hyperf.", + "homepage": "https://hyperf.io", + "keywords": [ + "hyperf", + "php", + "pool", + "redis" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-09-22T01:46:38+00:00" + }, + { + "name": "hyperf/server", + "version": "v2.2.21", + "source": { + "type": "git", + "url": "https://github.com/hyperf/server.git", + "reference": "ea4278425e30780dab48058112d799032dff8f7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/server/zipball/ea4278425e30780dab48058112d799032dff8f7a", + "reference": "ea4278425e30780dab48058112d799032dff8f7a", + "shasum": "" + }, + "require": { + "hyperf/contract": "~2.2.0", + "hyperf/utils": "~2.2.0", + "php": ">=7.2", + "psr/container": "^1.0|^2.0", + "psr/event-dispatcher": "^1.0", + "psr/log": "^1.0|^2.0|^3.0", + "symfony/console": "^5.0" + }, + "suggest": { + "hyperf/event": "Dump the info after server start.", + "hyperf/framework": "Dump the info after server start." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Server\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A base server library for Hyperf.", + "homepage": "https://hyperf.io", + "keywords": [ + "hyperf", + "php", + "server", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-12-13T08:49:35+00:00" + }, + { + "name": "hyperf/utils", + "version": "v2.2.19", + "source": { + "type": "git", + "url": "https://github.com/hyperf/utils.git", + "reference": "28b7658046270e8f869846262d2a2143dda770bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/utils/zipball/28b7658046270e8f869846262d2a2143dda770bb", + "reference": "28b7658046270e8f869846262d2a2143dda770bb", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "hyperf/contract": "~2.2.0", + "hyperf/engine": "^1.1", + "hyperf/macroable": "~2.2.0", + "php": ">=7.2" + }, + "suggest": { + "ext-swoole": "Required to use methods related to swoole (>=4.5).", + "hyperf/di": "Required to use ExceptionNormalizer", + "nikic/php-parser": "Required to use PhpParser. (^4.0)", + "symfony/property-access": "Required to use SymfonyNormalizer (^5.0)", + "symfony/serializer": "Required to use SymfonyNormalizer (^5.0)", + "symfony/var-dumper": "Required to use the dd function (^5.0)." + }, + "type": "library", + "extra": { + "hyperf": { + "config": "Hyperf\\Utils\\ConfigProvider" + }, + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Hyperf\\Utils\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A tools package that could help developer solved the problem quickly.", + "homepage": "https://hyperf.io", + "keywords": [ + "hyperf", + "php", + "swoole", + "utils" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-12-06T01:44:39+00:00" + }, + { + "name": "hyperf/websocket-server", + "version": "v2.2.14", + "source": { + "type": "git", + "url": "https://github.com/hyperf/websocket-server.git", + "reference": "367b5deb365306e4ee45f8a84cfa2992f57795b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/websocket-server/zipball/367b5deb365306e4ee45f8a84cfa2992f57795b3", + "reference": "367b5deb365306e4ee45f8a84cfa2992f57795b3", + "shasum": "" + }, + "require": { + "hyperf/contract": "~2.2.0", + "hyperf/exception-handler": "~2.2.0", + "hyperf/http-server": "~2.2.0", + "hyperf/utils": "~2.2.0", + "php": ">=7.2", + "psr/container": "^1.0|^2.0", + "psr/event-dispatcher": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\WebSocketServer\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\WebSocketServer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A websocket server library for Hyperf.", + "homepage": "https://hyperf.io", + "keywords": [ + "hyperf", + "php", + "swoole", + "websocket" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-10-28T10:13:44+00:00" + }, + { + "name": "laminas/laminas-mime", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-mime.git", + "reference": "72d21a1b4bb7086d4a4d7058c0abca180b209184" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-mime/zipball/72d21a1b4bb7086d4a4d7058c0abca180b209184", + "reference": "72d21a1b4bb7086d4a4d7058c0abca180b209184", + "shasum": "" + }, + "require": { + "laminas/laminas-stdlib": "^2.7 || ^3.0", + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-mime": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.2.1", + "laminas/laminas-mail": "^2.12", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "laminas/laminas-mail": "Laminas\\Mail component" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Mime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Create and parse MIME messages and parts", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "mime" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-mime/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-mime/issues", + "rss": "https://github.com/laminas/laminas-mime/releases.atom", + "source": "https://github.com/laminas/laminas-mime" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-20T21:19:24+00:00" + }, + { + "name": "laminas/laminas-stdlib", + "version": "3.6.2", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-stdlib.git", + "reference": "6fe0842909638ca6bea8401b7e8168fb154bffb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/6fe0842909638ca6bea8401b7e8168fb154bffb5", + "reference": "6fe0842909638ca6bea8401b7e8168fb154bffb5", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-stdlib": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.3.0", + "phpbench/phpbench": "^0.17.1", + "phpunit/phpunit": "~9.3.7", + "psalm/plugin-phpunit": "^0.16.0", + "vimeo/psalm": "^4.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Stdlib\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "SPL extensions, array utilities, error handlers, and more", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "stdlib" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-stdlib/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-stdlib/issues", + "rss": "https://github.com/laminas/laminas-stdlib/releases.atom", + "source": "https://github.com/laminas/laminas-stdlib" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-12-07T21:06:58+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.3.5", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7", + "graylog2/gelf-php": "^1.4.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.3", + "phpspec/prophecy": "^1.6.1", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90@dev", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.3.5" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2021-10-01T21:08:31+00:00" + }, + { + "name": "nikic/fast-route", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/FastRoute.git", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|~5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "FastRoute\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov", + "email": "nikic@php.net" + } + ], + "description": "Fast request router for PHP", + "keywords": [ + "router", + "routing" + ], + "support": { + "issues": "https://github.com/nikic/FastRoute/issues", + "source": "https://github.com/nikic/FastRoute/tree/master" + }, + "time": "2018-02-13T20:26:39+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.13.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + }, + "time": "2021-11-30T19:35:32+00:00" + }, + { + "name": "php-di/phpdoc-reader", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/PHP-DI/PhpDocReader.git", + "reference": "66daff34cbd2627740ffec9469ffbac9f8c8185c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-DI/PhpDocReader/zipball/66daff34cbd2627740ffec9469ffbac9f8c8185c", + "reference": "66daff34cbd2627740ffec9469ffbac9f8c8185c", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "require-dev": { + "mnapoli/hard-mode": "~0.3.0", + "phpunit/phpunit": "^8.5|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpDocReader\\": "src/PhpDocReader" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PhpDocReader parses @var and @param values in PHP docblocks (supports namespaced class names with the same resolution rules as PHP)", + "keywords": [ + "phpdoc", + "reflection" + ], + "support": { + "issues": "https://github.com/PHP-DI/PhpDocReader/issues", + "source": "https://github.com/PHP-DI/PhpDocReader/tree/2.2.1" + }, + "time": "2020-10-12T12:39:22+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", + "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.8.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2021-12-04T23:24:31+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "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": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "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" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "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" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "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" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://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/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "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 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/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "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/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/http-server-handler", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-handler.git", + "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7", + "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side request handler", + "keywords": [ + "handler", + "http", + "http-interop", + "psr", + "psr-15", + "psr-7", + "request", + "response", + "server" + ], + "support": { + "issues": "https://github.com/php-fig/http-server-handler/issues", + "source": "https://github.com/php-fig/http-server-handler/tree/master" + }, + "time": "2018-10-30T16:46:14+00:00" + }, + { + "name": "psr/http-server-middleware", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-middleware.git", + "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5", + "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side middleware", + "keywords": [ + "http", + "http-interop", + "middleware", + "psr", + "psr-15", + "psr-7", + "request", + "response" + ], + "support": { + "issues": "https://github.com/php-fig/http-server-middleware/issues", + "source": "https://github.com/php-fig/http-server-middleware/tree/master" + }, + "time": "2018-10-30T17:12:04+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "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/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://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/master" + }, + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "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": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "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" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "symfony/console", + "version": "v5.4.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4", + "reference": "9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "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": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.4.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" + } + ], + "time": "2021-12-09T11:22:43+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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/v2.5.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" + } + ], + "time": "2021-07-12T14:48:14+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/d2f29dac98e96a98be467627bd49c2efb1bc2590", + "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "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": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.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" + } + ], + "time": "2021-11-28T15:25:38+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.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" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.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": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.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" + } + ], + "time": "2021-05-27T12:26:48+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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 for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.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" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.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": "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.23.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" + } + ], + "time": "2021-05-27T12:26:48+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.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" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.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" + } + ], + "time": "2021-07-28T13:41:28+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v1.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/191afdcb5804db960d26d8566b7e9a2843cab3a0", + "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "suggest": { + "psr/container": "", + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "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": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v1.1.2" + }, + "time": "2019-05-28T07:50:59+00:00" + }, + { + "name": "symfony/string", + "version": "v5.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", + "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "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 an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.4.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" + } + ], + "time": "2021-11-24T10:02:00+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.4.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.4-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2021-12-12T23:22:04+00:00" + } + ], + "packages-dev": [ + { + "name": "composer/pcre", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "3d322d715c43a1ac36c7fe215fa59336265500f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/3d322d715c43a1ac36c7fe215fa59336265500f2", + "reference": "3d322d715c43a1ac36c7fe215fa59336265500f2", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "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/1.0.0" + }, + "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" + } + ], + "time": "2021-12-06T15:17:27+00:00" + }, + { + "name": "composer/semver", + "version": "3.2.6", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "83e511e247de329283478496f7a1e114c9517506" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/83e511e247de329283478496f7a1e114c9517506", + "reference": "83e511e247de329283478496f7a1e114c9517506", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.54", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.2.6" + }, + "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" + } + ], + "time": "2021-10-25T11:34:17+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6555461e76962fd0379c444c46fd558a0fcfb65e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6555461e76962fd0379c444c46fd558a0fcfb65e", + "reference": "6555461e76962fd0379c444c46fd558a0fcfb65e", + "shasum": "" + }, + "require": { + "composer/pcre": "^1", + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/2.0.3" + }, + "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" + } + ], + "time": "2021-12-08T13:07:32+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "47177af1cfb9dab5d1cc4daf91b7179c2efe7fad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/47177af1cfb9dab5d1cc4daf91b7179c2efe7fad", + "reference": "47177af1cfb9dab5d1cc4daf91b7179c2efe7fad", + "shasum": "" + }, + "require": { + "composer/semver": "^3.2", + "composer/xdebug-handler": "^2.0", + "doctrine/annotations": "^1.12", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.2.5 || ^8.0", + "php-cs-fixer/diff": "^2.0", + "symfony/console": "^4.4.20 || ^5.1.3 || ^6.0", + "symfony/event-dispatcher": "^4.4.20 || ^5.0 || ^6.0", + "symfony/filesystem": "^4.4.20 || ^5.0 || ^6.0", + "symfony/finder": "^4.4.20 || ^5.0 || ^6.0", + "symfony/options-resolver": "^4.4.20 || ^5.0 || ^6.0", + "symfony/polyfill-mbstring": "^1.23", + "symfony/polyfill-php80": "^1.23", + "symfony/polyfill-php81": "^1.23", + "symfony/process": "^4.4.20 || ^5.0 || ^6.0", + "symfony/stopwatch": "^4.4.20 || ^5.0 || ^6.0" + }, + "require-dev": { + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^1.5", + "mikey179/vfsstream": "^1.6.8", + "php-coveralls/php-coveralls": "^2.5.2", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^1.1 || ^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5", + "phpunitgoodpractices/polyfill": "^1.5", + "phpunitgoodpractices/traits": "^1.9.1", + "symfony/phpunit-bridge": "^5.2.4 || ^6.0", + "symfony/yaml": "^4.4.20 || ^5.0 || ^6.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "support": { + "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2021-12-11T16:25:08+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "hyperf/devtool", + "version": "v2.2.21", + "source": { + "type": "git", + "url": "https://github.com/hyperf/devtool.git", + "reference": "275298f34f752a45cfd258288230e60f7fcd5d4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/devtool/zipball/275298f34f752a45cfd258288230e60f7fcd5d4a", + "reference": "275298f34f752a45cfd258288230e60f7fcd5d4a", + "shasum": "" + }, + "require": { + "hyperf/command": "~2.2.0", + "hyperf/contract": "~2.2.0", + "hyperf/di": "~2.2.0", + "hyperf/utils": "~2.2.0", + "php": ">=7.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "hyperf": { + "config": "Hyperf\\Devtool\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Devtool\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A Devtool for Hyperf.", + "homepage": "https://hyperf.io", + "keywords": [ + "devtool", + "hyperf", + "php", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-12-13T06:53:24+00:00" + }, + { + "name": "hyperf/ide-helper", + "version": "v2.2.5", + "source": { + "type": "git", + "url": "https://github.com/hyperf/ide-helper.git", + "reference": "f03e9f03e9f3cf392c7bee43d40d978528c5e116" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/ide-helper/zipball/f03e9f03e9f3cf392c7bee43d40d978528c5e116", + "reference": "f03e9f03e9f3cf392c7bee43d40d978528c5e116", + "shasum": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "IDE help files for Hyperf.", + "homepage": "https://hyperf.io", + "keywords": [ + "hyperf", + "ide-helper", + "php", + "swoole" + ], + "support": { + "docs": "https://hyperf.wiki", + "issues": "https://github.com/hyperf/hyperf/issues", + "pull-request": "https://github.com/hyperf/hyperf/pulls", + "source": "https://github.com/hyperf/hyperf" + }, + "time": "2021-08-23T03:09:11+00:00" + }, + { + "name": "hyperf/testing", + "version": "v2.2.20", + "source": { + "type": "git", + "url": "https://github.com/hyperf/testing.git", + "reference": "b279d339b3cf56e3afef9ae3da7aaea9b3478885" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hyperf/testing/zipball/b279d339b3cf56e3afef9ae3da7aaea9b3478885", + "reference": "b279d339b3cf56e3afef9ae3da7aaea9b3478885", + "shasum": "" + }, + "require": { + "hyperf/contract": "~2.2.0", + "hyperf/http-message": "~2.2.0", + "hyperf/http-server": "~2.2.0", + "hyperf/utils": "~2.2.0", + "php": ">=7.2", + "phpunit/phpunit": "^9.5", + "psr/container": "^1.0|^2.0" + }, + "bin": [ + "co-phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "Hyperf\\Testing\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Testing for hyperf", + "keywords": [ + "php", + "swoole", + "testing" + ], + "support": { + "source": "https://github.com/hyperf/testing/tree/v2.2.20" + }, + "time": "2021-12-11T09:45:51+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.4.4", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "e01123a0e847d52d186c5eb4b9bf58b0c6d00346" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/e01123a0e847d52d186c5eb4b9bf58b0c6d00346", + "reference": "e01123a0e847d52d186c5eb4b9bf58b0c6d00346", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.4.4" + }, + "time": "2021-09-13T15:28:59+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "bae7c545bef187884426f042434e561ab1ddb182" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.1.0" + }, + "time": "2021-02-23T14:00:09+00:00" + }, + { + "name": "php-cs-fixer/diff", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", + "symfony/process": "^3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "sebastian/diff v3 backport support for PHP 5.6+", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], + "support": { + "issues": "https://github.com/PHP-CS-Fixer/diff/issues", + "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" + }, + "time": "2020-10-14T08:32:19+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" + }, + "time": "2021-10-02T14:08:47+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.2", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + }, + "time": "2021-12-08T12:19:24+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "0.12.99", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b4d40f1d759942f523be267a1bab6884f46ca3f7", + "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.12-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "support": { + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/0.12.99" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpstan", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2021-09-12T20:09:55+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.10", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687", + "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.13.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.10" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-05T09:12:13+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.10", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c814a05837f2edb0d1471d6e3f4ab3501ca3899a", + "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.7", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3.4", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.10" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-09-25T07:38:51+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:52:38+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-11-11T14:18:36+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-06-11T13:31:12+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "2.3.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-06-15T12:49:02+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "swoole/ide-helper", + "version": "4.8.4", + "source": { + "type": "git", + "url": "https://github.com/swoole/ide-helper.git", + "reference": "feff48c90c87674ee7f1d40dd055edf9a212ad88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swoole/ide-helper/zipball/feff48c90c87674ee7f1d40dd055edf9a212ad88", + "reference": "feff48c90c87674ee7f1d40dd055edf9a212ad88", + "shasum": "" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Team Swoole", + "email": "team@swoole.com" + } + ], + "description": "IDE help files for Swoole.", + "support": { + "issues": "https://github.com/swoole/ide-helper/issues", + "source": "https://github.com/swoole/ide-helper/tree/4.8.4" + }, + "funding": [ + { + "url": "https://gitee.com/swoole/swoole?donate=true", + "type": "custom" + }, + { + "url": "https://github.com/swoole", + "type": "github" + } + ], + "time": "2021-12-17T05:37:49+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/27d39ae126352b9fa3be5e196ccf4617897be3eb", + "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "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": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.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" + } + ], + "time": "2021-11-23T10:19:22+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "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": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.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" + } + ], + "time": "2021-07-12T14:48:14+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/731f917dc31edcffec2c6a777f3698c33bea8f01", + "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.4.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" + } + ], + "time": "2021-10-28T13:39:27+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v5.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "b0fb78576487af19c500aaddb269fd36701d4847" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b0fb78576487af19c500aaddb269fd36701d4847", + "reference": "b0fb78576487af19c500aaddb269fd36701d4847", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "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": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.4.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" + } + ], + "time": "2021-11-23T10:19:22+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "e66119f3de95efc359483f810c4c3e6436279436" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", + "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.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" + } + ], + "time": "2021-05-21T13:25:03+00:00" + }, + { + "name": "symfony/process", + "version": "v5.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "5be20b3830f726e019162b26223110c8f47cf274" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/5be20b3830f726e019162b26223110c8f47cf274", + "reference": "5be20b3830f726e019162b26223110c8f47cf274", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "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": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.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" + } + ], + "time": "2021-11-28T15:25:38+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v5.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/208ef96122bfed82a8f3a61458a07113a08bdcfe", + "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/service-contracts": "^1|^2|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "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": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v5.4.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" + } + ], + "time": "2021-11-23T10:19:22+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=7.3" + }, + "platform-dev": [], + "plugin-api-version": "2.1.0" +} diff --git a/config/autoload/annotations.php b/config/autoload/annotations.php new file mode 100644 index 0000000..1423a25 --- /dev/null +++ b/config/autoload/annotations.php @@ -0,0 +1,21 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +return [ + 'scan' => [ + 'paths' => [ + BASE_PATH . '/app', + ], + 'ignore_annotations' => [ + 'mixin', + ], + ], +]; diff --git a/config/autoload/aspects.php b/config/autoload/aspects.php new file mode 100644 index 0000000..f46bd96 --- /dev/null +++ b/config/autoload/aspects.php @@ -0,0 +1,13 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +return [ +]; diff --git a/config/autoload/cache.php b/config/autoload/cache.php new file mode 100644 index 0000000..def82eb --- /dev/null +++ b/config/autoload/cache.php @@ -0,0 +1,18 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +return [ + 'default' => [ + 'driver' => Hyperf\Cache\Driver\RedisDriver::class, + 'packer' => Hyperf\Utils\Packer\PhpSerializerPacker::class, + 'prefix' => 'c:', + ], +]; diff --git a/config/autoload/commands.php b/config/autoload/commands.php new file mode 100644 index 0000000..f46bd96 --- /dev/null +++ b/config/autoload/commands.php @@ -0,0 +1,13 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +return [ +]; diff --git a/config/autoload/databases.php b/config/autoload/databases.php new file mode 100644 index 0000000..b3cfbe7 --- /dev/null +++ b/config/autoload/databases.php @@ -0,0 +1,39 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +return [ + 'default' => [ + 'driver' => env('DB_DRIVER', 'mysql'), + 'host' => env('DB_HOST', 'localhost'), + 'database' => env('DB_DATABASE', 'hyperf'), + 'port' => env('DB_PORT', 3306), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'collation' => env('DB_COLLATION', 'utf8_unicode_ci'), + 'prefix' => env('DB_PREFIX', ''), + 'pool' => [ + 'min_connections' => 1, + 'max_connections' => 10, + 'connect_timeout' => 10.0, + 'wait_timeout' => 3.0, + 'heartbeat' => -1, + 'max_idle_time' => (float) env('DB_MAX_IDLE_TIME', 60), + ], + 'commands' => [ + 'gen:model' => [ + 'path' => 'app/Model', + 'force_casts' => true, + 'inheritance' => 'Model', + ], + ], + ], +]; diff --git a/config/autoload/dependencies.php b/config/autoload/dependencies.php new file mode 100644 index 0000000..f46bd96 --- /dev/null +++ b/config/autoload/dependencies.php @@ -0,0 +1,13 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +return [ +]; diff --git a/config/autoload/devtool.php b/config/autoload/devtool.php new file mode 100644 index 0000000..3c2f607 --- /dev/null +++ b/config/autoload/devtool.php @@ -0,0 +1,44 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +return [ + 'generator' => [ + 'amqp' => [ + 'consumer' => [ + 'namespace' => 'App\\Amqp\\Consumer', + ], + 'producer' => [ + 'namespace' => 'App\\Amqp\\Producer', + ], + ], + 'aspect' => [ + 'namespace' => 'App\\Aspect', + ], + 'command' => [ + 'namespace' => 'App\\Command', + ], + 'controller' => [ + 'namespace' => 'App\\Controller', + ], + 'job' => [ + 'namespace' => 'App\\Job', + ], + 'listener' => [ + 'namespace' => 'App\\Listener', + ], + 'middleware' => [ + 'namespace' => 'App\\Middleware', + ], + 'Process' => [ + 'namespace' => 'App\\Processes', + ], + ], +]; diff --git a/config/autoload/exceptions.php b/config/autoload/exceptions.php new file mode 100644 index 0000000..c9f01b0 --- /dev/null +++ b/config/autoload/exceptions.php @@ -0,0 +1,20 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +return [ + 'handler' => [ + 'http' => [ + Hyperf\HttpServer\Exception\Handler\HttpExceptionHandler::class, + App\Exception\Handler\AppExceptionHandler::class, + Hyperf\WebSocketServer\Exception\Handler\WebSocketExceptionHandler::class, + ], + ], +]; diff --git a/config/autoload/listeners.php b/config/autoload/listeners.php new file mode 100644 index 0000000..f46bd96 --- /dev/null +++ b/config/autoload/listeners.php @@ -0,0 +1,13 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +return [ +]; diff --git a/config/autoload/logger.php b/config/autoload/logger.php new file mode 100644 index 0000000..8934509 --- /dev/null +++ b/config/autoload/logger.php @@ -0,0 +1,30 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +return [ + 'default' => [ + 'handler' => [ + 'class' => Monolog\Handler\RotatingFileHandler::class, + 'constructor' => [ + 'filename' => BASE_PATH . '/logs/ws.log', + 'level' => Monolog\Logger::DEBUG, + ], + ], + 'formatter' => [ + 'class' => Monolog\Formatter\LineFormatter::class, + 'constructor' => [ + 'format' => null, + 'dateFormat' => 'Y-m-d H:i:s', + 'allowInlineLineBreaks' => true, + ], + ], + ], +]; diff --git a/config/autoload/middlewares.php b/config/autoload/middlewares.php new file mode 100644 index 0000000..49bdec2 --- /dev/null +++ b/config/autoload/middlewares.php @@ -0,0 +1,15 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +return [ + 'http' => [ + ], +]; diff --git a/config/autoload/processes.php b/config/autoload/processes.php new file mode 100644 index 0000000..f46bd96 --- /dev/null +++ b/config/autoload/processes.php @@ -0,0 +1,13 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +return [ +]; diff --git a/config/autoload/redis.php b/config/autoload/redis.php new file mode 100644 index 0000000..3180b62 --- /dev/null +++ b/config/autoload/redis.php @@ -0,0 +1,27 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +return [ + 'default' => [ + 'host' => env('REDIS_HOST', 'localhost'), + 'auth' => env('REDIS_AUTH', null), + 'port' => (int) env('REDIS_PORT', 6379), + 'db' => (int) env('REDIS_DB', 0), + 'pool' => [ + 'min_connections' => 1, + 'max_connections' => 10, + 'connect_timeout' => 10.0, + 'wait_timeout' => 3.0, + 'heartbeat' => -1, + 'max_idle_time' => (float) env('REDIS_MAX_IDLE_TIME', 60), + ], + ], +]; diff --git a/config/autoload/server.php b/config/autoload/server.php new file mode 100644 index 0000000..ea4dec4 --- /dev/null +++ b/config/autoload/server.php @@ -0,0 +1,53 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +use Hyperf\Server\Event; +use Hyperf\Server\Server; +use Hyperf\Server\SwooleEvent; +use Swoole\Constant; + +return [ + 'mode' => SWOOLE_PROCESS, + 'servers' => [ + [ + 'name' => 'ws', + 'type' => Server::SERVER_WEBSOCKET, + 'host' => '0.0.0.0', + 'port' => 9501, + 'sock_type' => SWOOLE_SOCK_TCP, + 'allow_ip' => '120.25.156.26.58005', + 'callbacks' => [ + SwooleEvent::ON_HAND_SHAKE => [Hyperf\WebSocketServer\Server::class, 'onHandShake'], + SwooleEvent::ON_MESSAGE => [Hyperf\WebSocketServer\Server::class, 'onMessage'], + SwooleEvent::ON_CLOSE => [Hyperf\WebSocketServer\Server::class, 'onClose'], + SwooleEvent::ON_START => [App\Controller\WebsocketController::class, 'onStart'], + ], + ], + ], + 'settings' => [ + Constant::OPTION_ENABLE_COROUTINE => true, + //Constant::OPTION_DAEMONIZE=>1, + Constant::OPTION_DISPATCH_MODE=>2, + Constant::OPTION_WORKER_NUM => swoole_cpu_num(), + Constant::OPTION_PID_FILE => BASE_PATH . '/runtime/hyperf.pid', + Constant::OPTION_OPEN_TCP_NODELAY => true, + Constant::OPTION_MAX_COROUTINE => 100000, + Constant::OPTION_OPEN_HTTP2_PROTOCOL => true, + Constant::OPTION_MAX_REQUEST => 100000, + Constant::OPTION_SOCKET_BUFFER_SIZE => 2 * 1024 * 1024, + Constant::OPTION_BUFFER_OUTPUT_SIZE => 2 * 1024 * 1024, + ], + 'callbacks' => [ + Event::ON_WORKER_START => [Hyperf\Framework\Bootstrap\WorkerStartCallback::class, 'onWorkerStart'], + Event::ON_PIPE_MESSAGE => [Hyperf\Framework\Bootstrap\PipeMessageCallback::class, 'onPipeMessage'], + Event::ON_WORKER_EXIT => [Hyperf\Framework\Bootstrap\WorkerExitCallback::class, 'onWorkerExit'], + ], +]; diff --git a/config/config.php b/config/config.php new file mode 100644 index 0000000..8e484cc --- /dev/null +++ b/config/config.php @@ -0,0 +1,33 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +use Hyperf\Contract\StdoutLoggerInterface; +use Psr\Log\LogLevel; + +return [ + 'app_name' => env('APP_NAME', 'skeleton'), + 'app_env' => env('APP_ENV', 'dev'), + 'node_name' => env('NODE_NAME', 'node_1'), + 'file_path'=>ENV("FILE_PATH","../file/"), + 'scan_cacheable' => env('SCAN_CACHEABLE', false), + StdoutLoggerInterface::class => [ + 'log_level' => [ + LogLevel::ALERT, + LogLevel::CRITICAL, + //LogLevel::DEBUG, + LogLevel::EMERGENCY, + LogLevel::ERROR, + LogLevel::INFO, + LogLevel::NOTICE, + LogLevel::WARNING, + ], + ], +]; diff --git a/config/container.php b/config/container.php new file mode 100644 index 0000000..2a09133 --- /dev/null +++ b/config/container.php @@ -0,0 +1,24 @@ +<?php +/** + * Initialize a dependency injection container that implemented PSR-11 and return the container. + */ + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +use Hyperf\Di\Container; +use Hyperf\Di\Definition\DefinitionSourceFactory; +use Hyperf\Utils\ApplicationContext; + +$container = new Container((new DefinitionSourceFactory(true))()); + +if (! $container instanceof \Psr\Container\ContainerInterface) { + throw new RuntimeException('The dependency injection container is invalid.'); +} +return ApplicationContext::setContainer($container); diff --git a/config/routes.php b/config/routes.php new file mode 100644 index 0000000..67289a2 --- /dev/null +++ b/config/routes.php @@ -0,0 +1,16 @@ +<?php + +declare(strict_types=1); +/** + * This file is part of Hyperf. + * + * @link https://www.hyperf.io + * @document https://hyperf.wiki + * @contact group@hyperf.io + * @license https://github.com/hyperf/hyperf/blob/master/LICENSE + */ +use Hyperf\HttpServer\Router\Router; + +Router::addServer('ws', function () { + Router::get('/', App\Controller\WebsocketController::class); +}); diff --git a/index.html b/index.html new file mode 100755 index 0000000..e486880 --- /dev/null +++ b/index.html @@ -0,0 +1,75 @@ +<!DOCTYPE html> + +<head> + <title>socket demo</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <script type="text/javascript" src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script> +</head> + +<body> + <input type="text" id="msg" /> + <button id="send">发送</button> +</body> + +</html> +<script> + $(function() { + // 创建socket对象 + var socket = new WebSocket('ws://127.0.0.1:9501'); + + // 打开Socket + socket.onopen = function(event) { + + $('#send').on('click', function() { + var msg = $('#msg').val(); + var url = 'application/index/data'; + var fullData = { + url: url, + data: { + session_id: '1a2e0ca9c7404b765a37a5ab07546fa8', + group_id: '1a2e0ca9c7404b765a37a5ab07546fa8', + msg: msg + } + }; + socket.send(JSON.stringify(fullData)); + console.log(msg); + }); + var url = 'application/index/reg'; + var fullData = { + url: url, + data: { + session_id: '1a2e0ca9c7404b765a37a5ab07546fa8', + group_id: '1a2e0ca9c7404b765a37a5ab07546fa8' + } + }; + // 发送一个初始化消息 + socket.send(JSON.stringify(fullData)); + if (socket.readyState == 1) { + // setInterval(function() { + // var fullData = { + // url: 'plumeWSService/cluster/ping', + // data: 'ping' + // }; + // socket.send(JSON.stringify(fullData)); + // }, 1000) + } + // 监听消息 + socket.onmessage = function(event) { + if (event.data == 'pingpong') { //处理心跳接收事件 + + } else { + var fullData = JSON.parse(event.data); + console.log("客户端监听到的消息:", fullData); + } + }; + + // 监听Socket的关闭 + socket.onclose = function(event) { + console.log("Socket关闭了", event); + }; + + // 关闭Socket.... + //socket.close() + }; + }); +</script> \ No newline at end of file diff --git a/runtime/container/aspects.cache b/runtime/container/aspects.cache new file mode 100644 index 0000000..cda403a --- /dev/null +++ b/runtime/container/aspects.cache @@ -0,0 +1 @@ +a:2:{i:0;s:36:"Hyperf\Config\Annotation\ValueAspect";i:1;s:33:"Hyperf\Di\Annotation\InjectAspect";} \ No newline at end of file diff --git a/runtime/container/classes.cache b/runtime/container/classes.cache new file mode 100644 index 0000000..beab692 --- /dev/null +++ b/runtime/container/classes.cache @@ -0,0 +1 @@ +a:403:{i:0;s:36:"Hyperf\Cache\Listener\DeleteListener";i:1;s:33:"Hyperf\Cache\Listener\DeleteEvent";i:2;s:41:"Hyperf\Cache\Listener\DeleteListenerEvent";i:3;s:41:"Hyperf\Cache\Driver\CoroutineMemoryDriver";i:4;s:41:"Hyperf\Cache\Driver\KeyCollectorInterface";i:5;s:31:"Hyperf\Cache\Driver\RedisDriver";i:6;s:36:"Hyperf\Cache\Driver\FileSystemDriver";i:7;s:26:"Hyperf\Cache\Driver\Driver";i:8;s:35:"Hyperf\Cache\Driver\DriverInterface";i:9;s:18:"Hyperf\Cache\Cache";i:10;s:25:"Hyperf\Cache\CacheManager";i:11;s:38:"Hyperf\Cache\Collector\CoroutineMemory";i:12;s:41:"Hyperf\Cache\Collector\CoroutineMemoryKey";i:13;s:34:"Hyperf\Cache\Collector\FileStorage";i:14;s:33:"Hyperf\Cache\Annotation\FailCache";i:15;s:33:"Hyperf\Cache\Annotation\Cacheable";i:16;s:34:"Hyperf\Cache\Annotation\CacheEvict";i:17;s:32:"Hyperf\Cache\Annotation\CachePut";i:18;s:35:"Hyperf\Cache\CacheListenerCollector";i:19;s:30:"Hyperf\Cache\AnnotationManager";i:20;s:36:"Hyperf\Cache\Aspect\CacheEvictAspect";i:21;s:35:"Hyperf\Cache\Aspect\CacheableAspect";i:22;s:34:"Hyperf\Cache\Aspect\CachePutAspect";i:23;s:35:"Hyperf\Cache\Aspect\FailCacheAspect";i:24;s:27:"Hyperf\Cache\ConfigProvider";i:25;s:32:"Hyperf\Cache\Helper\StringHelper";i:26;s:47:"Hyperf\Cache\Exception\InvalidArgumentException";i:27;s:37:"Hyperf\Cache\Exception\CacheException";i:28;s:54:"Hyperf\Config\Listener\RegisterPropertyHandlerListener";i:29;s:28:"Hyperf\Config\ProviderConfig";i:30;s:36:"Hyperf\Config\Annotation\ValueAspect";i:31;s:30:"Hyperf\Config\Annotation\Value";i:32;s:20:"Hyperf\Config\Config";i:33;s:27:"Hyperf\Config\ConfigFactory";i:34;s:28:"Hyperf\Config\ConfigProvider";i:35;s:36:"Hyperf\Di\ClosureDefinitionCollector";i:36;s:36:"Hyperf\Di\MetadataCollectorInterface";i:37;s:19:"Hyperf\Di\Container";i:38;s:27:"Hyperf\Di\ReflectionManager";i:39;s:40:"Hyperf\Di\LazyLoader\PublicMethodVisitor";i:40;s:31:"Hyperf\Di\LazyLoader\LazyLoader";i:41;s:42:"Hyperf\Di\LazyLoader\ClassLazyProxyBuilder";i:42;s:45:"Hyperf\Di\LazyLoader\FallbackLazyProxyBuilder";i:43;s:45:"Hyperf\Di\LazyLoader\AbstractLazyProxyBuilder";i:44;s:46:"Hyperf\Di\LazyLoader\InterfaceLazyProxyBuilder";i:45;s:21:"Hyperf\Di\ClassLoader";i:46;s:44:"Hyperf\Di\MethodDefinitionCollectorInterface";i:47;s:45:"Hyperf\Di\ClosureDefinitionCollectorInterface";i:48;s:45:"Hyperf\Di\AbstractCallableDefinitionCollector";i:49;s:27:"Hyperf\Di\Annotation\Inject";i:50;s:39:"Hyperf\Di\Annotation\AbstractAnnotation";i:51;s:36:"Hyperf\Di\Annotation\AspectCollector";i:52;s:39:"Hyperf\Di\Annotation\MultipleAnnotation";i:53;s:31:"Hyperf\Di\Annotation\ScanConfig";i:54;s:33:"Hyperf\Di\Annotation\AspectLoader";i:55;s:26:"Hyperf\Di\Annotation\Debug";i:56;s:48:"Hyperf\Di\Annotation\MultipleAnnotationInterface";i:57;s:40:"Hyperf\Di\Annotation\AnnotationCollector";i:58;s:33:"Hyperf\Di\Annotation\InjectAspect";i:59;s:40:"Hyperf\Di\Annotation\AnnotationInterface";i:60;s:28:"Hyperf\Di\Annotation\Scanner";i:61;s:27:"Hyperf\Di\Annotation\Aspect";i:62;s:47:"Hyperf\Di\Annotation\AbstractMultipleAnnotation";i:63;s:37:"Hyperf\Di\Annotation\AnnotationReader";i:64;s:38:"Hyperf\Di\Annotation\RelationCollector";i:65;s:26:"Hyperf\Di\Aop\ProxyManager";i:66;s:29:"Hyperf\Di\Aop\VisitorMetadata";i:67;s:36:"Hyperf\Di\Aop\PropertyHandlerVisitor";i:68;s:32:"Hyperf\Di\Aop\AstVisitorRegistry";i:69;s:43:"Hyperf\Di\Aop\RegisterInjectPropertyHandler";i:70;s:28:"Hyperf\Di\Aop\AbstractAspect";i:71;s:27:"Hyperf\Di\Aop\AspectManager";i:72;s:31:"Hyperf\Di\Aop\RewriteCollection";i:73;s:30:"Hyperf\Di\Aop\ProxyCallVisitor";i:74;s:33:"Hyperf\Di\Aop\ProceedingJoinPoint";i:75;s:22:"Hyperf\Di\Aop\Pipeline";i:76;s:20:"Hyperf\Di\Aop\Aspect";i:77;s:17:"Hyperf\Di\Aop\Ast";i:78;s:32:"Hyperf\Di\Aop\AnnotationMetadata";i:79;s:29:"Hyperf\Di\Aop\AroundInterface";i:80;s:35:"Hyperf\Di\MethodDefinitionCollector";i:81;s:36:"Hyperf\Di\Definition\MethodInjection";i:82;s:53:"Hyperf\Di\Definition\SelfResolvingDefinitionInterface";i:83;s:38:"Hyperf\Di\Definition\FactoryDefinition";i:84;s:31:"Hyperf\Di\Definition\ScanConfig";i:85;s:30:"Hyperf\Di\Definition\Reference";i:86;s:46:"Hyperf\Di\Definition\DefinitionSourceInterface";i:87;s:37:"Hyperf\Di\Definition\DefinitionSource";i:88;s:43:"Hyperf\Di\Definition\PropertyHandlerManager";i:89;s:40:"Hyperf\Di\Definition\DefinitionInterface";i:90;s:37:"Hyperf\Di\Definition\ObjectDefinition";i:91;s:39:"Hyperf\Di\Definition\PropertyDefinition";i:92;s:44:"Hyperf\Di\Definition\DefinitionSourceFactory";i:93;s:24:"Hyperf\Di\ReflectionType";i:94;s:32:"Hyperf\Di\MetadataCacheCollector";i:95;s:24:"Hyperf\Di\ConfigProvider";i:96;s:39:"Hyperf\Di\Exception\AnnotationException";i:97;s:46:"Hyperf\Di\Exception\InvalidDefinitionException";i:98;s:37:"Hyperf\Di\Exception\NotFoundException";i:99;s:47:"Hyperf\Di\Exception\CircularDependencyException";i:100;s:44:"Hyperf\Di\Exception\InvalidArgumentException";i:101;s:46:"Hyperf\Di\Exception\DirectoryNotExistException";i:102;s:47:"Hyperf\Di\Exception\ConflictAnnotationException";i:103;s:39:"Hyperf\Di\Exception\DependencyException";i:104;s:29:"Hyperf\Di\Exception\Exception";i:105;s:27:"Hyperf\Di\MetadataCollector";i:106;s:33:"Hyperf\Di\Resolver\ObjectResolver";i:107;s:37:"Hyperf\Di\Resolver\ResolverDispatcher";i:108;s:29:"Hyperf\Di\Resolver\DepthGuard";i:109;s:36:"Hyperf\Di\Resolver\ResolverInterface";i:110;s:34:"Hyperf\Di\Resolver\FactoryResolver";i:111;s:36:"Hyperf\Di\Resolver\ParameterResolver";i:112;s:36:"Hyperf\Dispatcher\HttpRequestHandler";i:113;s:53:"Hyperf\Dispatcher\Exceptions\InvalidArgumentException";i:114;s:40:"Hyperf\Dispatcher\AbstractRequestHandler";i:115;s:32:"Hyperf\Dispatcher\HttpDispatcher";i:116;s:36:"Hyperf\Dispatcher\AbstractDispatcher";i:117;s:32:"Hyperf\Dispatcher\ConfigProvider";i:118;s:29:"Hyperf\Event\ListenerProvider";i:119;s:39:"Hyperf\Event\Contract\ListenerInterface";i:120;s:25:"Hyperf\Event\ListenerData";i:121;s:32:"Hyperf\Event\Annotation\Listener";i:122;s:35:"Hyperf\Event\EventDispatcherFactory";i:123;s:28:"Hyperf\Event\EventDispatcher";i:124;s:36:"Hyperf\Event\ListenerProviderFactory";i:125;s:27:"Hyperf\Event\ConfigProvider";i:126;s:54:"Hyperf\ExceptionHandler\Handler\WhoopsExceptionHandler";i:127;s:54:"Hyperf\ExceptionHandler\Listener\ErrorExceptionHandler";i:128;s:57:"Hyperf\ExceptionHandler\Listener\ExceptionHandlerListener";i:129;s:50:"Hyperf\ExceptionHandler\ExceptionHandlerDispatcher";i:130;s:51:"Hyperf\ExceptionHandler\Annotation\ExceptionHandler";i:131;s:52:"Hyperf\ExceptionHandler\Formatter\FormatterInterface";i:132;s:50:"Hyperf\ExceptionHandler\Formatter\DefaultFormatter";i:133;s:35:"Hyperf\ExceptionHandler\Propagation";i:134;s:40:"Hyperf\ExceptionHandler\ExceptionHandler";i:135;s:38:"Hyperf\ExceptionHandler\ConfigProvider";i:136;s:36:"Hyperf\Framework\Logger\StdoutLogger";i:137;s:45:"Hyperf\Framework\Bootstrap\WorkerExitCallback";i:138;s:43:"Hyperf\Framework\Bootstrap\ShutdownCallback";i:139;s:41:"Hyperf\Framework\Bootstrap\PacketCallback";i:140;s:46:"Hyperf\Framework\Bootstrap\WorkerStartCallback";i:141;s:40:"Hyperf\Framework\Bootstrap\CloseCallback";i:142;s:39:"Hyperf\Framework\Bootstrap\TaskCallback";i:143;s:47:"Hyperf\Framework\Bootstrap\ManagerStartCallback";i:144;s:45:"Hyperf\Framework\Bootstrap\WorkerStopCallback";i:145;s:46:"Hyperf\Framework\Bootstrap\ServerStartCallback";i:146;s:40:"Hyperf\Framework\Bootstrap\StartCallback";i:147;s:42:"Hyperf\Framework\Bootstrap\ConnectCallback";i:148;s:46:"Hyperf\Framework\Bootstrap\WorkerErrorCallback";i:149;s:42:"Hyperf\Framework\Bootstrap\ReceiveCallback";i:150;s:46:"Hyperf\Framework\Bootstrap\ManagerStopCallback";i:151;s:41:"Hyperf\Framework\Bootstrap\FinishCallback";i:152;s:46:"Hyperf\Framework\Bootstrap\PipeMessageCallback";i:153;s:35:"Hyperf\Framework\ApplicationFactory";i:154;s:31:"Hyperf\Framework\ConfigProvider";i:155;s:50:"Hyperf\Framework\Exception\NotImplementedException";i:156;s:35:"Hyperf\Framework\Event\OnWorkerExit";i:157;s:39:"Hyperf\Framework\Event\AfterWorkerStart";i:158;s:40:"Hyperf\Framework\Event\BeforeWorkerStart";i:159;s:39:"Hyperf\Framework\Event\OtherWorkerStart";i:160;s:31:"Hyperf\Framework\Event\OnFinish";i:161;s:31:"Hyperf\Framework\Event\OnPacket";i:162;s:36:"Hyperf\Framework\Event\OnWorkerError";i:163;s:29:"Hyperf\Framework\Event\OnTask";i:164;s:37:"Hyperf\Framework\Event\OnManagerStart";i:165;s:36:"Hyperf\Framework\Event\OnManagerStop";i:166;s:30:"Hyperf\Framework\Event\OnClose";i:167;s:38:"Hyperf\Framework\Event\BootApplication";i:168;s:32:"Hyperf\Framework\Event\OnReceive";i:169;s:30:"Hyperf\Framework\Event\OnStart";i:170;s:40:"Hyperf\Framework\Event\BeforeServerStart";i:171;s:36:"Hyperf\Framework\Event\OnPipeMessage";i:172;s:35:"Hyperf\Framework\Event\OnWorkerStop";i:173;s:44:"Hyperf\Framework\Event\BeforeMainServerStart";i:174;s:33:"Hyperf\Framework\Event\OnShutdown";i:175;s:32:"Hyperf\Framework\Event\OnConnect";i:176;s:38:"Hyperf\Framework\Event\MainWorkerStart";i:177;s:33:"Hyperf\Guzzle\MiddlewareInterface";i:178;s:27:"Hyperf\Guzzle\ClientFactory";i:179;s:33:"Hyperf\Guzzle\HandlerStackFactory";i:180;s:30:"Hyperf\Guzzle\CoroutineHandler";i:181;s:29:"Hyperf\Guzzle\RetryMiddleware";i:182;s:25:"Hyperf\Guzzle\PoolHandler";i:183;s:28:"Hyperf\Guzzle\ConfigProvider";i:184;s:38:"Hyperf\Guzzle\RingPHP\CoroutineHandler";i:185;s:33:"Hyperf\Guzzle\RingPHP\PoolHandler";i:186;s:50:"Hyperf\HttpServer\Contract\CoreMiddlewareInterface";i:187;s:43:"Hyperf\HttpServer\Contract\RequestInterface";i:188;s:44:"Hyperf\HttpServer\Contract\ResponseInterface";i:189;s:24:"Hyperf\HttpServer\Server";i:190;s:26:"Hyperf\HttpServer\Response";i:191;s:39:"Hyperf\HttpServer\Annotation\GetMapping";i:192;s:39:"Hyperf\HttpServer\Annotation\Controller";i:193;s:43:"Hyperf\HttpServer\Annotation\RequestMapping";i:194;s:43:"Hyperf\HttpServer\Annotation\AutoController";i:195;s:42:"Hyperf\HttpServer\Annotation\DeleteMapping";i:196;s:36:"Hyperf\HttpServer\Annotation\Mapping";i:197;s:40:"Hyperf\HttpServer\Annotation\Middlewares";i:198;s:39:"Hyperf\HttpServer\Annotation\PutMapping";i:199;s:41:"Hyperf\HttpServer\Annotation\PatchMapping";i:200;s:39:"Hyperf\HttpServer\Annotation\Middleware";i:201;s:40:"Hyperf\HttpServer\Annotation\PostMapping";i:202;s:32:"Hyperf\HttpServer\CoreMiddleware";i:203;s:25:"Hyperf\HttpServer\Request";i:204;s:33:"Hyperf\HttpServer\ResponseEmitter";i:205;s:32:"Hyperf\HttpServer\ConfigProvider";i:206;s:56:"Hyperf\HttpServer\Exception\Handler\HttpExceptionHandler";i:207;s:57:"Hyperf\HttpServer\Exception\Http\InvalidResponseException";i:208;s:50:"Hyperf\HttpServer\Exception\Http\EncodingException";i:209;s:46:"Hyperf\HttpServer\Exception\Http\FileException";i:210;s:35:"Hyperf\HttpServer\MiddlewareManager";i:211;s:32:"Hyperf\HttpServer\Router\Handler";i:212;s:35:"Hyperf\HttpServer\Router\Dispatched";i:213;s:39:"Hyperf\HttpServer\Router\RouteCollector";i:214;s:31:"Hyperf\HttpServer\Router\Router";i:215;s:42:"Hyperf\HttpServer\Router\DispatcherFactory";i:216;s:20:"Hyperf\Logger\Logger";i:217;s:27:"Hyperf\Logger\LoggerFactory";i:218;s:28:"Hyperf\Logger\ConfigProvider";i:219;s:46:"Hyperf\Logger\Exception\InvalidConfigException";i:220;s:25:"Hyperf\Memory\LockManager";i:221;s:27:"Hyperf\Memory\AtomicManager";i:222;s:26:"Hyperf\Memory\TableManager";i:223;s:28:"Hyperf\Memory\ConfigProvider";i:224;s:22:"Hyperf\Pool\Connection";i:225;s:33:"Hyperf\Pool\SimplePool\Connection";i:226;s:27:"Hyperf\Pool\SimplePool\Pool";i:227;s:29:"Hyperf\Pool\SimplePool\Config";i:228;s:34:"Hyperf\Pool\SimplePool\PoolFactory";i:229;s:31:"Hyperf\Pool\KeepaliveConnection";i:230;s:29:"Hyperf\Pool\ConstantFrequency";i:231;s:16:"Hyperf\Pool\Pool";i:232;s:19:"Hyperf\Pool\Context";i:233;s:21:"Hyperf\Pool\Frequency";i:234;s:19:"Hyperf\Pool\Channel";i:235;s:22:"Hyperf\Pool\PoolOption";i:236;s:26:"Hyperf\Pool\ConfigProvider";i:237;s:46:"Hyperf\Pool\Exception\InvalidArgumentException";i:238;s:40:"Hyperf\Pool\Exception\SocketPopException";i:239;s:41:"Hyperf\Pool\Exception\ConnectionException";i:240;s:33:"Hyperf\Pool\LowFrequencyInterface";i:241;s:53:"Hyperf\Process\Listener\LogBeforeProcessStartListener";i:242;s:54:"Hyperf\Process\Listener\LogAfterProcessStoppedListener";i:243;s:43:"Hyperf\Process\Listener\BootProcessListener";i:244;s:33:"Hyperf\Process\Annotation\Process";i:245;s:30:"Hyperf\Process\AbstractProcess";i:246;s:31:"Hyperf\Process\ProcessCollector";i:247;s:29:"Hyperf\Process\ConfigProvider";i:248;s:46:"Hyperf\Process\Exception\SocketAcceptException";i:249;s:47:"Hyperf\Process\Exception\ServerInvalidException";i:250;s:39:"Hyperf\Process\Event\AfterProcessHandle";i:251;s:42:"Hyperf\Process\Event\BeforeCoroutineHandle";i:252;s:41:"Hyperf\Process\Event\AfterCoroutineHandle";i:253;s:32:"Hyperf\Process\Event\PipeMessage";i:254;s:40:"Hyperf\Process\Event\BeforeProcessHandle";i:255;s:29:"Hyperf\Process\ProcessManager";i:256;s:23:"Hyperf\Redis\RedisProxy";i:257;s:28:"Hyperf\Redis\RedisConnection";i:258;s:42:"Hyperf\Redis\Lua\Hash\HIncrByFloatIfExists";i:259;s:37:"Hyperf\Redis\Lua\Hash\HGetAllMultiple";i:260;s:23:"Hyperf\Redis\Lua\Script";i:261;s:32:"Hyperf\Redis\Lua\ScriptInterface";i:262;s:22:"Hyperf\Redis\Frequency";i:263;s:18:"Hyperf\Redis\Redis";i:264;s:25:"Hyperf\Redis\RedisFactory";i:265;s:27:"Hyperf\Redis\ConfigProvider";i:266;s:27:"Hyperf\Redis\Pool\RedisPool";i:267;s:29:"Hyperf\Redis\Pool\PoolFactory";i:268;s:54:"Hyperf\Redis\Exception\InvalidRedisConnectionException";i:269;s:49:"Hyperf\Redis\Exception\InvalidRedisProxyException";i:270;s:45:"Hyperf\Redis\Exception\RedisNotFoundException";i:271;s:18:"Hyperf\Server\Port";i:272;s:19:"Hyperf\Server\Event";i:273;s:46:"Hyperf\Server\Listener\StoreServerNameListener";i:274;s:47:"Hyperf\Server\Listener\InitProcessTitleListener";i:275;s:47:"Hyperf\Server\Listener\AfterWorkerStartListener";i:276;s:20:"Hyperf\Server\Server";i:277;s:26:"Hyperf\Server\Entry\Logger";i:278;s:35:"Hyperf\Server\Entry\EventDispatcher";i:279;s:24:"Hyperf\Server\SwowServer";i:280;s:27:"Hyperf\Server\ServerFactory";i:281;s:25:"Hyperf\Server\SwooleEvent";i:282;s:29:"Hyperf\Server\ServerInterface";i:283;s:33:"Hyperf\Server\Command\StartServer";i:284;s:27:"Hyperf\Server\ServerManager";i:285;s:26:"Hyperf\Server\ServerConfig";i:286;s:33:"Hyperf\Server\SwooleServerFactory";i:287;s:29:"Hyperf\Server\CoroutineServer";i:288;s:28:"Hyperf\Server\ConfigProvider";i:289;s:39:"Hyperf\Server\Exception\ServerException";i:290;s:40:"Hyperf\Server\Exception\RuntimeException";i:291;s:48:"Hyperf\Server\Exception\InvalidArgumentException";i:292;s:44:"Hyperf\Server\Event\MainCoroutineServerStart";i:293;s:39:"Hyperf\Server\Event\CoroutineServerStop";i:294;s:40:"Hyperf\Server\Event\CoroutineServerStart";i:295;s:36:"Hyperf\Utils\Coordinator\Coordinator";i:296;s:43:"Hyperf\Utils\Coordinator\CoordinatorManager";i:297;s:34:"Hyperf\Utils\Coordinator\Constants";i:298;s:41:"Hyperf\Utils\Serializer\SymfonyNormalizer";i:299;s:41:"Hyperf\Utils\Serializer\SerializerFactory";i:300;s:40:"Hyperf\Utils\Serializer\SimpleNormalizer";i:301;s:31:"Hyperf\Utils\ApplicationContext";i:302;s:33:"Hyperf\Utils\Coroutine\Concurrent";i:303;s:29:"Hyperf\Utils\Coroutine\Locker";i:304;s:16:"Hyperf\Utils\Str";i:305;s:19:"Hyperf\Utils\Fluent";i:306;s:31:"Hyperf\Utils\Contracts\Jsonable";i:307;s:32:"Hyperf\Utils\Contracts\Arrayable";i:308;s:30:"Hyperf\Utils\Contracts\Xmlable";i:309;s:33:"Hyperf\Utils\Contracts\MessageBag";i:310;s:38:"Hyperf\Utils\Contracts\MessageProvider";i:311;s:23:"Hyperf\Utils\Codec\Json";i:312;s:22:"Hyperf\Utils\Codec\Xml";i:313;s:25:"Hyperf\Utils\Codec\Base62";i:314;s:30:"Hyperf\Utils\ResourceGenerator";i:315;s:37:"Hyperf\Utils\MimeTypeExtensionGuesser";i:316;s:27:"Hyperf\Utils\ClearStatCache";i:317;s:34:"Hyperf\Utils\Filesystem\Filesystem";i:318;s:45:"Hyperf\Utils\Filesystem\FileNotFoundException";i:319;s:23:"Hyperf\Utils\Pluralizer";i:320;s:30:"Hyperf\Utils\CodeGen\PhpParser";i:321;s:28:"Hyperf\Utils\CodeGen\Package";i:322;s:33:"Hyperf\Utils\CodeGen\PhpDocReader";i:323;s:28:"Hyperf\Utils\CodeGen\Project";i:324;s:40:"Hyperf\Utils\CodeGen\PhpDocReaderManager";i:325;s:19:"Hyperf\Utils\Waiter";i:326;s:21:"Hyperf\Utils\Optional";i:327;s:22:"Hyperf\Utils\Coroutine";i:328;s:27:"Hyperf\Utils\Channel\Caller";i:329;s:35:"Hyperf\Utils\Channel\ChannelManager";i:330;s:21:"Hyperf\Utils\Composer";i:331;s:20:"Hyperf\Utils\Context";i:332;s:39:"Hyperf\Utils\HigherOrderCollectionProxy";i:333;s:20:"Hyperf\Utils\Backoff";i:334;s:23:"Hyperf\Utils\MessageBag";i:335;s:22:"Hyperf\Utils\WaitGroup";i:336;s:21:"Hyperf\Utils\Pipeline";i:337;s:23:"Hyperf\Utils\Collection";i:338;s:23:"Hyperf\Utils\Stringable";i:339;s:20:"Hyperf\Utils\Network";i:340;s:27:"Hyperf\Utils\ConfigProvider";i:341;s:21:"Hyperf\Utils\Resource";i:342;s:24:"Hyperf\Utils\ChannelPool";i:343;s:39:"Hyperf\Utils\Exception\ExceptionThrower";i:344;s:45:"Hyperf\Utils\Exception\ChannelClosedException";i:345;s:43:"Hyperf\Utils\Exception\WaitTimeoutException";i:346;s:47:"Hyperf\Utils\Exception\InvalidArgumentException";i:347;s:49:"Hyperf\Utils\Exception\ParallelExecutionException";i:348;s:39:"Hyperf\Utils\Exception\TimeoutException";i:349;s:21:"Hyperf\Utils\Parallel";i:350;s:16:"Hyperf\Utils\Arr";i:351;s:32:"Hyperf\Utils\HigherOrderTapProxy";i:352;s:36:"Hyperf\Utils\Reflection\ClassInvoker";i:353;s:30:"Hyperf\Utils\Packer\JsonPacker";i:354;s:39:"Hyperf\Utils\Packer\PhpSerializerPacker";i:355;s:53:"Hyperf\WebSocketServer\Listener\OnPipeMessageListener";i:356;s:50:"Hyperf\WebSocketServer\Listener\InitSenderListener";i:357;s:29:"Hyperf\WebSocketServer\Server";i:358;s:40:"Hyperf\WebSocketServer\SenderPipeMessage";i:359;s:44:"Hyperf\WebSocketServer\Collector\FdCollector";i:360;s:35:"Hyperf\WebSocketServer\Collector\Fd";i:361;s:37:"Hyperf\WebSocketServer\CoreMiddleware";i:362;s:30:"Hyperf\WebSocketServer\Context";i:363;s:29:"Hyperf\WebSocketServer\Sender";i:364;s:31:"Hyperf\WebSocketServer\Security";i:365;s:37:"Hyperf\WebSocketServer\ConfigProvider";i:366;s:58:"Hyperf\WebSocketServer\Exception\WebSocketMessageException";i:367;s:66:"Hyperf\WebSocketServer\Exception\Handler\WebSocketExceptionHandler";i:368;s:55:"Hyperf\WebSocketServer\Exception\InvalidMethodException";i:369;s:61:"Hyperf\WebSocketServer\Exception\WebSocketHandeShakeException";i:370;s:40:"Hyperf\WebSocketServer\Event\OnOpenEvent";i:371;s:19:"Hyperf\Devtool\Info";i:372;s:35:"Hyperf\Devtool\VendorPublishCommand";i:373;s:26:"Hyperf\Devtool\InfoCommand";i:374;s:30:"Hyperf\Devtool\Adapter\Aspects";i:375;s:38:"Hyperf\Devtool\Adapter\AbstractAdapter";i:376;s:38:"Hyperf\Devtool\Describe\AspectsCommand";i:377;s:40:"Hyperf\Devtool\Describe\ListenersCommand";i:378;s:37:"Hyperf\Devtool\Describe\RoutesCommand";i:379;s:44:"Hyperf\Devtool\Generator\NatsConsumerCommand";i:380;s:44:"Hyperf\Devtool\Generator\AmqpConsumerCommand";i:381;s:40:"Hyperf\Devtool\Generator\ResourceCommand";i:382;s:44:"Hyperf\Devtool\Generator\AmqpProducerCommand";i:383;s:35:"Hyperf\Devtool\Generator\JobCommand";i:384;s:40:"Hyperf\Devtool\Generator\ConstantCommand";i:385;s:38:"Hyperf\Devtool\Generator\AspectCommand";i:386;s:39:"Hyperf\Devtool\Generator\RequestCommand";i:387;s:42:"Hyperf\Devtool\Generator\ControllerCommand";i:388;s:45:"Hyperf\Devtool\Generator\KafkaConsumerCommand";i:389;s:39:"Hyperf\Devtool\Generator\CommandCommand";i:390;s:41:"Hyperf\Devtool\Generator\GeneratorCommand";i:391;s:43:"Hyperf\Devtool\Generator\NsqConsumerCommand";i:392;s:40:"Hyperf\Devtool\Generator\ListenerCommand";i:393;s:39:"Hyperf\Devtool\Generator\ProcessCommand";i:394;s:42:"Hyperf\Devtool\Generator\MiddlewareCommand";i:395;s:29:"Hyperf\Devtool\ConfigProvider";i:396;s:36:"App\Listener\DbQueryExecutedListener";i:397;s:14:"App\Utils\guid";i:398;s:14:"App\Utils\Http";i:399;s:17:"App\Utils\HashMap";i:400;s:34:"App\Controller\WebsocketController";i:401;s:27:"App\Service\TransferService";i:402;s:41:"App\Exception\Handler\AppExceptionHandler";} \ No newline at end of file diff --git a/runtime/container/proxy/App_Controller_WebsocketController.proxy.php b/runtime/container/proxy/App_Controller_WebsocketController.proxy.php new file mode 100644 index 0000000..91b9b35 --- /dev/null +++ b/runtime/container/proxy/App_Controller_WebsocketController.proxy.php @@ -0,0 +1,211 @@ +<?php + +/* + * @Author: your name + * @Date: 2021-12-24 10:26:10 + * @LastEditTime: 2021-12-24 17:11:44 + * @LastEditors: Please set LastEditors + * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + * @FilePath: /hy-websocket/app/Controller/WebsocketController.php + */ +declare (strict_types=1); +namespace App\Controller; + +use Hyperf\Contract\OnCloseInterface; +use Hyperf\Contract\OnMessageInterface; +use Hyperf\Contract\OnOpenInterface; +use Hyperf\Contract\OnHandShakeInterface; +use Hyperf\Utils\Codec\Json; +use Swoole\Http\Request; +use Swoole\Http\Response; +use Swoole\WebSocket\Frame; +use Swoole\WebSocket\Server; +use Hyperf\Redis\Redis; +use Hyperf\Di\Annotation\Inject; +use Hyperf\Config\Annotation\Value; +use App\Utils\guid; +use App\Utils\HashMap; +use App\Utils\Http; +use App\Utils\PcmToWave; +use App\Service\TransferService; +use Psr\Container\ContainerInterface; +use Hyperf\Logger\LoggerFactory; +use Hyperf\Contract\ConfigInterface; +class WebsocketController implements OnMessageInterface, OnOpenInterface, OnCloseInterface +{ + use \Hyperf\Di\Aop\ProxyTrait; + use \Hyperf\Di\Aop\PropertyHandlerTrait; + /** + * @Inject + * @var TransferService + */ + private $transferService; + /** + * + * @Inject + * @var HashMap + */ + private $HashMap; + //存放音频写入句柄 + /** + * + * @var \Psr\Log\LoggerInterface + */ + public $logger; + /** + * @Inject() + * @var ConfigInterface + */ + private $config; + private $server_config; + private $allow_ip; + public function __construct(LoggerFactory $loggerFactory) + { + $this->__handlePropertyHandler(__CLASS__); + // 第一个参数对应日志的 name, 第二个参数对应 config/autoload/logger.php 内的 key + $this->logger = $loggerFactory->get('log', 'default'); + //获取 server.php 里的内容 + $this->server_config = $this->config->get('server.servers', ''); + $this->allow_ip = $this->server_config[0]['allow_ip']; + } + public function onClose($server, int $fd, int $reactorId) : void + { + //客户端异常关闭 + //语音文件传输完毕,关闭文件。 + $host = $this->allow_ip; + $group_key = $this->transferService->get($host . ':' . $fd . ':group'); + $this->transferService->lrem($group_key, $fd, 0); + $set_ket = $host . ':' . $fd . ':group'; + $this->transferService->delete($set_ket); + } + public function onStart($server) : void + { + $host = $this->allow_ip; + $keyList = $this->transferService->keys("*{$host}*"); + foreach ($keyList as $key => $value) { + $this->transferService->delete($value); + } + } + /** + * @param Response|Server $server + */ + public function onMessage($server, Frame $frame) : void + { + $ret = array('code' => 0, 'data' => null); + $msgData = $this->is_json($frame->data, true); + if ($msgData) { + $frameData = $msgData; + $url = $frameData['url']; + $data = $frameData['data']; + $action = substr($url, strrpos($url, "/") + 1); + switch ($action) { + case "reg": + $groupId = $data['group_id']; + $session = $data['session_id']; + $this->bind($groupId, '', $frame->fd); + $key = "practice_scenes_ws_cur_session_info:" . $session; + $node_key = 'practice_scenes_ws_cur_session_node_info:' . $session; + $redisData = $this->transferService->get($key); + if ($redisData) { + $ret['data'] = json_decode($redisData, true); + $this->transferService->delete($key); + } else { + $redisData = $this->transferService->get($node_key); + if ($redisData) { + $ret['data'] = json_decode($redisData, true); + } else { + $ret['data'] = ''; + } + } + $ret['event'] = "re_bind"; + $server->push($frame->fd, json_encode($ret)); + break; + case "data": + $groupId = $data['group_id']; + $ret['event'] = "data"; + $ret['data'] = $data; + $connections = array(); + if (empty($groupId)) { + // 获取所有无分组标识在线终端 + $onlines = count($server->connections); + if ($onlines > 0) { + $connections = $server->connections; + } + } else { + // 获取所有分组标识在线终端 key = groupID:host + $key = $groupId . ':' . $this->allow_ip; + $connections = $this->transferService->lrange($key, 0, -1); + } + $connections = array_unique($connections); + // 广播获取的在线终端 + foreach ($connections as $fd) { + $ingfd = (int) $fd; + $server->push($ingfd, json_encode($ret)); + } + break; + case "ping": + $server->push($frame->fd, $data . 'pong'); + break; + default: + $ret['code'] = 404; + $ret['msg'] = 'event no existent'; + $server->push($frame->fd, json_encode($ret)); + return; + } + } else { + $ret['code'] = -1; + $ret['msg'] = 'data is null or data no json'; + $server->push($frame->fd, json_encode($ret)); + return; + } + } + public function onOpen($server, Request $request) : void + { + // $server->push($request->fd, 'Opened'); + // var_dump($request); + } + /** + * 功能:1、判断是否是json + * @param string $data + * @param bool $assoc + * @return bool|mixed|string + */ + public function is_json($data = '', $assoc = false) + { + $data = json_decode($data, $assoc); + if ($data && is_object($data) || is_array($data) && !empty(current($data))) { + return $data; + } + return false; + } + /** + * 当前链接的绑定事件。 + * 绑定的几种状态: + * 1.无分组 + * host -> fds (获取当前节点的在线链接列表) + * host:fd -> value (获取当前节点当前链接的绑定数据) + * host:fd:group -> host (获取当前节点当前链接的绑定分组) + * 2.有分组 + * groupID:host -> fds + * host:fd -> value + * host:fd:group -> groupID:host + * @param string $groupID 需要绑定当前链接所在分组的分组标识,如果为空则使用默认分组 + * @param string $value 需要绑定当前链接对应的业务数据,如果为空则不绑定 + */ + public function bind($groupID = '', $value = '', $fd) + { + $host = $this->allow_ip; + // 绑定分组和当前链接对应的分组标识 + if (empty($groupID)) { + $this->transferService->rpush($host, $fd); + $this->transferService->set($host . ':' . $fd . ':group', $host); + } else { + $this->transferService->rpush($groupID . ':' . $host, $fd); + $this->transferService->set($host . ':' . $fd . ':group', $groupID . ':' . $host); + } + // 绑定业务数据 + if (!empty($value)) { + $this->transferService->set($host . ':' . $fd, $value); + } + } +} \ No newline at end of file diff --git a/runtime/container/proxy/App_Service_TransferService.proxy.php b/runtime/container/proxy/App_Service_TransferService.proxy.php new file mode 100644 index 0000000..6a78a4f --- /dev/null +++ b/runtime/container/proxy/App_Service_TransferService.proxy.php @@ -0,0 +1,102 @@ +<?php + +namespace App\Service; + +use Hyperf\Redis\Redis; +use Hyperf\Di\Annotation\Inject; +use Hyperf\Config\Annotation\Value; +use App\Utils\Http; +class TransferService extends Http +{ + use \Hyperf\Di\Aop\ProxyTrait; + use \Hyperf\Di\Aop\PropertyHandlerTrait; + function __construct() + { + if (method_exists(parent::class, '__construct')) { + parent::__construct(...func_get_args()); + } + $this->__handlePropertyHandler(__CLASS__); + } + /** + * + * @Inject + * @var Redis + */ + private $redis; + public function ping() + { + $result = $this->redis->ping(); + } + public function setnx($strKey, $value) + { + $this->redis->setnx($strKey, $value); + } + public function set($strKey, $value) + { + $this->redis->set($strKey, $value); + } + public function get($strKey) + { + return $this->redis->get($strKey); + } + public function delete($strKey) + { + $this->redis->del($strKey); + } + public function incrby($str_key, $value = 0) + { + $this->redis->incrby($str_key, $value); + } + public function incr($fd) + { + return $this->redis->incr($fd); + } + public function decr($strKey) + { + return $this->redis->decr($strKey); + } + public function decrby($strKey, $num) + { + return $this->redis->decrby($strKey, $num); + } + public function lSize($strKey) + { + return $this->redis->lSize($strKey); + } + public function lGet($strKey, $index) + { + return $this->redis->lGet($strKey, $index); + } + public function lrem($strKey, $value, $index) + { + return $this->redis->lrem($strKey, $value, $index); + } + public function lPush($strKey, $value) + { + $this->redis->lPush($strKey, $value); + } + public function rPush($strKey, $value) + { + $this->redis->rPush($strKey, $value); + } + public function lPop($strKey) + { + return $this->redis->lPop($strKey); + } + public function rPop($strKey) + { + return $this->redis->rPop($strKey); + } + public function lSet($strKey, $index, $value) + { + return $this->redis->lSet($strKey, $index, $value); + } + public function lrange($strKey, $index, $length) + { + return $this->redis->lrange($strKey, $index, $length); + } + public function keys($strKey) + { + return $this->redis->keys($strKey); + } +} \ No newline at end of file diff --git a/runtime/container/proxy/App_Utils_Http.proxy.php b/runtime/container/proxy/App_Utils_Http.proxy.php new file mode 100644 index 0000000..fc9af6a --- /dev/null +++ b/runtime/container/proxy/App_Utils_Http.proxy.php @@ -0,0 +1,145 @@ +<?php + +namespace App\Utils; + +use GuzzleHttp\Client; +use GuzzleHttp\HandlerStack; +use Hyperf\Guzzle\CoroutineHandler; +use GuzzleHttp\Exception\ClientException; +use Hyperf\Di\Annotation\Inject; +use Hyperf\Guzzle\ClientFactory; +class Http +{ + use \Hyperf\Di\Aop\ProxyTrait; + use \Hyperf\Di\Aop\PropertyHandlerTrait; + function __construct() + { + $this->__handlePropertyHandler(__CLASS__); + } + /** + * @Inject + * @var ClientFactory + */ + private $clientFactory; + function get_host($url, &$path) + { + $pos = strpos($url, "/", 8); + if (!$pos) { + $path = "/"; + return $url; + } + $path = substr($url, $pos); + return substr($url, 0, $pos); + } + public function get_content_length($url, $time_out = 60) + { + if ($url == "") { + return 0; + } + try { + $options = ['base_uri' => "", 'handler' => HandlerStack::create(new CoroutineHandler()), 'timeout' => $time_out, 'swoole' => ['timeout' => $time_out, 'socket_buffer_size' => 1024 * 1024 * 2]]; + $path = ""; + $host = $this->get_host($url, $path); + if ($host == "") { + return 0; + } + $options["base_uri"] = $host; + $client = $this->clientFactory->create($options); + $response = $client->get($path); + if ($response->getStatusCode() != 200) { + return 0; + } + $str_size = $response->getHeader('Content-Length'); + $size = intval($str_size[0]); + return $size; + } catch (ClientException $e) { + //获取协程中出现的异常。 + $response_e = $e->getResponse(); + } + return 0; + } + public function get_web_result($url, $time_out = 10) + { + if ($url == "") { + return ""; + } + $path = ""; + $host = $this->get_host($url, $path); + if ($host == "") { + return ""; + } + $options = ['base_uri' => $host, 'handler' => HandlerStack::create(new CoroutineHandler()), 'timeout' => $time_out, 'swoole' => ['timeout' => $time_out, 'socket_buffer_size' => 1024 * 1024 * 2]]; + try { + //var_dump($this->clientFactory); + $client = $this->clientFactory->create($options); + $response = $client->get($path); + if ($response->getStatusCode() == 200) { + $strContent = $response->getBody()->getContents(); + //echo "$strContent\r\n"; + return $strContent; + } + } catch (ClientException $e) { + //获取协程中出现的异常。 + var_dump($e->getResponse()); + } + return ""; + } + public function post_web_result($url, $post_data, $time_out = 10) + { + if ($url == "") { + return ""; + } + $path = ""; + $host = $this->get_host($url, $path); + if ($host == "") { + return ""; + } + $options = ['base_uri' => $host, 'handler' => HandlerStack::create(new CoroutineHandler()), 'timeout' => $time_out, 'swoole' => ['timeout' => $time_out, 'socket_buffer_size' => 1024 * 1024 * 2]]; + try { + $client = $this->clientFactory->create($options); + $response = $client->request('POST', $url, ['form_params' => $post_data]); + //debug + //$response = $client->request('POST', $url, ['form_params' => $post_data,'debug' => true]); + if ($response->getStatusCode() == 200) { + $strContent = $response->getBody()->getContents(); + //echo "$strContent\r\n"; + return $strContent; + } + } catch (ClientException $e) { + //获取协程中出现的异常。 + //var_dump($e->getResponse()); + } + return ""; + } + public function post_json_result($url, $post_data, $time_out = 10) + { + if ($url == "") { + return ""; + } + $path = ""; + $host = $this->get_host($url, $path); + if ($host == "") { + return ""; + } + $options = ['base_uri' => $host, 'handler' => HandlerStack::create(new CoroutineHandler()), 'timeout' => $time_out, 'swoole' => ['timeout' => $time_out, 'socket_buffer_size' => 1024 * 1024 * 2]]; + try { + $client = $this->clientFactory->create($options); + if (is_array($post_data)) { + $response = $client->request('POST', $url, ['body' => json_encode($post_data), "headers" => ['Accept' => 'application/json']]); + } else { + $response = $client->request('POST', $url, ['body' => $post_data, "headers" => ['Accept' => 'application/json']]); + } + //debug + //$response = $client->request('POST', $url, ['form_params' => $post_data,'debug' => true]); + if ($response->getStatusCode() == 200) { + $strContent = $response->getBody()->getContents(); + //echo "$strContent\r\n"; + return $strContent; + } + } catch (ClientException $e) { + //获取协程中出现的异常。 + var_dump($e->getResponse()); + } + return ""; + } +} \ No newline at end of file diff --git a/runtime/container/scan.cache b/runtime/container/scan.cache new file mode 100644 index 0000000..0d1ee72 --- /dev/null +++ b/runtime/container/scan.cache @@ -0,0 +1 @@ +a:2:{i:0;a:3:{s:35:"Hyperf\Cache\CacheListenerCollector";s:6:"a:0:{}";s:40:"Hyperf\Di\Annotation\AnnotationCollector";s:4640:"a:25:{s:36:"Hyperf\Cache\Aspect\CacheEvictAspect";a:1:{s:2:"_c";a:1:{s:27:"Hyperf\Di\Annotation\Aspect";O:27:"Hyperf\Di\Annotation\Aspect":3:{s:7:"classes";a:0:{}s:11:"annotations";a:0:{}s:8:"priority";N;}}}s:35:"Hyperf\Cache\Aspect\CacheableAspect";a:1:{s:2:"_c";a:1:{s:27:"Hyperf\Di\Annotation\Aspect";O:27:"Hyperf\Di\Annotation\Aspect":3:{s:7:"classes";a:0:{}s:11:"annotations";a:0:{}s:8:"priority";N;}}}s:34:"Hyperf\Cache\Aspect\CachePutAspect";a:1:{s:2:"_c";a:1:{s:27:"Hyperf\Di\Annotation\Aspect";O:27:"Hyperf\Di\Annotation\Aspect":3:{s:7:"classes";a:0:{}s:11:"annotations";a:0:{}s:8:"priority";N;}}}s:35:"Hyperf\Cache\Aspect\FailCacheAspect";a:1:{s:2:"_c";a:1:{s:27:"Hyperf\Di\Annotation\Aspect";O:27:"Hyperf\Di\Annotation\Aspect":3:{s:7:"classes";a:0:{}s:11:"annotations";a:0:{}s:8:"priority";N;}}}s:35:"Hyperf\Devtool\VendorPublishCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:26:"Hyperf\Devtool\InfoCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:44:"Hyperf\Devtool\Generator\NatsConsumerCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:44:"Hyperf\Devtool\Generator\AmqpConsumerCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:40:"Hyperf\Devtool\Generator\ResourceCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:44:"Hyperf\Devtool\Generator\AmqpProducerCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:35:"Hyperf\Devtool\Generator\JobCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:40:"Hyperf\Devtool\Generator\ConstantCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:38:"Hyperf\Devtool\Generator\AspectCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:39:"Hyperf\Devtool\Generator\RequestCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:42:"Hyperf\Devtool\Generator\ControllerCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:45:"Hyperf\Devtool\Generator\KafkaConsumerCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:39:"Hyperf\Devtool\Generator\CommandCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:43:"Hyperf\Devtool\Generator\NsqConsumerCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:40:"Hyperf\Devtool\Generator\ListenerCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:39:"Hyperf\Devtool\Generator\ProcessCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:42:"Hyperf\Devtool\Generator\MiddlewareCommand";a:1:{s:2:"_c";a:1:{s:33:"Hyperf\Command\Annotation\Command";O:33:"Hyperf\Command\Annotation\Command":0:{}}}s:36:"App\Listener\DbQueryExecutedListener";a:1:{s:2:"_c";a:1:{s:32:"Hyperf\Event\Annotation\Listener";O:32:"Hyperf\Event\Annotation\Listener":1:{s:8:"priority";i:1;}}}s:14:"App\Utils\Http";a:1:{s:2:"_p";a:1:{s:13:"clientFactory";a:1:{s:27:"Hyperf\Di\Annotation\Inject";O:27:"Hyperf\Di\Annotation\Inject":3:{s:5:"value";s:27:"Hyperf\Guzzle\ClientFactory";s:8:"required";b:1;s:4:"lazy";b:0;}}}}s:27:"App\Service\TransferService";a:1:{s:2:"_p";a:1:{s:5:"redis";a:1:{s:27:"Hyperf\Di\Annotation\Inject";O:27:"Hyperf\Di\Annotation\Inject":3:{s:5:"value";s:18:"Hyperf\Redis\Redis";s:8:"required";b:1;s:4:"lazy";b:0;}}}}s:34:"App\Controller\WebsocketController";a:1:{s:2:"_p";a:3:{s:15:"transferService";a:1:{s:27:"Hyperf\Di\Annotation\Inject";O:27:"Hyperf\Di\Annotation\Inject":3:{s:5:"value";s:27:"App\Service\TransferService";s:8:"required";b:1;s:4:"lazy";b:0;}}s:7:"HashMap";a:1:{s:27:"Hyperf\Di\Annotation\Inject";O:27:"Hyperf\Di\Annotation\Inject":3:{s:5:"value";s:17:"App\Utils\HashMap";s:8:"required";b:1;s:4:"lazy";b:0;}}s:6:"config";a:1:{s:27:"Hyperf\Di\Annotation\Inject";O:27:"Hyperf\Di\Annotation\Inject":3:{s:5:"value";s:31:"Hyperf\Contract\ConfigInterface";s:8:"required";b:1;s:4:"lazy";b:0;}}}}}";s:36:"Hyperf\Di\Annotation\AspectCollector";s:1856:"a:2:{i:0;a:6:{s:36:"Hyperf\Cache\Aspect\CacheEvictAspect";a:3:{s:8:"priority";i:0;s:7:"classes";a:0:{}s:11:"annotations";a:1:{i:0;s:34:"Hyperf\Cache\Annotation\CacheEvict";}}s:35:"Hyperf\Cache\Aspect\CacheableAspect";a:3:{s:8:"priority";i:0;s:7:"classes";a:0:{}s:11:"annotations";a:1:{i:0;s:33:"Hyperf\Cache\Annotation\Cacheable";}}s:34:"Hyperf\Cache\Aspect\CachePutAspect";a:3:{s:8:"priority";i:0;s:7:"classes";a:0:{}s:11:"annotations";a:1:{i:0;s:32:"Hyperf\Cache\Annotation\CachePut";}}s:35:"Hyperf\Cache\Aspect\FailCacheAspect";a:3:{s:8:"priority";i:0;s:7:"classes";a:0:{}s:11:"annotations";a:1:{i:0;s:33:"Hyperf\Cache\Annotation\FailCache";}}s:36:"Hyperf\Config\Annotation\ValueAspect";a:3:{s:8:"priority";i:0;s:7:"classes";a:0:{}s:11:"annotations";a:1:{i:0;s:30:"Hyperf\Config\Annotation\Value";}}s:33:"Hyperf\Di\Annotation\InjectAspect";a:3:{s:8:"priority";i:0;s:7:"classes";a:0:{}s:11:"annotations";a:1:{i:0;s:27:"Hyperf\Di\Annotation\Inject";}}}i:1;a:2:{s:7:"classes";a:6:{s:36:"Hyperf\Cache\Aspect\CacheEvictAspect";a:0:{}s:35:"Hyperf\Cache\Aspect\CacheableAspect";a:0:{}s:34:"Hyperf\Cache\Aspect\CachePutAspect";a:0:{}s:35:"Hyperf\Cache\Aspect\FailCacheAspect";a:0:{}s:36:"Hyperf\Config\Annotation\ValueAspect";a:0:{}s:33:"Hyperf\Di\Annotation\InjectAspect";a:0:{}}s:11:"annotations";a:6:{s:36:"Hyperf\Cache\Aspect\CacheEvictAspect";a:1:{i:0;s:34:"Hyperf\Cache\Annotation\CacheEvict";}s:35:"Hyperf\Cache\Aspect\CacheableAspect";a:1:{i:0;s:33:"Hyperf\Cache\Annotation\Cacheable";}s:34:"Hyperf\Cache\Aspect\CachePutAspect";a:1:{i:0;s:32:"Hyperf\Cache\Annotation\CachePut";}s:35:"Hyperf\Cache\Aspect\FailCacheAspect";a:1:{i:0;s:33:"Hyperf\Cache\Annotation\FailCache";}s:36:"Hyperf\Config\Annotation\ValueAspect";a:1:{i:0;s:30:"Hyperf\Config\Annotation\Value";}s:33:"Hyperf\Di\Annotation\InjectAspect";a:1:{i:0;s:27:"Hyperf\Di\Annotation\Inject";}}}}";}i:1;a:3:{s:14:"App\Utils\Http";s:98:"/Users/xunniao001/Documents/zhou/git/hy-websocket/runtime/container/proxy/App_Utils_Http.proxy.php";s:34:"App\Controller\WebsocketController";s:118:"/Users/xunniao001/Documents/zhou/git/hy-websocket/runtime/container/proxy/App_Controller_WebsocketController.proxy.php";s:27:"App\Service\TransferService";s:111:"/Users/xunniao001/Documents/zhou/git/hy-websocket/runtime/container/proxy/App_Service_TransferService.proxy.php";}} \ No newline at end of file diff --git a/runtime/hyperf.pid b/runtime/hyperf.pid new file mode 100644 index 0000000..2fcd4a3 --- /dev/null +++ b/runtime/hyperf.pid @@ -0,0 +1 @@ +11071 \ No newline at end of file -- Gitblit v1.8.0