├── .dunitconfig ├── .dunitconfig-nightly ├── CONTRIBUTING.md ├── LICENSE ├── Makefile ├── README.md ├── appveyor.yml ├── composer.json ├── composer.lock └── src ├── FileCacheStream.php ├── RequestFactory.php └── Stream.php /.dunitconfig: -------------------------------------------------------------------------------- 1 | // the list of docker images to run against 2 | images=" 3 | vectorface/php5.4 4 | vectorface/php5.5 5 | vectorface/php5.6 6 | vectorface/hhvm"; 7 | 8 | 9 | // a flag indicating whether to run the syntax check 10 | checkSyntax="true"; 11 | // the syntax command to execute 12 | syntaxCommand="find /opt/source -type f -name \"*.php\" ! -path \"*/vendor/*\" -print0 | xargs -0 -n 1 -P 8 php -l | grep -v 'No syntax errors'" 13 | 14 | // a flag indicating whether to run the phpunit test suite 15 | runTests="true"; 16 | // the phpunit command to execute 17 | unitTestsCommand="/opt/source/vendor/bin/phpunit" 18 | -------------------------------------------------------------------------------- /.dunitconfig-nightly: -------------------------------------------------------------------------------- 1 | // the list of docker images to run against 2 | images=" 3 | vectorface/php-nightly 4 | vectorface/hhvm"; 5 | 6 | 7 | // a flag indicating whether to run the syntax check 8 | checkSyntax="true"; 9 | // the syntax command to execute 10 | syntaxCommand="find /opt/source -type f -name \"*.php\" ! -path \"*/vendor/*\" -print0 | xargs -0 -n 1 -P 8 php -l | grep -v 'No syntax errors'" 11 | 12 | // a flag indicating whether to run the phpunit test suite 13 | runTests="true"; 14 | // the phpunit command to execute 15 | unitTestsCommand="/opt/source/vendor/bin/phpunit" 16 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Pull requests are highly appreciated. Here's a quick guide. 4 | 5 | Fork, then clone the repo: 6 | 7 | git clone git@github.com:your-username/react-guzzle-http-client.git 8 | 9 | Set up your machine: 10 | 11 | composer install 12 | 13 | Make sure the tests pass: 14 | 15 | make unit 16 | 17 | Make sure the tests pass on all supported PHP versions (requires docker): 18 | 19 | make dunit 20 | 21 | Make your change. Add tests for your change. Make the tests pass: 22 | 23 | make dunit && make unit 24 | 25 | Before committing and submitting your pull request make sure it passes PSR2 coding style, unit tests pass and pass on all supported PHP versions: 26 | 27 | make contrib 28 | 29 | Push to your fork and [submit a pull request][pr]. 30 | 31 | [pr]: https://help.github.com/articles/creating-a-pull-request/ 32 | 33 | At this point you're waiting on me. I like to at least comment on pull requests 34 | within a day or two. I may suggest some changes or improvements or alternatives. 35 | 36 | Some things that will increase the chance that your pull request is accepted: 37 | 38 | * Write tests. 39 | * Follow PSR2 (travis will also check for this). 40 | * Write a [good commit message][commit]. 41 | 42 | [commit]: http://chris.beams.io/posts/git-commit/ 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Cees-Jan Kiewiet 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | all: cs dunit dunit-nightly unit 2 | travis: cs unit-travis 3 | contrib: cs dunit unit 4 | 5 | init: 6 | if [ ! -d vendor ]; then composer install; fi; 7 | 8 | cs: init 9 | ./vendor/bin/phpcs --standard=PSR2 src/ 10 | 11 | unit: init 12 | ./vendor/bin/phpunit --coverage-text --coverage-html covHtml 13 | 14 | unit-travis: init 15 | ./vendor/bin/phpunit --coverage-text --coverage-clover ./build/logs/clover.xml 16 | 17 | dunit: init 18 | ./vendor/bin/dunit 19 | 20 | dunit-nightly: init 21 | ./vendor/bin/dunit -c .dunitconfig-nightly 22 | 23 | travis-coverage: init 24 | if [ -f ./build/logs/clover.xml ]; then wget https://scrutinizer-ci.com/ocular.phar && php ocular.phar code-coverage:upload --format=php-clover ./build/logs/clover.xml; fi 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Build Status](https://travis-ci.org/WyriHaximus/react-guzzle-http-client.png)](https://travis-ci.org/WyriHaximus/react-guzzle-http-client) 2 | [![Latest Stable Version](https://poser.pugx.org/WyriHaximus/react-guzzle-http-client/v/stable.png)](https://packagist.org/packages/WyriHaximus/react-guzzle-http-client) 3 | [![Total Downloads](https://poser.pugx.org/WyriHaximus/react-guzzle-http-client/downloads.png)](https://packagist.org/packages/WyriHaximus/react-guzzle-http-client) 4 | [![Code Coverage](https://scrutinizer-ci.com/g/WyriHaximus/react-guzzle-http-client/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/WyriHaximus/react-guzzle-http-client/?branch=master) 5 | [![License](https://poser.pugx.org/wyrihaximus/react-guzzle-http-client/license.png)](https://packagist.org/packages/wyrihaximus/react-guzzle-http-client) 6 | 7 | Meta package for ReactPHP HttpClient adapters/handles for Guzzle [4](https://github.com/WyriHaximus/ReactGuzzle), [5](https://github.com/WyriHaximus/ReactGuzzleRing), and [6](https://github.com/WyriHaximus/react-guzzle-psr7). 8 | 9 | ## Contributing ## 10 | 11 | Please see [CONTRIBUTING](CONTRIBUTING.md) for details. 12 | 13 | ## License ## 14 | 15 | Copyright 2016 [Cees-Jan Kiewiet](http://wyrihaximus.net/) 16 | 17 | Permission is hereby granted, free of charge, to any person 18 | obtaining a copy of this software and associated documentation 19 | files (the "Software"), to deal in the Software without 20 | restriction, including without limitation the rights to use, 21 | copy, modify, merge, publish, distribute, sublicense, and/or sell 22 | copies of the Software, and to permit persons to whom the 23 | Software is furnished to do so, subject to the following 24 | conditions: 25 | 26 | The above copyright notice and this permission notice shall be 27 | included in all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 30 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 31 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 32 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 33 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 34 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 35 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 36 | OTHER DEALINGS IN THE SOFTWARE. 37 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | build: false 2 | platform: 3 | - x64 4 | clone_folder: c:\projects\php-project-workspace 5 | 6 | ## Build matrix for lowest and highest possible targets 7 | environment: 8 | matrix: 9 | - dependencies: lowest 10 | php_ver_target: 5.4 11 | - dependencies: lowest 12 | php_ver_target: 5.5 13 | - dependencies: lowest 14 | php_ver_target: 5.6 15 | - dependencies: lowest 16 | php_ver_target: 7.0 17 | - dependencies: lowest 18 | php_ver_target: 7.1 19 | - dependencies: current 20 | php_ver_target: 5.4 21 | - dependencies: current 22 | php_ver_target: 5.5 23 | - dependencies: current 24 | php_ver_target: 5.6 25 | - dependencies: current 26 | php_ver_target: 7.0 27 | - dependencies: current 28 | php_ver_target: 7.1 29 | - dependencies: highest 30 | php_ver_target: 5.4 31 | - dependencies: highest 32 | php_ver_target: 5.5 33 | - dependencies: highest 34 | php_ver_target: 5.6 35 | - dependencies: highest 36 | php_ver_target: 7.0 37 | - dependencies: highest 38 | php_ver_target: 7.1 39 | 40 | ## Cache composer, chocolatey and php bits 41 | cache: 42 | - '%LOCALAPPDATA%\Composer\files -> composer.lock' 43 | - composer.phar 44 | - C:\ProgramData\chocolatey\bin -> .appveyor.yml 45 | - C:\ProgramData\chocolatey\lib -> .appveyor.yml 46 | - c:\tools\php -> .appveyor.yml 47 | 48 | ## Set up environment varriables 49 | init: 50 | - SET PATH=C:\Program Files\OpenSSL;c:\tools\php;%PATH% 51 | - SET COMPOSER_NO_INTERACTION=1 52 | - SET PHP=1 53 | - SET ANSICON=121x90 (121x90) 54 | 55 | ## Install PHP and composer, and run the appropriate composer command 56 | install: 57 | - IF EXIST c:\tools\php (SET PHP=0) 58 | - ps: appveyor-retry cinst --params '""/InstallDir:C:\tools\php""' --ignore-checksums -y php --version ((choco search php --exact --all-versions -r | select-string -pattern $env:php_ver_target | sort { [version]($_ -split '\|' | select -last 1) } -Descending | Select-Object -first 1) -replace '[php|]','') 59 | - cd c:\tools\php 60 | - IF %PHP%==1 copy php.ini-production php.ini /Y 61 | - IF %PHP%==1 echo date.timezone="UTC" >> php.ini 62 | - IF %PHP%==1 echo extension_dir=ext >> php.ini 63 | - IF %PHP%==1 echo extension=php_openssl.dll >> php.ini 64 | - IF %PHP%==1 echo extension=php_mbstring.dll >> php.ini 65 | - IF %PHP%==1 echo extension=php_fileinfo.dll >> php.ini 66 | - IF %PHP%==1 echo @php %%~dp0composer.phar %%* > composer.bat 67 | - appveyor-retry appveyor DownloadFile https://getcomposer.org/composer.phar 68 | - cd c:\projects\php-project-workspace 69 | - IF %dependencies%==lowest appveyor-retry composer update --prefer-lowest --no-progress --profile -n 70 | - IF %dependencies%==current appveyor-retry composer install --no-progress --profile 71 | - IF %dependencies%==highest appveyor-retry composer update --no-progress --profile -n 72 | - composer show 73 | 74 | ## Run the actual test 75 | test_script: 76 | - cd c:\projects\php-project-workspace 77 | - vendor/bin/phpunit -c phpunit.xml.dist -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wyrihaximus/react-guzzle-http-client", 3 | "description": "Asynchronous adapter for different Guzzle versions powered by react/http-client", 4 | "license": "MIT", 5 | "authors": [ 6 | { 7 | "name": "Cees-Jan Kiewiet", 8 | "email": "ceesjank@gmail.com", 9 | "homepage": "http://wyrihaximus.net/" 10 | } 11 | ], 12 | "require": { 13 | "php": "^5.4|^7.0", 14 | "clue/buzz-react": "^2.0 || ^1.4", 15 | "clue/http-proxy-react": "^1.2", 16 | "clue/socks-react": "^1.0.0", 17 | "guzzlehttp/psr7": "^1.0", 18 | "psr/http-message": "^1.0", 19 | "wyrihaximus/ticking-promise": "^1.6" 20 | }, 21 | "require-dev": { 22 | "clue/block-react": "^1.1", 23 | "phake/phake": "~1.0.6", 24 | "phpunit/phpunit": "^5.0 || ^4.8", 25 | "squizlabs/php_codesniffer": "~3.4.0 || ~3.5.0", 26 | "vectorface/dunit": "~2" 27 | }, 28 | "autoload": { 29 | "psr-4": { 30 | "WyriHaximus\\React\\Guzzle\\HttpClient\\": "src/" 31 | } 32 | }, 33 | "autoload-dev": { 34 | "psr-4": { 35 | "WyriHaximus\\React\\Tests\\Guzzle\\HttpClient\\": "tests/" 36 | } 37 | }, 38 | "config": { 39 | "sort-packages": true, 40 | "platform": { 41 | "php": "5.4" 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "4003944494c00043a57304edc9056c39", 8 | "packages": [ 9 | { 10 | "name": "clue/buzz-react", 11 | "version": "v2.7.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/clue/reactphp-buzz.git", 15 | "reference": "ca9537cb5ab7b5aaebe93429980a17cf4ead32b7" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/clue/reactphp-buzz/zipball/ca9537cb5ab7b5aaebe93429980a17cf4ead32b7", 20 | "reference": "ca9537cb5ab7b5aaebe93429980a17cf4ead32b7", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=5.3", 25 | "psr/http-message": "^1.0", 26 | "react/event-loop": "^1.0 || ^0.5", 27 | "react/http-client": "^0.5.10", 28 | "react/promise": "^2.2.1 || ^1.2.1", 29 | "react/promise-stream": "^1.0 || ^0.1.1", 30 | "react/socket": "^1.1", 31 | "react/stream": "^1.0 || ^0.7", 32 | "ringcentral/psr7": "^1.2" 33 | }, 34 | "require-dev": { 35 | "clue/block-react": "^1.0", 36 | "clue/http-proxy-react": "^1.3", 37 | "clue/reactphp-ssh-proxy": "^1.0", 38 | "clue/socks-react": "^1.0", 39 | "phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35", 40 | "react/http": "^0.8" 41 | }, 42 | "type": "library", 43 | "autoload": { 44 | "psr-4": { 45 | "Clue\\React\\Buzz\\": "src/" 46 | } 47 | }, 48 | "notification-url": "https://packagist.org/downloads/", 49 | "license": [ 50 | "MIT" 51 | ], 52 | "authors": [ 53 | { 54 | "name": "Christian Lück", 55 | "email": "christian@clue.engineering" 56 | } 57 | ], 58 | "description": "Simple, async PSR-7 HTTP client for concurrently processing any number of HTTP requests, built on top of ReactPHP", 59 | "homepage": "https://github.com/clue/reactphp-buzz", 60 | "keywords": [ 61 | "async", 62 | "http", 63 | "http client", 64 | "psr-7", 65 | "reactphp" 66 | ], 67 | "time": "2020-02-26T12:05:32+00:00" 68 | }, 69 | { 70 | "name": "clue/http-proxy-react", 71 | "version": "v1.4.0", 72 | "source": { 73 | "type": "git", 74 | "url": "https://github.com/clue/reactphp-http-proxy.git", 75 | "reference": "5a6790443366dada996993c0a458f13e616fe10e" 76 | }, 77 | "dist": { 78 | "type": "zip", 79 | "url": "https://api.github.com/repos/clue/reactphp-http-proxy/zipball/5a6790443366dada996993c0a458f13e616fe10e", 80 | "reference": "5a6790443366dada996993c0a458f13e616fe10e", 81 | "shasum": "" 82 | }, 83 | "require": { 84 | "php": ">=5.3", 85 | "react/promise": " ^2.1 || ^1.2.1", 86 | "react/socket": "^1.1", 87 | "ringcentral/psr7": "^1.2" 88 | }, 89 | "require-dev": { 90 | "clue/block-react": "^1.1", 91 | "phpunit/phpunit": "^5.0 || ^4.8", 92 | "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3" 93 | }, 94 | "type": "library", 95 | "autoload": { 96 | "psr-4": { 97 | "Clue\\React\\HttpProxy\\": "src/" 98 | } 99 | }, 100 | "notification-url": "https://packagist.org/downloads/", 101 | "license": [ 102 | "MIT" 103 | ], 104 | "authors": [ 105 | { 106 | "name": "Christian Lück", 107 | "email": "christian@lueck.tv" 108 | } 109 | ], 110 | "description": "Async HTTP proxy connector, use any TCP/IP-based protocol through an HTTP CONNECT proxy server, built on top of ReactPHP", 111 | "homepage": "https://github.com/clue/reactphp-http-proxy", 112 | "keywords": [ 113 | "async", 114 | "connect", 115 | "http", 116 | "proxy", 117 | "reactphp" 118 | ], 119 | "time": "2018-10-30T14:41:14+00:00" 120 | }, 121 | { 122 | "name": "clue/socks-react", 123 | "version": "v1.0.0", 124 | "source": { 125 | "type": "git", 126 | "url": "https://github.com/clue/reactphp-socks.git", 127 | "reference": "f60ae627807b4b04de0c5beca2344f6df666b802" 128 | }, 129 | "dist": { 130 | "type": "zip", 131 | "url": "https://api.github.com/repos/clue/reactphp-socks/zipball/f60ae627807b4b04de0c5beca2344f6df666b802", 132 | "reference": "f60ae627807b4b04de0c5beca2344f6df666b802", 133 | "shasum": "" 134 | }, 135 | "require": { 136 | "php": ">=5.3", 137 | "react/promise": "^2.1 || ^1.2", 138 | "react/socket": "^1.1" 139 | }, 140 | "require-dev": { 141 | "clue/block-react": "^1.1", 142 | "clue/connection-manager-extra": "^1.0 || ^0.7", 143 | "phpunit/phpunit": "^6.0 || ^5.7 || ^4.8.35", 144 | "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3" 145 | }, 146 | "type": "library", 147 | "autoload": { 148 | "psr-4": { 149 | "Clue\\React\\Socks\\": "src/" 150 | } 151 | }, 152 | "notification-url": "https://packagist.org/downloads/", 153 | "license": [ 154 | "MIT" 155 | ], 156 | "authors": [ 157 | { 158 | "name": "Christian Lück", 159 | "email": "christian@lueck.tv" 160 | } 161 | ], 162 | "description": "Async SOCKS proxy connector client and server implementation, tunnel any TCP/IP-based protocol through a SOCKS5 or SOCKS4(a) proxy server, built on top of ReactPHP.", 163 | "homepage": "https://github.com/clue/reactphp-socks", 164 | "keywords": [ 165 | "async", 166 | "proxy server", 167 | "reactphp", 168 | "socks client", 169 | "socks server", 170 | "socks4a", 171 | "socks5", 172 | "tcp tunnel" 173 | ], 174 | "time": "2018-11-20T11:16:19+00:00" 175 | }, 176 | { 177 | "name": "evenement/evenement", 178 | "version": "v2.1.0", 179 | "source": { 180 | "type": "git", 181 | "url": "https://github.com/igorw/evenement.git", 182 | "reference": "6ba9a777870ab49f417e703229d53931ed40fd7a" 183 | }, 184 | "dist": { 185 | "type": "zip", 186 | "url": "https://api.github.com/repos/igorw/evenement/zipball/6ba9a777870ab49f417e703229d53931ed40fd7a", 187 | "reference": "6ba9a777870ab49f417e703229d53931ed40fd7a", 188 | "shasum": "" 189 | }, 190 | "require": { 191 | "php": ">=5.4.0" 192 | }, 193 | "require-dev": { 194 | "phpunit/phpunit": "^6.0||^5.7||^4.8.35" 195 | }, 196 | "type": "library", 197 | "extra": { 198 | "branch-alias": { 199 | "dev-master": "2.0-dev" 200 | } 201 | }, 202 | "autoload": { 203 | "psr-0": { 204 | "Evenement": "src" 205 | } 206 | }, 207 | "notification-url": "https://packagist.org/downloads/", 208 | "license": [ 209 | "MIT" 210 | ], 211 | "authors": [ 212 | { 213 | "name": "Igor Wiedler", 214 | "email": "igor@wiedler.ch" 215 | } 216 | ], 217 | "description": "Événement is a very simple event dispatching library for PHP", 218 | "keywords": [ 219 | "event-dispatcher", 220 | "event-emitter" 221 | ], 222 | "time": "2017-07-17T17:39:19+00:00" 223 | }, 224 | { 225 | "name": "guzzlehttp/psr7", 226 | "version": "1.6.1", 227 | "source": { 228 | "type": "git", 229 | "url": "https://github.com/guzzle/psr7.git", 230 | "reference": "239400de7a173fe9901b9ac7c06497751f00727a" 231 | }, 232 | "dist": { 233 | "type": "zip", 234 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", 235 | "reference": "239400de7a173fe9901b9ac7c06497751f00727a", 236 | "shasum": "" 237 | }, 238 | "require": { 239 | "php": ">=5.4.0", 240 | "psr/http-message": "~1.0", 241 | "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" 242 | }, 243 | "provide": { 244 | "psr/http-message-implementation": "1.0" 245 | }, 246 | "require-dev": { 247 | "ext-zlib": "*", 248 | "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" 249 | }, 250 | "suggest": { 251 | "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" 252 | }, 253 | "type": "library", 254 | "extra": { 255 | "branch-alias": { 256 | "dev-master": "1.6-dev" 257 | } 258 | }, 259 | "autoload": { 260 | "psr-4": { 261 | "GuzzleHttp\\Psr7\\": "src/" 262 | }, 263 | "files": [ 264 | "src/functions_include.php" 265 | ] 266 | }, 267 | "notification-url": "https://packagist.org/downloads/", 268 | "license": [ 269 | "MIT" 270 | ], 271 | "authors": [ 272 | { 273 | "name": "Michael Dowling", 274 | "email": "mtdowling@gmail.com", 275 | "homepage": "https://github.com/mtdowling" 276 | }, 277 | { 278 | "name": "Tobias Schultze", 279 | "homepage": "https://github.com/Tobion" 280 | } 281 | ], 282 | "description": "PSR-7 message implementation that also provides common utility methods", 283 | "keywords": [ 284 | "http", 285 | "message", 286 | "psr-7", 287 | "request", 288 | "response", 289 | "stream", 290 | "uri", 291 | "url" 292 | ], 293 | "time": "2019-07-01T23:21:34+00:00" 294 | }, 295 | { 296 | "name": "psr/http-message", 297 | "version": "1.0.1", 298 | "source": { 299 | "type": "git", 300 | "url": "https://github.com/php-fig/http-message.git", 301 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 302 | }, 303 | "dist": { 304 | "type": "zip", 305 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 306 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 307 | "shasum": "" 308 | }, 309 | "require": { 310 | "php": ">=5.3.0" 311 | }, 312 | "type": "library", 313 | "extra": { 314 | "branch-alias": { 315 | "dev-master": "1.0.x-dev" 316 | } 317 | }, 318 | "autoload": { 319 | "psr-4": { 320 | "Psr\\Http\\Message\\": "src/" 321 | } 322 | }, 323 | "notification-url": "https://packagist.org/downloads/", 324 | "license": [ 325 | "MIT" 326 | ], 327 | "authors": [ 328 | { 329 | "name": "PHP-FIG", 330 | "homepage": "http://www.php-fig.org/" 331 | } 332 | ], 333 | "description": "Common interface for HTTP messages", 334 | "homepage": "https://github.com/php-fig/http-message", 335 | "keywords": [ 336 | "http", 337 | "http-message", 338 | "psr", 339 | "psr-7", 340 | "request", 341 | "response" 342 | ], 343 | "time": "2016-08-06T14:39:51+00:00" 344 | }, 345 | { 346 | "name": "ralouphie/getallheaders", 347 | "version": "2.0.5", 348 | "source": { 349 | "type": "git", 350 | "url": "https://github.com/ralouphie/getallheaders.git", 351 | "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" 352 | }, 353 | "dist": { 354 | "type": "zip", 355 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", 356 | "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", 357 | "shasum": "" 358 | }, 359 | "require": { 360 | "php": ">=5.3" 361 | }, 362 | "require-dev": { 363 | "phpunit/phpunit": "~3.7.0", 364 | "satooshi/php-coveralls": ">=1.0" 365 | }, 366 | "type": "library", 367 | "autoload": { 368 | "files": [ 369 | "src/getallheaders.php" 370 | ] 371 | }, 372 | "notification-url": "https://packagist.org/downloads/", 373 | "license": [ 374 | "MIT" 375 | ], 376 | "authors": [ 377 | { 378 | "name": "Ralph Khattar", 379 | "email": "ralph.khattar@gmail.com" 380 | } 381 | ], 382 | "description": "A polyfill for getallheaders.", 383 | "time": "2016-02-11T07:05:27+00:00" 384 | }, 385 | { 386 | "name": "react/cache", 387 | "version": "v1.0.0", 388 | "source": { 389 | "type": "git", 390 | "url": "https://github.com/reactphp/cache.git", 391 | "reference": "aa10d63a1b40a36a486bdf527f28bac607ee6466" 392 | }, 393 | "dist": { 394 | "type": "zip", 395 | "url": "https://api.github.com/repos/reactphp/cache/zipball/aa10d63a1b40a36a486bdf527f28bac607ee6466", 396 | "reference": "aa10d63a1b40a36a486bdf527f28bac607ee6466", 397 | "shasum": "" 398 | }, 399 | "require": { 400 | "php": ">=5.3.0", 401 | "react/promise": "~2.0|~1.1" 402 | }, 403 | "require-dev": { 404 | "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35" 405 | }, 406 | "type": "library", 407 | "autoload": { 408 | "psr-4": { 409 | "React\\Cache\\": "src/" 410 | } 411 | }, 412 | "notification-url": "https://packagist.org/downloads/", 413 | "license": [ 414 | "MIT" 415 | ], 416 | "description": "Async, Promise-based cache interface for ReactPHP", 417 | "keywords": [ 418 | "cache", 419 | "caching", 420 | "promise", 421 | "reactphp" 422 | ], 423 | "time": "2019-07-11T13:45:28+00:00" 424 | }, 425 | { 426 | "name": "react/dns", 427 | "version": "v1.2.0", 428 | "source": { 429 | "type": "git", 430 | "url": "https://github.com/reactphp/dns.git", 431 | "reference": "a214d90c2884dac18d0cac6176202f247b66d762" 432 | }, 433 | "dist": { 434 | "type": "zip", 435 | "url": "https://api.github.com/repos/reactphp/dns/zipball/a214d90c2884dac18d0cac6176202f247b66d762", 436 | "reference": "a214d90c2884dac18d0cac6176202f247b66d762", 437 | "shasum": "" 438 | }, 439 | "require": { 440 | "php": ">=5.3.0", 441 | "react/cache": "^1.0 || ^0.6 || ^0.5", 442 | "react/event-loop": "^1.0 || ^0.5", 443 | "react/promise": "^2.7 || ^1.2.1", 444 | "react/promise-timer": "^1.2" 445 | }, 446 | "require-dev": { 447 | "clue/block-react": "^1.2", 448 | "phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35" 449 | }, 450 | "type": "library", 451 | "autoload": { 452 | "psr-4": { 453 | "React\\Dns\\": "src" 454 | } 455 | }, 456 | "notification-url": "https://packagist.org/downloads/", 457 | "license": [ 458 | "MIT" 459 | ], 460 | "description": "Async DNS resolver for ReactPHP", 461 | "keywords": [ 462 | "async", 463 | "dns", 464 | "dns-resolver", 465 | "reactphp" 466 | ], 467 | "time": "2019-08-15T09:06:31+00:00" 468 | }, 469 | { 470 | "name": "react/event-loop", 471 | "version": "v1.1.1", 472 | "source": { 473 | "type": "git", 474 | "url": "https://github.com/reactphp/event-loop.git", 475 | "reference": "6d24de090cd59cfc830263cfba965be77b563c13" 476 | }, 477 | "dist": { 478 | "type": "zip", 479 | "url": "https://api.github.com/repos/reactphp/event-loop/zipball/6d24de090cd59cfc830263cfba965be77b563c13", 480 | "reference": "6d24de090cd59cfc830263cfba965be77b563c13", 481 | "shasum": "" 482 | }, 483 | "require": { 484 | "php": ">=5.3.0" 485 | }, 486 | "require-dev": { 487 | "phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35" 488 | }, 489 | "suggest": { 490 | "ext-event": "~1.0 for ExtEventLoop", 491 | "ext-pcntl": "For signal handling support when using the StreamSelectLoop", 492 | "ext-uv": "* for ExtUvLoop" 493 | }, 494 | "type": "library", 495 | "autoload": { 496 | "psr-4": { 497 | "React\\EventLoop\\": "src" 498 | } 499 | }, 500 | "notification-url": "https://packagist.org/downloads/", 501 | "license": [ 502 | "MIT" 503 | ], 504 | "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", 505 | "keywords": [ 506 | "asynchronous", 507 | "event-loop" 508 | ], 509 | "time": "2020-01-01T18:39:52+00:00" 510 | }, 511 | { 512 | "name": "react/http-client", 513 | "version": "v0.5.10", 514 | "source": { 515 | "type": "git", 516 | "url": "https://github.com/reactphp/http-client.git", 517 | "reference": "f16ab55150ec369f8f9b5db64972f248691093b0" 518 | }, 519 | "dist": { 520 | "type": "zip", 521 | "url": "https://api.github.com/repos/reactphp/http-client/zipball/f16ab55150ec369f8f9b5db64972f248691093b0", 522 | "reference": "f16ab55150ec369f8f9b5db64972f248691093b0", 523 | "shasum": "" 524 | }, 525 | "require": { 526 | "evenement/evenement": "^3.0 || ^2.0 || ^1.0", 527 | "php": ">=5.3.0", 528 | "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3", 529 | "react/promise": "^2.1 || ^1.2.1", 530 | "react/socket": "^1.0 || ^0.8.4", 531 | "react/stream": "^1.0 || ^0.7.1", 532 | "ringcentral/psr7": "^1.2" 533 | }, 534 | "require-dev": { 535 | "clue/block-react": "^1.2", 536 | "phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35", 537 | "react/promise-stream": "^1.1" 538 | }, 539 | "type": "library", 540 | "autoload": { 541 | "psr-4": { 542 | "React\\HttpClient\\": "src" 543 | } 544 | }, 545 | "notification-url": "https://packagist.org/downloads/", 546 | "license": [ 547 | "MIT" 548 | ], 549 | "description": "Event-driven, streaming HTTP client for ReactPHP", 550 | "keywords": [ 551 | "http" 552 | ], 553 | "time": "2020-01-14T08:36:16+00:00" 554 | }, 555 | { 556 | "name": "react/promise", 557 | "version": "v2.7.1", 558 | "source": { 559 | "type": "git", 560 | "url": "https://github.com/reactphp/promise.git", 561 | "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d" 562 | }, 563 | "dist": { 564 | "type": "zip", 565 | "url": "https://api.github.com/repos/reactphp/promise/zipball/31ffa96f8d2ed0341a57848cbb84d88b89dd664d", 566 | "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d", 567 | "shasum": "" 568 | }, 569 | "require": { 570 | "php": ">=5.4.0" 571 | }, 572 | "require-dev": { 573 | "phpunit/phpunit": "~4.8" 574 | }, 575 | "type": "library", 576 | "autoload": { 577 | "psr-4": { 578 | "React\\Promise\\": "src/" 579 | }, 580 | "files": [ 581 | "src/functions_include.php" 582 | ] 583 | }, 584 | "notification-url": "https://packagist.org/downloads/", 585 | "license": [ 586 | "MIT" 587 | ], 588 | "authors": [ 589 | { 590 | "name": "Jan Sorgalla", 591 | "email": "jsorgalla@gmail.com" 592 | } 593 | ], 594 | "description": "A lightweight implementation of CommonJS Promises/A for PHP", 595 | "keywords": [ 596 | "promise", 597 | "promises" 598 | ], 599 | "time": "2019-01-07T21:25:54+00:00" 600 | }, 601 | { 602 | "name": "react/promise-stream", 603 | "version": "v1.2.0", 604 | "source": { 605 | "type": "git", 606 | "url": "https://github.com/reactphp/promise-stream.git", 607 | "reference": "6384d8b76cf7dcc44b0bf3343fb2b2928412d1fe" 608 | }, 609 | "dist": { 610 | "type": "zip", 611 | "url": "https://api.github.com/repos/reactphp/promise-stream/zipball/6384d8b76cf7dcc44b0bf3343fb2b2928412d1fe", 612 | "reference": "6384d8b76cf7dcc44b0bf3343fb2b2928412d1fe", 613 | "shasum": "" 614 | }, 615 | "require": { 616 | "php": ">=5.3", 617 | "react/promise": "^2.1 || ^1.2", 618 | "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4.6" 619 | }, 620 | "require-dev": { 621 | "clue/block-react": "^1.0", 622 | "phpunit/phpunit": "^7.0 || ^6.4 || ^5.7 || ^4.8.35", 623 | "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3", 624 | "react/promise-timer": "^1.0" 625 | }, 626 | "type": "library", 627 | "autoload": { 628 | "psr-4": { 629 | "React\\Promise\\Stream\\": "src/" 630 | }, 631 | "files": [ 632 | "src/functions_include.php" 633 | ] 634 | }, 635 | "notification-url": "https://packagist.org/downloads/", 636 | "license": [ 637 | "MIT" 638 | ], 639 | "authors": [ 640 | { 641 | "name": "Christian Lück", 642 | "email": "christian@lueck.tv" 643 | } 644 | ], 645 | "description": "The missing link between Promise-land and Stream-land for ReactPHP", 646 | "homepage": "https://github.com/reactphp/promise-stream", 647 | "keywords": [ 648 | "Buffer", 649 | "async", 650 | "promise", 651 | "reactphp", 652 | "stream", 653 | "unwrap" 654 | ], 655 | "time": "2019-07-03T12:29:10+00:00" 656 | }, 657 | { 658 | "name": "react/promise-timer", 659 | "version": "v1.5.1", 660 | "source": { 661 | "type": "git", 662 | "url": "https://github.com/reactphp/promise-timer.git", 663 | "reference": "35fb910604fd86b00023fc5cda477c8074ad0abc" 664 | }, 665 | "dist": { 666 | "type": "zip", 667 | "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/35fb910604fd86b00023fc5cda477c8074ad0abc", 668 | "reference": "35fb910604fd86b00023fc5cda477c8074ad0abc", 669 | "shasum": "" 670 | }, 671 | "require": { 672 | "php": ">=5.3", 673 | "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5", 674 | "react/promise": "^2.7.0 || ^1.2.1" 675 | }, 676 | "require-dev": { 677 | "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35" 678 | }, 679 | "type": "library", 680 | "autoload": { 681 | "psr-4": { 682 | "React\\Promise\\Timer\\": "src/" 683 | }, 684 | "files": [ 685 | "src/functions_include.php" 686 | ] 687 | }, 688 | "notification-url": "https://packagist.org/downloads/", 689 | "license": [ 690 | "MIT" 691 | ], 692 | "authors": [ 693 | { 694 | "name": "Christian Lück", 695 | "email": "christian@lueck.tv" 696 | } 697 | ], 698 | "description": "A trivial implementation of timeouts for Promises, built on top of ReactPHP.", 699 | "homepage": "https://github.com/reactphp/promise-timer", 700 | "keywords": [ 701 | "async", 702 | "event-loop", 703 | "promise", 704 | "reactphp", 705 | "timeout", 706 | "timer" 707 | ], 708 | "time": "2019-03-27T18:10:32+00:00" 709 | }, 710 | { 711 | "name": "react/socket", 712 | "version": "v1.3.0", 713 | "source": { 714 | "type": "git", 715 | "url": "https://github.com/reactphp/socket.git", 716 | "reference": "10f0629ec83ea0fa22597f348623f554227e3ca0" 717 | }, 718 | "dist": { 719 | "type": "zip", 720 | "url": "https://api.github.com/repos/reactphp/socket/zipball/10f0629ec83ea0fa22597f348623f554227e3ca0", 721 | "reference": "10f0629ec83ea0fa22597f348623f554227e3ca0", 722 | "shasum": "" 723 | }, 724 | "require": { 725 | "evenement/evenement": "^3.0 || ^2.0 || ^1.0", 726 | "php": ">=5.3.0", 727 | "react/dns": "^1.0 || ^0.4.13", 728 | "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5", 729 | "react/promise": "^2.6.0 || ^1.2.1", 730 | "react/promise-timer": "^1.4.0", 731 | "react/stream": "^1.1" 732 | }, 733 | "require-dev": { 734 | "clue/block-react": "^1.2", 735 | "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35" 736 | }, 737 | "type": "library", 738 | "autoload": { 739 | "psr-4": { 740 | "React\\Socket\\": "src" 741 | } 742 | }, 743 | "notification-url": "https://packagist.org/downloads/", 744 | "license": [ 745 | "MIT" 746 | ], 747 | "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", 748 | "keywords": [ 749 | "Connection", 750 | "Socket", 751 | "async", 752 | "reactphp", 753 | "stream" 754 | ], 755 | "time": "2019-07-10T10:11:14+00:00" 756 | }, 757 | { 758 | "name": "react/stream", 759 | "version": "v1.1.0", 760 | "source": { 761 | "type": "git", 762 | "url": "https://github.com/reactphp/stream.git", 763 | "reference": "50426855f7a77ddf43b9266c22320df5bf6c6ce6" 764 | }, 765 | "dist": { 766 | "type": "zip", 767 | "url": "https://api.github.com/repos/reactphp/stream/zipball/50426855f7a77ddf43b9266c22320df5bf6c6ce6", 768 | "reference": "50426855f7a77ddf43b9266c22320df5bf6c6ce6", 769 | "shasum": "" 770 | }, 771 | "require": { 772 | "evenement/evenement": "^3.0 || ^2.0 || ^1.0", 773 | "php": ">=5.3.8", 774 | "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5" 775 | }, 776 | "require-dev": { 777 | "clue/stream-filter": "~1.2", 778 | "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35" 779 | }, 780 | "type": "library", 781 | "autoload": { 782 | "psr-4": { 783 | "React\\Stream\\": "src" 784 | } 785 | }, 786 | "notification-url": "https://packagist.org/downloads/", 787 | "license": [ 788 | "MIT" 789 | ], 790 | "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", 791 | "keywords": [ 792 | "event-driven", 793 | "io", 794 | "non-blocking", 795 | "pipe", 796 | "reactphp", 797 | "readable", 798 | "stream", 799 | "writable" 800 | ], 801 | "time": "2019-01-01T16:15:09+00:00" 802 | }, 803 | { 804 | "name": "ringcentral/psr7", 805 | "version": "1.2.2", 806 | "source": { 807 | "type": "git", 808 | "url": "https://github.com/ringcentral/psr7.git", 809 | "reference": "dcd84bbb49b96c616d1dcc8bfb9bef3f2cd53d1c" 810 | }, 811 | "dist": { 812 | "type": "zip", 813 | "url": "https://api.github.com/repos/ringcentral/psr7/zipball/dcd84bbb49b96c616d1dcc8bfb9bef3f2cd53d1c", 814 | "reference": "dcd84bbb49b96c616d1dcc8bfb9bef3f2cd53d1c", 815 | "shasum": "" 816 | }, 817 | "require": { 818 | "php": ">=5.3", 819 | "psr/http-message": "~1.0" 820 | }, 821 | "provide": { 822 | "psr/http-message-implementation": "1.0" 823 | }, 824 | "require-dev": { 825 | "phpunit/phpunit": "~4.0" 826 | }, 827 | "type": "library", 828 | "extra": { 829 | "branch-alias": { 830 | "dev-master": "1.0-dev" 831 | } 832 | }, 833 | "autoload": { 834 | "psr-4": { 835 | "RingCentral\\Psr7\\": "src/" 836 | }, 837 | "files": [ 838 | "src/functions_include.php" 839 | ] 840 | }, 841 | "notification-url": "https://packagist.org/downloads/", 842 | "license": [ 843 | "MIT" 844 | ], 845 | "authors": [ 846 | { 847 | "name": "Michael Dowling", 848 | "email": "mtdowling@gmail.com", 849 | "homepage": "https://github.com/mtdowling" 850 | } 851 | ], 852 | "description": "PSR-7 message implementation", 853 | "keywords": [ 854 | "http", 855 | "message", 856 | "stream", 857 | "uri" 858 | ], 859 | "time": "2018-01-15T21:00:49+00:00" 860 | }, 861 | { 862 | "name": "wyrihaximus/ticking-promise", 863 | "version": "1.6.3", 864 | "source": { 865 | "type": "git", 866 | "url": "https://github.com/WyriHaximus/TickingPromise.git", 867 | "reference": "4bb99024402bb7526de8880f3dab0c1f0858def5" 868 | }, 869 | "dist": { 870 | "type": "zip", 871 | "url": "https://api.github.com/repos/WyriHaximus/TickingPromise/zipball/4bb99024402bb7526de8880f3dab0c1f0858def5", 872 | "reference": "4bb99024402bb7526de8880f3dab0c1f0858def5", 873 | "shasum": "" 874 | }, 875 | "require": { 876 | "php": "^7.0 || ^5.4", 877 | "react/event-loop": "^1.0 || ^0.5 || ^0.4", 878 | "react/promise": "~2.1" 879 | }, 880 | "require-dev": { 881 | "phpunit/phpunit": "~4.4", 882 | "squizlabs/php_codesniffer": "^1.5.6", 883 | "vectorface/dunit": "~1.4" 884 | }, 885 | "type": "library", 886 | "autoload": { 887 | "psr-4": { 888 | "WyriHaximus\\React\\": "src/" 889 | }, 890 | "files": [ 891 | "src/functions_include.php" 892 | ] 893 | }, 894 | "notification-url": "https://packagist.org/downloads/", 895 | "license": [ 896 | "MIT" 897 | ], 898 | "authors": [ 899 | { 900 | "name": "Cees-Jan Kiewiet", 901 | "email": "ceesjank@gmail.com", 902 | "homepage": "http://wyrihaximus.net/" 903 | } 904 | ], 905 | "description": "Wrapping ticks into a promise", 906 | "time": "2018-04-05T12:36:50+00:00" 907 | } 908 | ], 909 | "packages-dev": [ 910 | { 911 | "name": "clue/block-react", 912 | "version": "v1.3.1", 913 | "source": { 914 | "type": "git", 915 | "url": "https://github.com/clue/reactphp-block.git", 916 | "reference": "2f516b28259c203d67c4c963772dd7e9db652737" 917 | }, 918 | "dist": { 919 | "type": "zip", 920 | "url": "https://api.github.com/repos/clue/reactphp-block/zipball/2f516b28259c203d67c4c963772dd7e9db652737", 921 | "reference": "2f516b28259c203d67c4c963772dd7e9db652737", 922 | "shasum": "" 923 | }, 924 | "require": { 925 | "php": ">=5.3", 926 | "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5", 927 | "react/promise": "^2.7 || ^1.2.1", 928 | "react/promise-timer": "^1.5" 929 | }, 930 | "require-dev": { 931 | "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35" 932 | }, 933 | "type": "library", 934 | "autoload": { 935 | "files": [ 936 | "src/functions_include.php" 937 | ] 938 | }, 939 | "notification-url": "https://packagist.org/downloads/", 940 | "license": [ 941 | "MIT" 942 | ], 943 | "authors": [ 944 | { 945 | "name": "Christian Lück", 946 | "email": "christian@lueck.tv" 947 | } 948 | ], 949 | "description": "Lightweight library that eases integrating async components built for ReactPHP in a traditional, blocking environment.", 950 | "homepage": "https://github.com/clue/reactphp-block", 951 | "keywords": [ 952 | "async", 953 | "await", 954 | "blocking", 955 | "event loop", 956 | "promise", 957 | "reactphp", 958 | "sleep", 959 | "synchronous" 960 | ], 961 | "time": "2019-04-09T11:45:04+00:00" 962 | }, 963 | { 964 | "name": "doctrine/instantiator", 965 | "version": "1.0.5", 966 | "source": { 967 | "type": "git", 968 | "url": "https://github.com/doctrine/instantiator.git", 969 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" 970 | }, 971 | "dist": { 972 | "type": "zip", 973 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", 974 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", 975 | "shasum": "" 976 | }, 977 | "require": { 978 | "php": ">=5.3,<8.0-DEV" 979 | }, 980 | "require-dev": { 981 | "athletic/athletic": "~0.1.8", 982 | "ext-pdo": "*", 983 | "ext-phar": "*", 984 | "phpunit/phpunit": "~4.0", 985 | "squizlabs/php_codesniffer": "~2.0" 986 | }, 987 | "type": "library", 988 | "extra": { 989 | "branch-alias": { 990 | "dev-master": "1.0.x-dev" 991 | } 992 | }, 993 | "autoload": { 994 | "psr-4": { 995 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 996 | } 997 | }, 998 | "notification-url": "https://packagist.org/downloads/", 999 | "license": [ 1000 | "MIT" 1001 | ], 1002 | "authors": [ 1003 | { 1004 | "name": "Marco Pivetta", 1005 | "email": "ocramius@gmail.com", 1006 | "homepage": "http://ocramius.github.com/" 1007 | } 1008 | ], 1009 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 1010 | "homepage": "https://github.com/doctrine/instantiator", 1011 | "keywords": [ 1012 | "constructor", 1013 | "instantiate" 1014 | ], 1015 | "time": "2015-06-14T21:17:01+00:00" 1016 | }, 1017 | { 1018 | "name": "phake/phake", 1019 | "version": "v1.0.8", 1020 | "source": { 1021 | "type": "git", 1022 | "url": "https://github.com/mlively/Phake.git", 1023 | "reference": "c5a3d7a75fc7431e8a5e21a922f084af95456bc6" 1024 | }, 1025 | "dist": { 1026 | "type": "zip", 1027 | "url": "https://api.github.com/repos/mlively/Phake/zipball/c5a3d7a75fc7431e8a5e21a922f084af95456bc6", 1028 | "reference": "c5a3d7a75fc7431e8a5e21a922f084af95456bc6", 1029 | "shasum": "" 1030 | }, 1031 | "require": { 1032 | "php": ">=5.2.0" 1033 | }, 1034 | "require-dev": { 1035 | "doctrine/common": "2.3.*", 1036 | "ext-soap": "*", 1037 | "hamcrest/hamcrest-php": "1.1.0", 1038 | "phpunit/phpunit": "3.7.*" 1039 | }, 1040 | "type": "library", 1041 | "autoload": { 1042 | "classmap": [ 1043 | "src" 1044 | ] 1045 | }, 1046 | "notification-url": "https://packagist.org/downloads/", 1047 | "include-path": [ 1048 | "src" 1049 | ], 1050 | "license": [ 1051 | "BSD" 1052 | ], 1053 | "authors": [ 1054 | { 1055 | "name": "Mike Lively", 1056 | "email": "m@digitalsandwich.com" 1057 | } 1058 | ], 1059 | "description": "The Phake mock testing library", 1060 | "homepage": "https://github.com/mlively/Phake", 1061 | "keywords": [ 1062 | "mock", 1063 | "testing" 1064 | ], 1065 | "time": "2015-01-27T15:48:39+00:00" 1066 | }, 1067 | { 1068 | "name": "phpdocumentor/reflection-docblock", 1069 | "version": "2.0.5", 1070 | "source": { 1071 | "type": "git", 1072 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 1073 | "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b" 1074 | }, 1075 | "dist": { 1076 | "type": "zip", 1077 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e6a969a640b00d8daa3c66518b0405fb41ae0c4b", 1078 | "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b", 1079 | "shasum": "" 1080 | }, 1081 | "require": { 1082 | "php": ">=5.3.3" 1083 | }, 1084 | "require-dev": { 1085 | "phpunit/phpunit": "~4.0" 1086 | }, 1087 | "suggest": { 1088 | "dflydev/markdown": "~1.0", 1089 | "erusev/parsedown": "~1.0" 1090 | }, 1091 | "type": "library", 1092 | "extra": { 1093 | "branch-alias": { 1094 | "dev-master": "2.0.x-dev" 1095 | } 1096 | }, 1097 | "autoload": { 1098 | "psr-0": { 1099 | "phpDocumentor": [ 1100 | "src/" 1101 | ] 1102 | } 1103 | }, 1104 | "notification-url": "https://packagist.org/downloads/", 1105 | "license": [ 1106 | "MIT" 1107 | ], 1108 | "authors": [ 1109 | { 1110 | "name": "Mike van Riel", 1111 | "email": "mike.vanriel@naenius.com" 1112 | } 1113 | ], 1114 | "time": "2016-01-25T08:17:30+00:00" 1115 | }, 1116 | { 1117 | "name": "phpspec/prophecy", 1118 | "version": "1.8.0", 1119 | "source": { 1120 | "type": "git", 1121 | "url": "https://github.com/phpspec/prophecy.git", 1122 | "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" 1123 | }, 1124 | "dist": { 1125 | "type": "zip", 1126 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", 1127 | "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", 1128 | "shasum": "" 1129 | }, 1130 | "require": { 1131 | "doctrine/instantiator": "^1.0.2", 1132 | "php": "^5.3|^7.0", 1133 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", 1134 | "sebastian/comparator": "^1.1|^2.0|^3.0", 1135 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 1136 | }, 1137 | "require-dev": { 1138 | "phpspec/phpspec": "^2.5|^3.2", 1139 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" 1140 | }, 1141 | "type": "library", 1142 | "extra": { 1143 | "branch-alias": { 1144 | "dev-master": "1.8.x-dev" 1145 | } 1146 | }, 1147 | "autoload": { 1148 | "psr-0": { 1149 | "Prophecy\\": "src/" 1150 | } 1151 | }, 1152 | "notification-url": "https://packagist.org/downloads/", 1153 | "license": [ 1154 | "MIT" 1155 | ], 1156 | "authors": [ 1157 | { 1158 | "name": "Konstantin Kudryashov", 1159 | "email": "ever.zet@gmail.com", 1160 | "homepage": "http://everzet.com" 1161 | }, 1162 | { 1163 | "name": "Marcello Duarte", 1164 | "email": "marcello.duarte@gmail.com" 1165 | } 1166 | ], 1167 | "description": "Highly opinionated mocking framework for PHP 5.3+", 1168 | "homepage": "https://github.com/phpspec/prophecy", 1169 | "keywords": [ 1170 | "Double", 1171 | "Dummy", 1172 | "fake", 1173 | "mock", 1174 | "spy", 1175 | "stub" 1176 | ], 1177 | "time": "2018-08-05T17:53:17+00:00" 1178 | }, 1179 | { 1180 | "name": "phpunit/php-code-coverage", 1181 | "version": "2.2.4", 1182 | "source": { 1183 | "type": "git", 1184 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1185 | "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" 1186 | }, 1187 | "dist": { 1188 | "type": "zip", 1189 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", 1190 | "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", 1191 | "shasum": "" 1192 | }, 1193 | "require": { 1194 | "php": ">=5.3.3", 1195 | "phpunit/php-file-iterator": "~1.3", 1196 | "phpunit/php-text-template": "~1.2", 1197 | "phpunit/php-token-stream": "~1.3", 1198 | "sebastian/environment": "^1.3.2", 1199 | "sebastian/version": "~1.0" 1200 | }, 1201 | "require-dev": { 1202 | "ext-xdebug": ">=2.1.4", 1203 | "phpunit/phpunit": "~4" 1204 | }, 1205 | "suggest": { 1206 | "ext-dom": "*", 1207 | "ext-xdebug": ">=2.2.1", 1208 | "ext-xmlwriter": "*" 1209 | }, 1210 | "type": "library", 1211 | "extra": { 1212 | "branch-alias": { 1213 | "dev-master": "2.2.x-dev" 1214 | } 1215 | }, 1216 | "autoload": { 1217 | "classmap": [ 1218 | "src/" 1219 | ] 1220 | }, 1221 | "notification-url": "https://packagist.org/downloads/", 1222 | "license": [ 1223 | "BSD-3-Clause" 1224 | ], 1225 | "authors": [ 1226 | { 1227 | "name": "Sebastian Bergmann", 1228 | "email": "sb@sebastian-bergmann.de", 1229 | "role": "lead" 1230 | } 1231 | ], 1232 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1233 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1234 | "keywords": [ 1235 | "coverage", 1236 | "testing", 1237 | "xunit" 1238 | ], 1239 | "time": "2015-10-06T15:47:00+00:00" 1240 | }, 1241 | { 1242 | "name": "phpunit/php-file-iterator", 1243 | "version": "1.4.5", 1244 | "source": { 1245 | "type": "git", 1246 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1247 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" 1248 | }, 1249 | "dist": { 1250 | "type": "zip", 1251 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", 1252 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", 1253 | "shasum": "" 1254 | }, 1255 | "require": { 1256 | "php": ">=5.3.3" 1257 | }, 1258 | "type": "library", 1259 | "extra": { 1260 | "branch-alias": { 1261 | "dev-master": "1.4.x-dev" 1262 | } 1263 | }, 1264 | "autoload": { 1265 | "classmap": [ 1266 | "src/" 1267 | ] 1268 | }, 1269 | "notification-url": "https://packagist.org/downloads/", 1270 | "license": [ 1271 | "BSD-3-Clause" 1272 | ], 1273 | "authors": [ 1274 | { 1275 | "name": "Sebastian Bergmann", 1276 | "email": "sb@sebastian-bergmann.de", 1277 | "role": "lead" 1278 | } 1279 | ], 1280 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1281 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1282 | "keywords": [ 1283 | "filesystem", 1284 | "iterator" 1285 | ], 1286 | "time": "2017-11-27T13:52:08+00:00" 1287 | }, 1288 | { 1289 | "name": "phpunit/php-text-template", 1290 | "version": "1.2.1", 1291 | "source": { 1292 | "type": "git", 1293 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1294 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 1295 | }, 1296 | "dist": { 1297 | "type": "zip", 1298 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1299 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1300 | "shasum": "" 1301 | }, 1302 | "require": { 1303 | "php": ">=5.3.3" 1304 | }, 1305 | "type": "library", 1306 | "autoload": { 1307 | "classmap": [ 1308 | "src/" 1309 | ] 1310 | }, 1311 | "notification-url": "https://packagist.org/downloads/", 1312 | "license": [ 1313 | "BSD-3-Clause" 1314 | ], 1315 | "authors": [ 1316 | { 1317 | "name": "Sebastian Bergmann", 1318 | "email": "sebastian@phpunit.de", 1319 | "role": "lead" 1320 | } 1321 | ], 1322 | "description": "Simple template engine.", 1323 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1324 | "keywords": [ 1325 | "template" 1326 | ], 1327 | "time": "2015-06-21T13:50:34+00:00" 1328 | }, 1329 | { 1330 | "name": "phpunit/php-timer", 1331 | "version": "1.0.9", 1332 | "source": { 1333 | "type": "git", 1334 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1335 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" 1336 | }, 1337 | "dist": { 1338 | "type": "zip", 1339 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 1340 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 1341 | "shasum": "" 1342 | }, 1343 | "require": { 1344 | "php": "^5.3.3 || ^7.0" 1345 | }, 1346 | "require-dev": { 1347 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 1348 | }, 1349 | "type": "library", 1350 | "extra": { 1351 | "branch-alias": { 1352 | "dev-master": "1.0-dev" 1353 | } 1354 | }, 1355 | "autoload": { 1356 | "classmap": [ 1357 | "src/" 1358 | ] 1359 | }, 1360 | "notification-url": "https://packagist.org/downloads/", 1361 | "license": [ 1362 | "BSD-3-Clause" 1363 | ], 1364 | "authors": [ 1365 | { 1366 | "name": "Sebastian Bergmann", 1367 | "email": "sb@sebastian-bergmann.de", 1368 | "role": "lead" 1369 | } 1370 | ], 1371 | "description": "Utility class for timing", 1372 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1373 | "keywords": [ 1374 | "timer" 1375 | ], 1376 | "time": "2017-02-26T11:10:40+00:00" 1377 | }, 1378 | { 1379 | "name": "phpunit/php-token-stream", 1380 | "version": "1.4.12", 1381 | "source": { 1382 | "type": "git", 1383 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1384 | "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" 1385 | }, 1386 | "dist": { 1387 | "type": "zip", 1388 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", 1389 | "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", 1390 | "shasum": "" 1391 | }, 1392 | "require": { 1393 | "ext-tokenizer": "*", 1394 | "php": ">=5.3.3" 1395 | }, 1396 | "require-dev": { 1397 | "phpunit/phpunit": "~4.2" 1398 | }, 1399 | "type": "library", 1400 | "extra": { 1401 | "branch-alias": { 1402 | "dev-master": "1.4-dev" 1403 | } 1404 | }, 1405 | "autoload": { 1406 | "classmap": [ 1407 | "src/" 1408 | ] 1409 | }, 1410 | "notification-url": "https://packagist.org/downloads/", 1411 | "license": [ 1412 | "BSD-3-Clause" 1413 | ], 1414 | "authors": [ 1415 | { 1416 | "name": "Sebastian Bergmann", 1417 | "email": "sebastian@phpunit.de" 1418 | } 1419 | ], 1420 | "description": "Wrapper around PHP's tokenizer extension.", 1421 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1422 | "keywords": [ 1423 | "tokenizer" 1424 | ], 1425 | "time": "2017-12-04T08:55:13+00:00" 1426 | }, 1427 | { 1428 | "name": "phpunit/phpunit", 1429 | "version": "4.8.36", 1430 | "source": { 1431 | "type": "git", 1432 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1433 | "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" 1434 | }, 1435 | "dist": { 1436 | "type": "zip", 1437 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", 1438 | "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", 1439 | "shasum": "" 1440 | }, 1441 | "require": { 1442 | "ext-dom": "*", 1443 | "ext-json": "*", 1444 | "ext-pcre": "*", 1445 | "ext-reflection": "*", 1446 | "ext-spl": "*", 1447 | "php": ">=5.3.3", 1448 | "phpspec/prophecy": "^1.3.1", 1449 | "phpunit/php-code-coverage": "~2.1", 1450 | "phpunit/php-file-iterator": "~1.4", 1451 | "phpunit/php-text-template": "~1.2", 1452 | "phpunit/php-timer": "^1.0.6", 1453 | "phpunit/phpunit-mock-objects": "~2.3", 1454 | "sebastian/comparator": "~1.2.2", 1455 | "sebastian/diff": "~1.2", 1456 | "sebastian/environment": "~1.3", 1457 | "sebastian/exporter": "~1.2", 1458 | "sebastian/global-state": "~1.0", 1459 | "sebastian/version": "~1.0", 1460 | "symfony/yaml": "~2.1|~3.0" 1461 | }, 1462 | "suggest": { 1463 | "phpunit/php-invoker": "~1.1" 1464 | }, 1465 | "bin": [ 1466 | "phpunit" 1467 | ], 1468 | "type": "library", 1469 | "extra": { 1470 | "branch-alias": { 1471 | "dev-master": "4.8.x-dev" 1472 | } 1473 | }, 1474 | "autoload": { 1475 | "classmap": [ 1476 | "src/" 1477 | ] 1478 | }, 1479 | "notification-url": "https://packagist.org/downloads/", 1480 | "license": [ 1481 | "BSD-3-Clause" 1482 | ], 1483 | "authors": [ 1484 | { 1485 | "name": "Sebastian Bergmann", 1486 | "email": "sebastian@phpunit.de", 1487 | "role": "lead" 1488 | } 1489 | ], 1490 | "description": "The PHP Unit Testing framework.", 1491 | "homepage": "https://phpunit.de/", 1492 | "keywords": [ 1493 | "phpunit", 1494 | "testing", 1495 | "xunit" 1496 | ], 1497 | "time": "2017-06-21T08:07:12+00:00" 1498 | }, 1499 | { 1500 | "name": "phpunit/phpunit-mock-objects", 1501 | "version": "2.3.8", 1502 | "source": { 1503 | "type": "git", 1504 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 1505 | "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" 1506 | }, 1507 | "dist": { 1508 | "type": "zip", 1509 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", 1510 | "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", 1511 | "shasum": "" 1512 | }, 1513 | "require": { 1514 | "doctrine/instantiator": "^1.0.2", 1515 | "php": ">=5.3.3", 1516 | "phpunit/php-text-template": "~1.2", 1517 | "sebastian/exporter": "~1.2" 1518 | }, 1519 | "require-dev": { 1520 | "phpunit/phpunit": "~4.4" 1521 | }, 1522 | "suggest": { 1523 | "ext-soap": "*" 1524 | }, 1525 | "type": "library", 1526 | "extra": { 1527 | "branch-alias": { 1528 | "dev-master": "2.3.x-dev" 1529 | } 1530 | }, 1531 | "autoload": { 1532 | "classmap": [ 1533 | "src/" 1534 | ] 1535 | }, 1536 | "notification-url": "https://packagist.org/downloads/", 1537 | "license": [ 1538 | "BSD-3-Clause" 1539 | ], 1540 | "authors": [ 1541 | { 1542 | "name": "Sebastian Bergmann", 1543 | "email": "sb@sebastian-bergmann.de", 1544 | "role": "lead" 1545 | } 1546 | ], 1547 | "description": "Mock Object library for PHPUnit", 1548 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 1549 | "keywords": [ 1550 | "mock", 1551 | "xunit" 1552 | ], 1553 | "abandoned": true, 1554 | "time": "2015-10-02T06:51:40+00:00" 1555 | }, 1556 | { 1557 | "name": "sebastian/comparator", 1558 | "version": "1.2.4", 1559 | "source": { 1560 | "type": "git", 1561 | "url": "https://github.com/sebastianbergmann/comparator.git", 1562 | "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" 1563 | }, 1564 | "dist": { 1565 | "type": "zip", 1566 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", 1567 | "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", 1568 | "shasum": "" 1569 | }, 1570 | "require": { 1571 | "php": ">=5.3.3", 1572 | "sebastian/diff": "~1.2", 1573 | "sebastian/exporter": "~1.2 || ~2.0" 1574 | }, 1575 | "require-dev": { 1576 | "phpunit/phpunit": "~4.4" 1577 | }, 1578 | "type": "library", 1579 | "extra": { 1580 | "branch-alias": { 1581 | "dev-master": "1.2.x-dev" 1582 | } 1583 | }, 1584 | "autoload": { 1585 | "classmap": [ 1586 | "src/" 1587 | ] 1588 | }, 1589 | "notification-url": "https://packagist.org/downloads/", 1590 | "license": [ 1591 | "BSD-3-Clause" 1592 | ], 1593 | "authors": [ 1594 | { 1595 | "name": "Jeff Welch", 1596 | "email": "whatthejeff@gmail.com" 1597 | }, 1598 | { 1599 | "name": "Volker Dusch", 1600 | "email": "github@wallbash.com" 1601 | }, 1602 | { 1603 | "name": "Bernhard Schussek", 1604 | "email": "bschussek@2bepublished.at" 1605 | }, 1606 | { 1607 | "name": "Sebastian Bergmann", 1608 | "email": "sebastian@phpunit.de" 1609 | } 1610 | ], 1611 | "description": "Provides the functionality to compare PHP values for equality", 1612 | "homepage": "http://www.github.com/sebastianbergmann/comparator", 1613 | "keywords": [ 1614 | "comparator", 1615 | "compare", 1616 | "equality" 1617 | ], 1618 | "time": "2017-01-29T09:50:25+00:00" 1619 | }, 1620 | { 1621 | "name": "sebastian/diff", 1622 | "version": "1.4.3", 1623 | "source": { 1624 | "type": "git", 1625 | "url": "https://github.com/sebastianbergmann/diff.git", 1626 | "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" 1627 | }, 1628 | "dist": { 1629 | "type": "zip", 1630 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", 1631 | "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", 1632 | "shasum": "" 1633 | }, 1634 | "require": { 1635 | "php": "^5.3.3 || ^7.0" 1636 | }, 1637 | "require-dev": { 1638 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 1639 | }, 1640 | "type": "library", 1641 | "extra": { 1642 | "branch-alias": { 1643 | "dev-master": "1.4-dev" 1644 | } 1645 | }, 1646 | "autoload": { 1647 | "classmap": [ 1648 | "src/" 1649 | ] 1650 | }, 1651 | "notification-url": "https://packagist.org/downloads/", 1652 | "license": [ 1653 | "BSD-3-Clause" 1654 | ], 1655 | "authors": [ 1656 | { 1657 | "name": "Kore Nordmann", 1658 | "email": "mail@kore-nordmann.de" 1659 | }, 1660 | { 1661 | "name": "Sebastian Bergmann", 1662 | "email": "sebastian@phpunit.de" 1663 | } 1664 | ], 1665 | "description": "Diff implementation", 1666 | "homepage": "https://github.com/sebastianbergmann/diff", 1667 | "keywords": [ 1668 | "diff" 1669 | ], 1670 | "time": "2017-05-22T07:24:03+00:00" 1671 | }, 1672 | { 1673 | "name": "sebastian/environment", 1674 | "version": "1.3.8", 1675 | "source": { 1676 | "type": "git", 1677 | "url": "https://github.com/sebastianbergmann/environment.git", 1678 | "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" 1679 | }, 1680 | "dist": { 1681 | "type": "zip", 1682 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", 1683 | "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", 1684 | "shasum": "" 1685 | }, 1686 | "require": { 1687 | "php": "^5.3.3 || ^7.0" 1688 | }, 1689 | "require-dev": { 1690 | "phpunit/phpunit": "^4.8 || ^5.0" 1691 | }, 1692 | "type": "library", 1693 | "extra": { 1694 | "branch-alias": { 1695 | "dev-master": "1.3.x-dev" 1696 | } 1697 | }, 1698 | "autoload": { 1699 | "classmap": [ 1700 | "src/" 1701 | ] 1702 | }, 1703 | "notification-url": "https://packagist.org/downloads/", 1704 | "license": [ 1705 | "BSD-3-Clause" 1706 | ], 1707 | "authors": [ 1708 | { 1709 | "name": "Sebastian Bergmann", 1710 | "email": "sebastian@phpunit.de" 1711 | } 1712 | ], 1713 | "description": "Provides functionality to handle HHVM/PHP environments", 1714 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1715 | "keywords": [ 1716 | "Xdebug", 1717 | "environment", 1718 | "hhvm" 1719 | ], 1720 | "time": "2016-08-18T05:49:44+00:00" 1721 | }, 1722 | { 1723 | "name": "sebastian/exporter", 1724 | "version": "1.2.2", 1725 | "source": { 1726 | "type": "git", 1727 | "url": "https://github.com/sebastianbergmann/exporter.git", 1728 | "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" 1729 | }, 1730 | "dist": { 1731 | "type": "zip", 1732 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", 1733 | "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", 1734 | "shasum": "" 1735 | }, 1736 | "require": { 1737 | "php": ">=5.3.3", 1738 | "sebastian/recursion-context": "~1.0" 1739 | }, 1740 | "require-dev": { 1741 | "ext-mbstring": "*", 1742 | "phpunit/phpunit": "~4.4" 1743 | }, 1744 | "type": "library", 1745 | "extra": { 1746 | "branch-alias": { 1747 | "dev-master": "1.3.x-dev" 1748 | } 1749 | }, 1750 | "autoload": { 1751 | "classmap": [ 1752 | "src/" 1753 | ] 1754 | }, 1755 | "notification-url": "https://packagist.org/downloads/", 1756 | "license": [ 1757 | "BSD-3-Clause" 1758 | ], 1759 | "authors": [ 1760 | { 1761 | "name": "Jeff Welch", 1762 | "email": "whatthejeff@gmail.com" 1763 | }, 1764 | { 1765 | "name": "Volker Dusch", 1766 | "email": "github@wallbash.com" 1767 | }, 1768 | { 1769 | "name": "Bernhard Schussek", 1770 | "email": "bschussek@2bepublished.at" 1771 | }, 1772 | { 1773 | "name": "Sebastian Bergmann", 1774 | "email": "sebastian@phpunit.de" 1775 | }, 1776 | { 1777 | "name": "Adam Harvey", 1778 | "email": "aharvey@php.net" 1779 | } 1780 | ], 1781 | "description": "Provides the functionality to export PHP variables for visualization", 1782 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1783 | "keywords": [ 1784 | "export", 1785 | "exporter" 1786 | ], 1787 | "time": "2016-06-17T09:04:28+00:00" 1788 | }, 1789 | { 1790 | "name": "sebastian/global-state", 1791 | "version": "1.1.1", 1792 | "source": { 1793 | "type": "git", 1794 | "url": "https://github.com/sebastianbergmann/global-state.git", 1795 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" 1796 | }, 1797 | "dist": { 1798 | "type": "zip", 1799 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", 1800 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", 1801 | "shasum": "" 1802 | }, 1803 | "require": { 1804 | "php": ">=5.3.3" 1805 | }, 1806 | "require-dev": { 1807 | "phpunit/phpunit": "~4.2" 1808 | }, 1809 | "suggest": { 1810 | "ext-uopz": "*" 1811 | }, 1812 | "type": "library", 1813 | "extra": { 1814 | "branch-alias": { 1815 | "dev-master": "1.0-dev" 1816 | } 1817 | }, 1818 | "autoload": { 1819 | "classmap": [ 1820 | "src/" 1821 | ] 1822 | }, 1823 | "notification-url": "https://packagist.org/downloads/", 1824 | "license": [ 1825 | "BSD-3-Clause" 1826 | ], 1827 | "authors": [ 1828 | { 1829 | "name": "Sebastian Bergmann", 1830 | "email": "sebastian@phpunit.de" 1831 | } 1832 | ], 1833 | "description": "Snapshotting of global state", 1834 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1835 | "keywords": [ 1836 | "global state" 1837 | ], 1838 | "time": "2015-10-12T03:26:01+00:00" 1839 | }, 1840 | { 1841 | "name": "sebastian/recursion-context", 1842 | "version": "1.0.5", 1843 | "source": { 1844 | "type": "git", 1845 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1846 | "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" 1847 | }, 1848 | "dist": { 1849 | "type": "zip", 1850 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", 1851 | "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", 1852 | "shasum": "" 1853 | }, 1854 | "require": { 1855 | "php": ">=5.3.3" 1856 | }, 1857 | "require-dev": { 1858 | "phpunit/phpunit": "~4.4" 1859 | }, 1860 | "type": "library", 1861 | "extra": { 1862 | "branch-alias": { 1863 | "dev-master": "1.0.x-dev" 1864 | } 1865 | }, 1866 | "autoload": { 1867 | "classmap": [ 1868 | "src/" 1869 | ] 1870 | }, 1871 | "notification-url": "https://packagist.org/downloads/", 1872 | "license": [ 1873 | "BSD-3-Clause" 1874 | ], 1875 | "authors": [ 1876 | { 1877 | "name": "Jeff Welch", 1878 | "email": "whatthejeff@gmail.com" 1879 | }, 1880 | { 1881 | "name": "Sebastian Bergmann", 1882 | "email": "sebastian@phpunit.de" 1883 | }, 1884 | { 1885 | "name": "Adam Harvey", 1886 | "email": "aharvey@php.net" 1887 | } 1888 | ], 1889 | "description": "Provides functionality to recursively process PHP variables", 1890 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1891 | "time": "2016-10-03T07:41:43+00:00" 1892 | }, 1893 | { 1894 | "name": "sebastian/version", 1895 | "version": "1.0.6", 1896 | "source": { 1897 | "type": "git", 1898 | "url": "https://github.com/sebastianbergmann/version.git", 1899 | "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" 1900 | }, 1901 | "dist": { 1902 | "type": "zip", 1903 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", 1904 | "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", 1905 | "shasum": "" 1906 | }, 1907 | "type": "library", 1908 | "autoload": { 1909 | "classmap": [ 1910 | "src/" 1911 | ] 1912 | }, 1913 | "notification-url": "https://packagist.org/downloads/", 1914 | "license": [ 1915 | "BSD-3-Clause" 1916 | ], 1917 | "authors": [ 1918 | { 1919 | "name": "Sebastian Bergmann", 1920 | "email": "sebastian@phpunit.de", 1921 | "role": "lead" 1922 | } 1923 | ], 1924 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1925 | "homepage": "https://github.com/sebastianbergmann/version", 1926 | "time": "2015-06-21T13:59:46+00:00" 1927 | }, 1928 | { 1929 | "name": "squizlabs/php_codesniffer", 1930 | "version": "3.5.4", 1931 | "source": { 1932 | "type": "git", 1933 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", 1934 | "reference": "dceec07328401de6211037abbb18bda423677e26" 1935 | }, 1936 | "dist": { 1937 | "type": "zip", 1938 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dceec07328401de6211037abbb18bda423677e26", 1939 | "reference": "dceec07328401de6211037abbb18bda423677e26", 1940 | "shasum": "" 1941 | }, 1942 | "require": { 1943 | "ext-simplexml": "*", 1944 | "ext-tokenizer": "*", 1945 | "ext-xmlwriter": "*", 1946 | "php": ">=5.4.0" 1947 | }, 1948 | "require-dev": { 1949 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" 1950 | }, 1951 | "bin": [ 1952 | "bin/phpcs", 1953 | "bin/phpcbf" 1954 | ], 1955 | "type": "library", 1956 | "extra": { 1957 | "branch-alias": { 1958 | "dev-master": "3.x-dev" 1959 | } 1960 | }, 1961 | "notification-url": "https://packagist.org/downloads/", 1962 | "license": [ 1963 | "BSD-3-Clause" 1964 | ], 1965 | "authors": [ 1966 | { 1967 | "name": "Greg Sherwood", 1968 | "role": "lead" 1969 | } 1970 | ], 1971 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 1972 | "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", 1973 | "keywords": [ 1974 | "phpcs", 1975 | "standards" 1976 | ], 1977 | "time": "2020-01-30T22:20:29+00:00" 1978 | }, 1979 | { 1980 | "name": "symfony/polyfill-ctype", 1981 | "version": "v1.10.0", 1982 | "source": { 1983 | "type": "git", 1984 | "url": "https://github.com/symfony/polyfill-ctype.git", 1985 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" 1986 | }, 1987 | "dist": { 1988 | "type": "zip", 1989 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", 1990 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", 1991 | "shasum": "" 1992 | }, 1993 | "require": { 1994 | "php": ">=5.3.3" 1995 | }, 1996 | "suggest": { 1997 | "ext-ctype": "For best performance" 1998 | }, 1999 | "type": "library", 2000 | "extra": { 2001 | "branch-alias": { 2002 | "dev-master": "1.9-dev" 2003 | } 2004 | }, 2005 | "autoload": { 2006 | "psr-4": { 2007 | "Symfony\\Polyfill\\Ctype\\": "" 2008 | }, 2009 | "files": [ 2010 | "bootstrap.php" 2011 | ] 2012 | }, 2013 | "notification-url": "https://packagist.org/downloads/", 2014 | "license": [ 2015 | "MIT" 2016 | ], 2017 | "authors": [ 2018 | { 2019 | "name": "Symfony Community", 2020 | "homepage": "https://symfony.com/contributors" 2021 | }, 2022 | { 2023 | "name": "Gert de Pagter", 2024 | "email": "BackEndTea@gmail.com" 2025 | } 2026 | ], 2027 | "description": "Symfony polyfill for ctype functions", 2028 | "homepage": "https://symfony.com", 2029 | "keywords": [ 2030 | "compatibility", 2031 | "ctype", 2032 | "polyfill", 2033 | "portable" 2034 | ], 2035 | "time": "2018-08-06T14:22:27+00:00" 2036 | }, 2037 | { 2038 | "name": "symfony/yaml", 2039 | "version": "v2.8.49", 2040 | "source": { 2041 | "type": "git", 2042 | "url": "https://github.com/symfony/yaml.git", 2043 | "reference": "02c1859112aa779d9ab394ae4f3381911d84052b" 2044 | }, 2045 | "dist": { 2046 | "type": "zip", 2047 | "url": "https://api.github.com/repos/symfony/yaml/zipball/02c1859112aa779d9ab394ae4f3381911d84052b", 2048 | "reference": "02c1859112aa779d9ab394ae4f3381911d84052b", 2049 | "shasum": "" 2050 | }, 2051 | "require": { 2052 | "php": ">=5.3.9", 2053 | "symfony/polyfill-ctype": "~1.8" 2054 | }, 2055 | "type": "library", 2056 | "extra": { 2057 | "branch-alias": { 2058 | "dev-master": "2.8-dev" 2059 | } 2060 | }, 2061 | "autoload": { 2062 | "psr-4": { 2063 | "Symfony\\Component\\Yaml\\": "" 2064 | }, 2065 | "exclude-from-classmap": [ 2066 | "/Tests/" 2067 | ] 2068 | }, 2069 | "notification-url": "https://packagist.org/downloads/", 2070 | "license": [ 2071 | "MIT" 2072 | ], 2073 | "authors": [ 2074 | { 2075 | "name": "Fabien Potencier", 2076 | "email": "fabien@symfony.com" 2077 | }, 2078 | { 2079 | "name": "Symfony Community", 2080 | "homepage": "https://symfony.com/contributors" 2081 | } 2082 | ], 2083 | "description": "Symfony Yaml Component", 2084 | "homepage": "https://symfony.com", 2085 | "time": "2018-11-11T11:18:13+00:00" 2086 | }, 2087 | { 2088 | "name": "vectorface/dunit", 2089 | "version": "v2.1.0", 2090 | "source": { 2091 | "type": "git", 2092 | "url": "https://github.com/Vectorface/dunit.git", 2093 | "reference": "3f04c7a8bef5ff100666e92db96e93f80a6640bf" 2094 | }, 2095 | "dist": { 2096 | "type": "zip", 2097 | "url": "https://api.github.com/repos/Vectorface/dunit/zipball/3f04c7a8bef5ff100666e92db96e93f80a6640bf", 2098 | "reference": "3f04c7a8bef5ff100666e92db96e93f80a6640bf", 2099 | "shasum": "" 2100 | }, 2101 | "require-dev": { 2102 | "phpunit/phpunit": "~4.3", 2103 | "symfony/console": "~2.5" 2104 | }, 2105 | "bin": [ 2106 | "bin/dunit" 2107 | ], 2108 | "type": "library", 2109 | "autoload": { 2110 | "psr-4": { 2111 | "Vectorface\\Dunit\\": "src" 2112 | } 2113 | }, 2114 | "notification-url": "https://packagist.org/downloads/", 2115 | "license": [ 2116 | "MIT" 2117 | ], 2118 | "authors": [ 2119 | { 2120 | "name": "Daniel Bruce", 2121 | "email": "dbruce@vectorface.com", 2122 | "role": "Developer" 2123 | }, 2124 | { 2125 | "name": "Cory Darby", 2126 | "email": "ckdarby@vectorface.com", 2127 | "role": "Developer" 2128 | } 2129 | ], 2130 | "description": "Test code against multiple versions of PHP with the help of docker", 2131 | "homepage": "https://github.com/Vectorface/dunit", 2132 | "keywords": [ 2133 | "docker", 2134 | "php", 2135 | "phpunit", 2136 | "testing" 2137 | ], 2138 | "time": "2015-03-31T19:30:02+00:00" 2139 | } 2140 | ], 2141 | "aliases": [], 2142 | "minimum-stability": "stable", 2143 | "stability-flags": [], 2144 | "prefer-stable": false, 2145 | "prefer-lowest": false, 2146 | "platform": { 2147 | "php": "^5.4|^7.0" 2148 | }, 2149 | "platform-dev": [], 2150 | "platform-overrides": { 2151 | "php": "5.4" 2152 | } 2153 | } 2154 | -------------------------------------------------------------------------------- /src/FileCacheStream.php: -------------------------------------------------------------------------------- 1 | filesystem = Filesystem::create($options['loop']); 45 | } 46 | 47 | public function open() 48 | { 49 | $this->opening = true; 50 | $file = $this->filesystem->file($this->getRandomFilename()); 51 | return $file->exists()->then(function () { 52 | return $this->open(); 53 | }, function () use ($file) { 54 | return $file->create()->open('cw')->then(function ($stream) { 55 | $this->open = true; 56 | $this->opening = false; 57 | $this->stream = $stream; 58 | }); 59 | }); 60 | } 61 | 62 | protected function getRandomFilename() 63 | { 64 | return sys_get_temp_dir() . DIRECTORY_SEPARATOR . uniqid('wyrihaximus-react-guzzle-ring-', true); 65 | } 66 | 67 | public function isOpen() 68 | { 69 | return $this->open; 70 | } 71 | 72 | public function isOpening() 73 | { 74 | return $this->opening; 75 | } 76 | 77 | public function write($data) 78 | { 79 | $this->stream->write($data); 80 | } 81 | 82 | public function resume() 83 | { 84 | $this->stream->resume(); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/RequestFactory.php: -------------------------------------------------------------------------------- 1 | convertOptions($options); 52 | 53 | if (isset($options['delay'])) { 54 | $promise = \WyriHaximus\React\timedPromise($loop, $options['delay']); 55 | } 56 | if (!isset($promise)) { 57 | $promise = \WyriHaximus\React\futurePromise($loop); 58 | } 59 | 60 | return $promise->then(function () use ( 61 | $request, 62 | $options, 63 | $httpClient, 64 | $loop 65 | ) { 66 | $sender = $this->createSender($options, $httpClient, $loop); 67 | return (new Browser($loop, $sender)) 68 | ->withOptions($options) 69 | ->send($request)->then(function ($response) use ($loop, $options) { 70 | if (!isset($options['sink'])) { 71 | return \React\Promise\resolve($response); 72 | } 73 | 74 | return \React\Promise\resolve($this->sink($loop, $response, $options['sink'])); 75 | }); 76 | }); 77 | } 78 | 79 | protected function sink($loop, $response, $target) 80 | { 81 | $deferred = new Deferred(); 82 | $writeStream = fopen($target, 'w'); 83 | $saveToStream = new WritableResourceStream($writeStream, $loop); 84 | 85 | $saveToStream->on( 86 | 'end', 87 | function () use ($deferred, $response) { 88 | $deferred->resolve($response); 89 | } 90 | ); 91 | 92 | $body = $response->getBody(); 93 | if ($body instanceof ReadableStreamInterface) { 94 | $body->pipe($saveToStream); 95 | } else { 96 | $saveToStream->end($body->getContents()); 97 | } 98 | 99 | return $deferred->promise(); 100 | } 101 | 102 | /** 103 | * @param array $options 104 | * @param HttpClient $httpClient 105 | * @param LoopInterface $loop 106 | * @return Sender 107 | */ 108 | protected function createSender(array $options, HttpClient $httpClient, LoopInterface $loop) 109 | { 110 | $connector = $this->getProperty($httpClient, 'connector'); 111 | 112 | if (isset($options['proxy'])) { 113 | switch (parse_url($options['proxy'], PHP_URL_SCHEME)) { 114 | case 'http': 115 | $connector = new Connector( 116 | $loop, 117 | [ 118 | 'tcp' => new HttpProxyClient( 119 | $options['proxy'], 120 | $connector 121 | ), 122 | ] 123 | ); 124 | break; 125 | case 'socks': 126 | case 'socks4': 127 | case 'socks4a': 128 | case 'socks5': 129 | $connector = new Connector( 130 | $loop, 131 | [ 132 | 'tcp' => new SocksProxyClient( 133 | $options['proxy'], 134 | $connector 135 | ), 136 | ] 137 | ); 138 | break; 139 | } 140 | } 141 | 142 | if (isset($options['connect_timeout'])) { 143 | $connector = new TimeoutConnector($connector, $options['connect_timeout'], $loop); 144 | } 145 | 146 | return $connector; 147 | } 148 | 149 | /** 150 | * @param array $options 151 | * @return array 152 | */ 153 | protected function convertOptions(array $options) 154 | { 155 | // provides backwards compatibility for Guzzle 3-5. 156 | if (isset($options['client'])) { 157 | $options = array_merge($options, $options['client']); 158 | unset($options['client']); 159 | } 160 | 161 | // provides for backwards compatibility for Guzzle 3-5 162 | if (isset($options['save_to'])) { 163 | $options['sink'] = $options['save_to']; 164 | unset($options['save_to']); 165 | } 166 | 167 | if (isset($options['delay'])) { 168 | $options['delay'] = $options['delay']/1000; 169 | } 170 | 171 | if (isset($options['allow_redirects'])) { 172 | $this->convertRedirectOption($options); 173 | } 174 | 175 | return $options; 176 | } 177 | 178 | protected function convertRedirectOption(&$options) 179 | { 180 | $option = $options['allow_redirects']; 181 | unset($options['allow_redirects']); 182 | 183 | if (is_bool($option)) { 184 | $options['followRedirects'] = $option; 185 | return; 186 | } 187 | 188 | if (is_array($option)) { 189 | if (isset($option['max'])) { 190 | $options['maxRedirects'] = $option['max']; 191 | } 192 | $options['followRedirects'] = true; 193 | return; 194 | } 195 | } 196 | 197 | /** 198 | * @param object $object 199 | * @param string $desiredProperty 200 | * @return mixed 201 | */ 202 | protected function getProperty($object, $desiredProperty) 203 | { 204 | $reflection = new ReflectionObject($object); 205 | $property = $reflection->getProperty($desiredProperty); 206 | $property->setAccessible(true); 207 | return $property->getValue($object); 208 | } 209 | } 210 | -------------------------------------------------------------------------------- /src/Stream.php: -------------------------------------------------------------------------------- 1 | loop = $options['loop']; 34 | 35 | /*if (class_exists('React\Filesystem\Filesystem')) { 36 | $this->setUpFilesystemStream($options); 37 | return; 38 | }*/ 39 | 40 | $this->setUpNormalStream($options); 41 | } 42 | 43 | protected function setUpFilesystemStream(array $options) 44 | { 45 | $this->overflowStream = new FileCacheStream([ 46 | 'loop' => $this->loop, 47 | ]); 48 | 49 | $options['response']->on( 50 | 'data', 51 | function ($data) { 52 | if ($this->size >= static::OVERFLOW_LEVEL && $this->overflowStream->isOpen()) { 53 | return $this->overflowStream->write($data); 54 | } 55 | 56 | if ($this->size >= static::OVERFLOW_LEVEL && 57 | !$this->overflowStream->isOpen() && 58 | !$this->overflowStream->isOpening() 59 | ) { 60 | $this->overflowStream->open(); 61 | } 62 | 63 | $this->buffer .= $data; 64 | $this->size = strlen($this->buffer); 65 | } 66 | ); 67 | 68 | $options['request']->on( 69 | 'end', 70 | function () { 71 | $this->eof = true; 72 | } 73 | ); 74 | } 75 | 76 | protected function setUpNormalStream(array $options) 77 | { 78 | $options['response']->on( 79 | 'data', 80 | function ($data) { 81 | $this->buffer .= $data; 82 | $this->size = strlen($this->buffer); 83 | } 84 | ); 85 | 86 | $options['request']->on( 87 | 'end', 88 | function () { 89 | $this->eof = true; 90 | } 91 | ); 92 | } 93 | 94 | public function eof() 95 | { 96 | return $this->eof && $this->size === 0; 97 | } 98 | 99 | public function getSize() 100 | { 101 | return $this->size; 102 | } 103 | 104 | public function isReadable() 105 | { 106 | return true; 107 | } 108 | 109 | public function tell() 110 | { 111 | return false; 112 | } 113 | 114 | public function write($string) 115 | { 116 | return false; 117 | } 118 | 119 | public function rewind() 120 | { 121 | return false; 122 | } 123 | 124 | public function isWritable() 125 | { 126 | return false; 127 | } 128 | 129 | public function isSeekable() 130 | { 131 | return false; 132 | } 133 | 134 | public function seek($offset, $whence = SEEK_SET) 135 | { 136 | return false; 137 | } 138 | 139 | public function read($length) 140 | { 141 | $this->toTickOrNotToTick(); 142 | 143 | if (strlen($this->buffer) <= $length) { 144 | $buffer = $this->buffer; 145 | $this->buffer = ''; 146 | $this->size = 0; 147 | return $buffer; 148 | } 149 | 150 | $buffer = substr($this->buffer, 0, $length); 151 | $this->buffer = substr($this->buffer, $length); 152 | $this->size = strlen($this->buffer); 153 | return $buffer; 154 | } 155 | 156 | public function getContents($maxLength = -1) 157 | { 158 | $buffer = ''; 159 | while (!$this->eof()) { 160 | $buffer .= $this->read(1000000); 161 | } 162 | return $buffer; 163 | } 164 | 165 | public function __toString() 166 | { 167 | return $this->getContents(); 168 | } 169 | 170 | public function getMetadata($key = null) 171 | { 172 | $metadata = [ 173 | 'timed_out' => '', 174 | 'blocked' => false, 175 | 'eof' => $this->eof, 176 | 'unread_bytes' => '', 177 | 'stream_type' => '', 178 | 'wrapper_type' => '', 179 | 'wrapper_data' => '', 180 | 'mode' => '', 181 | 'seekable' => false, 182 | 'uri' => '', 183 | ]; 184 | 185 | if (!$key) { 186 | return $metadata; 187 | } 188 | 189 | return isset($metadata[$key]) ? $metadata[$key] : null; 190 | } 191 | 192 | public function attach($stream) 193 | { 194 | } 195 | 196 | public function detach() 197 | { 198 | } 199 | 200 | public function close() 201 | { 202 | } 203 | 204 | protected function toTickOrNotToTick() 205 | { 206 | if ($this->size === 0) { 207 | $this->loop->tick(); 208 | } 209 | } 210 | 211 | /** 212 | * For Guzzle v4 compatibility 213 | */ 214 | public function flush() 215 | { 216 | } 217 | } 218 | --------------------------------------------------------------------------------