├── .env.example ├── .gitignore ├── LICENSE ├── README.md ├── app ├── Api │ ├── BaseApi.php │ ├── DemoApi.php │ └── RegisterApi.php ├── Command │ └── TestCommand.php ├── Models │ ├── Model.php │ └── Register │ │ ├── Register_V1_0.php │ │ └── Register_V1_1.php ├── Services │ ├── DB.php │ ├── Logger.php │ ├── Mail.php │ └── Redis.php └── Traits │ ├── FormatTrait.php │ └── VersionTrait.php ├── bootstrap └── autoload.php ├── composer.json ├── composer.lock ├── phpunit.xml ├── public └── index.php ├── route └── api.php ├── storage └── .gitignore ├── support └── helper.php ├── task.php └── tests ├── HelperTest.php └── ServiceTest.php /.env.example: -------------------------------------------------------------------------------- 1 | APP_DEBUG=true 2 | TIMEZONE=Asia/Shanghai 3 | 4 | # Database config 5 | # [required] 6 | DB_TYPE=mysql 7 | DB_NAME=test 8 | DB_HOST=127.0.0.1 9 | DB_USERNAME=root 10 | DB_PASSWORD= 11 | # [optional] 12 | DB_PORT= 13 | DB_CHARSET= 14 | DB_PREFIX= 15 | 16 | # Mail 17 | MAIL_HOST= 18 | MAIL_USERNAME= 19 | MAIL_PASSWORD= 20 | MAIL_FROM_ADDRESS= 21 | MAIL_FROM_NAME= 22 | 23 | # Redis config 24 | REDIS_SCHEME=tcp 25 | REDIS_HOST=127.0.0.1 26 | REDIS_PORT=6379 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | /.idea 3 | /vendor 4 | .DS_Store 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Moext 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | 6 | License 7 |

8 | 9 | ## Introduction 10 | **Moant is a php micro framework powered by slim.Used for easy and quick development api.** 11 | **Moant have the following characteristics:** 12 | * **restful api route** 13 | * **flexible api version control** 14 | * **customize package** 15 | * **php cli command** 16 | * ...... 17 | 18 | ## Installation 19 | ``` 20 | composer create-project pygroos/moant your-app '1.0.*' --prefer-dist -vvv 21 | ``` 22 | 23 | ## Example 24 | * **Route** 25 | ``` 26 | $app->get('/', '\App\Api\DemoApi:test'); 27 | ``` 28 | * **Config** 29 | ``` 30 | APP_DEBUG=true 31 | TIMEZONE=Asia/Shanghai 32 | 33 | # Database config 34 | # [required] 35 | DB_TYPE=mysql 36 | DB_NAME=test 37 | DB_HOST=127.0.0.1 38 | DB_USERNAME=root 39 | DB_PASSWORD= 40 | # [optional] 41 | DB_PORT= 42 | DB_CHARSET= 43 | DB_PREFIX= 44 | 45 | # Redis config 46 | REDIS_SCHEME=tcp 47 | REDIS_HOST=127.0.0.1 48 | REDIS_PORT=6379 49 | ``` 50 | * **Api demo** 51 | ``` 52 | request->getParam('param', 0); 66 | 67 | // DB Service Example 68 | $db = DB::getInstance(); 69 | $arrUser = $db->select('users', ['username']); 70 | 71 | // Redis Service Example 72 | $redis = Redis::getInstance(); 73 | $redis->setex('redis_key', 3600, json_encode($arrUser)); 74 | 75 | // Logger Service Example 76 | Logger::add( 77 | 'name', 78 | [ 79 | $this->request->getUri(), 80 | $this->request->getMethod() 81 | ] 82 | ); 83 | 84 | return $this->outPut( 85 | 200, 86 | 'success', 87 | ['project' => 'Moant Framework'], 88 | $this->version 89 | ); 90 | } 91 | } 92 | ``` 93 | 94 | * **Command** 95 | ``` 96 | php task.php [Class] [Method] [(optional) param ...] 97 | ``` 98 | 99 | ## In use package 100 | * [Medoo](https://medoo.in/) 101 | * [Predis](https://github.com/nrk/predis/wiki) 102 | * [Monolog](https://seldaek.github.io/monolog/) 103 | * [Phpdotenv](https://github.com/vlucas/phpdotenv/blob/master/README.md) 104 | * [Guzzle](http://docs.guzzlephp.org/en/stable/overview.html) 105 | 106 | ## Video tutorial 107 | http://study.163.com/course/introduction/1004712047.htm 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /app/Api/BaseApi.php: -------------------------------------------------------------------------------- 1 | c = $ci; 20 | $this->request = $this->c->get('request'); 21 | $this->response = $this->c->get('response'); 22 | 23 | if ($this->getVersionForHeader()) 24 | { 25 | $this->version = $this->getVersionForHeader(); 26 | } 27 | else 28 | { 29 | $this->version = $this->request->getParam('v') ? $this->request->getParam('v') : '1.0'; 30 | } 31 | } 32 | 33 | public function outPut($code, $message = '', $data = [], $version = '1.0') 34 | { 35 | return $this->response->withJson( 36 | [ 37 | 'code' => $code, 38 | 'message' => $message, 39 | 'data' => $data, 40 | 'version' => $version, 41 | 'runtime' => intval((microtime(true) - SERVICE_START) * 1000), 42 | ] 43 | ); 44 | } 45 | } -------------------------------------------------------------------------------- /app/Api/DemoApi.php: -------------------------------------------------------------------------------- 1 | select('users', ['username']); 16 | 17 | // Redis Service Example 18 | $redis = Redis::getInstance(); 19 | $redis->setex('redis_key', 3600, json_encode($arrUser)); 20 | 21 | // Logger Service Example 22 | Logger::add( 23 | 'name', 24 | [ 25 | $this->request->getUri(), 26 | $this->request->getMethod() 27 | ] 28 | ); 29 | 30 | return $this->outPut( 31 | 200, 32 | 'success', 33 | ['project' => 'Moant Framework'], 34 | $this->version 35 | ); 36 | } 37 | } -------------------------------------------------------------------------------- /app/Api/RegisterApi.php: -------------------------------------------------------------------------------- 1 | request->getParam('email', ''); 13 | $username = $this->request->getParam('username', ''); 14 | $password = $this->request->getParam('password', ''); 15 | 16 | $this->getInstanceByVersion()->store($email, $username, $password); 17 | } 18 | 19 | private function getInstanceByVersion() 20 | { 21 | $ret = null; 22 | 23 | if (0 == strcmp('1.1', $this->version)) 24 | { 25 | $ret = Register_V1_1::getInstance(); 26 | } 27 | else 28 | { 29 | $ret = Register_V1_0::getInstance(); 30 | } 31 | 32 | return $ret; 33 | } 34 | 35 | } -------------------------------------------------------------------------------- /app/Command/TestCommand.php: -------------------------------------------------------------------------------- 1 | modelVersion = '1.0'; 18 | 19 | $this->db = DB::getInstance(); 20 | $this->redis = Redis::getInstance(); 21 | } 22 | 23 | final public static function getInstance() 24 | { 25 | $ret = null; 26 | $className = get_called_class(); 27 | if (false !== $className && is_string($className)) 28 | { 29 | if (! in_array($className, self::$arrInstance)) 30 | { 31 | $ret = self::$arrInstance[$className] = new $className(); 32 | } 33 | else 34 | { 35 | $ret = self::$arrInstance[$className]; 36 | } 37 | } 38 | return $ret; 39 | } 40 | 41 | final public function getModelVersion() 42 | { 43 | return $this->modelVersion; 44 | } 45 | 46 | final public function setModelVersion($version) 47 | { 48 | $this->modelVersion = $version; 49 | } 50 | 51 | final private function __clone() {} 52 | } -------------------------------------------------------------------------------- /app/Models/Register/Register_V1_0.php: -------------------------------------------------------------------------------- 1 | setModelVersion('1.1'); 11 | } 12 | 13 | public function store($email, $username, $password) 14 | { 15 | 16 | } 17 | 18 | public function verify() 19 | { 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Services/DB.php: -------------------------------------------------------------------------------- 1 | env('DB_TYPE', 'mysql'), 21 | 'database_name' => env('DB_NAME'), 22 | 'server' => env('DB_HOST'), 23 | 'username' => env('DB_USERNAME'), 24 | 'password' => env('DB_PASSWORD'), 25 | 'charset' => env('DB_CHARSET', 'utf8'), 26 | 'port' => env('DB_PORT', 3306), 27 | 'prefix' => env('DB_PREFIX', ''), 28 | ] 29 | ); 30 | } 31 | 32 | return self::$instance; 33 | } 34 | } -------------------------------------------------------------------------------- /app/Services/Logger.php: -------------------------------------------------------------------------------- 1 | pushHandler(new StreamHandler($path . $name .'.'. date('Y-m-d') . '.log', $level)); 16 | 17 | $log->info($name, $data); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Services/Mail.php: -------------------------------------------------------------------------------- 1 | '; 13 | $mail = new Message; 14 | $mail->setFrom($setForm); 15 | $mail->addTo($address); 16 | $mail->setSubject($subject); 17 | $mail->setBody($content); 18 | 19 | $mailer = new SmtpMailer([ 20 | 'host' => env('MAIL_HOST'), 21 | 'username' => env('MAIL_USERNAME'), 22 | 'password' => env('MAIL_PASSWORD'), 23 | 'port' => 465, 24 | 'secure' => 'ssl' 25 | ]); 26 | $mailer->send($mail); 27 | } 28 | } -------------------------------------------------------------------------------- /app/Services/Redis.php: -------------------------------------------------------------------------------- 1 | env('REDIS_SCHEME', 'tcp:'), 20 | 'host' => env('REDIS_HOST', '127.0.0.1'), 21 | 'port' => env('REDIS_PORT', 6379), 22 | ]); 23 | } 24 | 25 | return self::$instance; 26 | } 27 | } -------------------------------------------------------------------------------- /app/Traits/FormatTrait.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pygroos/moant/5252e6c44af42a577a1eb22e4660be17aba0135b/app/Traits/FormatTrait.php -------------------------------------------------------------------------------- /app/Traits/VersionTrait.php: -------------------------------------------------------------------------------- 1 | 0) 19 | { 20 | $version = substr($accept, $pos + strlen($needle)); 21 | if (strlen($version) > 0) 22 | { 23 | $ret = trim($version, '\r\n\t'); 24 | } 25 | } 26 | } 27 | 28 | return $ret; 29 | } 30 | } -------------------------------------------------------------------------------- /bootstrap/autoload.php: -------------------------------------------------------------------------------- 1 | load(); 10 | $currentKeys = array_keys($_ENV); 11 | $newKeys = array_diff($currentKeys, $previousKeys); 12 | array_map(function($key) { 13 | unset($_SERVER[$key]); 14 | }, $newKeys); 15 | 16 | // Set timezone 17 | @ date_default_timezone_set(env('TIMEZONE', 'UTC')); 18 | 19 | if ('cli-server' == SAPI_TYPE) { 20 | // Create app 21 | $app = new \Slim\App( 22 | [ 23 | 'settings' => [ 24 | 'displayErrorDetails' => env('APP_DEBUG', true) 25 | ] 26 | ] 27 | ); 28 | // Get container 29 | $container = $app->getContainer(); 30 | 31 | // Require api route file 32 | require dirname(__FILE__) . '/../route/api.php'; 33 | } 34 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pygroos/moant", 3 | "description": "Micro framework powered by slim", 4 | "keywords": ["framework","slim","moant"], 5 | "license": "MIT", 6 | "type": "project", 7 | "authors": [ 8 | { 9 | "name": "pygroos", 10 | "email": "pygroos@gmail.com" 11 | } 12 | ], 13 | "require": { 14 | "php": ">=5.5.0", 15 | "slim/slim": "^3.8", 16 | "catfan/medoo": "^1.4", 17 | "predis/predis": "^1.1", 18 | "monolog/monolog": "^1.23", 19 | "vlucas/phpdotenv": "^2.4", 20 | "guzzlehttp/guzzle": "^6.3", 21 | "nette/mail": "^3.0" 22 | }, 23 | "require-dev": { 24 | "phpunit/phpunit": "^6.4" 25 | }, 26 | "autoload": { 27 | "files": ["support/helper.php"], 28 | "psr-4": { 29 | "App\\": "app/" 30 | } 31 | }, 32 | "minimum-stability": "stable", 33 | "scripts": { 34 | "post-root-package-install": [ 35 | "php -r \"copy('.env.example', '.env');\"" 36 | ], 37 | "post-create-project-cmd": [ 38 | "composer dump-autoload -o" 39 | ] 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /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": "2cb7165b8e79c3a3a873559cbb9275c0", 8 | "packages": [ 9 | { 10 | "name": "catfan/medoo", 11 | "version": "v1.5.2", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/catfan/Medoo.git", 15 | "reference": "d65fad6c087e5904803e0dfd4e7a984d0eda77ef" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/catfan/Medoo/zipball/d65fad6c087e5904803e0dfd4e7a984d0eda77ef", 20 | "reference": "d65fad6c087e5904803e0dfd4e7a984d0eda77ef", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "ext-pdo": "*", 25 | "php": ">=5.4" 26 | }, 27 | "suggest": { 28 | "ext-pdo_dblib": "For MSSQL or Sybase database on Linux/UNIX platform", 29 | "ext-pdo_mysql": "For MySQL or MariaDB database", 30 | "ext-pdo_oci": "For Oracle database", 31 | "ext-pdo_oci8": "For Oracle version 8 database", 32 | "ext-pdo_pqsql": "For PostgreSQL database", 33 | "ext-pdo_sqlite": "For SQLite database", 34 | "ext-pdo_sqlsrv": "For MSSQL database" 35 | }, 36 | "type": "framework", 37 | "autoload": { 38 | "psr-4": { 39 | "Medoo\\": "/src" 40 | } 41 | }, 42 | "notification-url": "https://packagist.org/downloads/", 43 | "license": [ 44 | "MIT" 45 | ], 46 | "authors": [ 47 | { 48 | "name": "Angel Lai", 49 | "email": "angel@catfan.me" 50 | } 51 | ], 52 | "description": "The lightest PHP database framework to accelerate development", 53 | "homepage": "https://medoo.in", 54 | "keywords": [ 55 | "database", 56 | "lightweight", 57 | "mariadb", 58 | "mssql", 59 | "mysql", 60 | "oracle", 61 | "php framework", 62 | "postgresql", 63 | "sql", 64 | "sqlite" 65 | ], 66 | "time": "2017-12-01T14:31:32+00:00" 67 | }, 68 | { 69 | "name": "container-interop/container-interop", 70 | "version": "1.2.0", 71 | "source": { 72 | "type": "git", 73 | "url": "https://github.com/container-interop/container-interop.git", 74 | "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" 75 | }, 76 | "dist": { 77 | "type": "zip", 78 | "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", 79 | "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", 80 | "shasum": "" 81 | }, 82 | "require": { 83 | "psr/container": "^1.0" 84 | }, 85 | "type": "library", 86 | "autoload": { 87 | "psr-4": { 88 | "Interop\\Container\\": "src/Interop/Container/" 89 | } 90 | }, 91 | "notification-url": "https://packagist.org/downloads/", 92 | "license": [ 93 | "MIT" 94 | ], 95 | "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", 96 | "homepage": "https://github.com/container-interop/container-interop", 97 | "time": "2017-02-14T19:40:03+00:00" 98 | }, 99 | { 100 | "name": "guzzlehttp/guzzle", 101 | "version": "6.3.0", 102 | "source": { 103 | "type": "git", 104 | "url": "https://github.com/guzzle/guzzle.git", 105 | "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" 106 | }, 107 | "dist": { 108 | "type": "zip", 109 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", 110 | "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", 111 | "shasum": "" 112 | }, 113 | "require": { 114 | "guzzlehttp/promises": "^1.0", 115 | "guzzlehttp/psr7": "^1.4", 116 | "php": ">=5.5" 117 | }, 118 | "require-dev": { 119 | "ext-curl": "*", 120 | "phpunit/phpunit": "^4.0 || ^5.0", 121 | "psr/log": "^1.0" 122 | }, 123 | "suggest": { 124 | "psr/log": "Required for using the Log middleware" 125 | }, 126 | "type": "library", 127 | "extra": { 128 | "branch-alias": { 129 | "dev-master": "6.2-dev" 130 | } 131 | }, 132 | "autoload": { 133 | "files": [ 134 | "src/functions_include.php" 135 | ], 136 | "psr-4": { 137 | "GuzzleHttp\\": "src/" 138 | } 139 | }, 140 | "notification-url": "https://packagist.org/downloads/", 141 | "license": [ 142 | "MIT" 143 | ], 144 | "authors": [ 145 | { 146 | "name": "Michael Dowling", 147 | "email": "mtdowling@gmail.com", 148 | "homepage": "https://github.com/mtdowling" 149 | } 150 | ], 151 | "description": "Guzzle is a PHP HTTP client library", 152 | "homepage": "http://guzzlephp.org/", 153 | "keywords": [ 154 | "client", 155 | "curl", 156 | "framework", 157 | "http", 158 | "http client", 159 | "rest", 160 | "web service" 161 | ], 162 | "time": "2017-06-22T18:50:49+00:00" 163 | }, 164 | { 165 | "name": "guzzlehttp/promises", 166 | "version": "v1.3.1", 167 | "source": { 168 | "type": "git", 169 | "url": "https://github.com/guzzle/promises.git", 170 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" 171 | }, 172 | "dist": { 173 | "type": "zip", 174 | "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", 175 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", 176 | "shasum": "" 177 | }, 178 | "require": { 179 | "php": ">=5.5.0" 180 | }, 181 | "require-dev": { 182 | "phpunit/phpunit": "^4.0" 183 | }, 184 | "type": "library", 185 | "extra": { 186 | "branch-alias": { 187 | "dev-master": "1.4-dev" 188 | } 189 | }, 190 | "autoload": { 191 | "psr-4": { 192 | "GuzzleHttp\\Promise\\": "src/" 193 | }, 194 | "files": [ 195 | "src/functions_include.php" 196 | ] 197 | }, 198 | "notification-url": "https://packagist.org/downloads/", 199 | "license": [ 200 | "MIT" 201 | ], 202 | "authors": [ 203 | { 204 | "name": "Michael Dowling", 205 | "email": "mtdowling@gmail.com", 206 | "homepage": "https://github.com/mtdowling" 207 | } 208 | ], 209 | "description": "Guzzle promises library", 210 | "keywords": [ 211 | "promise" 212 | ], 213 | "time": "2016-12-20T10:07:11+00:00" 214 | }, 215 | { 216 | "name": "guzzlehttp/psr7", 217 | "version": "1.4.2", 218 | "source": { 219 | "type": "git", 220 | "url": "https://github.com/guzzle/psr7.git", 221 | "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" 222 | }, 223 | "dist": { 224 | "type": "zip", 225 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", 226 | "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", 227 | "shasum": "" 228 | }, 229 | "require": { 230 | "php": ">=5.4.0", 231 | "psr/http-message": "~1.0" 232 | }, 233 | "provide": { 234 | "psr/http-message-implementation": "1.0" 235 | }, 236 | "require-dev": { 237 | "phpunit/phpunit": "~4.0" 238 | }, 239 | "type": "library", 240 | "extra": { 241 | "branch-alias": { 242 | "dev-master": "1.4-dev" 243 | } 244 | }, 245 | "autoload": { 246 | "psr-4": { 247 | "GuzzleHttp\\Psr7\\": "src/" 248 | }, 249 | "files": [ 250 | "src/functions_include.php" 251 | ] 252 | }, 253 | "notification-url": "https://packagist.org/downloads/", 254 | "license": [ 255 | "MIT" 256 | ], 257 | "authors": [ 258 | { 259 | "name": "Michael Dowling", 260 | "email": "mtdowling@gmail.com", 261 | "homepage": "https://github.com/mtdowling" 262 | }, 263 | { 264 | "name": "Tobias Schultze", 265 | "homepage": "https://github.com/Tobion" 266 | } 267 | ], 268 | "description": "PSR-7 message implementation that also provides common utility methods", 269 | "keywords": [ 270 | "http", 271 | "message", 272 | "request", 273 | "response", 274 | "stream", 275 | "uri", 276 | "url" 277 | ], 278 | "time": "2017-03-20T17:10:46+00:00" 279 | }, 280 | { 281 | "name": "monolog/monolog", 282 | "version": "1.23.0", 283 | "source": { 284 | "type": "git", 285 | "url": "https://github.com/Seldaek/monolog.git", 286 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" 287 | }, 288 | "dist": { 289 | "type": "zip", 290 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", 291 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", 292 | "shasum": "" 293 | }, 294 | "require": { 295 | "php": ">=5.3.0", 296 | "psr/log": "~1.0" 297 | }, 298 | "provide": { 299 | "psr/log-implementation": "1.0.0" 300 | }, 301 | "require-dev": { 302 | "aws/aws-sdk-php": "^2.4.9 || ^3.0", 303 | "doctrine/couchdb": "~1.0@dev", 304 | "graylog2/gelf-php": "~1.0", 305 | "jakub-onderka/php-parallel-lint": "0.9", 306 | "php-amqplib/php-amqplib": "~2.4", 307 | "php-console/php-console": "^3.1.3", 308 | "phpunit/phpunit": "~4.5", 309 | "phpunit/phpunit-mock-objects": "2.3.0", 310 | "ruflin/elastica": ">=0.90 <3.0", 311 | "sentry/sentry": "^0.13", 312 | "swiftmailer/swiftmailer": "^5.3|^6.0" 313 | }, 314 | "suggest": { 315 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 316 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 317 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 318 | "ext-mongo": "Allow sending log messages to a MongoDB server", 319 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 320 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", 321 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", 322 | "php-console/php-console": "Allow sending log messages to Google Chrome", 323 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 324 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server", 325 | "sentry/sentry": "Allow sending log messages to a Sentry server" 326 | }, 327 | "type": "library", 328 | "extra": { 329 | "branch-alias": { 330 | "dev-master": "2.0.x-dev" 331 | } 332 | }, 333 | "autoload": { 334 | "psr-4": { 335 | "Monolog\\": "src/Monolog" 336 | } 337 | }, 338 | "notification-url": "https://packagist.org/downloads/", 339 | "license": [ 340 | "MIT" 341 | ], 342 | "authors": [ 343 | { 344 | "name": "Jordi Boggiano", 345 | "email": "j.boggiano@seld.be", 346 | "homepage": "http://seld.be" 347 | } 348 | ], 349 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 350 | "homepage": "http://github.com/Seldaek/monolog", 351 | "keywords": [ 352 | "log", 353 | "logging", 354 | "psr-3" 355 | ], 356 | "time": "2017-06-19T01:22:40+00:00" 357 | }, 358 | { 359 | "name": "nette/mail", 360 | "version": "v3.0.0", 361 | "source": { 362 | "type": "git", 363 | "url": "https://github.com/nette/mail.git", 364 | "reference": "ce0064772ab3a6a01658c7368b63978597d60e08" 365 | }, 366 | "dist": { 367 | "type": "zip", 368 | "url": "https://api.github.com/repos/nette/mail/zipball/ce0064772ab3a6a01658c7368b63978597d60e08", 369 | "reference": "ce0064772ab3a6a01658c7368b63978597d60e08", 370 | "shasum": "" 371 | }, 372 | "require": { 373 | "ext-iconv": "*", 374 | "nette/utils": "^2.4 || ^3.0", 375 | "php": ">=7.1" 376 | }, 377 | "conflict": { 378 | "nette/nette": "<2.2" 379 | }, 380 | "require-dev": { 381 | "nette/di": "^3.0.0", 382 | "nette/tester": "^2.0", 383 | "tracy/tracy": "^2.4" 384 | }, 385 | "suggest": { 386 | "ext-fileinfo": "to detect type of attached files" 387 | }, 388 | "type": "library", 389 | "extra": { 390 | "branch-alias": { 391 | "dev-master": "3.0-dev" 392 | } 393 | }, 394 | "autoload": { 395 | "classmap": [ 396 | "src/" 397 | ] 398 | }, 399 | "notification-url": "https://packagist.org/downloads/", 400 | "license": [ 401 | "BSD-3-Clause", 402 | "GPL-2.0", 403 | "GPL-3.0" 404 | ], 405 | "authors": [ 406 | { 407 | "name": "David Grudl", 408 | "homepage": "https://davidgrudl.com" 409 | }, 410 | { 411 | "name": "Nette Community", 412 | "homepage": "https://nette.org/contributors" 413 | } 414 | ], 415 | "description": "📧 Nette Mail: handy email creation and transfer library for PHP with both text and MIME-compliant support.", 416 | "homepage": "https://nette.org", 417 | "keywords": [ 418 | "mail", 419 | "mailer", 420 | "mime", 421 | "nette", 422 | "smtp" 423 | ], 424 | "time": "2019-02-20T06:53:15+00:00" 425 | }, 426 | { 427 | "name": "nette/utils", 428 | "version": "v3.0.0", 429 | "source": { 430 | "type": "git", 431 | "url": "https://github.com/nette/utils.git", 432 | "reference": "ec1e4055c295d73bb9e8ce27be859f434a6f6806" 433 | }, 434 | "dist": { 435 | "type": "zip", 436 | "url": "https://api.github.com/repos/nette/utils/zipball/ec1e4055c295d73bb9e8ce27be859f434a6f6806", 437 | "reference": "ec1e4055c295d73bb9e8ce27be859f434a6f6806", 438 | "shasum": "" 439 | }, 440 | "require": { 441 | "php": ">=7.1" 442 | }, 443 | "conflict": { 444 | "nette/nette": "<2.2" 445 | }, 446 | "require-dev": { 447 | "nette/tester": "~2.0", 448 | "tracy/tracy": "^2.3" 449 | }, 450 | "suggest": { 451 | "ext-gd": "to use Image", 452 | "ext-iconv": "to use Strings::webalize() and toAscii()", 453 | "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", 454 | "ext-json": "to use Nette\\Utils\\Json", 455 | "ext-mbstring": "to use Strings::lower() etc...", 456 | "ext-xml": "to use Strings::length() etc. when mbstring is not available" 457 | }, 458 | "type": "library", 459 | "extra": { 460 | "branch-alias": { 461 | "dev-master": "3.0-dev" 462 | } 463 | }, 464 | "autoload": { 465 | "classmap": [ 466 | "src/" 467 | ] 468 | }, 469 | "notification-url": "https://packagist.org/downloads/", 470 | "license": [ 471 | "BSD-3-Clause", 472 | "GPL-2.0", 473 | "GPL-3.0" 474 | ], 475 | "authors": [ 476 | { 477 | "name": "David Grudl", 478 | "homepage": "https://davidgrudl.com" 479 | }, 480 | { 481 | "name": "Nette Community", 482 | "homepage": "https://nette.org/contributors" 483 | } 484 | ], 485 | "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", 486 | "homepage": "https://nette.org", 487 | "keywords": [ 488 | "array", 489 | "core", 490 | "datetime", 491 | "images", 492 | "json", 493 | "nette", 494 | "paginator", 495 | "password", 496 | "slugify", 497 | "string", 498 | "unicode", 499 | "utf-8", 500 | "utility", 501 | "validation" 502 | ], 503 | "time": "2019-02-05T21:43:00+00:00" 504 | }, 505 | { 506 | "name": "nikic/fast-route", 507 | "version": "v1.2.0", 508 | "source": { 509 | "type": "git", 510 | "url": "https://github.com/nikic/FastRoute.git", 511 | "reference": "b5f95749071c82a8e0f58586987627054400cdf6" 512 | }, 513 | "dist": { 514 | "type": "zip", 515 | "url": "https://api.github.com/repos/nikic/FastRoute/zipball/b5f95749071c82a8e0f58586987627054400cdf6", 516 | "reference": "b5f95749071c82a8e0f58586987627054400cdf6", 517 | "shasum": "" 518 | }, 519 | "require": { 520 | "php": ">=5.4.0" 521 | }, 522 | "type": "library", 523 | "autoload": { 524 | "psr-4": { 525 | "FastRoute\\": "src/" 526 | }, 527 | "files": [ 528 | "src/functions.php" 529 | ] 530 | }, 531 | "notification-url": "https://packagist.org/downloads/", 532 | "license": [ 533 | "BSD-3-Clause" 534 | ], 535 | "authors": [ 536 | { 537 | "name": "Nikita Popov", 538 | "email": "nikic@php.net" 539 | } 540 | ], 541 | "description": "Fast request router for PHP", 542 | "keywords": [ 543 | "router", 544 | "routing" 545 | ], 546 | "time": "2017-01-19T11:35:12+00:00" 547 | }, 548 | { 549 | "name": "pimple/pimple", 550 | "version": "v3.2.2", 551 | "source": { 552 | "type": "git", 553 | "url": "https://github.com/silexphp/Pimple.git", 554 | "reference": "4d45fb62d96418396ec58ba76e6f065bca16e10a" 555 | }, 556 | "dist": { 557 | "type": "zip", 558 | "url": "https://api.github.com/repos/silexphp/Pimple/zipball/4d45fb62d96418396ec58ba76e6f065bca16e10a", 559 | "reference": "4d45fb62d96418396ec58ba76e6f065bca16e10a", 560 | "shasum": "" 561 | }, 562 | "require": { 563 | "php": ">=5.3.0", 564 | "psr/container": "^1.0" 565 | }, 566 | "require-dev": { 567 | "symfony/phpunit-bridge": "^3.2" 568 | }, 569 | "type": "library", 570 | "extra": { 571 | "branch-alias": { 572 | "dev-master": "3.2.x-dev" 573 | } 574 | }, 575 | "autoload": { 576 | "psr-0": { 577 | "Pimple": "src/" 578 | } 579 | }, 580 | "notification-url": "https://packagist.org/downloads/", 581 | "license": [ 582 | "MIT" 583 | ], 584 | "authors": [ 585 | { 586 | "name": "Fabien Potencier", 587 | "email": "fabien@symfony.com" 588 | } 589 | ], 590 | "description": "Pimple, a simple Dependency Injection Container", 591 | "homepage": "http://pimple.sensiolabs.org", 592 | "keywords": [ 593 | "container", 594 | "dependency injection" 595 | ], 596 | "time": "2017-07-23T07:32:15+00:00" 597 | }, 598 | { 599 | "name": "predis/predis", 600 | "version": "v1.1.1", 601 | "source": { 602 | "type": "git", 603 | "url": "https://github.com/nrk/predis.git", 604 | "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1" 605 | }, 606 | "dist": { 607 | "type": "zip", 608 | "url": "https://api.github.com/repos/nrk/predis/zipball/f0210e38881631afeafb56ab43405a92cafd9fd1", 609 | "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1", 610 | "shasum": "" 611 | }, 612 | "require": { 613 | "php": ">=5.3.9" 614 | }, 615 | "require-dev": { 616 | "phpunit/phpunit": "~4.8" 617 | }, 618 | "suggest": { 619 | "ext-curl": "Allows access to Webdis when paired with phpiredis", 620 | "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" 621 | }, 622 | "type": "library", 623 | "autoload": { 624 | "psr-4": { 625 | "Predis\\": "src/" 626 | } 627 | }, 628 | "notification-url": "https://packagist.org/downloads/", 629 | "license": [ 630 | "MIT" 631 | ], 632 | "authors": [ 633 | { 634 | "name": "Daniele Alessandri", 635 | "email": "suppakilla@gmail.com", 636 | "homepage": "http://clorophilla.net" 637 | } 638 | ], 639 | "description": "Flexible and feature-complete Redis client for PHP and HHVM", 640 | "homepage": "http://github.com/nrk/predis", 641 | "keywords": [ 642 | "nosql", 643 | "predis", 644 | "redis" 645 | ], 646 | "time": "2016-06-16T16:22:20+00:00" 647 | }, 648 | { 649 | "name": "psr/container", 650 | "version": "1.0.0", 651 | "source": { 652 | "type": "git", 653 | "url": "https://github.com/php-fig/container.git", 654 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 655 | }, 656 | "dist": { 657 | "type": "zip", 658 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 659 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 660 | "shasum": "" 661 | }, 662 | "require": { 663 | "php": ">=5.3.0" 664 | }, 665 | "type": "library", 666 | "extra": { 667 | "branch-alias": { 668 | "dev-master": "1.0.x-dev" 669 | } 670 | }, 671 | "autoload": { 672 | "psr-4": { 673 | "Psr\\Container\\": "src/" 674 | } 675 | }, 676 | "notification-url": "https://packagist.org/downloads/", 677 | "license": [ 678 | "MIT" 679 | ], 680 | "authors": [ 681 | { 682 | "name": "PHP-FIG", 683 | "homepage": "http://www.php-fig.org/" 684 | } 685 | ], 686 | "description": "Common Container Interface (PHP FIG PSR-11)", 687 | "homepage": "https://github.com/php-fig/container", 688 | "keywords": [ 689 | "PSR-11", 690 | "container", 691 | "container-interface", 692 | "container-interop", 693 | "psr" 694 | ], 695 | "time": "2017-02-14T16:28:37+00:00" 696 | }, 697 | { 698 | "name": "psr/http-message", 699 | "version": "1.0.1", 700 | "source": { 701 | "type": "git", 702 | "url": "https://github.com/php-fig/http-message.git", 703 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 704 | }, 705 | "dist": { 706 | "type": "zip", 707 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 708 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 709 | "shasum": "" 710 | }, 711 | "require": { 712 | "php": ">=5.3.0" 713 | }, 714 | "type": "library", 715 | "extra": { 716 | "branch-alias": { 717 | "dev-master": "1.0.x-dev" 718 | } 719 | }, 720 | "autoload": { 721 | "psr-4": { 722 | "Psr\\Http\\Message\\": "src/" 723 | } 724 | }, 725 | "notification-url": "https://packagist.org/downloads/", 726 | "license": [ 727 | "MIT" 728 | ], 729 | "authors": [ 730 | { 731 | "name": "PHP-FIG", 732 | "homepage": "http://www.php-fig.org/" 733 | } 734 | ], 735 | "description": "Common interface for HTTP messages", 736 | "homepage": "https://github.com/php-fig/http-message", 737 | "keywords": [ 738 | "http", 739 | "http-message", 740 | "psr", 741 | "psr-7", 742 | "request", 743 | "response" 744 | ], 745 | "time": "2016-08-06T14:39:51+00:00" 746 | }, 747 | { 748 | "name": "psr/log", 749 | "version": "1.0.2", 750 | "source": { 751 | "type": "git", 752 | "url": "https://github.com/php-fig/log.git", 753 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 754 | }, 755 | "dist": { 756 | "type": "zip", 757 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 758 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 759 | "shasum": "" 760 | }, 761 | "require": { 762 | "php": ">=5.3.0" 763 | }, 764 | "type": "library", 765 | "extra": { 766 | "branch-alias": { 767 | "dev-master": "1.0.x-dev" 768 | } 769 | }, 770 | "autoload": { 771 | "psr-4": { 772 | "Psr\\Log\\": "Psr/Log/" 773 | } 774 | }, 775 | "notification-url": "https://packagist.org/downloads/", 776 | "license": [ 777 | "MIT" 778 | ], 779 | "authors": [ 780 | { 781 | "name": "PHP-FIG", 782 | "homepage": "http://www.php-fig.org/" 783 | } 784 | ], 785 | "description": "Common interface for logging libraries", 786 | "homepage": "https://github.com/php-fig/log", 787 | "keywords": [ 788 | "log", 789 | "psr", 790 | "psr-3" 791 | ], 792 | "time": "2016-10-10T12:19:37+00:00" 793 | }, 794 | { 795 | "name": "slim/slim", 796 | "version": "3.9.2", 797 | "source": { 798 | "type": "git", 799 | "url": "https://github.com/slimphp/Slim.git", 800 | "reference": "4086d0106cf5a7135c69fce4161fe355a8feb118" 801 | }, 802 | "dist": { 803 | "type": "zip", 804 | "url": "https://api.github.com/repos/slimphp/Slim/zipball/4086d0106cf5a7135c69fce4161fe355a8feb118", 805 | "reference": "4086d0106cf5a7135c69fce4161fe355a8feb118", 806 | "shasum": "" 807 | }, 808 | "require": { 809 | "container-interop/container-interop": "^1.2", 810 | "nikic/fast-route": "^1.0", 811 | "php": ">=5.5.0", 812 | "pimple/pimple": "^3.0", 813 | "psr/container": "^1.0", 814 | "psr/http-message": "^1.0" 815 | }, 816 | "provide": { 817 | "psr/http-message-implementation": "1.0" 818 | }, 819 | "require-dev": { 820 | "phpunit/phpunit": "^4.0", 821 | "squizlabs/php_codesniffer": "^2.5" 822 | }, 823 | "type": "library", 824 | "autoload": { 825 | "psr-4": { 826 | "Slim\\": "Slim" 827 | } 828 | }, 829 | "notification-url": "https://packagist.org/downloads/", 830 | "license": [ 831 | "MIT" 832 | ], 833 | "authors": [ 834 | { 835 | "name": "Rob Allen", 836 | "email": "rob@akrabat.com", 837 | "homepage": "http://akrabat.com" 838 | }, 839 | { 840 | "name": "Josh Lockhart", 841 | "email": "hello@joshlockhart.com", 842 | "homepage": "https://joshlockhart.com" 843 | }, 844 | { 845 | "name": "Gabriel Manricks", 846 | "email": "gmanricks@me.com", 847 | "homepage": "http://gabrielmanricks.com" 848 | }, 849 | { 850 | "name": "Andrew Smith", 851 | "email": "a.smith@silentworks.co.uk", 852 | "homepage": "http://silentworks.co.uk" 853 | } 854 | ], 855 | "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", 856 | "homepage": "https://slimframework.com", 857 | "keywords": [ 858 | "api", 859 | "framework", 860 | "micro", 861 | "router" 862 | ], 863 | "time": "2017-11-26T19:13:09+00:00" 864 | }, 865 | { 866 | "name": "vlucas/phpdotenv", 867 | "version": "v2.4.0", 868 | "source": { 869 | "type": "git", 870 | "url": "https://github.com/vlucas/phpdotenv.git", 871 | "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c" 872 | }, 873 | "dist": { 874 | "type": "zip", 875 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", 876 | "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", 877 | "shasum": "" 878 | }, 879 | "require": { 880 | "php": ">=5.3.9" 881 | }, 882 | "require-dev": { 883 | "phpunit/phpunit": "^4.8 || ^5.0" 884 | }, 885 | "type": "library", 886 | "extra": { 887 | "branch-alias": { 888 | "dev-master": "2.4-dev" 889 | } 890 | }, 891 | "autoload": { 892 | "psr-4": { 893 | "Dotenv\\": "src/" 894 | } 895 | }, 896 | "notification-url": "https://packagist.org/downloads/", 897 | "license": [ 898 | "BSD-3-Clause-Attribution" 899 | ], 900 | "authors": [ 901 | { 902 | "name": "Vance Lucas", 903 | "email": "vance@vancelucas.com", 904 | "homepage": "http://www.vancelucas.com" 905 | } 906 | ], 907 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", 908 | "keywords": [ 909 | "dotenv", 910 | "env", 911 | "environment" 912 | ], 913 | "time": "2016-09-01T10:05:43+00:00" 914 | } 915 | ], 916 | "packages-dev": [ 917 | { 918 | "name": "doctrine/instantiator", 919 | "version": "1.0.5", 920 | "source": { 921 | "type": "git", 922 | "url": "https://github.com/doctrine/instantiator.git", 923 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" 924 | }, 925 | "dist": { 926 | "type": "zip", 927 | "url": "https://files.phpcomposer.com/files/doctrine/instantiator/8e884e78f9f0eb1329e445619e04456e64d8051d.zip", 928 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", 929 | "shasum": "" 930 | }, 931 | "require": { 932 | "php": ">=5.3,<8.0-DEV" 933 | }, 934 | "require-dev": { 935 | "athletic/athletic": "~0.1.8", 936 | "ext-pdo": "*", 937 | "ext-phar": "*", 938 | "phpunit/phpunit": "~4.0", 939 | "squizlabs/php_codesniffer": "~2.0" 940 | }, 941 | "type": "library", 942 | "extra": { 943 | "branch-alias": { 944 | "dev-master": "1.0.x-dev" 945 | } 946 | }, 947 | "autoload": { 948 | "psr-4": { 949 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 950 | } 951 | }, 952 | "notification-url": "https://packagist.org/downloads/", 953 | "license": [ 954 | "MIT" 955 | ], 956 | "authors": [ 957 | { 958 | "name": "Marco Pivetta", 959 | "email": "ocramius@gmail.com", 960 | "homepage": "http://ocramius.github.com/" 961 | } 962 | ], 963 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 964 | "homepage": "https://github.com/doctrine/instantiator", 965 | "keywords": [ 966 | "constructor", 967 | "instantiate" 968 | ], 969 | "time": "2015-06-14T21:17:01+00:00" 970 | }, 971 | { 972 | "name": "myclabs/deep-copy", 973 | "version": "1.7.0", 974 | "source": { 975 | "type": "git", 976 | "url": "https://github.com/myclabs/DeepCopy.git", 977 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" 978 | }, 979 | "dist": { 980 | "type": "zip", 981 | "url": "https://files.phpcomposer.com/files/myclabs/DeepCopy/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e.zip", 982 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", 983 | "shasum": "" 984 | }, 985 | "require": { 986 | "php": "^5.6 || ^7.0" 987 | }, 988 | "require-dev": { 989 | "doctrine/collections": "^1.0", 990 | "doctrine/common": "^2.6", 991 | "phpunit/phpunit": "^4.1" 992 | }, 993 | "type": "library", 994 | "autoload": { 995 | "psr-4": { 996 | "DeepCopy\\": "src/DeepCopy/" 997 | }, 998 | "files": [ 999 | "src/DeepCopy/deep_copy.php" 1000 | ] 1001 | }, 1002 | "notification-url": "https://packagist.org/downloads/", 1003 | "license": [ 1004 | "MIT" 1005 | ], 1006 | "description": "Create deep copies (clones) of your objects", 1007 | "keywords": [ 1008 | "clone", 1009 | "copy", 1010 | "duplicate", 1011 | "object", 1012 | "object graph" 1013 | ], 1014 | "time": "2017-10-19T19:58:43+00:00" 1015 | }, 1016 | { 1017 | "name": "phar-io/manifest", 1018 | "version": "1.0.1", 1019 | "source": { 1020 | "type": "git", 1021 | "url": "https://github.com/phar-io/manifest.git", 1022 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" 1023 | }, 1024 | "dist": { 1025 | "type": "zip", 1026 | "url": "https://files.phpcomposer.com/files/phar-io/manifest/2df402786ab5368a0169091f61a7c1e0eb6852d0.zip", 1027 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", 1028 | "shasum": "" 1029 | }, 1030 | "require": { 1031 | "ext-dom": "*", 1032 | "ext-phar": "*", 1033 | "phar-io/version": "^1.0.1", 1034 | "php": "^5.6 || ^7.0" 1035 | }, 1036 | "type": "library", 1037 | "extra": { 1038 | "branch-alias": { 1039 | "dev-master": "1.0.x-dev" 1040 | } 1041 | }, 1042 | "autoload": { 1043 | "classmap": [ 1044 | "src/" 1045 | ] 1046 | }, 1047 | "notification-url": "https://packagist.org/downloads/", 1048 | "license": [ 1049 | "BSD-3-Clause" 1050 | ], 1051 | "authors": [ 1052 | { 1053 | "name": "Arne Blankerts", 1054 | "email": "arne@blankerts.de", 1055 | "role": "Developer" 1056 | }, 1057 | { 1058 | "name": "Sebastian Heuer", 1059 | "email": "sebastian@phpeople.de", 1060 | "role": "Developer" 1061 | }, 1062 | { 1063 | "name": "Sebastian Bergmann", 1064 | "email": "sebastian@phpunit.de", 1065 | "role": "Developer" 1066 | } 1067 | ], 1068 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 1069 | "time": "2017-03-05T18:14:27+00:00" 1070 | }, 1071 | { 1072 | "name": "phar-io/version", 1073 | "version": "1.0.1", 1074 | "source": { 1075 | "type": "git", 1076 | "url": "https://github.com/phar-io/version.git", 1077 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" 1078 | }, 1079 | "dist": { 1080 | "type": "zip", 1081 | "url": "https://files.phpcomposer.com/files/phar-io/version/a70c0ced4be299a63d32fa96d9281d03e94041df.zip", 1082 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", 1083 | "shasum": "" 1084 | }, 1085 | "require": { 1086 | "php": "^5.6 || ^7.0" 1087 | }, 1088 | "type": "library", 1089 | "autoload": { 1090 | "classmap": [ 1091 | "src/" 1092 | ] 1093 | }, 1094 | "notification-url": "https://packagist.org/downloads/", 1095 | "license": [ 1096 | "BSD-3-Clause" 1097 | ], 1098 | "authors": [ 1099 | { 1100 | "name": "Arne Blankerts", 1101 | "email": "arne@blankerts.de", 1102 | "role": "Developer" 1103 | }, 1104 | { 1105 | "name": "Sebastian Heuer", 1106 | "email": "sebastian@phpeople.de", 1107 | "role": "Developer" 1108 | }, 1109 | { 1110 | "name": "Sebastian Bergmann", 1111 | "email": "sebastian@phpunit.de", 1112 | "role": "Developer" 1113 | } 1114 | ], 1115 | "description": "Library for handling version information and constraints", 1116 | "time": "2017-03-05T17:38:23+00:00" 1117 | }, 1118 | { 1119 | "name": "phpdocumentor/reflection-common", 1120 | "version": "1.0.1", 1121 | "source": { 1122 | "type": "git", 1123 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 1124 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" 1125 | }, 1126 | "dist": { 1127 | "type": "zip", 1128 | "url": "https://files.phpcomposer.com/files/phpDocumentor/ReflectionCommon/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6.zip", 1129 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 1130 | "shasum": "" 1131 | }, 1132 | "require": { 1133 | "php": ">=5.5" 1134 | }, 1135 | "require-dev": { 1136 | "phpunit/phpunit": "^4.6" 1137 | }, 1138 | "type": "library", 1139 | "extra": { 1140 | "branch-alias": { 1141 | "dev-master": "1.0.x-dev" 1142 | } 1143 | }, 1144 | "autoload": { 1145 | "psr-4": { 1146 | "phpDocumentor\\Reflection\\": [ 1147 | "src" 1148 | ] 1149 | } 1150 | }, 1151 | "notification-url": "https://packagist.org/downloads/", 1152 | "license": [ 1153 | "MIT" 1154 | ], 1155 | "authors": [ 1156 | { 1157 | "name": "Jaap van Otterdijk", 1158 | "email": "opensource@ijaap.nl" 1159 | } 1160 | ], 1161 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 1162 | "homepage": "http://www.phpdoc.org", 1163 | "keywords": [ 1164 | "FQSEN", 1165 | "phpDocumentor", 1166 | "phpdoc", 1167 | "reflection", 1168 | "static analysis" 1169 | ], 1170 | "time": "2017-09-11T18:02:19+00:00" 1171 | }, 1172 | { 1173 | "name": "phpdocumentor/reflection-docblock", 1174 | "version": "4.2.0", 1175 | "source": { 1176 | "type": "git", 1177 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 1178 | "reference": "66465776cfc249844bde6d117abff1d22e06c2da" 1179 | }, 1180 | "dist": { 1181 | "type": "zip", 1182 | "url": "https://files.phpcomposer.com/files/phpDocumentor/ReflectionDocBlock/66465776cfc249844bde6d117abff1d22e06c2da.zip", 1183 | "reference": "66465776cfc249844bde6d117abff1d22e06c2da", 1184 | "shasum": "" 1185 | }, 1186 | "require": { 1187 | "php": "^7.0", 1188 | "phpdocumentor/reflection-common": "^1.0.0", 1189 | "phpdocumentor/type-resolver": "^0.4.0", 1190 | "webmozart/assert": "^1.0" 1191 | }, 1192 | "require-dev": { 1193 | "doctrine/instantiator": "~1.0.5", 1194 | "mockery/mockery": "^1.0", 1195 | "phpunit/phpunit": "^6.4" 1196 | }, 1197 | "type": "library", 1198 | "extra": { 1199 | "branch-alias": { 1200 | "dev-master": "4.x-dev" 1201 | } 1202 | }, 1203 | "autoload": { 1204 | "psr-4": { 1205 | "phpDocumentor\\Reflection\\": [ 1206 | "src/" 1207 | ] 1208 | } 1209 | }, 1210 | "notification-url": "https://packagist.org/downloads/", 1211 | "license": [ 1212 | "MIT" 1213 | ], 1214 | "authors": [ 1215 | { 1216 | "name": "Mike van Riel", 1217 | "email": "me@mikevanriel.com" 1218 | } 1219 | ], 1220 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 1221 | "time": "2017-11-27T17:38:31+00:00" 1222 | }, 1223 | { 1224 | "name": "phpdocumentor/type-resolver", 1225 | "version": "0.4.0", 1226 | "source": { 1227 | "type": "git", 1228 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 1229 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" 1230 | }, 1231 | "dist": { 1232 | "type": "zip", 1233 | "url": "https://files.phpcomposer.com/files/phpDocumentor/TypeResolver/9c977708995954784726e25d0cd1dddf4e65b0f7.zip", 1234 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", 1235 | "shasum": "" 1236 | }, 1237 | "require": { 1238 | "php": "^5.5 || ^7.0", 1239 | "phpdocumentor/reflection-common": "^1.0" 1240 | }, 1241 | "require-dev": { 1242 | "mockery/mockery": "^0.9.4", 1243 | "phpunit/phpunit": "^5.2||^4.8.24" 1244 | }, 1245 | "type": "library", 1246 | "extra": { 1247 | "branch-alias": { 1248 | "dev-master": "1.0.x-dev" 1249 | } 1250 | }, 1251 | "autoload": { 1252 | "psr-4": { 1253 | "phpDocumentor\\Reflection\\": [ 1254 | "src/" 1255 | ] 1256 | } 1257 | }, 1258 | "notification-url": "https://packagist.org/downloads/", 1259 | "license": [ 1260 | "MIT" 1261 | ], 1262 | "authors": [ 1263 | { 1264 | "name": "Mike van Riel", 1265 | "email": "me@mikevanriel.com" 1266 | } 1267 | ], 1268 | "time": "2017-07-14T14:27:02+00:00" 1269 | }, 1270 | { 1271 | "name": "phpspec/prophecy", 1272 | "version": "1.7.3", 1273 | "source": { 1274 | "type": "git", 1275 | "url": "https://github.com/phpspec/prophecy.git", 1276 | "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" 1277 | }, 1278 | "dist": { 1279 | "type": "zip", 1280 | "url": "https://files.phpcomposer.com/files/phpspec/prophecy/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf.zip", 1281 | "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", 1282 | "shasum": "" 1283 | }, 1284 | "require": { 1285 | "doctrine/instantiator": "^1.0.2", 1286 | "php": "^5.3|^7.0", 1287 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", 1288 | "sebastian/comparator": "^1.1|^2.0", 1289 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 1290 | }, 1291 | "require-dev": { 1292 | "phpspec/phpspec": "^2.5|^3.2", 1293 | "phpunit/phpunit": "^4.8.35 || ^5.7" 1294 | }, 1295 | "type": "library", 1296 | "extra": { 1297 | "branch-alias": { 1298 | "dev-master": "1.7.x-dev" 1299 | } 1300 | }, 1301 | "autoload": { 1302 | "psr-0": { 1303 | "Prophecy\\": "src/" 1304 | } 1305 | }, 1306 | "notification-url": "https://packagist.org/downloads/", 1307 | "license": [ 1308 | "MIT" 1309 | ], 1310 | "authors": [ 1311 | { 1312 | "name": "Konstantin Kudryashov", 1313 | "email": "ever.zet@gmail.com", 1314 | "homepage": "http://everzet.com" 1315 | }, 1316 | { 1317 | "name": "Marcello Duarte", 1318 | "email": "marcello.duarte@gmail.com" 1319 | } 1320 | ], 1321 | "description": "Highly opinionated mocking framework for PHP 5.3+", 1322 | "homepage": "https://github.com/phpspec/prophecy", 1323 | "keywords": [ 1324 | "Double", 1325 | "Dummy", 1326 | "fake", 1327 | "mock", 1328 | "spy", 1329 | "stub" 1330 | ], 1331 | "time": "2017-11-24T13:59:53+00:00" 1332 | }, 1333 | { 1334 | "name": "phpunit/php-code-coverage", 1335 | "version": "5.3.0", 1336 | "source": { 1337 | "type": "git", 1338 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1339 | "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1" 1340 | }, 1341 | "dist": { 1342 | "type": "zip", 1343 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-code-coverage/661f34d0bd3f1a7225ef491a70a020ad23a057a1.zip", 1344 | "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1", 1345 | "shasum": "" 1346 | }, 1347 | "require": { 1348 | "ext-dom": "*", 1349 | "ext-xmlwriter": "*", 1350 | "php": "^7.0", 1351 | "phpunit/php-file-iterator": "^1.4.2", 1352 | "phpunit/php-text-template": "^1.2.1", 1353 | "phpunit/php-token-stream": "^2.0.1", 1354 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 1355 | "sebastian/environment": "^3.0", 1356 | "sebastian/version": "^2.0.1", 1357 | "theseer/tokenizer": "^1.1" 1358 | }, 1359 | "require-dev": { 1360 | "phpunit/phpunit": "^6.0" 1361 | }, 1362 | "suggest": { 1363 | "ext-xdebug": "^2.5.5" 1364 | }, 1365 | "type": "library", 1366 | "extra": { 1367 | "branch-alias": { 1368 | "dev-master": "5.3.x-dev" 1369 | } 1370 | }, 1371 | "autoload": { 1372 | "classmap": [ 1373 | "src/" 1374 | ] 1375 | }, 1376 | "notification-url": "https://packagist.org/downloads/", 1377 | "license": [ 1378 | "BSD-3-Clause" 1379 | ], 1380 | "authors": [ 1381 | { 1382 | "name": "Sebastian Bergmann", 1383 | "email": "sebastian@phpunit.de", 1384 | "role": "lead" 1385 | } 1386 | ], 1387 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1388 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1389 | "keywords": [ 1390 | "coverage", 1391 | "testing", 1392 | "xunit" 1393 | ], 1394 | "time": "2017-12-06T09:29:45+00:00" 1395 | }, 1396 | { 1397 | "name": "phpunit/php-file-iterator", 1398 | "version": "1.4.5", 1399 | "source": { 1400 | "type": "git", 1401 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1402 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" 1403 | }, 1404 | "dist": { 1405 | "type": "zip", 1406 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-file-iterator/730b01bc3e867237eaac355e06a36b85dd93a8b4.zip", 1407 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", 1408 | "shasum": "" 1409 | }, 1410 | "require": { 1411 | "php": ">=5.3.3" 1412 | }, 1413 | "type": "library", 1414 | "extra": { 1415 | "branch-alias": { 1416 | "dev-master": "1.4.x-dev" 1417 | } 1418 | }, 1419 | "autoload": { 1420 | "classmap": [ 1421 | "src/" 1422 | ] 1423 | }, 1424 | "notification-url": "https://packagist.org/downloads/", 1425 | "license": [ 1426 | "BSD-3-Clause" 1427 | ], 1428 | "authors": [ 1429 | { 1430 | "name": "Sebastian Bergmann", 1431 | "email": "sb@sebastian-bergmann.de", 1432 | "role": "lead" 1433 | } 1434 | ], 1435 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1436 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1437 | "keywords": [ 1438 | "filesystem", 1439 | "iterator" 1440 | ], 1441 | "time": "2017-11-27T13:52:08+00:00" 1442 | }, 1443 | { 1444 | "name": "phpunit/php-text-template", 1445 | "version": "1.2.1", 1446 | "source": { 1447 | "type": "git", 1448 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1449 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 1450 | }, 1451 | "dist": { 1452 | "type": "zip", 1453 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-text-template/31f8b717e51d9a2afca6c9f046f5d69fc27c8686.zip", 1454 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1455 | "shasum": "" 1456 | }, 1457 | "require": { 1458 | "php": ">=5.3.3" 1459 | }, 1460 | "type": "library", 1461 | "autoload": { 1462 | "classmap": [ 1463 | "src/" 1464 | ] 1465 | }, 1466 | "notification-url": "https://packagist.org/downloads/", 1467 | "license": [ 1468 | "BSD-3-Clause" 1469 | ], 1470 | "authors": [ 1471 | { 1472 | "name": "Sebastian Bergmann", 1473 | "email": "sebastian@phpunit.de", 1474 | "role": "lead" 1475 | } 1476 | ], 1477 | "description": "Simple template engine.", 1478 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1479 | "keywords": [ 1480 | "template" 1481 | ], 1482 | "time": "2015-06-21T13:50:34+00:00" 1483 | }, 1484 | { 1485 | "name": "phpunit/php-timer", 1486 | "version": "1.0.9", 1487 | "source": { 1488 | "type": "git", 1489 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1490 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" 1491 | }, 1492 | "dist": { 1493 | "type": "zip", 1494 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-timer/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f.zip", 1495 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 1496 | "shasum": "" 1497 | }, 1498 | "require": { 1499 | "php": "^5.3.3 || ^7.0" 1500 | }, 1501 | "require-dev": { 1502 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 1503 | }, 1504 | "type": "library", 1505 | "extra": { 1506 | "branch-alias": { 1507 | "dev-master": "1.0-dev" 1508 | } 1509 | }, 1510 | "autoload": { 1511 | "classmap": [ 1512 | "src/" 1513 | ] 1514 | }, 1515 | "notification-url": "https://packagist.org/downloads/", 1516 | "license": [ 1517 | "BSD-3-Clause" 1518 | ], 1519 | "authors": [ 1520 | { 1521 | "name": "Sebastian Bergmann", 1522 | "email": "sb@sebastian-bergmann.de", 1523 | "role": "lead" 1524 | } 1525 | ], 1526 | "description": "Utility class for timing", 1527 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1528 | "keywords": [ 1529 | "timer" 1530 | ], 1531 | "time": "2017-02-26T11:10:40+00:00" 1532 | }, 1533 | { 1534 | "name": "phpunit/php-token-stream", 1535 | "version": "2.0.2", 1536 | "source": { 1537 | "type": "git", 1538 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1539 | "reference": "791198a2c6254db10131eecfe8c06670700904db" 1540 | }, 1541 | "dist": { 1542 | "type": "zip", 1543 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-token-stream/791198a2c6254db10131eecfe8c06670700904db.zip", 1544 | "reference": "791198a2c6254db10131eecfe8c06670700904db", 1545 | "shasum": "" 1546 | }, 1547 | "require": { 1548 | "ext-tokenizer": "*", 1549 | "php": "^7.0" 1550 | }, 1551 | "require-dev": { 1552 | "phpunit/phpunit": "^6.2.4" 1553 | }, 1554 | "type": "library", 1555 | "extra": { 1556 | "branch-alias": { 1557 | "dev-master": "2.0-dev" 1558 | } 1559 | }, 1560 | "autoload": { 1561 | "classmap": [ 1562 | "src/" 1563 | ] 1564 | }, 1565 | "notification-url": "https://packagist.org/downloads/", 1566 | "license": [ 1567 | "BSD-3-Clause" 1568 | ], 1569 | "authors": [ 1570 | { 1571 | "name": "Sebastian Bergmann", 1572 | "email": "sebastian@phpunit.de" 1573 | } 1574 | ], 1575 | "description": "Wrapper around PHP's tokenizer extension.", 1576 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1577 | "keywords": [ 1578 | "tokenizer" 1579 | ], 1580 | "time": "2017-11-27T05:48:46+00:00" 1581 | }, 1582 | { 1583 | "name": "phpunit/phpunit", 1584 | "version": "6.5.5", 1585 | "source": { 1586 | "type": "git", 1587 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1588 | "reference": "83d27937a310f2984fd575686138597147bdc7df" 1589 | }, 1590 | "dist": { 1591 | "type": "zip", 1592 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/phpunit/83d27937a310f2984fd575686138597147bdc7df.zip", 1593 | "reference": "83d27937a310f2984fd575686138597147bdc7df", 1594 | "shasum": "" 1595 | }, 1596 | "require": { 1597 | "ext-dom": "*", 1598 | "ext-json": "*", 1599 | "ext-libxml": "*", 1600 | "ext-mbstring": "*", 1601 | "ext-xml": "*", 1602 | "myclabs/deep-copy": "^1.6.1", 1603 | "phar-io/manifest": "^1.0.1", 1604 | "phar-io/version": "^1.0", 1605 | "php": "^7.0", 1606 | "phpspec/prophecy": "^1.7", 1607 | "phpunit/php-code-coverage": "^5.3", 1608 | "phpunit/php-file-iterator": "^1.4.3", 1609 | "phpunit/php-text-template": "^1.2.1", 1610 | "phpunit/php-timer": "^1.0.9", 1611 | "phpunit/phpunit-mock-objects": "^5.0.5", 1612 | "sebastian/comparator": "^2.1", 1613 | "sebastian/diff": "^2.0", 1614 | "sebastian/environment": "^3.1", 1615 | "sebastian/exporter": "^3.1", 1616 | "sebastian/global-state": "^2.0", 1617 | "sebastian/object-enumerator": "^3.0.3", 1618 | "sebastian/resource-operations": "^1.0", 1619 | "sebastian/version": "^2.0.1" 1620 | }, 1621 | "conflict": { 1622 | "phpdocumentor/reflection-docblock": "3.0.2", 1623 | "phpunit/dbunit": "<3.0" 1624 | }, 1625 | "require-dev": { 1626 | "ext-pdo": "*" 1627 | }, 1628 | "suggest": { 1629 | "ext-xdebug": "*", 1630 | "phpunit/php-invoker": "^1.1" 1631 | }, 1632 | "bin": [ 1633 | "phpunit" 1634 | ], 1635 | "type": "library", 1636 | "extra": { 1637 | "branch-alias": { 1638 | "dev-master": "6.5.x-dev" 1639 | } 1640 | }, 1641 | "autoload": { 1642 | "classmap": [ 1643 | "src/" 1644 | ] 1645 | }, 1646 | "notification-url": "https://packagist.org/downloads/", 1647 | "license": [ 1648 | "BSD-3-Clause" 1649 | ], 1650 | "authors": [ 1651 | { 1652 | "name": "Sebastian Bergmann", 1653 | "email": "sebastian@phpunit.de", 1654 | "role": "lead" 1655 | } 1656 | ], 1657 | "description": "The PHP Unit Testing framework.", 1658 | "homepage": "https://phpunit.de/", 1659 | "keywords": [ 1660 | "phpunit", 1661 | "testing", 1662 | "xunit" 1663 | ], 1664 | "time": "2017-12-17T06:31:19+00:00" 1665 | }, 1666 | { 1667 | "name": "phpunit/phpunit-mock-objects", 1668 | "version": "5.0.5", 1669 | "source": { 1670 | "type": "git", 1671 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 1672 | "reference": "283b9f4f670e3a6fd6c4ff95c51a952eb5c75933" 1673 | }, 1674 | "dist": { 1675 | "type": "zip", 1676 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/phpunit-mock-objects/283b9f4f670e3a6fd6c4ff95c51a952eb5c75933.zip", 1677 | "reference": "283b9f4f670e3a6fd6c4ff95c51a952eb5c75933", 1678 | "shasum": "" 1679 | }, 1680 | "require": { 1681 | "doctrine/instantiator": "^1.0.5", 1682 | "php": "^7.0", 1683 | "phpunit/php-text-template": "^1.2.1", 1684 | "sebastian/exporter": "^3.1" 1685 | }, 1686 | "conflict": { 1687 | "phpunit/phpunit": "<6.0" 1688 | }, 1689 | "require-dev": { 1690 | "phpunit/phpunit": "^6.5" 1691 | }, 1692 | "suggest": { 1693 | "ext-soap": "*" 1694 | }, 1695 | "type": "library", 1696 | "extra": { 1697 | "branch-alias": { 1698 | "dev-master": "5.0.x-dev" 1699 | } 1700 | }, 1701 | "autoload": { 1702 | "classmap": [ 1703 | "src/" 1704 | ] 1705 | }, 1706 | "notification-url": "https://packagist.org/downloads/", 1707 | "license": [ 1708 | "BSD-3-Clause" 1709 | ], 1710 | "authors": [ 1711 | { 1712 | "name": "Sebastian Bergmann", 1713 | "email": "sebastian@phpunit.de", 1714 | "role": "lead" 1715 | } 1716 | ], 1717 | "description": "Mock Object library for PHPUnit", 1718 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 1719 | "keywords": [ 1720 | "mock", 1721 | "xunit" 1722 | ], 1723 | "time": "2017-12-10T08:01:53+00:00" 1724 | }, 1725 | { 1726 | "name": "sebastian/code-unit-reverse-lookup", 1727 | "version": "1.0.1", 1728 | "source": { 1729 | "type": "git", 1730 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1731 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 1732 | }, 1733 | "dist": { 1734 | "type": "zip", 1735 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/code-unit-reverse-lookup/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18.zip", 1736 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1737 | "shasum": "" 1738 | }, 1739 | "require": { 1740 | "php": "^5.6 || ^7.0" 1741 | }, 1742 | "require-dev": { 1743 | "phpunit/phpunit": "^5.7 || ^6.0" 1744 | }, 1745 | "type": "library", 1746 | "extra": { 1747 | "branch-alias": { 1748 | "dev-master": "1.0.x-dev" 1749 | } 1750 | }, 1751 | "autoload": { 1752 | "classmap": [ 1753 | "src/" 1754 | ] 1755 | }, 1756 | "notification-url": "https://packagist.org/downloads/", 1757 | "license": [ 1758 | "BSD-3-Clause" 1759 | ], 1760 | "authors": [ 1761 | { 1762 | "name": "Sebastian Bergmann", 1763 | "email": "sebastian@phpunit.de" 1764 | } 1765 | ], 1766 | "description": "Looks up which function or method a line of code belongs to", 1767 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1768 | "time": "2017-03-04T06:30:41+00:00" 1769 | }, 1770 | { 1771 | "name": "sebastian/comparator", 1772 | "version": "2.1.0", 1773 | "source": { 1774 | "type": "git", 1775 | "url": "https://github.com/sebastianbergmann/comparator.git", 1776 | "reference": "1174d9018191e93cb9d719edec01257fc05f8158" 1777 | }, 1778 | "dist": { 1779 | "type": "zip", 1780 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/comparator/1174d9018191e93cb9d719edec01257fc05f8158.zip", 1781 | "reference": "1174d9018191e93cb9d719edec01257fc05f8158", 1782 | "shasum": "" 1783 | }, 1784 | "require": { 1785 | "php": "^7.0", 1786 | "sebastian/diff": "^2.0", 1787 | "sebastian/exporter": "^3.1" 1788 | }, 1789 | "require-dev": { 1790 | "phpunit/phpunit": "^6.4" 1791 | }, 1792 | "type": "library", 1793 | "extra": { 1794 | "branch-alias": { 1795 | "dev-master": "2.1.x-dev" 1796 | } 1797 | }, 1798 | "autoload": { 1799 | "classmap": [ 1800 | "src/" 1801 | ] 1802 | }, 1803 | "notification-url": "https://packagist.org/downloads/", 1804 | "license": [ 1805 | "BSD-3-Clause" 1806 | ], 1807 | "authors": [ 1808 | { 1809 | "name": "Jeff Welch", 1810 | "email": "whatthejeff@gmail.com" 1811 | }, 1812 | { 1813 | "name": "Volker Dusch", 1814 | "email": "github@wallbash.com" 1815 | }, 1816 | { 1817 | "name": "Bernhard Schussek", 1818 | "email": "bschussek@2bepublished.at" 1819 | }, 1820 | { 1821 | "name": "Sebastian Bergmann", 1822 | "email": "sebastian@phpunit.de" 1823 | } 1824 | ], 1825 | "description": "Provides the functionality to compare PHP values for equality", 1826 | "homepage": "https://github.com/sebastianbergmann/comparator", 1827 | "keywords": [ 1828 | "comparator", 1829 | "compare", 1830 | "equality" 1831 | ], 1832 | "time": "2017-11-03T07:16:52+00:00" 1833 | }, 1834 | { 1835 | "name": "sebastian/diff", 1836 | "version": "2.0.1", 1837 | "source": { 1838 | "type": "git", 1839 | "url": "https://github.com/sebastianbergmann/diff.git", 1840 | "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" 1841 | }, 1842 | "dist": { 1843 | "type": "zip", 1844 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/diff/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd.zip", 1845 | "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", 1846 | "shasum": "" 1847 | }, 1848 | "require": { 1849 | "php": "^7.0" 1850 | }, 1851 | "require-dev": { 1852 | "phpunit/phpunit": "^6.2" 1853 | }, 1854 | "type": "library", 1855 | "extra": { 1856 | "branch-alias": { 1857 | "dev-master": "2.0-dev" 1858 | } 1859 | }, 1860 | "autoload": { 1861 | "classmap": [ 1862 | "src/" 1863 | ] 1864 | }, 1865 | "notification-url": "https://packagist.org/downloads/", 1866 | "license": [ 1867 | "BSD-3-Clause" 1868 | ], 1869 | "authors": [ 1870 | { 1871 | "name": "Kore Nordmann", 1872 | "email": "mail@kore-nordmann.de" 1873 | }, 1874 | { 1875 | "name": "Sebastian Bergmann", 1876 | "email": "sebastian@phpunit.de" 1877 | } 1878 | ], 1879 | "description": "Diff implementation", 1880 | "homepage": "https://github.com/sebastianbergmann/diff", 1881 | "keywords": [ 1882 | "diff" 1883 | ], 1884 | "time": "2017-08-03T08:09:46+00:00" 1885 | }, 1886 | { 1887 | "name": "sebastian/environment", 1888 | "version": "3.1.0", 1889 | "source": { 1890 | "type": "git", 1891 | "url": "https://github.com/sebastianbergmann/environment.git", 1892 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" 1893 | }, 1894 | "dist": { 1895 | "type": "zip", 1896 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/environment/cd0871b3975fb7fc44d11314fd1ee20925fce4f5.zip", 1897 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", 1898 | "shasum": "" 1899 | }, 1900 | "require": { 1901 | "php": "^7.0" 1902 | }, 1903 | "require-dev": { 1904 | "phpunit/phpunit": "^6.1" 1905 | }, 1906 | "type": "library", 1907 | "extra": { 1908 | "branch-alias": { 1909 | "dev-master": "3.1.x-dev" 1910 | } 1911 | }, 1912 | "autoload": { 1913 | "classmap": [ 1914 | "src/" 1915 | ] 1916 | }, 1917 | "notification-url": "https://packagist.org/downloads/", 1918 | "license": [ 1919 | "BSD-3-Clause" 1920 | ], 1921 | "authors": [ 1922 | { 1923 | "name": "Sebastian Bergmann", 1924 | "email": "sebastian@phpunit.de" 1925 | } 1926 | ], 1927 | "description": "Provides functionality to handle HHVM/PHP environments", 1928 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1929 | "keywords": [ 1930 | "Xdebug", 1931 | "environment", 1932 | "hhvm" 1933 | ], 1934 | "time": "2017-07-01T08:51:00+00:00" 1935 | }, 1936 | { 1937 | "name": "sebastian/exporter", 1938 | "version": "3.1.0", 1939 | "source": { 1940 | "type": "git", 1941 | "url": "https://github.com/sebastianbergmann/exporter.git", 1942 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" 1943 | }, 1944 | "dist": { 1945 | "type": "zip", 1946 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/exporter/234199f4528de6d12aaa58b612e98f7d36adb937.zip", 1947 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", 1948 | "shasum": "" 1949 | }, 1950 | "require": { 1951 | "php": "^7.0", 1952 | "sebastian/recursion-context": "^3.0" 1953 | }, 1954 | "require-dev": { 1955 | "ext-mbstring": "*", 1956 | "phpunit/phpunit": "^6.0" 1957 | }, 1958 | "type": "library", 1959 | "extra": { 1960 | "branch-alias": { 1961 | "dev-master": "3.1.x-dev" 1962 | } 1963 | }, 1964 | "autoload": { 1965 | "classmap": [ 1966 | "src/" 1967 | ] 1968 | }, 1969 | "notification-url": "https://packagist.org/downloads/", 1970 | "license": [ 1971 | "BSD-3-Clause" 1972 | ], 1973 | "authors": [ 1974 | { 1975 | "name": "Jeff Welch", 1976 | "email": "whatthejeff@gmail.com" 1977 | }, 1978 | { 1979 | "name": "Volker Dusch", 1980 | "email": "github@wallbash.com" 1981 | }, 1982 | { 1983 | "name": "Bernhard Schussek", 1984 | "email": "bschussek@2bepublished.at" 1985 | }, 1986 | { 1987 | "name": "Sebastian Bergmann", 1988 | "email": "sebastian@phpunit.de" 1989 | }, 1990 | { 1991 | "name": "Adam Harvey", 1992 | "email": "aharvey@php.net" 1993 | } 1994 | ], 1995 | "description": "Provides the functionality to export PHP variables for visualization", 1996 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1997 | "keywords": [ 1998 | "export", 1999 | "exporter" 2000 | ], 2001 | "time": "2017-04-03T13:19:02+00:00" 2002 | }, 2003 | { 2004 | "name": "sebastian/global-state", 2005 | "version": "2.0.0", 2006 | "source": { 2007 | "type": "git", 2008 | "url": "https://github.com/sebastianbergmann/global-state.git", 2009 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" 2010 | }, 2011 | "dist": { 2012 | "type": "zip", 2013 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/global-state/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4.zip", 2014 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 2015 | "shasum": "" 2016 | }, 2017 | "require": { 2018 | "php": "^7.0" 2019 | }, 2020 | "require-dev": { 2021 | "phpunit/phpunit": "^6.0" 2022 | }, 2023 | "suggest": { 2024 | "ext-uopz": "*" 2025 | }, 2026 | "type": "library", 2027 | "extra": { 2028 | "branch-alias": { 2029 | "dev-master": "2.0-dev" 2030 | } 2031 | }, 2032 | "autoload": { 2033 | "classmap": [ 2034 | "src/" 2035 | ] 2036 | }, 2037 | "notification-url": "https://packagist.org/downloads/", 2038 | "license": [ 2039 | "BSD-3-Clause" 2040 | ], 2041 | "authors": [ 2042 | { 2043 | "name": "Sebastian Bergmann", 2044 | "email": "sebastian@phpunit.de" 2045 | } 2046 | ], 2047 | "description": "Snapshotting of global state", 2048 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 2049 | "keywords": [ 2050 | "global state" 2051 | ], 2052 | "time": "2017-04-27T15:39:26+00:00" 2053 | }, 2054 | { 2055 | "name": "sebastian/object-enumerator", 2056 | "version": "3.0.3", 2057 | "source": { 2058 | "type": "git", 2059 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2060 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 2061 | }, 2062 | "dist": { 2063 | "type": "zip", 2064 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/object-enumerator/7cfd9e65d11ffb5af41198476395774d4c8a84c5.zip", 2065 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 2066 | "shasum": "" 2067 | }, 2068 | "require": { 2069 | "php": "^7.0", 2070 | "sebastian/object-reflector": "^1.1.1", 2071 | "sebastian/recursion-context": "^3.0" 2072 | }, 2073 | "require-dev": { 2074 | "phpunit/phpunit": "^6.0" 2075 | }, 2076 | "type": "library", 2077 | "extra": { 2078 | "branch-alias": { 2079 | "dev-master": "3.0.x-dev" 2080 | } 2081 | }, 2082 | "autoload": { 2083 | "classmap": [ 2084 | "src/" 2085 | ] 2086 | }, 2087 | "notification-url": "https://packagist.org/downloads/", 2088 | "license": [ 2089 | "BSD-3-Clause" 2090 | ], 2091 | "authors": [ 2092 | { 2093 | "name": "Sebastian Bergmann", 2094 | "email": "sebastian@phpunit.de" 2095 | } 2096 | ], 2097 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2098 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2099 | "time": "2017-08-03T12:35:26+00:00" 2100 | }, 2101 | { 2102 | "name": "sebastian/object-reflector", 2103 | "version": "1.1.1", 2104 | "source": { 2105 | "type": "git", 2106 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 2107 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 2108 | }, 2109 | "dist": { 2110 | "type": "zip", 2111 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/object-reflector/773f97c67f28de00d397be301821b06708fca0be.zip", 2112 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 2113 | "shasum": "" 2114 | }, 2115 | "require": { 2116 | "php": "^7.0" 2117 | }, 2118 | "require-dev": { 2119 | "phpunit/phpunit": "^6.0" 2120 | }, 2121 | "type": "library", 2122 | "extra": { 2123 | "branch-alias": { 2124 | "dev-master": "1.1-dev" 2125 | } 2126 | }, 2127 | "autoload": { 2128 | "classmap": [ 2129 | "src/" 2130 | ] 2131 | }, 2132 | "notification-url": "https://packagist.org/downloads/", 2133 | "license": [ 2134 | "BSD-3-Clause" 2135 | ], 2136 | "authors": [ 2137 | { 2138 | "name": "Sebastian Bergmann", 2139 | "email": "sebastian@phpunit.de" 2140 | } 2141 | ], 2142 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 2143 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 2144 | "time": "2017-03-29T09:07:27+00:00" 2145 | }, 2146 | { 2147 | "name": "sebastian/recursion-context", 2148 | "version": "3.0.0", 2149 | "source": { 2150 | "type": "git", 2151 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2152 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 2153 | }, 2154 | "dist": { 2155 | "type": "zip", 2156 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/recursion-context/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8.zip", 2157 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 2158 | "shasum": "" 2159 | }, 2160 | "require": { 2161 | "php": "^7.0" 2162 | }, 2163 | "require-dev": { 2164 | "phpunit/phpunit": "^6.0" 2165 | }, 2166 | "type": "library", 2167 | "extra": { 2168 | "branch-alias": { 2169 | "dev-master": "3.0.x-dev" 2170 | } 2171 | }, 2172 | "autoload": { 2173 | "classmap": [ 2174 | "src/" 2175 | ] 2176 | }, 2177 | "notification-url": "https://packagist.org/downloads/", 2178 | "license": [ 2179 | "BSD-3-Clause" 2180 | ], 2181 | "authors": [ 2182 | { 2183 | "name": "Jeff Welch", 2184 | "email": "whatthejeff@gmail.com" 2185 | }, 2186 | { 2187 | "name": "Sebastian Bergmann", 2188 | "email": "sebastian@phpunit.de" 2189 | }, 2190 | { 2191 | "name": "Adam Harvey", 2192 | "email": "aharvey@php.net" 2193 | } 2194 | ], 2195 | "description": "Provides functionality to recursively process PHP variables", 2196 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2197 | "time": "2017-03-03T06:23:57+00:00" 2198 | }, 2199 | { 2200 | "name": "sebastian/resource-operations", 2201 | "version": "1.0.0", 2202 | "source": { 2203 | "type": "git", 2204 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 2205 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" 2206 | }, 2207 | "dist": { 2208 | "type": "zip", 2209 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/resource-operations/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52.zip", 2210 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 2211 | "shasum": "" 2212 | }, 2213 | "require": { 2214 | "php": ">=5.6.0" 2215 | }, 2216 | "type": "library", 2217 | "extra": { 2218 | "branch-alias": { 2219 | "dev-master": "1.0.x-dev" 2220 | } 2221 | }, 2222 | "autoload": { 2223 | "classmap": [ 2224 | "src/" 2225 | ] 2226 | }, 2227 | "notification-url": "https://packagist.org/downloads/", 2228 | "license": [ 2229 | "BSD-3-Clause" 2230 | ], 2231 | "authors": [ 2232 | { 2233 | "name": "Sebastian Bergmann", 2234 | "email": "sebastian@phpunit.de" 2235 | } 2236 | ], 2237 | "description": "Provides a list of PHP built-in functions that operate on resources", 2238 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2239 | "time": "2015-07-28T20:34:47+00:00" 2240 | }, 2241 | { 2242 | "name": "sebastian/version", 2243 | "version": "2.0.1", 2244 | "source": { 2245 | "type": "git", 2246 | "url": "https://github.com/sebastianbergmann/version.git", 2247 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 2248 | }, 2249 | "dist": { 2250 | "type": "zip", 2251 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/version/99732be0ddb3361e16ad77b68ba41efc8e979019.zip", 2252 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 2253 | "shasum": "" 2254 | }, 2255 | "require": { 2256 | "php": ">=5.6" 2257 | }, 2258 | "type": "library", 2259 | "extra": { 2260 | "branch-alias": { 2261 | "dev-master": "2.0.x-dev" 2262 | } 2263 | }, 2264 | "autoload": { 2265 | "classmap": [ 2266 | "src/" 2267 | ] 2268 | }, 2269 | "notification-url": "https://packagist.org/downloads/", 2270 | "license": [ 2271 | "BSD-3-Clause" 2272 | ], 2273 | "authors": [ 2274 | { 2275 | "name": "Sebastian Bergmann", 2276 | "email": "sebastian@phpunit.de", 2277 | "role": "lead" 2278 | } 2279 | ], 2280 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2281 | "homepage": "https://github.com/sebastianbergmann/version", 2282 | "time": "2016-10-03T07:35:21+00:00" 2283 | }, 2284 | { 2285 | "name": "theseer/tokenizer", 2286 | "version": "1.1.0", 2287 | "source": { 2288 | "type": "git", 2289 | "url": "https://github.com/theseer/tokenizer.git", 2290 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" 2291 | }, 2292 | "dist": { 2293 | "type": "zip", 2294 | "url": "https://files.phpcomposer.com/files/theseer/tokenizer/cb2f008f3f05af2893a87208fe6a6c4985483f8b.zip", 2295 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", 2296 | "shasum": "" 2297 | }, 2298 | "require": { 2299 | "ext-dom": "*", 2300 | "ext-tokenizer": "*", 2301 | "ext-xmlwriter": "*", 2302 | "php": "^7.0" 2303 | }, 2304 | "type": "library", 2305 | "autoload": { 2306 | "classmap": [ 2307 | "src/" 2308 | ] 2309 | }, 2310 | "notification-url": "https://packagist.org/downloads/", 2311 | "license": [ 2312 | "BSD-3-Clause" 2313 | ], 2314 | "authors": [ 2315 | { 2316 | "name": "Arne Blankerts", 2317 | "email": "arne@blankerts.de", 2318 | "role": "Developer" 2319 | } 2320 | ], 2321 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 2322 | "time": "2017-04-07T12:08:54+00:00" 2323 | }, 2324 | { 2325 | "name": "webmozart/assert", 2326 | "version": "1.2.0", 2327 | "source": { 2328 | "type": "git", 2329 | "url": "https://github.com/webmozart/assert.git", 2330 | "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" 2331 | }, 2332 | "dist": { 2333 | "type": "zip", 2334 | "url": "https://files.phpcomposer.com/files/webmozart/assert/2db61e59ff05fe5126d152bd0655c9ea113e550f.zip", 2335 | "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", 2336 | "shasum": "" 2337 | }, 2338 | "require": { 2339 | "php": "^5.3.3 || ^7.0" 2340 | }, 2341 | "require-dev": { 2342 | "phpunit/phpunit": "^4.6", 2343 | "sebastian/version": "^1.0.1" 2344 | }, 2345 | "type": "library", 2346 | "extra": { 2347 | "branch-alias": { 2348 | "dev-master": "1.3-dev" 2349 | } 2350 | }, 2351 | "autoload": { 2352 | "psr-4": { 2353 | "Webmozart\\Assert\\": "src/" 2354 | } 2355 | }, 2356 | "notification-url": "https://packagist.org/downloads/", 2357 | "license": [ 2358 | "MIT" 2359 | ], 2360 | "authors": [ 2361 | { 2362 | "name": "Bernhard Schussek", 2363 | "email": "bschussek@gmail.com" 2364 | } 2365 | ], 2366 | "description": "Assertions to validate method input/output with nice error messages.", 2367 | "keywords": [ 2368 | "assert", 2369 | "check", 2370 | "validate" 2371 | ], 2372 | "time": "2016-11-23T20:04:58+00:00" 2373 | } 2374 | ], 2375 | "aliases": [], 2376 | "minimum-stability": "stable", 2377 | "stability-flags": [], 2378 | "prefer-stable": false, 2379 | "prefer-lowest": false, 2380 | "platform": { 2381 | "php": ">=5.5.0" 2382 | }, 2383 | "platform-dev": [] 2384 | } 2385 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | ./tests 14 | 15 | 16 | 17 | 18 | ./app 19 | 20 | ./route/api.php 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | run(); 14 | } 15 | -------------------------------------------------------------------------------- /route/api.php: -------------------------------------------------------------------------------- 1 | any('/', '\App\Api\DemoApi:test'); 4 | $app->post('/users', '\App\Api\RegisterApi:action'); 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /storage/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /support/helper.php: -------------------------------------------------------------------------------- 1 | 1 && startsWith($value, '"') && endsWith($value, '"')) { 31 | return substr($value, 1, -1); 32 | } 33 | 34 | return $value; 35 | } 36 | } 37 | 38 | /** 39 | * Determine if a given string starts with a given substring 40 | */ 41 | if (! function_exists('startsWith')) { 42 | function startsWith($haystack, $needles) 43 | { 44 | $ret = false; 45 | 46 | foreach ((array) $needles as $needle) 47 | { 48 | if ($needle != '' && mb_strpos($haystack, $needle) === 0) { 49 | $ret = true; 50 | } 51 | } 52 | 53 | return $ret; 54 | } 55 | } 56 | 57 | /** 58 | * Determine if a given string ends with a given substring 59 | */ 60 | if (! function_exists('endsWith')) { 61 | function endsWith($haystack, $needles) 62 | { 63 | $ret = false; 64 | 65 | foreach ((array) $needles as $needle) { 66 | if ((string) $needle === mb_substr($haystack, -mb_strlen($needle), NULL, 'UTF-8')) { 67 | $ret = true; 68 | } 69 | } 70 | 71 | return $ret; 72 | } 73 | } 74 | 75 | /** 76 | * Determine the IP address is internal 77 | */ 78 | if (! function_exists('isInnerIp')) { 79 | function isInnerIp($str) 80 | { 81 | if (0 == strlen($str) || ! filter_var($str, FILTER_VALIDATE_IP)) { 82 | return false; 83 | } 84 | 85 | $ret = false; 86 | 87 | $innerIp = filter_var( 88 | $str, 89 | FILTER_VALIDATE_IP, 90 | FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE 91 | ); 92 | 93 | if (false === $innerIp) { 94 | $ret = true; 95 | } 96 | 97 | return $ret; 98 | } 99 | 100 | /** 101 | * Generate random string 102 | */ 103 | if (! function_exists('randomString')) { 104 | function randomString($length = 6, $numeric = false) 105 | { 106 | $ret = ''; 107 | 108 | $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 109 | if (true == $numeric) { 110 | $chars = '0123456789'; 111 | } 112 | 113 | $charLen = strlen( $chars ); 114 | for ( $i = 0; $i < $length; $i ++ ) 115 | { 116 | $ret .= $chars[ rand( 0, $charLen - 1 ) ]; 117 | } 118 | return $ret; 119 | } 120 | } 121 | 122 | } 123 | -------------------------------------------------------------------------------- /task.php: -------------------------------------------------------------------------------- 1 | 1) { 6 | // include class file 7 | require_once(dirname(__FILE__) . '/app/Command/' . ucwords($argv[0]) . 'Command.php'); 8 | $class = ucwords($argv[0]) . 'Command'; 9 | 10 | $object = new $class; 11 | $method = $argv[1]; 12 | $count = count($argv); 13 | 14 | if (2 == $count) { 15 | call_user_func([$object, $method]); 16 | } else { 17 | unset($argv[0]); 18 | unset($argv[1]); 19 | call_user_func_array([$object, $method], $argv); 20 | } 21 | } else { 22 | echo 'Missing necessary parameters!' . PHP_EOL; 23 | } 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/HelperTest.php: -------------------------------------------------------------------------------- 1 | assertEquals(6, strlen(randomString())); 15 | 16 | $numStr = randomString(8, true); 17 | 18 | $this->assertEquals(8, strlen($numStr)); 19 | $this->assertTrue(is_numeric($numStr)); 20 | } 21 | 22 | public function testisInnerIp() 23 | { 24 | // Type A:10.0.0.0 - 10.255.255.255 25 | // Type B:172.16.0.0 - 172.31.255.255 26 | // Type C:192.168.0.0 - 192.168.255.255 27 | 28 | $aTypeStart = ip2long('10.0.0.0'); 29 | $aTypeEnd = ip2long('10.255.255.255'); 30 | 31 | $bTypeStart = ip2long('172.16.0.0'); 32 | $bTypeEnd = ip2long('172.31.255.255'); 33 | 34 | $cTypeStart = ip2long('192.168.0.0'); 35 | $cTypeEnd = ip2long('192.168.255.255'); 36 | 37 | for ($i = $aTypeStart; $i <= $aTypeEnd; ++$i) 38 | { 39 | $this->assertTrue(isInnerIp(long2ip($i))); 40 | } 41 | 42 | for ($i = $bTypeStart; $i <= $bTypeEnd; ++$i) 43 | { 44 | $this->assertTrue(isInnerIp(long2ip($i))); 45 | } 46 | 47 | for ( $i = $cTypeStart; $i <= $cTypeEnd; ++$i ) 48 | { 49 | $this->assertTrue( isInnerIp( long2ip( $i ) ) ); 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /tests/ServiceTest.php: -------------------------------------------------------------------------------- 1 | assertTrue(is_object(\App\Services\DB::getInstance())); 17 | } 18 | 19 | public function testRedisInstance() 20 | { 21 | $this->assertTrue(is_object(\App\Services\Redis::getInstance())); 22 | } 23 | 24 | } --------------------------------------------------------------------------------