├── .gitignore ├── README.md ├── phpunit.xml ├── src ├── Interfaces │ ├── Storage.php │ └── Config.php ├── Model │ ├── PatchExport.php │ └── Patch.php └── CablesApi.php ├── composer.json ├── test ├── bootstrap.php ├── TestConfig.php ├── CablesApiTest.php └── TestStorage.php └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | vendor/ 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cables_api_php_client 2 | 3 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | ./test/ 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/Interfaces/Storage.php: -------------------------------------------------------------------------------- 1 | =7.0.0", 17 | "guzzlehttp/guzzle": "^6.3" 18 | }, 19 | "autoload": { 20 | "psr-4": { 21 | "Cables\\Api\\": ["src/"] 22 | } 23 | }, 24 | "require-dev": { 25 | "phpunit/phpunit": "^6.5", 26 | "vipsoft/unzip": "1.2.1" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /test/bootstrap.php: -------------------------------------------------------------------------------- 1 | init(); 26 | -------------------------------------------------------------------------------- /test/TestConfig.php: -------------------------------------------------------------------------------- 1 | getBaseUrl() . '/api'; 28 | } 29 | 30 | /** 31 | * @return string 32 | */ 33 | public function getBaseUrl(): string { 34 | return 'https://cables.gl'; 35 | } 36 | 37 | /** 38 | * @return Storage 39 | */ 40 | public function getStorage() { 41 | return new TestStorage(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /test/CablesApiTest.php: -------------------------------------------------------------------------------- 1 | api->getMyPatches(); 22 | $this->assertNotEmpty($myPatches, "got no patches from cables backend"); 23 | foreach ($myPatches as $myPatch) { 24 | $this->assertNotNull($myPatch->getId()); 25 | } 26 | } 27 | 28 | public function testStorePatch() { 29 | $myPatches = $this->api->getMyPatches(); 30 | $patch = $myPatches[0]; 31 | $this->api->importPatch($patch); 32 | $this->assertTrue($this->api->isImported($patch), "could not find imported patch"); 33 | } 34 | 35 | public function testUpdatePatch() { 36 | $myPatches = $this->api->getMyPatches(); 37 | $patch = $myPatches[0]; 38 | $this->api->updatePatch($patch); 39 | $this->assertTrue($this->api->isImported($patch), "could not find updated patch"); 40 | } 41 | 42 | public function testDeletePatch() { 43 | 44 | $myPatches = $this->api->getMyPatches(); 45 | $patch = $myPatches[0]; 46 | $this->api->deletePatch($patch); 47 | $this->assertFalse($this->api->isImported($patch), "patchfiles still exists"); 48 | 49 | } 50 | 51 | protected function setUp() { 52 | $this->api = new CablesApi(new TestConfig()); 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/Model/PatchExport.php: -------------------------------------------------------------------------------- 1 | setId($id); 33 | $export->setSize($json->size); 34 | $export->setPath($json->path); 35 | $export->setLog($json->log); 36 | return $export; 37 | } 38 | 39 | /** 40 | * @param mixed $size 41 | */ 42 | private function setSize($size) { 43 | $this->size = $size; 44 | } 45 | 46 | /** 47 | * @param mixed $path 48 | */ 49 | private function setPath($path) { 50 | $this->path = $path; 51 | } 52 | 53 | /** 54 | * @param mixed $log 55 | */ 56 | private function setLog($log) { 57 | $this->log = $log; 58 | } 59 | 60 | /** 61 | * @return mixed 62 | */ 63 | public function getSize() { 64 | return $this->size; 65 | } 66 | 67 | /** 68 | * @return mixed 69 | */ 70 | public function getPath() { 71 | return $this->path; 72 | } 73 | 74 | /** 75 | * @return mixed 76 | */ 77 | public function getLog() { 78 | return $this->log; 79 | } 80 | 81 | /** 82 | * @return mixed 83 | */ 84 | public function getId() { 85 | return $this->id; 86 | } 87 | 88 | /** 89 | * @param mixed $id 90 | */ 91 | public function setId($id) { 92 | $this->id = $id; 93 | } 94 | 95 | 96 | } 97 | -------------------------------------------------------------------------------- /test/TestStorage.php: -------------------------------------------------------------------------------- 1 | getId() . '.zip'; 28 | 29 | file_put_contents($filename, $content); 30 | 31 | $destination_path = $this->getPatchDestinationPath($export->getId()); 32 | 33 | $unzipper = new Unzip(); 34 | $unzipper->extract($filename, $destination_path); 35 | 36 | } 37 | 38 | public function getPatchDestinationPath($patchId): string { 39 | $dir = sys_get_temp_dir() . '/public/patches/' . $patchId . '/'; 40 | return $dir; 41 | } 42 | 43 | public function isImported(Patch $patch): bool { 44 | $filename = $this->getPatchDestinationPath($patch->getId()) . '/cables.txt'; 45 | return file_exists($filename); 46 | } 47 | 48 | public function getPatchDirUrl(Patch $patch): string { 49 | return 'https://www.example.com/patches/' . $patch->getId() . '/'; 50 | } 51 | 52 | public function deletePatch(Patch $patch) { 53 | $dir = $this->getPatchDir($patch->getId()); 54 | $this->rrmdir($dir); 55 | } 56 | 57 | private function getPatchDir($patchId): string { 58 | return sys_get_temp_dir() . '/public/patches/' . $patchId . '/'; 59 | } 60 | 61 | private function rrmdir($dir) { 62 | if (is_dir($dir)) { 63 | $objects = scandir($dir); 64 | foreach ($objects as $object) { 65 | if ($object != "." && $object != "..") { 66 | if (filetype($dir."/".$object) == "dir"){ 67 | $this->rrmdir($dir."/".$object); 68 | }else{ 69 | unlink($dir."/".$object); 70 | } 71 | } 72 | } 73 | reset($objects); 74 | rmdir($dir); 75 | } 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/Model/Patch.php: -------------------------------------------------------------------------------- 1 | setId($json->_id); 35 | $patch->setName($json->name); 36 | $patch->setUserId($json->userId); 37 | $patch->setTags($json->tags); 38 | $patch->setCachedUsername($json->cachedUsername); 39 | if(isset($json->isPrivate)) { 40 | $patch->setIsPrivate($json->isPrivate); 41 | } 42 | $patch->setPublishedReadable($json->publishedReadable); 43 | return $patch; 44 | } 45 | 46 | /** 47 | * @param mixed $id 48 | */ 49 | private function setId($id) { 50 | $this->id = $id; 51 | } 52 | 53 | /** 54 | * @param mixed $name 55 | */ 56 | private function setName($name) { 57 | $this->name = $name; 58 | } 59 | 60 | /** 61 | * @param mixed $userId 62 | */ 63 | private function setUserId($userId) { 64 | $this->userId = $userId; 65 | } 66 | 67 | /** 68 | * @param mixed $tags 69 | */ 70 | private function setTags($tags) { 71 | $this->tags = $tags; 72 | } 73 | 74 | /** 75 | * @param mixed $cachedUsername 76 | */ 77 | private function setCachedUsername($cachedUsername) { 78 | $this->cachedUsername = $cachedUsername; 79 | } 80 | 81 | /** 82 | * @param mixed $isPrivate 83 | */ 84 | private function setIsPrivate($isPrivate) { 85 | $this->isPrivate = $isPrivate; 86 | } 87 | 88 | /** 89 | * @param mixed $publishedReadable 90 | */ 91 | private function setPublishedReadable($publishedReadable) { 92 | $this->publishedReadable = $publishedReadable; 93 | } 94 | 95 | /** 96 | * @return mixed 97 | */ 98 | public function getId() { 99 | return $this->id; 100 | } 101 | 102 | /** 103 | * @return mixed 104 | */ 105 | public function getName() { 106 | return $this->name; 107 | } 108 | 109 | /** 110 | * @return mixed 111 | */ 112 | public function getUserId() { 113 | return $this->userId; 114 | } 115 | 116 | /** 117 | * @return mixed 118 | */ 119 | public function getTags() { 120 | return $this->tags; 121 | } 122 | 123 | /** 124 | * @return mixed 125 | */ 126 | public function getCachedUsername() { 127 | return $this->cachedUsername; 128 | } 129 | 130 | /** 131 | * @return mixed 132 | */ 133 | public function getisPrivate() { 134 | return $this->isPrivate; 135 | } 136 | 137 | /** 138 | * @return mixed 139 | */ 140 | public function getPublishedReadable() { 141 | return $this->publishedReadable; 142 | } 143 | 144 | 145 | } 146 | -------------------------------------------------------------------------------- /src/CablesApi.php: -------------------------------------------------------------------------------- 1 | config = $config; 27 | } 28 | 29 | /** 30 | * @return Patch[] 31 | */ 32 | public function getMyPatches(): array { 33 | $response = $this->callRemote($this->config->getApiUrl(), '/myprojects'); 34 | $body = (string)$response->getBody(); 35 | $jsonpatches = json_decode($body); 36 | $patches = array(); 37 | foreach ($jsonpatches as $jsonpatch) { 38 | $patches[] = Patch::fromJson($jsonpatch); 39 | } 40 | return $patches; 41 | } 42 | 43 | /** 44 | * @param string $baseUrl 45 | * @param string $method 46 | * @return Response 47 | */ 48 | private function callRemote(string $baseUrl, string $method): Response { 49 | $client = new \GuzzleHttp\Client(); 50 | $response = $client->request( 51 | 'GET', 52 | $baseUrl . $method, 53 | [ 54 | 'read_timeout' => 120, 55 | 'headers' => [ 56 | 'X-apikey' => $this->config->getApiKey(), 57 | ] 58 | ] 59 | ); 60 | 61 | return $response; 62 | } 63 | 64 | /** 65 | * @param Patch $patch 66 | * @return Patch 67 | */ 68 | public function importPatch(Patch $patch): Patch { 69 | 70 | $export = $this->getPatchExport($patch); 71 | $response = $this->callRemote($this->config->getBaseUrl(), $export->getPath()); 72 | $content = (string)$response->getBody(); 73 | 74 | $storage = $this->config->getStorage(); 75 | $storage->storePatch($export, $content); 76 | return $patch; 77 | } 78 | 79 | /** 80 | * @return string 81 | */ 82 | private function getPatchExport(Patch $patch): PatchExport { 83 | $response = $this->callRemote($this->config->getApiUrl(), '/project/' . $patch->getId() . '/export'); 84 | $body = (string)$response->getBody(); 85 | $json = json_decode($body); 86 | return PatchExport::fromJson($patch->getId(), $json); 87 | } 88 | 89 | /** 90 | * @param $patchId 91 | * @return bool 92 | */ 93 | public function isImported(Patch $patch): bool { 94 | $storage = $this->config->getStorage(); 95 | return $storage->isImported($patch); 96 | } 97 | 98 | /** 99 | * @param Patch $patch 100 | * @return string 101 | * 102 | */ 103 | public function getPatchDirUrl(Patch $patch): string { 104 | $storage = $this->config->getStorage(); 105 | return $storage->getPatchDirUrl($patch); 106 | } 107 | 108 | public function deletePatch(Patch $patch) { 109 | $storage = $this->config->getStorage(); 110 | $storage->deletePatch($patch); 111 | } 112 | 113 | 114 | public function updatePatch(Patch $patch): Patch { 115 | $storage = $this->config->getStorage(); 116 | $storage->deletePatch($patch); 117 | $this->importPatch($patch); 118 | return $patch; 119 | } 120 | 121 | } 122 | -------------------------------------------------------------------------------- /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#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "1732f5b239bfb2133b90342e35ba1746", 8 | "content-hash": "b665273c0e9d476cfdada32439814bda", 9 | "packages": [ 10 | { 11 | "name": "guzzlehttp/guzzle", 12 | "version": "6.3.0", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/guzzle/guzzle.git", 16 | "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", 21 | "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "guzzlehttp/promises": "^1.0", 26 | "guzzlehttp/psr7": "^1.4", 27 | "php": ">=5.5" 28 | }, 29 | "require-dev": { 30 | "ext-curl": "*", 31 | "phpunit/phpunit": "^4.0 || ^5.0", 32 | "psr/log": "^1.0" 33 | }, 34 | "suggest": { 35 | "psr/log": "Required for using the Log middleware" 36 | }, 37 | "type": "library", 38 | "extra": { 39 | "branch-alias": { 40 | "dev-master": "6.2-dev" 41 | } 42 | }, 43 | "autoload": { 44 | "files": [ 45 | "src/functions_include.php" 46 | ], 47 | "psr-4": { 48 | "GuzzleHttp\\": "src/" 49 | } 50 | }, 51 | "notification-url": "https://packagist.org/downloads/", 52 | "license": [ 53 | "MIT" 54 | ], 55 | "authors": [ 56 | { 57 | "name": "Michael Dowling", 58 | "email": "mtdowling@gmail.com", 59 | "homepage": "https://github.com/mtdowling" 60 | } 61 | ], 62 | "description": "Guzzle is a PHP HTTP client library", 63 | "homepage": "http://guzzlephp.org/", 64 | "keywords": [ 65 | "client", 66 | "curl", 67 | "framework", 68 | "http", 69 | "http client", 70 | "rest", 71 | "web service" 72 | ], 73 | "time": "2017-06-22 18:50:49" 74 | }, 75 | { 76 | "name": "guzzlehttp/promises", 77 | "version": "v1.3.1", 78 | "source": { 79 | "type": "git", 80 | "url": "https://github.com/guzzle/promises.git", 81 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" 82 | }, 83 | "dist": { 84 | "type": "zip", 85 | "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", 86 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", 87 | "shasum": "" 88 | }, 89 | "require": { 90 | "php": ">=5.5.0" 91 | }, 92 | "require-dev": { 93 | "phpunit/phpunit": "^4.0" 94 | }, 95 | "type": "library", 96 | "extra": { 97 | "branch-alias": { 98 | "dev-master": "1.4-dev" 99 | } 100 | }, 101 | "autoload": { 102 | "psr-4": { 103 | "GuzzleHttp\\Promise\\": "src/" 104 | }, 105 | "files": [ 106 | "src/functions_include.php" 107 | ] 108 | }, 109 | "notification-url": "https://packagist.org/downloads/", 110 | "license": [ 111 | "MIT" 112 | ], 113 | "authors": [ 114 | { 115 | "name": "Michael Dowling", 116 | "email": "mtdowling@gmail.com", 117 | "homepage": "https://github.com/mtdowling" 118 | } 119 | ], 120 | "description": "Guzzle promises library", 121 | "keywords": [ 122 | "promise" 123 | ], 124 | "time": "2016-12-20 10:07:11" 125 | }, 126 | { 127 | "name": "guzzlehttp/psr7", 128 | "version": "1.4.2", 129 | "source": { 130 | "type": "git", 131 | "url": "https://github.com/guzzle/psr7.git", 132 | "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" 133 | }, 134 | "dist": { 135 | "type": "zip", 136 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", 137 | "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", 138 | "shasum": "" 139 | }, 140 | "require": { 141 | "php": ">=5.4.0", 142 | "psr/http-message": "~1.0" 143 | }, 144 | "provide": { 145 | "psr/http-message-implementation": "1.0" 146 | }, 147 | "require-dev": { 148 | "phpunit/phpunit": "~4.0" 149 | }, 150 | "type": "library", 151 | "extra": { 152 | "branch-alias": { 153 | "dev-master": "1.4-dev" 154 | } 155 | }, 156 | "autoload": { 157 | "psr-4": { 158 | "GuzzleHttp\\Psr7\\": "src/" 159 | }, 160 | "files": [ 161 | "src/functions_include.php" 162 | ] 163 | }, 164 | "notification-url": "https://packagist.org/downloads/", 165 | "license": [ 166 | "MIT" 167 | ], 168 | "authors": [ 169 | { 170 | "name": "Michael Dowling", 171 | "email": "mtdowling@gmail.com", 172 | "homepage": "https://github.com/mtdowling" 173 | }, 174 | { 175 | "name": "Tobias Schultze", 176 | "homepage": "https://github.com/Tobion" 177 | } 178 | ], 179 | "description": "PSR-7 message implementation that also provides common utility methods", 180 | "keywords": [ 181 | "http", 182 | "message", 183 | "request", 184 | "response", 185 | "stream", 186 | "uri", 187 | "url" 188 | ], 189 | "time": "2017-03-20 17:10:46" 190 | }, 191 | { 192 | "name": "psr/http-message", 193 | "version": "1.0.1", 194 | "source": { 195 | "type": "git", 196 | "url": "https://github.com/php-fig/http-message.git", 197 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 198 | }, 199 | "dist": { 200 | "type": "zip", 201 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 202 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 203 | "shasum": "" 204 | }, 205 | "require": { 206 | "php": ">=5.3.0" 207 | }, 208 | "type": "library", 209 | "extra": { 210 | "branch-alias": { 211 | "dev-master": "1.0.x-dev" 212 | } 213 | }, 214 | "autoload": { 215 | "psr-4": { 216 | "Psr\\Http\\Message\\": "src/" 217 | } 218 | }, 219 | "notification-url": "https://packagist.org/downloads/", 220 | "license": [ 221 | "MIT" 222 | ], 223 | "authors": [ 224 | { 225 | "name": "PHP-FIG", 226 | "homepage": "http://www.php-fig.org/" 227 | } 228 | ], 229 | "description": "Common interface for HTTP messages", 230 | "homepage": "https://github.com/php-fig/http-message", 231 | "keywords": [ 232 | "http", 233 | "http-message", 234 | "psr", 235 | "psr-7", 236 | "request", 237 | "response" 238 | ], 239 | "time": "2016-08-06 14:39:51" 240 | } 241 | ], 242 | "packages-dev": [ 243 | { 244 | "name": "doctrine/instantiator", 245 | "version": "1.0.5", 246 | "source": { 247 | "type": "git", 248 | "url": "https://github.com/doctrine/instantiator.git", 249 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" 250 | }, 251 | "dist": { 252 | "type": "zip", 253 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", 254 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", 255 | "shasum": "" 256 | }, 257 | "require": { 258 | "php": ">=5.3,<8.0-DEV" 259 | }, 260 | "require-dev": { 261 | "athletic/athletic": "~0.1.8", 262 | "ext-pdo": "*", 263 | "ext-phar": "*", 264 | "phpunit/phpunit": "~4.0", 265 | "squizlabs/php_codesniffer": "~2.0" 266 | }, 267 | "type": "library", 268 | "extra": { 269 | "branch-alias": { 270 | "dev-master": "1.0.x-dev" 271 | } 272 | }, 273 | "autoload": { 274 | "psr-4": { 275 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 276 | } 277 | }, 278 | "notification-url": "https://packagist.org/downloads/", 279 | "license": [ 280 | "MIT" 281 | ], 282 | "authors": [ 283 | { 284 | "name": "Marco Pivetta", 285 | "email": "ocramius@gmail.com", 286 | "homepage": "http://ocramius.github.com/" 287 | } 288 | ], 289 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 290 | "homepage": "https://github.com/doctrine/instantiator", 291 | "keywords": [ 292 | "constructor", 293 | "instantiate" 294 | ], 295 | "time": "2015-06-14 21:17:01" 296 | }, 297 | { 298 | "name": "myclabs/deep-copy", 299 | "version": "1.7.0", 300 | "source": { 301 | "type": "git", 302 | "url": "https://github.com/myclabs/DeepCopy.git", 303 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" 304 | }, 305 | "dist": { 306 | "type": "zip", 307 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", 308 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", 309 | "shasum": "" 310 | }, 311 | "require": { 312 | "php": "^5.6 || ^7.0" 313 | }, 314 | "require-dev": { 315 | "doctrine/collections": "^1.0", 316 | "doctrine/common": "^2.6", 317 | "phpunit/phpunit": "^4.1" 318 | }, 319 | "type": "library", 320 | "autoload": { 321 | "psr-4": { 322 | "DeepCopy\\": "src/DeepCopy/" 323 | }, 324 | "files": [ 325 | "src/DeepCopy/deep_copy.php" 326 | ] 327 | }, 328 | "notification-url": "https://packagist.org/downloads/", 329 | "license": [ 330 | "MIT" 331 | ], 332 | "description": "Create deep copies (clones) of your objects", 333 | "keywords": [ 334 | "clone", 335 | "copy", 336 | "duplicate", 337 | "object", 338 | "object graph" 339 | ], 340 | "time": "2017-10-19 19:58:43" 341 | }, 342 | { 343 | "name": "phar-io/manifest", 344 | "version": "1.0.1", 345 | "source": { 346 | "type": "git", 347 | "url": "https://github.com/phar-io/manifest.git", 348 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" 349 | }, 350 | "dist": { 351 | "type": "zip", 352 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", 353 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", 354 | "shasum": "" 355 | }, 356 | "require": { 357 | "ext-dom": "*", 358 | "ext-phar": "*", 359 | "phar-io/version": "^1.0.1", 360 | "php": "^5.6 || ^7.0" 361 | }, 362 | "type": "library", 363 | "extra": { 364 | "branch-alias": { 365 | "dev-master": "1.0.x-dev" 366 | } 367 | }, 368 | "autoload": { 369 | "classmap": [ 370 | "src/" 371 | ] 372 | }, 373 | "notification-url": "https://packagist.org/downloads/", 374 | "license": [ 375 | "BSD-3-Clause" 376 | ], 377 | "authors": [ 378 | { 379 | "name": "Arne Blankerts", 380 | "email": "arne@blankerts.de", 381 | "role": "Developer" 382 | }, 383 | { 384 | "name": "Sebastian Heuer", 385 | "email": "sebastian@phpeople.de", 386 | "role": "Developer" 387 | }, 388 | { 389 | "name": "Sebastian Bergmann", 390 | "email": "sebastian@phpunit.de", 391 | "role": "Developer" 392 | } 393 | ], 394 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 395 | "time": "2017-03-05 18:14:27" 396 | }, 397 | { 398 | "name": "phar-io/version", 399 | "version": "1.0.1", 400 | "source": { 401 | "type": "git", 402 | "url": "https://github.com/phar-io/version.git", 403 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" 404 | }, 405 | "dist": { 406 | "type": "zip", 407 | "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", 408 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", 409 | "shasum": "" 410 | }, 411 | "require": { 412 | "php": "^5.6 || ^7.0" 413 | }, 414 | "type": "library", 415 | "autoload": { 416 | "classmap": [ 417 | "src/" 418 | ] 419 | }, 420 | "notification-url": "https://packagist.org/downloads/", 421 | "license": [ 422 | "BSD-3-Clause" 423 | ], 424 | "authors": [ 425 | { 426 | "name": "Arne Blankerts", 427 | "email": "arne@blankerts.de", 428 | "role": "Developer" 429 | }, 430 | { 431 | "name": "Sebastian Heuer", 432 | "email": "sebastian@phpeople.de", 433 | "role": "Developer" 434 | }, 435 | { 436 | "name": "Sebastian Bergmann", 437 | "email": "sebastian@phpunit.de", 438 | "role": "Developer" 439 | } 440 | ], 441 | "description": "Library for handling version information and constraints", 442 | "time": "2017-03-05 17:38:23" 443 | }, 444 | { 445 | "name": "phpdocumentor/reflection-common", 446 | "version": "1.0.1", 447 | "source": { 448 | "type": "git", 449 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 450 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" 451 | }, 452 | "dist": { 453 | "type": "zip", 454 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 455 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 456 | "shasum": "" 457 | }, 458 | "require": { 459 | "php": ">=5.5" 460 | }, 461 | "require-dev": { 462 | "phpunit/phpunit": "^4.6" 463 | }, 464 | "type": "library", 465 | "extra": { 466 | "branch-alias": { 467 | "dev-master": "1.0.x-dev" 468 | } 469 | }, 470 | "autoload": { 471 | "psr-4": { 472 | "phpDocumentor\\Reflection\\": [ 473 | "src" 474 | ] 475 | } 476 | }, 477 | "notification-url": "https://packagist.org/downloads/", 478 | "license": [ 479 | "MIT" 480 | ], 481 | "authors": [ 482 | { 483 | "name": "Jaap van Otterdijk", 484 | "email": "opensource@ijaap.nl" 485 | } 486 | ], 487 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 488 | "homepage": "http://www.phpdoc.org", 489 | "keywords": [ 490 | "FQSEN", 491 | "phpDocumentor", 492 | "phpdoc", 493 | "reflection", 494 | "static analysis" 495 | ], 496 | "time": "2017-09-11 18:02:19" 497 | }, 498 | { 499 | "name": "phpdocumentor/reflection-docblock", 500 | "version": "4.3.0", 501 | "source": { 502 | "type": "git", 503 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 504 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08" 505 | }, 506 | "dist": { 507 | "type": "zip", 508 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", 509 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08", 510 | "shasum": "" 511 | }, 512 | "require": { 513 | "php": "^7.0", 514 | "phpdocumentor/reflection-common": "^1.0.0", 515 | "phpdocumentor/type-resolver": "^0.4.0", 516 | "webmozart/assert": "^1.0" 517 | }, 518 | "require-dev": { 519 | "doctrine/instantiator": "~1.0.5", 520 | "mockery/mockery": "^1.0", 521 | "phpunit/phpunit": "^6.4" 522 | }, 523 | "type": "library", 524 | "extra": { 525 | "branch-alias": { 526 | "dev-master": "4.x-dev" 527 | } 528 | }, 529 | "autoload": { 530 | "psr-4": { 531 | "phpDocumentor\\Reflection\\": [ 532 | "src/" 533 | ] 534 | } 535 | }, 536 | "notification-url": "https://packagist.org/downloads/", 537 | "license": [ 538 | "MIT" 539 | ], 540 | "authors": [ 541 | { 542 | "name": "Mike van Riel", 543 | "email": "me@mikevanriel.com" 544 | } 545 | ], 546 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 547 | "time": "2017-11-30 07:14:17" 548 | }, 549 | { 550 | "name": "phpdocumentor/type-resolver", 551 | "version": "0.4.0", 552 | "source": { 553 | "type": "git", 554 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 555 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" 556 | }, 557 | "dist": { 558 | "type": "zip", 559 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", 560 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", 561 | "shasum": "" 562 | }, 563 | "require": { 564 | "php": "^5.5 || ^7.0", 565 | "phpdocumentor/reflection-common": "^1.0" 566 | }, 567 | "require-dev": { 568 | "mockery/mockery": "^0.9.4", 569 | "phpunit/phpunit": "^5.2||^4.8.24" 570 | }, 571 | "type": "library", 572 | "extra": { 573 | "branch-alias": { 574 | "dev-master": "1.0.x-dev" 575 | } 576 | }, 577 | "autoload": { 578 | "psr-4": { 579 | "phpDocumentor\\Reflection\\": [ 580 | "src/" 581 | ] 582 | } 583 | }, 584 | "notification-url": "https://packagist.org/downloads/", 585 | "license": [ 586 | "MIT" 587 | ], 588 | "authors": [ 589 | { 590 | "name": "Mike van Riel", 591 | "email": "me@mikevanriel.com" 592 | } 593 | ], 594 | "time": "2017-07-14 14:27:02" 595 | }, 596 | { 597 | "name": "phpspec/prophecy", 598 | "version": "1.7.5", 599 | "source": { 600 | "type": "git", 601 | "url": "https://github.com/phpspec/prophecy.git", 602 | "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401" 603 | }, 604 | "dist": { 605 | "type": "zip", 606 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/dfd6be44111a7c41c2e884a336cc4f461b3b2401", 607 | "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401", 608 | "shasum": "" 609 | }, 610 | "require": { 611 | "doctrine/instantiator": "^1.0.2", 612 | "php": "^5.3|^7.0", 613 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", 614 | "sebastian/comparator": "^1.1|^2.0", 615 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 616 | }, 617 | "require-dev": { 618 | "phpspec/phpspec": "^2.5|^3.2", 619 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" 620 | }, 621 | "type": "library", 622 | "extra": { 623 | "branch-alias": { 624 | "dev-master": "1.7.x-dev" 625 | } 626 | }, 627 | "autoload": { 628 | "psr-0": { 629 | "Prophecy\\": "src/" 630 | } 631 | }, 632 | "notification-url": "https://packagist.org/downloads/", 633 | "license": [ 634 | "MIT" 635 | ], 636 | "authors": [ 637 | { 638 | "name": "Konstantin Kudryashov", 639 | "email": "ever.zet@gmail.com", 640 | "homepage": "http://everzet.com" 641 | }, 642 | { 643 | "name": "Marcello Duarte", 644 | "email": "marcello.duarte@gmail.com" 645 | } 646 | ], 647 | "description": "Highly opinionated mocking framework for PHP 5.3+", 648 | "homepage": "https://github.com/phpspec/prophecy", 649 | "keywords": [ 650 | "Double", 651 | "Dummy", 652 | "fake", 653 | "mock", 654 | "spy", 655 | "stub" 656 | ], 657 | "time": "2018-02-19 10:16:54" 658 | }, 659 | { 660 | "name": "phpunit/php-code-coverage", 661 | "version": "5.3.0", 662 | "source": { 663 | "type": "git", 664 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 665 | "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1" 666 | }, 667 | "dist": { 668 | "type": "zip", 669 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/661f34d0bd3f1a7225ef491a70a020ad23a057a1", 670 | "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1", 671 | "shasum": "" 672 | }, 673 | "require": { 674 | "ext-dom": "*", 675 | "ext-xmlwriter": "*", 676 | "php": "^7.0", 677 | "phpunit/php-file-iterator": "^1.4.2", 678 | "phpunit/php-text-template": "^1.2.1", 679 | "phpunit/php-token-stream": "^2.0.1", 680 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 681 | "sebastian/environment": "^3.0", 682 | "sebastian/version": "^2.0.1", 683 | "theseer/tokenizer": "^1.1" 684 | }, 685 | "require-dev": { 686 | "phpunit/phpunit": "^6.0" 687 | }, 688 | "suggest": { 689 | "ext-xdebug": "^2.5.5" 690 | }, 691 | "type": "library", 692 | "extra": { 693 | "branch-alias": { 694 | "dev-master": "5.3.x-dev" 695 | } 696 | }, 697 | "autoload": { 698 | "classmap": [ 699 | "src/" 700 | ] 701 | }, 702 | "notification-url": "https://packagist.org/downloads/", 703 | "license": [ 704 | "BSD-3-Clause" 705 | ], 706 | "authors": [ 707 | { 708 | "name": "Sebastian Bergmann", 709 | "email": "sebastian@phpunit.de", 710 | "role": "lead" 711 | } 712 | ], 713 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 714 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 715 | "keywords": [ 716 | "coverage", 717 | "testing", 718 | "xunit" 719 | ], 720 | "time": "2017-12-06 09:29:45" 721 | }, 722 | { 723 | "name": "phpunit/php-file-iterator", 724 | "version": "1.4.5", 725 | "source": { 726 | "type": "git", 727 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 728 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" 729 | }, 730 | "dist": { 731 | "type": "zip", 732 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", 733 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", 734 | "shasum": "" 735 | }, 736 | "require": { 737 | "php": ">=5.3.3" 738 | }, 739 | "type": "library", 740 | "extra": { 741 | "branch-alias": { 742 | "dev-master": "1.4.x-dev" 743 | } 744 | }, 745 | "autoload": { 746 | "classmap": [ 747 | "src/" 748 | ] 749 | }, 750 | "notification-url": "https://packagist.org/downloads/", 751 | "license": [ 752 | "BSD-3-Clause" 753 | ], 754 | "authors": [ 755 | { 756 | "name": "Sebastian Bergmann", 757 | "email": "sb@sebastian-bergmann.de", 758 | "role": "lead" 759 | } 760 | ], 761 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 762 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 763 | "keywords": [ 764 | "filesystem", 765 | "iterator" 766 | ], 767 | "time": "2017-11-27 13:52:08" 768 | }, 769 | { 770 | "name": "phpunit/php-text-template", 771 | "version": "1.2.1", 772 | "source": { 773 | "type": "git", 774 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 775 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 776 | }, 777 | "dist": { 778 | "type": "zip", 779 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 780 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 781 | "shasum": "" 782 | }, 783 | "require": { 784 | "php": ">=5.3.3" 785 | }, 786 | "type": "library", 787 | "autoload": { 788 | "classmap": [ 789 | "src/" 790 | ] 791 | }, 792 | "notification-url": "https://packagist.org/downloads/", 793 | "license": [ 794 | "BSD-3-Clause" 795 | ], 796 | "authors": [ 797 | { 798 | "name": "Sebastian Bergmann", 799 | "email": "sebastian@phpunit.de", 800 | "role": "lead" 801 | } 802 | ], 803 | "description": "Simple template engine.", 804 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 805 | "keywords": [ 806 | "template" 807 | ], 808 | "time": "2015-06-21 13:50:34" 809 | }, 810 | { 811 | "name": "phpunit/php-timer", 812 | "version": "1.0.9", 813 | "source": { 814 | "type": "git", 815 | "url": "https://github.com/sebastianbergmann/php-timer.git", 816 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" 817 | }, 818 | "dist": { 819 | "type": "zip", 820 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 821 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 822 | "shasum": "" 823 | }, 824 | "require": { 825 | "php": "^5.3.3 || ^7.0" 826 | }, 827 | "require-dev": { 828 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 829 | }, 830 | "type": "library", 831 | "extra": { 832 | "branch-alias": { 833 | "dev-master": "1.0-dev" 834 | } 835 | }, 836 | "autoload": { 837 | "classmap": [ 838 | "src/" 839 | ] 840 | }, 841 | "notification-url": "https://packagist.org/downloads/", 842 | "license": [ 843 | "BSD-3-Clause" 844 | ], 845 | "authors": [ 846 | { 847 | "name": "Sebastian Bergmann", 848 | "email": "sb@sebastian-bergmann.de", 849 | "role": "lead" 850 | } 851 | ], 852 | "description": "Utility class for timing", 853 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 854 | "keywords": [ 855 | "timer" 856 | ], 857 | "time": "2017-02-26 11:10:40" 858 | }, 859 | { 860 | "name": "phpunit/php-token-stream", 861 | "version": "2.0.2", 862 | "source": { 863 | "type": "git", 864 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 865 | "reference": "791198a2c6254db10131eecfe8c06670700904db" 866 | }, 867 | "dist": { 868 | "type": "zip", 869 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", 870 | "reference": "791198a2c6254db10131eecfe8c06670700904db", 871 | "shasum": "" 872 | }, 873 | "require": { 874 | "ext-tokenizer": "*", 875 | "php": "^7.0" 876 | }, 877 | "require-dev": { 878 | "phpunit/phpunit": "^6.2.4" 879 | }, 880 | "type": "library", 881 | "extra": { 882 | "branch-alias": { 883 | "dev-master": "2.0-dev" 884 | } 885 | }, 886 | "autoload": { 887 | "classmap": [ 888 | "src/" 889 | ] 890 | }, 891 | "notification-url": "https://packagist.org/downloads/", 892 | "license": [ 893 | "BSD-3-Clause" 894 | ], 895 | "authors": [ 896 | { 897 | "name": "Sebastian Bergmann", 898 | "email": "sebastian@phpunit.de" 899 | } 900 | ], 901 | "description": "Wrapper around PHP's tokenizer extension.", 902 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 903 | "keywords": [ 904 | "tokenizer" 905 | ], 906 | "time": "2017-11-27 05:48:46" 907 | }, 908 | { 909 | "name": "phpunit/phpunit", 910 | "version": "6.5.7", 911 | "source": { 912 | "type": "git", 913 | "url": "https://github.com/sebastianbergmann/phpunit.git", 914 | "reference": "6bd77b57707c236833d2b57b968e403df060c9d9" 915 | }, 916 | "dist": { 917 | "type": "zip", 918 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6bd77b57707c236833d2b57b968e403df060c9d9", 919 | "reference": "6bd77b57707c236833d2b57b968e403df060c9d9", 920 | "shasum": "" 921 | }, 922 | "require": { 923 | "ext-dom": "*", 924 | "ext-json": "*", 925 | "ext-libxml": "*", 926 | "ext-mbstring": "*", 927 | "ext-xml": "*", 928 | "myclabs/deep-copy": "^1.6.1", 929 | "phar-io/manifest": "^1.0.1", 930 | "phar-io/version": "^1.0", 931 | "php": "^7.0", 932 | "phpspec/prophecy": "^1.7", 933 | "phpunit/php-code-coverage": "^5.3", 934 | "phpunit/php-file-iterator": "^1.4.3", 935 | "phpunit/php-text-template": "^1.2.1", 936 | "phpunit/php-timer": "^1.0.9", 937 | "phpunit/phpunit-mock-objects": "^5.0.5", 938 | "sebastian/comparator": "^2.1", 939 | "sebastian/diff": "^2.0", 940 | "sebastian/environment": "^3.1", 941 | "sebastian/exporter": "^3.1", 942 | "sebastian/global-state": "^2.0", 943 | "sebastian/object-enumerator": "^3.0.3", 944 | "sebastian/resource-operations": "^1.0", 945 | "sebastian/version": "^2.0.1" 946 | }, 947 | "conflict": { 948 | "phpdocumentor/reflection-docblock": "3.0.2", 949 | "phpunit/dbunit": "<3.0" 950 | }, 951 | "require-dev": { 952 | "ext-pdo": "*" 953 | }, 954 | "suggest": { 955 | "ext-xdebug": "*", 956 | "phpunit/php-invoker": "^1.1" 957 | }, 958 | "bin": [ 959 | "phpunit" 960 | ], 961 | "type": "library", 962 | "extra": { 963 | "branch-alias": { 964 | "dev-master": "6.5.x-dev" 965 | } 966 | }, 967 | "autoload": { 968 | "classmap": [ 969 | "src/" 970 | ] 971 | }, 972 | "notification-url": "https://packagist.org/downloads/", 973 | "license": [ 974 | "BSD-3-Clause" 975 | ], 976 | "authors": [ 977 | { 978 | "name": "Sebastian Bergmann", 979 | "email": "sebastian@phpunit.de", 980 | "role": "lead" 981 | } 982 | ], 983 | "description": "The PHP Unit Testing framework.", 984 | "homepage": "https://phpunit.de/", 985 | "keywords": [ 986 | "phpunit", 987 | "testing", 988 | "xunit" 989 | ], 990 | "time": "2018-02-26 07:01:09" 991 | }, 992 | { 993 | "name": "phpunit/phpunit-mock-objects", 994 | "version": "5.0.6", 995 | "source": { 996 | "type": "git", 997 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 998 | "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf" 999 | }, 1000 | "dist": { 1001 | "type": "zip", 1002 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/33fd41a76e746b8fa96d00b49a23dadfa8334cdf", 1003 | "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf", 1004 | "shasum": "" 1005 | }, 1006 | "require": { 1007 | "doctrine/instantiator": "^1.0.5", 1008 | "php": "^7.0", 1009 | "phpunit/php-text-template": "^1.2.1", 1010 | "sebastian/exporter": "^3.1" 1011 | }, 1012 | "conflict": { 1013 | "phpunit/phpunit": "<6.0" 1014 | }, 1015 | "require-dev": { 1016 | "phpunit/phpunit": "^6.5" 1017 | }, 1018 | "suggest": { 1019 | "ext-soap": "*" 1020 | }, 1021 | "type": "library", 1022 | "extra": { 1023 | "branch-alias": { 1024 | "dev-master": "5.0.x-dev" 1025 | } 1026 | }, 1027 | "autoload": { 1028 | "classmap": [ 1029 | "src/" 1030 | ] 1031 | }, 1032 | "notification-url": "https://packagist.org/downloads/", 1033 | "license": [ 1034 | "BSD-3-Clause" 1035 | ], 1036 | "authors": [ 1037 | { 1038 | "name": "Sebastian Bergmann", 1039 | "email": "sebastian@phpunit.de", 1040 | "role": "lead" 1041 | } 1042 | ], 1043 | "description": "Mock Object library for PHPUnit", 1044 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 1045 | "keywords": [ 1046 | "mock", 1047 | "xunit" 1048 | ], 1049 | "time": "2018-01-06 05:45:45" 1050 | }, 1051 | { 1052 | "name": "sebastian/code-unit-reverse-lookup", 1053 | "version": "1.0.1", 1054 | "source": { 1055 | "type": "git", 1056 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1057 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 1058 | }, 1059 | "dist": { 1060 | "type": "zip", 1061 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1062 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1063 | "shasum": "" 1064 | }, 1065 | "require": { 1066 | "php": "^5.6 || ^7.0" 1067 | }, 1068 | "require-dev": { 1069 | "phpunit/phpunit": "^5.7 || ^6.0" 1070 | }, 1071 | "type": "library", 1072 | "extra": { 1073 | "branch-alias": { 1074 | "dev-master": "1.0.x-dev" 1075 | } 1076 | }, 1077 | "autoload": { 1078 | "classmap": [ 1079 | "src/" 1080 | ] 1081 | }, 1082 | "notification-url": "https://packagist.org/downloads/", 1083 | "license": [ 1084 | "BSD-3-Clause" 1085 | ], 1086 | "authors": [ 1087 | { 1088 | "name": "Sebastian Bergmann", 1089 | "email": "sebastian@phpunit.de" 1090 | } 1091 | ], 1092 | "description": "Looks up which function or method a line of code belongs to", 1093 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1094 | "time": "2017-03-04 06:30:41" 1095 | }, 1096 | { 1097 | "name": "sebastian/comparator", 1098 | "version": "2.1.3", 1099 | "source": { 1100 | "type": "git", 1101 | "url": "https://github.com/sebastianbergmann/comparator.git", 1102 | "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" 1103 | }, 1104 | "dist": { 1105 | "type": "zip", 1106 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", 1107 | "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", 1108 | "shasum": "" 1109 | }, 1110 | "require": { 1111 | "php": "^7.0", 1112 | "sebastian/diff": "^2.0 || ^3.0", 1113 | "sebastian/exporter": "^3.1" 1114 | }, 1115 | "require-dev": { 1116 | "phpunit/phpunit": "^6.4" 1117 | }, 1118 | "type": "library", 1119 | "extra": { 1120 | "branch-alias": { 1121 | "dev-master": "2.1.x-dev" 1122 | } 1123 | }, 1124 | "autoload": { 1125 | "classmap": [ 1126 | "src/" 1127 | ] 1128 | }, 1129 | "notification-url": "https://packagist.org/downloads/", 1130 | "license": [ 1131 | "BSD-3-Clause" 1132 | ], 1133 | "authors": [ 1134 | { 1135 | "name": "Jeff Welch", 1136 | "email": "whatthejeff@gmail.com" 1137 | }, 1138 | { 1139 | "name": "Volker Dusch", 1140 | "email": "github@wallbash.com" 1141 | }, 1142 | { 1143 | "name": "Bernhard Schussek", 1144 | "email": "bschussek@2bepublished.at" 1145 | }, 1146 | { 1147 | "name": "Sebastian Bergmann", 1148 | "email": "sebastian@phpunit.de" 1149 | } 1150 | ], 1151 | "description": "Provides the functionality to compare PHP values for equality", 1152 | "homepage": "https://github.com/sebastianbergmann/comparator", 1153 | "keywords": [ 1154 | "comparator", 1155 | "compare", 1156 | "equality" 1157 | ], 1158 | "time": "2018-02-01 13:46:46" 1159 | }, 1160 | { 1161 | "name": "sebastian/diff", 1162 | "version": "2.0.1", 1163 | "source": { 1164 | "type": "git", 1165 | "url": "https://github.com/sebastianbergmann/diff.git", 1166 | "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" 1167 | }, 1168 | "dist": { 1169 | "type": "zip", 1170 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", 1171 | "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", 1172 | "shasum": "" 1173 | }, 1174 | "require": { 1175 | "php": "^7.0" 1176 | }, 1177 | "require-dev": { 1178 | "phpunit/phpunit": "^6.2" 1179 | }, 1180 | "type": "library", 1181 | "extra": { 1182 | "branch-alias": { 1183 | "dev-master": "2.0-dev" 1184 | } 1185 | }, 1186 | "autoload": { 1187 | "classmap": [ 1188 | "src/" 1189 | ] 1190 | }, 1191 | "notification-url": "https://packagist.org/downloads/", 1192 | "license": [ 1193 | "BSD-3-Clause" 1194 | ], 1195 | "authors": [ 1196 | { 1197 | "name": "Kore Nordmann", 1198 | "email": "mail@kore-nordmann.de" 1199 | }, 1200 | { 1201 | "name": "Sebastian Bergmann", 1202 | "email": "sebastian@phpunit.de" 1203 | } 1204 | ], 1205 | "description": "Diff implementation", 1206 | "homepage": "https://github.com/sebastianbergmann/diff", 1207 | "keywords": [ 1208 | "diff" 1209 | ], 1210 | "time": "2017-08-03 08:09:46" 1211 | }, 1212 | { 1213 | "name": "sebastian/environment", 1214 | "version": "3.1.0", 1215 | "source": { 1216 | "type": "git", 1217 | "url": "https://github.com/sebastianbergmann/environment.git", 1218 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" 1219 | }, 1220 | "dist": { 1221 | "type": "zip", 1222 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", 1223 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", 1224 | "shasum": "" 1225 | }, 1226 | "require": { 1227 | "php": "^7.0" 1228 | }, 1229 | "require-dev": { 1230 | "phpunit/phpunit": "^6.1" 1231 | }, 1232 | "type": "library", 1233 | "extra": { 1234 | "branch-alias": { 1235 | "dev-master": "3.1.x-dev" 1236 | } 1237 | }, 1238 | "autoload": { 1239 | "classmap": [ 1240 | "src/" 1241 | ] 1242 | }, 1243 | "notification-url": "https://packagist.org/downloads/", 1244 | "license": [ 1245 | "BSD-3-Clause" 1246 | ], 1247 | "authors": [ 1248 | { 1249 | "name": "Sebastian Bergmann", 1250 | "email": "sebastian@phpunit.de" 1251 | } 1252 | ], 1253 | "description": "Provides functionality to handle HHVM/PHP environments", 1254 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1255 | "keywords": [ 1256 | "Xdebug", 1257 | "environment", 1258 | "hhvm" 1259 | ], 1260 | "time": "2017-07-01 08:51:00" 1261 | }, 1262 | { 1263 | "name": "sebastian/exporter", 1264 | "version": "3.1.0", 1265 | "source": { 1266 | "type": "git", 1267 | "url": "https://github.com/sebastianbergmann/exporter.git", 1268 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" 1269 | }, 1270 | "dist": { 1271 | "type": "zip", 1272 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", 1273 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", 1274 | "shasum": "" 1275 | }, 1276 | "require": { 1277 | "php": "^7.0", 1278 | "sebastian/recursion-context": "^3.0" 1279 | }, 1280 | "require-dev": { 1281 | "ext-mbstring": "*", 1282 | "phpunit/phpunit": "^6.0" 1283 | }, 1284 | "type": "library", 1285 | "extra": { 1286 | "branch-alias": { 1287 | "dev-master": "3.1.x-dev" 1288 | } 1289 | }, 1290 | "autoload": { 1291 | "classmap": [ 1292 | "src/" 1293 | ] 1294 | }, 1295 | "notification-url": "https://packagist.org/downloads/", 1296 | "license": [ 1297 | "BSD-3-Clause" 1298 | ], 1299 | "authors": [ 1300 | { 1301 | "name": "Jeff Welch", 1302 | "email": "whatthejeff@gmail.com" 1303 | }, 1304 | { 1305 | "name": "Volker Dusch", 1306 | "email": "github@wallbash.com" 1307 | }, 1308 | { 1309 | "name": "Bernhard Schussek", 1310 | "email": "bschussek@2bepublished.at" 1311 | }, 1312 | { 1313 | "name": "Sebastian Bergmann", 1314 | "email": "sebastian@phpunit.de" 1315 | }, 1316 | { 1317 | "name": "Adam Harvey", 1318 | "email": "aharvey@php.net" 1319 | } 1320 | ], 1321 | "description": "Provides the functionality to export PHP variables for visualization", 1322 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1323 | "keywords": [ 1324 | "export", 1325 | "exporter" 1326 | ], 1327 | "time": "2017-04-03 13:19:02" 1328 | }, 1329 | { 1330 | "name": "sebastian/global-state", 1331 | "version": "2.0.0", 1332 | "source": { 1333 | "type": "git", 1334 | "url": "https://github.com/sebastianbergmann/global-state.git", 1335 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" 1336 | }, 1337 | "dist": { 1338 | "type": "zip", 1339 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 1340 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 1341 | "shasum": "" 1342 | }, 1343 | "require": { 1344 | "php": "^7.0" 1345 | }, 1346 | "require-dev": { 1347 | "phpunit/phpunit": "^6.0" 1348 | }, 1349 | "suggest": { 1350 | "ext-uopz": "*" 1351 | }, 1352 | "type": "library", 1353 | "extra": { 1354 | "branch-alias": { 1355 | "dev-master": "2.0-dev" 1356 | } 1357 | }, 1358 | "autoload": { 1359 | "classmap": [ 1360 | "src/" 1361 | ] 1362 | }, 1363 | "notification-url": "https://packagist.org/downloads/", 1364 | "license": [ 1365 | "BSD-3-Clause" 1366 | ], 1367 | "authors": [ 1368 | { 1369 | "name": "Sebastian Bergmann", 1370 | "email": "sebastian@phpunit.de" 1371 | } 1372 | ], 1373 | "description": "Snapshotting of global state", 1374 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1375 | "keywords": [ 1376 | "global state" 1377 | ], 1378 | "time": "2017-04-27 15:39:26" 1379 | }, 1380 | { 1381 | "name": "sebastian/object-enumerator", 1382 | "version": "3.0.3", 1383 | "source": { 1384 | "type": "git", 1385 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1386 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 1387 | }, 1388 | "dist": { 1389 | "type": "zip", 1390 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1391 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1392 | "shasum": "" 1393 | }, 1394 | "require": { 1395 | "php": "^7.0", 1396 | "sebastian/object-reflector": "^1.1.1", 1397 | "sebastian/recursion-context": "^3.0" 1398 | }, 1399 | "require-dev": { 1400 | "phpunit/phpunit": "^6.0" 1401 | }, 1402 | "type": "library", 1403 | "extra": { 1404 | "branch-alias": { 1405 | "dev-master": "3.0.x-dev" 1406 | } 1407 | }, 1408 | "autoload": { 1409 | "classmap": [ 1410 | "src/" 1411 | ] 1412 | }, 1413 | "notification-url": "https://packagist.org/downloads/", 1414 | "license": [ 1415 | "BSD-3-Clause" 1416 | ], 1417 | "authors": [ 1418 | { 1419 | "name": "Sebastian Bergmann", 1420 | "email": "sebastian@phpunit.de" 1421 | } 1422 | ], 1423 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1424 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1425 | "time": "2017-08-03 12:35:26" 1426 | }, 1427 | { 1428 | "name": "sebastian/object-reflector", 1429 | "version": "1.1.1", 1430 | "source": { 1431 | "type": "git", 1432 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1433 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 1434 | }, 1435 | "dist": { 1436 | "type": "zip", 1437 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 1438 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 1439 | "shasum": "" 1440 | }, 1441 | "require": { 1442 | "php": "^7.0" 1443 | }, 1444 | "require-dev": { 1445 | "phpunit/phpunit": "^6.0" 1446 | }, 1447 | "type": "library", 1448 | "extra": { 1449 | "branch-alias": { 1450 | "dev-master": "1.1-dev" 1451 | } 1452 | }, 1453 | "autoload": { 1454 | "classmap": [ 1455 | "src/" 1456 | ] 1457 | }, 1458 | "notification-url": "https://packagist.org/downloads/", 1459 | "license": [ 1460 | "BSD-3-Clause" 1461 | ], 1462 | "authors": [ 1463 | { 1464 | "name": "Sebastian Bergmann", 1465 | "email": "sebastian@phpunit.de" 1466 | } 1467 | ], 1468 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1469 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1470 | "time": "2017-03-29 09:07:27" 1471 | }, 1472 | { 1473 | "name": "sebastian/recursion-context", 1474 | "version": "3.0.0", 1475 | "source": { 1476 | "type": "git", 1477 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1478 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 1479 | }, 1480 | "dist": { 1481 | "type": "zip", 1482 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1483 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1484 | "shasum": "" 1485 | }, 1486 | "require": { 1487 | "php": "^7.0" 1488 | }, 1489 | "require-dev": { 1490 | "phpunit/phpunit": "^6.0" 1491 | }, 1492 | "type": "library", 1493 | "extra": { 1494 | "branch-alias": { 1495 | "dev-master": "3.0.x-dev" 1496 | } 1497 | }, 1498 | "autoload": { 1499 | "classmap": [ 1500 | "src/" 1501 | ] 1502 | }, 1503 | "notification-url": "https://packagist.org/downloads/", 1504 | "license": [ 1505 | "BSD-3-Clause" 1506 | ], 1507 | "authors": [ 1508 | { 1509 | "name": "Jeff Welch", 1510 | "email": "whatthejeff@gmail.com" 1511 | }, 1512 | { 1513 | "name": "Sebastian Bergmann", 1514 | "email": "sebastian@phpunit.de" 1515 | }, 1516 | { 1517 | "name": "Adam Harvey", 1518 | "email": "aharvey@php.net" 1519 | } 1520 | ], 1521 | "description": "Provides functionality to recursively process PHP variables", 1522 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1523 | "time": "2017-03-03 06:23:57" 1524 | }, 1525 | { 1526 | "name": "sebastian/resource-operations", 1527 | "version": "1.0.0", 1528 | "source": { 1529 | "type": "git", 1530 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1531 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" 1532 | }, 1533 | "dist": { 1534 | "type": "zip", 1535 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 1536 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 1537 | "shasum": "" 1538 | }, 1539 | "require": { 1540 | "php": ">=5.6.0" 1541 | }, 1542 | "type": "library", 1543 | "extra": { 1544 | "branch-alias": { 1545 | "dev-master": "1.0.x-dev" 1546 | } 1547 | }, 1548 | "autoload": { 1549 | "classmap": [ 1550 | "src/" 1551 | ] 1552 | }, 1553 | "notification-url": "https://packagist.org/downloads/", 1554 | "license": [ 1555 | "BSD-3-Clause" 1556 | ], 1557 | "authors": [ 1558 | { 1559 | "name": "Sebastian Bergmann", 1560 | "email": "sebastian@phpunit.de" 1561 | } 1562 | ], 1563 | "description": "Provides a list of PHP built-in functions that operate on resources", 1564 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1565 | "time": "2015-07-28 20:34:47" 1566 | }, 1567 | { 1568 | "name": "sebastian/version", 1569 | "version": "2.0.1", 1570 | "source": { 1571 | "type": "git", 1572 | "url": "https://github.com/sebastianbergmann/version.git", 1573 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 1574 | }, 1575 | "dist": { 1576 | "type": "zip", 1577 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 1578 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 1579 | "shasum": "" 1580 | }, 1581 | "require": { 1582 | "php": ">=5.6" 1583 | }, 1584 | "type": "library", 1585 | "extra": { 1586 | "branch-alias": { 1587 | "dev-master": "2.0.x-dev" 1588 | } 1589 | }, 1590 | "autoload": { 1591 | "classmap": [ 1592 | "src/" 1593 | ] 1594 | }, 1595 | "notification-url": "https://packagist.org/downloads/", 1596 | "license": [ 1597 | "BSD-3-Clause" 1598 | ], 1599 | "authors": [ 1600 | { 1601 | "name": "Sebastian Bergmann", 1602 | "email": "sebastian@phpunit.de", 1603 | "role": "lead" 1604 | } 1605 | ], 1606 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1607 | "homepage": "https://github.com/sebastianbergmann/version", 1608 | "time": "2016-10-03 07:35:21" 1609 | }, 1610 | { 1611 | "name": "theseer/tokenizer", 1612 | "version": "1.1.0", 1613 | "source": { 1614 | "type": "git", 1615 | "url": "https://github.com/theseer/tokenizer.git", 1616 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" 1617 | }, 1618 | "dist": { 1619 | "type": "zip", 1620 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", 1621 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", 1622 | "shasum": "" 1623 | }, 1624 | "require": { 1625 | "ext-dom": "*", 1626 | "ext-tokenizer": "*", 1627 | "ext-xmlwriter": "*", 1628 | "php": "^7.0" 1629 | }, 1630 | "type": "library", 1631 | "autoload": { 1632 | "classmap": [ 1633 | "src/" 1634 | ] 1635 | }, 1636 | "notification-url": "https://packagist.org/downloads/", 1637 | "license": [ 1638 | "BSD-3-Clause" 1639 | ], 1640 | "authors": [ 1641 | { 1642 | "name": "Arne Blankerts", 1643 | "email": "arne@blankerts.de", 1644 | "role": "Developer" 1645 | } 1646 | ], 1647 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 1648 | "time": "2017-04-07 12:08:54" 1649 | }, 1650 | { 1651 | "name": "vipsoft/unzip", 1652 | "version": "1.2.1", 1653 | "source": { 1654 | "type": "git", 1655 | "url": "https://github.com/vipsoft/Unzip.git", 1656 | "reference": "657cda91648db84b8882e6ac881e2fd439bbe82c" 1657 | }, 1658 | "dist": { 1659 | "type": "zip", 1660 | "url": "https://api.github.com/repos/vipsoft/Unzip/zipball/657cda91648db84b8882e6ac881e2fd439bbe82c", 1661 | "reference": "657cda91648db84b8882e6ac881e2fd439bbe82c", 1662 | "shasum": "" 1663 | }, 1664 | "require": { 1665 | "ext-zip": "*", 1666 | "php": ">=5.3.6" 1667 | }, 1668 | "type": "library", 1669 | "autoload": { 1670 | "psr-0": { 1671 | "VIPSoft\\Unzip": "src/" 1672 | } 1673 | }, 1674 | "notification-url": "https://packagist.org/downloads/", 1675 | "license": [ 1676 | "MIT" 1677 | ], 1678 | "authors": [ 1679 | { 1680 | "name": "Anthon Pang", 1681 | "email": "apang@softwaredevelopment.ca", 1682 | "role": "developer" 1683 | } 1684 | ], 1685 | "description": "Unzip library - a ZipArchive wrapper", 1686 | "homepage": "http://github.com/vipsoft/", 1687 | "keywords": [ 1688 | "pclzip", 1689 | "unzip", 1690 | "zip", 1691 | "ziparchive" 1692 | ], 1693 | "time": "2016-02-16 04:29:22" 1694 | }, 1695 | { 1696 | "name": "webmozart/assert", 1697 | "version": "1.3.0", 1698 | "source": { 1699 | "type": "git", 1700 | "url": "https://github.com/webmozart/assert.git", 1701 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a" 1702 | }, 1703 | "dist": { 1704 | "type": "zip", 1705 | "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", 1706 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a", 1707 | "shasum": "" 1708 | }, 1709 | "require": { 1710 | "php": "^5.3.3 || ^7.0" 1711 | }, 1712 | "require-dev": { 1713 | "phpunit/phpunit": "^4.6", 1714 | "sebastian/version": "^1.0.1" 1715 | }, 1716 | "type": "library", 1717 | "extra": { 1718 | "branch-alias": { 1719 | "dev-master": "1.3-dev" 1720 | } 1721 | }, 1722 | "autoload": { 1723 | "psr-4": { 1724 | "Webmozart\\Assert\\": "src/" 1725 | } 1726 | }, 1727 | "notification-url": "https://packagist.org/downloads/", 1728 | "license": [ 1729 | "MIT" 1730 | ], 1731 | "authors": [ 1732 | { 1733 | "name": "Bernhard Schussek", 1734 | "email": "bschussek@gmail.com" 1735 | } 1736 | ], 1737 | "description": "Assertions to validate method input/output with nice error messages.", 1738 | "keywords": [ 1739 | "assert", 1740 | "check", 1741 | "validate" 1742 | ], 1743 | "time": "2018-01-29 19:49:41" 1744 | } 1745 | ], 1746 | "aliases": [], 1747 | "minimum-stability": "stable", 1748 | "stability-flags": [], 1749 | "prefer-stable": false, 1750 | "prefer-lowest": false, 1751 | "platform": { 1752 | "php": ">=7.0.0" 1753 | }, 1754 | "platform-dev": [] 1755 | } 1756 | --------------------------------------------------------------------------------