├── src ├── StateMachineException.php ├── Commands │ ├── stubs │ │ ├── graph.stub │ │ └── graph-demo.stub │ └── GraphMakeCommand.php ├── Providers │ └── StateMachineServiceProvider.php ├── Graph.php ├── Constructs │ └── StateMachine.php └── StateMachineHelper.php ├── .gitignore ├── tests ├── TestCase.php ├── Stubs │ └── ExampleGraph.php └── GraphTest.php ├── LICENSE ├── composer.json ├── README.md └── composer.lock /src/StateMachineException.php: -------------------------------------------------------------------------------- 1 | app->runningInConsole()) { 18 | $this->commands([ 19 | GraphMakeCommand::class 20 | ]); 21 | } 22 | } 23 | 24 | /** 25 | * Register any application services. 26 | * 27 | * @return void 28 | */ 29 | public function register() 30 | { 31 | // 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/Commands/stubs/graph-demo.stub: -------------------------------------------------------------------------------- 1 | [ 21 | 'from' => ['cart'], 22 | 'to' => 'new', 23 | ], 24 | 'cancel' => [ 25 | 'from' => ['new'], 26 | 'to' => 'cancel', 27 | ], 28 | 'fulfilled' => [ 29 | 'from' => ['new'], 30 | 'to' => 'fulfilled' 31 | ] 32 | ]; 33 | 34 | /** 35 | * @param $object 36 | * @return string 37 | */ 38 | public function onCreate(Model $object) 39 | { 40 | return 'created'; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /tests/Stubs/ExampleGraph.php: -------------------------------------------------------------------------------- 1 | [ 21 | 'from' => ['new'], 22 | 'to' => 'cancelled', 23 | ], 24 | 'fulfill' => [ 25 | 'from' => ['new'], 26 | 'to' => 'fulfilled' 27 | ] 28 | ]; 29 | 30 | /** 31 | * @param Model $model 32 | * @throws Exception 33 | */ 34 | public function onCancel(Model $model) 35 | { 36 | throw new Exception('cancelled'); 37 | } 38 | 39 | public function onFulfill(Model $model) 40 | { 41 | return 'fulfilled'; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) weiwenhao 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "weiwenhao/state-machine", 3 | "description": "state machine", 4 | "keywords": ["state-machine", "state", "laravel"], 5 | "license": "MIT", 6 | "type": "library", 7 | "support": { 8 | "issues": "https://github.com/weiwenhao/state-machine/issues", 9 | "source": "https://github.com/weiwenhao/state-machine" 10 | }, 11 | "authors": [ 12 | { 13 | "name": "weiwenhao", 14 | "email": "1101140857@qq.com" 15 | } 16 | ], 17 | "minimum-stability": "dev", 18 | "require": { 19 | "illuminate/support": "5.5.*|5.6.*|5.7.*", 20 | "illuminate/database": "5.5.*|5.6.*|5.7.*" 21 | }, 22 | "require-dev": { 23 | "phpunit/phpunit": "^7.2", 24 | "mockery/mockery": "dev-master" 25 | }, 26 | "autoload": { 27 | "psr-4": { 28 | "Weiwenhao\\StateMachine\\": "src/" 29 | } 30 | }, 31 | "autoload-dev": { 32 | "psr-4": { 33 | "Weiwenhao\\StateMachine\\Tests\\": "tests/" 34 | } 35 | }, 36 | "extra": { 37 | "laravel": { 38 | "providers": [ 39 | "Weiwenhao\\StateMachine\\Providers\\StateMachineServiceProvider" 40 | ] 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/Commands/GraphMakeCommand.php: -------------------------------------------------------------------------------- 1 | option('demo')) { 30 | return __DIR__.'/stubs/graph-demo.stub'; 31 | } 32 | 33 | return __DIR__.'/stubs/graph.stub'; 34 | } 35 | 36 | protected function getDefaultNamespace($rootNamespace) 37 | { 38 | return $rootNamespace.'\Graphs'; 39 | } 40 | 41 | /** 42 | * Get the console command options. 43 | * 44 | * @return array 45 | */ 46 | protected function getOptions() 47 | { 48 | return [ 49 | ['demo', 'd', InputOption::VALUE_OPTIONAL, 'Create a new graph demo class'], 50 | ]; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/Graph.php: -------------------------------------------------------------------------------- 1 | setObject($object); 31 | } 32 | } 33 | 34 | 35 | /** 36 | * @param Model $object 37 | * @return Graph 38 | * @throws StateMachineException 39 | */ 40 | public static function with(Model $object) 41 | { 42 | $graph = new static; 43 | $graph->setObject($object); 44 | 45 | return $graph; 46 | } 47 | 48 | /** 49 | * @param Model $object 50 | * @throws StateMachineException 51 | */ 52 | public function setObject(Model $object) 53 | { 54 | $this->object = $object; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/Constructs/StateMachine.php: -------------------------------------------------------------------------------- 1 | model = $this->getMockForAbstractClass(Model::class); 22 | $this->model->state = null; 23 | 24 | $this->graph = ExampleGraph::with($this->model); 25 | } 26 | 27 | 28 | /** 29 | * @throws \Weiwenhao\StateMachine\StateMachineException 30 | */ 31 | public function testConstruct() 32 | { 33 | $graph = new ExampleGraph($this->model); 34 | $this->assertEquals($this->model, $graph->getObject()); 35 | } 36 | 37 | public function testInit() 38 | { 39 | $this->graph->init(); 40 | $this->assertEquals('new', $this->model->state); 41 | 42 | return $this->graph; 43 | } 44 | 45 | /** 46 | * @depends testInit 47 | * @param $graph 48 | */ 49 | public function testGetState($graph) 50 | { 51 | $state = $graph->getState(); 52 | $this->assertEquals('new', $state); 53 | } 54 | 55 | /** 56 | * @depends testInit 57 | * @param $graph 58 | */ 59 | public function testCan($graph) 60 | { 61 | $this->assertTrue($graph->can('fulfill')); 62 | } 63 | 64 | /** 65 | * @depends testInit 66 | * @param $graph 67 | */ 68 | public function testGetPossibleTransitions($graph) 69 | { 70 | $this->assertEquals(['cancel', 'fulfill'], $graph->getPossibleTransitions()); 71 | } 72 | 73 | /** 74 | * @depends testInit 75 | * @param $graph 76 | */ 77 | public function testApply($graph) 78 | { 79 | $this->assertTrue($graph->apply('fulfill')); 80 | $this->assertEquals('fulfilled', $graph->getState()); 81 | } 82 | 83 | /** 84 | * @expectedException \Weiwenhao\StateMachine\StateMachineException 85 | */ 86 | public function testException() 87 | { 88 | $graph = ExampleGraph::with($this->model); 89 | $graph->apply('fulfill'); 90 | } 91 | 92 | /** 93 | * @expectedException \Exception 94 | * @expectedExceptionMessage cancelled 95 | */ 96 | public function testEvent() 97 | { 98 | $graph = ExampleGraph::with($this->model); 99 | $graph->init(); 100 | $graph->apply('cancel'); 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /src/StateMachineHelper.php: -------------------------------------------------------------------------------- 1 | setState($this->initState); 14 | 15 | return true; 16 | } 17 | 18 | /** 19 | * @param string $transition 20 | * @return bool 21 | * @throws StateMachineException 22 | */ 23 | public function can($transition) 24 | { 25 | if (!isset($this->graph[$transition])) { 26 | throw new StateMachineException("Transition {$transition} dose not exist"); 27 | } 28 | 29 | if (!in_array($this->getState(), $this->graph[$transition]['from'])) { 30 | return false; 31 | } 32 | 33 | return true; 34 | } 35 | 36 | /** 37 | * @param string $transition 38 | * @param bool $soft 39 | * @return bool 40 | * @throws StateMachineException 41 | */ 42 | public function apply($transition, $soft = false) 43 | { 44 | if (!$this->can($transition)) { 45 | if ($soft) { 46 | return false; 47 | } 48 | 49 | throw new StateMachineException("Transition {$transition} cannot be applied"); 50 | } 51 | 52 | $this->setState($this->graph[$transition]['to']); 53 | 54 | // 后置回调 55 | $functionName = camel_case('on_' . $transition); 56 | method_exists($this, $functionName) && call_user_func_array([$this, $functionName], [$this->object]); 57 | 58 | return true; 59 | } 60 | 61 | 62 | /** 63 | * @return mixed 64 | */ 65 | public function getState() 66 | { 67 | return $this->object->{$this->key}; 68 | } 69 | 70 | public function getObject() 71 | { 72 | return $this->object; 73 | } 74 | 75 | /** 76 | * {@inheritDoc} 77 | */ 78 | public function getStates() 79 | { 80 | return $this->states; 81 | } 82 | 83 | /** 84 | * 获取能够使用的transitions 85 | */ 86 | public function getPossibleTransitions() 87 | { 88 | return array_filter(array_keys($this->graph), [$this, 'can']); 89 | } 90 | 91 | /** 92 | * Set a new state to the object 93 | * 94 | * @param string $state 95 | * @throws StateMachineException 96 | */ 97 | protected function setState($state) 98 | { 99 | if (!in_array($state, $this->states)) { 100 | throw new StateMachineException("Cannot set the state to {$state},because it is not defined in the \$this->states."); 101 | } 102 | 103 | $this->object->{$this->key} = $state; 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ## 介绍 3 | 4 | > 基于laravel model的状态管理扩展 5 | 6 | 开发中经常需要为实体定义一些状态 7 | 如对于文章实体可能会有 new/draft/deleted 8 | 对于支付实体可能会有 awaiting_payment/cancelled/paid/refunded 9 | 10 | 对于订单实体↓ 11 | 12 | ![](http://asset.eienao.com/15296547862738.jpg) 13 | 14 | 15 | 对于小程序的的迭代周期实体可能会有 ↓ 16 | ![](http://asset.eienao.com/15296548277088.jpg) 17 | 18 | 19 | 20 | 21 | 22 | 面对开发过程中繁杂的状态,我们需要一个状态管理工具. 23 | 而state-machine就是管理状态之间转换的一个laravel扩展,拥有优雅的语法与回调机制. 24 | 25 | 26 | ## 安装 27 | 28 | composer require weiwenhao/state-machine 29 | 30 | > 支持laravel5.5+版本 31 | 32 | ## 创建graph 33 | 34 | `php artisan make:graph TestGraph` 35 | 36 | 运行该命令将会在`app\Graphs`目录下创建一个TestGraph文件. 37 | 如果你不明白如何配置 graph,则可以运行 38 | `php artisan make:graph TestGraph -demo` 来生成一个demo. 39 | 40 | ```php 41 | [ 73 | 'from' => ['cart'], 74 | 'to' => 'new', 75 | ], 76 | 'cancel' => [ 77 | 'from' => ['new'], 78 | 'to' => 'cancel', 79 | ], 80 | 'fulfilled' => [ 81 | 'from' => ['new'], 82 | 'to' => 'fulfilled' 83 | ] 84 | ]; 85 | 86 | /** 87 | * Model中用于进行状态转换的key 默认使用state字段 88 | * @var string 89 | */ 90 | protected $key = 'state'; 91 | 92 | /** 93 | * 转换发生时调用的回调(后置回调) 94 | * @param $object 95 | * @return string 96 | */ 97 | public function onCreate(Model $object) 98 | { 99 | return 'created'; 100 | } 101 | } 102 | 103 | ``` 104 | 105 | 其中对于state更推荐使用一个enum类型来处理,所以我通常会在laravel的app目录下创建一个Enums目录来存放枚举类型 106 | 107 | ```php 108 | init()` 130 | 131 | 使用Graph中定义的initState对$order的state属性进行初始化 132 | 133 | #### apply transition 134 | `TestGraph::with($order)->apply('cancel')` 135 | 136 | 对$order的state属性应用cancel这个转换,如果不允许应用cancel则会抛出一个 137 | StateMachineException 138 | 139 | 由于apply方法严格遵守TestGraph中$graph中定义的状态转换.如果存在可能会出现异常的apply(),并且想要处理失败后的结果则可以像下面这样处理 140 | 141 | ``` 142 | use Weiwenhao\StateMachine\StateMachineException 143 | 144 | try { 145 | TestGraph::with($order)->apply('cancel') 146 | } cache (StateMachineException $e) { 147 | // handle... 148 | } 149 | ``` 150 | 151 | 如果你觉得这样太过麻烦, 只需要在apply的时候传递第二个参数为`true`, 则对于不允许apply的情况则不会抛出异常, 而是返回一个false; 152 | 153 | > state-machine只是进行了state的状态转换,不会去进行model的save操作 154 | 155 | #### apply event 156 | 在apply transition后,state-machine 回去对应的Graph中查找是否存在对应的transition回调,有则调用, 并且将对应的model作为参数传递 157 | 158 | 如`TestGraph::with($order)->apply('cancel')`则会调用TestGraph下的onCancel 159 | 160 | ```php 161 | laravel model的观察者模式已经是一种很优雅的事件处理机制了,可能有个同学会觉得两者存在冲突. 173 | > 但是我认为并不会, model event专注于整个模型实体的增删改事件, 而state则是更加细颗粒的,更加专注于处理state的事件机制. 174 | 175 | #### can transition 176 | `TestGraph::with($order)->can('cancel')` 177 | 178 | 返回一个bool值,在apply()的时候会先调用can进行检测 179 | 180 | #### get state 181 | 182 | `TestGraph::with($order)->getState()` 183 | 184 | 在model中使用 $order->state 是一种更加方便的选择 185 | 186 | #### get possible transitions 187 | 188 | `TestGraph::with($order)->getPossibleTransitions()` 189 | 190 | 返回一个array,包含当前状态下可以使用的transitions 191 | 192 | 193 | 194 | ## 其他可选方案 195 | 196 | [winzou/state-machine](https://github.com/winzou/state-machine) 197 | 198 | 199 | -------------------------------------------------------------------------------- /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": "3e8fc29c6264c116ea84f7b5d0f391b5", 8 | "packages": [ 9 | { 10 | "name": "doctrine/inflector", 11 | "version": "1.3.x-dev", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/doctrine/inflector.git", 15 | "reference": "45d9b132b262c1d03835cdeefd42938d881556fa" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://files.phpcomposer.com/files/doctrine/inflector/45d9b132b262c1d03835cdeefd42938d881556fa.zip", 20 | "reference": "45d9b132b262c1d03835cdeefd42938d881556fa", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "^7.1" 25 | }, 26 | "require-dev": { 27 | "phpunit/phpunit": "^6.2" 28 | }, 29 | "type": "library", 30 | "extra": { 31 | "branch-alias": { 32 | "dev-master": "1.3.x-dev" 33 | } 34 | }, 35 | "autoload": { 36 | "psr-4": { 37 | "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" 38 | } 39 | }, 40 | "notification-url": "https://packagist.org/downloads/", 41 | "license": [ 42 | "MIT" 43 | ], 44 | "authors": [ 45 | { 46 | "name": "Roman Borschel", 47 | "email": "roman@code-factory.org" 48 | }, 49 | { 50 | "name": "Benjamin Eberlei", 51 | "email": "kontakt@beberlei.de" 52 | }, 53 | { 54 | "name": "Guilherme Blanco", 55 | "email": "guilhermeblanco@gmail.com" 56 | }, 57 | { 58 | "name": "Jonathan Wage", 59 | "email": "jonwage@gmail.com" 60 | }, 61 | { 62 | "name": "Johannes Schmitt", 63 | "email": "schmittjoh@gmail.com" 64 | } 65 | ], 66 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 67 | "homepage": "http://www.doctrine-project.org", 68 | "keywords": [ 69 | "inflection", 70 | "pluralize", 71 | "singularize", 72 | "string" 73 | ], 74 | "time": "2018-06-15T19:03:38+00:00" 75 | }, 76 | { 77 | "name": "illuminate/container", 78 | "version": "5.6.x-dev", 79 | "source": { 80 | "type": "git", 81 | "url": "https://github.com/illuminate/container.git", 82 | "reference": "1f0757cae8749400aeda730f6438a081fc3c082d" 83 | }, 84 | "dist": { 85 | "type": "zip", 86 | "url": "https://files.phpcomposer.com/files/illuminate/container/1f0757cae8749400aeda730f6438a081fc3c082d.zip", 87 | "reference": "1f0757cae8749400aeda730f6438a081fc3c082d", 88 | "shasum": "" 89 | }, 90 | "require": { 91 | "illuminate/contracts": "5.6.*", 92 | "php": "^7.1.3", 93 | "psr/container": "~1.0" 94 | }, 95 | "type": "library", 96 | "extra": { 97 | "branch-alias": { 98 | "dev-master": "5.6-dev" 99 | } 100 | }, 101 | "autoload": { 102 | "psr-4": { 103 | "Illuminate\\Container\\": "" 104 | } 105 | }, 106 | "notification-url": "https://packagist.org/downloads/", 107 | "license": [ 108 | "MIT" 109 | ], 110 | "authors": [ 111 | { 112 | "name": "Taylor Otwell", 113 | "email": "taylor@laravel.com" 114 | } 115 | ], 116 | "description": "The Illuminate Container package.", 117 | "homepage": "https://laravel.com", 118 | "time": "2018-05-24T13:16:56+00:00" 119 | }, 120 | { 121 | "name": "illuminate/contracts", 122 | "version": "5.6.x-dev", 123 | "source": { 124 | "type": "git", 125 | "url": "https://github.com/illuminate/contracts.git", 126 | "reference": "3dc639feabe0f302f574157a782ede323881a944" 127 | }, 128 | "dist": { 129 | "type": "zip", 130 | "url": "https://files.phpcomposer.com/files/illuminate/contracts/3dc639feabe0f302f574157a782ede323881a944.zip", 131 | "reference": "3dc639feabe0f302f574157a782ede323881a944", 132 | "shasum": "" 133 | }, 134 | "require": { 135 | "php": "^7.1.3", 136 | "psr/container": "~1.0", 137 | "psr/simple-cache": "~1.0" 138 | }, 139 | "type": "library", 140 | "extra": { 141 | "branch-alias": { 142 | "dev-master": "5.6-dev" 143 | } 144 | }, 145 | "autoload": { 146 | "psr-4": { 147 | "Illuminate\\Contracts\\": "" 148 | } 149 | }, 150 | "notification-url": "https://packagist.org/downloads/", 151 | "license": [ 152 | "MIT" 153 | ], 154 | "authors": [ 155 | { 156 | "name": "Taylor Otwell", 157 | "email": "taylor@laravel.com" 158 | } 159 | ], 160 | "description": "The Illuminate Contracts package.", 161 | "homepage": "https://laravel.com", 162 | "time": "2018-05-11T23:38:58+00:00" 163 | }, 164 | { 165 | "name": "illuminate/database", 166 | "version": "5.6.x-dev", 167 | "source": { 168 | "type": "git", 169 | "url": "https://github.com/illuminate/database.git", 170 | "reference": "edc4785d776ed12b598a91a61069a6bcacea07a2" 171 | }, 172 | "dist": { 173 | "type": "zip", 174 | "url": "https://files.phpcomposer.com/files/illuminate/database/edc4785d776ed12b598a91a61069a6bcacea07a2.zip", 175 | "reference": "edc4785d776ed12b598a91a61069a6bcacea07a2", 176 | "shasum": "" 177 | }, 178 | "require": { 179 | "illuminate/container": "5.6.*", 180 | "illuminate/contracts": "5.6.*", 181 | "illuminate/support": "5.6.*", 182 | "php": "^7.1.3" 183 | }, 184 | "suggest": { 185 | "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.6).", 186 | "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", 187 | "illuminate/console": "Required to use the database commands (5.6.*).", 188 | "illuminate/events": "Required to use the observers with Eloquent (5.6.*).", 189 | "illuminate/filesystem": "Required to use the migrations (5.6.*).", 190 | "illuminate/pagination": "Required to paginate the result set (5.6.*)." 191 | }, 192 | "type": "library", 193 | "extra": { 194 | "branch-alias": { 195 | "dev-master": "5.6-dev" 196 | } 197 | }, 198 | "autoload": { 199 | "psr-4": { 200 | "Illuminate\\Database\\": "" 201 | } 202 | }, 203 | "notification-url": "https://packagist.org/downloads/", 204 | "license": [ 205 | "MIT" 206 | ], 207 | "authors": [ 208 | { 209 | "name": "Taylor Otwell", 210 | "email": "taylor@laravel.com" 211 | } 212 | ], 213 | "description": "The Illuminate Database package.", 214 | "homepage": "https://laravel.com", 215 | "keywords": [ 216 | "database", 217 | "laravel", 218 | "orm", 219 | "sql" 220 | ], 221 | "time": "2018-06-20T14:20:19+00:00" 222 | }, 223 | { 224 | "name": "illuminate/support", 225 | "version": "5.6.x-dev", 226 | "source": { 227 | "type": "git", 228 | "url": "https://github.com/illuminate/support.git", 229 | "reference": "b6de0557cb34ebbbdfbd59a0c97009cf4f7f21aa" 230 | }, 231 | "dist": { 232 | "type": "zip", 233 | "url": "https://files.phpcomposer.com/files/illuminate/support/b6de0557cb34ebbbdfbd59a0c97009cf4f7f21aa.zip", 234 | "reference": "b6de0557cb34ebbbdfbd59a0c97009cf4f7f21aa", 235 | "shasum": "" 236 | }, 237 | "require": { 238 | "doctrine/inflector": "~1.1", 239 | "ext-mbstring": "*", 240 | "illuminate/contracts": "5.6.*", 241 | "nesbot/carbon": "^1.24.1", 242 | "php": "^7.1.3" 243 | }, 244 | "conflict": { 245 | "tightenco/collect": "<5.5.33" 246 | }, 247 | "suggest": { 248 | "illuminate/filesystem": "Required to use the composer class (5.6.*).", 249 | "ramsey/uuid": "Required to use Str::uuid() (^3.7).", 250 | "symfony/process": "Required to use the composer class (~4.0).", 251 | "symfony/var-dumper": "Required to use the dd function (~4.0)." 252 | }, 253 | "type": "library", 254 | "extra": { 255 | "branch-alias": { 256 | "dev-master": "5.6-dev" 257 | } 258 | }, 259 | "autoload": { 260 | "psr-4": { 261 | "Illuminate\\Support\\": "" 262 | }, 263 | "files": [ 264 | "helpers.php" 265 | ] 266 | }, 267 | "notification-url": "https://packagist.org/downloads/", 268 | "license": [ 269 | "MIT" 270 | ], 271 | "authors": [ 272 | { 273 | "name": "Taylor Otwell", 274 | "email": "taylor@laravel.com" 275 | } 276 | ], 277 | "description": "The Illuminate Support package.", 278 | "homepage": "https://laravel.com", 279 | "time": "2018-06-18T16:10:24+00:00" 280 | }, 281 | { 282 | "name": "nesbot/carbon", 283 | "version": "1.30.0", 284 | "source": { 285 | "type": "git", 286 | "url": "https://github.com/briannesbitt/Carbon.git", 287 | "reference": "863a1a651ea324e1838da3a52753a4239b9d4bea" 288 | }, 289 | "dist": { 290 | "type": "zip", 291 | "url": "https://files.phpcomposer.com/files/briannesbitt/Carbon/863a1a651ea324e1838da3a52753a4239b9d4bea.zip", 292 | "reference": "863a1a651ea324e1838da3a52753a4239b9d4bea", 293 | "shasum": "" 294 | }, 295 | "require": { 296 | "php": ">=5.3.9", 297 | "symfony/translation": "~2.6 || ~3.0 || ~4.0" 298 | }, 299 | "require-dev": { 300 | "friendsofphp/php-cs-fixer": "~2", 301 | "phpunit/phpunit": "^4.8.35 || ^5.7" 302 | }, 303 | "type": "library", 304 | "autoload": { 305 | "psr-4": { 306 | "": "src/" 307 | } 308 | }, 309 | "notification-url": "https://packagist.org/downloads/", 310 | "license": [ 311 | "MIT" 312 | ], 313 | "authors": [ 314 | { 315 | "name": "Brian Nesbitt", 316 | "email": "brian@nesbot.com", 317 | "homepage": "http://nesbot.com" 318 | } 319 | ], 320 | "description": "A simple API extension for DateTime.", 321 | "homepage": "http://carbon.nesbot.com", 322 | "keywords": [ 323 | "date", 324 | "datetime", 325 | "time" 326 | ], 327 | "time": "2018-06-15T11:52:26+00:00" 328 | }, 329 | { 330 | "name": "psr/container", 331 | "version": "dev-master", 332 | "source": { 333 | "type": "git", 334 | "url": "https://github.com/php-fig/container.git", 335 | "reference": "2cc4a01788191489dc7459446ba832fa79a216a7" 336 | }, 337 | "dist": { 338 | "type": "zip", 339 | "url": "https://files.phpcomposer.com/files/php-fig/container/2cc4a01788191489dc7459446ba832fa79a216a7.zip", 340 | "reference": "2cc4a01788191489dc7459446ba832fa79a216a7", 341 | "shasum": "" 342 | }, 343 | "require": { 344 | "php": ">=5.3.0" 345 | }, 346 | "type": "library", 347 | "extra": { 348 | "branch-alias": { 349 | "dev-master": "1.0.x-dev" 350 | } 351 | }, 352 | "autoload": { 353 | "psr-4": { 354 | "Psr\\Container\\": "src/" 355 | } 356 | }, 357 | "notification-url": "https://packagist.org/downloads/", 358 | "license": [ 359 | "MIT" 360 | ], 361 | "authors": [ 362 | { 363 | "name": "PHP-FIG", 364 | "homepage": "http://www.php-fig.org/" 365 | } 366 | ], 367 | "description": "Common Container Interface (PHP FIG PSR-11)", 368 | "homepage": "https://github.com/php-fig/container", 369 | "keywords": [ 370 | "PSR-11", 371 | "container", 372 | "container-interface", 373 | "container-interop", 374 | "psr" 375 | ], 376 | "time": "2017-06-28T15:35:32+00:00" 377 | }, 378 | { 379 | "name": "psr/simple-cache", 380 | "version": "dev-master", 381 | "source": { 382 | "type": "git", 383 | "url": "https://github.com/php-fig/simple-cache.git", 384 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" 385 | }, 386 | "dist": { 387 | "type": "zip", 388 | "url": "https://files.phpcomposer.com/files/php-fig/simple-cache/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b.zip", 389 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 390 | "shasum": "" 391 | }, 392 | "require": { 393 | "php": ">=5.3.0" 394 | }, 395 | "type": "library", 396 | "extra": { 397 | "branch-alias": { 398 | "dev-master": "1.0.x-dev" 399 | } 400 | }, 401 | "autoload": { 402 | "psr-4": { 403 | "Psr\\SimpleCache\\": "src/" 404 | } 405 | }, 406 | "notification-url": "https://packagist.org/downloads/", 407 | "license": [ 408 | "MIT" 409 | ], 410 | "authors": [ 411 | { 412 | "name": "PHP-FIG", 413 | "homepage": "http://www.php-fig.org/" 414 | } 415 | ], 416 | "description": "Common interfaces for simple caching", 417 | "keywords": [ 418 | "cache", 419 | "caching", 420 | "psr", 421 | "psr-16", 422 | "simple-cache" 423 | ], 424 | "time": "2017-10-23T01:57:42+00:00" 425 | }, 426 | { 427 | "name": "symfony/polyfill-mbstring", 428 | "version": "dev-master", 429 | "source": { 430 | "type": "git", 431 | "url": "https://github.com/symfony/polyfill-mbstring.git", 432 | "reference": "25b83a5050c6607e2dfa814ffb15388caf7ce690" 433 | }, 434 | "dist": { 435 | "type": "zip", 436 | "url": "https://files.phpcomposer.com/files/symfony/polyfill-mbstring/25b83a5050c6607e2dfa814ffb15388caf7ce690.zip", 437 | "reference": "25b83a5050c6607e2dfa814ffb15388caf7ce690", 438 | "shasum": "" 439 | }, 440 | "require": { 441 | "php": ">=5.3.3" 442 | }, 443 | "suggest": { 444 | "ext-mbstring": "For best performance" 445 | }, 446 | "type": "library", 447 | "extra": { 448 | "branch-alias": { 449 | "dev-master": "1.8-dev" 450 | } 451 | }, 452 | "autoload": { 453 | "psr-4": { 454 | "Symfony\\Polyfill\\Mbstring\\": "" 455 | }, 456 | "files": [ 457 | "bootstrap.php" 458 | ] 459 | }, 460 | "notification-url": "https://packagist.org/downloads/", 461 | "license": [ 462 | "MIT" 463 | ], 464 | "authors": [ 465 | { 466 | "name": "Nicolas Grekas", 467 | "email": "p@tchwork.com" 468 | }, 469 | { 470 | "name": "Symfony Community", 471 | "homepage": "https://symfony.com/contributors" 472 | } 473 | ], 474 | "description": "Symfony polyfill for the Mbstring extension", 475 | "homepage": "https://symfony.com", 476 | "keywords": [ 477 | "compatibility", 478 | "mbstring", 479 | "polyfill", 480 | "portable", 481 | "shim" 482 | ], 483 | "time": "2018-05-30T15:56:36+00:00" 484 | }, 485 | { 486 | "name": "symfony/translation", 487 | "version": "dev-master", 488 | "source": { 489 | "type": "git", 490 | "url": "https://github.com/symfony/translation.git", 491 | "reference": "4f0dea904fae71f4566eedee1d0bb15dc5b41fa4" 492 | }, 493 | "dist": { 494 | "type": "zip", 495 | "url": "https://files.phpcomposer.com/files/symfony/translation/4f0dea904fae71f4566eedee1d0bb15dc5b41fa4.zip", 496 | "reference": "4f0dea904fae71f4566eedee1d0bb15dc5b41fa4", 497 | "shasum": "" 498 | }, 499 | "require": { 500 | "php": "^7.1.3", 501 | "symfony/polyfill-mbstring": "~1.0" 502 | }, 503 | "conflict": { 504 | "symfony/config": "<3.4", 505 | "symfony/dependency-injection": "<3.4", 506 | "symfony/yaml": "<3.4" 507 | }, 508 | "require-dev": { 509 | "psr/log": "~1.0", 510 | "symfony/config": "~3.4|~4.0", 511 | "symfony/console": "~3.4|~4.0", 512 | "symfony/dependency-injection": "~3.4|~4.0", 513 | "symfony/finder": "~2.8|~3.0|~4.0", 514 | "symfony/intl": "~3.4|~4.0", 515 | "symfony/yaml": "~3.4|~4.0" 516 | }, 517 | "suggest": { 518 | "psr/log-implementation": "To use logging capability in translator", 519 | "symfony/config": "", 520 | "symfony/yaml": "" 521 | }, 522 | "type": "library", 523 | "extra": { 524 | "branch-alias": { 525 | "dev-master": "4.2-dev" 526 | } 527 | }, 528 | "autoload": { 529 | "psr-4": { 530 | "Symfony\\Component\\Translation\\": "" 531 | }, 532 | "exclude-from-classmap": [ 533 | "/Tests/" 534 | ] 535 | }, 536 | "notification-url": "https://packagist.org/downloads/", 537 | "license": [ 538 | "MIT" 539 | ], 540 | "authors": [ 541 | { 542 | "name": "Fabien Potencier", 543 | "email": "fabien@symfony.com" 544 | }, 545 | { 546 | "name": "Symfony Community", 547 | "homepage": "https://symfony.com/contributors" 548 | } 549 | ], 550 | "description": "Symfony Translation Component", 551 | "homepage": "https://symfony.com", 552 | "time": "2018-06-20T17:36:22+00:00" 553 | } 554 | ], 555 | "packages-dev": [ 556 | { 557 | "name": "doctrine/instantiator", 558 | "version": "dev-master", 559 | "source": { 560 | "type": "git", 561 | "url": "https://github.com/doctrine/instantiator.git", 562 | "reference": "870a62d7b0d63d4e0ffa8f2ce3ab7c8a53d1846d" 563 | }, 564 | "dist": { 565 | "type": "zip", 566 | "url": "https://files.phpcomposer.com/files/doctrine/instantiator/870a62d7b0d63d4e0ffa8f2ce3ab7c8a53d1846d.zip", 567 | "reference": "870a62d7b0d63d4e0ffa8f2ce3ab7c8a53d1846d", 568 | "shasum": "" 569 | }, 570 | "require": { 571 | "php": "^7.1" 572 | }, 573 | "require-dev": { 574 | "doctrine/coding-standard": "^4.0", 575 | "ext-pdo": "*", 576 | "ext-phar": "*", 577 | "phpbench/phpbench": "^0.13", 578 | "phpstan/phpstan-shim": "^0.9.2", 579 | "phpunit/phpunit": "^7.0" 580 | }, 581 | "type": "library", 582 | "extra": { 583 | "branch-alias": { 584 | "dev-master": "1.2.x-dev" 585 | } 586 | }, 587 | "autoload": { 588 | "psr-4": { 589 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 590 | } 591 | }, 592 | "notification-url": "https://packagist.org/downloads/", 593 | "license": [ 594 | "MIT" 595 | ], 596 | "authors": [ 597 | { 598 | "name": "Marco Pivetta", 599 | "email": "ocramius@gmail.com", 600 | "homepage": "http://ocramius.github.com/" 601 | } 602 | ], 603 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 604 | "homepage": "https://github.com/doctrine/instantiator", 605 | "keywords": [ 606 | "constructor", 607 | "instantiate" 608 | ], 609 | "time": "2018-03-05T09:41:42+00:00" 610 | }, 611 | { 612 | "name": "hamcrest/hamcrest-php", 613 | "version": "dev-master", 614 | "source": { 615 | "type": "git", 616 | "url": "https://github.com/hamcrest/hamcrest-php.git", 617 | "reference": "f3e4601eba2586af780265ee81c97741e6da46ca" 618 | }, 619 | "dist": { 620 | "type": "zip", 621 | "url": "https://files.phpcomposer.com/files/hamcrest/hamcrest-php/f3e4601eba2586af780265ee81c97741e6da46ca.zip", 622 | "reference": "f3e4601eba2586af780265ee81c97741e6da46ca", 623 | "shasum": "" 624 | }, 625 | "require": { 626 | "php": "^5.3|^7.0" 627 | }, 628 | "replace": { 629 | "cordoval/hamcrest-php": "*", 630 | "davedevelopment/hamcrest-php": "*", 631 | "kodova/hamcrest-php": "*" 632 | }, 633 | "require-dev": { 634 | "phpunit/php-file-iterator": "^1.4", 635 | "phpunit/phpunit": ">=4.8.35 <5|>=5.4.3 <6", 636 | "satooshi/php-coveralls": "^1.0" 637 | }, 638 | "type": "library", 639 | "extra": { 640 | "branch-alias": { 641 | "dev-master": "2.0-dev" 642 | } 643 | }, 644 | "autoload": { 645 | "classmap": [ 646 | "hamcrest" 647 | ] 648 | }, 649 | "notification-url": "https://packagist.org/downloads/", 650 | "license": [ 651 | "BSD-3-Clause" 652 | ], 653 | "description": "This is the PHP port of Hamcrest Matchers", 654 | "keywords": [ 655 | "test" 656 | ], 657 | "time": "2018-02-24T08:30:36+00:00" 658 | }, 659 | { 660 | "name": "mockery/mockery", 661 | "version": "dev-master", 662 | "source": { 663 | "type": "git", 664 | "url": "https://github.com/mockery/mockery.git", 665 | "reference": "dc9255b24b028cb49fae09a8f46345f483114fff" 666 | }, 667 | "dist": { 668 | "type": "zip", 669 | "url": "https://files.phpcomposer.com/files/mockery/mockery/dc9255b24b028cb49fae09a8f46345f483114fff.zip", 670 | "reference": "dc9255b24b028cb49fae09a8f46345f483114fff", 671 | "shasum": "" 672 | }, 673 | "require": { 674 | "hamcrest/hamcrest-php": "~2.0", 675 | "lib-pcre": ">=7.0", 676 | "php": ">=5.6.0" 677 | }, 678 | "require-dev": { 679 | "phpdocumentor/phpdocumentor": "^2.9", 680 | "phpunit/phpunit": "~5.7.10|~6.5" 681 | }, 682 | "type": "library", 683 | "extra": { 684 | "branch-alias": { 685 | "dev-master": "1.0.x-dev" 686 | } 687 | }, 688 | "autoload": { 689 | "psr-0": { 690 | "Mockery": "library/" 691 | } 692 | }, 693 | "notification-url": "https://packagist.org/downloads/", 694 | "license": [ 695 | "BSD-3-Clause" 696 | ], 697 | "authors": [ 698 | { 699 | "name": "Pádraic Brady", 700 | "email": "padraic.brady@gmail.com", 701 | "homepage": "http://blog.astrumfutura.com" 702 | }, 703 | { 704 | "name": "Dave Marshall", 705 | "email": "dave.marshall@atstsolutions.co.uk", 706 | "homepage": "http://davedevelopment.co.uk" 707 | } 708 | ], 709 | "description": "Mockery is a simple yet flexible PHP mock object framework", 710 | "homepage": "https://github.com/mockery/mockery", 711 | "keywords": [ 712 | "BDD", 713 | "TDD", 714 | "library", 715 | "mock", 716 | "mock objects", 717 | "mockery", 718 | "stub", 719 | "test", 720 | "test double", 721 | "testing" 722 | ], 723 | "time": "2018-06-07T15:49:30+00:00" 724 | }, 725 | { 726 | "name": "myclabs/deep-copy", 727 | "version": "1.x-dev", 728 | "source": { 729 | "type": "git", 730 | "url": "https://github.com/myclabs/DeepCopy.git", 731 | "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" 732 | }, 733 | "dist": { 734 | "type": "zip", 735 | "url": "https://files.phpcomposer.com/files/myclabs/DeepCopy/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8.zip", 736 | "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", 737 | "shasum": "" 738 | }, 739 | "require": { 740 | "php": "^7.1" 741 | }, 742 | "replace": { 743 | "myclabs/deep-copy": "self.version" 744 | }, 745 | "require-dev": { 746 | "doctrine/collections": "^1.0", 747 | "doctrine/common": "^2.6", 748 | "phpunit/phpunit": "^7.1" 749 | }, 750 | "type": "library", 751 | "autoload": { 752 | "psr-4": { 753 | "DeepCopy\\": "src/DeepCopy/" 754 | }, 755 | "files": [ 756 | "src/DeepCopy/deep_copy.php" 757 | ] 758 | }, 759 | "notification-url": "https://packagist.org/downloads/", 760 | "license": [ 761 | "MIT" 762 | ], 763 | "description": "Create deep copies (clones) of your objects", 764 | "keywords": [ 765 | "clone", 766 | "copy", 767 | "duplicate", 768 | "object", 769 | "object graph" 770 | ], 771 | "time": "2018-06-11T23:09:50+00:00" 772 | }, 773 | { 774 | "name": "phar-io/manifest", 775 | "version": "dev-master", 776 | "source": { 777 | "type": "git", 778 | "url": "https://github.com/phar-io/manifest.git", 779 | "reference": "014feadb268809af7c8e2f7ccd396b8494901f58" 780 | }, 781 | "dist": { 782 | "type": "zip", 783 | "url": "https://files.phpcomposer.com/files/phar-io/manifest/014feadb268809af7c8e2f7ccd396b8494901f58.zip", 784 | "reference": "014feadb268809af7c8e2f7ccd396b8494901f58", 785 | "shasum": "" 786 | }, 787 | "require": { 788 | "ext-dom": "*", 789 | "ext-phar": "*", 790 | "phar-io/version": "^1.0.1", 791 | "php": "^5.6 || ^7.0" 792 | }, 793 | "type": "library", 794 | "extra": { 795 | "branch-alias": { 796 | "dev-master": "1.0.x-dev" 797 | } 798 | }, 799 | "autoload": { 800 | "classmap": [ 801 | "src/" 802 | ] 803 | }, 804 | "notification-url": "https://packagist.org/downloads/", 805 | "license": [ 806 | "BSD-3-Clause" 807 | ], 808 | "authors": [ 809 | { 810 | "name": "Arne Blankerts", 811 | "email": "arne@blankerts.de", 812 | "role": "Developer" 813 | }, 814 | { 815 | "name": "Sebastian Heuer", 816 | "email": "sebastian@phpeople.de", 817 | "role": "Developer" 818 | }, 819 | { 820 | "name": "Sebastian Bergmann", 821 | "email": "sebastian@phpunit.de", 822 | "role": "Developer" 823 | } 824 | ], 825 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 826 | "time": "2017-04-07T07:07:10+00:00" 827 | }, 828 | { 829 | "name": "phar-io/version", 830 | "version": "1.0.1", 831 | "source": { 832 | "type": "git", 833 | "url": "https://github.com/phar-io/version.git", 834 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" 835 | }, 836 | "dist": { 837 | "type": "zip", 838 | "url": "https://files.phpcomposer.com/files/phar-io/version/a70c0ced4be299a63d32fa96d9281d03e94041df.zip", 839 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", 840 | "shasum": "" 841 | }, 842 | "require": { 843 | "php": "^5.6 || ^7.0" 844 | }, 845 | "type": "library", 846 | "autoload": { 847 | "classmap": [ 848 | "src/" 849 | ] 850 | }, 851 | "notification-url": "https://packagist.org/downloads/", 852 | "license": [ 853 | "BSD-3-Clause" 854 | ], 855 | "authors": [ 856 | { 857 | "name": "Arne Blankerts", 858 | "email": "arne@blankerts.de", 859 | "role": "Developer" 860 | }, 861 | { 862 | "name": "Sebastian Heuer", 863 | "email": "sebastian@phpeople.de", 864 | "role": "Developer" 865 | }, 866 | { 867 | "name": "Sebastian Bergmann", 868 | "email": "sebastian@phpunit.de", 869 | "role": "Developer" 870 | } 871 | ], 872 | "description": "Library for handling version information and constraints", 873 | "time": "2017-03-05T17:38:23+00:00" 874 | }, 875 | { 876 | "name": "phpdocumentor/reflection-common", 877 | "version": "1.0.1", 878 | "source": { 879 | "type": "git", 880 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 881 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" 882 | }, 883 | "dist": { 884 | "type": "zip", 885 | "url": "https://files.phpcomposer.com/files/phpDocumentor/ReflectionCommon/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6.zip", 886 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 887 | "shasum": "" 888 | }, 889 | "require": { 890 | "php": ">=5.5" 891 | }, 892 | "require-dev": { 893 | "phpunit/phpunit": "^4.6" 894 | }, 895 | "type": "library", 896 | "extra": { 897 | "branch-alias": { 898 | "dev-master": "1.0.x-dev" 899 | } 900 | }, 901 | "autoload": { 902 | "psr-4": { 903 | "phpDocumentor\\Reflection\\": [ 904 | "src" 905 | ] 906 | } 907 | }, 908 | "notification-url": "https://packagist.org/downloads/", 909 | "license": [ 910 | "MIT" 911 | ], 912 | "authors": [ 913 | { 914 | "name": "Jaap van Otterdijk", 915 | "email": "opensource@ijaap.nl" 916 | } 917 | ], 918 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 919 | "homepage": "http://www.phpdoc.org", 920 | "keywords": [ 921 | "FQSEN", 922 | "phpDocumentor", 923 | "phpdoc", 924 | "reflection", 925 | "static analysis" 926 | ], 927 | "time": "2017-09-11T18:02:19+00:00" 928 | }, 929 | { 930 | "name": "phpdocumentor/reflection-docblock", 931 | "version": "4.3.0", 932 | "source": { 933 | "type": "git", 934 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 935 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08" 936 | }, 937 | "dist": { 938 | "type": "zip", 939 | "url": "https://files.phpcomposer.com/files/phpDocumentor/ReflectionDocBlock/94fd0001232e47129dd3504189fa1c7225010d08.zip", 940 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08", 941 | "shasum": "" 942 | }, 943 | "require": { 944 | "php": "^7.0", 945 | "phpdocumentor/reflection-common": "^1.0.0", 946 | "phpdocumentor/type-resolver": "^0.4.0", 947 | "webmozart/assert": "^1.0" 948 | }, 949 | "require-dev": { 950 | "doctrine/instantiator": "~1.0.5", 951 | "mockery/mockery": "^1.0", 952 | "phpunit/phpunit": "^6.4" 953 | }, 954 | "type": "library", 955 | "extra": { 956 | "branch-alias": { 957 | "dev-master": "4.x-dev" 958 | } 959 | }, 960 | "autoload": { 961 | "psr-4": { 962 | "phpDocumentor\\Reflection\\": [ 963 | "src/" 964 | ] 965 | } 966 | }, 967 | "notification-url": "https://packagist.org/downloads/", 968 | "license": [ 969 | "MIT" 970 | ], 971 | "authors": [ 972 | { 973 | "name": "Mike van Riel", 974 | "email": "me@mikevanriel.com" 975 | } 976 | ], 977 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 978 | "time": "2017-11-30T07:14:17+00:00" 979 | }, 980 | { 981 | "name": "phpdocumentor/type-resolver", 982 | "version": "0.4.0", 983 | "source": { 984 | "type": "git", 985 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 986 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" 987 | }, 988 | "dist": { 989 | "type": "zip", 990 | "url": "https://files.phpcomposer.com/files/phpDocumentor/TypeResolver/9c977708995954784726e25d0cd1dddf4e65b0f7.zip", 991 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", 992 | "shasum": "" 993 | }, 994 | "require": { 995 | "php": "^5.5 || ^7.0", 996 | "phpdocumentor/reflection-common": "^1.0" 997 | }, 998 | "require-dev": { 999 | "mockery/mockery": "^0.9.4", 1000 | "phpunit/phpunit": "^5.2||^4.8.24" 1001 | }, 1002 | "type": "library", 1003 | "extra": { 1004 | "branch-alias": { 1005 | "dev-master": "1.0.x-dev" 1006 | } 1007 | }, 1008 | "autoload": { 1009 | "psr-4": { 1010 | "phpDocumentor\\Reflection\\": [ 1011 | "src/" 1012 | ] 1013 | } 1014 | }, 1015 | "notification-url": "https://packagist.org/downloads/", 1016 | "license": [ 1017 | "MIT" 1018 | ], 1019 | "authors": [ 1020 | { 1021 | "name": "Mike van Riel", 1022 | "email": "me@mikevanriel.com" 1023 | } 1024 | ], 1025 | "time": "2017-07-14T14:27:02+00:00" 1026 | }, 1027 | { 1028 | "name": "phpspec/prophecy", 1029 | "version": "dev-master", 1030 | "source": { 1031 | "type": "git", 1032 | "url": "https://github.com/phpspec/prophecy.git", 1033 | "reference": "6471ce6aa91ec03e9fdf3ca188e277104d8a7d1c" 1034 | }, 1035 | "dist": { 1036 | "type": "zip", 1037 | "url": "https://files.phpcomposer.com/files/phpspec/prophecy/6471ce6aa91ec03e9fdf3ca188e277104d8a7d1c.zip", 1038 | "reference": "6471ce6aa91ec03e9fdf3ca188e277104d8a7d1c", 1039 | "shasum": "" 1040 | }, 1041 | "require": { 1042 | "doctrine/instantiator": "^1.0.2", 1043 | "php": "^5.3|^7.0", 1044 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", 1045 | "sebastian/comparator": "^1.1|^2.0|^3.0", 1046 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 1047 | }, 1048 | "require-dev": { 1049 | "phpspec/phpspec": "^2.5|^3.2", 1050 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" 1051 | }, 1052 | "type": "library", 1053 | "extra": { 1054 | "branch-alias": { 1055 | "dev-master": "1.7.x-dev" 1056 | } 1057 | }, 1058 | "autoload": { 1059 | "psr-0": { 1060 | "Prophecy\\": "src/" 1061 | } 1062 | }, 1063 | "notification-url": "https://packagist.org/downloads/", 1064 | "license": [ 1065 | "MIT" 1066 | ], 1067 | "authors": [ 1068 | { 1069 | "name": "Konstantin Kudryashov", 1070 | "email": "ever.zet@gmail.com", 1071 | "homepage": "http://everzet.com" 1072 | }, 1073 | { 1074 | "name": "Marcello Duarte", 1075 | "email": "marcello.duarte@gmail.com" 1076 | } 1077 | ], 1078 | "description": "Highly opinionated mocking framework for PHP 5.3+", 1079 | "homepage": "https://github.com/phpspec/prophecy", 1080 | "keywords": [ 1081 | "Double", 1082 | "Dummy", 1083 | "fake", 1084 | "mock", 1085 | "spy", 1086 | "stub" 1087 | ], 1088 | "time": "2018-05-09T14:00:54+00:00" 1089 | }, 1090 | { 1091 | "name": "phpunit/php-code-coverage", 1092 | "version": "dev-master", 1093 | "source": { 1094 | "type": "git", 1095 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1096 | "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a" 1097 | }, 1098 | "dist": { 1099 | "type": "zip", 1100 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-code-coverage/865662550c384bc1db7e51d29aeda1c2c161d69a.zip", 1101 | "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a", 1102 | "shasum": "" 1103 | }, 1104 | "require": { 1105 | "ext-dom": "*", 1106 | "ext-xmlwriter": "*", 1107 | "php": "^7.1", 1108 | "phpunit/php-file-iterator": "^2.0", 1109 | "phpunit/php-text-template": "^1.2.1", 1110 | "phpunit/php-token-stream": "^3.0", 1111 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 1112 | "sebastian/environment": "^3.1", 1113 | "sebastian/version": "^2.0.1", 1114 | "theseer/tokenizer": "^1.1" 1115 | }, 1116 | "require-dev": { 1117 | "phpunit/phpunit": "^7.0" 1118 | }, 1119 | "suggest": { 1120 | "ext-xdebug": "^2.6.0" 1121 | }, 1122 | "type": "library", 1123 | "extra": { 1124 | "branch-alias": { 1125 | "dev-master": "6.0-dev" 1126 | } 1127 | }, 1128 | "autoload": { 1129 | "classmap": [ 1130 | "src/" 1131 | ] 1132 | }, 1133 | "notification-url": "https://packagist.org/downloads/", 1134 | "license": [ 1135 | "BSD-3-Clause" 1136 | ], 1137 | "authors": [ 1138 | { 1139 | "name": "Sebastian Bergmann", 1140 | "email": "sebastian@phpunit.de", 1141 | "role": "lead" 1142 | } 1143 | ], 1144 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1145 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1146 | "keywords": [ 1147 | "coverage", 1148 | "testing", 1149 | "xunit" 1150 | ], 1151 | "time": "2018-06-01T07:51:50+00:00" 1152 | }, 1153 | { 1154 | "name": "phpunit/php-file-iterator", 1155 | "version": "dev-master", 1156 | "source": { 1157 | "type": "git", 1158 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1159 | "reference": "cecbc684605bb0cc288828eb5d65d93d5c676d3c" 1160 | }, 1161 | "dist": { 1162 | "type": "zip", 1163 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-file-iterator/cecbc684605bb0cc288828eb5d65d93d5c676d3c.zip", 1164 | "reference": "cecbc684605bb0cc288828eb5d65d93d5c676d3c", 1165 | "shasum": "" 1166 | }, 1167 | "require": { 1168 | "php": "^7.1" 1169 | }, 1170 | "type": "library", 1171 | "extra": { 1172 | "branch-alias": { 1173 | "dev-master": "2.0.x-dev" 1174 | } 1175 | }, 1176 | "autoload": { 1177 | "classmap": [ 1178 | "src/" 1179 | ] 1180 | }, 1181 | "notification-url": "https://packagist.org/downloads/", 1182 | "license": [ 1183 | "BSD-3-Clause" 1184 | ], 1185 | "authors": [ 1186 | { 1187 | "name": "Sebastian Bergmann", 1188 | "email": "sebastian@phpunit.de", 1189 | "role": "lead" 1190 | } 1191 | ], 1192 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1193 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1194 | "keywords": [ 1195 | "filesystem", 1196 | "iterator" 1197 | ], 1198 | "time": "2018-06-11T11:44:00+00:00" 1199 | }, 1200 | { 1201 | "name": "phpunit/php-text-template", 1202 | "version": "1.2.1", 1203 | "source": { 1204 | "type": "git", 1205 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1206 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 1207 | }, 1208 | "dist": { 1209 | "type": "zip", 1210 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-text-template/31f8b717e51d9a2afca6c9f046f5d69fc27c8686.zip", 1211 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1212 | "shasum": "" 1213 | }, 1214 | "require": { 1215 | "php": ">=5.3.3" 1216 | }, 1217 | "type": "library", 1218 | "autoload": { 1219 | "classmap": [ 1220 | "src/" 1221 | ] 1222 | }, 1223 | "notification-url": "https://packagist.org/downloads/", 1224 | "license": [ 1225 | "BSD-3-Clause" 1226 | ], 1227 | "authors": [ 1228 | { 1229 | "name": "Sebastian Bergmann", 1230 | "email": "sebastian@phpunit.de", 1231 | "role": "lead" 1232 | } 1233 | ], 1234 | "description": "Simple template engine.", 1235 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1236 | "keywords": [ 1237 | "template" 1238 | ], 1239 | "time": "2015-06-21T13:50:34+00:00" 1240 | }, 1241 | { 1242 | "name": "phpunit/php-timer", 1243 | "version": "dev-master", 1244 | "source": { 1245 | "type": "git", 1246 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1247 | "reference": "9ef9968ba27999219d76ae3cef97aa0fa87bd90f" 1248 | }, 1249 | "dist": { 1250 | "type": "zip", 1251 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-timer/9ef9968ba27999219d76ae3cef97aa0fa87bd90f.zip", 1252 | "reference": "9ef9968ba27999219d76ae3cef97aa0fa87bd90f", 1253 | "shasum": "" 1254 | }, 1255 | "require": { 1256 | "php": "^7.1" 1257 | }, 1258 | "require-dev": { 1259 | "phpunit/phpunit": "^7.0" 1260 | }, 1261 | "type": "library", 1262 | "extra": { 1263 | "branch-alias": { 1264 | "dev-master": "2.0-dev" 1265 | } 1266 | }, 1267 | "autoload": { 1268 | "classmap": [ 1269 | "src/" 1270 | ] 1271 | }, 1272 | "notification-url": "https://packagist.org/downloads/", 1273 | "license": [ 1274 | "BSD-3-Clause" 1275 | ], 1276 | "authors": [ 1277 | { 1278 | "name": "Sebastian Bergmann", 1279 | "email": "sebastian@phpunit.de", 1280 | "role": "lead" 1281 | } 1282 | ], 1283 | "description": "Utility class for timing", 1284 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1285 | "keywords": [ 1286 | "timer" 1287 | ], 1288 | "time": "2018-06-04T07:17:52+00:00" 1289 | }, 1290 | { 1291 | "name": "phpunit/php-token-stream", 1292 | "version": "dev-master", 1293 | "source": { 1294 | "type": "git", 1295 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1296 | "reference": "711ca0c13c66f6b66c2ecb586e56415815034330" 1297 | }, 1298 | "dist": { 1299 | "type": "zip", 1300 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/php-token-stream/711ca0c13c66f6b66c2ecb586e56415815034330.zip", 1301 | "reference": "711ca0c13c66f6b66c2ecb586e56415815034330", 1302 | "shasum": "" 1303 | }, 1304 | "require": { 1305 | "ext-tokenizer": "*", 1306 | "php": "^7.1" 1307 | }, 1308 | "require-dev": { 1309 | "phpunit/phpunit": "^7.0" 1310 | }, 1311 | "type": "library", 1312 | "extra": { 1313 | "branch-alias": { 1314 | "dev-master": "3.0-dev" 1315 | } 1316 | }, 1317 | "autoload": { 1318 | "classmap": [ 1319 | "src/" 1320 | ] 1321 | }, 1322 | "notification-url": "https://packagist.org/downloads/", 1323 | "license": [ 1324 | "BSD-3-Clause" 1325 | ], 1326 | "authors": [ 1327 | { 1328 | "name": "Sebastian Bergmann", 1329 | "email": "sebastian@phpunit.de" 1330 | } 1331 | ], 1332 | "description": "Wrapper around PHP's tokenizer extension.", 1333 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1334 | "keywords": [ 1335 | "tokenizer" 1336 | ], 1337 | "time": "2018-06-06T10:32:05+00:00" 1338 | }, 1339 | { 1340 | "name": "phpunit/phpunit", 1341 | "version": "dev-master", 1342 | "source": { 1343 | "type": "git", 1344 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1345 | "reference": "f951f7b023fb466d226fefa319f142981465267d" 1346 | }, 1347 | "dist": { 1348 | "type": "zip", 1349 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/phpunit/f951f7b023fb466d226fefa319f142981465267d.zip", 1350 | "reference": "f951f7b023fb466d226fefa319f142981465267d", 1351 | "shasum": "" 1352 | }, 1353 | "require": { 1354 | "doctrine/instantiator": "^1.1", 1355 | "ext-dom": "*", 1356 | "ext-json": "*", 1357 | "ext-libxml": "*", 1358 | "ext-mbstring": "*", 1359 | "ext-xml": "*", 1360 | "myclabs/deep-copy": "^1.7", 1361 | "phar-io/manifest": "^1.0.1", 1362 | "phar-io/version": "^1.0", 1363 | "php": "^7.1", 1364 | "phpspec/prophecy": "^1.7", 1365 | "phpunit/php-code-coverage": "^6.0.7", 1366 | "phpunit/php-file-iterator": "^2.0.1", 1367 | "phpunit/php-text-template": "^1.2.1", 1368 | "phpunit/php-timer": "^2.0", 1369 | "sebastian/comparator": "^3.0", 1370 | "sebastian/diff": "^3.0", 1371 | "sebastian/environment": "^3.1", 1372 | "sebastian/exporter": "^3.1", 1373 | "sebastian/global-state": "^2.0", 1374 | "sebastian/object-enumerator": "^3.0.3", 1375 | "sebastian/resource-operations": "^1.0", 1376 | "sebastian/version": "^2.0.1" 1377 | }, 1378 | "conflict": { 1379 | "phpunit/phpunit-mock-objects": "*" 1380 | }, 1381 | "require-dev": { 1382 | "ext-pdo": "*" 1383 | }, 1384 | "suggest": { 1385 | "ext-soap": "*", 1386 | "ext-xdebug": "*", 1387 | "phpunit/php-invoker": "^2.0" 1388 | }, 1389 | "bin": [ 1390 | "phpunit" 1391 | ], 1392 | "type": "library", 1393 | "extra": { 1394 | "branch-alias": { 1395 | "dev-master": "7.3-dev" 1396 | } 1397 | }, 1398 | "autoload": { 1399 | "classmap": [ 1400 | "src/" 1401 | ] 1402 | }, 1403 | "notification-url": "https://packagist.org/downloads/", 1404 | "license": [ 1405 | "BSD-3-Clause" 1406 | ], 1407 | "authors": [ 1408 | { 1409 | "name": "Sebastian Bergmann", 1410 | "email": "sebastian@phpunit.de", 1411 | "role": "lead" 1412 | } 1413 | ], 1414 | "description": "The PHP Unit Testing framework.", 1415 | "homepage": "https://phpunit.de/", 1416 | "keywords": [ 1417 | "phpunit", 1418 | "testing", 1419 | "xunit" 1420 | ], 1421 | "time": "2018-06-21T13:14:15+00:00" 1422 | }, 1423 | { 1424 | "name": "sebastian/code-unit-reverse-lookup", 1425 | "version": "dev-master", 1426 | "source": { 1427 | "type": "git", 1428 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1429 | "reference": "22f5f5ff892d51035dd1fb4cd6b224a640ffb206" 1430 | }, 1431 | "dist": { 1432 | "type": "zip", 1433 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/code-unit-reverse-lookup/22f5f5ff892d51035dd1fb4cd6b224a640ffb206.zip", 1434 | "reference": "22f5f5ff892d51035dd1fb4cd6b224a640ffb206", 1435 | "shasum": "" 1436 | }, 1437 | "require": { 1438 | "php": "^5.6 || ^7.0" 1439 | }, 1440 | "require-dev": { 1441 | "phpunit/phpunit": "^5.7 || ^6.0" 1442 | }, 1443 | "type": "library", 1444 | "extra": { 1445 | "branch-alias": { 1446 | "dev-master": "1.0.x-dev" 1447 | } 1448 | }, 1449 | "autoload": { 1450 | "classmap": [ 1451 | "src/" 1452 | ] 1453 | }, 1454 | "notification-url": "https://packagist.org/downloads/", 1455 | "license": [ 1456 | "BSD-3-Clause" 1457 | ], 1458 | "authors": [ 1459 | { 1460 | "name": "Sebastian Bergmann", 1461 | "email": "sebastian@phpunit.de" 1462 | } 1463 | ], 1464 | "description": "Looks up which function or method a line of code belongs to", 1465 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1466 | "time": "2018-05-15T05:52:48+00:00" 1467 | }, 1468 | { 1469 | "name": "sebastian/comparator", 1470 | "version": "dev-master", 1471 | "source": { 1472 | "type": "git", 1473 | "url": "https://github.com/sebastianbergmann/comparator.git", 1474 | "reference": "c9eb293d22c2f16b1304281538b7408210a41585" 1475 | }, 1476 | "dist": { 1477 | "type": "zip", 1478 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/comparator/c9eb293d22c2f16b1304281538b7408210a41585.zip", 1479 | "reference": "c9eb293d22c2f16b1304281538b7408210a41585", 1480 | "shasum": "" 1481 | }, 1482 | "require": { 1483 | "php": "^7.1", 1484 | "sebastian/diff": "^3.0", 1485 | "sebastian/exporter": "^3.1" 1486 | }, 1487 | "require-dev": { 1488 | "phpunit/phpunit": "^7.1" 1489 | }, 1490 | "type": "library", 1491 | "extra": { 1492 | "branch-alias": { 1493 | "dev-master": "3.0-dev" 1494 | } 1495 | }, 1496 | "autoload": { 1497 | "classmap": [ 1498 | "src/" 1499 | ] 1500 | }, 1501 | "notification-url": "https://packagist.org/downloads/", 1502 | "license": [ 1503 | "BSD-3-Clause" 1504 | ], 1505 | "authors": [ 1506 | { 1507 | "name": "Jeff Welch", 1508 | "email": "whatthejeff@gmail.com" 1509 | }, 1510 | { 1511 | "name": "Volker Dusch", 1512 | "email": "github@wallbash.com" 1513 | }, 1514 | { 1515 | "name": "Bernhard Schussek", 1516 | "email": "bschussek@2bepublished.at" 1517 | }, 1518 | { 1519 | "name": "Sebastian Bergmann", 1520 | "email": "sebastian@phpunit.de" 1521 | } 1522 | ], 1523 | "description": "Provides the functionality to compare PHP values for equality", 1524 | "homepage": "https://github.com/sebastianbergmann/comparator", 1525 | "keywords": [ 1526 | "comparator", 1527 | "compare", 1528 | "equality" 1529 | ], 1530 | "time": "2018-06-14T16:44:28+00:00" 1531 | }, 1532 | { 1533 | "name": "sebastian/diff", 1534 | "version": "dev-master", 1535 | "source": { 1536 | "type": "git", 1537 | "url": "https://github.com/sebastianbergmann/diff.git", 1538 | "reference": "366541b989927187c4ca70490a35615d3fef2dce" 1539 | }, 1540 | "dist": { 1541 | "type": "zip", 1542 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/diff/366541b989927187c4ca70490a35615d3fef2dce.zip", 1543 | "reference": "366541b989927187c4ca70490a35615d3fef2dce", 1544 | "shasum": "" 1545 | }, 1546 | "require": { 1547 | "php": "^7.1" 1548 | }, 1549 | "require-dev": { 1550 | "phpunit/phpunit": "^7.0", 1551 | "symfony/process": "^2 || ^3.3 || ^4" 1552 | }, 1553 | "type": "library", 1554 | "extra": { 1555 | "branch-alias": { 1556 | "dev-master": "3.0-dev" 1557 | } 1558 | }, 1559 | "autoload": { 1560 | "classmap": [ 1561 | "src/" 1562 | ] 1563 | }, 1564 | "notification-url": "https://packagist.org/downloads/", 1565 | "license": [ 1566 | "BSD-3-Clause" 1567 | ], 1568 | "authors": [ 1569 | { 1570 | "name": "Kore Nordmann", 1571 | "email": "mail@kore-nordmann.de" 1572 | }, 1573 | { 1574 | "name": "Sebastian Bergmann", 1575 | "email": "sebastian@phpunit.de" 1576 | } 1577 | ], 1578 | "description": "Diff implementation", 1579 | "homepage": "https://github.com/sebastianbergmann/diff", 1580 | "keywords": [ 1581 | "diff", 1582 | "udiff", 1583 | "unidiff", 1584 | "unified diff" 1585 | ], 1586 | "time": "2018-06-10T07:54:39+00:00" 1587 | }, 1588 | { 1589 | "name": "sebastian/environment", 1590 | "version": "dev-master", 1591 | "source": { 1592 | "type": "git", 1593 | "url": "https://github.com/sebastianbergmann/environment.git", 1594 | "reference": "32c5cba90f7db47b1c10a777b36eccfd44ef8bd7" 1595 | }, 1596 | "dist": { 1597 | "type": "zip", 1598 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/environment/32c5cba90f7db47b1c10a777b36eccfd44ef8bd7.zip", 1599 | "reference": "32c5cba90f7db47b1c10a777b36eccfd44ef8bd7", 1600 | "shasum": "" 1601 | }, 1602 | "require": { 1603 | "php": "^7.0" 1604 | }, 1605 | "require-dev": { 1606 | "phpunit/phpunit": "^6.1" 1607 | }, 1608 | "type": "library", 1609 | "extra": { 1610 | "branch-alias": { 1611 | "dev-master": "3.1.x-dev" 1612 | } 1613 | }, 1614 | "autoload": { 1615 | "classmap": [ 1616 | "src/" 1617 | ] 1618 | }, 1619 | "notification-url": "https://packagist.org/downloads/", 1620 | "license": [ 1621 | "BSD-3-Clause" 1622 | ], 1623 | "authors": [ 1624 | { 1625 | "name": "Sebastian Bergmann", 1626 | "email": "sebastian@phpunit.de" 1627 | } 1628 | ], 1629 | "description": "Provides functionality to handle HHVM/PHP environments", 1630 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1631 | "keywords": [ 1632 | "Xdebug", 1633 | "environment", 1634 | "hhvm" 1635 | ], 1636 | "time": "2018-05-15T05:48:40+00:00" 1637 | }, 1638 | { 1639 | "name": "sebastian/exporter", 1640 | "version": "dev-master", 1641 | "source": { 1642 | "type": "git", 1643 | "url": "https://github.com/sebastianbergmann/exporter.git", 1644 | "reference": "20962714658cf74b1d293a98a30ec108e2e81ca9" 1645 | }, 1646 | "dist": { 1647 | "type": "zip", 1648 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/exporter/20962714658cf74b1d293a98a30ec108e2e81ca9.zip", 1649 | "reference": "20962714658cf74b1d293a98a30ec108e2e81ca9", 1650 | "shasum": "" 1651 | }, 1652 | "require": { 1653 | "php": "^7.0", 1654 | "sebastian/recursion-context": "^3.0" 1655 | }, 1656 | "require-dev": { 1657 | "ext-mbstring": "*", 1658 | "phpunit/phpunit": "^6.0" 1659 | }, 1660 | "type": "library", 1661 | "extra": { 1662 | "branch-alias": { 1663 | "dev-master": "3.1.x-dev" 1664 | } 1665 | }, 1666 | "autoload": { 1667 | "classmap": [ 1668 | "src/" 1669 | ] 1670 | }, 1671 | "notification-url": "https://packagist.org/downloads/", 1672 | "license": [ 1673 | "BSD-3-Clause" 1674 | ], 1675 | "authors": [ 1676 | { 1677 | "name": "Jeff Welch", 1678 | "email": "whatthejeff@gmail.com" 1679 | }, 1680 | { 1681 | "name": "Volker Dusch", 1682 | "email": "github@wallbash.com" 1683 | }, 1684 | { 1685 | "name": "Bernhard Schussek", 1686 | "email": "bschussek@2bepublished.at" 1687 | }, 1688 | { 1689 | "name": "Sebastian Bergmann", 1690 | "email": "sebastian@phpunit.de" 1691 | }, 1692 | { 1693 | "name": "Adam Harvey", 1694 | "email": "aharvey@php.net" 1695 | } 1696 | ], 1697 | "description": "Provides the functionality to export PHP variables for visualization", 1698 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1699 | "keywords": [ 1700 | "export", 1701 | "exporter" 1702 | ], 1703 | "time": "2018-05-15T05:51:07+00:00" 1704 | }, 1705 | { 1706 | "name": "sebastian/global-state", 1707 | "version": "dev-master", 1708 | "source": { 1709 | "type": "git", 1710 | "url": "https://github.com/sebastianbergmann/global-state.git", 1711 | "reference": "30367ea06c5cc3bf684457ac793fb2b863d783c6" 1712 | }, 1713 | "dist": { 1714 | "type": "zip", 1715 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/global-state/30367ea06c5cc3bf684457ac793fb2b863d783c6.zip", 1716 | "reference": "30367ea06c5cc3bf684457ac793fb2b863d783c6", 1717 | "shasum": "" 1718 | }, 1719 | "require": { 1720 | "php": "^7.0" 1721 | }, 1722 | "require-dev": { 1723 | "phpunit/phpunit": "^6.0" 1724 | }, 1725 | "suggest": { 1726 | "ext-uopz": "*" 1727 | }, 1728 | "type": "library", 1729 | "extra": { 1730 | "branch-alias": { 1731 | "dev-master": "2.0-dev" 1732 | } 1733 | }, 1734 | "autoload": { 1735 | "classmap": [ 1736 | "src/" 1737 | ] 1738 | }, 1739 | "notification-url": "https://packagist.org/downloads/", 1740 | "license": [ 1741 | "BSD-3-Clause" 1742 | ], 1743 | "authors": [ 1744 | { 1745 | "name": "Sebastian Bergmann", 1746 | "email": "sebastian@phpunit.de" 1747 | } 1748 | ], 1749 | "description": "Snapshotting of global state", 1750 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1751 | "keywords": [ 1752 | "global state" 1753 | ], 1754 | "time": "2018-05-15T05:52:33+00:00" 1755 | }, 1756 | { 1757 | "name": "sebastian/object-enumerator", 1758 | "version": "dev-master", 1759 | "source": { 1760 | "type": "git", 1761 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1762 | "reference": "06d95dc84f06fc6cc246b8bf48facebcf0fe8069" 1763 | }, 1764 | "dist": { 1765 | "type": "zip", 1766 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/object-enumerator/06d95dc84f06fc6cc246b8bf48facebcf0fe8069.zip", 1767 | "reference": "06d95dc84f06fc6cc246b8bf48facebcf0fe8069", 1768 | "shasum": "" 1769 | }, 1770 | "require": { 1771 | "php": "^7.0", 1772 | "sebastian/object-reflector": "^1.1.1", 1773 | "sebastian/recursion-context": "^3.0" 1774 | }, 1775 | "require-dev": { 1776 | "phpunit/phpunit": "^6.0" 1777 | }, 1778 | "type": "library", 1779 | "extra": { 1780 | "branch-alias": { 1781 | "dev-master": "3.0.x-dev" 1782 | } 1783 | }, 1784 | "autoload": { 1785 | "classmap": [ 1786 | "src/" 1787 | ] 1788 | }, 1789 | "notification-url": "https://packagist.org/downloads/", 1790 | "license": [ 1791 | "BSD-3-Clause" 1792 | ], 1793 | "authors": [ 1794 | { 1795 | "name": "Sebastian Bergmann", 1796 | "email": "sebastian@phpunit.de" 1797 | } 1798 | ], 1799 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1800 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1801 | "time": "2018-05-15T05:52:18+00:00" 1802 | }, 1803 | { 1804 | "name": "sebastian/object-reflector", 1805 | "version": "dev-master", 1806 | "source": { 1807 | "type": "git", 1808 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1809 | "reference": "7707193304715e3caddf28fc73c02c12ed6f350c" 1810 | }, 1811 | "dist": { 1812 | "type": "zip", 1813 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/object-reflector/7707193304715e3caddf28fc73c02c12ed6f350c.zip", 1814 | "reference": "7707193304715e3caddf28fc73c02c12ed6f350c", 1815 | "shasum": "" 1816 | }, 1817 | "require": { 1818 | "php": "^7.0" 1819 | }, 1820 | "require-dev": { 1821 | "phpunit/phpunit": "^6.0" 1822 | }, 1823 | "type": "library", 1824 | "extra": { 1825 | "branch-alias": { 1826 | "dev-master": "1.1-dev" 1827 | } 1828 | }, 1829 | "autoload": { 1830 | "classmap": [ 1831 | "src/" 1832 | ] 1833 | }, 1834 | "notification-url": "https://packagist.org/downloads/", 1835 | "license": [ 1836 | "BSD-3-Clause" 1837 | ], 1838 | "authors": [ 1839 | { 1840 | "name": "Sebastian Bergmann", 1841 | "email": "sebastian@phpunit.de" 1842 | } 1843 | ], 1844 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1845 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1846 | "time": "2018-05-15T05:50:44+00:00" 1847 | }, 1848 | { 1849 | "name": "sebastian/recursion-context", 1850 | "version": "dev-master", 1851 | "source": { 1852 | "type": "git", 1853 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1854 | "reference": "dbe1869c13935c6080c834fc61424834b9ad5907" 1855 | }, 1856 | "dist": { 1857 | "type": "zip", 1858 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/recursion-context/dbe1869c13935c6080c834fc61424834b9ad5907.zip", 1859 | "reference": "dbe1869c13935c6080c834fc61424834b9ad5907", 1860 | "shasum": "" 1861 | }, 1862 | "require": { 1863 | "php": "^7.0" 1864 | }, 1865 | "require-dev": { 1866 | "phpunit/phpunit": "^6.0" 1867 | }, 1868 | "type": "library", 1869 | "extra": { 1870 | "branch-alias": { 1871 | "dev-master": "3.0.x-dev" 1872 | } 1873 | }, 1874 | "autoload": { 1875 | "classmap": [ 1876 | "src/" 1877 | ] 1878 | }, 1879 | "notification-url": "https://packagist.org/downloads/", 1880 | "license": [ 1881 | "BSD-3-Clause" 1882 | ], 1883 | "authors": [ 1884 | { 1885 | "name": "Jeff Welch", 1886 | "email": "whatthejeff@gmail.com" 1887 | }, 1888 | { 1889 | "name": "Sebastian Bergmann", 1890 | "email": "sebastian@phpunit.de" 1891 | }, 1892 | { 1893 | "name": "Adam Harvey", 1894 | "email": "aharvey@php.net" 1895 | } 1896 | ], 1897 | "description": "Provides functionality to recursively process PHP variables", 1898 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1899 | "time": "2018-05-15T05:52:05+00:00" 1900 | }, 1901 | { 1902 | "name": "sebastian/resource-operations", 1903 | "version": "dev-master", 1904 | "source": { 1905 | "type": "git", 1906 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1907 | "reference": "0f9911fea026d9737c9b357ddda0916ea3beaf1d" 1908 | }, 1909 | "dist": { 1910 | "type": "zip", 1911 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/resource-operations/0f9911fea026d9737c9b357ddda0916ea3beaf1d.zip", 1912 | "reference": "0f9911fea026d9737c9b357ddda0916ea3beaf1d", 1913 | "shasum": "" 1914 | }, 1915 | "require": { 1916 | "php": ">=5.6.0" 1917 | }, 1918 | "type": "library", 1919 | "extra": { 1920 | "branch-alias": { 1921 | "dev-master": "1.0.x-dev" 1922 | } 1923 | }, 1924 | "autoload": { 1925 | "classmap": [ 1926 | "src/" 1927 | ] 1928 | }, 1929 | "notification-url": "https://packagist.org/downloads/", 1930 | "license": [ 1931 | "BSD-3-Clause" 1932 | ], 1933 | "authors": [ 1934 | { 1935 | "name": "Sebastian Bergmann", 1936 | "email": "sebastian@phpunit.de" 1937 | } 1938 | ], 1939 | "description": "Provides a list of PHP built-in functions that operate on resources", 1940 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1941 | "time": "2018-05-15T05:53:02+00:00" 1942 | }, 1943 | { 1944 | "name": "sebastian/version", 1945 | "version": "2.0.1", 1946 | "source": { 1947 | "type": "git", 1948 | "url": "https://github.com/sebastianbergmann/version.git", 1949 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 1950 | }, 1951 | "dist": { 1952 | "type": "zip", 1953 | "url": "https://files.phpcomposer.com/files/sebastianbergmann/version/99732be0ddb3361e16ad77b68ba41efc8e979019.zip", 1954 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 1955 | "shasum": "" 1956 | }, 1957 | "require": { 1958 | "php": ">=5.6" 1959 | }, 1960 | "type": "library", 1961 | "extra": { 1962 | "branch-alias": { 1963 | "dev-master": "2.0.x-dev" 1964 | } 1965 | }, 1966 | "autoload": { 1967 | "classmap": [ 1968 | "src/" 1969 | ] 1970 | }, 1971 | "notification-url": "https://packagist.org/downloads/", 1972 | "license": [ 1973 | "BSD-3-Clause" 1974 | ], 1975 | "authors": [ 1976 | { 1977 | "name": "Sebastian Bergmann", 1978 | "email": "sebastian@phpunit.de", 1979 | "role": "lead" 1980 | } 1981 | ], 1982 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1983 | "homepage": "https://github.com/sebastianbergmann/version", 1984 | "time": "2016-10-03T07:35:21+00:00" 1985 | }, 1986 | { 1987 | "name": "theseer/tokenizer", 1988 | "version": "1.1.0", 1989 | "source": { 1990 | "type": "git", 1991 | "url": "https://github.com/theseer/tokenizer.git", 1992 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" 1993 | }, 1994 | "dist": { 1995 | "type": "zip", 1996 | "url": "https://files.phpcomposer.com/files/theseer/tokenizer/cb2f008f3f05af2893a87208fe6a6c4985483f8b.zip", 1997 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", 1998 | "shasum": "" 1999 | }, 2000 | "require": { 2001 | "ext-dom": "*", 2002 | "ext-tokenizer": "*", 2003 | "ext-xmlwriter": "*", 2004 | "php": "^7.0" 2005 | }, 2006 | "type": "library", 2007 | "autoload": { 2008 | "classmap": [ 2009 | "src/" 2010 | ] 2011 | }, 2012 | "notification-url": "https://packagist.org/downloads/", 2013 | "license": [ 2014 | "BSD-3-Clause" 2015 | ], 2016 | "authors": [ 2017 | { 2018 | "name": "Arne Blankerts", 2019 | "email": "arne@blankerts.de", 2020 | "role": "Developer" 2021 | } 2022 | ], 2023 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 2024 | "time": "2017-04-07T12:08:54+00:00" 2025 | }, 2026 | { 2027 | "name": "webmozart/assert", 2028 | "version": "dev-master", 2029 | "source": { 2030 | "type": "git", 2031 | "url": "https://github.com/webmozart/assert.git", 2032 | "reference": "53927dddf3afa2088b355188e143bba42159bf5d" 2033 | }, 2034 | "dist": { 2035 | "type": "zip", 2036 | "url": "https://files.phpcomposer.com/files/webmozart/assert/53927dddf3afa2088b355188e143bba42159bf5d.zip", 2037 | "reference": "53927dddf3afa2088b355188e143bba42159bf5d", 2038 | "shasum": "" 2039 | }, 2040 | "require": { 2041 | "php": "^5.3.3 || ^7.0" 2042 | }, 2043 | "require-dev": { 2044 | "phpunit/phpunit": "^4.6", 2045 | "sebastian/version": "^1.0.1" 2046 | }, 2047 | "type": "library", 2048 | "extra": { 2049 | "branch-alias": { 2050 | "dev-master": "1.3-dev" 2051 | } 2052 | }, 2053 | "autoload": { 2054 | "psr-4": { 2055 | "Webmozart\\Assert\\": "src/" 2056 | } 2057 | }, 2058 | "notification-url": "https://packagist.org/downloads/", 2059 | "license": [ 2060 | "MIT" 2061 | ], 2062 | "authors": [ 2063 | { 2064 | "name": "Bernhard Schussek", 2065 | "email": "bschussek@gmail.com" 2066 | } 2067 | ], 2068 | "description": "Assertions to validate method input/output with nice error messages.", 2069 | "keywords": [ 2070 | "assert", 2071 | "check", 2072 | "validate" 2073 | ], 2074 | "time": "2018-05-29T14:25:02+00:00" 2075 | } 2076 | ], 2077 | "aliases": [], 2078 | "minimum-stability": "dev", 2079 | "stability-flags": { 2080 | "mockery/mockery": 20 2081 | }, 2082 | "prefer-stable": false, 2083 | "prefer-lowest": false, 2084 | "platform": [], 2085 | "platform-dev": [] 2086 | } 2087 | --------------------------------------------------------------------------------