├── .gitignore ├── .travis.yml ├── README.md ├── composer.json ├── composer.lock ├── src └── Kevupton │ └── LaravelSwagger │ ├── DynamicHandler.php │ ├── DynamicMethod.php │ ├── Exceptions │ ├── DynamicHandlerException.php │ ├── DynamicMethodException.php │ └── MethodContainerException.php │ ├── LaravelSwagger.php │ ├── MethodContainer.php │ ├── ValueContainer.php │ └── functions.php └── tests ├── LaravelSwaggerTest.php └── swagger └── a.php /.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | node_modules/ 3 | 4 | # Laravel 4 specific 5 | bootstrap/compiled.php 6 | app/storage/ 7 | 8 | # Laravel 5 & Lumen specific 9 | bootstrap/cache/ 10 | storage/ 11 | .env.*.php 12 | .env.php 13 | .env 14 | .env.example -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | sudo: true 4 | 5 | php: 6 | - 5.5 7 | - 5.6 8 | - 7.0 9 | - hhvm 10 | 11 | sudo: false 12 | 13 | matrix: 14 | fast_finish: true 15 | 16 | allow_failures: 17 | - php: hhvm 18 | 19 | install: 20 | # create a new database for the hyn connection 21 | - export DB_USERNAME=travis DB_DATABASE=hyn DB_PASSWORD= QUEUE_DRIVER=sync 22 | # - export PACKAGE_PROVIDER=Kevupton\\\\Referrals\\\\Providers\\\\ReferralsServiceProvider::class 23 | # - export SEED_CLASS=TestSeeds::class 24 | - export PACKAGE_NAME=kevupton/laravel-swagger 25 | - curl -s https://raw.githubusercontent.com/kevupton/docker-laravel-tests/master/setup.sh | bash 26 | 27 | script: 28 | - cd laravel 29 | - composer update 30 | - php artisan vendor:publish --force 31 | - php artisan migrate --seed 32 | - phpunit "vendor/$PACKAGE_NAME" 33 | 34 | # run the script calling unit tests and so on -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # laravel-swagger [![kevupton/laravel-swagger](https://travis-ci.org/kevupton/laravel-swagger.svg?branch=master)](https://travis-ci.org/kevupton/laravel-swagger) 2 | Swagger Annotations Generator for Laravel 5.0 and up. 3 | 4 | 5 | 6 | ## Introduction 7 | This package uses the Swagger PHP library and Laravel to generate an OpenAPI 3.0-compliant JSON Specification. 8 | 9 | This package supports Laravel 5.0 and above. 10 | 11 | ## Installation 12 | ```bash 13 | $ composer require kevupton/laravel-swagger 14 | ``` 15 | 16 | 17 | # Table Of Contents 18 | 19 | > * [Models](#models) 20 | > * [Controllers](#controllers) 21 | > * [Custom Handlers](#custom-handlers) 22 | > * [Overriding Values](#overriding-values) 23 | > * [Seperate Container Class](#seperate-container-class) 24 | 25 | 26 | 27 | ## Models 28 | 29 | ### Usage 30 | > `\Kevupton\LaravelSwagger\scan($path, $models);` 31 | 32 | Define your Eloquent Models as shown below, in order for `laravel-swagger` to include in your specification: 33 | 34 | ```PHP 35 | /** @var Swagger\Annotations\Swagger $swagger */ 36 | $swagger = \Kevupton\LaravelSwagger\scan(app_path('location'), [ 37 | 'models' => [ 38 | /** All models go in here */ 39 | \App\Models\User::class, 40 | ] 41 | ]); 42 | ``` 43 | 44 | Example model: 45 | 46 | ```PHP 47 | class User { 48 | protected $table = 'users'; 49 | protected $fillable = ['first_name', 'last_name', 'image_id']; 50 | protected $hidden = ['created_at', 'updated_at', 'image_id']; 51 | protected $with = ['image']; 52 | public $timestamps = true; 53 | 54 | public function image() { 55 | return $this->belongsTo(Image::class); 56 | } 57 | } 58 | ``` 59 | 60 | ### Output 61 | ```JSON 62 | "App\\Models\\User": { 63 | "properties": { 64 | "id": { 65 | "type": "string" 66 | }, 67 | "first_name": { 68 | "type": "string" 69 | }, 70 | "last_name": { 71 | "type": "string" 72 | }, 73 | "image": { 74 | "$ref": "#/definitions/App\\Models\\Image" 75 | } 76 | } 77 | } 78 | ``` 79 | 80 | 81 | ## Controllers 82 | Laravel-Swagger allows you to define a generic, customized output for each Controller. It requires a parent controller to define the base of each output response. 83 | 84 | ### Getting Started 85 | For example, you have controllers `TestController`, `FooController` and `BarController` which serves API requests. 86 | 87 | Each of the `index` methods share similar functionality, which is to display a list of results with pagination. The router definition is as follows: 88 | 89 | 90 | ### Example Router Definition 91 | ```PHP 92 | Route::get('/v1/test', ['uses' => 'TestController@index', 'as' => 'v1.test.index']); 93 | Route::get('/v1/foo', ['uses' => 'FooController@index', 'as' => 'v1.foo.index']); 94 | Route::get('/v1/bar', ['uses' => 'BarController@index', 'as' => 'v1.bar.index']); 95 | 96 | Route::get('/v1/bar/{bar}', ['uses' => 'BarController@show', 'as' => 'v1.bar.show']); 97 | ``` 98 | 99 | *** 100 | *I have a custom package to help with Controller functionality which can be found at [Ethereal](http://github.com/kevupton/ethereal)'s [Resource Trait](https://github.com/kevupton/ethereal/wiki/resourcetrait)* 101 | *** 102 | Since these Controllers share the same basic output, you can utilize a `BaseController` that the above Controllers may inherit from. An example `BaseController` is shown below: 103 | 104 | ### Example Base Controller 105 | 106 | ```php 107 | DynamicMethod::GET([ 120 | 'tags' => ['{{tag}}'], 121 | 'summary' => '{{summary}}', 122 | 'parameters' => [ 123 | new Parameter([ 124 | 'in' => 'query', 125 | 'name' => 'page', 126 | 'description' => 'the page number', 127 | 'required' => false, 128 | 'type' => 'string' 129 | ]) 130 | ], 131 | 'value' => new Response([ 132 | 'response' => 200, 133 | 'description' => 'test', 134 | 'ref' => '{{response}}' 135 | ]) 136 | ]) 137 | ]; 138 | } 139 | } 140 | 141 | ``` 142 | 143 | `getSwaggerRoutes` is a method that defines the template structure of the specification for the above mentioned Controllers. 144 | 145 | You would have noticed, that there are placeholder values, such as `{{response}}`, included in the above definition. These values will be replaced with the values found on each of the child Controllers. Refer to the section on [keys](#keys). 146 | 147 | ### Route Matching 148 | Referring to the routing definition as shown [here](#example-router-definition), the key `index` refers to the route key `index` of the above Router definitions. 149 | 150 | For example, referring to the [above](#example-router-definition), the router key `index` defined in `getSwaggerRoutes` will apply to the route `v1.bar.index` , and not `v1.bar.show`. 151 | 152 | Likewise, `v1.test.index` will match the above definition, but not `v1.index.test`. 153 | 154 | ### Keys 155 | > **{{keyname}}** 156 | **keyname** refers to the name of the static variable in your Controller, whose value it will be replaced with. 157 | ```php 158 | public static $keyname = 'Value that will be replaced'; 159 | ``` 160 | 161 | Referring to [the example](#example-base-controller), you can see the example keys: 162 | ```php 163 | 'tags' => ['{{tag}}'], 164 | 'summary' => '{{summary}}', 165 | 'value' => '{{response}}', 166 | ``` 167 | The default handler will search the *Child Controller* for each variable of the same name, and replace the key with the values the variable contains. 168 | 169 | ### Example Child Controller 170 | 171 | ```php 172 | class TestController { 173 | public static $tag = "my custom tag"; 174 | public static $summary = "how awesome is this"; 175 | public static $response = "#/definitions/Response" 176 | ``` 177 | ### Example Output 178 | This is one of the paths located in the swagger json output. 179 | ```json 180 | { 181 | "/v1/test": { 182 | "get": { 183 | "tags": [ 184 | "my custom tag" 185 | ], 186 | "summary": "how awesome is this", 187 | "parameters": [ 188 | { 189 | "name": "page", 190 | "in": "query", 191 | "description": "the page number", 192 | "required": false, 193 | "type": "string" 194 | }, 195 | ], 196 | "responses": { 197 | "200": { 198 | "description": "test", 199 | "schema": { 200 | "$ref": "#/definitions/dynamic-definition-1" 201 | } 202 | } 203 | } 204 | }, 205 | } 206 | ``` 207 | *NOTE* The default handler will replace the key with the *static* variable of the same name found in your Controller. You may modify this behavior in the section [Editing the Default Behaviour](#custom-handlers). 208 | 209 | ## Custom Handlers 210 | ### Definition 211 | Should you require to change the default behavior of the default handler, you may extend the handler class, and implement the `handle` method, as shown below. 212 | ```php 213 | method->keys(); 231 | 232 | $key = 'response'; 233 | 234 | //get the value of from the class 235 | $value = ValueContainer::getValue($class, $key); 236 | 237 | /** 238 | * Do some handling here of the value? 239 | */ 240 | 241 | //to set a registered key 242 | $this->method->set($key, $value); 243 | } 244 | } 245 | ``` 246 | 247 | To use your new custom handler, you may define `getSwaggerHandler`, returning the `::class` of the new Custom Handler, as shown below. 248 | 249 | ### Example Custom Handler Implementation 250 | 251 | ```php 252 | use App\Handlers\CustomHandler; 253 | 254 | class BaseController extends Controller { 255 | 256 | //The method for defining the custom handler 257 | public static function getSwaggerHandler() { 258 | return CustomHandler::class; 259 | } 260 | } 261 | 262 | ``` 263 | 264 | ## Overriding Values 265 | 266 | Should your *Child Controller* contains the definition of a static variable, overriding the parent Controller's values, the *Child Controller*'s values will take effect. 267 | 268 | 269 | ## Seperate Container Class 270 | Instead of defining the `getSwaggerMethods`, `getSwaggerRoutes` and `getSwaggerHandler` directly in your *parent* and *child Controllers*, you may define them in a separate class. 271 | 272 | You may then include it in your BaseController, or any other Controllers, using the static variable `$swagger_container`. Please refer to the example below. 273 | 274 | ### Example Custom Container Implementation 275 | 276 | ```php 277 | =5.3", 15 | "zircote/swagger-php": "^2.0", 16 | "doctrine/dbal": "~2.3" 17 | }, 18 | "autoload": { 19 | "psr-4": { 20 | "Kevupton\\LaravelSwagger\\": "src/Kevupton/LaravelSwagger/" 21 | }, 22 | "files": [ 23 | "src/Kevupton/LaravelSwagger/functions.php" 24 | ] 25 | }, 26 | "minimum-stability": "stable", 27 | "require-dev": { 28 | "laravel/laravel": "^5.5", 29 | "laravel/lumen": "^5.5" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "7a0eab33f910898853ab8abaa84965c6", 8 | "content-hash": "0795582a8ad3a25aa215b72b57035da5", 9 | "packages": [ 10 | { 11 | "name": "doctrine/annotations", 12 | "version": "v1.5.0", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/doctrine/annotations.git", 16 | "reference": "5beebb01b025c94e93686b7a0ed3edae81fe3e7f" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/5beebb01b025c94e93686b7a0ed3edae81fe3e7f", 21 | "reference": "5beebb01b025c94e93686b7a0ed3edae81fe3e7f", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "doctrine/lexer": "1.*", 26 | "php": "^7.1" 27 | }, 28 | "require-dev": { 29 | "doctrine/cache": "1.*", 30 | "phpunit/phpunit": "^5.7" 31 | }, 32 | "type": "library", 33 | "extra": { 34 | "branch-alias": { 35 | "dev-master": "1.5.x-dev" 36 | } 37 | }, 38 | "autoload": { 39 | "psr-4": { 40 | "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" 41 | } 42 | }, 43 | "notification-url": "https://packagist.org/downloads/", 44 | "license": [ 45 | "MIT" 46 | ], 47 | "authors": [ 48 | { 49 | "name": "Roman Borschel", 50 | "email": "roman@code-factory.org" 51 | }, 52 | { 53 | "name": "Benjamin Eberlei", 54 | "email": "kontakt@beberlei.de" 55 | }, 56 | { 57 | "name": "Guilherme Blanco", 58 | "email": "guilhermeblanco@gmail.com" 59 | }, 60 | { 61 | "name": "Jonathan Wage", 62 | "email": "jonwage@gmail.com" 63 | }, 64 | { 65 | "name": "Johannes Schmitt", 66 | "email": "schmittjoh@gmail.com" 67 | } 68 | ], 69 | "description": "Docblock Annotations Parser", 70 | "homepage": "http://www.doctrine-project.org", 71 | "keywords": [ 72 | "annotations", 73 | "docblock", 74 | "parser" 75 | ], 76 | "time": "2017-07-22 10:58:02" 77 | }, 78 | { 79 | "name": "doctrine/cache", 80 | "version": "v1.7.1", 81 | "source": { 82 | "type": "git", 83 | "url": "https://github.com/doctrine/cache.git", 84 | "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a" 85 | }, 86 | "dist": { 87 | "type": "zip", 88 | "url": "https://api.github.com/repos/doctrine/cache/zipball/b3217d58609e9c8e661cd41357a54d926c4a2a1a", 89 | "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a", 90 | "shasum": "" 91 | }, 92 | "require": { 93 | "php": "~7.1" 94 | }, 95 | "conflict": { 96 | "doctrine/common": ">2.2,<2.4" 97 | }, 98 | "require-dev": { 99 | "alcaeus/mongo-php-adapter": "^1.1", 100 | "mongodb/mongodb": "^1.1", 101 | "phpunit/phpunit": "^5.7", 102 | "predis/predis": "~1.0" 103 | }, 104 | "suggest": { 105 | "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" 106 | }, 107 | "type": "library", 108 | "extra": { 109 | "branch-alias": { 110 | "dev-master": "1.7.x-dev" 111 | } 112 | }, 113 | "autoload": { 114 | "psr-4": { 115 | "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" 116 | } 117 | }, 118 | "notification-url": "https://packagist.org/downloads/", 119 | "license": [ 120 | "MIT" 121 | ], 122 | "authors": [ 123 | { 124 | "name": "Roman Borschel", 125 | "email": "roman@code-factory.org" 126 | }, 127 | { 128 | "name": "Benjamin Eberlei", 129 | "email": "kontakt@beberlei.de" 130 | }, 131 | { 132 | "name": "Guilherme Blanco", 133 | "email": "guilhermeblanco@gmail.com" 134 | }, 135 | { 136 | "name": "Jonathan Wage", 137 | "email": "jonwage@gmail.com" 138 | }, 139 | { 140 | "name": "Johannes Schmitt", 141 | "email": "schmittjoh@gmail.com" 142 | } 143 | ], 144 | "description": "Caching library offering an object-oriented API for many cache backends", 145 | "homepage": "http://www.doctrine-project.org", 146 | "keywords": [ 147 | "cache", 148 | "caching" 149 | ], 150 | "time": "2017-08-25 07:02:50" 151 | }, 152 | { 153 | "name": "doctrine/collections", 154 | "version": "v1.5.0", 155 | "source": { 156 | "type": "git", 157 | "url": "https://github.com/doctrine/collections.git", 158 | "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf" 159 | }, 160 | "dist": { 161 | "type": "zip", 162 | "url": "https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf", 163 | "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf", 164 | "shasum": "" 165 | }, 166 | "require": { 167 | "php": "^7.1" 168 | }, 169 | "require-dev": { 170 | "doctrine/coding-standard": "~0.1@dev", 171 | "phpunit/phpunit": "^5.7" 172 | }, 173 | "type": "library", 174 | "extra": { 175 | "branch-alias": { 176 | "dev-master": "1.3.x-dev" 177 | } 178 | }, 179 | "autoload": { 180 | "psr-0": { 181 | "Doctrine\\Common\\Collections\\": "lib/" 182 | } 183 | }, 184 | "notification-url": "https://packagist.org/downloads/", 185 | "license": [ 186 | "MIT" 187 | ], 188 | "authors": [ 189 | { 190 | "name": "Roman Borschel", 191 | "email": "roman@code-factory.org" 192 | }, 193 | { 194 | "name": "Benjamin Eberlei", 195 | "email": "kontakt@beberlei.de" 196 | }, 197 | { 198 | "name": "Guilherme Blanco", 199 | "email": "guilhermeblanco@gmail.com" 200 | }, 201 | { 202 | "name": "Jonathan Wage", 203 | "email": "jonwage@gmail.com" 204 | }, 205 | { 206 | "name": "Johannes Schmitt", 207 | "email": "schmittjoh@gmail.com" 208 | } 209 | ], 210 | "description": "Collections Abstraction library", 211 | "homepage": "http://www.doctrine-project.org", 212 | "keywords": [ 213 | "array", 214 | "collections", 215 | "iterator" 216 | ], 217 | "time": "2017-07-22 10:37:32" 218 | }, 219 | { 220 | "name": "doctrine/common", 221 | "version": "v2.8.1", 222 | "source": { 223 | "type": "git", 224 | "url": "https://github.com/doctrine/common.git", 225 | "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66" 226 | }, 227 | "dist": { 228 | "type": "zip", 229 | "url": "https://api.github.com/repos/doctrine/common/zipball/f68c297ce6455e8fd794aa8ffaf9fa458f6ade66", 230 | "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66", 231 | "shasum": "" 232 | }, 233 | "require": { 234 | "doctrine/annotations": "1.*", 235 | "doctrine/cache": "1.*", 236 | "doctrine/collections": "1.*", 237 | "doctrine/inflector": "1.*", 238 | "doctrine/lexer": "1.*", 239 | "php": "~7.1" 240 | }, 241 | "require-dev": { 242 | "phpunit/phpunit": "^5.7" 243 | }, 244 | "type": "library", 245 | "extra": { 246 | "branch-alias": { 247 | "dev-master": "2.8.x-dev" 248 | } 249 | }, 250 | "autoload": { 251 | "psr-4": { 252 | "Doctrine\\Common\\": "lib/Doctrine/Common" 253 | } 254 | }, 255 | "notification-url": "https://packagist.org/downloads/", 256 | "license": [ 257 | "MIT" 258 | ], 259 | "authors": [ 260 | { 261 | "name": "Roman Borschel", 262 | "email": "roman@code-factory.org" 263 | }, 264 | { 265 | "name": "Benjamin Eberlei", 266 | "email": "kontakt@beberlei.de" 267 | }, 268 | { 269 | "name": "Guilherme Blanco", 270 | "email": "guilhermeblanco@gmail.com" 271 | }, 272 | { 273 | "name": "Jonathan Wage", 274 | "email": "jonwage@gmail.com" 275 | }, 276 | { 277 | "name": "Johannes Schmitt", 278 | "email": "schmittjoh@gmail.com" 279 | } 280 | ], 281 | "description": "Common Library for Doctrine projects", 282 | "homepage": "http://www.doctrine-project.org", 283 | "keywords": [ 284 | "annotations", 285 | "collections", 286 | "eventmanager", 287 | "persistence", 288 | "spl" 289 | ], 290 | "time": "2017-08-31 08:43:38" 291 | }, 292 | { 293 | "name": "doctrine/dbal", 294 | "version": "v2.6.2", 295 | "source": { 296 | "type": "git", 297 | "url": "https://github.com/doctrine/dbal.git", 298 | "reference": "1a4ee83a5a709555f2c6f9057a3aacf892451c7e" 299 | }, 300 | "dist": { 301 | "type": "zip", 302 | "url": "https://api.github.com/repos/doctrine/dbal/zipball/1a4ee83a5a709555f2c6f9057a3aacf892451c7e", 303 | "reference": "1a4ee83a5a709555f2c6f9057a3aacf892451c7e", 304 | "shasum": "" 305 | }, 306 | "require": { 307 | "doctrine/common": "^2.7.1", 308 | "ext-pdo": "*", 309 | "php": "^7.1" 310 | }, 311 | "require-dev": { 312 | "phpunit/phpunit": "^5.4.6", 313 | "phpunit/phpunit-mock-objects": "!=3.2.4,!=3.2.5", 314 | "symfony/console": "2.*||^3.0" 315 | }, 316 | "suggest": { 317 | "symfony/console": "For helpful console commands such as SQL execution and import of files." 318 | }, 319 | "bin": [ 320 | "bin/doctrine-dbal" 321 | ], 322 | "type": "library", 323 | "extra": { 324 | "branch-alias": { 325 | "dev-master": "2.6.x-dev" 326 | } 327 | }, 328 | "autoload": { 329 | "psr-0": { 330 | "Doctrine\\DBAL\\": "lib/" 331 | } 332 | }, 333 | "notification-url": "https://packagist.org/downloads/", 334 | "license": [ 335 | "MIT" 336 | ], 337 | "authors": [ 338 | { 339 | "name": "Roman Borschel", 340 | "email": "roman@code-factory.org" 341 | }, 342 | { 343 | "name": "Benjamin Eberlei", 344 | "email": "kontakt@beberlei.de" 345 | }, 346 | { 347 | "name": "Guilherme Blanco", 348 | "email": "guilhermeblanco@gmail.com" 349 | }, 350 | { 351 | "name": "Jonathan Wage", 352 | "email": "jonwage@gmail.com" 353 | } 354 | ], 355 | "description": "Database Abstraction Layer", 356 | "homepage": "http://www.doctrine-project.org", 357 | "keywords": [ 358 | "database", 359 | "dbal", 360 | "persistence", 361 | "queryobject" 362 | ], 363 | "time": "2017-08-28 11:02:56" 364 | }, 365 | { 366 | "name": "doctrine/inflector", 367 | "version": "v1.2.0", 368 | "source": { 369 | "type": "git", 370 | "url": "https://github.com/doctrine/inflector.git", 371 | "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462" 372 | }, 373 | "dist": { 374 | "type": "zip", 375 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462", 376 | "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462", 377 | "shasum": "" 378 | }, 379 | "require": { 380 | "php": "^7.0" 381 | }, 382 | "require-dev": { 383 | "phpunit/phpunit": "^6.2" 384 | }, 385 | "type": "library", 386 | "extra": { 387 | "branch-alias": { 388 | "dev-master": "1.2.x-dev" 389 | } 390 | }, 391 | "autoload": { 392 | "psr-4": { 393 | "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" 394 | } 395 | }, 396 | "notification-url": "https://packagist.org/downloads/", 397 | "license": [ 398 | "MIT" 399 | ], 400 | "authors": [ 401 | { 402 | "name": "Roman Borschel", 403 | "email": "roman@code-factory.org" 404 | }, 405 | { 406 | "name": "Benjamin Eberlei", 407 | "email": "kontakt@beberlei.de" 408 | }, 409 | { 410 | "name": "Guilherme Blanco", 411 | "email": "guilhermeblanco@gmail.com" 412 | }, 413 | { 414 | "name": "Jonathan Wage", 415 | "email": "jonwage@gmail.com" 416 | }, 417 | { 418 | "name": "Johannes Schmitt", 419 | "email": "schmittjoh@gmail.com" 420 | } 421 | ], 422 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 423 | "homepage": "http://www.doctrine-project.org", 424 | "keywords": [ 425 | "inflection", 426 | "pluralize", 427 | "singularize", 428 | "string" 429 | ], 430 | "time": "2017-07-22 12:18:28" 431 | }, 432 | { 433 | "name": "doctrine/lexer", 434 | "version": "v1.0.1", 435 | "source": { 436 | "type": "git", 437 | "url": "https://github.com/doctrine/lexer.git", 438 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" 439 | }, 440 | "dist": { 441 | "type": "zip", 442 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", 443 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", 444 | "shasum": "" 445 | }, 446 | "require": { 447 | "php": ">=5.3.2" 448 | }, 449 | "type": "library", 450 | "extra": { 451 | "branch-alias": { 452 | "dev-master": "1.0.x-dev" 453 | } 454 | }, 455 | "autoload": { 456 | "psr-0": { 457 | "Doctrine\\Common\\Lexer\\": "lib/" 458 | } 459 | }, 460 | "notification-url": "https://packagist.org/downloads/", 461 | "license": [ 462 | "MIT" 463 | ], 464 | "authors": [ 465 | { 466 | "name": "Roman Borschel", 467 | "email": "roman@code-factory.org" 468 | }, 469 | { 470 | "name": "Guilherme Blanco", 471 | "email": "guilhermeblanco@gmail.com" 472 | }, 473 | { 474 | "name": "Johannes Schmitt", 475 | "email": "schmittjoh@gmail.com" 476 | } 477 | ], 478 | "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", 479 | "homepage": "http://www.doctrine-project.org", 480 | "keywords": [ 481 | "lexer", 482 | "parser" 483 | ], 484 | "time": "2014-09-09 13:34:57" 485 | }, 486 | { 487 | "name": "symfony/finder", 488 | "version": "v3.3.10", 489 | "source": { 490 | "type": "git", 491 | "url": "https://github.com/symfony/finder.git", 492 | "reference": "773e19a491d97926f236942484cb541560ce862d" 493 | }, 494 | "dist": { 495 | "type": "zip", 496 | "url": "https://api.github.com/repos/symfony/finder/zipball/773e19a491d97926f236942484cb541560ce862d", 497 | "reference": "773e19a491d97926f236942484cb541560ce862d", 498 | "shasum": "" 499 | }, 500 | "require": { 501 | "php": "^5.5.9|>=7.0.8" 502 | }, 503 | "type": "library", 504 | "extra": { 505 | "branch-alias": { 506 | "dev-master": "3.3-dev" 507 | } 508 | }, 509 | "autoload": { 510 | "psr-4": { 511 | "Symfony\\Component\\Finder\\": "" 512 | }, 513 | "exclude-from-classmap": [ 514 | "/Tests/" 515 | ] 516 | }, 517 | "notification-url": "https://packagist.org/downloads/", 518 | "license": [ 519 | "MIT" 520 | ], 521 | "authors": [ 522 | { 523 | "name": "Fabien Potencier", 524 | "email": "fabien@symfony.com" 525 | }, 526 | { 527 | "name": "Symfony Community", 528 | "homepage": "https://symfony.com/contributors" 529 | } 530 | ], 531 | "description": "Symfony Finder Component", 532 | "homepage": "https://symfony.com", 533 | "time": "2017-10-02 06:42:24" 534 | }, 535 | { 536 | "name": "zircote/swagger-php", 537 | "version": "2.0.11", 538 | "source": { 539 | "type": "git", 540 | "url": "https://github.com/zircote/swagger-php.git", 541 | "reference": "d010ab67536784f8b578cb4ba7d15c906f3e1a45" 542 | }, 543 | "dist": { 544 | "type": "zip", 545 | "url": "https://api.github.com/repos/zircote/swagger-php/zipball/d010ab67536784f8b578cb4ba7d15c906f3e1a45", 546 | "reference": "d010ab67536784f8b578cb4ba7d15c906f3e1a45", 547 | "shasum": "" 548 | }, 549 | "require": { 550 | "doctrine/annotations": "*", 551 | "php": ">=5.6", 552 | "symfony/finder": "*" 553 | }, 554 | "require-dev": { 555 | "phpunit/phpunit": ">=4.8 <=5.6", 556 | "squizlabs/php_codesniffer": ">=2.7", 557 | "zendframework/zend-form": "<2.8" 558 | }, 559 | "bin": [ 560 | "bin/swagger" 561 | ], 562 | "type": "library", 563 | "autoload": { 564 | "psr-4": { 565 | "Swagger\\": "src" 566 | }, 567 | "files": [ 568 | "src/functions.php" 569 | ] 570 | }, 571 | "notification-url": "https://packagist.org/downloads/", 572 | "license": [ 573 | "Apache2" 574 | ], 575 | "authors": [ 576 | { 577 | "name": "Robert Allen", 578 | "email": "zircote@gmail.com", 579 | "homepage": "http://www.zircote.com" 580 | }, 581 | { 582 | "name": "Bob Fanger", 583 | "email": "bfanger@gmail.com", 584 | "homepage": "http://bfanger.nl" 585 | } 586 | ], 587 | "description": "Swagger-PHP - Generate interactive documentation for your RESTful API using phpdoc annotations", 588 | "homepage": "https://github.com/zircote/swagger-php/", 589 | "keywords": [ 590 | "api", 591 | "json", 592 | "rest", 593 | "service discovery" 594 | ], 595 | "time": "2017-08-16 08:32:59" 596 | } 597 | ], 598 | "packages-dev": [ 599 | { 600 | "name": "dnoegel/php-xdg-base-dir", 601 | "version": "0.1", 602 | "source": { 603 | "type": "git", 604 | "url": "https://github.com/dnoegel/php-xdg-base-dir.git", 605 | "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" 606 | }, 607 | "dist": { 608 | "type": "zip", 609 | "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", 610 | "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", 611 | "shasum": "" 612 | }, 613 | "require": { 614 | "php": ">=5.3.2" 615 | }, 616 | "require-dev": { 617 | "phpunit/phpunit": "@stable" 618 | }, 619 | "type": "project", 620 | "autoload": { 621 | "psr-4": { 622 | "XdgBaseDir\\": "src/" 623 | } 624 | }, 625 | "notification-url": "https://packagist.org/downloads/", 626 | "license": [ 627 | "MIT" 628 | ], 629 | "description": "implementation of xdg base directory specification for php", 630 | "time": "2014-10-24 07:27:01" 631 | }, 632 | { 633 | "name": "egulias/email-validator", 634 | "version": "2.1.2", 635 | "source": { 636 | "type": "git", 637 | "url": "https://github.com/egulias/EmailValidator.git", 638 | "reference": "bc31baa11ea2883e017f0a10d9722ef9d50eac1c" 639 | }, 640 | "dist": { 641 | "type": "zip", 642 | "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/bc31baa11ea2883e017f0a10d9722ef9d50eac1c", 643 | "reference": "bc31baa11ea2883e017f0a10d9722ef9d50eac1c", 644 | "shasum": "" 645 | }, 646 | "require": { 647 | "doctrine/lexer": "^1.0.1", 648 | "php": ">= 5.5" 649 | }, 650 | "require-dev": { 651 | "dominicsayers/isemail": "dev-master", 652 | "phpunit/phpunit": "^4.8.0", 653 | "satooshi/php-coveralls": "dev-master" 654 | }, 655 | "suggest": { 656 | "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" 657 | }, 658 | "type": "library", 659 | "extra": { 660 | "branch-alias": { 661 | "dev-master": "2.0.x-dev" 662 | } 663 | }, 664 | "autoload": { 665 | "psr-4": { 666 | "Egulias\\EmailValidator\\": "EmailValidator" 667 | } 668 | }, 669 | "notification-url": "https://packagist.org/downloads/", 670 | "license": [ 671 | "MIT" 672 | ], 673 | "authors": [ 674 | { 675 | "name": "Eduardo Gulias Davis" 676 | } 677 | ], 678 | "description": "A library for validating emails against several RFCs", 679 | "homepage": "https://github.com/egulias/EmailValidator", 680 | "keywords": [ 681 | "email", 682 | "emailvalidation", 683 | "emailvalidator", 684 | "validation", 685 | "validator" 686 | ], 687 | "time": "2017-01-30 22:07:36" 688 | }, 689 | { 690 | "name": "erusev/parsedown", 691 | "version": "1.6.3", 692 | "source": { 693 | "type": "git", 694 | "url": "https://github.com/erusev/parsedown.git", 695 | "reference": "728952b90a333b5c6f77f06ea9422b94b585878d" 696 | }, 697 | "dist": { 698 | "type": "zip", 699 | "url": "https://api.github.com/repos/erusev/parsedown/zipball/728952b90a333b5c6f77f06ea9422b94b585878d", 700 | "reference": "728952b90a333b5c6f77f06ea9422b94b585878d", 701 | "shasum": "" 702 | }, 703 | "require": { 704 | "php": ">=5.3.0" 705 | }, 706 | "type": "library", 707 | "autoload": { 708 | "psr-0": { 709 | "Parsedown": "" 710 | } 711 | }, 712 | "notification-url": "https://packagist.org/downloads/", 713 | "license": [ 714 | "MIT" 715 | ], 716 | "authors": [ 717 | { 718 | "name": "Emanuil Rusev", 719 | "email": "hello@erusev.com", 720 | "homepage": "http://erusev.com" 721 | } 722 | ], 723 | "description": "Parser for Markdown.", 724 | "homepage": "http://parsedown.org", 725 | "keywords": [ 726 | "markdown", 727 | "parser" 728 | ], 729 | "time": "2017-05-14 14:47:48" 730 | }, 731 | { 732 | "name": "fideloper/proxy", 733 | "version": "3.3.4", 734 | "source": { 735 | "type": "git", 736 | "url": "https://github.com/fideloper/TrustedProxy.git", 737 | "reference": "9cdf6f118af58d89764249bbcc7bb260c132924f" 738 | }, 739 | "dist": { 740 | "type": "zip", 741 | "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/9cdf6f118af58d89764249bbcc7bb260c132924f", 742 | "reference": "9cdf6f118af58d89764249bbcc7bb260c132924f", 743 | "shasum": "" 744 | }, 745 | "require": { 746 | "illuminate/contracts": "~5.0", 747 | "php": ">=5.4.0" 748 | }, 749 | "require-dev": { 750 | "illuminate/http": "~5.0", 751 | "mockery/mockery": "~0.9.3", 752 | "phpunit/phpunit": "^5.7" 753 | }, 754 | "type": "library", 755 | "extra": { 756 | "branch-alias": { 757 | "dev-master": "3.3-dev" 758 | }, 759 | "laravel": { 760 | "providers": [ 761 | "Fideloper\\Proxy\\TrustedProxyServiceProvider" 762 | ] 763 | } 764 | }, 765 | "autoload": { 766 | "psr-4": { 767 | "Fideloper\\Proxy\\": "src/" 768 | } 769 | }, 770 | "notification-url": "https://packagist.org/downloads/", 771 | "license": [ 772 | "MIT" 773 | ], 774 | "authors": [ 775 | { 776 | "name": "Chris Fidao", 777 | "email": "fideloper@gmail.com" 778 | } 779 | ], 780 | "description": "Set trusted proxies for Laravel", 781 | "keywords": [ 782 | "load balancing", 783 | "proxy", 784 | "trusted proxy" 785 | ], 786 | "time": "2017-06-15 17:19:42" 787 | }, 788 | { 789 | "name": "jakub-onderka/php-console-color", 790 | "version": "0.1", 791 | "source": { 792 | "type": "git", 793 | "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", 794 | "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1" 795 | }, 796 | "dist": { 797 | "type": "zip", 798 | "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1", 799 | "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1", 800 | "shasum": "" 801 | }, 802 | "require": { 803 | "php": ">=5.3.2" 804 | }, 805 | "require-dev": { 806 | "jakub-onderka/php-code-style": "1.0", 807 | "jakub-onderka/php-parallel-lint": "0.*", 808 | "jakub-onderka/php-var-dump-check": "0.*", 809 | "phpunit/phpunit": "3.7.*", 810 | "squizlabs/php_codesniffer": "1.*" 811 | }, 812 | "type": "library", 813 | "autoload": { 814 | "psr-0": { 815 | "JakubOnderka\\PhpConsoleColor": "src/" 816 | } 817 | }, 818 | "notification-url": "https://packagist.org/downloads/", 819 | "license": [ 820 | "BSD-2-Clause" 821 | ], 822 | "authors": [ 823 | { 824 | "name": "Jakub Onderka", 825 | "email": "jakub.onderka@gmail.com", 826 | "homepage": "http://www.acci.cz" 827 | } 828 | ], 829 | "time": "2014-04-08 15:00:19" 830 | }, 831 | { 832 | "name": "jakub-onderka/php-console-highlighter", 833 | "version": "v0.3.2", 834 | "source": { 835 | "type": "git", 836 | "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", 837 | "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5" 838 | }, 839 | "dist": { 840 | "type": "zip", 841 | "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5", 842 | "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5", 843 | "shasum": "" 844 | }, 845 | "require": { 846 | "jakub-onderka/php-console-color": "~0.1", 847 | "php": ">=5.3.0" 848 | }, 849 | "require-dev": { 850 | "jakub-onderka/php-code-style": "~1.0", 851 | "jakub-onderka/php-parallel-lint": "~0.5", 852 | "jakub-onderka/php-var-dump-check": "~0.1", 853 | "phpunit/phpunit": "~4.0", 854 | "squizlabs/php_codesniffer": "~1.5" 855 | }, 856 | "type": "library", 857 | "autoload": { 858 | "psr-0": { 859 | "JakubOnderka\\PhpConsoleHighlighter": "src/" 860 | } 861 | }, 862 | "notification-url": "https://packagist.org/downloads/", 863 | "license": [ 864 | "MIT" 865 | ], 866 | "authors": [ 867 | { 868 | "name": "Jakub Onderka", 869 | "email": "acci@acci.cz", 870 | "homepage": "http://www.acci.cz/" 871 | } 872 | ], 873 | "time": "2015-04-20 18:58:01" 874 | }, 875 | { 876 | "name": "laravel/framework", 877 | "version": "v5.5.14", 878 | "source": { 879 | "type": "git", 880 | "url": "https://github.com/laravel/framework.git", 881 | "reference": "26c700eb79e5bb55b59df2c495c9c71f16f43302" 882 | }, 883 | "dist": { 884 | "type": "zip", 885 | "url": "https://api.github.com/repos/laravel/framework/zipball/26c700eb79e5bb55b59df2c495c9c71f16f43302", 886 | "reference": "26c700eb79e5bb55b59df2c495c9c71f16f43302", 887 | "shasum": "" 888 | }, 889 | "require": { 890 | "doctrine/inflector": "~1.1", 891 | "erusev/parsedown": "~1.6", 892 | "ext-mbstring": "*", 893 | "ext-openssl": "*", 894 | "league/flysystem": "~1.0", 895 | "monolog/monolog": "~1.12", 896 | "mtdowling/cron-expression": "~1.0", 897 | "nesbot/carbon": "~1.20", 898 | "php": ">=7.0", 899 | "psr/container": "~1.0", 900 | "psr/simple-cache": "^1.0", 901 | "ramsey/uuid": "~3.0", 902 | "swiftmailer/swiftmailer": "~6.0", 903 | "symfony/console": "~3.3", 904 | "symfony/debug": "~3.3", 905 | "symfony/finder": "~3.3", 906 | "symfony/http-foundation": "~3.3", 907 | "symfony/http-kernel": "~3.3", 908 | "symfony/process": "~3.3", 909 | "symfony/routing": "~3.3", 910 | "symfony/var-dumper": "~3.3", 911 | "tijsverkoyen/css-to-inline-styles": "~2.2", 912 | "vlucas/phpdotenv": "~2.2" 913 | }, 914 | "replace": { 915 | "illuminate/auth": "self.version", 916 | "illuminate/broadcasting": "self.version", 917 | "illuminate/bus": "self.version", 918 | "illuminate/cache": "self.version", 919 | "illuminate/config": "self.version", 920 | "illuminate/console": "self.version", 921 | "illuminate/container": "self.version", 922 | "illuminate/contracts": "self.version", 923 | "illuminate/cookie": "self.version", 924 | "illuminate/database": "self.version", 925 | "illuminate/encryption": "self.version", 926 | "illuminate/events": "self.version", 927 | "illuminate/exception": "self.version", 928 | "illuminate/filesystem": "self.version", 929 | "illuminate/hashing": "self.version", 930 | "illuminate/http": "self.version", 931 | "illuminate/log": "self.version", 932 | "illuminate/mail": "self.version", 933 | "illuminate/notifications": "self.version", 934 | "illuminate/pagination": "self.version", 935 | "illuminate/pipeline": "self.version", 936 | "illuminate/queue": "self.version", 937 | "illuminate/redis": "self.version", 938 | "illuminate/routing": "self.version", 939 | "illuminate/session": "self.version", 940 | "illuminate/support": "self.version", 941 | "illuminate/translation": "self.version", 942 | "illuminate/validation": "self.version", 943 | "illuminate/view": "self.version", 944 | "tightenco/collect": "self.version" 945 | }, 946 | "require-dev": { 947 | "aws/aws-sdk-php": "~3.0", 948 | "doctrine/dbal": "~2.5", 949 | "filp/whoops": "^2.1.4", 950 | "mockery/mockery": "~1.0", 951 | "orchestra/testbench-core": "3.5.*", 952 | "pda/pheanstalk": "~3.0", 953 | "phpunit/phpunit": "~6.0", 954 | "predis/predis": "^1.1.1", 955 | "symfony/css-selector": "~3.3", 956 | "symfony/dom-crawler": "~3.3" 957 | }, 958 | "suggest": { 959 | "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", 960 | "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", 961 | "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", 962 | "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", 963 | "laravel/tinker": "Required to use the tinker console command (~1.0).", 964 | "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", 965 | "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", 966 | "nexmo/client": "Required to use the Nexmo transport (~1.0).", 967 | "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", 968 | "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", 969 | "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", 970 | "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.3).", 971 | "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).", 972 | "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." 973 | }, 974 | "type": "library", 975 | "extra": { 976 | "branch-alias": { 977 | "dev-master": "5.5-dev" 978 | } 979 | }, 980 | "autoload": { 981 | "files": [ 982 | "src/Illuminate/Foundation/helpers.php", 983 | "src/Illuminate/Support/helpers.php" 984 | ], 985 | "psr-4": { 986 | "Illuminate\\": "src/Illuminate/" 987 | } 988 | }, 989 | "notification-url": "https://packagist.org/downloads/", 990 | "license": [ 991 | "MIT" 992 | ], 993 | "authors": [ 994 | { 995 | "name": "Taylor Otwell", 996 | "email": "taylor@laravel.com" 997 | } 998 | ], 999 | "description": "The Laravel Framework.", 1000 | "homepage": "https://laravel.com", 1001 | "keywords": [ 1002 | "framework", 1003 | "laravel" 1004 | ], 1005 | "time": "2017-10-03 17:41:03" 1006 | }, 1007 | { 1008 | "name": "laravel/laravel", 1009 | "version": "v5.5.0", 1010 | "source": { 1011 | "type": "git", 1012 | "url": "https://github.com/laravel/laravel.git", 1013 | "reference": "a6c68c24c9938beef0128c3288502b8fbdf8e93d" 1014 | }, 1015 | "dist": { 1016 | "type": "zip", 1017 | "url": "https://api.github.com/repos/laravel/laravel/zipball/a6c68c24c9938beef0128c3288502b8fbdf8e93d", 1018 | "reference": "a6c68c24c9938beef0128c3288502b8fbdf8e93d", 1019 | "shasum": "" 1020 | }, 1021 | "require": { 1022 | "fideloper/proxy": "~3.3", 1023 | "laravel/framework": "5.5.*", 1024 | "laravel/tinker": "~1.0", 1025 | "php": ">=7.0.0" 1026 | }, 1027 | "require-dev": { 1028 | "filp/whoops": "~2.0", 1029 | "fzaninotto/faker": "~1.4", 1030 | "mockery/mockery": "0.9.*", 1031 | "phpunit/phpunit": "~6.0" 1032 | }, 1033 | "type": "project", 1034 | "extra": { 1035 | "laravel": { 1036 | "dont-discover": [] 1037 | } 1038 | }, 1039 | "autoload": { 1040 | "classmap": [ 1041 | "database/seeds", 1042 | "database/factories" 1043 | ], 1044 | "psr-4": { 1045 | "App\\": "app/" 1046 | } 1047 | }, 1048 | "notification-url": "https://packagist.org/downloads/", 1049 | "license": [ 1050 | "MIT" 1051 | ], 1052 | "description": "The Laravel Framework.", 1053 | "keywords": [ 1054 | "framework", 1055 | "laravel" 1056 | ], 1057 | "time": "2017-08-30 09:55:27" 1058 | }, 1059 | { 1060 | "name": "laravel/lumen", 1061 | "version": "v5.5.0", 1062 | "source": { 1063 | "type": "git", 1064 | "url": "https://github.com/laravel/lumen.git", 1065 | "reference": "03955eea4683481d9b3e34330cc803c369e741df" 1066 | }, 1067 | "dist": { 1068 | "type": "zip", 1069 | "url": "https://api.github.com/repos/laravel/lumen/zipball/03955eea4683481d9b3e34330cc803c369e741df", 1070 | "reference": "03955eea4683481d9b3e34330cc803c369e741df", 1071 | "shasum": "" 1072 | }, 1073 | "require": { 1074 | "laravel/lumen-framework": "5.5.*", 1075 | "php": ">=5.6.4", 1076 | "vlucas/phpdotenv": "~2.2" 1077 | }, 1078 | "require-dev": { 1079 | "fzaninotto/faker": "~1.4", 1080 | "mockery/mockery": "~0.9", 1081 | "phpunit/phpunit": "~6.0" 1082 | }, 1083 | "type": "project", 1084 | "autoload": { 1085 | "psr-4": { 1086 | "App\\": "app/" 1087 | } 1088 | }, 1089 | "notification-url": "https://packagist.org/downloads/", 1090 | "license": [ 1091 | "MIT" 1092 | ], 1093 | "description": "The Laravel Lumen Framework.", 1094 | "keywords": [ 1095 | "framework", 1096 | "laravel", 1097 | "lumen" 1098 | ], 1099 | "time": "2017-09-05 14:12:34" 1100 | }, 1101 | { 1102 | "name": "laravel/lumen-framework", 1103 | "version": "v5.5.1", 1104 | "source": { 1105 | "type": "git", 1106 | "url": "https://github.com/laravel/lumen-framework.git", 1107 | "reference": "d701d463925394ca2ee46e34cced55330cca7aea" 1108 | }, 1109 | "dist": { 1110 | "type": "zip", 1111 | "url": "https://api.github.com/repos/laravel/lumen-framework/zipball/d701d463925394ca2ee46e34cced55330cca7aea", 1112 | "reference": "d701d463925394ca2ee46e34cced55330cca7aea", 1113 | "shasum": "" 1114 | }, 1115 | "require": { 1116 | "illuminate/auth": "5.5.*", 1117 | "illuminate/broadcasting": "5.5.*", 1118 | "illuminate/bus": "5.5.*", 1119 | "illuminate/cache": "5.5.*", 1120 | "illuminate/config": "5.5.*", 1121 | "illuminate/container": "5.5.*", 1122 | "illuminate/contracts": "5.5.*", 1123 | "illuminate/database": "5.5.*", 1124 | "illuminate/encryption": "5.5.*", 1125 | "illuminate/events": "5.5.*", 1126 | "illuminate/filesystem": "5.5.*", 1127 | "illuminate/hashing": "5.5.*", 1128 | "illuminate/http": "5.5.*", 1129 | "illuminate/pagination": "5.5.*", 1130 | "illuminate/pipeline": "5.5.*", 1131 | "illuminate/queue": "5.5.*", 1132 | "illuminate/support": "5.5.*", 1133 | "illuminate/translation": "5.5.*", 1134 | "illuminate/validation": "5.5.*", 1135 | "illuminate/view": "5.5.*", 1136 | "monolog/monolog": "~1.12", 1137 | "mtdowling/cron-expression": "~1.0", 1138 | "nikic/fast-route": "~1.2", 1139 | "php": ">=7.0", 1140 | "symfony/http-foundation": "~3.3", 1141 | "symfony/http-kernel": "~3.3" 1142 | }, 1143 | "require-dev": { 1144 | "mockery/mockery": "~0.9", 1145 | "phpunit/phpunit": "~5.7" 1146 | }, 1147 | "suggest": { 1148 | "laravel/tinker": "Required to use the tinker console command (~1.0).", 1149 | "vlucas/phpdotenv": "Required to use .env files (~2.2)." 1150 | }, 1151 | "type": "library", 1152 | "extra": { 1153 | "branch-alias": { 1154 | "dev-master": "5.5-dev" 1155 | } 1156 | }, 1157 | "autoload": { 1158 | "psr-4": { 1159 | "Laravel\\Lumen\\": "src/" 1160 | }, 1161 | "files": [ 1162 | "src/helpers.php" 1163 | ] 1164 | }, 1165 | "notification-url": "https://packagist.org/downloads/", 1166 | "license": [ 1167 | "MIT" 1168 | ], 1169 | "authors": [ 1170 | { 1171 | "name": "Taylor Otwell", 1172 | "email": "taylorotwell@gmail.com" 1173 | } 1174 | ], 1175 | "description": "The Laravel Lumen Framework.", 1176 | "homepage": "https://lumen.laravel.com", 1177 | "keywords": [ 1178 | "framework", 1179 | "laravel", 1180 | "lumen" 1181 | ], 1182 | "time": "2017-09-25 13:08:00" 1183 | }, 1184 | { 1185 | "name": "laravel/tinker", 1186 | "version": "v1.0.2", 1187 | "source": { 1188 | "type": "git", 1189 | "url": "https://github.com/laravel/tinker.git", 1190 | "reference": "203978fd67f118902acff95925847e70b72e3daf" 1191 | }, 1192 | "dist": { 1193 | "type": "zip", 1194 | "url": "https://api.github.com/repos/laravel/tinker/zipball/203978fd67f118902acff95925847e70b72e3daf", 1195 | "reference": "203978fd67f118902acff95925847e70b72e3daf", 1196 | "shasum": "" 1197 | }, 1198 | "require": { 1199 | "illuminate/console": "~5.1", 1200 | "illuminate/contracts": "~5.1", 1201 | "illuminate/support": "~5.1", 1202 | "php": ">=5.5.9", 1203 | "psy/psysh": "0.7.*|0.8.*", 1204 | "symfony/var-dumper": "~3.0" 1205 | }, 1206 | "require-dev": { 1207 | "phpunit/phpunit": "~4.0|~5.0" 1208 | }, 1209 | "suggest": { 1210 | "illuminate/database": "The Illuminate Database package (~5.1)." 1211 | }, 1212 | "type": "library", 1213 | "extra": { 1214 | "branch-alias": { 1215 | "dev-master": "1.0-dev" 1216 | }, 1217 | "laravel": { 1218 | "providers": [ 1219 | "Laravel\\Tinker\\TinkerServiceProvider" 1220 | ] 1221 | } 1222 | }, 1223 | "autoload": { 1224 | "psr-4": { 1225 | "Laravel\\Tinker\\": "src/" 1226 | } 1227 | }, 1228 | "notification-url": "https://packagist.org/downloads/", 1229 | "license": [ 1230 | "MIT" 1231 | ], 1232 | "authors": [ 1233 | { 1234 | "name": "Taylor Otwell", 1235 | "email": "taylor@laravel.com" 1236 | } 1237 | ], 1238 | "description": "Powerful REPL for the Laravel framework.", 1239 | "keywords": [ 1240 | "REPL", 1241 | "Tinker", 1242 | "laravel", 1243 | "psysh" 1244 | ], 1245 | "time": "2017-07-13 13:11:05" 1246 | }, 1247 | { 1248 | "name": "league/flysystem", 1249 | "version": "1.0.41", 1250 | "source": { 1251 | "type": "git", 1252 | "url": "https://github.com/thephpleague/flysystem.git", 1253 | "reference": "f400aa98912c561ba625ea4065031b7a41e5a155" 1254 | }, 1255 | "dist": { 1256 | "type": "zip", 1257 | "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f400aa98912c561ba625ea4065031b7a41e5a155", 1258 | "reference": "f400aa98912c561ba625ea4065031b7a41e5a155", 1259 | "shasum": "" 1260 | }, 1261 | "require": { 1262 | "php": ">=5.5.9" 1263 | }, 1264 | "conflict": { 1265 | "league/flysystem-sftp": "<1.0.6" 1266 | }, 1267 | "require-dev": { 1268 | "ext-fileinfo": "*", 1269 | "mockery/mockery": "~0.9", 1270 | "phpspec/phpspec": "^2.2", 1271 | "phpunit/phpunit": "~4.8" 1272 | }, 1273 | "suggest": { 1274 | "ext-fileinfo": "Required for MimeType", 1275 | "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", 1276 | "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", 1277 | "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", 1278 | "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", 1279 | "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", 1280 | "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", 1281 | "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", 1282 | "league/flysystem-webdav": "Allows you to use WebDAV storage", 1283 | "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", 1284 | "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", 1285 | "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" 1286 | }, 1287 | "type": "library", 1288 | "extra": { 1289 | "branch-alias": { 1290 | "dev-master": "1.1-dev" 1291 | } 1292 | }, 1293 | "autoload": { 1294 | "psr-4": { 1295 | "League\\Flysystem\\": "src/" 1296 | } 1297 | }, 1298 | "notification-url": "https://packagist.org/downloads/", 1299 | "license": [ 1300 | "MIT" 1301 | ], 1302 | "authors": [ 1303 | { 1304 | "name": "Frank de Jonge", 1305 | "email": "info@frenky.net" 1306 | } 1307 | ], 1308 | "description": "Filesystem abstraction: Many filesystems, one API.", 1309 | "keywords": [ 1310 | "Cloud Files", 1311 | "WebDAV", 1312 | "abstraction", 1313 | "aws", 1314 | "cloud", 1315 | "copy.com", 1316 | "dropbox", 1317 | "file systems", 1318 | "files", 1319 | "filesystem", 1320 | "filesystems", 1321 | "ftp", 1322 | "rackspace", 1323 | "remote", 1324 | "s3", 1325 | "sftp", 1326 | "storage" 1327 | ], 1328 | "time": "2017-08-06 17:41:04" 1329 | }, 1330 | { 1331 | "name": "monolog/monolog", 1332 | "version": "1.23.0", 1333 | "source": { 1334 | "type": "git", 1335 | "url": "https://github.com/Seldaek/monolog.git", 1336 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" 1337 | }, 1338 | "dist": { 1339 | "type": "zip", 1340 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", 1341 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", 1342 | "shasum": "" 1343 | }, 1344 | "require": { 1345 | "php": ">=5.3.0", 1346 | "psr/log": "~1.0" 1347 | }, 1348 | "provide": { 1349 | "psr/log-implementation": "1.0.0" 1350 | }, 1351 | "require-dev": { 1352 | "aws/aws-sdk-php": "^2.4.9 || ^3.0", 1353 | "doctrine/couchdb": "~1.0@dev", 1354 | "graylog2/gelf-php": "~1.0", 1355 | "jakub-onderka/php-parallel-lint": "0.9", 1356 | "php-amqplib/php-amqplib": "~2.4", 1357 | "php-console/php-console": "^3.1.3", 1358 | "phpunit/phpunit": "~4.5", 1359 | "phpunit/phpunit-mock-objects": "2.3.0", 1360 | "ruflin/elastica": ">=0.90 <3.0", 1361 | "sentry/sentry": "^0.13", 1362 | "swiftmailer/swiftmailer": "^5.3|^6.0" 1363 | }, 1364 | "suggest": { 1365 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 1366 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 1367 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 1368 | "ext-mongo": "Allow sending log messages to a MongoDB server", 1369 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 1370 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", 1371 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", 1372 | "php-console/php-console": "Allow sending log messages to Google Chrome", 1373 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 1374 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server", 1375 | "sentry/sentry": "Allow sending log messages to a Sentry server" 1376 | }, 1377 | "type": "library", 1378 | "extra": { 1379 | "branch-alias": { 1380 | "dev-master": "2.0.x-dev" 1381 | } 1382 | }, 1383 | "autoload": { 1384 | "psr-4": { 1385 | "Monolog\\": "src/Monolog" 1386 | } 1387 | }, 1388 | "notification-url": "https://packagist.org/downloads/", 1389 | "license": [ 1390 | "MIT" 1391 | ], 1392 | "authors": [ 1393 | { 1394 | "name": "Jordi Boggiano", 1395 | "email": "j.boggiano@seld.be", 1396 | "homepage": "http://seld.be" 1397 | } 1398 | ], 1399 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 1400 | "homepage": "http://github.com/Seldaek/monolog", 1401 | "keywords": [ 1402 | "log", 1403 | "logging", 1404 | "psr-3" 1405 | ], 1406 | "time": "2017-06-19 01:22:40" 1407 | }, 1408 | { 1409 | "name": "mtdowling/cron-expression", 1410 | "version": "v1.2.0", 1411 | "source": { 1412 | "type": "git", 1413 | "url": "https://github.com/mtdowling/cron-expression.git", 1414 | "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad" 1415 | }, 1416 | "dist": { 1417 | "type": "zip", 1418 | "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad", 1419 | "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad", 1420 | "shasum": "" 1421 | }, 1422 | "require": { 1423 | "php": ">=5.3.2" 1424 | }, 1425 | "require-dev": { 1426 | "phpunit/phpunit": "~4.0|~5.0" 1427 | }, 1428 | "type": "library", 1429 | "autoload": { 1430 | "psr-4": { 1431 | "Cron\\": "src/Cron/" 1432 | } 1433 | }, 1434 | "notification-url": "https://packagist.org/downloads/", 1435 | "license": [ 1436 | "MIT" 1437 | ], 1438 | "authors": [ 1439 | { 1440 | "name": "Michael Dowling", 1441 | "email": "mtdowling@gmail.com", 1442 | "homepage": "https://github.com/mtdowling" 1443 | } 1444 | ], 1445 | "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", 1446 | "keywords": [ 1447 | "cron", 1448 | "schedule" 1449 | ], 1450 | "time": "2017-01-23 04:29:33" 1451 | }, 1452 | { 1453 | "name": "nesbot/carbon", 1454 | "version": "1.22.1", 1455 | "source": { 1456 | "type": "git", 1457 | "url": "https://github.com/briannesbitt/Carbon.git", 1458 | "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc" 1459 | }, 1460 | "dist": { 1461 | "type": "zip", 1462 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", 1463 | "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", 1464 | "shasum": "" 1465 | }, 1466 | "require": { 1467 | "php": ">=5.3.0", 1468 | "symfony/translation": "~2.6 || ~3.0" 1469 | }, 1470 | "require-dev": { 1471 | "friendsofphp/php-cs-fixer": "~2", 1472 | "phpunit/phpunit": "~4.0 || ~5.0" 1473 | }, 1474 | "type": "library", 1475 | "extra": { 1476 | "branch-alias": { 1477 | "dev-master": "1.23-dev" 1478 | } 1479 | }, 1480 | "autoload": { 1481 | "psr-4": { 1482 | "Carbon\\": "src/Carbon/" 1483 | } 1484 | }, 1485 | "notification-url": "https://packagist.org/downloads/", 1486 | "license": [ 1487 | "MIT" 1488 | ], 1489 | "authors": [ 1490 | { 1491 | "name": "Brian Nesbitt", 1492 | "email": "brian@nesbot.com", 1493 | "homepage": "http://nesbot.com" 1494 | } 1495 | ], 1496 | "description": "A simple API extension for DateTime.", 1497 | "homepage": "http://carbon.nesbot.com", 1498 | "keywords": [ 1499 | "date", 1500 | "datetime", 1501 | "time" 1502 | ], 1503 | "time": "2017-01-16 07:55:07" 1504 | }, 1505 | { 1506 | "name": "nikic/fast-route", 1507 | "version": "v1.2.0", 1508 | "source": { 1509 | "type": "git", 1510 | "url": "https://github.com/nikic/FastRoute.git", 1511 | "reference": "b5f95749071c82a8e0f58586987627054400cdf6" 1512 | }, 1513 | "dist": { 1514 | "type": "zip", 1515 | "url": "https://api.github.com/repos/nikic/FastRoute/zipball/b5f95749071c82a8e0f58586987627054400cdf6", 1516 | "reference": "b5f95749071c82a8e0f58586987627054400cdf6", 1517 | "shasum": "" 1518 | }, 1519 | "require": { 1520 | "php": ">=5.4.0" 1521 | }, 1522 | "type": "library", 1523 | "autoload": { 1524 | "psr-4": { 1525 | "FastRoute\\": "src/" 1526 | }, 1527 | "files": [ 1528 | "src/functions.php" 1529 | ] 1530 | }, 1531 | "notification-url": "https://packagist.org/downloads/", 1532 | "license": [ 1533 | "BSD-3-Clause" 1534 | ], 1535 | "authors": [ 1536 | { 1537 | "name": "Nikita Popov", 1538 | "email": "nikic@php.net" 1539 | } 1540 | ], 1541 | "description": "Fast request router for PHP", 1542 | "keywords": [ 1543 | "router", 1544 | "routing" 1545 | ], 1546 | "time": "2017-01-19 11:35:12" 1547 | }, 1548 | { 1549 | "name": "nikic/php-parser", 1550 | "version": "v3.1.1", 1551 | "source": { 1552 | "type": "git", 1553 | "url": "https://github.com/nikic/PHP-Parser.git", 1554 | "reference": "a1e8e1a30e1352f118feff1a8481066ddc2f234a" 1555 | }, 1556 | "dist": { 1557 | "type": "zip", 1558 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a1e8e1a30e1352f118feff1a8481066ddc2f234a", 1559 | "reference": "a1e8e1a30e1352f118feff1a8481066ddc2f234a", 1560 | "shasum": "" 1561 | }, 1562 | "require": { 1563 | "ext-tokenizer": "*", 1564 | "php": ">=5.5" 1565 | }, 1566 | "require-dev": { 1567 | "phpunit/phpunit": "~4.0|~5.0" 1568 | }, 1569 | "bin": [ 1570 | "bin/php-parse" 1571 | ], 1572 | "type": "library", 1573 | "extra": { 1574 | "branch-alias": { 1575 | "dev-master": "3.0-dev" 1576 | } 1577 | }, 1578 | "autoload": { 1579 | "psr-4": { 1580 | "PhpParser\\": "lib/PhpParser" 1581 | } 1582 | }, 1583 | "notification-url": "https://packagist.org/downloads/", 1584 | "license": [ 1585 | "BSD-3-Clause" 1586 | ], 1587 | "authors": [ 1588 | { 1589 | "name": "Nikita Popov" 1590 | } 1591 | ], 1592 | "description": "A PHP parser written in PHP", 1593 | "keywords": [ 1594 | "parser", 1595 | "php" 1596 | ], 1597 | "time": "2017-09-02 17:10:46" 1598 | }, 1599 | { 1600 | "name": "paragonie/random_compat", 1601 | "version": "v2.0.11", 1602 | "source": { 1603 | "type": "git", 1604 | "url": "https://github.com/paragonie/random_compat.git", 1605 | "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8" 1606 | }, 1607 | "dist": { 1608 | "type": "zip", 1609 | "url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8", 1610 | "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8", 1611 | "shasum": "" 1612 | }, 1613 | "require": { 1614 | "php": ">=5.2.0" 1615 | }, 1616 | "require-dev": { 1617 | "phpunit/phpunit": "4.*|5.*" 1618 | }, 1619 | "suggest": { 1620 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." 1621 | }, 1622 | "type": "library", 1623 | "autoload": { 1624 | "files": [ 1625 | "lib/random.php" 1626 | ] 1627 | }, 1628 | "notification-url": "https://packagist.org/downloads/", 1629 | "license": [ 1630 | "MIT" 1631 | ], 1632 | "authors": [ 1633 | { 1634 | "name": "Paragon Initiative Enterprises", 1635 | "email": "security@paragonie.com", 1636 | "homepage": "https://paragonie.com" 1637 | } 1638 | ], 1639 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", 1640 | "keywords": [ 1641 | "csprng", 1642 | "pseudorandom", 1643 | "random" 1644 | ], 1645 | "time": "2017-09-27 21:40:39" 1646 | }, 1647 | { 1648 | "name": "psr/container", 1649 | "version": "1.0.0", 1650 | "source": { 1651 | "type": "git", 1652 | "url": "https://github.com/php-fig/container.git", 1653 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 1654 | }, 1655 | "dist": { 1656 | "type": "zip", 1657 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 1658 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 1659 | "shasum": "" 1660 | }, 1661 | "require": { 1662 | "php": ">=5.3.0" 1663 | }, 1664 | "type": "library", 1665 | "extra": { 1666 | "branch-alias": { 1667 | "dev-master": "1.0.x-dev" 1668 | } 1669 | }, 1670 | "autoload": { 1671 | "psr-4": { 1672 | "Psr\\Container\\": "src/" 1673 | } 1674 | }, 1675 | "notification-url": "https://packagist.org/downloads/", 1676 | "license": [ 1677 | "MIT" 1678 | ], 1679 | "authors": [ 1680 | { 1681 | "name": "PHP-FIG", 1682 | "homepage": "http://www.php-fig.org/" 1683 | } 1684 | ], 1685 | "description": "Common Container Interface (PHP FIG PSR-11)", 1686 | "homepage": "https://github.com/php-fig/container", 1687 | "keywords": [ 1688 | "PSR-11", 1689 | "container", 1690 | "container-interface", 1691 | "container-interop", 1692 | "psr" 1693 | ], 1694 | "time": "2017-02-14 16:28:37" 1695 | }, 1696 | { 1697 | "name": "psr/log", 1698 | "version": "1.0.2", 1699 | "source": { 1700 | "type": "git", 1701 | "url": "https://github.com/php-fig/log.git", 1702 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 1703 | }, 1704 | "dist": { 1705 | "type": "zip", 1706 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 1707 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 1708 | "shasum": "" 1709 | }, 1710 | "require": { 1711 | "php": ">=5.3.0" 1712 | }, 1713 | "type": "library", 1714 | "extra": { 1715 | "branch-alias": { 1716 | "dev-master": "1.0.x-dev" 1717 | } 1718 | }, 1719 | "autoload": { 1720 | "psr-4": { 1721 | "Psr\\Log\\": "Psr/Log/" 1722 | } 1723 | }, 1724 | "notification-url": "https://packagist.org/downloads/", 1725 | "license": [ 1726 | "MIT" 1727 | ], 1728 | "authors": [ 1729 | { 1730 | "name": "PHP-FIG", 1731 | "homepage": "http://www.php-fig.org/" 1732 | } 1733 | ], 1734 | "description": "Common interface for logging libraries", 1735 | "homepage": "https://github.com/php-fig/log", 1736 | "keywords": [ 1737 | "log", 1738 | "psr", 1739 | "psr-3" 1740 | ], 1741 | "time": "2016-10-10 12:19:37" 1742 | }, 1743 | { 1744 | "name": "psr/simple-cache", 1745 | "version": "1.0.0", 1746 | "source": { 1747 | "type": "git", 1748 | "url": "https://github.com/php-fig/simple-cache.git", 1749 | "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24" 1750 | }, 1751 | "dist": { 1752 | "type": "zip", 1753 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/753fa598e8f3b9966c886fe13f370baa45ef0e24", 1754 | "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24", 1755 | "shasum": "" 1756 | }, 1757 | "require": { 1758 | "php": ">=5.3.0" 1759 | }, 1760 | "type": "library", 1761 | "extra": { 1762 | "branch-alias": { 1763 | "dev-master": "1.0.x-dev" 1764 | } 1765 | }, 1766 | "autoload": { 1767 | "psr-4": { 1768 | "Psr\\SimpleCache\\": "src/" 1769 | } 1770 | }, 1771 | "notification-url": "https://packagist.org/downloads/", 1772 | "license": [ 1773 | "MIT" 1774 | ], 1775 | "authors": [ 1776 | { 1777 | "name": "PHP-FIG", 1778 | "homepage": "http://www.php-fig.org/" 1779 | } 1780 | ], 1781 | "description": "Common interfaces for simple caching", 1782 | "keywords": [ 1783 | "cache", 1784 | "caching", 1785 | "psr", 1786 | "psr-16", 1787 | "simple-cache" 1788 | ], 1789 | "time": "2017-01-02 13:31:39" 1790 | }, 1791 | { 1792 | "name": "psy/psysh", 1793 | "version": "v0.8.11", 1794 | "source": { 1795 | "type": "git", 1796 | "url": "https://github.com/bobthecow/psysh.git", 1797 | "reference": "b193cd020e8c6b66cea6457826ae005e94e6d2c0" 1798 | }, 1799 | "dist": { 1800 | "type": "zip", 1801 | "url": "https://api.github.com/repos/bobthecow/psysh/zipball/b193cd020e8c6b66cea6457826ae005e94e6d2c0", 1802 | "reference": "b193cd020e8c6b66cea6457826ae005e94e6d2c0", 1803 | "shasum": "" 1804 | }, 1805 | "require": { 1806 | "dnoegel/php-xdg-base-dir": "0.1", 1807 | "jakub-onderka/php-console-highlighter": "0.3.*", 1808 | "nikic/php-parser": "~1.3|~2.0|~3.0", 1809 | "php": ">=5.3.9", 1810 | "symfony/console": "~2.3.10|^2.4.2|~3.0", 1811 | "symfony/var-dumper": "~2.7|~3.0" 1812 | }, 1813 | "require-dev": { 1814 | "friendsofphp/php-cs-fixer": "~1.11", 1815 | "hoa/console": "~3.16|~1.14", 1816 | "phpunit/phpunit": "~4.4|~5.0", 1817 | "symfony/finder": "~2.1|~3.0" 1818 | }, 1819 | "suggest": { 1820 | "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", 1821 | "ext-pdo-sqlite": "The doc command requires SQLite to work.", 1822 | "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", 1823 | "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", 1824 | "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." 1825 | }, 1826 | "bin": [ 1827 | "bin/psysh" 1828 | ], 1829 | "type": "library", 1830 | "extra": { 1831 | "branch-alias": { 1832 | "dev-develop": "0.8.x-dev" 1833 | } 1834 | }, 1835 | "autoload": { 1836 | "files": [ 1837 | "src/Psy/functions.php" 1838 | ], 1839 | "psr-4": { 1840 | "Psy\\": "src/Psy/" 1841 | } 1842 | }, 1843 | "notification-url": "https://packagist.org/downloads/", 1844 | "license": [ 1845 | "MIT" 1846 | ], 1847 | "authors": [ 1848 | { 1849 | "name": "Justin Hileman", 1850 | "email": "justin@justinhileman.info", 1851 | "homepage": "http://justinhileman.com" 1852 | } 1853 | ], 1854 | "description": "An interactive shell for modern PHP.", 1855 | "homepage": "http://psysh.org", 1856 | "keywords": [ 1857 | "REPL", 1858 | "console", 1859 | "interactive", 1860 | "shell" 1861 | ], 1862 | "time": "2017-07-29 19:30:02" 1863 | }, 1864 | { 1865 | "name": "ramsey/uuid", 1866 | "version": "3.7.1", 1867 | "source": { 1868 | "type": "git", 1869 | "url": "https://github.com/ramsey/uuid.git", 1870 | "reference": "45cffe822057a09e05f7bd09ec5fb88eeecd2334" 1871 | }, 1872 | "dist": { 1873 | "type": "zip", 1874 | "url": "https://api.github.com/repos/ramsey/uuid/zipball/45cffe822057a09e05f7bd09ec5fb88eeecd2334", 1875 | "reference": "45cffe822057a09e05f7bd09ec5fb88eeecd2334", 1876 | "shasum": "" 1877 | }, 1878 | "require": { 1879 | "paragonie/random_compat": "^1.0|^2.0", 1880 | "php": "^5.4 || ^7.0" 1881 | }, 1882 | "replace": { 1883 | "rhumsaa/uuid": "self.version" 1884 | }, 1885 | "require-dev": { 1886 | "apigen/apigen": "^4.1", 1887 | "codeception/aspect-mock": "^1.0 | ^2.0", 1888 | "doctrine/annotations": "~1.2.0", 1889 | "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ^2.1", 1890 | "ircmaxell/random-lib": "^1.1", 1891 | "jakub-onderka/php-parallel-lint": "^0.9.0", 1892 | "mockery/mockery": "^0.9.4", 1893 | "moontoast/math": "^1.1", 1894 | "php-mock/php-mock-phpunit": "^0.3|^1.1", 1895 | "phpunit/phpunit": "^4.7|>=5.0 <5.4", 1896 | "satooshi/php-coveralls": "^0.6.1", 1897 | "squizlabs/php_codesniffer": "^2.3" 1898 | }, 1899 | "suggest": { 1900 | "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", 1901 | "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", 1902 | "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", 1903 | "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", 1904 | "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", 1905 | "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." 1906 | }, 1907 | "type": "library", 1908 | "extra": { 1909 | "branch-alias": { 1910 | "dev-master": "3.x-dev" 1911 | } 1912 | }, 1913 | "autoload": { 1914 | "psr-4": { 1915 | "Ramsey\\Uuid\\": "src/" 1916 | } 1917 | }, 1918 | "notification-url": "https://packagist.org/downloads/", 1919 | "license": [ 1920 | "MIT" 1921 | ], 1922 | "authors": [ 1923 | { 1924 | "name": "Marijn Huizendveld", 1925 | "email": "marijn.huizendveld@gmail.com" 1926 | }, 1927 | { 1928 | "name": "Thibaud Fabre", 1929 | "email": "thibaud@aztech.io" 1930 | }, 1931 | { 1932 | "name": "Ben Ramsey", 1933 | "email": "ben@benramsey.com", 1934 | "homepage": "https://benramsey.com" 1935 | } 1936 | ], 1937 | "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", 1938 | "homepage": "https://github.com/ramsey/uuid", 1939 | "keywords": [ 1940 | "guid", 1941 | "identifier", 1942 | "uuid" 1943 | ], 1944 | "time": "2017-09-22 20:46:04" 1945 | }, 1946 | { 1947 | "name": "swiftmailer/swiftmailer", 1948 | "version": "v6.0.2", 1949 | "source": { 1950 | "type": "git", 1951 | "url": "https://github.com/swiftmailer/swiftmailer.git", 1952 | "reference": "412333372fb6c8ffb65496a2bbd7321af75733fc" 1953 | }, 1954 | "dist": { 1955 | "type": "zip", 1956 | "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/412333372fb6c8ffb65496a2bbd7321af75733fc", 1957 | "reference": "412333372fb6c8ffb65496a2bbd7321af75733fc", 1958 | "shasum": "" 1959 | }, 1960 | "require": { 1961 | "egulias/email-validator": "~2.0", 1962 | "php": ">=7.0.0" 1963 | }, 1964 | "require-dev": { 1965 | "mockery/mockery": "~0.9.1", 1966 | "symfony/phpunit-bridge": "~3.3@dev" 1967 | }, 1968 | "type": "library", 1969 | "extra": { 1970 | "branch-alias": { 1971 | "dev-master": "6.0-dev" 1972 | } 1973 | }, 1974 | "autoload": { 1975 | "files": [ 1976 | "lib/swift_required.php" 1977 | ] 1978 | }, 1979 | "notification-url": "https://packagist.org/downloads/", 1980 | "license": [ 1981 | "MIT" 1982 | ], 1983 | "authors": [ 1984 | { 1985 | "name": "Chris Corbyn" 1986 | }, 1987 | { 1988 | "name": "Fabien Potencier", 1989 | "email": "fabien@symfony.com" 1990 | } 1991 | ], 1992 | "description": "Swiftmailer, free feature-rich PHP mailer", 1993 | "homepage": "http://swiftmailer.symfony.com", 1994 | "keywords": [ 1995 | "email", 1996 | "mail", 1997 | "mailer" 1998 | ], 1999 | "time": "2017-09-30 22:39:41" 2000 | }, 2001 | { 2002 | "name": "symfony/console", 2003 | "version": "v3.3.10", 2004 | "source": { 2005 | "type": "git", 2006 | "url": "https://github.com/symfony/console.git", 2007 | "reference": "116bc56e45a8e5572e51eb43ab58c769a352366c" 2008 | }, 2009 | "dist": { 2010 | "type": "zip", 2011 | "url": "https://api.github.com/repos/symfony/console/zipball/116bc56e45a8e5572e51eb43ab58c769a352366c", 2012 | "reference": "116bc56e45a8e5572e51eb43ab58c769a352366c", 2013 | "shasum": "" 2014 | }, 2015 | "require": { 2016 | "php": "^5.5.9|>=7.0.8", 2017 | "symfony/debug": "~2.8|~3.0", 2018 | "symfony/polyfill-mbstring": "~1.0" 2019 | }, 2020 | "conflict": { 2021 | "symfony/dependency-injection": "<3.3" 2022 | }, 2023 | "require-dev": { 2024 | "psr/log": "~1.0", 2025 | "symfony/config": "~3.3", 2026 | "symfony/dependency-injection": "~3.3", 2027 | "symfony/event-dispatcher": "~2.8|~3.0", 2028 | "symfony/filesystem": "~2.8|~3.0", 2029 | "symfony/process": "~2.8|~3.0" 2030 | }, 2031 | "suggest": { 2032 | "psr/log": "For using the console logger", 2033 | "symfony/event-dispatcher": "", 2034 | "symfony/filesystem": "", 2035 | "symfony/process": "" 2036 | }, 2037 | "type": "library", 2038 | "extra": { 2039 | "branch-alias": { 2040 | "dev-master": "3.3-dev" 2041 | } 2042 | }, 2043 | "autoload": { 2044 | "psr-4": { 2045 | "Symfony\\Component\\Console\\": "" 2046 | }, 2047 | "exclude-from-classmap": [ 2048 | "/Tests/" 2049 | ] 2050 | }, 2051 | "notification-url": "https://packagist.org/downloads/", 2052 | "license": [ 2053 | "MIT" 2054 | ], 2055 | "authors": [ 2056 | { 2057 | "name": "Fabien Potencier", 2058 | "email": "fabien@symfony.com" 2059 | }, 2060 | { 2061 | "name": "Symfony Community", 2062 | "homepage": "https://symfony.com/contributors" 2063 | } 2064 | ], 2065 | "description": "Symfony Console Component", 2066 | "homepage": "https://symfony.com", 2067 | "time": "2017-10-02 06:42:24" 2068 | }, 2069 | { 2070 | "name": "symfony/css-selector", 2071 | "version": "v3.3.10", 2072 | "source": { 2073 | "type": "git", 2074 | "url": "https://github.com/symfony/css-selector.git", 2075 | "reference": "07447650225ca9223bd5c97180fe7c8267f7d332" 2076 | }, 2077 | "dist": { 2078 | "type": "zip", 2079 | "url": "https://api.github.com/repos/symfony/css-selector/zipball/07447650225ca9223bd5c97180fe7c8267f7d332", 2080 | "reference": "07447650225ca9223bd5c97180fe7c8267f7d332", 2081 | "shasum": "" 2082 | }, 2083 | "require": { 2084 | "php": "^5.5.9|>=7.0.8" 2085 | }, 2086 | "type": "library", 2087 | "extra": { 2088 | "branch-alias": { 2089 | "dev-master": "3.3-dev" 2090 | } 2091 | }, 2092 | "autoload": { 2093 | "psr-4": { 2094 | "Symfony\\Component\\CssSelector\\": "" 2095 | }, 2096 | "exclude-from-classmap": [ 2097 | "/Tests/" 2098 | ] 2099 | }, 2100 | "notification-url": "https://packagist.org/downloads/", 2101 | "license": [ 2102 | "MIT" 2103 | ], 2104 | "authors": [ 2105 | { 2106 | "name": "Jean-François Simon", 2107 | "email": "jeanfrancois.simon@sensiolabs.com" 2108 | }, 2109 | { 2110 | "name": "Fabien Potencier", 2111 | "email": "fabien@symfony.com" 2112 | }, 2113 | { 2114 | "name": "Symfony Community", 2115 | "homepage": "https://symfony.com/contributors" 2116 | } 2117 | ], 2118 | "description": "Symfony CssSelector Component", 2119 | "homepage": "https://symfony.com", 2120 | "time": "2017-10-02 06:42:24" 2121 | }, 2122 | { 2123 | "name": "symfony/debug", 2124 | "version": "v3.3.10", 2125 | "source": { 2126 | "type": "git", 2127 | "url": "https://github.com/symfony/debug.git", 2128 | "reference": "eb95d9ce8f18dcc1b3dfff00cb624c402be78ffd" 2129 | }, 2130 | "dist": { 2131 | "type": "zip", 2132 | "url": "https://api.github.com/repos/symfony/debug/zipball/eb95d9ce8f18dcc1b3dfff00cb624c402be78ffd", 2133 | "reference": "eb95d9ce8f18dcc1b3dfff00cb624c402be78ffd", 2134 | "shasum": "" 2135 | }, 2136 | "require": { 2137 | "php": "^5.5.9|>=7.0.8", 2138 | "psr/log": "~1.0" 2139 | }, 2140 | "conflict": { 2141 | "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" 2142 | }, 2143 | "require-dev": { 2144 | "symfony/http-kernel": "~2.8|~3.0" 2145 | }, 2146 | "type": "library", 2147 | "extra": { 2148 | "branch-alias": { 2149 | "dev-master": "3.3-dev" 2150 | } 2151 | }, 2152 | "autoload": { 2153 | "psr-4": { 2154 | "Symfony\\Component\\Debug\\": "" 2155 | }, 2156 | "exclude-from-classmap": [ 2157 | "/Tests/" 2158 | ] 2159 | }, 2160 | "notification-url": "https://packagist.org/downloads/", 2161 | "license": [ 2162 | "MIT" 2163 | ], 2164 | "authors": [ 2165 | { 2166 | "name": "Fabien Potencier", 2167 | "email": "fabien@symfony.com" 2168 | }, 2169 | { 2170 | "name": "Symfony Community", 2171 | "homepage": "https://symfony.com/contributors" 2172 | } 2173 | ], 2174 | "description": "Symfony Debug Component", 2175 | "homepage": "https://symfony.com", 2176 | "time": "2017-10-02 06:42:24" 2177 | }, 2178 | { 2179 | "name": "symfony/event-dispatcher", 2180 | "version": "v3.3.10", 2181 | "source": { 2182 | "type": "git", 2183 | "url": "https://github.com/symfony/event-dispatcher.git", 2184 | "reference": "d7ba037e4b8221956ab1e221c73c9e27e05dd423" 2185 | }, 2186 | "dist": { 2187 | "type": "zip", 2188 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d7ba037e4b8221956ab1e221c73c9e27e05dd423", 2189 | "reference": "d7ba037e4b8221956ab1e221c73c9e27e05dd423", 2190 | "shasum": "" 2191 | }, 2192 | "require": { 2193 | "php": "^5.5.9|>=7.0.8" 2194 | }, 2195 | "conflict": { 2196 | "symfony/dependency-injection": "<3.3" 2197 | }, 2198 | "require-dev": { 2199 | "psr/log": "~1.0", 2200 | "symfony/config": "~2.8|~3.0", 2201 | "symfony/dependency-injection": "~3.3", 2202 | "symfony/expression-language": "~2.8|~3.0", 2203 | "symfony/stopwatch": "~2.8|~3.0" 2204 | }, 2205 | "suggest": { 2206 | "symfony/dependency-injection": "", 2207 | "symfony/http-kernel": "" 2208 | }, 2209 | "type": "library", 2210 | "extra": { 2211 | "branch-alias": { 2212 | "dev-master": "3.3-dev" 2213 | } 2214 | }, 2215 | "autoload": { 2216 | "psr-4": { 2217 | "Symfony\\Component\\EventDispatcher\\": "" 2218 | }, 2219 | "exclude-from-classmap": [ 2220 | "/Tests/" 2221 | ] 2222 | }, 2223 | "notification-url": "https://packagist.org/downloads/", 2224 | "license": [ 2225 | "MIT" 2226 | ], 2227 | "authors": [ 2228 | { 2229 | "name": "Fabien Potencier", 2230 | "email": "fabien@symfony.com" 2231 | }, 2232 | { 2233 | "name": "Symfony Community", 2234 | "homepage": "https://symfony.com/contributors" 2235 | } 2236 | ], 2237 | "description": "Symfony EventDispatcher Component", 2238 | "homepage": "https://symfony.com", 2239 | "time": "2017-10-02 06:42:24" 2240 | }, 2241 | { 2242 | "name": "symfony/http-foundation", 2243 | "version": "v3.3.10", 2244 | "source": { 2245 | "type": "git", 2246 | "url": "https://github.com/symfony/http-foundation.git", 2247 | "reference": "22cf9c2b1d9f67cc8e75ae7f4eaa60e4c1eff1f8" 2248 | }, 2249 | "dist": { 2250 | "type": "zip", 2251 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/22cf9c2b1d9f67cc8e75ae7f4eaa60e4c1eff1f8", 2252 | "reference": "22cf9c2b1d9f67cc8e75ae7f4eaa60e4c1eff1f8", 2253 | "shasum": "" 2254 | }, 2255 | "require": { 2256 | "php": "^5.5.9|>=7.0.8", 2257 | "symfony/polyfill-mbstring": "~1.1" 2258 | }, 2259 | "require-dev": { 2260 | "symfony/expression-language": "~2.8|~3.0" 2261 | }, 2262 | "type": "library", 2263 | "extra": { 2264 | "branch-alias": { 2265 | "dev-master": "3.3-dev" 2266 | } 2267 | }, 2268 | "autoload": { 2269 | "psr-4": { 2270 | "Symfony\\Component\\HttpFoundation\\": "" 2271 | }, 2272 | "exclude-from-classmap": [ 2273 | "/Tests/" 2274 | ] 2275 | }, 2276 | "notification-url": "https://packagist.org/downloads/", 2277 | "license": [ 2278 | "MIT" 2279 | ], 2280 | "authors": [ 2281 | { 2282 | "name": "Fabien Potencier", 2283 | "email": "fabien@symfony.com" 2284 | }, 2285 | { 2286 | "name": "Symfony Community", 2287 | "homepage": "https://symfony.com/contributors" 2288 | } 2289 | ], 2290 | "description": "Symfony HttpFoundation Component", 2291 | "homepage": "https://symfony.com", 2292 | "time": "2017-10-05 23:10:23" 2293 | }, 2294 | { 2295 | "name": "symfony/http-kernel", 2296 | "version": "v3.3.10", 2297 | "source": { 2298 | "type": "git", 2299 | "url": "https://github.com/symfony/http-kernel.git", 2300 | "reference": "654f047a78756964bf91b619554f956517394018" 2301 | }, 2302 | "dist": { 2303 | "type": "zip", 2304 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/654f047a78756964bf91b619554f956517394018", 2305 | "reference": "654f047a78756964bf91b619554f956517394018", 2306 | "shasum": "" 2307 | }, 2308 | "require": { 2309 | "php": "^5.5.9|>=7.0.8", 2310 | "psr/log": "~1.0", 2311 | "symfony/debug": "~2.8|~3.0", 2312 | "symfony/event-dispatcher": "~2.8|~3.0", 2313 | "symfony/http-foundation": "~3.3" 2314 | }, 2315 | "conflict": { 2316 | "symfony/config": "<2.8", 2317 | "symfony/dependency-injection": "<3.3", 2318 | "symfony/var-dumper": "<3.3", 2319 | "twig/twig": "<1.34|<2.4,>=2" 2320 | }, 2321 | "require-dev": { 2322 | "psr/cache": "~1.0", 2323 | "symfony/browser-kit": "~2.8|~3.0", 2324 | "symfony/class-loader": "~2.8|~3.0", 2325 | "symfony/config": "~2.8|~3.0", 2326 | "symfony/console": "~2.8|~3.0", 2327 | "symfony/css-selector": "~2.8|~3.0", 2328 | "symfony/dependency-injection": "~3.3", 2329 | "symfony/dom-crawler": "~2.8|~3.0", 2330 | "symfony/expression-language": "~2.8|~3.0", 2331 | "symfony/finder": "~2.8|~3.0", 2332 | "symfony/process": "~2.8|~3.0", 2333 | "symfony/routing": "~2.8|~3.0", 2334 | "symfony/stopwatch": "~2.8|~3.0", 2335 | "symfony/templating": "~2.8|~3.0", 2336 | "symfony/translation": "~2.8|~3.0", 2337 | "symfony/var-dumper": "~3.3" 2338 | }, 2339 | "suggest": { 2340 | "symfony/browser-kit": "", 2341 | "symfony/class-loader": "", 2342 | "symfony/config": "", 2343 | "symfony/console": "", 2344 | "symfony/dependency-injection": "", 2345 | "symfony/finder": "", 2346 | "symfony/var-dumper": "" 2347 | }, 2348 | "type": "library", 2349 | "extra": { 2350 | "branch-alias": { 2351 | "dev-master": "3.3-dev" 2352 | } 2353 | }, 2354 | "autoload": { 2355 | "psr-4": { 2356 | "Symfony\\Component\\HttpKernel\\": "" 2357 | }, 2358 | "exclude-from-classmap": [ 2359 | "/Tests/" 2360 | ] 2361 | }, 2362 | "notification-url": "https://packagist.org/downloads/", 2363 | "license": [ 2364 | "MIT" 2365 | ], 2366 | "authors": [ 2367 | { 2368 | "name": "Fabien Potencier", 2369 | "email": "fabien@symfony.com" 2370 | }, 2371 | { 2372 | "name": "Symfony Community", 2373 | "homepage": "https://symfony.com/contributors" 2374 | } 2375 | ], 2376 | "description": "Symfony HttpKernel Component", 2377 | "homepage": "https://symfony.com", 2378 | "time": "2017-10-05 23:40:19" 2379 | }, 2380 | { 2381 | "name": "symfony/polyfill-mbstring", 2382 | "version": "v1.5.0", 2383 | "source": { 2384 | "type": "git", 2385 | "url": "https://github.com/symfony/polyfill-mbstring.git", 2386 | "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803" 2387 | }, 2388 | "dist": { 2389 | "type": "zip", 2390 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7c8fae0ac1d216eb54349e6a8baa57d515fe8803", 2391 | "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803", 2392 | "shasum": "" 2393 | }, 2394 | "require": { 2395 | "php": ">=5.3.3" 2396 | }, 2397 | "suggest": { 2398 | "ext-mbstring": "For best performance" 2399 | }, 2400 | "type": "library", 2401 | "extra": { 2402 | "branch-alias": { 2403 | "dev-master": "1.5-dev" 2404 | } 2405 | }, 2406 | "autoload": { 2407 | "psr-4": { 2408 | "Symfony\\Polyfill\\Mbstring\\": "" 2409 | }, 2410 | "files": [ 2411 | "bootstrap.php" 2412 | ] 2413 | }, 2414 | "notification-url": "https://packagist.org/downloads/", 2415 | "license": [ 2416 | "MIT" 2417 | ], 2418 | "authors": [ 2419 | { 2420 | "name": "Nicolas Grekas", 2421 | "email": "p@tchwork.com" 2422 | }, 2423 | { 2424 | "name": "Symfony Community", 2425 | "homepage": "https://symfony.com/contributors" 2426 | } 2427 | ], 2428 | "description": "Symfony polyfill for the Mbstring extension", 2429 | "homepage": "https://symfony.com", 2430 | "keywords": [ 2431 | "compatibility", 2432 | "mbstring", 2433 | "polyfill", 2434 | "portable", 2435 | "shim" 2436 | ], 2437 | "time": "2017-06-14 15:44:48" 2438 | }, 2439 | { 2440 | "name": "symfony/process", 2441 | "version": "v3.3.10", 2442 | "source": { 2443 | "type": "git", 2444 | "url": "https://github.com/symfony/process.git", 2445 | "reference": "fdf89e57a723a29baf536e288d6e232c059697b1" 2446 | }, 2447 | "dist": { 2448 | "type": "zip", 2449 | "url": "https://api.github.com/repos/symfony/process/zipball/fdf89e57a723a29baf536e288d6e232c059697b1", 2450 | "reference": "fdf89e57a723a29baf536e288d6e232c059697b1", 2451 | "shasum": "" 2452 | }, 2453 | "require": { 2454 | "php": "^5.5.9|>=7.0.8" 2455 | }, 2456 | "type": "library", 2457 | "extra": { 2458 | "branch-alias": { 2459 | "dev-master": "3.3-dev" 2460 | } 2461 | }, 2462 | "autoload": { 2463 | "psr-4": { 2464 | "Symfony\\Component\\Process\\": "" 2465 | }, 2466 | "exclude-from-classmap": [ 2467 | "/Tests/" 2468 | ] 2469 | }, 2470 | "notification-url": "https://packagist.org/downloads/", 2471 | "license": [ 2472 | "MIT" 2473 | ], 2474 | "authors": [ 2475 | { 2476 | "name": "Fabien Potencier", 2477 | "email": "fabien@symfony.com" 2478 | }, 2479 | { 2480 | "name": "Symfony Community", 2481 | "homepage": "https://symfony.com/contributors" 2482 | } 2483 | ], 2484 | "description": "Symfony Process Component", 2485 | "homepage": "https://symfony.com", 2486 | "time": "2017-10-02 06:42:24" 2487 | }, 2488 | { 2489 | "name": "symfony/routing", 2490 | "version": "v3.3.10", 2491 | "source": { 2492 | "type": "git", 2493 | "url": "https://github.com/symfony/routing.git", 2494 | "reference": "2e26fa63da029dab49bf9377b3b4f60a8fecb009" 2495 | }, 2496 | "dist": { 2497 | "type": "zip", 2498 | "url": "https://api.github.com/repos/symfony/routing/zipball/2e26fa63da029dab49bf9377b3b4f60a8fecb009", 2499 | "reference": "2e26fa63da029dab49bf9377b3b4f60a8fecb009", 2500 | "shasum": "" 2501 | }, 2502 | "require": { 2503 | "php": "^5.5.9|>=7.0.8" 2504 | }, 2505 | "conflict": { 2506 | "symfony/config": "<2.8", 2507 | "symfony/dependency-injection": "<3.3", 2508 | "symfony/yaml": "<3.3" 2509 | }, 2510 | "require-dev": { 2511 | "doctrine/annotations": "~1.0", 2512 | "doctrine/common": "~2.2", 2513 | "psr/log": "~1.0", 2514 | "symfony/config": "~2.8|~3.0", 2515 | "symfony/dependency-injection": "~3.3", 2516 | "symfony/expression-language": "~2.8|~3.0", 2517 | "symfony/http-foundation": "~2.8|~3.0", 2518 | "symfony/yaml": "~3.3" 2519 | }, 2520 | "suggest": { 2521 | "doctrine/annotations": "For using the annotation loader", 2522 | "symfony/config": "For using the all-in-one router or any loader", 2523 | "symfony/dependency-injection": "For loading routes from a service", 2524 | "symfony/expression-language": "For using expression matching", 2525 | "symfony/http-foundation": "For using a Symfony Request object", 2526 | "symfony/yaml": "For using the YAML loader" 2527 | }, 2528 | "type": "library", 2529 | "extra": { 2530 | "branch-alias": { 2531 | "dev-master": "3.3-dev" 2532 | } 2533 | }, 2534 | "autoload": { 2535 | "psr-4": { 2536 | "Symfony\\Component\\Routing\\": "" 2537 | }, 2538 | "exclude-from-classmap": [ 2539 | "/Tests/" 2540 | ] 2541 | }, 2542 | "notification-url": "https://packagist.org/downloads/", 2543 | "license": [ 2544 | "MIT" 2545 | ], 2546 | "authors": [ 2547 | { 2548 | "name": "Fabien Potencier", 2549 | "email": "fabien@symfony.com" 2550 | }, 2551 | { 2552 | "name": "Symfony Community", 2553 | "homepage": "https://symfony.com/contributors" 2554 | } 2555 | ], 2556 | "description": "Symfony Routing Component", 2557 | "homepage": "https://symfony.com", 2558 | "keywords": [ 2559 | "router", 2560 | "routing", 2561 | "uri", 2562 | "url" 2563 | ], 2564 | "time": "2017-10-02 07:25:00" 2565 | }, 2566 | { 2567 | "name": "symfony/translation", 2568 | "version": "v3.3.10", 2569 | "source": { 2570 | "type": "git", 2571 | "url": "https://github.com/symfony/translation.git", 2572 | "reference": "409bf229cd552bf7e3faa8ab7e3980b07672073f" 2573 | }, 2574 | "dist": { 2575 | "type": "zip", 2576 | "url": "https://api.github.com/repos/symfony/translation/zipball/409bf229cd552bf7e3faa8ab7e3980b07672073f", 2577 | "reference": "409bf229cd552bf7e3faa8ab7e3980b07672073f", 2578 | "shasum": "" 2579 | }, 2580 | "require": { 2581 | "php": "^5.5.9|>=7.0.8", 2582 | "symfony/polyfill-mbstring": "~1.0" 2583 | }, 2584 | "conflict": { 2585 | "symfony/config": "<2.8", 2586 | "symfony/yaml": "<3.3" 2587 | }, 2588 | "require-dev": { 2589 | "psr/log": "~1.0", 2590 | "symfony/config": "~2.8|~3.0", 2591 | "symfony/intl": "^2.8.18|^3.2.5", 2592 | "symfony/yaml": "~3.3" 2593 | }, 2594 | "suggest": { 2595 | "psr/log": "To use logging capability in translator", 2596 | "symfony/config": "", 2597 | "symfony/yaml": "" 2598 | }, 2599 | "type": "library", 2600 | "extra": { 2601 | "branch-alias": { 2602 | "dev-master": "3.3-dev" 2603 | } 2604 | }, 2605 | "autoload": { 2606 | "psr-4": { 2607 | "Symfony\\Component\\Translation\\": "" 2608 | }, 2609 | "exclude-from-classmap": [ 2610 | "/Tests/" 2611 | ] 2612 | }, 2613 | "notification-url": "https://packagist.org/downloads/", 2614 | "license": [ 2615 | "MIT" 2616 | ], 2617 | "authors": [ 2618 | { 2619 | "name": "Fabien Potencier", 2620 | "email": "fabien@symfony.com" 2621 | }, 2622 | { 2623 | "name": "Symfony Community", 2624 | "homepage": "https://symfony.com/contributors" 2625 | } 2626 | ], 2627 | "description": "Symfony Translation Component", 2628 | "homepage": "https://symfony.com", 2629 | "time": "2017-10-02 06:42:24" 2630 | }, 2631 | { 2632 | "name": "symfony/var-dumper", 2633 | "version": "v3.3.10", 2634 | "source": { 2635 | "type": "git", 2636 | "url": "https://github.com/symfony/var-dumper.git", 2637 | "reference": "03e3693a36701f1c581dd24a6d6eea2eba2113f6" 2638 | }, 2639 | "dist": { 2640 | "type": "zip", 2641 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/03e3693a36701f1c581dd24a6d6eea2eba2113f6", 2642 | "reference": "03e3693a36701f1c581dd24a6d6eea2eba2113f6", 2643 | "shasum": "" 2644 | }, 2645 | "require": { 2646 | "php": "^5.5.9|>=7.0.8", 2647 | "symfony/polyfill-mbstring": "~1.0" 2648 | }, 2649 | "conflict": { 2650 | "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" 2651 | }, 2652 | "require-dev": { 2653 | "ext-iconv": "*", 2654 | "twig/twig": "~1.34|~2.4" 2655 | }, 2656 | "suggest": { 2657 | "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", 2658 | "ext-symfony_debug": "" 2659 | }, 2660 | "type": "library", 2661 | "extra": { 2662 | "branch-alias": { 2663 | "dev-master": "3.3-dev" 2664 | } 2665 | }, 2666 | "autoload": { 2667 | "files": [ 2668 | "Resources/functions/dump.php" 2669 | ], 2670 | "psr-4": { 2671 | "Symfony\\Component\\VarDumper\\": "" 2672 | }, 2673 | "exclude-from-classmap": [ 2674 | "/Tests/" 2675 | ] 2676 | }, 2677 | "notification-url": "https://packagist.org/downloads/", 2678 | "license": [ 2679 | "MIT" 2680 | ], 2681 | "authors": [ 2682 | { 2683 | "name": "Nicolas Grekas", 2684 | "email": "p@tchwork.com" 2685 | }, 2686 | { 2687 | "name": "Symfony Community", 2688 | "homepage": "https://symfony.com/contributors" 2689 | } 2690 | ], 2691 | "description": "Symfony mechanism for exploring and dumping PHP variables", 2692 | "homepage": "https://symfony.com", 2693 | "keywords": [ 2694 | "debug", 2695 | "dump" 2696 | ], 2697 | "time": "2017-10-02 06:42:24" 2698 | }, 2699 | { 2700 | "name": "tijsverkoyen/css-to-inline-styles", 2701 | "version": "2.2.0", 2702 | "source": { 2703 | "type": "git", 2704 | "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", 2705 | "reference": "ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b" 2706 | }, 2707 | "dist": { 2708 | "type": "zip", 2709 | "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b", 2710 | "reference": "ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b", 2711 | "shasum": "" 2712 | }, 2713 | "require": { 2714 | "php": "^5.5 || ^7", 2715 | "symfony/css-selector": "^2.7|~3.0" 2716 | }, 2717 | "require-dev": { 2718 | "phpunit/phpunit": "~4.8|5.1.*" 2719 | }, 2720 | "type": "library", 2721 | "extra": { 2722 | "branch-alias": { 2723 | "dev-master": "2.0.x-dev" 2724 | } 2725 | }, 2726 | "autoload": { 2727 | "psr-4": { 2728 | "TijsVerkoyen\\CssToInlineStyles\\": "src" 2729 | } 2730 | }, 2731 | "notification-url": "https://packagist.org/downloads/", 2732 | "license": [ 2733 | "BSD-3-Clause" 2734 | ], 2735 | "authors": [ 2736 | { 2737 | "name": "Tijs Verkoyen", 2738 | "email": "css_to_inline_styles@verkoyen.eu", 2739 | "role": "Developer" 2740 | } 2741 | ], 2742 | "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.", 2743 | "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", 2744 | "time": "2016-09-20 12:50:39" 2745 | }, 2746 | { 2747 | "name": "vlucas/phpdotenv", 2748 | "version": "v2.4.0", 2749 | "source": { 2750 | "type": "git", 2751 | "url": "https://github.com/vlucas/phpdotenv.git", 2752 | "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c" 2753 | }, 2754 | "dist": { 2755 | "type": "zip", 2756 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", 2757 | "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", 2758 | "shasum": "" 2759 | }, 2760 | "require": { 2761 | "php": ">=5.3.9" 2762 | }, 2763 | "require-dev": { 2764 | "phpunit/phpunit": "^4.8 || ^5.0" 2765 | }, 2766 | "type": "library", 2767 | "extra": { 2768 | "branch-alias": { 2769 | "dev-master": "2.4-dev" 2770 | } 2771 | }, 2772 | "autoload": { 2773 | "psr-4": { 2774 | "Dotenv\\": "src/" 2775 | } 2776 | }, 2777 | "notification-url": "https://packagist.org/downloads/", 2778 | "license": [ 2779 | "BSD-3-Clause-Attribution" 2780 | ], 2781 | "authors": [ 2782 | { 2783 | "name": "Vance Lucas", 2784 | "email": "vance@vancelucas.com", 2785 | "homepage": "http://www.vancelucas.com" 2786 | } 2787 | ], 2788 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", 2789 | "keywords": [ 2790 | "dotenv", 2791 | "env", 2792 | "environment" 2793 | ], 2794 | "time": "2016-09-01 10:05:43" 2795 | } 2796 | ], 2797 | "aliases": [], 2798 | "minimum-stability": "stable", 2799 | "stability-flags": [], 2800 | "prefer-stable": false, 2801 | "prefer-lowest": false, 2802 | "platform": { 2803 | "php": ">=5.3" 2804 | }, 2805 | "platform-dev": [] 2806 | } 2807 | -------------------------------------------------------------------------------- /src/Kevupton/LaravelSwagger/DynamicHandler.php: -------------------------------------------------------------------------------- 1 | method = $method; 23 | } 24 | 25 | /** 26 | * The handler which sets all the values in the dynamic definition. 27 | * 28 | * @param String $class the Controller class name 29 | * @param LaravelSwagger $LS the LaravelSwagger instance. 30 | * @throws DynamicHandlerException 31 | */ 32 | public function handle($class, LaravelSwagger $LS) { 33 | 34 | /** 35 | ************************************* 36 | * Default Behaviour * 37 | ************************************* 38 | * 39 | * Loops through all of the linked keys 40 | */ 41 | foreach ($this->method->keys() as $key) { 42 | /** @var mixed $value the value associated with the specific key */ 43 | $value = ValueContainer::getValue($class, $key); 44 | 45 | if (is_string($value)) { //if its a string of a class 46 | //if it is a model that has been registered. 47 | if (is_subclass_of($value, Model::class) && $LS->hasModel($value)) { 48 | $value = "#/definitions/$value"; 49 | } 50 | } 51 | 52 | //if there is no value then throw an exception 53 | if (is_null($value)) { 54 | throw new DynamicHandlerException("$key value is NULL"); 55 | } 56 | 57 | $this->method->set($key, $value); 58 | } 59 | 60 | } 61 | 62 | /** 63 | * Gets the DynamicMethod associated with the Handle. 64 | * 65 | * @return DynamicMethod 66 | */ 67 | public function method() { 68 | return $this->method; 69 | } 70 | 71 | } -------------------------------------------------------------------------------- /src/Kevupton/LaravelSwagger/DynamicMethod.php: -------------------------------------------------------------------------------- 1 | method = $method; 33 | $this->data = $data; 34 | $this->links = $this->_register_links($this->data); 35 | } 36 | 37 | /** 38 | * Register the reference links from the input values. 39 | * 40 | * @param array $obj 41 | * @return array 42 | */ 43 | private function _register_links(&$obj) { 44 | $array = []; 45 | 46 | foreach ($obj as $key => &$value) { 47 | if (is_array($value) || $value instanceof AbstractAnnotation || $value instanceof \stdClass) { 48 | $temp = $this->_register_links($value); 49 | foreach ($temp as $temp_key => $temp_value) { 50 | if (isset($array[$temp_key])) { 51 | $array[$temp_key] = array_merge($array[$temp_key], $temp_value); 52 | } else { 53 | $array[$temp_key] = $temp_value; 54 | } 55 | } 56 | } else if (preg_match('/\{\{(.*?)\}\}/', $value, $matches)) { 57 | $id = $matches[1]; 58 | //add to the list of links for that specific id 59 | if (isset($array[$id])) { 60 | $array[$id][] = &$value; 61 | } else { 62 | $array[$id] = [&$value]; 63 | } 64 | } 65 | } 66 | 67 | return $array; 68 | } 69 | 70 | /** 71 | * Creates a new Dynamic GET Method 72 | * 73 | * @param array $data 74 | * @return DynamicMethod 75 | */ 76 | public static function GET(array $data = array()) { 77 | return new self(Get::class, $data); 78 | } 79 | 80 | /** 81 | * Creates a new Dynamic POST Method 82 | * 83 | * @param array $data 84 | * @return DynamicMethod 85 | */ 86 | public static function POST(array $data = array()) { 87 | return new self(Post::class, $data); 88 | } 89 | 90 | /** 91 | * Creates a new Dynamic PUT Method 92 | * 93 | * @param array $data 94 | * @return DynamicMethod 95 | */ 96 | public static function PUT(array $data = array()) { 97 | return new self(Put::class, $data); 98 | } 99 | 100 | /** 101 | * Creates a new Dynamic PATCH Method 102 | * 103 | * @param array $data 104 | * @return DynamicMethod 105 | */ 106 | public static function PATCH(array $data = array()) { 107 | return new self(Patch::class, $data); 108 | } 109 | 110 | /** 111 | * Creates a new Dynamic DELETE Method 112 | * 113 | * @param array $data 114 | * @return DynamicMethod 115 | */ 116 | public static function DELETE(array $data = array()) { 117 | return new self(Delete::class, $data); 118 | } 119 | 120 | /** 121 | * Creates a new Dynamic HEAD Method 122 | * 123 | * @param array $data 124 | * @return DynamicMethod 125 | */ 126 | public static function HEAD(array $data = array()) { 127 | return new self(Head::class, $data); 128 | } 129 | 130 | /** 131 | * Creates a new Dynamic OPTIONS Method 132 | * 133 | * @param array $data 134 | * @return DynamicMethod 135 | */ 136 | public static function OPTIONS(array $data = array()) { 137 | return new self(Options::class, $data); 138 | } 139 | 140 | /** 141 | * Sets the value of key. 142 | * 143 | * @param $key 144 | * @param $value 145 | */ 146 | public function set($key, $value) { 147 | 148 | foreach ($this->links[$key] as &$current) { 149 | //if the string is more than the specified key then do a replace 150 | if (strlen($current) > (strlen($key) + 4)) { 151 | $value = str_replace("{{".$key."}}","$value", $current); 152 | } 153 | $current = $value; 154 | } 155 | 156 | } 157 | 158 | /** 159 | * Gets all the keys in the links array 160 | * 161 | * @return array 162 | */ 163 | public function keys() 164 | { 165 | return array_keys($this->links); 166 | } 167 | 168 | 169 | /** 170 | * Makes the Method 171 | * 172 | * @param Context $context 173 | * @return Operation 174 | */ 175 | public function make(Context $context) { 176 | $class = $this->method; 177 | $this->_make_parent($this->data, $context); 178 | return new $class($this->data); 179 | } 180 | 181 | /** 182 | * Loop through each value and assign the context to the parent. 183 | * 184 | * @param $array 185 | * @param Context $context 186 | */ 187 | private function _make_parent(&$array, Context $context) { 188 | foreach ($array as $key => $value) { 189 | if ($value instanceof AbstractAnnotation) { 190 | $child = new Context(['nested'=>true, 'class' => $context->class], $context); 191 | $value->_context = $child; 192 | $this->_make_parent($value, $child); 193 | } else if (is_array($value)) { 194 | $this->_make_parent($value, $context); 195 | } 196 | } 197 | } 198 | 199 | /** 200 | * Sets or gets the data that is to be inserted. 201 | * 202 | * @param string $key 203 | * @param mixed $value 204 | * @return mixed|null 205 | */ 206 | public function data($key, $value = null) { 207 | if (is_null($value)) { 208 | return isset($this->data[$key])? $this->data[$key]: null; 209 | } else { 210 | return $this->data[$key] = $value; 211 | } 212 | } 213 | } -------------------------------------------------------------------------------- /src/Kevupton/LaravelSwagger/Exceptions/DynamicHandlerException.php: -------------------------------------------------------------------------------- 1 | models = $models; 30 | } 31 | 32 | /** 33 | * The handler which is called on process 34 | * 35 | * @param Analysis $analysis 36 | */ 37 | public function __invoke(Analysis $analysis) 38 | { 39 | $this->load_models($analysis); 40 | $this->load_controllers($analysis); 41 | $this->add_host($analysis); 42 | } 43 | 44 | /** 45 | * Adds the Host to the Swagger annotation 46 | * 47 | * @param Analysis $analysis 48 | */ 49 | private function add_host(Analysis $analysis) 50 | { 51 | /** @var Swagger[] $annotation */ 52 | $annotation = $analysis->getAnnotationsOfType(Swagger::class); 53 | 54 | if (isset($annotation[0])) { 55 | if ($annotation[0]->host != '') { 56 | $annotation[0]->host = preg_replace('(^https?://)', '', $annotation[0]->host); 57 | } else { 58 | $annotation[0]->host = preg_replace('(^https?://)', '', url('/')); 59 | } 60 | } 61 | } 62 | 63 | /** 64 | * Loads the Controllers into the Swagger JSON 65 | * 66 | * @param Analysis $analysis 67 | */ 68 | private function load_controllers(Analysis $analysis) 69 | { 70 | 71 | foreach ($this->getRoutes() as $route) { 72 | //gets the controller 73 | if (isset($route['action']['uses']) && is_string($route['action']['uses'])) { 74 | $controller = explode('@', $route['action']['uses']); 75 | $controller = $controller[0]; 76 | 77 | list($methods, $routes, $default_handler) = MethodContainer::loadData($controller, $route['action']); 78 | 79 | $name = isset($route['action']['as']) ? $route['action']['as'] : null; 80 | 81 | //Calculate the direct route first 82 | $handler = $this->get_route_val($routes, $name, $default_handler); 83 | 84 | if (!is_null($handler)) { 85 | $handler->handle($controller, $this); 86 | 87 | $handler->method()->data('path', $route['uri']); 88 | 89 | $context = new Context(['class' => $controller]); 90 | 91 | $analysis->addAnnotation($handler->method()->make($context), $context); 92 | } 93 | } 94 | } 95 | } 96 | 97 | /** 98 | * Gets all the routes that are registered 99 | * 100 | * @return array 101 | */ 102 | private function getRoutes() 103 | { 104 | 105 | if ($this->isLumen()) { 106 | /** @var Application $app */ 107 | $app = app(); 108 | 109 | return $app->router->getRoutes(); 110 | 111 | } else { 112 | $routes = \Route::getRoutes(); 113 | 114 | $array = []; 115 | 116 | /** @var Route $route */ 117 | foreach ($routes as $route) { 118 | $array[] = [ 119 | 'method' => $route->methods, 120 | 'uri' => $route->uri, 121 | 'action' => $route->action, 122 | ]; 123 | } 124 | 125 | return $array; 126 | } 127 | 128 | } 129 | 130 | /** 131 | * Checks whether or not the application is Laravel 132 | * 133 | * @return bool 134 | */ 135 | private function isLaravel() 136 | { 137 | return !$this->isLumen(); 138 | } 139 | 140 | /** 141 | * Checks whether or not the application is Lumen 142 | * 143 | * @return bool 144 | */ 145 | private function isLumen() 146 | { 147 | return class_exists('Laravel\Lumen\Application'); 148 | } 149 | 150 | /** 151 | * Gets the DynamicMethod for the specific route value. 152 | * 153 | * @param DynamicMethod[] $routes 154 | * @param string $name 155 | * @param string $handler 156 | * @return DynamicHandler|null 157 | * @throws DynamicMethodException 158 | */ 159 | private function get_route_val($routes, $name, $handler) 160 | { 161 | 162 | if (!is_string($name)) { 163 | return null; 164 | } 165 | 166 | /** 167 | * @var string $route 168 | * @var DynamicMethod|DynamicHandler $dynamic_method 169 | */ 170 | foreach ($routes as $route => $value) { 171 | if (preg_match('/'.preg_quote($route, '/').'$/', $name)) { 172 | if ($value instanceof DynamicMethod) { 173 | return new $handler($value); 174 | } else if ($value instanceof DynamicHandler) { 175 | return $value; 176 | } else { 177 | throw new DynamicMethodException("Invalid Value for $route in $name"); 178 | } 179 | } 180 | } 181 | 182 | return null; 183 | } 184 | 185 | /** 186 | * Loads the Laravel Models into the Swagger JSON 187 | * 188 | * @param Analysis $analysis 189 | */ 190 | private function load_models(Analysis $analysis) 191 | { 192 | 193 | foreach ($this->models as $model) { 194 | /** @var Model $model */ 195 | $obj = new $model(); 196 | 197 | if ($obj instanceof Model) { //check to make sure it is a model 198 | $reflection = new ReflectionClass($obj); 199 | $with = $reflection->getProperty('with'); 200 | $with->setAccessible(true); 201 | 202 | $list = Schema::getColumnListing($obj->getTable()); 203 | $list = array_diff($list, $obj->getHidden()); 204 | 205 | $properties = []; 206 | 207 | foreach ($list as $item) { 208 | 209 | $data = [ 210 | 'property' => $item, 211 | 'type' => $this->get_type($obj->getTable(), $item), 212 | ]; 213 | 214 | $default = $this->get_default($obj->getTable(), $item); 215 | if (!is_null($default)) { 216 | $data['default'] = $default; 217 | } 218 | 219 | $properties[] = new Property($data); 220 | } 221 | 222 | foreach ($with->getValue($obj) as $item) { 223 | $class = get_class($obj->{$item}()->getModel()); 224 | $properties[] = new Property([ 225 | 'property' => $item, 226 | 'ref' => '#/definitions/'.$class, 227 | ]); 228 | } 229 | 230 | $definition = new Definition([ 231 | 'definition' => $model, 232 | 'properties' => $properties, 233 | ]); 234 | 235 | $analysis->addAnnotation($definition, new Context(['-', $model])); 236 | } 237 | } 238 | } 239 | 240 | /** 241 | * Gets the type of the column from the database. 242 | * 243 | * @param $table 244 | * @param $column 245 | * @return string 246 | */ 247 | private function get_type($table, $column) 248 | { 249 | return DB::connection()->getDoctrineColumn($table, $column)->getType()->getName(); 250 | } 251 | 252 | /** 253 | * Gets the default value for a column. 254 | * 255 | * @param $table 256 | * @param $column 257 | * @return null|string 258 | */ 259 | private function get_default($table, $column) 260 | { 261 | return DB::connection()->getDoctrineColumn($table, $column)->getDefault(); 262 | } 263 | 264 | /** 265 | * Gets the models name of the last model. 266 | * 267 | * @param $model 268 | * @return string 269 | */ 270 | private function getModelName($model) 271 | { 272 | return last(explode('\\', $model)); 273 | } 274 | 275 | /** 276 | * Checks if the model exists in the array. 277 | * 278 | * @param $model 279 | * @return bool 280 | */ 281 | public function hasModel($model) 282 | { 283 | return in_array($model, $this->models); 284 | } 285 | } 286 | -------------------------------------------------------------------------------- /src/Kevupton/LaravelSwagger/MethodContainer.php: -------------------------------------------------------------------------------- 1 | $method(); 113 | } else if (isset($controller::$$cont_name) && is_string($controller::$$cont_name)) { 114 | $class = $controller::$$cont_name; 115 | return (new $class())->$method(); 116 | } else if (method_exists($controller, $method)) { //check if swagger methods exist on controller 117 | return $controller::$method(); 118 | } 119 | 120 | return []; 121 | } 122 | 123 | } -------------------------------------------------------------------------------- /src/Kevupton/LaravelSwagger/ValueContainer.php: -------------------------------------------------------------------------------- 1 | $key)) { 27 | return $cont->$key; 28 | } 29 | } 30 | 31 | return null; 32 | 33 | } 34 | 35 | } -------------------------------------------------------------------------------- /src/Kevupton/LaravelSwagger/functions.php: -------------------------------------------------------------------------------- 1 |