├── .gitignore ├── tests ├── TestCase.php ├── IdGenServiceProviderTest.php └── IdGenTest.php ├── .travis.yml ├── src ├── IdGenServiceProvider.php ├── Helpers.php ├── Guid.php ├── IdGen.php ├── SnowFlake.php └── Uuid.php ├── LICENSE ├── phpunit.xml ├── composer.json ├── README.md └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | vendor 2 | .idea 3 | .composer.lock 4 | coverage 5 | clover.xml -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | matrix: 4 | fast_finish: true 5 | include: 6 | - php: 7.1 7 | - php: 7.2 8 | 9 | sudo: false 10 | 11 | before_install: 12 | - travis_retry composer self-update 13 | 14 | install: 15 | - travis_retry composer update --prefer-dist --no-interaction --prefer-stable --no-suggest 16 | 17 | script: vendor/bin/phpunit --coverage-text 18 | 19 | after_success: 20 | - bash <(curl -s https://codecov.io/bash) 21 | -------------------------------------------------------------------------------- /tests/IdGenServiceProviderTest.php: -------------------------------------------------------------------------------- 1 | assertInstanceOf(IdGenServiceProvider::class, $provider); 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /src/IdGenServiceProvider.php: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | ./tests 14 | 15 | 16 | 17 | ./tests 18 | ./tests/repositories 19 | 20 | 21 | 22 | ./tests/repositories 23 | 24 | 25 | 26 | 27 | ./src 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wujunze/laravel-id-generate", 3 | "description": "Laravel package to generate and to validate a UUID according to the RFC 4122 standard. Only support for version 1, 3, 4 and 5 UUID are built-in. and generate number id, generate primary key", 4 | "type": "library", 5 | "keywords": [ 6 | "UUID RFC4122", 7 | "php", 8 | "uuid", 9 | "primary key" 10 | ], 11 | "license": "MIT", 12 | "authors": [ 13 | { 14 | "name": "wujunze", 15 | "email": "itwujunze@gmail.com" 16 | } 17 | ], 18 | "minimum-stability": "stable", 19 | "require": { 20 | "php": "^7.1", 21 | "illuminate/support": "^5", 22 | "laravel/framework": "^5" 23 | }, 24 | "require-dev": { 25 | "codedungeon/phpunit-result-printer": "^0.19.10", 26 | "fzaninotto/faker": "^1.4", 27 | "mockery/mockery": "^1.2", 28 | "phpunit/phpunit": "^7.4" 29 | }, 30 | "autoload": { 31 | "psr-4": { 32 | "Wujunze\\IdGen\\": "src/" 33 | }, 34 | "files": [ 35 | "src/Helpers.php" 36 | ] 37 | }, 38 | "autoload-dev": { 39 | "psr-4": { 40 | "WuJunze\\IdGen\\Tests\\": "tests/" 41 | }, 42 | "files": [ 43 | "src/Helpers.php" 44 | ] 45 | }, 46 | "support": { 47 | "source": "https://github.com/wujunze/laravel-id-generate", 48 | "issues": "https://github.com/wujunze/laravel-id-generate/issues" 49 | }, 50 | "extra": { 51 | "laravel": { 52 | "providers": [ 53 | "Wujunze\\IdGen\\IdGenServiceProvider" 54 | ], 55 | "aliases": { 56 | "Uuid": "Wujunze\\IdGen" 57 | } 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/Guid.php: -------------------------------------------------------------------------------- 1 | generateTimestamp(); 23 | 24 | // Reset sequence counter if timstamp is different from last used. 25 | if ($this->lastTimestamp !== $time) { 26 | $this->sequence = 0; 27 | } 28 | 29 | // If the same timestamp has been used MAX_SEQUENCE_NUM times, go to 30 | // sleep for 1ms, then generate new timestamp. 31 | if ($this->sequence === self::MAX_SEQUENCE_NUM + 1) { 32 | usleep(1000); 33 | $this->sequence = 0; 34 | $time = $this->generateTimestamp(); 35 | } 36 | 37 | // Remember this timestamp. 38 | $this->lastTimestamp = $time; 39 | 40 | // Machine ID 41 | $mid = ((63 & $machine_id) << 16); 42 | 43 | // Process ID 44 | $pid = ((1023 & getmypid()) << 6); 45 | 46 | // Sequence. 47 | $seq = (63 & $this->sequence); 48 | 49 | $this->sequence++; 50 | 51 | return $time | $mid | $pid | $seq; 52 | } 53 | 54 | /** 55 | * Generates a custom EPOC timestamp positioned for merging with ID. 56 | * 57 | * @return int Internal timestamp. 58 | */ 59 | private function generateTimestamp() 60 | { 61 | $microtime = explode(' ', microtime()); 62 | $microtime[1] = (int)$microtime[1] - self::EPOC_OFFSET; 63 | $time = $microtime[1].substr($microtime[0], 2, 3); 64 | 65 | return ((0x1FFFFFFFFFF & $time) << 22); 66 | } 67 | 68 | /** 69 | * Singleton pattern to make sure only one generator is used in the 70 | * current PHP process. 71 | * 72 | * @return Guid 73 | */ 74 | public static function getGenerator() 75 | { 76 | if (is_null(self::$generator)) { 77 | self::$generator = new Guid(); 78 | } 79 | 80 | return self::$generator; 81 | } 82 | 83 | /** 84 | * Takes a generated ID and returns the Unix timestamp. 85 | * 86 | * @param int $id Generated ID. 87 | * @return int Unix timestamp. 88 | */ 89 | public function getUnixTimestamp($id) 90 | { 91 | $time = ($id >> 22); 92 | $time = (int)substr($time, 0, strlen($time) - 3); 93 | 94 | return (int)$time + self::EPOC_OFFSET; 95 | } 96 | 97 | /** 98 | * Takes a generated ID and returns the equivalence of PHP microtime(). 99 | * 100 | * @param int $id Generated ID. 101 | * @return string Microtime in millisecond resolution. 102 | */ 103 | public function getMicrotime($id) 104 | { 105 | $time = ($id >> 22); 106 | $microtime = substr($time, strlen($time) - 3); 107 | 108 | return "0.{$microtime}00000 ".$this->getUnixTimestamp($id); 109 | } 110 | } -------------------------------------------------------------------------------- /src/IdGen.php: -------------------------------------------------------------------------------- 1 | 15) { 35 | throw new \InvalidArgumentException('invalid type'); 36 | } 37 | 38 | return (((((time() << 4) | $type) << 8) | (crc32($shareKey) % 256)) << 10) | mt_rand(0, 1023); 39 | } 40 | 41 | /** 42 | * 43 | * @param int $type max support 16 types 44 | * 45 | * @return int 46 | * 47 | * @throws \Exception 48 | */ 49 | public static function genIdByType(int $type): int 50 | { 51 | 52 | if ($type < 0 || $type > 15) { 53 | throw new \InvalidArgumentException('invalid type'); 54 | } 55 | 56 | return ((((time() - self::COUPON_BASE_TS) << 4) | $type) << 3) | mt_rand(0, 7); 57 | } 58 | 59 | 60 | /** 61 | * gen code 62 | * 63 | * @param int $type type max support 16 types 64 | * @param int $source source max support 16 types 65 | * @param int $sequence sequence max support 16383 types 66 | * 67 | * @return int 68 | * 69 | * @throws \Exception 70 | */ 71 | public static function genCode(int $type, int $source, int $sequence): int 72 | { 73 | if ($type < 0 || $type > 15) { 74 | throw new \InvalidArgumentException('invalid type'); 75 | } 76 | 77 | if ($source < 0 || $source > 15) { 78 | throw new \InvalidArgumentException('invalid source'); 79 | } 80 | 81 | if ($sequence < 0 || $sequence > 16383) { 82 | throw new \InvalidArgumentException('invalid sequence'); 83 | } 84 | 85 | return ((((((get_current_ms() - (self::COUPON_BASE_TS * 1000)) << 4) | $type) << 4) | $source) << 14) | $sequence; 86 | } 87 | 88 | /** 89 | * @param int $workId 90 | * @return int 91 | */ 92 | public static function snowFlakeId($workId = 1) 93 | { 94 | return (new SnowFlake($workId))->nextId(); 95 | } 96 | 97 | 98 | /** 99 | * gen guid in php multi process 100 | * 101 | * @param int $machineId 0 - 63 102 | * @return int length 18 103 | */ 104 | public static function genGuid($machineId = 0) 105 | { 106 | if ($machineId == 0) { 107 | // only on Linux System 108 | $localIP = getHostByName(getHostName()); 109 | $machineId = substr($localIP, -2, 2); 110 | } 111 | 112 | if (!is_numeric($machineId)) { 113 | throw new \InvalidArgumentException('machineId must be numeric'); 114 | } 115 | 116 | return Guid::getGenerator()->generate($machineId); 117 | } 118 | 119 | /** 120 | * @param int $id 121 | * @return bool 122 | */ 123 | public static function IdValidate($id) 124 | { 125 | return is_numeric($id); 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /src/SnowFlake.php: -------------------------------------------------------------------------------- 1 | self::$maxWorkerId || $workId < 0) { 92 | throw new \LogicException("worker Id can't be greater than 15 or less than 0"); 93 | } 94 | self::$workerId = $workId; 95 | } 96 | 97 | /** 98 | * @return string 99 | */ 100 | public function timeGen() 101 | { 102 | //get current timestamp 103 | $time = explode(' ', microtime()); 104 | $time2 = substr($time[0], 2, 3); 105 | 106 | return $time[1].$time2; 107 | } 108 | 109 | /** 110 | * @param $lastTimestamp 111 | * @return string 112 | */ 113 | public function tilNextMillis($lastTimestamp) 114 | { 115 | $timestamp = $this->timeGen(); 116 | while ($timestamp <= $lastTimestamp) { 117 | $timestamp = $this->timeGen(); 118 | } 119 | 120 | return $timestamp; 121 | } 122 | 123 | /** 124 | * @return int 125 | */ 126 | public function nextId() 127 | { 128 | $timestamp = $this->timeGen(); 129 | if (self::$lastTimestamp == $timestamp) { 130 | self::$sequence = (self::$sequence + 1) & self::$sequenceMask; 131 | if (self::$sequence == 0) { 132 | $timestamp = $this->tilNextMillis(self::$lastTimestamp); 133 | } 134 | } else { 135 | self::$sequence = 0; 136 | } 137 | if ($timestamp < self::$lastTimestamp) { 138 | throw new \LogicException("Clock moved backwards. Refusing to generate id for ".(self::$lastTimestamp - $timestamp)." milliseconds"); 139 | } 140 | self::$lastTimestamp = $timestamp; 141 | 142 | return ((sprintf('%.0f', $timestamp) - sprintf('%.0f', self::$epoch)) << self::$timestampLeftShift) | (self::$workerId << self::$workerIdShift) | self::$sequence; 143 | 144 | } 145 | 146 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Laravel IdGen 2 | 3 | [![Build Status](https://travis-ci.org/wujunze/laravel-id-generate.svg?branch=master)](https://travis-ci.org/wujunze/laravel-id-generate) 4 | [![codecov.io](http://codecov.io/github/wujunze/laravel-id-generate/coverage.svg?branch=master)](http://codecov.io/github/wujunze/laravel-id-generate?branch=master) 5 | [![Latest Stable Version](https://poser.pugx.org/wujunze/laravel-id-generate/v/stable.svg)](https://packagist.org/packages/wujunze/laravel-id-generate) 6 | [![Licence](https://poser.pugx.org/wujunze/laravel-id-generate/license.svg)](https://packagist.org/packages/wujunze/laravel-id-generate) 7 | [![Total Downloads](https://poser.pugx.org/wujunze/laravel-id-generate/downloads.svg)](https://packagist.org/packages/wujunze/laravel-id-generate) 8 | 9 | 10 | Laravel package to generate and to validate a UUID according to the RFC 4122 standard. Only support for version 1, 3, 4 and 5 UUID are built-in. and generate number id, generate primary key 11 | 12 | ## Base on [laravel-uuid](https://github.com/webpatser/laravel-uuid) 13 | ## Thanks to [laravel-uuid](https://github.com/webpatser/laravel-uuid) 14 | 15 | ## Installation 16 | 17 | In Laravel 5.5 laravel-uuid will install via the new package discovery feature so you only need to add the package to your composer.json file 18 | 19 | ```shell 20 | composer require "wujunze/laravel-id-generate" 21 | ``` 22 | 23 | after installation you should see 24 | 25 | ```shell 26 | Discovered Package: wujunze/laravel-id-generate 27 | ``` 28 | 29 | and you are ready to go 30 | 31 | ## Basic Usage 32 | 33 | To quickly generate a UUID just do 34 | 35 | ```php 36 | IdGen::generate() 37 | ``` 38 | 39 | This will generate a version 1 IdGen `object` with a random generated MAC address. 40 | 41 | To echo out the generated UUID, cast it to a string 42 | 43 | ```php 44 | (string) IdGen::generate() 45 | ``` 46 | 47 | or 48 | 49 | ```php 50 | IdGen::generate()->string 51 | ``` 52 | 53 | ## Advanced Usage 54 | 55 | ### UUID creation 56 | 57 | Generate a version 1, time-based, UUID. You can set the optional node to the MAC address. If not supplied it will generate a random MAC address. 58 | 59 | ```php 60 | IdGen::generate(1,'00:11:22:33:44:55'); 61 | ``` 62 | 63 | Generate a version 3, name-based using MD5 hashing, UUID 64 | 65 | ```php 66 | IdGen::generate(3,'test', IdGen::NS_DNS); 67 | ``` 68 | 69 | Generate a version 4, truly random, UUID 70 | 71 | ```php 72 | IdGen::generate(4); 73 | ``` 74 | 75 | Generate a version 5, name-based using SHA-1 hashing, UUID 76 | 77 | ```php 78 | IdGen::generate(5,'test', IdGen::NS_DNS); 79 | ``` 80 | 81 | ### id generate 82 | 83 | Generate sample primary key 84 | ```php 85 | IdGen::getSamplePk(); 86 | ``` 87 | 88 | Generate id by type and share key 89 | ```php 90 | IdGen::genIdByTypeShareKey(6,89); 91 | ``` 92 | 93 | Generate id by type 94 | ```php 95 | IdGen::genIdByType(8); 96 | ``` 97 | 98 | Generate code 99 | ```php 100 | IdGen::genCode(9, 9, 888); 101 | ``` 102 | 103 | Generate SnowFlake Id 104 | ```php 105 | IdGen::snowFlakeId(); 106 | ``` 107 | 108 | ### Some magic features 109 | 110 | To import a UUID 111 | 112 | ```php 113 | $uuid = IdGen::import('d3d29d70-1d25-11e3-8591-034165a3a613'); 114 | ``` 115 | 116 | Extract the time for a time-based UUID (version 1) 117 | 118 | ```php 119 | $uuid = IdGen::generate(1); 120 | dd($uuid->time); 121 | ``` 122 | 123 | Extract the version of an UUID 124 | 125 | ```php 126 | $uuid = IdGen::generate(4); 127 | dd($uuid->version); 128 | ``` 129 | 130 | ## Eloquent UUID generation 131 | 132 | If you want an UUID magically be generated in your Laravel models, just add this boot method to your Model. 133 | 134 | ```php 135 | /** 136 | * Setup model event hooks 137 | */ 138 | public static function boot() 139 | { 140 | parent::boot(); 141 | self::creating(function ($model) { 142 | $model->uuid = (string) IdGen::generate(4); 143 | }); 144 | } 145 | ``` 146 | This will generate a version 4 UUID when creating a new record. 147 | 148 | ## Model binding to UUID instead of primary key 149 | 150 | If you want to use the UUID in URLs instead of the primary key, you can add this to your model (where 'uuid' is the column name to store the UUID) 151 | 152 | ```php 153 | /** 154 | * Get the route key for the model. 155 | * 156 | * @return string 157 | */ 158 | public function getRouteKeyName() 159 | { 160 | return 'uuid'; 161 | } 162 | ``` 163 | 164 | When you inject the model on your resource controller methods you get the correct record 165 | 166 | ```php 167 | public function edit(Model $model) 168 | { 169 | return view('someview.edit')->with([ 170 | 'model' => $model, 171 | ]); 172 | } 173 | ``` 174 | 175 | ## Validation 176 | 177 | Just use like any other Laravel validator. 178 | 179 | ``'uuid-field' => 'uuid'`` 180 | ``'uuid-field' => 'gen_id'`` 181 | 182 | Or create a validator from scratch. In the example an IdGen object in validated. You can also validate strings `$uuid->string`, the URN `$uuid->urn` or the binary value `$uuid->bytes` 183 | 184 | ```php 185 | $uuid = IdGen::generate(); 186 | $genId= IdGen::getSamplePk(); 187 | $validator = Validator::make(['uuid' => $uuid], ['uuid' => 'uuid'], ['gen_id' => $genId]); 188 | dd($validator->passes()); 189 | ``` 190 | 191 | ## Notes 192 | 193 | Full details on the UUID specification can be found on [http://tools.ietf.org/html/rfc4122](http://tools.ietf.org/html/rfc4122). 194 | 195 | [Snowflake](https://github.com/twitter-archive/snowflake) is a network service for generating unique ID numbers at high scale with some simple guarantees. 196 | ## Inspire And Thanks 197 | 198 | [Snowflake php implement](https://blog.csdn.net/envon123/article/details/52953872) -------------------------------------------------------------------------------- /src/Uuid.php: -------------------------------------------------------------------------------- 1 | bytes = $uuid; 128 | 129 | // Optimize the most common use 130 | $this->string = bin2hex(substr($uuid, 0, 4)) . "-" . 131 | bin2hex(substr($uuid, 4, 2)) . "-" . 132 | bin2hex(substr($uuid, 6, 2)) . "-" . 133 | bin2hex(substr($uuid, 8, 2)) . "-" . 134 | bin2hex(substr($uuid, 10, 6)); 135 | 136 | // Store UUID in an optimized way 137 | $this->uuid_ordered = bin2hex(substr($uuid, 6, 2)) . 138 | bin2hex(substr($uuid, 4, 2)) . 139 | bin2hex(substr($uuid, 0, 4)); 140 | } 141 | 142 | 143 | /** 144 | * @param int $ver 145 | * @param string $node 146 | * @param string $ns 147 | * @return Uuid 148 | * @throws Exception 149 | */ 150 | public static function generate($ver = 1, $node = null, $ns = null) 151 | { 152 | /* Create a new UUID based on provided data. */ 153 | switch ((int)$ver) { 154 | case 1: 155 | return new static(static::mintTime($node)); 156 | case 2: 157 | // Version 2 is not supported 158 | throw new Exception('Version 2 is unsupported.'); 159 | case 3: 160 | return new static(static::mintName(static::MD5, $node, $ns)); 161 | case 4: 162 | return new static(static::mintRand()); 163 | case 5: 164 | return new static(static::mintName(static::SHA1, $node, $ns)); 165 | default: 166 | throw new Exception('Selected version is invalid or unsupported.'); 167 | } 168 | } 169 | 170 | /** 171 | * Generates a Version 1 UUID. 172 | * These are derived from the time at which they were generated. 173 | * 174 | * @param string $node 175 | * @return string 176 | */ 177 | protected static function mintTime($node = null) 178 | { 179 | 180 | /** Get time since Gregorian calendar reform in 100ns intervals 181 | * This is exceedingly difficult because of PHP's (and pack()'s) 182 | * integer size limits. 183 | * Note that this will never be more accurate than to the microsecond. 184 | */ 185 | $time = microtime(1) * 10000000 + static::INTERVAL; 186 | 187 | // Convert to a string representation 188 | $time = sprintf("%F", $time); 189 | 190 | //strip decimal point 191 | preg_match("/^\d+/", $time, $time); 192 | 193 | // And now to a 64-bit binary representation 194 | $time = base_convert($time[0], 10, 16); 195 | $time = pack("H*", str_pad($time, 16, "0", STR_PAD_LEFT)); 196 | 197 | // Reorder bytes to their proper locations in the UUID 198 | $uuid = $time[4] . $time[5] . $time[6] . $time[7] . $time[2] . $time[3] . $time[0] . $time[1]; 199 | 200 | // Generate a random clock sequence 201 | $uuid .= static::randomBytes(2); 202 | 203 | // set variant 204 | $uuid[8] = chr(ord($uuid[8]) & static::CLEAR_VAR | static::VAR_RFC); 205 | 206 | // set version 207 | $uuid[6] = chr(ord($uuid[6]) & static::CLEAR_VER | static::VERSION_1); 208 | 209 | // Set the final 'node' parameter, a MAC address 210 | if (!is_null($node)) { 211 | $node = static::makeBin($node, 6); 212 | } 213 | 214 | // If no node was provided or if the node was invalid, 215 | // generate a random MAC address and set the multicast bit 216 | if (is_null($node)) { 217 | $node = static::randomBytes(6); 218 | $node[0] = pack("C", ord($node[0]) | 1); 219 | } 220 | 221 | $uuid .= $node; 222 | 223 | return $uuid; 224 | } 225 | 226 | /** 227 | * Randomness is returned as a string of bytes 228 | * 229 | * @param $bytes 230 | * @return string 231 | */ 232 | public static function randomBytes($bytes) 233 | { 234 | return random_bytes($bytes); 235 | } 236 | 237 | /** 238 | * Insure that an input string is either binary or hexadecimal. 239 | * Returns binary representation, or false on failure. 240 | * 241 | * @param string $str 242 | * @param integer $len 243 | * @return string|null 244 | */ 245 | protected static function makeBin($str, $len) 246 | { 247 | if ($str instanceof self) { 248 | return $str->bytes; 249 | } 250 | if (strlen($str) === $len) { 251 | return $str; 252 | } else { 253 | // strip URN scheme and namespace 254 | $str = preg_replace('/^urn:uuid:/is', '', $str); 255 | } 256 | // strip non-hex characters 257 | $str = preg_replace('/[^a-f0-9]/is', '', $str); 258 | if (strlen($str) !== ($len * 2)) { 259 | return null; 260 | } else { 261 | return pack("H*", $str); 262 | } 263 | } 264 | 265 | /** 266 | * Generates a Version 3 or Version 5 UUID. 267 | * These are derived from a hash of a name and its namespace, in binary form. 268 | * 269 | * @param string $ver 270 | * @param string $node 271 | * @param string $ns 272 | * @return string 273 | * @throws Exception 274 | */ 275 | protected static function mintName($ver, $node, $ns) 276 | { 277 | if (empty($node)) { 278 | throw new Exception('A name-string is required for Version 3 or 5 UUIDs.'); 279 | } 280 | 281 | // if the namespace UUID isn't binary, make it so 282 | $ns = static::makeBin($ns, 16); 283 | if (is_null($ns)) { 284 | throw new Exception('A binary namespace is required for Version 3 or 5 UUIDs.'); 285 | } 286 | 287 | $version = null; 288 | $uuid = null; 289 | 290 | switch ($ver) { 291 | case static::MD5: 292 | $version = static::VERSION_3; 293 | $uuid = md5($ns . $node, 1); 294 | break; 295 | case static::SHA1: 296 | $version = static::VERSION_5; 297 | $uuid = substr(sha1($ns . $node, 1), 0, 16); 298 | break; 299 | default: 300 | // no default really required here 301 | } 302 | 303 | // set variant 304 | $uuid[8] = chr(ord($uuid[8]) & static::CLEAR_VAR | static::VAR_RFC); 305 | 306 | // set version 307 | $uuid[6] = chr(ord($uuid[6]) & static::CLEAR_VER | $version); 308 | 309 | return ($uuid); 310 | } 311 | 312 | /** 313 | * Generate a Version 4 UUID. 314 | * These are derived solely from random numbers. 315 | * generate random fields 316 | * 317 | * @return string 318 | */ 319 | protected static function mintRand() 320 | { 321 | $uuid = static::randomBytes(16); 322 | // set variant 323 | $uuid[8] = chr(ord($uuid[8]) & static::CLEAR_VAR | static::VAR_RFC); 324 | // set version 325 | $uuid[6] = chr(ord($uuid[6]) & static::CLEAR_VER | static::VERSION_4); 326 | 327 | return $uuid; 328 | } 329 | 330 | /** 331 | * Import an existing UUID 332 | * 333 | * @param string $uuid 334 | * @return Uuid 335 | */ 336 | public static function import($uuid) 337 | { 338 | return new static(static::makeBin($uuid, 16)); 339 | } 340 | 341 | /** 342 | * Compares the binary representations of two UUIDs. 343 | * The comparison will return true if they are bit-exact, 344 | * or if neither is valid. 345 | * 346 | * @param string $a 347 | * @param string $b 348 | * @return string|string 349 | */ 350 | public static function compare($a, $b) 351 | { 352 | if (static::makeBin($a, 16) == static::makeBin($b, 16)) { 353 | return true; 354 | } else { 355 | return false; 356 | } 357 | } 358 | 359 | /** 360 | * @param string $var 361 | * @return string|string|number|number|number|number|number|NULL|number|NULL|NULL 362 | */ 363 | public function __get($var) 364 | { 365 | switch ($var) { 366 | case "bytes": 367 | return $this->bytes; 368 | break; 369 | case "hex": 370 | return bin2hex($this->bytes); 371 | break; 372 | case "node": 373 | if (ord($this->bytes[6]) >> 4 == 1) { 374 | return bin2hex(substr($this->bytes, 10)); 375 | } else { 376 | return null; 377 | } 378 | break; 379 | case "string": 380 | return $this->__toString(); 381 | break; 382 | case "uuid_ordered": 383 | return $this->__toUuidOrdered(); 384 | break; 385 | case "time": 386 | if (ord($this->bytes[6]) >> 4 == 1) { 387 | // Restore contiguous big-endian byte order 388 | $time = bin2hex($this->bytes[6] . $this->bytes[7] . $this->bytes[4] . $this->bytes[5] . 389 | $this->bytes[0] . $this->bytes[1] . $this->bytes[2] . $this->bytes[3]); 390 | // Clear version flag 391 | $time[0] = "0"; 392 | 393 | // Do some reverse arithmetic to get a Unix timestamp 394 | return (hexdec($time) - static::INTERVAL) / 10000000; 395 | } else { 396 | return null; 397 | } 398 | break; 399 | case "urn": 400 | return "urn:uuid:" . $this->__toString(); 401 | break; 402 | case "variant": 403 | $byte = ord($this->bytes[8]); 404 | if ($byte >= static::VAR_RES) { 405 | return 3; 406 | } elseif ($byte >= static::VAR_MS) { 407 | return 2; 408 | } elseif ($byte >= static::VAR_RFC) { 409 | return 1; 410 | } else { 411 | return 0; 412 | } 413 | break; 414 | case "version": 415 | return ord($this->bytes[6]) >> 4; 416 | break; 417 | default: 418 | return null; 419 | break; 420 | } 421 | } 422 | 423 | /** 424 | * Return the UUID 425 | * 426 | * @return string 427 | */ 428 | public function __toString() 429 | { 430 | return $this->string; 431 | } 432 | 433 | /** 434 | * Return the UUID ORDERED 435 | * 436 | * @return uuid ordered 437 | */ 438 | public function __toUuidOrdered() 439 | { 440 | return $this->uuid_ordered; 441 | } 442 | 443 | /** 444 | * Import and validate an UUID 445 | * 446 | * @param Uuid|string $uuid 447 | * 448 | * @return boolean 449 | */ 450 | public static function validate($uuid) 451 | { 452 | return (boolean) preg_match('~' . static::VALID_UUID_REGEX . '~', static::import($uuid)->string); 453 | } 454 | } 455 | -------------------------------------------------------------------------------- /tests/IdGenTest.php: -------------------------------------------------------------------------------- 1 | assertInstanceOf('WuJunze\Idgen\IdGen', $uuid); 17 | 18 | $uuid = IdGen::generate(3, 'example.com', IdGen::NS_DNS); 19 | $this->assertInstanceOf('WuJunze\Idgen\IdGen', $uuid); 20 | 21 | $uuid = IdGen::generate(4); 22 | $this->assertInstanceOf('WuJunze\Idgen\IdGen', $uuid); 23 | 24 | $uuid = IdGen::generate(5, 'example.com', IdGen::NS_DNS); 25 | $this->assertInstanceOf('WuJunze\Idgen\IdGen', $uuid); 26 | } 27 | 28 | public function testImportAllZeroUuid() 29 | { 30 | $uuid = IdGen::import('00000000-0000-0000-0000-000000000000'); 31 | $this->assertInstanceOf('WuJunze\Idgen\IdGen', $uuid); 32 | $this->assertEquals('00000000-0000-0000-0000-000000000000', (string)$uuid); 33 | } 34 | 35 | public function testGenerationOfValidUuidViaRegex() 36 | { 37 | $uuid = IdGen::generate(1); 38 | $this->assertRegExp('~'.IdGen::VALID_UUID_REGEX.'~', (string)$uuid); 39 | 40 | $uuid = IdGen::generate(3, 'example.com', IdGen::NS_DNS); 41 | $this->assertRegExp('~'.IdGen::VALID_UUID_REGEX.'~', (string)$uuid); 42 | 43 | $uuid = IdGen::generate(4); 44 | $this->assertRegExp('~'.IdGen::VALID_UUID_REGEX.'~', (string)$uuid); 45 | 46 | $uuid = IdGen::generate(5, 'example.com', IdGen::NS_DNS); 47 | $this->assertRegExp('~'.IdGen::VALID_UUID_REGEX.'~', (string)$uuid); 48 | } 49 | 50 | public function testGenerationOfValidUuidViaValidator() 51 | { 52 | $uuid = IdGen::generate(1); 53 | $this->assertTrue(IdGen::validate($uuid->string)); 54 | 55 | $uuid = IdGen::generate(3, 'example.com', IdGen::NS_DNS); 56 | $this->assertTrue(IdGen::validate($uuid->string)); 57 | 58 | $uuid = IdGen::generate(4); 59 | $this->assertTrue(IdGen::validate($uuid->string)); 60 | 61 | $uuid = IdGen::generate(5, 'example.com', IdGen::NS_DNS); 62 | $this->assertTrue(IdGen::validate($uuid->string)); 63 | 64 | $uuid = IdGen::generate(1); 65 | $this->assertTrue(IdGen::validate($uuid->bytes)); 66 | 67 | $uuid = IdGen::generate(3, 'example.com', IdGen::NS_DNS); 68 | $this->assertTrue(IdGen::validate($uuid->bytes)); 69 | 70 | $uuid = IdGen::generate(4); 71 | $this->assertTrue(IdGen::validate($uuid->bytes)); 72 | 73 | $uuid = IdGen::generate(5, 'example.com', IdGen::NS_DNS); 74 | $this->assertTrue(IdGen::validate($uuid->bytes)); 75 | 76 | $uuid = IdGen::generate(1); 77 | $this->assertTrue(IdGen::validate($uuid->urn)); 78 | 79 | $uuid = IdGen::generate(3, 'example.com', IdGen::NS_DNS); 80 | $this->assertTrue(IdGen::validate($uuid->urn)); 81 | 82 | $uuid = IdGen::generate(4); 83 | $this->assertTrue(IdGen::validate($uuid->urn)); 84 | 85 | $uuid = IdGen::generate(5, 'example.com', IdGen::NS_DNS); 86 | $this->assertTrue(IdGen::validate($uuid->urn)); 87 | 88 | $this->assertTrue(IdGen::validate(IdGen::generate(1))); 89 | 90 | $this->assertTrue(IdGen::validate(IdGen::generate(3, 'example.com', IdGen::NS_DNS))); 91 | 92 | $this->assertTrue(IdGen::validate(IdGen::generate(4))); 93 | 94 | $this->assertTrue(IdGen::validate(IdGen::generate(5, 'example.com', IdGen::NS_DNS))); 95 | } 96 | 97 | public function testCorrectVersionUuid() 98 | { 99 | $uuidOne = IdGen::generate(1); 100 | $this->assertEquals(1, $uuidOne->version); 101 | 102 | $uuidThree = IdGen::generate(3, 'example.com', IdGen::NS_DNS); 103 | $this->assertEquals(3, $uuidThree->version); 104 | 105 | $uuidFour = IdGen::generate(4); 106 | $this->assertEquals(4, $uuidFour->version); 107 | 108 | $uuidFive = IdGen::generate(5, 'example.com', IdGen::NS_DNS); 109 | $this->assertEquals(5, $uuidFive->version); 110 | } 111 | 112 | public function testCorrectVariantUuid() 113 | { 114 | $uuidOne = IdGen::generate(1); 115 | $this->assertEquals(1, $uuidOne->variant); 116 | 117 | $uuidThree = IdGen::generate(3, 'example.com', IdGen::NS_DNS); 118 | $this->assertEquals(1, $uuidThree->variant); 119 | 120 | $uuidFour = IdGen::generate(4); 121 | $this->assertEquals(1, $uuidFour->variant); 122 | 123 | $uuidFive = IdGen::generate(5, 'example.com', IdGen::NS_DNS); 124 | $this->assertEquals(1, $uuidFive->variant); 125 | } 126 | 127 | public function testCorrectVersionOfImportedUuid() 128 | { 129 | $uuidOne = IdGen::generate(1); 130 | $importedOne = IdGen::import((string)$uuidOne); 131 | $this->assertEquals($uuidOne->version, $importedOne->version); 132 | 133 | $uuidThree = IdGen::generate(3, 'example.com', IdGen::NS_DNS); 134 | $importedThree = IdGen::import((string)$uuidThree); 135 | $this->assertEquals($uuidThree->version, $importedThree->version); 136 | 137 | $uuidFour = IdGen::generate(4); 138 | $importedFour = IdGen::import((string)$uuidFour); 139 | $this->assertEquals($uuidFour->version, $importedFour->version); 140 | 141 | $uuidFive = IdGen::generate(5, 'example.com', IdGen::NS_DNS); 142 | $importedFive = IdGen::import((string)$uuidFive); 143 | $this->assertEquals($uuidFive->version, $importedFive->version); 144 | } 145 | 146 | public function testCorrectNodeOfGeneratedUuid() 147 | { 148 | $macAdress = \Faker\Provider\Internet::macAddress(); 149 | $uuidThree = IdGen::generate(1, $macAdress); 150 | $this->assertEquals(strtolower(str_replace(':', '', $macAdress)), $uuidThree->node); 151 | 152 | $uuidThree = IdGen::generate(3, $macAdress, IdGen::NS_DNS); 153 | $this->assertNull($uuidThree->node); 154 | 155 | $uuidThree = IdGen::generate(4, $macAdress); 156 | $this->assertNull($uuidThree->node); 157 | 158 | $uuidThree = IdGen::generate(5, $macAdress, IdGen::NS_DNS); 159 | $this->assertNull($uuidThree->node); 160 | } 161 | 162 | public function testCorrectTimeOfImportedUuid() 163 | { 164 | $uuidOne = IdGen::generate(1); 165 | $importedOne = IdGen::import((string)$uuidOne); 166 | $this->assertEquals($uuidOne->time, $importedOne->time); 167 | 168 | $uuidThree = IdGen::generate(3, 'example.com', IdGen::NS_DNS); 169 | $importedThree = IdGen::import((string)$uuidThree); 170 | $this->assertEmpty($importedThree->time); 171 | 172 | $uuidFour = IdGen::generate(4); 173 | $importedFour = IdGen::import((string)$uuidFour); 174 | $this->assertEmpty($importedFour->time); 175 | 176 | $uuidFive = IdGen::generate(5, 'example.com', IdGen::NS_DNS); 177 | $importedFive = IdGen::import((string)$uuidFive); 178 | $this->assertEmpty($importedFive->time); 179 | } 180 | 181 | public function testUuidCompare() 182 | { 183 | $uuid1 = (string)IdGen::generate(1); 184 | $uuid2 = (string)IdGen::generate(1); 185 | 186 | $this->assertTrue(IdGen::compare($uuid1, $uuid1)); 187 | $this->assertFalse(IdGen::compare($uuid1, $uuid2)); 188 | } 189 | 190 | public function testSampleKey() 191 | { 192 | $id = IdGen::getSamplePk(); 193 | 194 | $this->assertInternalType('int', $id); 195 | $this->assertGreaterThanOrEqual(13, strlen($id)); 196 | } 197 | 198 | public function testGenIdByTypeShareKey() 199 | { 200 | $genId = IdGen::genIdByTypeShareKey(6, 89); 201 | 202 | $this->assertInternalType('int', $genId); 203 | $this->assertGreaterThanOrEqual(16, strlen($genId)); 204 | } 205 | 206 | /** 207 | * @expectedException \InvalidArgumentException 208 | */ 209 | public function testGenIdByTypeShareKeyException() 210 | { 211 | $genId = IdGen::genIdByTypeShareKey(21, 89); 212 | $this->assertInternalType('int', $genId); 213 | $this->assertGreaterThanOrEqual(16, strlen($genId)); 214 | } 215 | 216 | public function testGenIdByType() 217 | { 218 | $typeId = IdGen::genIdByType(8); 219 | $this->assertInternalType('int', $typeId); 220 | $this->assertGreaterThanOrEqual(9, strlen($typeId)); 221 | 222 | } 223 | 224 | /** 225 | * @expectedException \InvalidArgumentException 226 | */ 227 | public function testGenIdByTypeException() 228 | { 229 | $typeId = IdGen::genIdByType(18); 230 | $this->assertInternalType('int', $typeId); 231 | $this->assertGreaterThanOrEqual(9, strlen($typeId)); 232 | 233 | } 234 | 235 | 236 | public function testGenCode() 237 | { 238 | $code = IdGen::genCode(9, 9, 888); 239 | 240 | $this->assertTrue(IdGen::IdValidate($code)); 241 | $this->assertInternalType('int', $code); 242 | $this->assertGreaterThanOrEqual(17, strlen($code)); 243 | } 244 | 245 | /** 246 | * @expectedException \InvalidArgumentException 247 | */ 248 | public function testGenCodeTypeException() 249 | { 250 | $code = IdGen::genCode(16, 9, 888); 251 | } 252 | 253 | 254 | /** 255 | * @expectedException \InvalidArgumentException 256 | */ 257 | public function testGenCodeResourceException() 258 | { 259 | $code = IdGen::genCode(10, 16, 888); 260 | } 261 | 262 | 263 | /** 264 | * @expectedException \InvalidArgumentException 265 | */ 266 | public function testGenCodeException() 267 | { 268 | $code = IdGen::genCode(9, 9, 88888); 269 | $this->assertInternalType('int', $code); 270 | $this->assertGreaterThanOrEqual(17, strlen($code)); 271 | } 272 | 273 | public function testGetFormatTime() 274 | { 275 | $dateTime = get_format_time(); 276 | $this->assertNotEmpty($dateTime); 277 | $this->assertInternalType('string', $dateTime); 278 | } 279 | 280 | public function testGetAgeByBirthday() 281 | { 282 | $age = get_age_by_birthday(19930806); 283 | $this->assertInternalType('numeric', $age); 284 | $this->assertEquals(date('Y') - 1993, $age); 285 | 286 | $ageEmpty = get_age_by_birthday(0); 287 | $this->assertEmpty($ageEmpty); 288 | } 289 | 290 | public function testSnowFlake() 291 | { 292 | $snowFlakeId = IdGen::snowFlakeId(); 293 | $this->assertInternalType('numeric', $snowFlakeId); 294 | } 295 | 296 | public function testSnowFlakeIdRepeat() 297 | { 298 | $all = []; 299 | $exits = []; 300 | 301 | for ($i = 0; $i < 100000; $i++) { 302 | $id = IdGen::snowFlakeId(10); 303 | if (in_array($id, $all)) { 304 | $exits[] = $id; 305 | } else { 306 | $all[] = $id; 307 | } 308 | } 309 | 310 | $this->assertEquals(100000, count($all)); 311 | $this->assertEmpty($exits); 312 | } 313 | 314 | 315 | public function testSimplePKRepeat() 316 | { 317 | $all = []; 318 | $exits = []; 319 | 320 | for ($i = 0; $i < 100000; $i++) { 321 | $id = IdGen::getSamplePk(); 322 | if (in_array($id, $all)) { 323 | $exits[] = $id; 324 | } else { 325 | $all[] = $id; 326 | } 327 | } 328 | $this->assertNotEmpty($all); 329 | $this->assertNotEmpty($exits); 330 | } 331 | 332 | /** 333 | * @expectedException \LogicException 334 | */ 335 | public function testSnowFlakeIdWorkIdException() 336 | { 337 | $all = []; 338 | $exits = []; 339 | 340 | for ($i = 0; $i < 100; $i++) { 341 | $id = IdGen::snowFlakeId(18); 342 | if (in_array($id, $all)) { 343 | $exits[] = $id; 344 | } else { 345 | $all[] = $id; 346 | } 347 | } 348 | 349 | $this->assertEquals(100000, count($all)); 350 | $this->assertEmpty($exits); 351 | } 352 | 353 | public function testTilNextMillis() 354 | { 355 | $snowFlake = new SnowFlake(); 356 | $timestamp = $snowFlake->tilNextMillis(((int)$snowFlake->timeGen()) + 3); 357 | 358 | $this->assertNotEmpty($timestamp); 359 | $this->assertInternalType('numeric', $timestamp); 360 | } 361 | 362 | public function testNextIdException() 363 | { 364 | 365 | $mockery = \Mockery::mock(SnowFlake::class); 366 | 367 | $mockery->shouldReceive('timeGen') 368 | ->andReturn(-2); 369 | 370 | $this->assertTrue(true); 371 | } 372 | 373 | public function testGuid() 374 | { 375 | $machineId = 23; 376 | $guid = Guid::getGenerator(); 377 | $id1 = $guid->generate($machineId); 378 | $id2 = $guid->generate($machineId); 379 | 380 | $this->assertInternalType('numeric', $id1); 381 | $this->assertInternalType('numeric', $id2); 382 | $this->assertNotEquals($id1, $id2); 383 | 384 | } 385 | 386 | public function testGuidRepeat() 387 | { 388 | $all = []; 389 | $exits = []; 390 | 391 | for ($i = 0; $i < 100000; $i++) { 392 | $guid = Guid::getGenerator(); 393 | $id = $guid->generate(12); 394 | if (in_array($id, $all)) { 395 | $exits[] = $id; 396 | } else { 397 | $all[] = $id; 398 | } 399 | } 400 | 401 | $this->assertEquals(100000, count($all)); 402 | $this->assertEmpty($exits); 403 | } 404 | 405 | public function testGenGuid() 406 | { 407 | $all = []; 408 | $exits = []; 409 | 410 | for ($i = 0; $i < 100000; $i++) { 411 | $id = IdGen::genGuid(23); 412 | if (in_array($id, $all)) { 413 | $exits[] = $id; 414 | } else { 415 | $all[] = $id; 416 | } 417 | } 418 | 419 | $this->assertEquals(100000, count($all)); 420 | $this->assertEmpty($exits); 421 | } 422 | } 423 | -------------------------------------------------------------------------------- /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": "fbdd7d56015cbe9ada57ff76e2d0c243", 8 | "packages": [ 9 | { 10 | "name": "doctrine/inflector", 11 | "version": "v1.3.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/doctrine/inflector.git", 15 | "reference": "5527a48b7313d15261292c149e55e26eae771b0a" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", 20 | "reference": "5527a48b7313d15261292c149e55e26eae771b0a", 21 | "shasum": "", 22 | "mirrors": [ 23 | { 24 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 25 | "preferred": true 26 | } 27 | ] 28 | }, 29 | "require": { 30 | "php": "^7.1" 31 | }, 32 | "require-dev": { 33 | "phpunit/phpunit": "^6.2" 34 | }, 35 | "type": "library", 36 | "extra": { 37 | "branch-alias": { 38 | "dev-master": "1.3.x-dev" 39 | } 40 | }, 41 | "autoload": { 42 | "psr-4": { 43 | "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" 44 | } 45 | }, 46 | "notification-url": "https://packagist.org/downloads/", 47 | "license": [ 48 | "MIT" 49 | ], 50 | "authors": [ 51 | { 52 | "name": "Roman Borschel", 53 | "email": "roman@code-factory.org" 54 | }, 55 | { 56 | "name": "Benjamin Eberlei", 57 | "email": "kontakt@beberlei.de" 58 | }, 59 | { 60 | "name": "Guilherme Blanco", 61 | "email": "guilhermeblanco@gmail.com" 62 | }, 63 | { 64 | "name": "Jonathan Wage", 65 | "email": "jonwage@gmail.com" 66 | }, 67 | { 68 | "name": "Johannes Schmitt", 69 | "email": "schmittjoh@gmail.com" 70 | } 71 | ], 72 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 73 | "homepage": "http://www.doctrine-project.org", 74 | "keywords": [ 75 | "inflection", 76 | "pluralize", 77 | "singularize", 78 | "string" 79 | ], 80 | "time": "2018-01-09T20:05:19+00:00" 81 | }, 82 | { 83 | "name": "doctrine/lexer", 84 | "version": "v1.0.1", 85 | "source": { 86 | "type": "git", 87 | "url": "https://github.com/doctrine/lexer.git", 88 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" 89 | }, 90 | "dist": { 91 | "type": "zip", 92 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", 93 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", 94 | "shasum": "", 95 | "mirrors": [ 96 | { 97 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 98 | "preferred": true 99 | } 100 | ] 101 | }, 102 | "require": { 103 | "php": ">=5.3.2" 104 | }, 105 | "type": "library", 106 | "extra": { 107 | "branch-alias": { 108 | "dev-master": "1.0.x-dev" 109 | } 110 | }, 111 | "autoload": { 112 | "psr-0": { 113 | "Doctrine\\Common\\Lexer\\": "lib/" 114 | } 115 | }, 116 | "notification-url": "https://packagist.org/downloads/", 117 | "license": [ 118 | "MIT" 119 | ], 120 | "authors": [ 121 | { 122 | "name": "Roman Borschel", 123 | "email": "roman@code-factory.org" 124 | }, 125 | { 126 | "name": "Guilherme Blanco", 127 | "email": "guilhermeblanco@gmail.com" 128 | }, 129 | { 130 | "name": "Johannes Schmitt", 131 | "email": "schmittjoh@gmail.com" 132 | } 133 | ], 134 | "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", 135 | "homepage": "http://www.doctrine-project.org", 136 | "keywords": [ 137 | "lexer", 138 | "parser" 139 | ], 140 | "time": "2014-09-09T13:34:57+00:00" 141 | }, 142 | { 143 | "name": "dragonmantank/cron-expression", 144 | "version": "v2.2.0", 145 | "source": { 146 | "type": "git", 147 | "url": "https://github.com/dragonmantank/cron-expression.git", 148 | "reference": "92a2c3768d50e21a1f26a53cb795ce72806266c5" 149 | }, 150 | "dist": { 151 | "type": "zip", 152 | "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/92a2c3768d50e21a1f26a53cb795ce72806266c5", 153 | "reference": "92a2c3768d50e21a1f26a53cb795ce72806266c5", 154 | "shasum": "", 155 | "mirrors": [ 156 | { 157 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 158 | "preferred": true 159 | } 160 | ] 161 | }, 162 | "require": { 163 | "php": ">=7.0.0" 164 | }, 165 | "require-dev": { 166 | "phpunit/phpunit": "~6.4" 167 | }, 168 | "type": "library", 169 | "autoload": { 170 | "psr-4": { 171 | "Cron\\": "src/Cron/" 172 | } 173 | }, 174 | "notification-url": "https://packagist.org/downloads/", 175 | "license": [ 176 | "MIT" 177 | ], 178 | "authors": [ 179 | { 180 | "name": "Michael Dowling", 181 | "email": "mtdowling@gmail.com", 182 | "homepage": "https://github.com/mtdowling" 183 | }, 184 | { 185 | "name": "Chris Tankersley", 186 | "email": "chris@ctankersley.com", 187 | "homepage": "https://github.com/dragonmantank" 188 | } 189 | ], 190 | "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", 191 | "keywords": [ 192 | "cron", 193 | "schedule" 194 | ], 195 | "time": "2018-06-06T03:12:17+00:00" 196 | }, 197 | { 198 | "name": "egulias/email-validator", 199 | "version": "2.1.5", 200 | "source": { 201 | "type": "git", 202 | "url": "https://github.com/egulias/EmailValidator.git", 203 | "reference": "54859fabea8b3beecbb1a282888d5c990036b9e3" 204 | }, 205 | "dist": { 206 | "type": "zip", 207 | "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/54859fabea8b3beecbb1a282888d5c990036b9e3", 208 | "reference": "54859fabea8b3beecbb1a282888d5c990036b9e3", 209 | "shasum": "", 210 | "mirrors": [ 211 | { 212 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 213 | "preferred": true 214 | } 215 | ] 216 | }, 217 | "require": { 218 | "doctrine/lexer": "^1.0.1", 219 | "php": ">= 5.5" 220 | }, 221 | "require-dev": { 222 | "dominicsayers/isemail": "dev-master", 223 | "phpunit/phpunit": "^4.8.35||^5.7||^6.0", 224 | "satooshi/php-coveralls": "^1.0.1" 225 | }, 226 | "suggest": { 227 | "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" 228 | }, 229 | "type": "library", 230 | "extra": { 231 | "branch-alias": { 232 | "dev-master": "2.0.x-dev" 233 | } 234 | }, 235 | "autoload": { 236 | "psr-4": { 237 | "Egulias\\EmailValidator\\": "EmailValidator" 238 | } 239 | }, 240 | "notification-url": "https://packagist.org/downloads/", 241 | "license": [ 242 | "MIT" 243 | ], 244 | "authors": [ 245 | { 246 | "name": "Eduardo Gulias Davis" 247 | } 248 | ], 249 | "description": "A library for validating emails against several RFCs", 250 | "homepage": "https://github.com/egulias/EmailValidator", 251 | "keywords": [ 252 | "email", 253 | "emailvalidation", 254 | "emailvalidator", 255 | "validation", 256 | "validator" 257 | ], 258 | "time": "2018-08-16T20:49:45+00:00" 259 | }, 260 | { 261 | "name": "erusev/parsedown", 262 | "version": "1.7.1", 263 | "source": { 264 | "type": "git", 265 | "url": "https://github.com/erusev/parsedown.git", 266 | "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" 267 | }, 268 | "dist": { 269 | "type": "zip", 270 | "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", 271 | "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", 272 | "shasum": "", 273 | "mirrors": [ 274 | { 275 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 276 | "preferred": true 277 | } 278 | ] 279 | }, 280 | "require": { 281 | "ext-mbstring": "*", 282 | "php": ">=5.3.0" 283 | }, 284 | "require-dev": { 285 | "phpunit/phpunit": "^4.8.35" 286 | }, 287 | "type": "library", 288 | "autoload": { 289 | "psr-0": { 290 | "Parsedown": "" 291 | } 292 | }, 293 | "notification-url": "https://packagist.org/downloads/", 294 | "license": [ 295 | "MIT" 296 | ], 297 | "authors": [ 298 | { 299 | "name": "Emanuil Rusev", 300 | "email": "hello@erusev.com", 301 | "homepage": "http://erusev.com" 302 | } 303 | ], 304 | "description": "Parser for Markdown.", 305 | "homepage": "http://parsedown.org", 306 | "keywords": [ 307 | "markdown", 308 | "parser" 309 | ], 310 | "time": "2018-03-08T01:11:30+00:00" 311 | }, 312 | { 313 | "name": "laravel/framework", 314 | "version": "v5.7.3", 315 | "source": { 316 | "type": "git", 317 | "url": "https://github.com/laravel/framework.git", 318 | "reference": "536a024e3ef6b93f55f4039a7f4568efa7e60aea" 319 | }, 320 | "dist": { 321 | "type": "zip", 322 | "url": "https://api.github.com/repos/laravel/framework/zipball/536a024e3ef6b93f55f4039a7f4568efa7e60aea", 323 | "reference": "536a024e3ef6b93f55f4039a7f4568efa7e60aea", 324 | "shasum": "", 325 | "mirrors": [ 326 | { 327 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 328 | "preferred": true 329 | } 330 | ] 331 | }, 332 | "require": { 333 | "doctrine/inflector": "^1.1", 334 | "dragonmantank/cron-expression": "^2.0", 335 | "erusev/parsedown": "^1.7", 336 | "ext-mbstring": "*", 337 | "ext-openssl": "*", 338 | "league/flysystem": "^1.0.8", 339 | "monolog/monolog": "^1.12", 340 | "nesbot/carbon": "^1.26.3", 341 | "php": "^7.1.3", 342 | "psr/container": "^1.0", 343 | "psr/simple-cache": "^1.0", 344 | "ramsey/uuid": "^3.7", 345 | "swiftmailer/swiftmailer": "^6.0", 346 | "symfony/console": "^4.1", 347 | "symfony/debug": "^4.1", 348 | "symfony/finder": "^4.1", 349 | "symfony/http-foundation": "^4.1", 350 | "symfony/http-kernel": "^4.1", 351 | "symfony/process": "^4.1", 352 | "symfony/routing": "^4.1", 353 | "symfony/var-dumper": "^4.1", 354 | "tijsverkoyen/css-to-inline-styles": "^2.2.1", 355 | "vlucas/phpdotenv": "^2.2" 356 | }, 357 | "conflict": { 358 | "tightenco/collect": "<5.5.33" 359 | }, 360 | "replace": { 361 | "illuminate/auth": "self.version", 362 | "illuminate/broadcasting": "self.version", 363 | "illuminate/bus": "self.version", 364 | "illuminate/cache": "self.version", 365 | "illuminate/config": "self.version", 366 | "illuminate/console": "self.version", 367 | "illuminate/container": "self.version", 368 | "illuminate/contracts": "self.version", 369 | "illuminate/cookie": "self.version", 370 | "illuminate/database": "self.version", 371 | "illuminate/encryption": "self.version", 372 | "illuminate/events": "self.version", 373 | "illuminate/filesystem": "self.version", 374 | "illuminate/hashing": "self.version", 375 | "illuminate/http": "self.version", 376 | "illuminate/log": "self.version", 377 | "illuminate/mail": "self.version", 378 | "illuminate/notifications": "self.version", 379 | "illuminate/pagination": "self.version", 380 | "illuminate/pipeline": "self.version", 381 | "illuminate/queue": "self.version", 382 | "illuminate/redis": "self.version", 383 | "illuminate/routing": "self.version", 384 | "illuminate/session": "self.version", 385 | "illuminate/support": "self.version", 386 | "illuminate/translation": "self.version", 387 | "illuminate/validation": "self.version", 388 | "illuminate/view": "self.version" 389 | }, 390 | "require-dev": { 391 | "aws/aws-sdk-php": "^3.0", 392 | "doctrine/dbal": "^2.6", 393 | "filp/whoops": "^2.1.4", 394 | "league/flysystem-cached-adapter": "^1.0", 395 | "mockery/mockery": "^1.0", 396 | "moontoast/math": "^1.1", 397 | "orchestra/testbench-core": "3.7.*", 398 | "pda/pheanstalk": "^3.0", 399 | "phpunit/phpunit": "^7.0", 400 | "predis/predis": "^1.1.1", 401 | "symfony/css-selector": "^4.1", 402 | "symfony/dom-crawler": "^4.1", 403 | "true/punycode": "^2.1" 404 | }, 405 | "suggest": { 406 | "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", 407 | "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", 408 | "ext-pcntl": "Required to use all features of the queue worker.", 409 | "ext-posix": "Required to use all features of the queue worker.", 410 | "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", 411 | "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", 412 | "laravel/tinker": "Required to use the tinker console command (^1.0).", 413 | "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", 414 | "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", 415 | "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", 416 | "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", 417 | "moontoast/math": "Required to use ordered UUIDs (^1.1).", 418 | "nexmo/client": "Required to use the Nexmo transport (^1.0).", 419 | "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0).", 420 | "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", 421 | "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", 422 | "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).", 423 | "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).", 424 | "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)." 425 | }, 426 | "type": "library", 427 | "extra": { 428 | "branch-alias": { 429 | "dev-master": "5.7-dev" 430 | } 431 | }, 432 | "autoload": { 433 | "files": [ 434 | "src/Illuminate/Foundation/helpers.php", 435 | "src/Illuminate/Support/helpers.php" 436 | ], 437 | "psr-4": { 438 | "Illuminate\\": "src/Illuminate/" 439 | } 440 | }, 441 | "notification-url": "https://packagist.org/downloads/", 442 | "license": [ 443 | "MIT" 444 | ], 445 | "authors": [ 446 | { 447 | "name": "Taylor Otwell", 448 | "email": "taylor@laravel.com" 449 | } 450 | ], 451 | "description": "The Laravel Framework.", 452 | "homepage": "https://laravel.com", 453 | "keywords": [ 454 | "framework", 455 | "laravel" 456 | ], 457 | "time": "2018-09-11T13:42:55+00:00" 458 | }, 459 | { 460 | "name": "league/flysystem", 461 | "version": "1.0.46", 462 | "source": { 463 | "type": "git", 464 | "url": "https://github.com/thephpleague/flysystem.git", 465 | "reference": "f3e0d925c18b92cf3ce84ea5cc58d62a1762a2b2" 466 | }, 467 | "dist": { 468 | "type": "zip", 469 | "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f3e0d925c18b92cf3ce84ea5cc58d62a1762a2b2", 470 | "reference": "f3e0d925c18b92cf3ce84ea5cc58d62a1762a2b2", 471 | "shasum": "", 472 | "mirrors": [ 473 | { 474 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 475 | "preferred": true 476 | } 477 | ] 478 | }, 479 | "require": { 480 | "php": ">=5.5.9" 481 | }, 482 | "conflict": { 483 | "league/flysystem-sftp": "<1.0.6" 484 | }, 485 | "require-dev": { 486 | "ext-fileinfo": "*", 487 | "phpspec/phpspec": "^3.4", 488 | "phpunit/phpunit": "^5.7.10" 489 | }, 490 | "suggest": { 491 | "ext-fileinfo": "Required for MimeType", 492 | "ext-ftp": "Allows you to use FTP server storage", 493 | "ext-openssl": "Allows you to use FTPS server storage", 494 | "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", 495 | "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", 496 | "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", 497 | "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", 498 | "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", 499 | "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", 500 | "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", 501 | "league/flysystem-webdav": "Allows you to use WebDAV storage", 502 | "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", 503 | "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", 504 | "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" 505 | }, 506 | "type": "library", 507 | "extra": { 508 | "branch-alias": { 509 | "dev-master": "1.1-dev" 510 | } 511 | }, 512 | "autoload": { 513 | "psr-4": { 514 | "League\\Flysystem\\": "src/" 515 | } 516 | }, 517 | "notification-url": "https://packagist.org/downloads/", 518 | "license": [ 519 | "MIT" 520 | ], 521 | "authors": [ 522 | { 523 | "name": "Frank de Jonge", 524 | "email": "info@frenky.net" 525 | } 526 | ], 527 | "description": "Filesystem abstraction: Many filesystems, one API.", 528 | "keywords": [ 529 | "Cloud Files", 530 | "WebDAV", 531 | "abstraction", 532 | "aws", 533 | "cloud", 534 | "copy.com", 535 | "dropbox", 536 | "file systems", 537 | "files", 538 | "filesystem", 539 | "filesystems", 540 | "ftp", 541 | "rackspace", 542 | "remote", 543 | "s3", 544 | "sftp", 545 | "storage" 546 | ], 547 | "time": "2018-08-22T07:45:22+00:00" 548 | }, 549 | { 550 | "name": "monolog/monolog", 551 | "version": "1.23.0", 552 | "source": { 553 | "type": "git", 554 | "url": "https://github.com/Seldaek/monolog.git", 555 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" 556 | }, 557 | "dist": { 558 | "type": "zip", 559 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", 560 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", 561 | "shasum": "", 562 | "mirrors": [ 563 | { 564 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 565 | "preferred": true 566 | } 567 | ] 568 | }, 569 | "require": { 570 | "php": ">=5.3.0", 571 | "psr/log": "~1.0" 572 | }, 573 | "provide": { 574 | "psr/log-implementation": "1.0.0" 575 | }, 576 | "require-dev": { 577 | "aws/aws-sdk-php": "^2.4.9 || ^3.0", 578 | "doctrine/couchdb": "~1.0@dev", 579 | "graylog2/gelf-php": "~1.0", 580 | "jakub-onderka/php-parallel-lint": "0.9", 581 | "php-amqplib/php-amqplib": "~2.4", 582 | "php-console/php-console": "^3.1.3", 583 | "phpunit/phpunit": "~4.5", 584 | "phpunit/phpunit-mock-objects": "2.3.0", 585 | "ruflin/elastica": ">=0.90 <3.0", 586 | "sentry/sentry": "^0.13", 587 | "swiftmailer/swiftmailer": "^5.3|^6.0" 588 | }, 589 | "suggest": { 590 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 591 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 592 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 593 | "ext-mongo": "Allow sending log messages to a MongoDB server", 594 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 595 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", 596 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", 597 | "php-console/php-console": "Allow sending log messages to Google Chrome", 598 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 599 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server", 600 | "sentry/sentry": "Allow sending log messages to a Sentry server" 601 | }, 602 | "type": "library", 603 | "extra": { 604 | "branch-alias": { 605 | "dev-master": "2.0.x-dev" 606 | } 607 | }, 608 | "autoload": { 609 | "psr-4": { 610 | "Monolog\\": "src/Monolog" 611 | } 612 | }, 613 | "notification-url": "https://packagist.org/downloads/", 614 | "license": [ 615 | "MIT" 616 | ], 617 | "authors": [ 618 | { 619 | "name": "Jordi Boggiano", 620 | "email": "j.boggiano@seld.be", 621 | "homepage": "http://seld.be" 622 | } 623 | ], 624 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 625 | "homepage": "http://github.com/Seldaek/monolog", 626 | "keywords": [ 627 | "log", 628 | "logging", 629 | "psr-3" 630 | ], 631 | "time": "2017-06-19T01:22:40+00:00" 632 | }, 633 | { 634 | "name": "nesbot/carbon", 635 | "version": "1.33.0", 636 | "source": { 637 | "type": "git", 638 | "url": "https://github.com/briannesbitt/Carbon.git", 639 | "reference": "55667c1007a99e82030874b1bb14d24d07108413" 640 | }, 641 | "dist": { 642 | "type": "zip", 643 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/55667c1007a99e82030874b1bb14d24d07108413", 644 | "reference": "55667c1007a99e82030874b1bb14d24d07108413", 645 | "shasum": "", 646 | "mirrors": [ 647 | { 648 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 649 | "preferred": true 650 | } 651 | ] 652 | }, 653 | "require": { 654 | "php": ">=5.3.9", 655 | "symfony/translation": "~2.6 || ~3.0 || ~4.0" 656 | }, 657 | "require-dev": { 658 | "friendsofphp/php-cs-fixer": "~2", 659 | "phpunit/phpunit": "^4.8.35 || ^5.7" 660 | }, 661 | "type": "library", 662 | "extra": { 663 | "laravel": { 664 | "providers": [ 665 | "Carbon\\Laravel\\ServiceProvider" 666 | ] 667 | } 668 | }, 669 | "autoload": { 670 | "psr-4": { 671 | "": "src/" 672 | } 673 | }, 674 | "notification-url": "https://packagist.org/downloads/", 675 | "license": [ 676 | "MIT" 677 | ], 678 | "authors": [ 679 | { 680 | "name": "Brian Nesbitt", 681 | "email": "brian@nesbot.com", 682 | "homepage": "http://nesbot.com" 683 | } 684 | ], 685 | "description": "A simple API extension for DateTime.", 686 | "homepage": "http://carbon.nesbot.com", 687 | "keywords": [ 688 | "date", 689 | "datetime", 690 | "time" 691 | ], 692 | "time": "2018-08-07T08:39:47+00:00" 693 | }, 694 | { 695 | "name": "paragonie/random_compat", 696 | "version": "v9.99.99", 697 | "source": { 698 | "type": "git", 699 | "url": "https://github.com/paragonie/random_compat.git", 700 | "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" 701 | }, 702 | "dist": { 703 | "type": "zip", 704 | "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", 705 | "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", 706 | "shasum": "", 707 | "mirrors": [ 708 | { 709 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 710 | "preferred": true 711 | } 712 | ] 713 | }, 714 | "require": { 715 | "php": "^7" 716 | }, 717 | "require-dev": { 718 | "phpunit/phpunit": "4.*|5.*", 719 | "vimeo/psalm": "^1" 720 | }, 721 | "suggest": { 722 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." 723 | }, 724 | "type": "library", 725 | "notification-url": "https://packagist.org/downloads/", 726 | "license": [ 727 | "MIT" 728 | ], 729 | "authors": [ 730 | { 731 | "name": "Paragon Initiative Enterprises", 732 | "email": "security@paragonie.com", 733 | "homepage": "https://paragonie.com" 734 | } 735 | ], 736 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", 737 | "keywords": [ 738 | "csprng", 739 | "polyfill", 740 | "pseudorandom", 741 | "random" 742 | ], 743 | "time": "2018-07-02T15:55:56+00:00" 744 | }, 745 | { 746 | "name": "psr/container", 747 | "version": "1.0.0", 748 | "source": { 749 | "type": "git", 750 | "url": "https://github.com/php-fig/container.git", 751 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 752 | }, 753 | "dist": { 754 | "type": "zip", 755 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 756 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 757 | "shasum": "", 758 | "mirrors": [ 759 | { 760 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 761 | "preferred": true 762 | } 763 | ] 764 | }, 765 | "require": { 766 | "php": ">=5.3.0" 767 | }, 768 | "type": "library", 769 | "extra": { 770 | "branch-alias": { 771 | "dev-master": "1.0.x-dev" 772 | } 773 | }, 774 | "autoload": { 775 | "psr-4": { 776 | "Psr\\Container\\": "src/" 777 | } 778 | }, 779 | "notification-url": "https://packagist.org/downloads/", 780 | "license": [ 781 | "MIT" 782 | ], 783 | "authors": [ 784 | { 785 | "name": "PHP-FIG", 786 | "homepage": "http://www.php-fig.org/" 787 | } 788 | ], 789 | "description": "Common Container Interface (PHP FIG PSR-11)", 790 | "homepage": "https://github.com/php-fig/container", 791 | "keywords": [ 792 | "PSR-11", 793 | "container", 794 | "container-interface", 795 | "container-interop", 796 | "psr" 797 | ], 798 | "time": "2017-02-14T16:28:37+00:00" 799 | }, 800 | { 801 | "name": "psr/log", 802 | "version": "1.0.2", 803 | "source": { 804 | "type": "git", 805 | "url": "https://github.com/php-fig/log.git", 806 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 807 | }, 808 | "dist": { 809 | "type": "zip", 810 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 811 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 812 | "shasum": "", 813 | "mirrors": [ 814 | { 815 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 816 | "preferred": true 817 | } 818 | ] 819 | }, 820 | "require": { 821 | "php": ">=5.3.0" 822 | }, 823 | "type": "library", 824 | "extra": { 825 | "branch-alias": { 826 | "dev-master": "1.0.x-dev" 827 | } 828 | }, 829 | "autoload": { 830 | "psr-4": { 831 | "Psr\\Log\\": "Psr/Log/" 832 | } 833 | }, 834 | "notification-url": "https://packagist.org/downloads/", 835 | "license": [ 836 | "MIT" 837 | ], 838 | "authors": [ 839 | { 840 | "name": "PHP-FIG", 841 | "homepage": "http://www.php-fig.org/" 842 | } 843 | ], 844 | "description": "Common interface for logging libraries", 845 | "homepage": "https://github.com/php-fig/log", 846 | "keywords": [ 847 | "log", 848 | "psr", 849 | "psr-3" 850 | ], 851 | "time": "2016-10-10T12:19:37+00:00" 852 | }, 853 | { 854 | "name": "psr/simple-cache", 855 | "version": "1.0.1", 856 | "source": { 857 | "type": "git", 858 | "url": "https://github.com/php-fig/simple-cache.git", 859 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" 860 | }, 861 | "dist": { 862 | "type": "zip", 863 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 864 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 865 | "shasum": "", 866 | "mirrors": [ 867 | { 868 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 869 | "preferred": true 870 | } 871 | ] 872 | }, 873 | "require": { 874 | "php": ">=5.3.0" 875 | }, 876 | "type": "library", 877 | "extra": { 878 | "branch-alias": { 879 | "dev-master": "1.0.x-dev" 880 | } 881 | }, 882 | "autoload": { 883 | "psr-4": { 884 | "Psr\\SimpleCache\\": "src/" 885 | } 886 | }, 887 | "notification-url": "https://packagist.org/downloads/", 888 | "license": [ 889 | "MIT" 890 | ], 891 | "authors": [ 892 | { 893 | "name": "PHP-FIG", 894 | "homepage": "http://www.php-fig.org/" 895 | } 896 | ], 897 | "description": "Common interfaces for simple caching", 898 | "keywords": [ 899 | "cache", 900 | "caching", 901 | "psr", 902 | "psr-16", 903 | "simple-cache" 904 | ], 905 | "time": "2017-10-23T01:57:42+00:00" 906 | }, 907 | { 908 | "name": "ramsey/uuid", 909 | "version": "3.8.0", 910 | "source": { 911 | "type": "git", 912 | "url": "https://github.com/ramsey/uuid.git", 913 | "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" 914 | }, 915 | "dist": { 916 | "type": "zip", 917 | "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", 918 | "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", 919 | "shasum": "", 920 | "mirrors": [ 921 | { 922 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 923 | "preferred": true 924 | } 925 | ] 926 | }, 927 | "require": { 928 | "paragonie/random_compat": "^1.0|^2.0|9.99.99", 929 | "php": "^5.4 || ^7.0", 930 | "symfony/polyfill-ctype": "^1.8" 931 | }, 932 | "replace": { 933 | "rhumsaa/uuid": "self.version" 934 | }, 935 | "require-dev": { 936 | "codeception/aspect-mock": "^1.0 | ~2.0.0", 937 | "doctrine/annotations": "~1.2.0", 938 | "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", 939 | "ircmaxell/random-lib": "^1.1", 940 | "jakub-onderka/php-parallel-lint": "^0.9.0", 941 | "mockery/mockery": "^0.9.9", 942 | "moontoast/math": "^1.1", 943 | "php-mock/php-mock-phpunit": "^0.3|^1.1", 944 | "phpunit/phpunit": "^4.7|^5.0|^6.5", 945 | "squizlabs/php_codesniffer": "^2.3" 946 | }, 947 | "suggest": { 948 | "ext-ctype": "Provides support for PHP Ctype functions", 949 | "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", 950 | "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", 951 | "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", 952 | "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", 953 | "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", 954 | "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." 955 | }, 956 | "type": "library", 957 | "extra": { 958 | "branch-alias": { 959 | "dev-master": "3.x-dev" 960 | } 961 | }, 962 | "autoload": { 963 | "psr-4": { 964 | "Ramsey\\Uuid\\": "src/" 965 | } 966 | }, 967 | "notification-url": "https://packagist.org/downloads/", 968 | "license": [ 969 | "MIT" 970 | ], 971 | "authors": [ 972 | { 973 | "name": "Marijn Huizendveld", 974 | "email": "marijn.huizendveld@gmail.com" 975 | }, 976 | { 977 | "name": "Thibaud Fabre", 978 | "email": "thibaud@aztech.io" 979 | }, 980 | { 981 | "name": "Ben Ramsey", 982 | "email": "ben@benramsey.com", 983 | "homepage": "https://benramsey.com" 984 | } 985 | ], 986 | "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", 987 | "homepage": "https://github.com/ramsey/uuid", 988 | "keywords": [ 989 | "guid", 990 | "identifier", 991 | "uuid" 992 | ], 993 | "time": "2018-07-19T23:38:55+00:00" 994 | }, 995 | { 996 | "name": "swiftmailer/swiftmailer", 997 | "version": "v6.1.3", 998 | "source": { 999 | "type": "git", 1000 | "url": "https://github.com/swiftmailer/swiftmailer.git", 1001 | "reference": "8ddcb66ac10c392d3beb54829eef8ac1438595f4" 1002 | }, 1003 | "dist": { 1004 | "type": "zip", 1005 | "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8ddcb66ac10c392d3beb54829eef8ac1438595f4", 1006 | "reference": "8ddcb66ac10c392d3beb54829eef8ac1438595f4", 1007 | "shasum": "", 1008 | "mirrors": [ 1009 | { 1010 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1011 | "preferred": true 1012 | } 1013 | ] 1014 | }, 1015 | "require": { 1016 | "egulias/email-validator": "~2.0", 1017 | "php": ">=7.0.0" 1018 | }, 1019 | "require-dev": { 1020 | "mockery/mockery": "~0.9.1", 1021 | "symfony/phpunit-bridge": "~3.3@dev" 1022 | }, 1023 | "suggest": { 1024 | "ext-intl": "Needed to support internationalized email addresses", 1025 | "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" 1026 | }, 1027 | "type": "library", 1028 | "extra": { 1029 | "branch-alias": { 1030 | "dev-master": "6.1-dev" 1031 | } 1032 | }, 1033 | "autoload": { 1034 | "files": [ 1035 | "lib/swift_required.php" 1036 | ] 1037 | }, 1038 | "notification-url": "https://packagist.org/downloads/", 1039 | "license": [ 1040 | "MIT" 1041 | ], 1042 | "authors": [ 1043 | { 1044 | "name": "Chris Corbyn" 1045 | }, 1046 | { 1047 | "name": "Fabien Potencier", 1048 | "email": "fabien@symfony.com" 1049 | } 1050 | ], 1051 | "description": "Swiftmailer, free feature-rich PHP mailer", 1052 | "homepage": "https://swiftmailer.symfony.com", 1053 | "keywords": [ 1054 | "email", 1055 | "mail", 1056 | "mailer" 1057 | ], 1058 | "time": "2018-09-11T07:12:52+00:00" 1059 | }, 1060 | { 1061 | "name": "symfony/console", 1062 | "version": "v4.1.4", 1063 | "source": { 1064 | "type": "git", 1065 | "url": "https://github.com/symfony/console.git", 1066 | "reference": "ca80b8ced97cf07390078b29773dc384c39eee1f" 1067 | }, 1068 | "dist": { 1069 | "type": "zip", 1070 | "url": "https://api.github.com/repos/symfony/console/zipball/ca80b8ced97cf07390078b29773dc384c39eee1f", 1071 | "reference": "ca80b8ced97cf07390078b29773dc384c39eee1f", 1072 | "shasum": "", 1073 | "mirrors": [ 1074 | { 1075 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1076 | "preferred": true 1077 | } 1078 | ] 1079 | }, 1080 | "require": { 1081 | "php": "^7.1.3", 1082 | "symfony/polyfill-mbstring": "~1.0" 1083 | }, 1084 | "conflict": { 1085 | "symfony/dependency-injection": "<3.4", 1086 | "symfony/process": "<3.3" 1087 | }, 1088 | "require-dev": { 1089 | "psr/log": "~1.0", 1090 | "symfony/config": "~3.4|~4.0", 1091 | "symfony/dependency-injection": "~3.4|~4.0", 1092 | "symfony/event-dispatcher": "~3.4|~4.0", 1093 | "symfony/lock": "~3.4|~4.0", 1094 | "symfony/process": "~3.4|~4.0" 1095 | }, 1096 | "suggest": { 1097 | "psr/log-implementation": "For using the console logger", 1098 | "symfony/event-dispatcher": "", 1099 | "symfony/lock": "", 1100 | "symfony/process": "" 1101 | }, 1102 | "type": "library", 1103 | "extra": { 1104 | "branch-alias": { 1105 | "dev-master": "4.1-dev" 1106 | } 1107 | }, 1108 | "autoload": { 1109 | "psr-4": { 1110 | "Symfony\\Component\\Console\\": "" 1111 | }, 1112 | "exclude-from-classmap": [ 1113 | "/Tests/" 1114 | ] 1115 | }, 1116 | "notification-url": "https://packagist.org/downloads/", 1117 | "license": [ 1118 | "MIT" 1119 | ], 1120 | "authors": [ 1121 | { 1122 | "name": "Fabien Potencier", 1123 | "email": "fabien@symfony.com" 1124 | }, 1125 | { 1126 | "name": "Symfony Community", 1127 | "homepage": "https://symfony.com/contributors" 1128 | } 1129 | ], 1130 | "description": "Symfony Console Component", 1131 | "homepage": "https://symfony.com", 1132 | "time": "2018-07-26T11:24:31+00:00" 1133 | }, 1134 | { 1135 | "name": "symfony/css-selector", 1136 | "version": "v4.1.4", 1137 | "source": { 1138 | "type": "git", 1139 | "url": "https://github.com/symfony/css-selector.git", 1140 | "reference": "2a4df7618f869b456f9096781e78c57b509d76c7" 1141 | }, 1142 | "dist": { 1143 | "type": "zip", 1144 | "url": "https://api.github.com/repos/symfony/css-selector/zipball/2a4df7618f869b456f9096781e78c57b509d76c7", 1145 | "reference": "2a4df7618f869b456f9096781e78c57b509d76c7", 1146 | "shasum": "", 1147 | "mirrors": [ 1148 | { 1149 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1150 | "preferred": true 1151 | } 1152 | ] 1153 | }, 1154 | "require": { 1155 | "php": "^7.1.3" 1156 | }, 1157 | "type": "library", 1158 | "extra": { 1159 | "branch-alias": { 1160 | "dev-master": "4.1-dev" 1161 | } 1162 | }, 1163 | "autoload": { 1164 | "psr-4": { 1165 | "Symfony\\Component\\CssSelector\\": "" 1166 | }, 1167 | "exclude-from-classmap": [ 1168 | "/Tests/" 1169 | ] 1170 | }, 1171 | "notification-url": "https://packagist.org/downloads/", 1172 | "license": [ 1173 | "MIT" 1174 | ], 1175 | "authors": [ 1176 | { 1177 | "name": "Jean-François Simon", 1178 | "email": "jeanfrancois.simon@sensiolabs.com" 1179 | }, 1180 | { 1181 | "name": "Fabien Potencier", 1182 | "email": "fabien@symfony.com" 1183 | }, 1184 | { 1185 | "name": "Symfony Community", 1186 | "homepage": "https://symfony.com/contributors" 1187 | } 1188 | ], 1189 | "description": "Symfony CssSelector Component", 1190 | "homepage": "https://symfony.com", 1191 | "time": "2018-07-26T09:10:45+00:00" 1192 | }, 1193 | { 1194 | "name": "symfony/debug", 1195 | "version": "v4.1.4", 1196 | "source": { 1197 | "type": "git", 1198 | "url": "https://github.com/symfony/debug.git", 1199 | "reference": "47ead688f1f2877f3f14219670f52e4722ee7052" 1200 | }, 1201 | "dist": { 1202 | "type": "zip", 1203 | "url": "https://api.github.com/repos/symfony/debug/zipball/47ead688f1f2877f3f14219670f52e4722ee7052", 1204 | "reference": "47ead688f1f2877f3f14219670f52e4722ee7052", 1205 | "shasum": "", 1206 | "mirrors": [ 1207 | { 1208 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1209 | "preferred": true 1210 | } 1211 | ] 1212 | }, 1213 | "require": { 1214 | "php": "^7.1.3", 1215 | "psr/log": "~1.0" 1216 | }, 1217 | "conflict": { 1218 | "symfony/http-kernel": "<3.4" 1219 | }, 1220 | "require-dev": { 1221 | "symfony/http-kernel": "~3.4|~4.0" 1222 | }, 1223 | "type": "library", 1224 | "extra": { 1225 | "branch-alias": { 1226 | "dev-master": "4.1-dev" 1227 | } 1228 | }, 1229 | "autoload": { 1230 | "psr-4": { 1231 | "Symfony\\Component\\Debug\\": "" 1232 | }, 1233 | "exclude-from-classmap": [ 1234 | "/Tests/" 1235 | ] 1236 | }, 1237 | "notification-url": "https://packagist.org/downloads/", 1238 | "license": [ 1239 | "MIT" 1240 | ], 1241 | "authors": [ 1242 | { 1243 | "name": "Fabien Potencier", 1244 | "email": "fabien@symfony.com" 1245 | }, 1246 | { 1247 | "name": "Symfony Community", 1248 | "homepage": "https://symfony.com/contributors" 1249 | } 1250 | ], 1251 | "description": "Symfony Debug Component", 1252 | "homepage": "https://symfony.com", 1253 | "time": "2018-08-03T11:13:38+00:00" 1254 | }, 1255 | { 1256 | "name": "symfony/event-dispatcher", 1257 | "version": "v4.1.4", 1258 | "source": { 1259 | "type": "git", 1260 | "url": "https://github.com/symfony/event-dispatcher.git", 1261 | "reference": "bfb30c2ad377615a463ebbc875eba64a99f6aa3e" 1262 | }, 1263 | "dist": { 1264 | "type": "zip", 1265 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/bfb30c2ad377615a463ebbc875eba64a99f6aa3e", 1266 | "reference": "bfb30c2ad377615a463ebbc875eba64a99f6aa3e", 1267 | "shasum": "", 1268 | "mirrors": [ 1269 | { 1270 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1271 | "preferred": true 1272 | } 1273 | ] 1274 | }, 1275 | "require": { 1276 | "php": "^7.1.3" 1277 | }, 1278 | "conflict": { 1279 | "symfony/dependency-injection": "<3.4" 1280 | }, 1281 | "require-dev": { 1282 | "psr/log": "~1.0", 1283 | "symfony/config": "~3.4|~4.0", 1284 | "symfony/dependency-injection": "~3.4|~4.0", 1285 | "symfony/expression-language": "~3.4|~4.0", 1286 | "symfony/stopwatch": "~3.4|~4.0" 1287 | }, 1288 | "suggest": { 1289 | "symfony/dependency-injection": "", 1290 | "symfony/http-kernel": "" 1291 | }, 1292 | "type": "library", 1293 | "extra": { 1294 | "branch-alias": { 1295 | "dev-master": "4.1-dev" 1296 | } 1297 | }, 1298 | "autoload": { 1299 | "psr-4": { 1300 | "Symfony\\Component\\EventDispatcher\\": "" 1301 | }, 1302 | "exclude-from-classmap": [ 1303 | "/Tests/" 1304 | ] 1305 | }, 1306 | "notification-url": "https://packagist.org/downloads/", 1307 | "license": [ 1308 | "MIT" 1309 | ], 1310 | "authors": [ 1311 | { 1312 | "name": "Fabien Potencier", 1313 | "email": "fabien@symfony.com" 1314 | }, 1315 | { 1316 | "name": "Symfony Community", 1317 | "homepage": "https://symfony.com/contributors" 1318 | } 1319 | ], 1320 | "description": "Symfony EventDispatcher Component", 1321 | "homepage": "https://symfony.com", 1322 | "time": "2018-07-26T09:10:45+00:00" 1323 | }, 1324 | { 1325 | "name": "symfony/finder", 1326 | "version": "v4.1.4", 1327 | "source": { 1328 | "type": "git", 1329 | "url": "https://github.com/symfony/finder.git", 1330 | "reference": "e162f1df3102d0b7472805a5a9d5db9fcf0a8068" 1331 | }, 1332 | "dist": { 1333 | "type": "zip", 1334 | "url": "https://api.github.com/repos/symfony/finder/zipball/e162f1df3102d0b7472805a5a9d5db9fcf0a8068", 1335 | "reference": "e162f1df3102d0b7472805a5a9d5db9fcf0a8068", 1336 | "shasum": "", 1337 | "mirrors": [ 1338 | { 1339 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1340 | "preferred": true 1341 | } 1342 | ] 1343 | }, 1344 | "require": { 1345 | "php": "^7.1.3" 1346 | }, 1347 | "type": "library", 1348 | "extra": { 1349 | "branch-alias": { 1350 | "dev-master": "4.1-dev" 1351 | } 1352 | }, 1353 | "autoload": { 1354 | "psr-4": { 1355 | "Symfony\\Component\\Finder\\": "" 1356 | }, 1357 | "exclude-from-classmap": [ 1358 | "/Tests/" 1359 | ] 1360 | }, 1361 | "notification-url": "https://packagist.org/downloads/", 1362 | "license": [ 1363 | "MIT" 1364 | ], 1365 | "authors": [ 1366 | { 1367 | "name": "Fabien Potencier", 1368 | "email": "fabien@symfony.com" 1369 | }, 1370 | { 1371 | "name": "Symfony Community", 1372 | "homepage": "https://symfony.com/contributors" 1373 | } 1374 | ], 1375 | "description": "Symfony Finder Component", 1376 | "homepage": "https://symfony.com", 1377 | "time": "2018-07-26T11:24:31+00:00" 1378 | }, 1379 | { 1380 | "name": "symfony/http-foundation", 1381 | "version": "v4.1.4", 1382 | "source": { 1383 | "type": "git", 1384 | "url": "https://github.com/symfony/http-foundation.git", 1385 | "reference": "3a5c91e133b220bb882b3cd773ba91bf39989345" 1386 | }, 1387 | "dist": { 1388 | "type": "zip", 1389 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3a5c91e133b220bb882b3cd773ba91bf39989345", 1390 | "reference": "3a5c91e133b220bb882b3cd773ba91bf39989345", 1391 | "shasum": "", 1392 | "mirrors": [ 1393 | { 1394 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1395 | "preferred": true 1396 | } 1397 | ] 1398 | }, 1399 | "require": { 1400 | "php": "^7.1.3", 1401 | "symfony/polyfill-mbstring": "~1.1" 1402 | }, 1403 | "require-dev": { 1404 | "predis/predis": "~1.0", 1405 | "symfony/expression-language": "~3.4|~4.0" 1406 | }, 1407 | "type": "library", 1408 | "extra": { 1409 | "branch-alias": { 1410 | "dev-master": "4.1-dev" 1411 | } 1412 | }, 1413 | "autoload": { 1414 | "psr-4": { 1415 | "Symfony\\Component\\HttpFoundation\\": "" 1416 | }, 1417 | "exclude-from-classmap": [ 1418 | "/Tests/" 1419 | ] 1420 | }, 1421 | "notification-url": "https://packagist.org/downloads/", 1422 | "license": [ 1423 | "MIT" 1424 | ], 1425 | "authors": [ 1426 | { 1427 | "name": "Fabien Potencier", 1428 | "email": "fabien@symfony.com" 1429 | }, 1430 | { 1431 | "name": "Symfony Community", 1432 | "homepage": "https://symfony.com/contributors" 1433 | } 1434 | ], 1435 | "description": "Symfony HttpFoundation Component", 1436 | "homepage": "https://symfony.com", 1437 | "time": "2018-08-27T17:47:02+00:00" 1438 | }, 1439 | { 1440 | "name": "symfony/http-kernel", 1441 | "version": "v4.1.4", 1442 | "source": { 1443 | "type": "git", 1444 | "url": "https://github.com/symfony/http-kernel.git", 1445 | "reference": "33de0a1ff2e1720096189e3ced682d7a4e8f5e35" 1446 | }, 1447 | "dist": { 1448 | "type": "zip", 1449 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/33de0a1ff2e1720096189e3ced682d7a4e8f5e35", 1450 | "reference": "33de0a1ff2e1720096189e3ced682d7a4e8f5e35", 1451 | "shasum": "", 1452 | "mirrors": [ 1453 | { 1454 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1455 | "preferred": true 1456 | } 1457 | ] 1458 | }, 1459 | "require": { 1460 | "php": "^7.1.3", 1461 | "psr/log": "~1.0", 1462 | "symfony/debug": "~3.4|~4.0", 1463 | "symfony/event-dispatcher": "~4.1", 1464 | "symfony/http-foundation": "^4.1.1", 1465 | "symfony/polyfill-ctype": "~1.8" 1466 | }, 1467 | "conflict": { 1468 | "symfony/config": "<3.4", 1469 | "symfony/dependency-injection": "<4.1", 1470 | "symfony/var-dumper": "<4.1.1", 1471 | "twig/twig": "<1.34|<2.4,>=2" 1472 | }, 1473 | "provide": { 1474 | "psr/log-implementation": "1.0" 1475 | }, 1476 | "require-dev": { 1477 | "psr/cache": "~1.0", 1478 | "symfony/browser-kit": "~3.4|~4.0", 1479 | "symfony/config": "~3.4|~4.0", 1480 | "symfony/console": "~3.4|~4.0", 1481 | "symfony/css-selector": "~3.4|~4.0", 1482 | "symfony/dependency-injection": "^4.1", 1483 | "symfony/dom-crawler": "~3.4|~4.0", 1484 | "symfony/expression-language": "~3.4|~4.0", 1485 | "symfony/finder": "~3.4|~4.0", 1486 | "symfony/process": "~3.4|~4.0", 1487 | "symfony/routing": "~3.4|~4.0", 1488 | "symfony/stopwatch": "~3.4|~4.0", 1489 | "symfony/templating": "~3.4|~4.0", 1490 | "symfony/translation": "~3.4|~4.0", 1491 | "symfony/var-dumper": "^4.1.1" 1492 | }, 1493 | "suggest": { 1494 | "symfony/browser-kit": "", 1495 | "symfony/config": "", 1496 | "symfony/console": "", 1497 | "symfony/dependency-injection": "", 1498 | "symfony/var-dumper": "" 1499 | }, 1500 | "type": "library", 1501 | "extra": { 1502 | "branch-alias": { 1503 | "dev-master": "4.1-dev" 1504 | } 1505 | }, 1506 | "autoload": { 1507 | "psr-4": { 1508 | "Symfony\\Component\\HttpKernel\\": "" 1509 | }, 1510 | "exclude-from-classmap": [ 1511 | "/Tests/" 1512 | ] 1513 | }, 1514 | "notification-url": "https://packagist.org/downloads/", 1515 | "license": [ 1516 | "MIT" 1517 | ], 1518 | "authors": [ 1519 | { 1520 | "name": "Fabien Potencier", 1521 | "email": "fabien@symfony.com" 1522 | }, 1523 | { 1524 | "name": "Symfony Community", 1525 | "homepage": "https://symfony.com/contributors" 1526 | } 1527 | ], 1528 | "description": "Symfony HttpKernel Component", 1529 | "homepage": "https://symfony.com", 1530 | "time": "2018-08-28T06:17:42+00:00" 1531 | }, 1532 | { 1533 | "name": "symfony/polyfill-ctype", 1534 | "version": "v1.9.0", 1535 | "source": { 1536 | "type": "git", 1537 | "url": "https://github.com/symfony/polyfill-ctype.git", 1538 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" 1539 | }, 1540 | "dist": { 1541 | "type": "zip", 1542 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", 1543 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", 1544 | "shasum": "", 1545 | "mirrors": [ 1546 | { 1547 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1548 | "preferred": true 1549 | } 1550 | ] 1551 | }, 1552 | "require": { 1553 | "php": ">=5.3.3" 1554 | }, 1555 | "suggest": { 1556 | "ext-ctype": "For best performance" 1557 | }, 1558 | "type": "library", 1559 | "extra": { 1560 | "branch-alias": { 1561 | "dev-master": "1.9-dev" 1562 | } 1563 | }, 1564 | "autoload": { 1565 | "psr-4": { 1566 | "Symfony\\Polyfill\\Ctype\\": "" 1567 | }, 1568 | "files": [ 1569 | "bootstrap.php" 1570 | ] 1571 | }, 1572 | "notification-url": "https://packagist.org/downloads/", 1573 | "license": [ 1574 | "MIT" 1575 | ], 1576 | "authors": [ 1577 | { 1578 | "name": "Symfony Community", 1579 | "homepage": "https://symfony.com/contributors" 1580 | }, 1581 | { 1582 | "name": "Gert de Pagter", 1583 | "email": "BackEndTea@gmail.com" 1584 | } 1585 | ], 1586 | "description": "Symfony polyfill for ctype functions", 1587 | "homepage": "https://symfony.com", 1588 | "keywords": [ 1589 | "compatibility", 1590 | "ctype", 1591 | "polyfill", 1592 | "portable" 1593 | ], 1594 | "time": "2018-08-06T14:22:27+00:00" 1595 | }, 1596 | { 1597 | "name": "symfony/polyfill-mbstring", 1598 | "version": "v1.9.0", 1599 | "source": { 1600 | "type": "git", 1601 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1602 | "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8" 1603 | }, 1604 | "dist": { 1605 | "type": "zip", 1606 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8", 1607 | "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8", 1608 | "shasum": "", 1609 | "mirrors": [ 1610 | { 1611 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1612 | "preferred": true 1613 | } 1614 | ] 1615 | }, 1616 | "require": { 1617 | "php": ">=5.3.3" 1618 | }, 1619 | "suggest": { 1620 | "ext-mbstring": "For best performance" 1621 | }, 1622 | "type": "library", 1623 | "extra": { 1624 | "branch-alias": { 1625 | "dev-master": "1.9-dev" 1626 | } 1627 | }, 1628 | "autoload": { 1629 | "psr-4": { 1630 | "Symfony\\Polyfill\\Mbstring\\": "" 1631 | }, 1632 | "files": [ 1633 | "bootstrap.php" 1634 | ] 1635 | }, 1636 | "notification-url": "https://packagist.org/downloads/", 1637 | "license": [ 1638 | "MIT" 1639 | ], 1640 | "authors": [ 1641 | { 1642 | "name": "Nicolas Grekas", 1643 | "email": "p@tchwork.com" 1644 | }, 1645 | { 1646 | "name": "Symfony Community", 1647 | "homepage": "https://symfony.com/contributors" 1648 | } 1649 | ], 1650 | "description": "Symfony polyfill for the Mbstring extension", 1651 | "homepage": "https://symfony.com", 1652 | "keywords": [ 1653 | "compatibility", 1654 | "mbstring", 1655 | "polyfill", 1656 | "portable", 1657 | "shim" 1658 | ], 1659 | "time": "2018-08-06T14:22:27+00:00" 1660 | }, 1661 | { 1662 | "name": "symfony/polyfill-php72", 1663 | "version": "v1.9.0", 1664 | "source": { 1665 | "type": "git", 1666 | "url": "https://github.com/symfony/polyfill-php72.git", 1667 | "reference": "95c50420b0baed23852452a7f0c7b527303ed5ae" 1668 | }, 1669 | "dist": { 1670 | "type": "zip", 1671 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/95c50420b0baed23852452a7f0c7b527303ed5ae", 1672 | "reference": "95c50420b0baed23852452a7f0c7b527303ed5ae", 1673 | "shasum": "", 1674 | "mirrors": [ 1675 | { 1676 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1677 | "preferred": true 1678 | } 1679 | ] 1680 | }, 1681 | "require": { 1682 | "php": ">=5.3.3" 1683 | }, 1684 | "type": "library", 1685 | "extra": { 1686 | "branch-alias": { 1687 | "dev-master": "1.9-dev" 1688 | } 1689 | }, 1690 | "autoload": { 1691 | "psr-4": { 1692 | "Symfony\\Polyfill\\Php72\\": "" 1693 | }, 1694 | "files": [ 1695 | "bootstrap.php" 1696 | ] 1697 | }, 1698 | "notification-url": "https://packagist.org/downloads/", 1699 | "license": [ 1700 | "MIT" 1701 | ], 1702 | "authors": [ 1703 | { 1704 | "name": "Nicolas Grekas", 1705 | "email": "p@tchwork.com" 1706 | }, 1707 | { 1708 | "name": "Symfony Community", 1709 | "homepage": "https://symfony.com/contributors" 1710 | } 1711 | ], 1712 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", 1713 | "homepage": "https://symfony.com", 1714 | "keywords": [ 1715 | "compatibility", 1716 | "polyfill", 1717 | "portable", 1718 | "shim" 1719 | ], 1720 | "time": "2018-08-06T14:22:27+00:00" 1721 | }, 1722 | { 1723 | "name": "symfony/process", 1724 | "version": "v4.1.4", 1725 | "source": { 1726 | "type": "git", 1727 | "url": "https://github.com/symfony/process.git", 1728 | "reference": "86cdb930a6a855b0ab35fb60c1504cb36184f843" 1729 | }, 1730 | "dist": { 1731 | "type": "zip", 1732 | "url": "https://api.github.com/repos/symfony/process/zipball/86cdb930a6a855b0ab35fb60c1504cb36184f843", 1733 | "reference": "86cdb930a6a855b0ab35fb60c1504cb36184f843", 1734 | "shasum": "", 1735 | "mirrors": [ 1736 | { 1737 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1738 | "preferred": true 1739 | } 1740 | ] 1741 | }, 1742 | "require": { 1743 | "php": "^7.1.3" 1744 | }, 1745 | "type": "library", 1746 | "extra": { 1747 | "branch-alias": { 1748 | "dev-master": "4.1-dev" 1749 | } 1750 | }, 1751 | "autoload": { 1752 | "psr-4": { 1753 | "Symfony\\Component\\Process\\": "" 1754 | }, 1755 | "exclude-from-classmap": [ 1756 | "/Tests/" 1757 | ] 1758 | }, 1759 | "notification-url": "https://packagist.org/downloads/", 1760 | "license": [ 1761 | "MIT" 1762 | ], 1763 | "authors": [ 1764 | { 1765 | "name": "Fabien Potencier", 1766 | "email": "fabien@symfony.com" 1767 | }, 1768 | { 1769 | "name": "Symfony Community", 1770 | "homepage": "https://symfony.com/contributors" 1771 | } 1772 | ], 1773 | "description": "Symfony Process Component", 1774 | "homepage": "https://symfony.com", 1775 | "time": "2018-08-03T11:13:38+00:00" 1776 | }, 1777 | { 1778 | "name": "symfony/routing", 1779 | "version": "v4.1.4", 1780 | "source": { 1781 | "type": "git", 1782 | "url": "https://github.com/symfony/routing.git", 1783 | "reference": "a5784c2ec4168018c87b38f0e4f39d2278499f51" 1784 | }, 1785 | "dist": { 1786 | "type": "zip", 1787 | "url": "https://api.github.com/repos/symfony/routing/zipball/a5784c2ec4168018c87b38f0e4f39d2278499f51", 1788 | "reference": "a5784c2ec4168018c87b38f0e4f39d2278499f51", 1789 | "shasum": "", 1790 | "mirrors": [ 1791 | { 1792 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1793 | "preferred": true 1794 | } 1795 | ] 1796 | }, 1797 | "require": { 1798 | "php": "^7.1.3" 1799 | }, 1800 | "conflict": { 1801 | "symfony/config": "<3.4", 1802 | "symfony/dependency-injection": "<3.4", 1803 | "symfony/yaml": "<3.4" 1804 | }, 1805 | "require-dev": { 1806 | "doctrine/annotations": "~1.0", 1807 | "psr/log": "~1.0", 1808 | "symfony/config": "~3.4|~4.0", 1809 | "symfony/dependency-injection": "~3.4|~4.0", 1810 | "symfony/expression-language": "~3.4|~4.0", 1811 | "symfony/http-foundation": "~3.4|~4.0", 1812 | "symfony/yaml": "~3.4|~4.0" 1813 | }, 1814 | "suggest": { 1815 | "doctrine/annotations": "For using the annotation loader", 1816 | "symfony/config": "For using the all-in-one router or any loader", 1817 | "symfony/dependency-injection": "For loading routes from a service", 1818 | "symfony/expression-language": "For using expression matching", 1819 | "symfony/http-foundation": "For using a Symfony Request object", 1820 | "symfony/yaml": "For using the YAML loader" 1821 | }, 1822 | "type": "library", 1823 | "extra": { 1824 | "branch-alias": { 1825 | "dev-master": "4.1-dev" 1826 | } 1827 | }, 1828 | "autoload": { 1829 | "psr-4": { 1830 | "Symfony\\Component\\Routing\\": "" 1831 | }, 1832 | "exclude-from-classmap": [ 1833 | "/Tests/" 1834 | ] 1835 | }, 1836 | "notification-url": "https://packagist.org/downloads/", 1837 | "license": [ 1838 | "MIT" 1839 | ], 1840 | "authors": [ 1841 | { 1842 | "name": "Fabien Potencier", 1843 | "email": "fabien@symfony.com" 1844 | }, 1845 | { 1846 | "name": "Symfony Community", 1847 | "homepage": "https://symfony.com/contributors" 1848 | } 1849 | ], 1850 | "description": "Symfony Routing Component", 1851 | "homepage": "https://symfony.com", 1852 | "keywords": [ 1853 | "router", 1854 | "routing", 1855 | "uri", 1856 | "url" 1857 | ], 1858 | "time": "2018-08-03T07:58:40+00:00" 1859 | }, 1860 | { 1861 | "name": "symfony/translation", 1862 | "version": "v4.1.4", 1863 | "source": { 1864 | "type": "git", 1865 | "url": "https://github.com/symfony/translation.git", 1866 | "reference": "fa2182669f7983b7aa5f1a770d053f79f0ef144f" 1867 | }, 1868 | "dist": { 1869 | "type": "zip", 1870 | "url": "https://api.github.com/repos/symfony/translation/zipball/fa2182669f7983b7aa5f1a770d053f79f0ef144f", 1871 | "reference": "fa2182669f7983b7aa5f1a770d053f79f0ef144f", 1872 | "shasum": "", 1873 | "mirrors": [ 1874 | { 1875 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1876 | "preferred": true 1877 | } 1878 | ] 1879 | }, 1880 | "require": { 1881 | "php": "^7.1.3", 1882 | "symfony/polyfill-mbstring": "~1.0" 1883 | }, 1884 | "conflict": { 1885 | "symfony/config": "<3.4", 1886 | "symfony/dependency-injection": "<3.4", 1887 | "symfony/yaml": "<3.4" 1888 | }, 1889 | "require-dev": { 1890 | "psr/log": "~1.0", 1891 | "symfony/config": "~3.4|~4.0", 1892 | "symfony/console": "~3.4|~4.0", 1893 | "symfony/dependency-injection": "~3.4|~4.0", 1894 | "symfony/finder": "~2.8|~3.0|~4.0", 1895 | "symfony/intl": "~3.4|~4.0", 1896 | "symfony/yaml": "~3.4|~4.0" 1897 | }, 1898 | "suggest": { 1899 | "psr/log-implementation": "To use logging capability in translator", 1900 | "symfony/config": "", 1901 | "symfony/yaml": "" 1902 | }, 1903 | "type": "library", 1904 | "extra": { 1905 | "branch-alias": { 1906 | "dev-master": "4.1-dev" 1907 | } 1908 | }, 1909 | "autoload": { 1910 | "psr-4": { 1911 | "Symfony\\Component\\Translation\\": "" 1912 | }, 1913 | "exclude-from-classmap": [ 1914 | "/Tests/" 1915 | ] 1916 | }, 1917 | "notification-url": "https://packagist.org/downloads/", 1918 | "license": [ 1919 | "MIT" 1920 | ], 1921 | "authors": [ 1922 | { 1923 | "name": "Fabien Potencier", 1924 | "email": "fabien@symfony.com" 1925 | }, 1926 | { 1927 | "name": "Symfony Community", 1928 | "homepage": "https://symfony.com/contributors" 1929 | } 1930 | ], 1931 | "description": "Symfony Translation Component", 1932 | "homepage": "https://symfony.com", 1933 | "time": "2018-08-07T12:45:11+00:00" 1934 | }, 1935 | { 1936 | "name": "symfony/var-dumper", 1937 | "version": "v4.1.4", 1938 | "source": { 1939 | "type": "git", 1940 | "url": "https://github.com/symfony/var-dumper.git", 1941 | "reference": "a05426e27294bba7b0226ffc17dd01a3c6ef9777" 1942 | }, 1943 | "dist": { 1944 | "type": "zip", 1945 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a05426e27294bba7b0226ffc17dd01a3c6ef9777", 1946 | "reference": "a05426e27294bba7b0226ffc17dd01a3c6ef9777", 1947 | "shasum": "", 1948 | "mirrors": [ 1949 | { 1950 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 1951 | "preferred": true 1952 | } 1953 | ] 1954 | }, 1955 | "require": { 1956 | "php": "^7.1.3", 1957 | "symfony/polyfill-mbstring": "~1.0", 1958 | "symfony/polyfill-php72": "~1.5" 1959 | }, 1960 | "conflict": { 1961 | "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", 1962 | "symfony/console": "<3.4" 1963 | }, 1964 | "require-dev": { 1965 | "ext-iconv": "*", 1966 | "symfony/process": "~3.4|~4.0", 1967 | "twig/twig": "~1.34|~2.4" 1968 | }, 1969 | "suggest": { 1970 | "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", 1971 | "ext-intl": "To show region name in time zone dump", 1972 | "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" 1973 | }, 1974 | "bin": [ 1975 | "Resources/bin/var-dump-server" 1976 | ], 1977 | "type": "library", 1978 | "extra": { 1979 | "branch-alias": { 1980 | "dev-master": "4.1-dev" 1981 | } 1982 | }, 1983 | "autoload": { 1984 | "files": [ 1985 | "Resources/functions/dump.php" 1986 | ], 1987 | "psr-4": { 1988 | "Symfony\\Component\\VarDumper\\": "" 1989 | }, 1990 | "exclude-from-classmap": [ 1991 | "/Tests/" 1992 | ] 1993 | }, 1994 | "notification-url": "https://packagist.org/downloads/", 1995 | "license": [ 1996 | "MIT" 1997 | ], 1998 | "authors": [ 1999 | { 2000 | "name": "Nicolas Grekas", 2001 | "email": "p@tchwork.com" 2002 | }, 2003 | { 2004 | "name": "Symfony Community", 2005 | "homepage": "https://symfony.com/contributors" 2006 | } 2007 | ], 2008 | "description": "Symfony mechanism for exploring and dumping PHP variables", 2009 | "homepage": "https://symfony.com", 2010 | "keywords": [ 2011 | "debug", 2012 | "dump" 2013 | ], 2014 | "time": "2018-08-02T09:24:26+00:00" 2015 | }, 2016 | { 2017 | "name": "tijsverkoyen/css-to-inline-styles", 2018 | "version": "2.2.1", 2019 | "source": { 2020 | "type": "git", 2021 | "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", 2022 | "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757" 2023 | }, 2024 | "dist": { 2025 | "type": "zip", 2026 | "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", 2027 | "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", 2028 | "shasum": "", 2029 | "mirrors": [ 2030 | { 2031 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2032 | "preferred": true 2033 | } 2034 | ] 2035 | }, 2036 | "require": { 2037 | "php": "^5.5 || ^7.0", 2038 | "symfony/css-selector": "^2.7 || ^3.0 || ^4.0" 2039 | }, 2040 | "require-dev": { 2041 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 2042 | }, 2043 | "type": "library", 2044 | "extra": { 2045 | "branch-alias": { 2046 | "dev-master": "2.2.x-dev" 2047 | } 2048 | }, 2049 | "autoload": { 2050 | "psr-4": { 2051 | "TijsVerkoyen\\CssToInlineStyles\\": "src" 2052 | } 2053 | }, 2054 | "notification-url": "https://packagist.org/downloads/", 2055 | "license": [ 2056 | "BSD-3-Clause" 2057 | ], 2058 | "authors": [ 2059 | { 2060 | "name": "Tijs Verkoyen", 2061 | "email": "css_to_inline_styles@verkoyen.eu", 2062 | "role": "Developer" 2063 | } 2064 | ], 2065 | "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", 2066 | "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", 2067 | "time": "2017-11-27T11:13:29+00:00" 2068 | }, 2069 | { 2070 | "name": "vlucas/phpdotenv", 2071 | "version": "v2.5.1", 2072 | "source": { 2073 | "type": "git", 2074 | "url": "https://github.com/vlucas/phpdotenv.git", 2075 | "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" 2076 | }, 2077 | "dist": { 2078 | "type": "zip", 2079 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", 2080 | "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", 2081 | "shasum": "", 2082 | "mirrors": [ 2083 | { 2084 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2085 | "preferred": true 2086 | } 2087 | ] 2088 | }, 2089 | "require": { 2090 | "php": ">=5.3.9" 2091 | }, 2092 | "require-dev": { 2093 | "phpunit/phpunit": "^4.8.35 || ^5.0" 2094 | }, 2095 | "type": "library", 2096 | "extra": { 2097 | "branch-alias": { 2098 | "dev-master": "2.5-dev" 2099 | } 2100 | }, 2101 | "autoload": { 2102 | "psr-4": { 2103 | "Dotenv\\": "src/" 2104 | } 2105 | }, 2106 | "notification-url": "https://packagist.org/downloads/", 2107 | "license": [ 2108 | "BSD-3-Clause" 2109 | ], 2110 | "authors": [ 2111 | { 2112 | "name": "Vance Lucas", 2113 | "email": "vance@vancelucas.com", 2114 | "homepage": "http://www.vancelucas.com" 2115 | } 2116 | ], 2117 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", 2118 | "keywords": [ 2119 | "dotenv", 2120 | "env", 2121 | "environment" 2122 | ], 2123 | "time": "2018-07-29T20:33:41+00:00" 2124 | } 2125 | ], 2126 | "packages-dev": [ 2127 | { 2128 | "name": "codedungeon/php-cli-colors", 2129 | "version": "1.10.7", 2130 | "source": { 2131 | "type": "git", 2132 | "url": "https://github.com/mikeerickson/php-cli-colors.git", 2133 | "reference": "5649ef76ec0c9ed626e95bf40fdfaf4b8efcf79b" 2134 | }, 2135 | "dist": { 2136 | "type": "zip", 2137 | "url": "https://api.github.com/repos/mikeerickson/php-cli-colors/zipball/5649ef76ec0c9ed626e95bf40fdfaf4b8efcf79b", 2138 | "reference": "5649ef76ec0c9ed626e95bf40fdfaf4b8efcf79b", 2139 | "shasum": "", 2140 | "mirrors": [ 2141 | { 2142 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2143 | "preferred": true 2144 | } 2145 | ] 2146 | }, 2147 | "require-dev": { 2148 | "phpunit/phpunit": ">=5.2" 2149 | }, 2150 | "type": "library", 2151 | "autoload": { 2152 | "psr-4": { 2153 | "Codedungeon\\PHPCliColors\\": "src/" 2154 | } 2155 | }, 2156 | "notification-url": "https://packagist.org/downloads/", 2157 | "license": [ 2158 | "MIT" 2159 | ], 2160 | "authors": [ 2161 | { 2162 | "name": "Mike Erickson", 2163 | "email": "codedungeon@gmail.com" 2164 | } 2165 | ], 2166 | "description": "PHP Package for using color output in CLI commands", 2167 | "homepage": "https://github.com/mikeerickson/php-cli-colors", 2168 | "keywords": [ 2169 | "color", 2170 | "colors", 2171 | "composer", 2172 | "package", 2173 | "php" 2174 | ], 2175 | "time": "2018-05-17T01:34:14+00:00" 2176 | }, 2177 | { 2178 | "name": "codedungeon/phpunit-result-printer", 2179 | "version": "0.19.14", 2180 | "source": { 2181 | "type": "git", 2182 | "url": "https://github.com/mikeerickson/phpunit-pretty-result-printer.git", 2183 | "reference": "d95e985bbc6b884e2e9e74fe99ce41728ae8d6e4" 2184 | }, 2185 | "dist": { 2186 | "type": "zip", 2187 | "url": "https://api.github.com/repos/mikeerickson/phpunit-pretty-result-printer/zipball/d95e985bbc6b884e2e9e74fe99ce41728ae8d6e4", 2188 | "reference": "d95e985bbc6b884e2e9e74fe99ce41728ae8d6e4", 2189 | "shasum": "", 2190 | "mirrors": [ 2191 | { 2192 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2193 | "preferred": true 2194 | } 2195 | ] 2196 | }, 2197 | "require": { 2198 | "codedungeon/php-cli-colors": "^1.10.2", 2199 | "hassankhan/config": "^1.0", 2200 | "php": "^7.1", 2201 | "symfony/yaml": "^2.7|^3.0|^4.0" 2202 | }, 2203 | "require-dev": { 2204 | "phpunit/phpunit": "7.1.1", 2205 | "spatie/phpunit-watcher": "^1.5" 2206 | }, 2207 | "type": "library", 2208 | "autoload": { 2209 | "psr-4": { 2210 | "Codedungeon\\PHPUnitPrettyResultPrinter\\": "src/" 2211 | } 2212 | }, 2213 | "notification-url": "https://packagist.org/downloads/", 2214 | "license": [ 2215 | "MIT" 2216 | ], 2217 | "authors": [ 2218 | { 2219 | "name": "Mike Erickson", 2220 | "email": "codedungeon@gmail.com" 2221 | } 2222 | ], 2223 | "description": "PHPUnit Pretty Result Printer", 2224 | "keywords": [ 2225 | "TDD", 2226 | "composer", 2227 | "package", 2228 | "phpunit", 2229 | "printer", 2230 | "result-printer", 2231 | "testing" 2232 | ], 2233 | "time": "2018-09-05T16:10:09+00:00" 2234 | }, 2235 | { 2236 | "name": "doctrine/instantiator", 2237 | "version": "1.1.0", 2238 | "source": { 2239 | "type": "git", 2240 | "url": "https://github.com/doctrine/instantiator.git", 2241 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" 2242 | }, 2243 | "dist": { 2244 | "type": "zip", 2245 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", 2246 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", 2247 | "shasum": "", 2248 | "mirrors": [ 2249 | { 2250 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2251 | "preferred": true 2252 | } 2253 | ] 2254 | }, 2255 | "require": { 2256 | "php": "^7.1" 2257 | }, 2258 | "require-dev": { 2259 | "athletic/athletic": "~0.1.8", 2260 | "ext-pdo": "*", 2261 | "ext-phar": "*", 2262 | "phpunit/phpunit": "^6.2.3", 2263 | "squizlabs/php_codesniffer": "^3.0.2" 2264 | }, 2265 | "type": "library", 2266 | "extra": { 2267 | "branch-alias": { 2268 | "dev-master": "1.2.x-dev" 2269 | } 2270 | }, 2271 | "autoload": { 2272 | "psr-4": { 2273 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 2274 | } 2275 | }, 2276 | "notification-url": "https://packagist.org/downloads/", 2277 | "license": [ 2278 | "MIT" 2279 | ], 2280 | "authors": [ 2281 | { 2282 | "name": "Marco Pivetta", 2283 | "email": "ocramius@gmail.com", 2284 | "homepage": "http://ocramius.github.com/" 2285 | } 2286 | ], 2287 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 2288 | "homepage": "https://github.com/doctrine/instantiator", 2289 | "keywords": [ 2290 | "constructor", 2291 | "instantiate" 2292 | ], 2293 | "time": "2017-07-22T11:58:36+00:00" 2294 | }, 2295 | { 2296 | "name": "fzaninotto/faker", 2297 | "version": "v1.8.0", 2298 | "source": { 2299 | "type": "git", 2300 | "url": "https://github.com/fzaninotto/Faker.git", 2301 | "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de" 2302 | }, 2303 | "dist": { 2304 | "type": "zip", 2305 | "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de", 2306 | "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de", 2307 | "shasum": "", 2308 | "mirrors": [ 2309 | { 2310 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2311 | "preferred": true 2312 | } 2313 | ] 2314 | }, 2315 | "require": { 2316 | "php": "^5.3.3 || ^7.0" 2317 | }, 2318 | "require-dev": { 2319 | "ext-intl": "*", 2320 | "phpunit/phpunit": "^4.8.35 || ^5.7", 2321 | "squizlabs/php_codesniffer": "^1.5" 2322 | }, 2323 | "type": "library", 2324 | "extra": { 2325 | "branch-alias": { 2326 | "dev-master": "1.8-dev" 2327 | } 2328 | }, 2329 | "autoload": { 2330 | "psr-4": { 2331 | "Faker\\": "src/Faker/" 2332 | } 2333 | }, 2334 | "notification-url": "https://packagist.org/downloads/", 2335 | "license": [ 2336 | "MIT" 2337 | ], 2338 | "authors": [ 2339 | { 2340 | "name": "François Zaninotto" 2341 | } 2342 | ], 2343 | "description": "Faker is a PHP library that generates fake data for you.", 2344 | "keywords": [ 2345 | "data", 2346 | "faker", 2347 | "fixtures" 2348 | ], 2349 | "time": "2018-07-12T10:23:15+00:00" 2350 | }, 2351 | { 2352 | "name": "hamcrest/hamcrest-php", 2353 | "version": "v2.0.0", 2354 | "source": { 2355 | "type": "git", 2356 | "url": "https://github.com/hamcrest/hamcrest-php.git", 2357 | "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" 2358 | }, 2359 | "dist": { 2360 | "type": "zip", 2361 | "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", 2362 | "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", 2363 | "shasum": "", 2364 | "mirrors": [ 2365 | { 2366 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2367 | "preferred": true 2368 | } 2369 | ] 2370 | }, 2371 | "require": { 2372 | "php": "^5.3|^7.0" 2373 | }, 2374 | "replace": { 2375 | "cordoval/hamcrest-php": "*", 2376 | "davedevelopment/hamcrest-php": "*", 2377 | "kodova/hamcrest-php": "*" 2378 | }, 2379 | "require-dev": { 2380 | "phpunit/php-file-iterator": "1.3.3", 2381 | "phpunit/phpunit": "~4.0", 2382 | "satooshi/php-coveralls": "^1.0" 2383 | }, 2384 | "type": "library", 2385 | "extra": { 2386 | "branch-alias": { 2387 | "dev-master": "2.0-dev" 2388 | } 2389 | }, 2390 | "autoload": { 2391 | "classmap": [ 2392 | "hamcrest" 2393 | ] 2394 | }, 2395 | "notification-url": "https://packagist.org/downloads/", 2396 | "license": [ 2397 | "BSD" 2398 | ], 2399 | "description": "This is the PHP port of Hamcrest Matchers", 2400 | "keywords": [ 2401 | "test" 2402 | ], 2403 | "time": "2016-01-20T08:20:44+00:00" 2404 | }, 2405 | { 2406 | "name": "hassankhan/config", 2407 | "version": "1.1.0", 2408 | "source": { 2409 | "type": "git", 2410 | "url": "https://github.com/hassankhan/config.git", 2411 | "reference": "930556337783acfd95bde723354119178db01d10" 2412 | }, 2413 | "dist": { 2414 | "type": "zip", 2415 | "url": "https://api.github.com/repos/hassankhan/config/zipball/930556337783acfd95bde723354119178db01d10", 2416 | "reference": "930556337783acfd95bde723354119178db01d10", 2417 | "shasum": "", 2418 | "mirrors": [ 2419 | { 2420 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2421 | "preferred": true 2422 | } 2423 | ] 2424 | }, 2425 | "require": { 2426 | "php": ">=5.5.9" 2427 | }, 2428 | "require-dev": { 2429 | "phpunit/phpunit": "~4.0", 2430 | "scrutinizer/ocular": "~1.1", 2431 | "squizlabs/php_codesniffer": "~2.2", 2432 | "symfony/yaml": "~3.4" 2433 | }, 2434 | "suggest": { 2435 | "symfony/yaml": "~3.4" 2436 | }, 2437 | "type": "library", 2438 | "autoload": { 2439 | "psr-4": { 2440 | "Noodlehaus\\": "src" 2441 | } 2442 | }, 2443 | "notification-url": "https://packagist.org/downloads/", 2444 | "license": [ 2445 | "MIT" 2446 | ], 2447 | "authors": [ 2448 | { 2449 | "name": "Hassan Khan", 2450 | "homepage": "http://hassankhan.me/", 2451 | "role": "Developer" 2452 | } 2453 | ], 2454 | "description": "Lightweight configuration file loader that supports PHP, INI, XML, JSON, and YAML files", 2455 | "homepage": "http://hassankhan.me/config/", 2456 | "keywords": [ 2457 | "config", 2458 | "configuration", 2459 | "ini", 2460 | "json", 2461 | "microphp", 2462 | "unframework", 2463 | "xml", 2464 | "yaml", 2465 | "yml" 2466 | ], 2467 | "time": "2018-08-22T14:18:52+00:00" 2468 | }, 2469 | { 2470 | "name": "mockery/mockery", 2471 | "version": "1.2.0", 2472 | "source": { 2473 | "type": "git", 2474 | "url": "https://github.com/mockery/mockery.git", 2475 | "reference": "100633629bf76d57430b86b7098cd6beb996a35a" 2476 | }, 2477 | "dist": { 2478 | "type": "zip", 2479 | "url": "https://api.github.com/repos/mockery/mockery/zipball/100633629bf76d57430b86b7098cd6beb996a35a", 2480 | "reference": "100633629bf76d57430b86b7098cd6beb996a35a", 2481 | "shasum": "", 2482 | "mirrors": [ 2483 | { 2484 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2485 | "preferred": true 2486 | } 2487 | ] 2488 | }, 2489 | "require": { 2490 | "hamcrest/hamcrest-php": "~2.0", 2491 | "lib-pcre": ">=7.0", 2492 | "php": ">=5.6.0" 2493 | }, 2494 | "require-dev": { 2495 | "phpunit/phpunit": "~5.7.10|~6.5|~7.0" 2496 | }, 2497 | "type": "library", 2498 | "extra": { 2499 | "branch-alias": { 2500 | "dev-master": "1.0.x-dev" 2501 | } 2502 | }, 2503 | "autoload": { 2504 | "psr-0": { 2505 | "Mockery": "library/" 2506 | } 2507 | }, 2508 | "notification-url": "https://packagist.org/downloads/", 2509 | "license": [ 2510 | "BSD-3-Clause" 2511 | ], 2512 | "authors": [ 2513 | { 2514 | "name": "Pádraic Brady", 2515 | "email": "padraic.brady@gmail.com", 2516 | "homepage": "http://blog.astrumfutura.com" 2517 | }, 2518 | { 2519 | "name": "Dave Marshall", 2520 | "email": "dave.marshall@atstsolutions.co.uk", 2521 | "homepage": "http://davedevelopment.co.uk" 2522 | } 2523 | ], 2524 | "description": "Mockery is a simple yet flexible PHP mock object framework", 2525 | "homepage": "https://github.com/mockery/mockery", 2526 | "keywords": [ 2527 | "BDD", 2528 | "TDD", 2529 | "library", 2530 | "mock", 2531 | "mock objects", 2532 | "mockery", 2533 | "stub", 2534 | "test", 2535 | "test double", 2536 | "testing" 2537 | ], 2538 | "time": "2018-10-02T21:52:37+00:00" 2539 | }, 2540 | { 2541 | "name": "myclabs/deep-copy", 2542 | "version": "1.8.1", 2543 | "source": { 2544 | "type": "git", 2545 | "url": "https://github.com/myclabs/DeepCopy.git", 2546 | "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" 2547 | }, 2548 | "dist": { 2549 | "type": "zip", 2550 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", 2551 | "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", 2552 | "shasum": "", 2553 | "mirrors": [ 2554 | { 2555 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2556 | "preferred": true 2557 | } 2558 | ] 2559 | }, 2560 | "require": { 2561 | "php": "^7.1" 2562 | }, 2563 | "replace": { 2564 | "myclabs/deep-copy": "self.version" 2565 | }, 2566 | "require-dev": { 2567 | "doctrine/collections": "^1.0", 2568 | "doctrine/common": "^2.6", 2569 | "phpunit/phpunit": "^7.1" 2570 | }, 2571 | "type": "library", 2572 | "autoload": { 2573 | "psr-4": { 2574 | "DeepCopy\\": "src/DeepCopy/" 2575 | }, 2576 | "files": [ 2577 | "src/DeepCopy/deep_copy.php" 2578 | ] 2579 | }, 2580 | "notification-url": "https://packagist.org/downloads/", 2581 | "license": [ 2582 | "MIT" 2583 | ], 2584 | "description": "Create deep copies (clones) of your objects", 2585 | "keywords": [ 2586 | "clone", 2587 | "copy", 2588 | "duplicate", 2589 | "object", 2590 | "object graph" 2591 | ], 2592 | "time": "2018-06-11T23:09:50+00:00" 2593 | }, 2594 | { 2595 | "name": "phar-io/manifest", 2596 | "version": "1.0.3", 2597 | "source": { 2598 | "type": "git", 2599 | "url": "https://github.com/phar-io/manifest.git", 2600 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" 2601 | }, 2602 | "dist": { 2603 | "type": "zip", 2604 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 2605 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 2606 | "shasum": "", 2607 | "mirrors": [ 2608 | { 2609 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2610 | "preferred": true 2611 | } 2612 | ] 2613 | }, 2614 | "require": { 2615 | "ext-dom": "*", 2616 | "ext-phar": "*", 2617 | "phar-io/version": "^2.0", 2618 | "php": "^5.6 || ^7.0" 2619 | }, 2620 | "type": "library", 2621 | "extra": { 2622 | "branch-alias": { 2623 | "dev-master": "1.0.x-dev" 2624 | } 2625 | }, 2626 | "autoload": { 2627 | "classmap": [ 2628 | "src/" 2629 | ] 2630 | }, 2631 | "notification-url": "https://packagist.org/downloads/", 2632 | "license": [ 2633 | "BSD-3-Clause" 2634 | ], 2635 | "authors": [ 2636 | { 2637 | "name": "Arne Blankerts", 2638 | "email": "arne@blankerts.de", 2639 | "role": "Developer" 2640 | }, 2641 | { 2642 | "name": "Sebastian Heuer", 2643 | "email": "sebastian@phpeople.de", 2644 | "role": "Developer" 2645 | }, 2646 | { 2647 | "name": "Sebastian Bergmann", 2648 | "email": "sebastian@phpunit.de", 2649 | "role": "Developer" 2650 | } 2651 | ], 2652 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 2653 | "time": "2018-07-08T19:23:20+00:00" 2654 | }, 2655 | { 2656 | "name": "phar-io/version", 2657 | "version": "2.0.1", 2658 | "source": { 2659 | "type": "git", 2660 | "url": "https://github.com/phar-io/version.git", 2661 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" 2662 | }, 2663 | "dist": { 2664 | "type": "zip", 2665 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", 2666 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", 2667 | "shasum": "", 2668 | "mirrors": [ 2669 | { 2670 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2671 | "preferred": true 2672 | } 2673 | ] 2674 | }, 2675 | "require": { 2676 | "php": "^5.6 || ^7.0" 2677 | }, 2678 | "type": "library", 2679 | "autoload": { 2680 | "classmap": [ 2681 | "src/" 2682 | ] 2683 | }, 2684 | "notification-url": "https://packagist.org/downloads/", 2685 | "license": [ 2686 | "BSD-3-Clause" 2687 | ], 2688 | "authors": [ 2689 | { 2690 | "name": "Arne Blankerts", 2691 | "email": "arne@blankerts.de", 2692 | "role": "Developer" 2693 | }, 2694 | { 2695 | "name": "Sebastian Heuer", 2696 | "email": "sebastian@phpeople.de", 2697 | "role": "Developer" 2698 | }, 2699 | { 2700 | "name": "Sebastian Bergmann", 2701 | "email": "sebastian@phpunit.de", 2702 | "role": "Developer" 2703 | } 2704 | ], 2705 | "description": "Library for handling version information and constraints", 2706 | "time": "2018-07-08T19:19:57+00:00" 2707 | }, 2708 | { 2709 | "name": "phpdocumentor/reflection-common", 2710 | "version": "1.0.1", 2711 | "source": { 2712 | "type": "git", 2713 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 2714 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" 2715 | }, 2716 | "dist": { 2717 | "type": "zip", 2718 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 2719 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 2720 | "shasum": "", 2721 | "mirrors": [ 2722 | { 2723 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2724 | "preferred": true 2725 | } 2726 | ] 2727 | }, 2728 | "require": { 2729 | "php": ">=5.5" 2730 | }, 2731 | "require-dev": { 2732 | "phpunit/phpunit": "^4.6" 2733 | }, 2734 | "type": "library", 2735 | "extra": { 2736 | "branch-alias": { 2737 | "dev-master": "1.0.x-dev" 2738 | } 2739 | }, 2740 | "autoload": { 2741 | "psr-4": { 2742 | "phpDocumentor\\Reflection\\": [ 2743 | "src" 2744 | ] 2745 | } 2746 | }, 2747 | "notification-url": "https://packagist.org/downloads/", 2748 | "license": [ 2749 | "MIT" 2750 | ], 2751 | "authors": [ 2752 | { 2753 | "name": "Jaap van Otterdijk", 2754 | "email": "opensource@ijaap.nl" 2755 | } 2756 | ], 2757 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 2758 | "homepage": "http://www.phpdoc.org", 2759 | "keywords": [ 2760 | "FQSEN", 2761 | "phpDocumentor", 2762 | "phpdoc", 2763 | "reflection", 2764 | "static analysis" 2765 | ], 2766 | "time": "2017-09-11T18:02:19+00:00" 2767 | }, 2768 | { 2769 | "name": "phpdocumentor/reflection-docblock", 2770 | "version": "4.3.0", 2771 | "source": { 2772 | "type": "git", 2773 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 2774 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08" 2775 | }, 2776 | "dist": { 2777 | "type": "zip", 2778 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", 2779 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08", 2780 | "shasum": "", 2781 | "mirrors": [ 2782 | { 2783 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2784 | "preferred": true 2785 | } 2786 | ] 2787 | }, 2788 | "require": { 2789 | "php": "^7.0", 2790 | "phpdocumentor/reflection-common": "^1.0.0", 2791 | "phpdocumentor/type-resolver": "^0.4.0", 2792 | "webmozart/assert": "^1.0" 2793 | }, 2794 | "require-dev": { 2795 | "doctrine/instantiator": "~1.0.5", 2796 | "mockery/mockery": "^1.0", 2797 | "phpunit/phpunit": "^6.4" 2798 | }, 2799 | "type": "library", 2800 | "extra": { 2801 | "branch-alias": { 2802 | "dev-master": "4.x-dev" 2803 | } 2804 | }, 2805 | "autoload": { 2806 | "psr-4": { 2807 | "phpDocumentor\\Reflection\\": [ 2808 | "src/" 2809 | ] 2810 | } 2811 | }, 2812 | "notification-url": "https://packagist.org/downloads/", 2813 | "license": [ 2814 | "MIT" 2815 | ], 2816 | "authors": [ 2817 | { 2818 | "name": "Mike van Riel", 2819 | "email": "me@mikevanriel.com" 2820 | } 2821 | ], 2822 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 2823 | "time": "2017-11-30T07:14:17+00:00" 2824 | }, 2825 | { 2826 | "name": "phpdocumentor/type-resolver", 2827 | "version": "0.4.0", 2828 | "source": { 2829 | "type": "git", 2830 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 2831 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" 2832 | }, 2833 | "dist": { 2834 | "type": "zip", 2835 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", 2836 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", 2837 | "shasum": "", 2838 | "mirrors": [ 2839 | { 2840 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2841 | "preferred": true 2842 | } 2843 | ] 2844 | }, 2845 | "require": { 2846 | "php": "^5.5 || ^7.0", 2847 | "phpdocumentor/reflection-common": "^1.0" 2848 | }, 2849 | "require-dev": { 2850 | "mockery/mockery": "^0.9.4", 2851 | "phpunit/phpunit": "^5.2||^4.8.24" 2852 | }, 2853 | "type": "library", 2854 | "extra": { 2855 | "branch-alias": { 2856 | "dev-master": "1.0.x-dev" 2857 | } 2858 | }, 2859 | "autoload": { 2860 | "psr-4": { 2861 | "phpDocumentor\\Reflection\\": [ 2862 | "src/" 2863 | ] 2864 | } 2865 | }, 2866 | "notification-url": "https://packagist.org/downloads/", 2867 | "license": [ 2868 | "MIT" 2869 | ], 2870 | "authors": [ 2871 | { 2872 | "name": "Mike van Riel", 2873 | "email": "me@mikevanriel.com" 2874 | } 2875 | ], 2876 | "time": "2017-07-14T14:27:02+00:00" 2877 | }, 2878 | { 2879 | "name": "phpspec/prophecy", 2880 | "version": "1.8.0", 2881 | "source": { 2882 | "type": "git", 2883 | "url": "https://github.com/phpspec/prophecy.git", 2884 | "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" 2885 | }, 2886 | "dist": { 2887 | "type": "zip", 2888 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", 2889 | "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", 2890 | "shasum": "", 2891 | "mirrors": [ 2892 | { 2893 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2894 | "preferred": true 2895 | } 2896 | ] 2897 | }, 2898 | "require": { 2899 | "doctrine/instantiator": "^1.0.2", 2900 | "php": "^5.3|^7.0", 2901 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", 2902 | "sebastian/comparator": "^1.1|^2.0|^3.0", 2903 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 2904 | }, 2905 | "require-dev": { 2906 | "phpspec/phpspec": "^2.5|^3.2", 2907 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" 2908 | }, 2909 | "type": "library", 2910 | "extra": { 2911 | "branch-alias": { 2912 | "dev-master": "1.8.x-dev" 2913 | } 2914 | }, 2915 | "autoload": { 2916 | "psr-0": { 2917 | "Prophecy\\": "src/" 2918 | } 2919 | }, 2920 | "notification-url": "https://packagist.org/downloads/", 2921 | "license": [ 2922 | "MIT" 2923 | ], 2924 | "authors": [ 2925 | { 2926 | "name": "Konstantin Kudryashov", 2927 | "email": "ever.zet@gmail.com", 2928 | "homepage": "http://everzet.com" 2929 | }, 2930 | { 2931 | "name": "Marcello Duarte", 2932 | "email": "marcello.duarte@gmail.com" 2933 | } 2934 | ], 2935 | "description": "Highly opinionated mocking framework for PHP 5.3+", 2936 | "homepage": "https://github.com/phpspec/prophecy", 2937 | "keywords": [ 2938 | "Double", 2939 | "Dummy", 2940 | "fake", 2941 | "mock", 2942 | "spy", 2943 | "stub" 2944 | ], 2945 | "time": "2018-08-05T17:53:17+00:00" 2946 | }, 2947 | { 2948 | "name": "phpunit/php-code-coverage", 2949 | "version": "6.0.8", 2950 | "source": { 2951 | "type": "git", 2952 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 2953 | "reference": "848f78b3309780fef7ec8c4666b7ab4e6b09b22f" 2954 | }, 2955 | "dist": { 2956 | "type": "zip", 2957 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/848f78b3309780fef7ec8c4666b7ab4e6b09b22f", 2958 | "reference": "848f78b3309780fef7ec8c4666b7ab4e6b09b22f", 2959 | "shasum": "", 2960 | "mirrors": [ 2961 | { 2962 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 2963 | "preferred": true 2964 | } 2965 | ] 2966 | }, 2967 | "require": { 2968 | "ext-dom": "*", 2969 | "ext-xmlwriter": "*", 2970 | "php": "^7.1", 2971 | "phpunit/php-file-iterator": "^2.0", 2972 | "phpunit/php-text-template": "^1.2.1", 2973 | "phpunit/php-token-stream": "^3.0", 2974 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 2975 | "sebastian/environment": "^3.1", 2976 | "sebastian/version": "^2.0.1", 2977 | "theseer/tokenizer": "^1.1" 2978 | }, 2979 | "require-dev": { 2980 | "phpunit/phpunit": "^7.0" 2981 | }, 2982 | "suggest": { 2983 | "ext-xdebug": "^2.6.0" 2984 | }, 2985 | "type": "library", 2986 | "extra": { 2987 | "branch-alias": { 2988 | "dev-master": "6.0-dev" 2989 | } 2990 | }, 2991 | "autoload": { 2992 | "classmap": [ 2993 | "src/" 2994 | ] 2995 | }, 2996 | "notification-url": "https://packagist.org/downloads/", 2997 | "license": [ 2998 | "BSD-3-Clause" 2999 | ], 3000 | "authors": [ 3001 | { 3002 | "name": "Sebastian Bergmann", 3003 | "email": "sebastian@phpunit.de", 3004 | "role": "lead" 3005 | } 3006 | ], 3007 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 3008 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 3009 | "keywords": [ 3010 | "coverage", 3011 | "testing", 3012 | "xunit" 3013 | ], 3014 | "time": "2018-10-04T03:41:23+00:00" 3015 | }, 3016 | { 3017 | "name": "phpunit/php-file-iterator", 3018 | "version": "2.0.2", 3019 | "source": { 3020 | "type": "git", 3021 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 3022 | "reference": "050bedf145a257b1ff02746c31894800e5122946" 3023 | }, 3024 | "dist": { 3025 | "type": "zip", 3026 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", 3027 | "reference": "050bedf145a257b1ff02746c31894800e5122946", 3028 | "shasum": "", 3029 | "mirrors": [ 3030 | { 3031 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3032 | "preferred": true 3033 | } 3034 | ] 3035 | }, 3036 | "require": { 3037 | "php": "^7.1" 3038 | }, 3039 | "require-dev": { 3040 | "phpunit/phpunit": "^7.1" 3041 | }, 3042 | "type": "library", 3043 | "extra": { 3044 | "branch-alias": { 3045 | "dev-master": "2.0.x-dev" 3046 | } 3047 | }, 3048 | "autoload": { 3049 | "classmap": [ 3050 | "src/" 3051 | ] 3052 | }, 3053 | "notification-url": "https://packagist.org/downloads/", 3054 | "license": [ 3055 | "BSD-3-Clause" 3056 | ], 3057 | "authors": [ 3058 | { 3059 | "name": "Sebastian Bergmann", 3060 | "email": "sebastian@phpunit.de", 3061 | "role": "lead" 3062 | } 3063 | ], 3064 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 3065 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 3066 | "keywords": [ 3067 | "filesystem", 3068 | "iterator" 3069 | ], 3070 | "time": "2018-09-13T20:33:42+00:00" 3071 | }, 3072 | { 3073 | "name": "phpunit/php-text-template", 3074 | "version": "1.2.1", 3075 | "source": { 3076 | "type": "git", 3077 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 3078 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 3079 | }, 3080 | "dist": { 3081 | "type": "zip", 3082 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 3083 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 3084 | "shasum": "", 3085 | "mirrors": [ 3086 | { 3087 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3088 | "preferred": true 3089 | } 3090 | ] 3091 | }, 3092 | "require": { 3093 | "php": ">=5.3.3" 3094 | }, 3095 | "type": "library", 3096 | "autoload": { 3097 | "classmap": [ 3098 | "src/" 3099 | ] 3100 | }, 3101 | "notification-url": "https://packagist.org/downloads/", 3102 | "license": [ 3103 | "BSD-3-Clause" 3104 | ], 3105 | "authors": [ 3106 | { 3107 | "name": "Sebastian Bergmann", 3108 | "email": "sebastian@phpunit.de", 3109 | "role": "lead" 3110 | } 3111 | ], 3112 | "description": "Simple template engine.", 3113 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 3114 | "keywords": [ 3115 | "template" 3116 | ], 3117 | "time": "2015-06-21T13:50:34+00:00" 3118 | }, 3119 | { 3120 | "name": "phpunit/php-timer", 3121 | "version": "2.0.0", 3122 | "source": { 3123 | "type": "git", 3124 | "url": "https://github.com/sebastianbergmann/php-timer.git", 3125 | "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f" 3126 | }, 3127 | "dist": { 3128 | "type": "zip", 3129 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f", 3130 | "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f", 3131 | "shasum": "", 3132 | "mirrors": [ 3133 | { 3134 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3135 | "preferred": true 3136 | } 3137 | ] 3138 | }, 3139 | "require": { 3140 | "php": "^7.1" 3141 | }, 3142 | "require-dev": { 3143 | "phpunit/phpunit": "^7.0" 3144 | }, 3145 | "type": "library", 3146 | "extra": { 3147 | "branch-alias": { 3148 | "dev-master": "2.0-dev" 3149 | } 3150 | }, 3151 | "autoload": { 3152 | "classmap": [ 3153 | "src/" 3154 | ] 3155 | }, 3156 | "notification-url": "https://packagist.org/downloads/", 3157 | "license": [ 3158 | "BSD-3-Clause" 3159 | ], 3160 | "authors": [ 3161 | { 3162 | "name": "Sebastian Bergmann", 3163 | "email": "sebastian@phpunit.de", 3164 | "role": "lead" 3165 | } 3166 | ], 3167 | "description": "Utility class for timing", 3168 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 3169 | "keywords": [ 3170 | "timer" 3171 | ], 3172 | "time": "2018-02-01T13:07:23+00:00" 3173 | }, 3174 | { 3175 | "name": "phpunit/php-token-stream", 3176 | "version": "3.0.0", 3177 | "source": { 3178 | "type": "git", 3179 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 3180 | "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace" 3181 | }, 3182 | "dist": { 3183 | "type": "zip", 3184 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/21ad88bbba7c3d93530d93994e0a33cd45f02ace", 3185 | "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace", 3186 | "shasum": "", 3187 | "mirrors": [ 3188 | { 3189 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3190 | "preferred": true 3191 | } 3192 | ] 3193 | }, 3194 | "require": { 3195 | "ext-tokenizer": "*", 3196 | "php": "^7.1" 3197 | }, 3198 | "require-dev": { 3199 | "phpunit/phpunit": "^7.0" 3200 | }, 3201 | "type": "library", 3202 | "extra": { 3203 | "branch-alias": { 3204 | "dev-master": "3.0-dev" 3205 | } 3206 | }, 3207 | "autoload": { 3208 | "classmap": [ 3209 | "src/" 3210 | ] 3211 | }, 3212 | "notification-url": "https://packagist.org/downloads/", 3213 | "license": [ 3214 | "BSD-3-Clause" 3215 | ], 3216 | "authors": [ 3217 | { 3218 | "name": "Sebastian Bergmann", 3219 | "email": "sebastian@phpunit.de" 3220 | } 3221 | ], 3222 | "description": "Wrapper around PHP's tokenizer extension.", 3223 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 3224 | "keywords": [ 3225 | "tokenizer" 3226 | ], 3227 | "time": "2018-02-01T13:16:43+00:00" 3228 | }, 3229 | { 3230 | "name": "phpunit/phpunit", 3231 | "version": "7.4.0", 3232 | "source": { 3233 | "type": "git", 3234 | "url": "https://github.com/sebastianbergmann/phpunit.git", 3235 | "reference": "f3837fa1e07758057ae06e8ddec6d06ba183f126" 3236 | }, 3237 | "dist": { 3238 | "type": "zip", 3239 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f3837fa1e07758057ae06e8ddec6d06ba183f126", 3240 | "reference": "f3837fa1e07758057ae06e8ddec6d06ba183f126", 3241 | "shasum": "", 3242 | "mirrors": [ 3243 | { 3244 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3245 | "preferred": true 3246 | } 3247 | ] 3248 | }, 3249 | "require": { 3250 | "doctrine/instantiator": "^1.1", 3251 | "ext-dom": "*", 3252 | "ext-json": "*", 3253 | "ext-libxml": "*", 3254 | "ext-mbstring": "*", 3255 | "ext-xml": "*", 3256 | "myclabs/deep-copy": "^1.7", 3257 | "phar-io/manifest": "^1.0.2", 3258 | "phar-io/version": "^2.0", 3259 | "php": "^7.1", 3260 | "phpspec/prophecy": "^1.7", 3261 | "phpunit/php-code-coverage": "^6.0.7", 3262 | "phpunit/php-file-iterator": "^2.0.1", 3263 | "phpunit/php-text-template": "^1.2.1", 3264 | "phpunit/php-timer": "^2.0", 3265 | "sebastian/comparator": "^3.0", 3266 | "sebastian/diff": "^3.0", 3267 | "sebastian/environment": "^3.1", 3268 | "sebastian/exporter": "^3.1", 3269 | "sebastian/global-state": "^2.0", 3270 | "sebastian/object-enumerator": "^3.0.3", 3271 | "sebastian/resource-operations": "^2.0", 3272 | "sebastian/version": "^2.0.1" 3273 | }, 3274 | "conflict": { 3275 | "phpunit/phpunit-mock-objects": "*" 3276 | }, 3277 | "require-dev": { 3278 | "ext-pdo": "*" 3279 | }, 3280 | "suggest": { 3281 | "ext-soap": "*", 3282 | "ext-xdebug": "*", 3283 | "phpunit/php-invoker": "^2.0" 3284 | }, 3285 | "bin": [ 3286 | "phpunit" 3287 | ], 3288 | "type": "library", 3289 | "extra": { 3290 | "branch-alias": { 3291 | "dev-master": "7.4-dev" 3292 | } 3293 | }, 3294 | "autoload": { 3295 | "classmap": [ 3296 | "src/" 3297 | ] 3298 | }, 3299 | "notification-url": "https://packagist.org/downloads/", 3300 | "license": [ 3301 | "BSD-3-Clause" 3302 | ], 3303 | "authors": [ 3304 | { 3305 | "name": "Sebastian Bergmann", 3306 | "email": "sebastian@phpunit.de", 3307 | "role": "lead" 3308 | } 3309 | ], 3310 | "description": "The PHP Unit Testing framework.", 3311 | "homepage": "https://phpunit.de/", 3312 | "keywords": [ 3313 | "phpunit", 3314 | "testing", 3315 | "xunit" 3316 | ], 3317 | "time": "2018-10-05T04:05:24+00:00" 3318 | }, 3319 | { 3320 | "name": "sebastian/code-unit-reverse-lookup", 3321 | "version": "1.0.1", 3322 | "source": { 3323 | "type": "git", 3324 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 3325 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 3326 | }, 3327 | "dist": { 3328 | "type": "zip", 3329 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 3330 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 3331 | "shasum": "", 3332 | "mirrors": [ 3333 | { 3334 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3335 | "preferred": true 3336 | } 3337 | ] 3338 | }, 3339 | "require": { 3340 | "php": "^5.6 || ^7.0" 3341 | }, 3342 | "require-dev": { 3343 | "phpunit/phpunit": "^5.7 || ^6.0" 3344 | }, 3345 | "type": "library", 3346 | "extra": { 3347 | "branch-alias": { 3348 | "dev-master": "1.0.x-dev" 3349 | } 3350 | }, 3351 | "autoload": { 3352 | "classmap": [ 3353 | "src/" 3354 | ] 3355 | }, 3356 | "notification-url": "https://packagist.org/downloads/", 3357 | "license": [ 3358 | "BSD-3-Clause" 3359 | ], 3360 | "authors": [ 3361 | { 3362 | "name": "Sebastian Bergmann", 3363 | "email": "sebastian@phpunit.de" 3364 | } 3365 | ], 3366 | "description": "Looks up which function or method a line of code belongs to", 3367 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 3368 | "time": "2017-03-04T06:30:41+00:00" 3369 | }, 3370 | { 3371 | "name": "sebastian/comparator", 3372 | "version": "3.0.2", 3373 | "source": { 3374 | "type": "git", 3375 | "url": "https://github.com/sebastianbergmann/comparator.git", 3376 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" 3377 | }, 3378 | "dist": { 3379 | "type": "zip", 3380 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 3381 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 3382 | "shasum": "", 3383 | "mirrors": [ 3384 | { 3385 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3386 | "preferred": true 3387 | } 3388 | ] 3389 | }, 3390 | "require": { 3391 | "php": "^7.1", 3392 | "sebastian/diff": "^3.0", 3393 | "sebastian/exporter": "^3.1" 3394 | }, 3395 | "require-dev": { 3396 | "phpunit/phpunit": "^7.1" 3397 | }, 3398 | "type": "library", 3399 | "extra": { 3400 | "branch-alias": { 3401 | "dev-master": "3.0-dev" 3402 | } 3403 | }, 3404 | "autoload": { 3405 | "classmap": [ 3406 | "src/" 3407 | ] 3408 | }, 3409 | "notification-url": "https://packagist.org/downloads/", 3410 | "license": [ 3411 | "BSD-3-Clause" 3412 | ], 3413 | "authors": [ 3414 | { 3415 | "name": "Jeff Welch", 3416 | "email": "whatthejeff@gmail.com" 3417 | }, 3418 | { 3419 | "name": "Volker Dusch", 3420 | "email": "github@wallbash.com" 3421 | }, 3422 | { 3423 | "name": "Bernhard Schussek", 3424 | "email": "bschussek@2bepublished.at" 3425 | }, 3426 | { 3427 | "name": "Sebastian Bergmann", 3428 | "email": "sebastian@phpunit.de" 3429 | } 3430 | ], 3431 | "description": "Provides the functionality to compare PHP values for equality", 3432 | "homepage": "https://github.com/sebastianbergmann/comparator", 3433 | "keywords": [ 3434 | "comparator", 3435 | "compare", 3436 | "equality" 3437 | ], 3438 | "time": "2018-07-12T15:12:46+00:00" 3439 | }, 3440 | { 3441 | "name": "sebastian/diff", 3442 | "version": "3.0.1", 3443 | "source": { 3444 | "type": "git", 3445 | "url": "https://github.com/sebastianbergmann/diff.git", 3446 | "reference": "366541b989927187c4ca70490a35615d3fef2dce" 3447 | }, 3448 | "dist": { 3449 | "type": "zip", 3450 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/366541b989927187c4ca70490a35615d3fef2dce", 3451 | "reference": "366541b989927187c4ca70490a35615d3fef2dce", 3452 | "shasum": "", 3453 | "mirrors": [ 3454 | { 3455 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3456 | "preferred": true 3457 | } 3458 | ] 3459 | }, 3460 | "require": { 3461 | "php": "^7.1" 3462 | }, 3463 | "require-dev": { 3464 | "phpunit/phpunit": "^7.0", 3465 | "symfony/process": "^2 || ^3.3 || ^4" 3466 | }, 3467 | "type": "library", 3468 | "extra": { 3469 | "branch-alias": { 3470 | "dev-master": "3.0-dev" 3471 | } 3472 | }, 3473 | "autoload": { 3474 | "classmap": [ 3475 | "src/" 3476 | ] 3477 | }, 3478 | "notification-url": "https://packagist.org/downloads/", 3479 | "license": [ 3480 | "BSD-3-Clause" 3481 | ], 3482 | "authors": [ 3483 | { 3484 | "name": "Kore Nordmann", 3485 | "email": "mail@kore-nordmann.de" 3486 | }, 3487 | { 3488 | "name": "Sebastian Bergmann", 3489 | "email": "sebastian@phpunit.de" 3490 | } 3491 | ], 3492 | "description": "Diff implementation", 3493 | "homepage": "https://github.com/sebastianbergmann/diff", 3494 | "keywords": [ 3495 | "diff", 3496 | "udiff", 3497 | "unidiff", 3498 | "unified diff" 3499 | ], 3500 | "time": "2018-06-10T07:54:39+00:00" 3501 | }, 3502 | { 3503 | "name": "sebastian/environment", 3504 | "version": "3.1.0", 3505 | "source": { 3506 | "type": "git", 3507 | "url": "https://github.com/sebastianbergmann/environment.git", 3508 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" 3509 | }, 3510 | "dist": { 3511 | "type": "zip", 3512 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", 3513 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", 3514 | "shasum": "", 3515 | "mirrors": [ 3516 | { 3517 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3518 | "preferred": true 3519 | } 3520 | ] 3521 | }, 3522 | "require": { 3523 | "php": "^7.0" 3524 | }, 3525 | "require-dev": { 3526 | "phpunit/phpunit": "^6.1" 3527 | }, 3528 | "type": "library", 3529 | "extra": { 3530 | "branch-alias": { 3531 | "dev-master": "3.1.x-dev" 3532 | } 3533 | }, 3534 | "autoload": { 3535 | "classmap": [ 3536 | "src/" 3537 | ] 3538 | }, 3539 | "notification-url": "https://packagist.org/downloads/", 3540 | "license": [ 3541 | "BSD-3-Clause" 3542 | ], 3543 | "authors": [ 3544 | { 3545 | "name": "Sebastian Bergmann", 3546 | "email": "sebastian@phpunit.de" 3547 | } 3548 | ], 3549 | "description": "Provides functionality to handle HHVM/PHP environments", 3550 | "homepage": "http://www.github.com/sebastianbergmann/environment", 3551 | "keywords": [ 3552 | "Xdebug", 3553 | "environment", 3554 | "hhvm" 3555 | ], 3556 | "time": "2017-07-01T08:51:00+00:00" 3557 | }, 3558 | { 3559 | "name": "sebastian/exporter", 3560 | "version": "3.1.0", 3561 | "source": { 3562 | "type": "git", 3563 | "url": "https://github.com/sebastianbergmann/exporter.git", 3564 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" 3565 | }, 3566 | "dist": { 3567 | "type": "zip", 3568 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", 3569 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", 3570 | "shasum": "", 3571 | "mirrors": [ 3572 | { 3573 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3574 | "preferred": true 3575 | } 3576 | ] 3577 | }, 3578 | "require": { 3579 | "php": "^7.0", 3580 | "sebastian/recursion-context": "^3.0" 3581 | }, 3582 | "require-dev": { 3583 | "ext-mbstring": "*", 3584 | "phpunit/phpunit": "^6.0" 3585 | }, 3586 | "type": "library", 3587 | "extra": { 3588 | "branch-alias": { 3589 | "dev-master": "3.1.x-dev" 3590 | } 3591 | }, 3592 | "autoload": { 3593 | "classmap": [ 3594 | "src/" 3595 | ] 3596 | }, 3597 | "notification-url": "https://packagist.org/downloads/", 3598 | "license": [ 3599 | "BSD-3-Clause" 3600 | ], 3601 | "authors": [ 3602 | { 3603 | "name": "Jeff Welch", 3604 | "email": "whatthejeff@gmail.com" 3605 | }, 3606 | { 3607 | "name": "Volker Dusch", 3608 | "email": "github@wallbash.com" 3609 | }, 3610 | { 3611 | "name": "Bernhard Schussek", 3612 | "email": "bschussek@2bepublished.at" 3613 | }, 3614 | { 3615 | "name": "Sebastian Bergmann", 3616 | "email": "sebastian@phpunit.de" 3617 | }, 3618 | { 3619 | "name": "Adam Harvey", 3620 | "email": "aharvey@php.net" 3621 | } 3622 | ], 3623 | "description": "Provides the functionality to export PHP variables for visualization", 3624 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 3625 | "keywords": [ 3626 | "export", 3627 | "exporter" 3628 | ], 3629 | "time": "2017-04-03T13:19:02+00:00" 3630 | }, 3631 | { 3632 | "name": "sebastian/global-state", 3633 | "version": "2.0.0", 3634 | "source": { 3635 | "type": "git", 3636 | "url": "https://github.com/sebastianbergmann/global-state.git", 3637 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" 3638 | }, 3639 | "dist": { 3640 | "type": "zip", 3641 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 3642 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 3643 | "shasum": "", 3644 | "mirrors": [ 3645 | { 3646 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3647 | "preferred": true 3648 | } 3649 | ] 3650 | }, 3651 | "require": { 3652 | "php": "^7.0" 3653 | }, 3654 | "require-dev": { 3655 | "phpunit/phpunit": "^6.0" 3656 | }, 3657 | "suggest": { 3658 | "ext-uopz": "*" 3659 | }, 3660 | "type": "library", 3661 | "extra": { 3662 | "branch-alias": { 3663 | "dev-master": "2.0-dev" 3664 | } 3665 | }, 3666 | "autoload": { 3667 | "classmap": [ 3668 | "src/" 3669 | ] 3670 | }, 3671 | "notification-url": "https://packagist.org/downloads/", 3672 | "license": [ 3673 | "BSD-3-Clause" 3674 | ], 3675 | "authors": [ 3676 | { 3677 | "name": "Sebastian Bergmann", 3678 | "email": "sebastian@phpunit.de" 3679 | } 3680 | ], 3681 | "description": "Snapshotting of global state", 3682 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 3683 | "keywords": [ 3684 | "global state" 3685 | ], 3686 | "time": "2017-04-27T15:39:26+00:00" 3687 | }, 3688 | { 3689 | "name": "sebastian/object-enumerator", 3690 | "version": "3.0.3", 3691 | "source": { 3692 | "type": "git", 3693 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 3694 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 3695 | }, 3696 | "dist": { 3697 | "type": "zip", 3698 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", 3699 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 3700 | "shasum": "", 3701 | "mirrors": [ 3702 | { 3703 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3704 | "preferred": true 3705 | } 3706 | ] 3707 | }, 3708 | "require": { 3709 | "php": "^7.0", 3710 | "sebastian/object-reflector": "^1.1.1", 3711 | "sebastian/recursion-context": "^3.0" 3712 | }, 3713 | "require-dev": { 3714 | "phpunit/phpunit": "^6.0" 3715 | }, 3716 | "type": "library", 3717 | "extra": { 3718 | "branch-alias": { 3719 | "dev-master": "3.0.x-dev" 3720 | } 3721 | }, 3722 | "autoload": { 3723 | "classmap": [ 3724 | "src/" 3725 | ] 3726 | }, 3727 | "notification-url": "https://packagist.org/downloads/", 3728 | "license": [ 3729 | "BSD-3-Clause" 3730 | ], 3731 | "authors": [ 3732 | { 3733 | "name": "Sebastian Bergmann", 3734 | "email": "sebastian@phpunit.de" 3735 | } 3736 | ], 3737 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 3738 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 3739 | "time": "2017-08-03T12:35:26+00:00" 3740 | }, 3741 | { 3742 | "name": "sebastian/object-reflector", 3743 | "version": "1.1.1", 3744 | "source": { 3745 | "type": "git", 3746 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 3747 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 3748 | }, 3749 | "dist": { 3750 | "type": "zip", 3751 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 3752 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 3753 | "shasum": "", 3754 | "mirrors": [ 3755 | { 3756 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3757 | "preferred": true 3758 | } 3759 | ] 3760 | }, 3761 | "require": { 3762 | "php": "^7.0" 3763 | }, 3764 | "require-dev": { 3765 | "phpunit/phpunit": "^6.0" 3766 | }, 3767 | "type": "library", 3768 | "extra": { 3769 | "branch-alias": { 3770 | "dev-master": "1.1-dev" 3771 | } 3772 | }, 3773 | "autoload": { 3774 | "classmap": [ 3775 | "src/" 3776 | ] 3777 | }, 3778 | "notification-url": "https://packagist.org/downloads/", 3779 | "license": [ 3780 | "BSD-3-Clause" 3781 | ], 3782 | "authors": [ 3783 | { 3784 | "name": "Sebastian Bergmann", 3785 | "email": "sebastian@phpunit.de" 3786 | } 3787 | ], 3788 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 3789 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 3790 | "time": "2017-03-29T09:07:27+00:00" 3791 | }, 3792 | { 3793 | "name": "sebastian/recursion-context", 3794 | "version": "3.0.0", 3795 | "source": { 3796 | "type": "git", 3797 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 3798 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 3799 | }, 3800 | "dist": { 3801 | "type": "zip", 3802 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 3803 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 3804 | "shasum": "", 3805 | "mirrors": [ 3806 | { 3807 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3808 | "preferred": true 3809 | } 3810 | ] 3811 | }, 3812 | "require": { 3813 | "php": "^7.0" 3814 | }, 3815 | "require-dev": { 3816 | "phpunit/phpunit": "^6.0" 3817 | }, 3818 | "type": "library", 3819 | "extra": { 3820 | "branch-alias": { 3821 | "dev-master": "3.0.x-dev" 3822 | } 3823 | }, 3824 | "autoload": { 3825 | "classmap": [ 3826 | "src/" 3827 | ] 3828 | }, 3829 | "notification-url": "https://packagist.org/downloads/", 3830 | "license": [ 3831 | "BSD-3-Clause" 3832 | ], 3833 | "authors": [ 3834 | { 3835 | "name": "Jeff Welch", 3836 | "email": "whatthejeff@gmail.com" 3837 | }, 3838 | { 3839 | "name": "Sebastian Bergmann", 3840 | "email": "sebastian@phpunit.de" 3841 | }, 3842 | { 3843 | "name": "Adam Harvey", 3844 | "email": "aharvey@php.net" 3845 | } 3846 | ], 3847 | "description": "Provides functionality to recursively process PHP variables", 3848 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 3849 | "time": "2017-03-03T06:23:57+00:00" 3850 | }, 3851 | { 3852 | "name": "sebastian/resource-operations", 3853 | "version": "2.0.1", 3854 | "source": { 3855 | "type": "git", 3856 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 3857 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" 3858 | }, 3859 | "dist": { 3860 | "type": "zip", 3861 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 3862 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 3863 | "shasum": "", 3864 | "mirrors": [ 3865 | { 3866 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3867 | "preferred": true 3868 | } 3869 | ] 3870 | }, 3871 | "require": { 3872 | "php": "^7.1" 3873 | }, 3874 | "type": "library", 3875 | "extra": { 3876 | "branch-alias": { 3877 | "dev-master": "2.0-dev" 3878 | } 3879 | }, 3880 | "autoload": { 3881 | "classmap": [ 3882 | "src/" 3883 | ] 3884 | }, 3885 | "notification-url": "https://packagist.org/downloads/", 3886 | "license": [ 3887 | "BSD-3-Clause" 3888 | ], 3889 | "authors": [ 3890 | { 3891 | "name": "Sebastian Bergmann", 3892 | "email": "sebastian@phpunit.de" 3893 | } 3894 | ], 3895 | "description": "Provides a list of PHP built-in functions that operate on resources", 3896 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 3897 | "time": "2018-10-04T04:07:39+00:00" 3898 | }, 3899 | { 3900 | "name": "sebastian/version", 3901 | "version": "2.0.1", 3902 | "source": { 3903 | "type": "git", 3904 | "url": "https://github.com/sebastianbergmann/version.git", 3905 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 3906 | }, 3907 | "dist": { 3908 | "type": "zip", 3909 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 3910 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 3911 | "shasum": "", 3912 | "mirrors": [ 3913 | { 3914 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3915 | "preferred": true 3916 | } 3917 | ] 3918 | }, 3919 | "require": { 3920 | "php": ">=5.6" 3921 | }, 3922 | "type": "library", 3923 | "extra": { 3924 | "branch-alias": { 3925 | "dev-master": "2.0.x-dev" 3926 | } 3927 | }, 3928 | "autoload": { 3929 | "classmap": [ 3930 | "src/" 3931 | ] 3932 | }, 3933 | "notification-url": "https://packagist.org/downloads/", 3934 | "license": [ 3935 | "BSD-3-Clause" 3936 | ], 3937 | "authors": [ 3938 | { 3939 | "name": "Sebastian Bergmann", 3940 | "email": "sebastian@phpunit.de", 3941 | "role": "lead" 3942 | } 3943 | ], 3944 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 3945 | "homepage": "https://github.com/sebastianbergmann/version", 3946 | "time": "2016-10-03T07:35:21+00:00" 3947 | }, 3948 | { 3949 | "name": "symfony/yaml", 3950 | "version": "v4.1.4", 3951 | "source": { 3952 | "type": "git", 3953 | "url": "https://github.com/symfony/yaml.git", 3954 | "reference": "b832cc289608b6d305f62149df91529a2ab3c314" 3955 | }, 3956 | "dist": { 3957 | "type": "zip", 3958 | "url": "https://api.github.com/repos/symfony/yaml/zipball/b832cc289608b6d305f62149df91529a2ab3c314", 3959 | "reference": "b832cc289608b6d305f62149df91529a2ab3c314", 3960 | "shasum": "", 3961 | "mirrors": [ 3962 | { 3963 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 3964 | "preferred": true 3965 | } 3966 | ] 3967 | }, 3968 | "require": { 3969 | "php": "^7.1.3", 3970 | "symfony/polyfill-ctype": "~1.8" 3971 | }, 3972 | "conflict": { 3973 | "symfony/console": "<3.4" 3974 | }, 3975 | "require-dev": { 3976 | "symfony/console": "~3.4|~4.0" 3977 | }, 3978 | "suggest": { 3979 | "symfony/console": "For validating YAML files using the lint command" 3980 | }, 3981 | "type": "library", 3982 | "extra": { 3983 | "branch-alias": { 3984 | "dev-master": "4.1-dev" 3985 | } 3986 | }, 3987 | "autoload": { 3988 | "psr-4": { 3989 | "Symfony\\Component\\Yaml\\": "" 3990 | }, 3991 | "exclude-from-classmap": [ 3992 | "/Tests/" 3993 | ] 3994 | }, 3995 | "notification-url": "https://packagist.org/downloads/", 3996 | "license": [ 3997 | "MIT" 3998 | ], 3999 | "authors": [ 4000 | { 4001 | "name": "Fabien Potencier", 4002 | "email": "fabien@symfony.com" 4003 | }, 4004 | { 4005 | "name": "Symfony Community", 4006 | "homepage": "https://symfony.com/contributors" 4007 | } 4008 | ], 4009 | "description": "Symfony Yaml Component", 4010 | "homepage": "https://symfony.com", 4011 | "time": "2018-08-18T16:52:46+00:00" 4012 | }, 4013 | { 4014 | "name": "theseer/tokenizer", 4015 | "version": "1.1.0", 4016 | "source": { 4017 | "type": "git", 4018 | "url": "https://github.com/theseer/tokenizer.git", 4019 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" 4020 | }, 4021 | "dist": { 4022 | "type": "zip", 4023 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", 4024 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", 4025 | "shasum": "", 4026 | "mirrors": [ 4027 | { 4028 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 4029 | "preferred": true 4030 | } 4031 | ] 4032 | }, 4033 | "require": { 4034 | "ext-dom": "*", 4035 | "ext-tokenizer": "*", 4036 | "ext-xmlwriter": "*", 4037 | "php": "^7.0" 4038 | }, 4039 | "type": "library", 4040 | "autoload": { 4041 | "classmap": [ 4042 | "src/" 4043 | ] 4044 | }, 4045 | "notification-url": "https://packagist.org/downloads/", 4046 | "license": [ 4047 | "BSD-3-Clause" 4048 | ], 4049 | "authors": [ 4050 | { 4051 | "name": "Arne Blankerts", 4052 | "email": "arne@blankerts.de", 4053 | "role": "Developer" 4054 | } 4055 | ], 4056 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 4057 | "time": "2017-04-07T12:08:54+00:00" 4058 | }, 4059 | { 4060 | "name": "webmozart/assert", 4061 | "version": "1.3.0", 4062 | "source": { 4063 | "type": "git", 4064 | "url": "https://github.com/webmozart/assert.git", 4065 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a" 4066 | }, 4067 | "dist": { 4068 | "type": "zip", 4069 | "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", 4070 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a", 4071 | "shasum": "", 4072 | "mirrors": [ 4073 | { 4074 | "url": "https://dl.laravel-china.org/%package%/%reference%.%type%", 4075 | "preferred": true 4076 | } 4077 | ] 4078 | }, 4079 | "require": { 4080 | "php": "^5.3.3 || ^7.0" 4081 | }, 4082 | "require-dev": { 4083 | "phpunit/phpunit": "^4.6", 4084 | "sebastian/version": "^1.0.1" 4085 | }, 4086 | "type": "library", 4087 | "extra": { 4088 | "branch-alias": { 4089 | "dev-master": "1.3-dev" 4090 | } 4091 | }, 4092 | "autoload": { 4093 | "psr-4": { 4094 | "Webmozart\\Assert\\": "src/" 4095 | } 4096 | }, 4097 | "notification-url": "https://packagist.org/downloads/", 4098 | "license": [ 4099 | "MIT" 4100 | ], 4101 | "authors": [ 4102 | { 4103 | "name": "Bernhard Schussek", 4104 | "email": "bschussek@gmail.com" 4105 | } 4106 | ], 4107 | "description": "Assertions to validate method input/output with nice error messages.", 4108 | "keywords": [ 4109 | "assert", 4110 | "check", 4111 | "validate" 4112 | ], 4113 | "time": "2018-01-29T19:49:41+00:00" 4114 | } 4115 | ], 4116 | "aliases": [], 4117 | "minimum-stability": "stable", 4118 | "stability-flags": [], 4119 | "prefer-stable": false, 4120 | "prefer-lowest": false, 4121 | "platform": { 4122 | "php": "^7.1" 4123 | }, 4124 | "platform-dev": [] 4125 | } 4126 | --------------------------------------------------------------------------------