├── .gitignore ├── README.md ├── composer.json ├── composer.lock ├── phpunit.xml.dist ├── src ├── BaseFilters.php └── Traits │ └── FilterableTrait.php └── tests ├── BaseFiltersTest.php ├── FakeBaseFilters.php ├── FilterableTraitTest.php ├── SubjectTrait.php └── bootstrap.php /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/hot 3 | /public/storage 4 | /storage/*.key 5 | /storage 6 | /bootstrap/cache 7 | /*/*/source/_tmp 8 | /vendor 9 | /report 10 | /.idea 11 | /.vscode 12 | /.vagrant 13 | Homestead.json 14 | Homestead.yaml 15 | npm-debug.log 16 | yarn-error.log 17 | .env -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Laravel Filters 2 | 3 | Imagine that ... 4 | 5 | ## Filter with Query String 6 | 7 | This URL: 8 | 9 | ```text 10 | /users?name=myk&age=21&company=rick-and-morty&sort_age=desc 11 | ``` 12 | 13 | automatically knew to filter the DB query by responding with users that have their 14 | 15 | - name containing `myk` 16 | - age as `21` 17 | - company name containing `rick-and-morty` 18 | 19 | and order the records by age in descending order, all without you having to write boilerplate code 😱. 20 | 21 | ## Load Relationships 22 | 23 | Or that you could automatically include a relationship for a model by adding a `?with_relationship` to the URL 😍, like: 24 | 25 | ![laravel-filters](https://user-images.githubusercontent.com/11996508/43687436-08f61c1c-98cd-11e8-962b-cd32c2d3bfb3.gif) 26 | 27 | Hold your horses 😜, I'm about to show you how. 28 | 29 | ## Setup 30 | 31 | - Run `composer require mykeels/laravel-filters` in your terminal to pull the package in. 32 | 33 | ## Usage 34 | 35 | - In the Model class you wish to make filterable, use the `FilterableTrait` like: 36 | 37 | ```php 38 | builder->where('users.name', 'LIKE', "%$term%"); 63 | } 64 | 65 | public function company($term) { 66 | return $this->builder->whereHas('company', function ($query) use ($term) { 67 | return $query->where('name', 'LIKE', "%$term%"); 68 | }); 69 | } 70 | 71 | public function age($term) { 72 | $year = Carbon::now()->subYear($age)->format('Y'); 73 | return $this->builder->where('dob', '>=', "$year-01-01")->where('dob', '<=', "$year-12-31"); 74 | } 75 | 76 | public function sort_age($type = null) { 77 | return $this->builder->orderBy('dob', (!$type || $type == 'asc') ? 'desc' : 'asc'); 78 | } 79 | } 80 | ``` 81 | 82 | > Note how the name of each method maps to the key of each query string in `/users?name=myk&age=21&company=rick-and-morty&sort_age=desc`, and the parameters of the methods map to the values. 83 | 84 | - Inject `UserFilters` in your controller 😍, like: 85 | 86 | ```php 87 | get(); 99 | } 100 | } 101 | ``` 102 | 103 | That's all! 💃 104 | 105 | Now, you can execute your app, and use variations of the query strings that your filters allow for. 🔥🔥🔥 106 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mykeels/laravel-filters", 3 | "description": "Provides a composable interface for data filtering with query strings", 4 | "license": "MIT", 5 | "authors": [ 6 | { 7 | "name": "Ikechi Michael", 8 | "email": "mykehell123@gmail.com" 9 | } 10 | ], 11 | "require": { 12 | "illuminate/support": "^5.6|^6.0", 13 | "illuminate/http": "^5.6|^6.0", 14 | "illuminate/database": "^5.6|^6.0" 15 | }, 16 | "extra": { 17 | "laravel": { 18 | "providers": [ 19 | 20 | ] 21 | } 22 | }, 23 | "autoload": { 24 | "psr-4": { 25 | "Mykeels\\Filters\\": "src/" 26 | } 27 | }, 28 | "autoload-dev": { 29 | "psr-4": { 30 | "Mykeels\\Filters\\Tests\\": "tests/" 31 | } 32 | }, 33 | "require-dev": { 34 | "squizlabs/php_codesniffer": "^3.3", 35 | "phpstan/phpstan": "^0.10.3", 36 | "phpunit/phpunit": "^7.3" 37 | }, 38 | "scripts": { 39 | "lint": "./vendor/bin/phpcs ./src/ --standard=PSR2", 40 | "fix-lint": "./vendor/bin/phpcbf ./src/ --standard=PSR2", 41 | "analyse": "./vendor/bin/phpstan analyse src -l 0", 42 | "test": "./vendor/bin/phpunit" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "27aefd3e41210235458fd66bb813baab", 8 | "packages": [ 9 | { 10 | "name": "doctrine/inflector", 11 | "version": "v1.3.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/doctrine/inflector.git", 15 | "reference": "5527a48b7313d15261292c149e55e26eae771b0a" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", 20 | "reference": "5527a48b7313d15261292c149e55e26eae771b0a", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "^7.1" 25 | }, 26 | "require-dev": { 27 | "phpunit/phpunit": "^6.2" 28 | }, 29 | "type": "library", 30 | "extra": { 31 | "branch-alias": { 32 | "dev-master": "1.3.x-dev" 33 | } 34 | }, 35 | "autoload": { 36 | "psr-4": { 37 | "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" 38 | } 39 | }, 40 | "notification-url": "https://packagist.org/downloads/", 41 | "license": [ 42 | "MIT" 43 | ], 44 | "authors": [ 45 | { 46 | "name": "Roman Borschel", 47 | "email": "roman@code-factory.org" 48 | }, 49 | { 50 | "name": "Benjamin Eberlei", 51 | "email": "kontakt@beberlei.de" 52 | }, 53 | { 54 | "name": "Guilherme Blanco", 55 | "email": "guilhermeblanco@gmail.com" 56 | }, 57 | { 58 | "name": "Jonathan Wage", 59 | "email": "jonwage@gmail.com" 60 | }, 61 | { 62 | "name": "Johannes Schmitt", 63 | "email": "schmittjoh@gmail.com" 64 | } 65 | ], 66 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 67 | "homepage": "http://www.doctrine-project.org", 68 | "keywords": [ 69 | "inflection", 70 | "pluralize", 71 | "singularize", 72 | "string" 73 | ], 74 | "time": "2018-01-09T20:05:19+00:00" 75 | }, 76 | { 77 | "name": "illuminate/container", 78 | "version": "v6.0.2", 79 | "source": { 80 | "type": "git", 81 | "url": "https://github.com/illuminate/container.git", 82 | "reference": "ae5b4a82e5ae13f6779cbda9cea50d9761a7ca17" 83 | }, 84 | "dist": { 85 | "type": "zip", 86 | "url": "https://api.github.com/repos/illuminate/container/zipball/ae5b4a82e5ae13f6779cbda9cea50d9761a7ca17", 87 | "reference": "ae5b4a82e5ae13f6779cbda9cea50d9761a7ca17", 88 | "shasum": "" 89 | }, 90 | "require": { 91 | "illuminate/contracts": "^6.0", 92 | "illuminate/support": "^6.0", 93 | "php": "^7.2", 94 | "psr/container": "^1.0" 95 | }, 96 | "type": "library", 97 | "extra": { 98 | "branch-alias": { 99 | "dev-master": "6.0-dev" 100 | } 101 | }, 102 | "autoload": { 103 | "psr-4": { 104 | "Illuminate\\Container\\": "" 105 | } 106 | }, 107 | "notification-url": "https://packagist.org/downloads/", 108 | "license": [ 109 | "MIT" 110 | ], 111 | "authors": [ 112 | { 113 | "name": "Taylor Otwell", 114 | "email": "taylor@laravel.com" 115 | } 116 | ], 117 | "description": "The Illuminate Container package.", 118 | "homepage": "https://laravel.com", 119 | "time": "2019-08-20T14:05:59+00:00" 120 | }, 121 | { 122 | "name": "illuminate/contracts", 123 | "version": "v6.0.2", 124 | "source": { 125 | "type": "git", 126 | "url": "https://github.com/illuminate/contracts.git", 127 | "reference": "e5d7a6daa4beab3ec7c2d24679e213883a5fc09d" 128 | }, 129 | "dist": { 130 | "type": "zip", 131 | "url": "https://api.github.com/repos/illuminate/contracts/zipball/e5d7a6daa4beab3ec7c2d24679e213883a5fc09d", 132 | "reference": "e5d7a6daa4beab3ec7c2d24679e213883a5fc09d", 133 | "shasum": "" 134 | }, 135 | "require": { 136 | "php": "^7.2", 137 | "psr/container": "^1.0", 138 | "psr/simple-cache": "^1.0" 139 | }, 140 | "type": "library", 141 | "extra": { 142 | "branch-alias": { 143 | "dev-master": "6.0-dev" 144 | } 145 | }, 146 | "autoload": { 147 | "psr-4": { 148 | "Illuminate\\Contracts\\": "" 149 | } 150 | }, 151 | "notification-url": "https://packagist.org/downloads/", 152 | "license": [ 153 | "MIT" 154 | ], 155 | "authors": [ 156 | { 157 | "name": "Taylor Otwell", 158 | "email": "taylor@laravel.com" 159 | } 160 | ], 161 | "description": "The Illuminate Contracts package.", 162 | "homepage": "https://laravel.com", 163 | "time": "2019-08-24T15:24:36+00:00" 164 | }, 165 | { 166 | "name": "illuminate/database", 167 | "version": "v6.0.2", 168 | "source": { 169 | "type": "git", 170 | "url": "https://github.com/illuminate/database.git", 171 | "reference": "9a74afd03af4055090e41e7fa0ab40bc284b59e3" 172 | }, 173 | "dist": { 174 | "type": "zip", 175 | "url": "https://api.github.com/repos/illuminate/database/zipball/9a74afd03af4055090e41e7fa0ab40bc284b59e3", 176 | "reference": "9a74afd03af4055090e41e7fa0ab40bc284b59e3", 177 | "shasum": "" 178 | }, 179 | "require": { 180 | "ext-json": "*", 181 | "illuminate/container": "^6.0", 182 | "illuminate/contracts": "^6.0", 183 | "illuminate/support": "^6.0", 184 | "php": "^7.2" 185 | }, 186 | "suggest": { 187 | "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", 188 | "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", 189 | "illuminate/console": "Required to use the database commands (^6.0).", 190 | "illuminate/events": "Required to use the observers with Eloquent (^6.0).", 191 | "illuminate/filesystem": "Required to use the migrations (^6.0).", 192 | "illuminate/pagination": "Required to paginate the result set (^6.0)." 193 | }, 194 | "type": "library", 195 | "extra": { 196 | "branch-alias": { 197 | "dev-master": "6.0-dev" 198 | } 199 | }, 200 | "autoload": { 201 | "psr-4": { 202 | "Illuminate\\Database\\": "" 203 | } 204 | }, 205 | "notification-url": "https://packagist.org/downloads/", 206 | "license": [ 207 | "MIT" 208 | ], 209 | "authors": [ 210 | { 211 | "name": "Taylor Otwell", 212 | "email": "taylor@laravel.com" 213 | } 214 | ], 215 | "description": "The Illuminate Database package.", 216 | "homepage": "https://laravel.com", 217 | "keywords": [ 218 | "database", 219 | "laravel", 220 | "orm", 221 | "sql" 222 | ], 223 | "time": "2019-09-06T13:52:27+00:00" 224 | }, 225 | { 226 | "name": "illuminate/filesystem", 227 | "version": "v6.0.2", 228 | "source": { 229 | "type": "git", 230 | "url": "https://github.com/illuminate/filesystem.git", 231 | "reference": "8d2bd23199afacc0c23fb520970158db5f9653b2" 232 | }, 233 | "dist": { 234 | "type": "zip", 235 | "url": "https://api.github.com/repos/illuminate/filesystem/zipball/8d2bd23199afacc0c23fb520970158db5f9653b2", 236 | "reference": "8d2bd23199afacc0c23fb520970158db5f9653b2", 237 | "shasum": "" 238 | }, 239 | "require": { 240 | "illuminate/contracts": "^6.0", 241 | "illuminate/support": "^6.0", 242 | "php": "^7.2", 243 | "symfony/finder": "^4.3.4" 244 | }, 245 | "suggest": { 246 | "league/flysystem": "Required to use the Flysystem local and FTP drivers (^1.0).", 247 | "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", 248 | "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", 249 | "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0)." 250 | }, 251 | "type": "library", 252 | "extra": { 253 | "branch-alias": { 254 | "dev-master": "6.0-dev" 255 | } 256 | }, 257 | "autoload": { 258 | "psr-4": { 259 | "Illuminate\\Filesystem\\": "" 260 | } 261 | }, 262 | "notification-url": "https://packagist.org/downloads/", 263 | "license": [ 264 | "MIT" 265 | ], 266 | "authors": [ 267 | { 268 | "name": "Taylor Otwell", 269 | "email": "taylor@laravel.com" 270 | } 271 | ], 272 | "description": "The Illuminate Filesystem package.", 273 | "homepage": "https://laravel.com", 274 | "time": "2019-09-03T12:53:11+00:00" 275 | }, 276 | { 277 | "name": "illuminate/http", 278 | "version": "v6.0.2", 279 | "source": { 280 | "type": "git", 281 | "url": "https://github.com/illuminate/http.git", 282 | "reference": "c9fc2bda67f34471a63b608768c4ea188a25299e" 283 | }, 284 | "dist": { 285 | "type": "zip", 286 | "url": "https://api.github.com/repos/illuminate/http/zipball/c9fc2bda67f34471a63b608768c4ea188a25299e", 287 | "reference": "c9fc2bda67f34471a63b608768c4ea188a25299e", 288 | "shasum": "" 289 | }, 290 | "require": { 291 | "ext-json": "*", 292 | "illuminate/session": "^6.0", 293 | "illuminate/support": "^6.0", 294 | "php": "^7.2", 295 | "symfony/http-foundation": "^4.3.4", 296 | "symfony/http-kernel": "^4.3.4" 297 | }, 298 | "suggest": { 299 | "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image()." 300 | }, 301 | "type": "library", 302 | "extra": { 303 | "branch-alias": { 304 | "dev-master": "6.0-dev" 305 | } 306 | }, 307 | "autoload": { 308 | "psr-4": { 309 | "Illuminate\\Http\\": "" 310 | } 311 | }, 312 | "notification-url": "https://packagist.org/downloads/", 313 | "license": [ 314 | "MIT" 315 | ], 316 | "authors": [ 317 | { 318 | "name": "Taylor Otwell", 319 | "email": "taylor@laravel.com" 320 | } 321 | ], 322 | "description": "The Illuminate Http package.", 323 | "homepage": "https://laravel.com", 324 | "time": "2019-09-03T16:39:13+00:00" 325 | }, 326 | { 327 | "name": "illuminate/session", 328 | "version": "v6.0.2", 329 | "source": { 330 | "type": "git", 331 | "url": "https://github.com/illuminate/session.git", 332 | "reference": "000a81386cfdc346da01c733195155473f94255a" 333 | }, 334 | "dist": { 335 | "type": "zip", 336 | "url": "https://api.github.com/repos/illuminate/session/zipball/000a81386cfdc346da01c733195155473f94255a", 337 | "reference": "000a81386cfdc346da01c733195155473f94255a", 338 | "shasum": "" 339 | }, 340 | "require": { 341 | "ext-json": "*", 342 | "illuminate/contracts": "^6.0", 343 | "illuminate/filesystem": "^6.0", 344 | "illuminate/support": "^6.0", 345 | "php": "^7.2", 346 | "symfony/finder": "^4.3.4", 347 | "symfony/http-foundation": "^4.3.4" 348 | }, 349 | "suggest": { 350 | "illuminate/console": "Required to use the session:table command (^6.0)." 351 | }, 352 | "type": "library", 353 | "extra": { 354 | "branch-alias": { 355 | "dev-master": "6.0-dev" 356 | } 357 | }, 358 | "autoload": { 359 | "psr-4": { 360 | "Illuminate\\Session\\": "" 361 | } 362 | }, 363 | "notification-url": "https://packagist.org/downloads/", 364 | "license": [ 365 | "MIT" 366 | ], 367 | "authors": [ 368 | { 369 | "name": "Taylor Otwell", 370 | "email": "taylor@laravel.com" 371 | } 372 | ], 373 | "description": "The Illuminate Session package.", 374 | "homepage": "https://laravel.com", 375 | "time": "2019-09-03T12:53:11+00:00" 376 | }, 377 | { 378 | "name": "illuminate/support", 379 | "version": "v6.0.2", 380 | "source": { 381 | "type": "git", 382 | "url": "https://github.com/illuminate/support.git", 383 | "reference": "64669342920e11fb91bd1af838e3d69dac525eae" 384 | }, 385 | "dist": { 386 | "type": "zip", 387 | "url": "https://api.github.com/repos/illuminate/support/zipball/64669342920e11fb91bd1af838e3d69dac525eae", 388 | "reference": "64669342920e11fb91bd1af838e3d69dac525eae", 389 | "shasum": "" 390 | }, 391 | "require": { 392 | "doctrine/inflector": "^1.1", 393 | "ext-json": "*", 394 | "ext-mbstring": "*", 395 | "illuminate/contracts": "^6.0", 396 | "nesbot/carbon": "^2.0", 397 | "php": "^7.2" 398 | }, 399 | "conflict": { 400 | "tightenco/collect": "<5.5.33" 401 | }, 402 | "suggest": { 403 | "illuminate/filesystem": "Required to use the composer class (^6.0).", 404 | "moontoast/math": "Required to use ordered UUIDs (^1.1).", 405 | "ramsey/uuid": "Required to use Str::uuid() (^3.7).", 406 | "symfony/process": "Required to use the composer class (^4.3.4).", 407 | "symfony/var-dumper": "Required to use the dd function (^4.3.4).", 408 | "vlucas/phpdotenv": "Required to use the Env class and env helper (^3.3)." 409 | }, 410 | "type": "library", 411 | "extra": { 412 | "branch-alias": { 413 | "dev-master": "6.0-dev" 414 | } 415 | }, 416 | "autoload": { 417 | "psr-4": { 418 | "Illuminate\\Support\\": "" 419 | }, 420 | "files": [ 421 | "helpers.php" 422 | ] 423 | }, 424 | "notification-url": "https://packagist.org/downloads/", 425 | "license": [ 426 | "MIT" 427 | ], 428 | "authors": [ 429 | { 430 | "name": "Taylor Otwell", 431 | "email": "taylor@laravel.com" 432 | } 433 | ], 434 | "description": "The Illuminate Support package.", 435 | "homepage": "https://laravel.com", 436 | "time": "2019-09-03T17:25:40+00:00" 437 | }, 438 | { 439 | "name": "nesbot/carbon", 440 | "version": "2.24.0", 441 | "source": { 442 | "type": "git", 443 | "url": "https://github.com/briannesbitt/Carbon.git", 444 | "reference": "934459c5ac0658bc765ad1e53512c7c77adcac29" 445 | }, 446 | "dist": { 447 | "type": "zip", 448 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/934459c5ac0658bc765ad1e53512c7c77adcac29", 449 | "reference": "934459c5ac0658bc765ad1e53512c7c77adcac29", 450 | "shasum": "" 451 | }, 452 | "require": { 453 | "ext-json": "*", 454 | "php": "^7.1.8 || ^8.0", 455 | "symfony/translation": "^3.4 || ^4.0" 456 | }, 457 | "require-dev": { 458 | "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", 459 | "kylekatarnls/multi-tester": "^1.1", 460 | "phpmd/phpmd": "dev-php-7.1-compatibility", 461 | "phpstan/phpstan": "^0.11", 462 | "phpunit/phpunit": "^7.5 || ^8.0", 463 | "squizlabs/php_codesniffer": "^3.4" 464 | }, 465 | "bin": [ 466 | "bin/carbon" 467 | ], 468 | "type": "library", 469 | "extra": { 470 | "laravel": { 471 | "providers": [ 472 | "Carbon\\Laravel\\ServiceProvider" 473 | ] 474 | } 475 | }, 476 | "autoload": { 477 | "psr-4": { 478 | "Carbon\\": "src/Carbon/" 479 | } 480 | }, 481 | "notification-url": "https://packagist.org/downloads/", 482 | "license": [ 483 | "MIT" 484 | ], 485 | "authors": [ 486 | { 487 | "name": "Brian Nesbitt", 488 | "email": "brian@nesbot.com", 489 | "homepage": "http://nesbot.com" 490 | }, 491 | { 492 | "name": "kylekatarnls", 493 | "homepage": "http://github.com/kylekatarnls" 494 | } 495 | ], 496 | "description": "A API extension for DateTime that supports 281 different languages.", 497 | "homepage": "http://carbon.nesbot.com", 498 | "keywords": [ 499 | "date", 500 | "datetime", 501 | "time" 502 | ], 503 | "time": "2019-08-31T16:37:55+00:00" 504 | }, 505 | { 506 | "name": "psr/container", 507 | "version": "1.0.0", 508 | "source": { 509 | "type": "git", 510 | "url": "https://github.com/php-fig/container.git", 511 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 512 | }, 513 | "dist": { 514 | "type": "zip", 515 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 516 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 517 | "shasum": "" 518 | }, 519 | "require": { 520 | "php": ">=5.3.0" 521 | }, 522 | "type": "library", 523 | "extra": { 524 | "branch-alias": { 525 | "dev-master": "1.0.x-dev" 526 | } 527 | }, 528 | "autoload": { 529 | "psr-4": { 530 | "Psr\\Container\\": "src/" 531 | } 532 | }, 533 | "notification-url": "https://packagist.org/downloads/", 534 | "license": [ 535 | "MIT" 536 | ], 537 | "authors": [ 538 | { 539 | "name": "PHP-FIG", 540 | "homepage": "http://www.php-fig.org/" 541 | } 542 | ], 543 | "description": "Common Container Interface (PHP FIG PSR-11)", 544 | "homepage": "https://github.com/php-fig/container", 545 | "keywords": [ 546 | "PSR-11", 547 | "container", 548 | "container-interface", 549 | "container-interop", 550 | "psr" 551 | ], 552 | "time": "2017-02-14T16:28:37+00:00" 553 | }, 554 | { 555 | "name": "psr/log", 556 | "version": "1.1.0", 557 | "source": { 558 | "type": "git", 559 | "url": "https://github.com/php-fig/log.git", 560 | "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" 561 | }, 562 | "dist": { 563 | "type": "zip", 564 | "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", 565 | "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", 566 | "shasum": "" 567 | }, 568 | "require": { 569 | "php": ">=5.3.0" 570 | }, 571 | "type": "library", 572 | "extra": { 573 | "branch-alias": { 574 | "dev-master": "1.0.x-dev" 575 | } 576 | }, 577 | "autoload": { 578 | "psr-4": { 579 | "Psr\\Log\\": "Psr/Log/" 580 | } 581 | }, 582 | "notification-url": "https://packagist.org/downloads/", 583 | "license": [ 584 | "MIT" 585 | ], 586 | "authors": [ 587 | { 588 | "name": "PHP-FIG", 589 | "homepage": "http://www.php-fig.org/" 590 | } 591 | ], 592 | "description": "Common interface for logging libraries", 593 | "homepage": "https://github.com/php-fig/log", 594 | "keywords": [ 595 | "log", 596 | "psr", 597 | "psr-3" 598 | ], 599 | "time": "2018-11-20T15:27:04+00:00" 600 | }, 601 | { 602 | "name": "psr/simple-cache", 603 | "version": "1.0.1", 604 | "source": { 605 | "type": "git", 606 | "url": "https://github.com/php-fig/simple-cache.git", 607 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" 608 | }, 609 | "dist": { 610 | "type": "zip", 611 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 612 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 613 | "shasum": "" 614 | }, 615 | "require": { 616 | "php": ">=5.3.0" 617 | }, 618 | "type": "library", 619 | "extra": { 620 | "branch-alias": { 621 | "dev-master": "1.0.x-dev" 622 | } 623 | }, 624 | "autoload": { 625 | "psr-4": { 626 | "Psr\\SimpleCache\\": "src/" 627 | } 628 | }, 629 | "notification-url": "https://packagist.org/downloads/", 630 | "license": [ 631 | "MIT" 632 | ], 633 | "authors": [ 634 | { 635 | "name": "PHP-FIG", 636 | "homepage": "http://www.php-fig.org/" 637 | } 638 | ], 639 | "description": "Common interfaces for simple caching", 640 | "keywords": [ 641 | "cache", 642 | "caching", 643 | "psr", 644 | "psr-16", 645 | "simple-cache" 646 | ], 647 | "time": "2017-10-23T01:57:42+00:00" 648 | }, 649 | { 650 | "name": "symfony/debug", 651 | "version": "v4.3.4", 652 | "source": { 653 | "type": "git", 654 | "url": "https://github.com/symfony/debug.git", 655 | "reference": "afcdea44a2e399c1e4b52246ec8d54c715393ced" 656 | }, 657 | "dist": { 658 | "type": "zip", 659 | "url": "https://api.github.com/repos/symfony/debug/zipball/afcdea44a2e399c1e4b52246ec8d54c715393ced", 660 | "reference": "afcdea44a2e399c1e4b52246ec8d54c715393ced", 661 | "shasum": "" 662 | }, 663 | "require": { 664 | "php": "^7.1.3", 665 | "psr/log": "~1.0" 666 | }, 667 | "conflict": { 668 | "symfony/http-kernel": "<3.4" 669 | }, 670 | "require-dev": { 671 | "symfony/http-kernel": "~3.4|~4.0" 672 | }, 673 | "type": "library", 674 | "extra": { 675 | "branch-alias": { 676 | "dev-master": "4.3-dev" 677 | } 678 | }, 679 | "autoload": { 680 | "psr-4": { 681 | "Symfony\\Component\\Debug\\": "" 682 | }, 683 | "exclude-from-classmap": [ 684 | "/Tests/" 685 | ] 686 | }, 687 | "notification-url": "https://packagist.org/downloads/", 688 | "license": [ 689 | "MIT" 690 | ], 691 | "authors": [ 692 | { 693 | "name": "Fabien Potencier", 694 | "email": "fabien@symfony.com" 695 | }, 696 | { 697 | "name": "Symfony Community", 698 | "homepage": "https://symfony.com/contributors" 699 | } 700 | ], 701 | "description": "Symfony Debug Component", 702 | "homepage": "https://symfony.com", 703 | "time": "2019-08-20T14:27:59+00:00" 704 | }, 705 | { 706 | "name": "symfony/event-dispatcher", 707 | "version": "v4.3.4", 708 | "source": { 709 | "type": "git", 710 | "url": "https://github.com/symfony/event-dispatcher.git", 711 | "reference": "429d0a1451d4c9c4abe1959b2986b88794b9b7d2" 712 | }, 713 | "dist": { 714 | "type": "zip", 715 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/429d0a1451d4c9c4abe1959b2986b88794b9b7d2", 716 | "reference": "429d0a1451d4c9c4abe1959b2986b88794b9b7d2", 717 | "shasum": "" 718 | }, 719 | "require": { 720 | "php": "^7.1.3", 721 | "symfony/event-dispatcher-contracts": "^1.1" 722 | }, 723 | "conflict": { 724 | "symfony/dependency-injection": "<3.4" 725 | }, 726 | "provide": { 727 | "psr/event-dispatcher-implementation": "1.0", 728 | "symfony/event-dispatcher-implementation": "1.1" 729 | }, 730 | "require-dev": { 731 | "psr/log": "~1.0", 732 | "symfony/config": "~3.4|~4.0", 733 | "symfony/dependency-injection": "~3.4|~4.0", 734 | "symfony/expression-language": "~3.4|~4.0", 735 | "symfony/http-foundation": "^3.4|^4.0", 736 | "symfony/service-contracts": "^1.1", 737 | "symfony/stopwatch": "~3.4|~4.0" 738 | }, 739 | "suggest": { 740 | "symfony/dependency-injection": "", 741 | "symfony/http-kernel": "" 742 | }, 743 | "type": "library", 744 | "extra": { 745 | "branch-alias": { 746 | "dev-master": "4.3-dev" 747 | } 748 | }, 749 | "autoload": { 750 | "psr-4": { 751 | "Symfony\\Component\\EventDispatcher\\": "" 752 | }, 753 | "exclude-from-classmap": [ 754 | "/Tests/" 755 | ] 756 | }, 757 | "notification-url": "https://packagist.org/downloads/", 758 | "license": [ 759 | "MIT" 760 | ], 761 | "authors": [ 762 | { 763 | "name": "Fabien Potencier", 764 | "email": "fabien@symfony.com" 765 | }, 766 | { 767 | "name": "Symfony Community", 768 | "homepage": "https://symfony.com/contributors" 769 | } 770 | ], 771 | "description": "Symfony EventDispatcher Component", 772 | "homepage": "https://symfony.com", 773 | "time": "2019-08-26T08:55:16+00:00" 774 | }, 775 | { 776 | "name": "symfony/event-dispatcher-contracts", 777 | "version": "v1.1.5", 778 | "source": { 779 | "type": "git", 780 | "url": "https://github.com/symfony/event-dispatcher-contracts.git", 781 | "reference": "c61766f4440ca687de1084a5c00b08e167a2575c" 782 | }, 783 | "dist": { 784 | "type": "zip", 785 | "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c61766f4440ca687de1084a5c00b08e167a2575c", 786 | "reference": "c61766f4440ca687de1084a5c00b08e167a2575c", 787 | "shasum": "" 788 | }, 789 | "require": { 790 | "php": "^7.1.3" 791 | }, 792 | "suggest": { 793 | "psr/event-dispatcher": "", 794 | "symfony/event-dispatcher-implementation": "" 795 | }, 796 | "type": "library", 797 | "extra": { 798 | "branch-alias": { 799 | "dev-master": "1.1-dev" 800 | } 801 | }, 802 | "autoload": { 803 | "psr-4": { 804 | "Symfony\\Contracts\\EventDispatcher\\": "" 805 | } 806 | }, 807 | "notification-url": "https://packagist.org/downloads/", 808 | "license": [ 809 | "MIT" 810 | ], 811 | "authors": [ 812 | { 813 | "name": "Nicolas Grekas", 814 | "email": "p@tchwork.com" 815 | }, 816 | { 817 | "name": "Symfony Community", 818 | "homepage": "https://symfony.com/contributors" 819 | } 820 | ], 821 | "description": "Generic abstractions related to dispatching event", 822 | "homepage": "https://symfony.com", 823 | "keywords": [ 824 | "abstractions", 825 | "contracts", 826 | "decoupling", 827 | "interfaces", 828 | "interoperability", 829 | "standards" 830 | ], 831 | "time": "2019-06-20T06:46:26+00:00" 832 | }, 833 | { 834 | "name": "symfony/finder", 835 | "version": "v4.3.4", 836 | "source": { 837 | "type": "git", 838 | "url": "https://github.com/symfony/finder.git", 839 | "reference": "86c1c929f0a4b24812e1eb109262fc3372c8e9f2" 840 | }, 841 | "dist": { 842 | "type": "zip", 843 | "url": "https://api.github.com/repos/symfony/finder/zipball/86c1c929f0a4b24812e1eb109262fc3372c8e9f2", 844 | "reference": "86c1c929f0a4b24812e1eb109262fc3372c8e9f2", 845 | "shasum": "" 846 | }, 847 | "require": { 848 | "php": "^7.1.3" 849 | }, 850 | "type": "library", 851 | "extra": { 852 | "branch-alias": { 853 | "dev-master": "4.3-dev" 854 | } 855 | }, 856 | "autoload": { 857 | "psr-4": { 858 | "Symfony\\Component\\Finder\\": "" 859 | }, 860 | "exclude-from-classmap": [ 861 | "/Tests/" 862 | ] 863 | }, 864 | "notification-url": "https://packagist.org/downloads/", 865 | "license": [ 866 | "MIT" 867 | ], 868 | "authors": [ 869 | { 870 | "name": "Fabien Potencier", 871 | "email": "fabien@symfony.com" 872 | }, 873 | { 874 | "name": "Symfony Community", 875 | "homepage": "https://symfony.com/contributors" 876 | } 877 | ], 878 | "description": "Symfony Finder Component", 879 | "homepage": "https://symfony.com", 880 | "time": "2019-08-14T12:26:46+00:00" 881 | }, 882 | { 883 | "name": "symfony/http-foundation", 884 | "version": "v4.3.4", 885 | "source": { 886 | "type": "git", 887 | "url": "https://github.com/symfony/http-foundation.git", 888 | "reference": "d804bea118ff340a12e22a79f9c7e7eb56b35adc" 889 | }, 890 | "dist": { 891 | "type": "zip", 892 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d804bea118ff340a12e22a79f9c7e7eb56b35adc", 893 | "reference": "d804bea118ff340a12e22a79f9c7e7eb56b35adc", 894 | "shasum": "" 895 | }, 896 | "require": { 897 | "php": "^7.1.3", 898 | "symfony/mime": "^4.3", 899 | "symfony/polyfill-mbstring": "~1.1" 900 | }, 901 | "require-dev": { 902 | "predis/predis": "~1.0", 903 | "symfony/expression-language": "~3.4|~4.0" 904 | }, 905 | "type": "library", 906 | "extra": { 907 | "branch-alias": { 908 | "dev-master": "4.3-dev" 909 | } 910 | }, 911 | "autoload": { 912 | "psr-4": { 913 | "Symfony\\Component\\HttpFoundation\\": "" 914 | }, 915 | "exclude-from-classmap": [ 916 | "/Tests/" 917 | ] 918 | }, 919 | "notification-url": "https://packagist.org/downloads/", 920 | "license": [ 921 | "MIT" 922 | ], 923 | "authors": [ 924 | { 925 | "name": "Fabien Potencier", 926 | "email": "fabien@symfony.com" 927 | }, 928 | { 929 | "name": "Symfony Community", 930 | "homepage": "https://symfony.com/contributors" 931 | } 932 | ], 933 | "description": "Symfony HttpFoundation Component", 934 | "homepage": "https://symfony.com", 935 | "time": "2019-08-26T08:55:16+00:00" 936 | }, 937 | { 938 | "name": "symfony/http-kernel", 939 | "version": "v4.3.4", 940 | "source": { 941 | "type": "git", 942 | "url": "https://github.com/symfony/http-kernel.git", 943 | "reference": "5e0fc71be03d52cd00c423061cfd300bd6f92a52" 944 | }, 945 | "dist": { 946 | "type": "zip", 947 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/5e0fc71be03d52cd00c423061cfd300bd6f92a52", 948 | "reference": "5e0fc71be03d52cd00c423061cfd300bd6f92a52", 949 | "shasum": "" 950 | }, 951 | "require": { 952 | "php": "^7.1.3", 953 | "psr/log": "~1.0", 954 | "symfony/debug": "~3.4|~4.0", 955 | "symfony/event-dispatcher": "^4.3", 956 | "symfony/http-foundation": "^4.1.1", 957 | "symfony/polyfill-ctype": "~1.8", 958 | "symfony/polyfill-php73": "^1.9" 959 | }, 960 | "conflict": { 961 | "symfony/browser-kit": "<4.3", 962 | "symfony/config": "<3.4", 963 | "symfony/dependency-injection": "<4.3", 964 | "symfony/translation": "<4.2", 965 | "symfony/var-dumper": "<4.1.1", 966 | "twig/twig": "<1.34|<2.4,>=2" 967 | }, 968 | "provide": { 969 | "psr/log-implementation": "1.0" 970 | }, 971 | "require-dev": { 972 | "psr/cache": "~1.0", 973 | "symfony/browser-kit": "^4.3", 974 | "symfony/config": "~3.4|~4.0", 975 | "symfony/console": "~3.4|~4.0", 976 | "symfony/css-selector": "~3.4|~4.0", 977 | "symfony/dependency-injection": "^4.3", 978 | "symfony/dom-crawler": "~3.4|~4.0", 979 | "symfony/expression-language": "~3.4|~4.0", 980 | "symfony/finder": "~3.4|~4.0", 981 | "symfony/process": "~3.4|~4.0", 982 | "symfony/routing": "~3.4|~4.0", 983 | "symfony/stopwatch": "~3.4|~4.0", 984 | "symfony/templating": "~3.4|~4.0", 985 | "symfony/translation": "~4.2", 986 | "symfony/translation-contracts": "^1.1", 987 | "symfony/var-dumper": "^4.1.1", 988 | "twig/twig": "^1.34|^2.4" 989 | }, 990 | "suggest": { 991 | "symfony/browser-kit": "", 992 | "symfony/config": "", 993 | "symfony/console": "", 994 | "symfony/dependency-injection": "", 995 | "symfony/var-dumper": "" 996 | }, 997 | "type": "library", 998 | "extra": { 999 | "branch-alias": { 1000 | "dev-master": "4.3-dev" 1001 | } 1002 | }, 1003 | "autoload": { 1004 | "psr-4": { 1005 | "Symfony\\Component\\HttpKernel\\": "" 1006 | }, 1007 | "exclude-from-classmap": [ 1008 | "/Tests/" 1009 | ] 1010 | }, 1011 | "notification-url": "https://packagist.org/downloads/", 1012 | "license": [ 1013 | "MIT" 1014 | ], 1015 | "authors": [ 1016 | { 1017 | "name": "Fabien Potencier", 1018 | "email": "fabien@symfony.com" 1019 | }, 1020 | { 1021 | "name": "Symfony Community", 1022 | "homepage": "https://symfony.com/contributors" 1023 | } 1024 | ], 1025 | "description": "Symfony HttpKernel Component", 1026 | "homepage": "https://symfony.com", 1027 | "time": "2019-08-26T16:47:42+00:00" 1028 | }, 1029 | { 1030 | "name": "symfony/mime", 1031 | "version": "v4.3.4", 1032 | "source": { 1033 | "type": "git", 1034 | "url": "https://github.com/symfony/mime.git", 1035 | "reference": "987a05df1c6ac259b34008b932551353f4f408df" 1036 | }, 1037 | "dist": { 1038 | "type": "zip", 1039 | "url": "https://api.github.com/repos/symfony/mime/zipball/987a05df1c6ac259b34008b932551353f4f408df", 1040 | "reference": "987a05df1c6ac259b34008b932551353f4f408df", 1041 | "shasum": "" 1042 | }, 1043 | "require": { 1044 | "php": "^7.1.3", 1045 | "symfony/polyfill-intl-idn": "^1.10", 1046 | "symfony/polyfill-mbstring": "^1.0" 1047 | }, 1048 | "require-dev": { 1049 | "egulias/email-validator": "^2.1.10", 1050 | "symfony/dependency-injection": "~3.4|^4.1" 1051 | }, 1052 | "type": "library", 1053 | "extra": { 1054 | "branch-alias": { 1055 | "dev-master": "4.3-dev" 1056 | } 1057 | }, 1058 | "autoload": { 1059 | "psr-4": { 1060 | "Symfony\\Component\\Mime\\": "" 1061 | }, 1062 | "exclude-from-classmap": [ 1063 | "/Tests/" 1064 | ] 1065 | }, 1066 | "notification-url": "https://packagist.org/downloads/", 1067 | "license": [ 1068 | "MIT" 1069 | ], 1070 | "authors": [ 1071 | { 1072 | "name": "Fabien Potencier", 1073 | "email": "fabien@symfony.com" 1074 | }, 1075 | { 1076 | "name": "Symfony Community", 1077 | "homepage": "https://symfony.com/contributors" 1078 | } 1079 | ], 1080 | "description": "A library to manipulate MIME messages", 1081 | "homepage": "https://symfony.com", 1082 | "keywords": [ 1083 | "mime", 1084 | "mime-type" 1085 | ], 1086 | "time": "2019-08-22T08:16:11+00:00" 1087 | }, 1088 | { 1089 | "name": "symfony/polyfill-ctype", 1090 | "version": "v1.12.0", 1091 | "source": { 1092 | "type": "git", 1093 | "url": "https://github.com/symfony/polyfill-ctype.git", 1094 | "reference": "550ebaac289296ce228a706d0867afc34687e3f4" 1095 | }, 1096 | "dist": { 1097 | "type": "zip", 1098 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4", 1099 | "reference": "550ebaac289296ce228a706d0867afc34687e3f4", 1100 | "shasum": "" 1101 | }, 1102 | "require": { 1103 | "php": ">=5.3.3" 1104 | }, 1105 | "suggest": { 1106 | "ext-ctype": "For best performance" 1107 | }, 1108 | "type": "library", 1109 | "extra": { 1110 | "branch-alias": { 1111 | "dev-master": "1.12-dev" 1112 | } 1113 | }, 1114 | "autoload": { 1115 | "psr-4": { 1116 | "Symfony\\Polyfill\\Ctype\\": "" 1117 | }, 1118 | "files": [ 1119 | "bootstrap.php" 1120 | ] 1121 | }, 1122 | "notification-url": "https://packagist.org/downloads/", 1123 | "license": [ 1124 | "MIT" 1125 | ], 1126 | "authors": [ 1127 | { 1128 | "name": "Gert de Pagter", 1129 | "email": "BackEndTea@gmail.com" 1130 | }, 1131 | { 1132 | "name": "Symfony Community", 1133 | "homepage": "https://symfony.com/contributors" 1134 | } 1135 | ], 1136 | "description": "Symfony polyfill for ctype functions", 1137 | "homepage": "https://symfony.com", 1138 | "keywords": [ 1139 | "compatibility", 1140 | "ctype", 1141 | "polyfill", 1142 | "portable" 1143 | ], 1144 | "time": "2019-08-06T08:03:45+00:00" 1145 | }, 1146 | { 1147 | "name": "symfony/polyfill-intl-idn", 1148 | "version": "v1.12.0", 1149 | "source": { 1150 | "type": "git", 1151 | "url": "https://github.com/symfony/polyfill-intl-idn.git", 1152 | "reference": "6af626ae6fa37d396dc90a399c0ff08e5cfc45b2" 1153 | }, 1154 | "dist": { 1155 | "type": "zip", 1156 | "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6af626ae6fa37d396dc90a399c0ff08e5cfc45b2", 1157 | "reference": "6af626ae6fa37d396dc90a399c0ff08e5cfc45b2", 1158 | "shasum": "" 1159 | }, 1160 | "require": { 1161 | "php": ">=5.3.3", 1162 | "symfony/polyfill-mbstring": "^1.3", 1163 | "symfony/polyfill-php72": "^1.9" 1164 | }, 1165 | "suggest": { 1166 | "ext-intl": "For best performance" 1167 | }, 1168 | "type": "library", 1169 | "extra": { 1170 | "branch-alias": { 1171 | "dev-master": "1.12-dev" 1172 | } 1173 | }, 1174 | "autoload": { 1175 | "psr-4": { 1176 | "Symfony\\Polyfill\\Intl\\Idn\\": "" 1177 | }, 1178 | "files": [ 1179 | "bootstrap.php" 1180 | ] 1181 | }, 1182 | "notification-url": "https://packagist.org/downloads/", 1183 | "license": [ 1184 | "MIT" 1185 | ], 1186 | "authors": [ 1187 | { 1188 | "name": "Laurent Bassin", 1189 | "email": "laurent@bassin.info" 1190 | }, 1191 | { 1192 | "name": "Symfony Community", 1193 | "homepage": "https://symfony.com/contributors" 1194 | } 1195 | ], 1196 | "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", 1197 | "homepage": "https://symfony.com", 1198 | "keywords": [ 1199 | "compatibility", 1200 | "idn", 1201 | "intl", 1202 | "polyfill", 1203 | "portable", 1204 | "shim" 1205 | ], 1206 | "time": "2019-08-06T08:03:45+00:00" 1207 | }, 1208 | { 1209 | "name": "symfony/polyfill-mbstring", 1210 | "version": "v1.12.0", 1211 | "source": { 1212 | "type": "git", 1213 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1214 | "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17" 1215 | }, 1216 | "dist": { 1217 | "type": "zip", 1218 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17", 1219 | "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17", 1220 | "shasum": "" 1221 | }, 1222 | "require": { 1223 | "php": ">=5.3.3" 1224 | }, 1225 | "suggest": { 1226 | "ext-mbstring": "For best performance" 1227 | }, 1228 | "type": "library", 1229 | "extra": { 1230 | "branch-alias": { 1231 | "dev-master": "1.12-dev" 1232 | } 1233 | }, 1234 | "autoload": { 1235 | "psr-4": { 1236 | "Symfony\\Polyfill\\Mbstring\\": "" 1237 | }, 1238 | "files": [ 1239 | "bootstrap.php" 1240 | ] 1241 | }, 1242 | "notification-url": "https://packagist.org/downloads/", 1243 | "license": [ 1244 | "MIT" 1245 | ], 1246 | "authors": [ 1247 | { 1248 | "name": "Nicolas Grekas", 1249 | "email": "p@tchwork.com" 1250 | }, 1251 | { 1252 | "name": "Symfony Community", 1253 | "homepage": "https://symfony.com/contributors" 1254 | } 1255 | ], 1256 | "description": "Symfony polyfill for the Mbstring extension", 1257 | "homepage": "https://symfony.com", 1258 | "keywords": [ 1259 | "compatibility", 1260 | "mbstring", 1261 | "polyfill", 1262 | "portable", 1263 | "shim" 1264 | ], 1265 | "time": "2019-08-06T08:03:45+00:00" 1266 | }, 1267 | { 1268 | "name": "symfony/polyfill-php72", 1269 | "version": "v1.12.0", 1270 | "source": { 1271 | "type": "git", 1272 | "url": "https://github.com/symfony/polyfill-php72.git", 1273 | "reference": "04ce3335667451138df4307d6a9b61565560199e" 1274 | }, 1275 | "dist": { 1276 | "type": "zip", 1277 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/04ce3335667451138df4307d6a9b61565560199e", 1278 | "reference": "04ce3335667451138df4307d6a9b61565560199e", 1279 | "shasum": "" 1280 | }, 1281 | "require": { 1282 | "php": ">=5.3.3" 1283 | }, 1284 | "type": "library", 1285 | "extra": { 1286 | "branch-alias": { 1287 | "dev-master": "1.12-dev" 1288 | } 1289 | }, 1290 | "autoload": { 1291 | "psr-4": { 1292 | "Symfony\\Polyfill\\Php72\\": "" 1293 | }, 1294 | "files": [ 1295 | "bootstrap.php" 1296 | ] 1297 | }, 1298 | "notification-url": "https://packagist.org/downloads/", 1299 | "license": [ 1300 | "MIT" 1301 | ], 1302 | "authors": [ 1303 | { 1304 | "name": "Nicolas Grekas", 1305 | "email": "p@tchwork.com" 1306 | }, 1307 | { 1308 | "name": "Symfony Community", 1309 | "homepage": "https://symfony.com/contributors" 1310 | } 1311 | ], 1312 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", 1313 | "homepage": "https://symfony.com", 1314 | "keywords": [ 1315 | "compatibility", 1316 | "polyfill", 1317 | "portable", 1318 | "shim" 1319 | ], 1320 | "time": "2019-08-06T08:03:45+00:00" 1321 | }, 1322 | { 1323 | "name": "symfony/polyfill-php73", 1324 | "version": "v1.12.0", 1325 | "source": { 1326 | "type": "git", 1327 | "url": "https://github.com/symfony/polyfill-php73.git", 1328 | "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188" 1329 | }, 1330 | "dist": { 1331 | "type": "zip", 1332 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/2ceb49eaccb9352bff54d22570276bb75ba4a188", 1333 | "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188", 1334 | "shasum": "" 1335 | }, 1336 | "require": { 1337 | "php": ">=5.3.3" 1338 | }, 1339 | "type": "library", 1340 | "extra": { 1341 | "branch-alias": { 1342 | "dev-master": "1.12-dev" 1343 | } 1344 | }, 1345 | "autoload": { 1346 | "psr-4": { 1347 | "Symfony\\Polyfill\\Php73\\": "" 1348 | }, 1349 | "files": [ 1350 | "bootstrap.php" 1351 | ], 1352 | "classmap": [ 1353 | "Resources/stubs" 1354 | ] 1355 | }, 1356 | "notification-url": "https://packagist.org/downloads/", 1357 | "license": [ 1358 | "MIT" 1359 | ], 1360 | "authors": [ 1361 | { 1362 | "name": "Nicolas Grekas", 1363 | "email": "p@tchwork.com" 1364 | }, 1365 | { 1366 | "name": "Symfony Community", 1367 | "homepage": "https://symfony.com/contributors" 1368 | } 1369 | ], 1370 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 1371 | "homepage": "https://symfony.com", 1372 | "keywords": [ 1373 | "compatibility", 1374 | "polyfill", 1375 | "portable", 1376 | "shim" 1377 | ], 1378 | "time": "2019-08-06T08:03:45+00:00" 1379 | }, 1380 | { 1381 | "name": "symfony/translation", 1382 | "version": "v4.3.4", 1383 | "source": { 1384 | "type": "git", 1385 | "url": "https://github.com/symfony/translation.git", 1386 | "reference": "28498169dd334095fa981827992f3a24d50fed0f" 1387 | }, 1388 | "dist": { 1389 | "type": "zip", 1390 | "url": "https://api.github.com/repos/symfony/translation/zipball/28498169dd334095fa981827992f3a24d50fed0f", 1391 | "reference": "28498169dd334095fa981827992f3a24d50fed0f", 1392 | "shasum": "" 1393 | }, 1394 | "require": { 1395 | "php": "^7.1.3", 1396 | "symfony/polyfill-mbstring": "~1.0", 1397 | "symfony/translation-contracts": "^1.1.6" 1398 | }, 1399 | "conflict": { 1400 | "symfony/config": "<3.4", 1401 | "symfony/dependency-injection": "<3.4", 1402 | "symfony/yaml": "<3.4" 1403 | }, 1404 | "provide": { 1405 | "symfony/translation-implementation": "1.0" 1406 | }, 1407 | "require-dev": { 1408 | "psr/log": "~1.0", 1409 | "symfony/config": "~3.4|~4.0", 1410 | "symfony/console": "~3.4|~4.0", 1411 | "symfony/dependency-injection": "~3.4|~4.0", 1412 | "symfony/finder": "~2.8|~3.0|~4.0", 1413 | "symfony/http-kernel": "~3.4|~4.0", 1414 | "symfony/intl": "~3.4|~4.0", 1415 | "symfony/service-contracts": "^1.1.2", 1416 | "symfony/var-dumper": "~3.4|~4.0", 1417 | "symfony/yaml": "~3.4|~4.0" 1418 | }, 1419 | "suggest": { 1420 | "psr/log-implementation": "To use logging capability in translator", 1421 | "symfony/config": "", 1422 | "symfony/yaml": "" 1423 | }, 1424 | "type": "library", 1425 | "extra": { 1426 | "branch-alias": { 1427 | "dev-master": "4.3-dev" 1428 | } 1429 | }, 1430 | "autoload": { 1431 | "psr-4": { 1432 | "Symfony\\Component\\Translation\\": "" 1433 | }, 1434 | "exclude-from-classmap": [ 1435 | "/Tests/" 1436 | ] 1437 | }, 1438 | "notification-url": "https://packagist.org/downloads/", 1439 | "license": [ 1440 | "MIT" 1441 | ], 1442 | "authors": [ 1443 | { 1444 | "name": "Fabien Potencier", 1445 | "email": "fabien@symfony.com" 1446 | }, 1447 | { 1448 | "name": "Symfony Community", 1449 | "homepage": "https://symfony.com/contributors" 1450 | } 1451 | ], 1452 | "description": "Symfony Translation Component", 1453 | "homepage": "https://symfony.com", 1454 | "time": "2019-08-26T08:55:16+00:00" 1455 | }, 1456 | { 1457 | "name": "symfony/translation-contracts", 1458 | "version": "v1.1.6", 1459 | "source": { 1460 | "type": "git", 1461 | "url": "https://github.com/symfony/translation-contracts.git", 1462 | "reference": "325b17c24f3ee23cbecfa63ba809c6d89b5fa04a" 1463 | }, 1464 | "dist": { 1465 | "type": "zip", 1466 | "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/325b17c24f3ee23cbecfa63ba809c6d89b5fa04a", 1467 | "reference": "325b17c24f3ee23cbecfa63ba809c6d89b5fa04a", 1468 | "shasum": "" 1469 | }, 1470 | "require": { 1471 | "php": "^7.1.3" 1472 | }, 1473 | "suggest": { 1474 | "symfony/translation-implementation": "" 1475 | }, 1476 | "type": "library", 1477 | "extra": { 1478 | "branch-alias": { 1479 | "dev-master": "1.1-dev" 1480 | } 1481 | }, 1482 | "autoload": { 1483 | "psr-4": { 1484 | "Symfony\\Contracts\\Translation\\": "" 1485 | } 1486 | }, 1487 | "notification-url": "https://packagist.org/downloads/", 1488 | "license": [ 1489 | "MIT" 1490 | ], 1491 | "authors": [ 1492 | { 1493 | "name": "Nicolas Grekas", 1494 | "email": "p@tchwork.com" 1495 | }, 1496 | { 1497 | "name": "Symfony Community", 1498 | "homepage": "https://symfony.com/contributors" 1499 | } 1500 | ], 1501 | "description": "Generic abstractions related to translation", 1502 | "homepage": "https://symfony.com", 1503 | "keywords": [ 1504 | "abstractions", 1505 | "contracts", 1506 | "decoupling", 1507 | "interfaces", 1508 | "interoperability", 1509 | "standards" 1510 | ], 1511 | "time": "2019-08-02T12:15:04+00:00" 1512 | } 1513 | ], 1514 | "packages-dev": [ 1515 | { 1516 | "name": "composer/xdebug-handler", 1517 | "version": "1.3.3", 1518 | "source": { 1519 | "type": "git", 1520 | "url": "https://github.com/composer/xdebug-handler.git", 1521 | "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f" 1522 | }, 1523 | "dist": { 1524 | "type": "zip", 1525 | "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/46867cbf8ca9fb8d60c506895449eb799db1184f", 1526 | "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f", 1527 | "shasum": "" 1528 | }, 1529 | "require": { 1530 | "php": "^5.3.2 || ^7.0", 1531 | "psr/log": "^1.0" 1532 | }, 1533 | "require-dev": { 1534 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" 1535 | }, 1536 | "type": "library", 1537 | "autoload": { 1538 | "psr-4": { 1539 | "Composer\\XdebugHandler\\": "src" 1540 | } 1541 | }, 1542 | "notification-url": "https://packagist.org/downloads/", 1543 | "license": [ 1544 | "MIT" 1545 | ], 1546 | "authors": [ 1547 | { 1548 | "name": "John Stevenson", 1549 | "email": "john-stevenson@blueyonder.co.uk" 1550 | } 1551 | ], 1552 | "description": "Restarts a process without xdebug.", 1553 | "keywords": [ 1554 | "Xdebug", 1555 | "performance" 1556 | ], 1557 | "time": "2019-05-27T17:52:04+00:00" 1558 | }, 1559 | { 1560 | "name": "doctrine/instantiator", 1561 | "version": "1.2.0", 1562 | "source": { 1563 | "type": "git", 1564 | "url": "https://github.com/doctrine/instantiator.git", 1565 | "reference": "a2c590166b2133a4633738648b6b064edae0814a" 1566 | }, 1567 | "dist": { 1568 | "type": "zip", 1569 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", 1570 | "reference": "a2c590166b2133a4633738648b6b064edae0814a", 1571 | "shasum": "" 1572 | }, 1573 | "require": { 1574 | "php": "^7.1" 1575 | }, 1576 | "require-dev": { 1577 | "doctrine/coding-standard": "^6.0", 1578 | "ext-pdo": "*", 1579 | "ext-phar": "*", 1580 | "phpbench/phpbench": "^0.13", 1581 | "phpstan/phpstan-phpunit": "^0.11", 1582 | "phpstan/phpstan-shim": "^0.11", 1583 | "phpunit/phpunit": "^7.0" 1584 | }, 1585 | "type": "library", 1586 | "extra": { 1587 | "branch-alias": { 1588 | "dev-master": "1.2.x-dev" 1589 | } 1590 | }, 1591 | "autoload": { 1592 | "psr-4": { 1593 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 1594 | } 1595 | }, 1596 | "notification-url": "https://packagist.org/downloads/", 1597 | "license": [ 1598 | "MIT" 1599 | ], 1600 | "authors": [ 1601 | { 1602 | "name": "Marco Pivetta", 1603 | "email": "ocramius@gmail.com", 1604 | "homepage": "http://ocramius.github.com/" 1605 | } 1606 | ], 1607 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 1608 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 1609 | "keywords": [ 1610 | "constructor", 1611 | "instantiate" 1612 | ], 1613 | "time": "2019-03-17T17:37:11+00:00" 1614 | }, 1615 | { 1616 | "name": "jean85/pretty-package-versions", 1617 | "version": "1.2", 1618 | "source": { 1619 | "type": "git", 1620 | "url": "https://github.com/Jean85/pretty-package-versions.git", 1621 | "reference": "75c7effcf3f77501d0e0caa75111aff4daa0dd48" 1622 | }, 1623 | "dist": { 1624 | "type": "zip", 1625 | "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/75c7effcf3f77501d0e0caa75111aff4daa0dd48", 1626 | "reference": "75c7effcf3f77501d0e0caa75111aff4daa0dd48", 1627 | "shasum": "" 1628 | }, 1629 | "require": { 1630 | "ocramius/package-versions": "^1.2.0", 1631 | "php": "^7.0" 1632 | }, 1633 | "require-dev": { 1634 | "phpunit/phpunit": "^6.0" 1635 | }, 1636 | "type": "library", 1637 | "extra": { 1638 | "branch-alias": { 1639 | "dev-master": "1.x-dev" 1640 | } 1641 | }, 1642 | "autoload": { 1643 | "psr-4": { 1644 | "Jean85\\": "src/" 1645 | } 1646 | }, 1647 | "notification-url": "https://packagist.org/downloads/", 1648 | "license": [ 1649 | "MIT" 1650 | ], 1651 | "authors": [ 1652 | { 1653 | "name": "Alessandro Lai", 1654 | "email": "alessandro.lai85@gmail.com" 1655 | } 1656 | ], 1657 | "description": "A wrapper for ocramius/package-versions to get pretty versions strings", 1658 | "keywords": [ 1659 | "composer", 1660 | "package", 1661 | "release", 1662 | "versions" 1663 | ], 1664 | "time": "2018-06-13T13:22:40+00:00" 1665 | }, 1666 | { 1667 | "name": "myclabs/deep-copy", 1668 | "version": "1.9.3", 1669 | "source": { 1670 | "type": "git", 1671 | "url": "https://github.com/myclabs/DeepCopy.git", 1672 | "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" 1673 | }, 1674 | "dist": { 1675 | "type": "zip", 1676 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", 1677 | "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", 1678 | "shasum": "" 1679 | }, 1680 | "require": { 1681 | "php": "^7.1" 1682 | }, 1683 | "replace": { 1684 | "myclabs/deep-copy": "self.version" 1685 | }, 1686 | "require-dev": { 1687 | "doctrine/collections": "^1.0", 1688 | "doctrine/common": "^2.6", 1689 | "phpunit/phpunit": "^7.1" 1690 | }, 1691 | "type": "library", 1692 | "autoload": { 1693 | "psr-4": { 1694 | "DeepCopy\\": "src/DeepCopy/" 1695 | }, 1696 | "files": [ 1697 | "src/DeepCopy/deep_copy.php" 1698 | ] 1699 | }, 1700 | "notification-url": "https://packagist.org/downloads/", 1701 | "license": [ 1702 | "MIT" 1703 | ], 1704 | "description": "Create deep copies (clones) of your objects", 1705 | "keywords": [ 1706 | "clone", 1707 | "copy", 1708 | "duplicate", 1709 | "object", 1710 | "object graph" 1711 | ], 1712 | "time": "2019-08-09T12:45:53+00:00" 1713 | }, 1714 | { 1715 | "name": "nette/bootstrap", 1716 | "version": "v3.0.0", 1717 | "source": { 1718 | "type": "git", 1719 | "url": "https://github.com/nette/bootstrap.git", 1720 | "reference": "e1075af05c211915e03e0c86542f3ba5433df4a3" 1721 | }, 1722 | "dist": { 1723 | "type": "zip", 1724 | "url": "https://api.github.com/repos/nette/bootstrap/zipball/e1075af05c211915e03e0c86542f3ba5433df4a3", 1725 | "reference": "e1075af05c211915e03e0c86542f3ba5433df4a3", 1726 | "shasum": "" 1727 | }, 1728 | "require": { 1729 | "nette/di": "^3.0", 1730 | "nette/utils": "^3.0", 1731 | "php": ">=7.1" 1732 | }, 1733 | "require-dev": { 1734 | "latte/latte": "^2.2", 1735 | "nette/application": "^3.0", 1736 | "nette/caching": "^3.0", 1737 | "nette/database": "^3.0", 1738 | "nette/forms": "^3.0", 1739 | "nette/http": "^3.0", 1740 | "nette/mail": "^3.0", 1741 | "nette/robot-loader": "^3.0", 1742 | "nette/safe-stream": "^2.2", 1743 | "nette/security": "^3.0", 1744 | "nette/tester": "^2.0", 1745 | "tracy/tracy": "^2.6" 1746 | }, 1747 | "suggest": { 1748 | "nette/robot-loader": "to use Configurator::createRobotLoader()", 1749 | "tracy/tracy": "to use Configurator::enableTracy()" 1750 | }, 1751 | "type": "library", 1752 | "extra": { 1753 | "branch-alias": { 1754 | "dev-master": "3.0-dev" 1755 | } 1756 | }, 1757 | "autoload": { 1758 | "classmap": [ 1759 | "src/" 1760 | ] 1761 | }, 1762 | "notification-url": "https://packagist.org/downloads/", 1763 | "license": [ 1764 | "BSD-3-Clause", 1765 | "GPL-2.0", 1766 | "GPL-3.0" 1767 | ], 1768 | "authors": [ 1769 | { 1770 | "name": "David Grudl", 1771 | "homepage": "https://davidgrudl.com" 1772 | }, 1773 | { 1774 | "name": "Nette Community", 1775 | "homepage": "https://nette.org/contributors" 1776 | } 1777 | ], 1778 | "description": "🅱 Nette Bootstrap: the simple way to configure and bootstrap your Nette application.", 1779 | "homepage": "https://nette.org", 1780 | "keywords": [ 1781 | "bootstrapping", 1782 | "configurator", 1783 | "nette" 1784 | ], 1785 | "time": "2019-03-26T12:59:07+00:00" 1786 | }, 1787 | { 1788 | "name": "nette/di", 1789 | "version": "v3.0.1", 1790 | "source": { 1791 | "type": "git", 1792 | "url": "https://github.com/nette/di.git", 1793 | "reference": "4aff517a1c6bb5c36fa09733d4cea089f529de6d" 1794 | }, 1795 | "dist": { 1796 | "type": "zip", 1797 | "url": "https://api.github.com/repos/nette/di/zipball/4aff517a1c6bb5c36fa09733d4cea089f529de6d", 1798 | "reference": "4aff517a1c6bb5c36fa09733d4cea089f529de6d", 1799 | "shasum": "" 1800 | }, 1801 | "require": { 1802 | "ext-tokenizer": "*", 1803 | "nette/neon": "^3.0", 1804 | "nette/php-generator": "^3.2.2", 1805 | "nette/robot-loader": "^3.2", 1806 | "nette/schema": "^1.0", 1807 | "nette/utils": "^3.0", 1808 | "php": ">=7.1" 1809 | }, 1810 | "conflict": { 1811 | "nette/bootstrap": "<3.0" 1812 | }, 1813 | "require-dev": { 1814 | "nette/tester": "^2.2", 1815 | "tracy/tracy": "^2.3" 1816 | }, 1817 | "type": "library", 1818 | "extra": { 1819 | "branch-alias": { 1820 | "dev-master": "3.0-dev" 1821 | } 1822 | }, 1823 | "autoload": { 1824 | "classmap": [ 1825 | "src/" 1826 | ], 1827 | "files": [ 1828 | "src/compatibility.php" 1829 | ] 1830 | }, 1831 | "notification-url": "https://packagist.org/downloads/", 1832 | "license": [ 1833 | "BSD-3-Clause", 1834 | "GPL-2.0", 1835 | "GPL-3.0" 1836 | ], 1837 | "authors": [ 1838 | { 1839 | "name": "David Grudl", 1840 | "homepage": "https://davidgrudl.com" 1841 | }, 1842 | { 1843 | "name": "Nette Community", 1844 | "homepage": "https://nette.org/contributors" 1845 | } 1846 | ], 1847 | "description": "💎 Nette Dependency Injection Container: Flexible, compiled and full-featured DIC with perfectly usable autowiring and support for all new PHP 7.1 features.", 1848 | "homepage": "https://nette.org", 1849 | "keywords": [ 1850 | "compiled", 1851 | "di", 1852 | "dic", 1853 | "factory", 1854 | "ioc", 1855 | "nette", 1856 | "static" 1857 | ], 1858 | "time": "2019-08-07T12:11:33+00:00" 1859 | }, 1860 | { 1861 | "name": "nette/finder", 1862 | "version": "v2.5.1", 1863 | "source": { 1864 | "type": "git", 1865 | "url": "https://github.com/nette/finder.git", 1866 | "reference": "14164e1ddd69e9c5f627ff82a10874b3f5bba5fe" 1867 | }, 1868 | "dist": { 1869 | "type": "zip", 1870 | "url": "https://api.github.com/repos/nette/finder/zipball/14164e1ddd69e9c5f627ff82a10874b3f5bba5fe", 1871 | "reference": "14164e1ddd69e9c5f627ff82a10874b3f5bba5fe", 1872 | "shasum": "" 1873 | }, 1874 | "require": { 1875 | "nette/utils": "^2.4 || ~3.0.0", 1876 | "php": ">=7.1" 1877 | }, 1878 | "conflict": { 1879 | "nette/nette": "<2.2" 1880 | }, 1881 | "require-dev": { 1882 | "nette/tester": "^2.0", 1883 | "tracy/tracy": "^2.3" 1884 | }, 1885 | "type": "library", 1886 | "extra": { 1887 | "branch-alias": { 1888 | "dev-master": "2.5-dev" 1889 | } 1890 | }, 1891 | "autoload": { 1892 | "classmap": [ 1893 | "src/" 1894 | ] 1895 | }, 1896 | "notification-url": "https://packagist.org/downloads/", 1897 | "license": [ 1898 | "BSD-3-Clause", 1899 | "GPL-2.0", 1900 | "GPL-3.0" 1901 | ], 1902 | "authors": [ 1903 | { 1904 | "name": "David Grudl", 1905 | "homepage": "https://davidgrudl.com" 1906 | }, 1907 | { 1908 | "name": "Nette Community", 1909 | "homepage": "https://nette.org/contributors" 1910 | } 1911 | ], 1912 | "description": "🔍 Nette Finder: find files and directories with an intuitive API.", 1913 | "homepage": "https://nette.org", 1914 | "keywords": [ 1915 | "filesystem", 1916 | "glob", 1917 | "iterator", 1918 | "nette" 1919 | ], 1920 | "time": "2019-07-11T18:02:17+00:00" 1921 | }, 1922 | { 1923 | "name": "nette/neon", 1924 | "version": "v3.0.0", 1925 | "source": { 1926 | "type": "git", 1927 | "url": "https://github.com/nette/neon.git", 1928 | "reference": "cbff32059cbdd8720deccf9e9eace6ee516f02eb" 1929 | }, 1930 | "dist": { 1931 | "type": "zip", 1932 | "url": "https://api.github.com/repos/nette/neon/zipball/cbff32059cbdd8720deccf9e9eace6ee516f02eb", 1933 | "reference": "cbff32059cbdd8720deccf9e9eace6ee516f02eb", 1934 | "shasum": "" 1935 | }, 1936 | "require": { 1937 | "ext-iconv": "*", 1938 | "ext-json": "*", 1939 | "php": ">=7.0" 1940 | }, 1941 | "require-dev": { 1942 | "nette/tester": "^2.0", 1943 | "tracy/tracy": "^2.3" 1944 | }, 1945 | "type": "library", 1946 | "extra": { 1947 | "branch-alias": { 1948 | "dev-master": "3.0-dev" 1949 | } 1950 | }, 1951 | "autoload": { 1952 | "classmap": [ 1953 | "src/" 1954 | ] 1955 | }, 1956 | "notification-url": "https://packagist.org/downloads/", 1957 | "license": [ 1958 | "BSD-3-Clause", 1959 | "GPL-2.0", 1960 | "GPL-3.0" 1961 | ], 1962 | "authors": [ 1963 | { 1964 | "name": "David Grudl", 1965 | "homepage": "https://davidgrudl.com" 1966 | }, 1967 | { 1968 | "name": "Nette Community", 1969 | "homepage": "https://nette.org/contributors" 1970 | } 1971 | ], 1972 | "description": "? Nette NEON: encodes and decodes NEON file format.", 1973 | "homepage": "http://ne-on.org", 1974 | "keywords": [ 1975 | "export", 1976 | "import", 1977 | "neon", 1978 | "nette", 1979 | "yaml" 1980 | ], 1981 | "time": "2019-02-05T21:30:40+00:00" 1982 | }, 1983 | { 1984 | "name": "nette/php-generator", 1985 | "version": "v3.2.3", 1986 | "source": { 1987 | "type": "git", 1988 | "url": "https://github.com/nette/php-generator.git", 1989 | "reference": "aea6e81437bb238e5f0e5b5ce06337433908e63b" 1990 | }, 1991 | "dist": { 1992 | "type": "zip", 1993 | "url": "https://api.github.com/repos/nette/php-generator/zipball/aea6e81437bb238e5f0e5b5ce06337433908e63b", 1994 | "reference": "aea6e81437bb238e5f0e5b5ce06337433908e63b", 1995 | "shasum": "" 1996 | }, 1997 | "require": { 1998 | "nette/utils": "^2.4.2 || ~3.0.0", 1999 | "php": ">=7.1" 2000 | }, 2001 | "require-dev": { 2002 | "nette/tester": "^2.0", 2003 | "tracy/tracy": "^2.3" 2004 | }, 2005 | "type": "library", 2006 | "extra": { 2007 | "branch-alias": { 2008 | "dev-master": "3.2-dev" 2009 | } 2010 | }, 2011 | "autoload": { 2012 | "classmap": [ 2013 | "src/" 2014 | ] 2015 | }, 2016 | "notification-url": "https://packagist.org/downloads/", 2017 | "license": [ 2018 | "BSD-3-Clause", 2019 | "GPL-2.0", 2020 | "GPL-3.0" 2021 | ], 2022 | "authors": [ 2023 | { 2024 | "name": "David Grudl", 2025 | "homepage": "https://davidgrudl.com" 2026 | }, 2027 | { 2028 | "name": "Nette Community", 2029 | "homepage": "https://nette.org/contributors" 2030 | } 2031 | ], 2032 | "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 7.3 features.", 2033 | "homepage": "https://nette.org", 2034 | "keywords": [ 2035 | "code", 2036 | "nette", 2037 | "php", 2038 | "scaffolding" 2039 | ], 2040 | "time": "2019-07-05T13:01:56+00:00" 2041 | }, 2042 | { 2043 | "name": "nette/robot-loader", 2044 | "version": "v3.2.0", 2045 | "source": { 2046 | "type": "git", 2047 | "url": "https://github.com/nette/robot-loader.git", 2048 | "reference": "0712a0e39ae7956d6a94c0ab6ad41aa842544b5c" 2049 | }, 2050 | "dist": { 2051 | "type": "zip", 2052 | "url": "https://api.github.com/repos/nette/robot-loader/zipball/0712a0e39ae7956d6a94c0ab6ad41aa842544b5c", 2053 | "reference": "0712a0e39ae7956d6a94c0ab6ad41aa842544b5c", 2054 | "shasum": "" 2055 | }, 2056 | "require": { 2057 | "ext-tokenizer": "*", 2058 | "nette/finder": "^2.5", 2059 | "nette/utils": "^3.0", 2060 | "php": ">=7.1" 2061 | }, 2062 | "require-dev": { 2063 | "nette/tester": "^2.0", 2064 | "tracy/tracy": "^2.3" 2065 | }, 2066 | "type": "library", 2067 | "extra": { 2068 | "branch-alias": { 2069 | "dev-master": "3.2-dev" 2070 | } 2071 | }, 2072 | "autoload": { 2073 | "classmap": [ 2074 | "src/" 2075 | ] 2076 | }, 2077 | "notification-url": "https://packagist.org/downloads/", 2078 | "license": [ 2079 | "BSD-3-Clause", 2080 | "GPL-2.0", 2081 | "GPL-3.0" 2082 | ], 2083 | "authors": [ 2084 | { 2085 | "name": "David Grudl", 2086 | "homepage": "https://davidgrudl.com" 2087 | }, 2088 | { 2089 | "name": "Nette Community", 2090 | "homepage": "https://nette.org/contributors" 2091 | } 2092 | ], 2093 | "description": "? Nette RobotLoader: high performance and comfortable autoloader that will search and autoload classes within your application.", 2094 | "homepage": "https://nette.org", 2095 | "keywords": [ 2096 | "autoload", 2097 | "class", 2098 | "interface", 2099 | "nette", 2100 | "trait" 2101 | ], 2102 | "time": "2019-03-08T21:57:24+00:00" 2103 | }, 2104 | { 2105 | "name": "nette/schema", 2106 | "version": "v1.0.0", 2107 | "source": { 2108 | "type": "git", 2109 | "url": "https://github.com/nette/schema.git", 2110 | "reference": "6241d8d4da39e825dd6cb5bfbe4242912f4d7e4d" 2111 | }, 2112 | "dist": { 2113 | "type": "zip", 2114 | "url": "https://api.github.com/repos/nette/schema/zipball/6241d8d4da39e825dd6cb5bfbe4242912f4d7e4d", 2115 | "reference": "6241d8d4da39e825dd6cb5bfbe4242912f4d7e4d", 2116 | "shasum": "" 2117 | }, 2118 | "require": { 2119 | "nette/utils": "^3.0.1", 2120 | "php": ">=7.1" 2121 | }, 2122 | "require-dev": { 2123 | "nette/tester": "^2.2", 2124 | "tracy/tracy": "^2.3" 2125 | }, 2126 | "type": "library", 2127 | "extra": { 2128 | "branch-alias": { 2129 | "dev-master": "1.0-dev" 2130 | } 2131 | }, 2132 | "autoload": { 2133 | "classmap": [ 2134 | "src/" 2135 | ] 2136 | }, 2137 | "notification-url": "https://packagist.org/downloads/", 2138 | "license": [ 2139 | "BSD-3-Clause", 2140 | "GPL-2.0", 2141 | "GPL-3.0" 2142 | ], 2143 | "authors": [ 2144 | { 2145 | "name": "David Grudl", 2146 | "homepage": "https://davidgrudl.com" 2147 | }, 2148 | { 2149 | "name": "Nette Community", 2150 | "homepage": "https://nette.org/contributors" 2151 | } 2152 | ], 2153 | "description": "📐 Nette Schema: validating data structures against a given Schema.", 2154 | "homepage": "https://nette.org", 2155 | "keywords": [ 2156 | "config", 2157 | "nette" 2158 | ], 2159 | "time": "2019-04-03T15:53:25+00:00" 2160 | }, 2161 | { 2162 | "name": "nette/utils", 2163 | "version": "v3.0.1", 2164 | "source": { 2165 | "type": "git", 2166 | "url": "https://github.com/nette/utils.git", 2167 | "reference": "bd961f49b211997202bda1d0fbc410905be370d4" 2168 | }, 2169 | "dist": { 2170 | "type": "zip", 2171 | "url": "https://api.github.com/repos/nette/utils/zipball/bd961f49b211997202bda1d0fbc410905be370d4", 2172 | "reference": "bd961f49b211997202bda1d0fbc410905be370d4", 2173 | "shasum": "" 2174 | }, 2175 | "require": { 2176 | "php": ">=7.1" 2177 | }, 2178 | "require-dev": { 2179 | "nette/tester": "~2.0", 2180 | "tracy/tracy": "^2.3" 2181 | }, 2182 | "suggest": { 2183 | "ext-gd": "to use Image", 2184 | "ext-iconv": "to use Strings::webalize() and toAscii()", 2185 | "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", 2186 | "ext-json": "to use Nette\\Utils\\Json", 2187 | "ext-mbstring": "to use Strings::lower() etc...", 2188 | "ext-xml": "to use Strings::length() etc. when mbstring is not available" 2189 | }, 2190 | "type": "library", 2191 | "extra": { 2192 | "branch-alias": { 2193 | "dev-master": "3.0-dev" 2194 | } 2195 | }, 2196 | "autoload": { 2197 | "classmap": [ 2198 | "src/" 2199 | ] 2200 | }, 2201 | "notification-url": "https://packagist.org/downloads/", 2202 | "license": [ 2203 | "BSD-3-Clause", 2204 | "GPL-2.0", 2205 | "GPL-3.0" 2206 | ], 2207 | "authors": [ 2208 | { 2209 | "name": "David Grudl", 2210 | "homepage": "https://davidgrudl.com" 2211 | }, 2212 | { 2213 | "name": "Nette Community", 2214 | "homepage": "https://nette.org/contributors" 2215 | } 2216 | ], 2217 | "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", 2218 | "homepage": "https://nette.org", 2219 | "keywords": [ 2220 | "array", 2221 | "core", 2222 | "datetime", 2223 | "images", 2224 | "json", 2225 | "nette", 2226 | "paginator", 2227 | "password", 2228 | "slugify", 2229 | "string", 2230 | "unicode", 2231 | "utf-8", 2232 | "utility", 2233 | "validation" 2234 | ], 2235 | "time": "2019-03-22T01:00:30+00:00" 2236 | }, 2237 | { 2238 | "name": "nikic/php-parser", 2239 | "version": "v4.2.4", 2240 | "source": { 2241 | "type": "git", 2242 | "url": "https://github.com/nikic/PHP-Parser.git", 2243 | "reference": "97e59c7a16464196a8b9c77c47df68e4a39a45c4" 2244 | }, 2245 | "dist": { 2246 | "type": "zip", 2247 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/97e59c7a16464196a8b9c77c47df68e4a39a45c4", 2248 | "reference": "97e59c7a16464196a8b9c77c47df68e4a39a45c4", 2249 | "shasum": "" 2250 | }, 2251 | "require": { 2252 | "ext-tokenizer": "*", 2253 | "php": ">=7.0" 2254 | }, 2255 | "require-dev": { 2256 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" 2257 | }, 2258 | "bin": [ 2259 | "bin/php-parse" 2260 | ], 2261 | "type": "library", 2262 | "extra": { 2263 | "branch-alias": { 2264 | "dev-master": "4.2-dev" 2265 | } 2266 | }, 2267 | "autoload": { 2268 | "psr-4": { 2269 | "PhpParser\\": "lib/PhpParser" 2270 | } 2271 | }, 2272 | "notification-url": "https://packagist.org/downloads/", 2273 | "license": [ 2274 | "BSD-3-Clause" 2275 | ], 2276 | "authors": [ 2277 | { 2278 | "name": "Nikita Popov" 2279 | } 2280 | ], 2281 | "description": "A PHP parser written in PHP", 2282 | "keywords": [ 2283 | "parser", 2284 | "php" 2285 | ], 2286 | "time": "2019-09-01T07:51:21+00:00" 2287 | }, 2288 | { 2289 | "name": "ocramius/package-versions", 2290 | "version": "1.4.0", 2291 | "source": { 2292 | "type": "git", 2293 | "url": "https://github.com/Ocramius/PackageVersions.git", 2294 | "reference": "a4d4b60d0e60da2487bd21a2c6ac089f85570dbb" 2295 | }, 2296 | "dist": { 2297 | "type": "zip", 2298 | "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/a4d4b60d0e60da2487bd21a2c6ac089f85570dbb", 2299 | "reference": "a4d4b60d0e60da2487bd21a2c6ac089f85570dbb", 2300 | "shasum": "" 2301 | }, 2302 | "require": { 2303 | "composer-plugin-api": "^1.0.0", 2304 | "php": "^7.1.0" 2305 | }, 2306 | "require-dev": { 2307 | "composer/composer": "^1.6.3", 2308 | "doctrine/coding-standard": "^5.0.1", 2309 | "ext-zip": "*", 2310 | "infection/infection": "^0.7.1", 2311 | "phpunit/phpunit": "^7.0.0" 2312 | }, 2313 | "type": "composer-plugin", 2314 | "extra": { 2315 | "class": "PackageVersions\\Installer", 2316 | "branch-alias": { 2317 | "dev-master": "2.0.x-dev" 2318 | } 2319 | }, 2320 | "autoload": { 2321 | "psr-4": { 2322 | "PackageVersions\\": "src/PackageVersions" 2323 | } 2324 | }, 2325 | "notification-url": "https://packagist.org/downloads/", 2326 | "license": [ 2327 | "MIT" 2328 | ], 2329 | "authors": [ 2330 | { 2331 | "name": "Marco Pivetta", 2332 | "email": "ocramius@gmail.com" 2333 | } 2334 | ], 2335 | "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", 2336 | "time": "2019-02-21T12:16:21+00:00" 2337 | }, 2338 | { 2339 | "name": "phar-io/manifest", 2340 | "version": "1.0.3", 2341 | "source": { 2342 | "type": "git", 2343 | "url": "https://github.com/phar-io/manifest.git", 2344 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" 2345 | }, 2346 | "dist": { 2347 | "type": "zip", 2348 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 2349 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 2350 | "shasum": "" 2351 | }, 2352 | "require": { 2353 | "ext-dom": "*", 2354 | "ext-phar": "*", 2355 | "phar-io/version": "^2.0", 2356 | "php": "^5.6 || ^7.0" 2357 | }, 2358 | "type": "library", 2359 | "extra": { 2360 | "branch-alias": { 2361 | "dev-master": "1.0.x-dev" 2362 | } 2363 | }, 2364 | "autoload": { 2365 | "classmap": [ 2366 | "src/" 2367 | ] 2368 | }, 2369 | "notification-url": "https://packagist.org/downloads/", 2370 | "license": [ 2371 | "BSD-3-Clause" 2372 | ], 2373 | "authors": [ 2374 | { 2375 | "name": "Arne Blankerts", 2376 | "role": "Developer", 2377 | "email": "arne@blankerts.de" 2378 | }, 2379 | { 2380 | "name": "Sebastian Heuer", 2381 | "role": "Developer", 2382 | "email": "sebastian@phpeople.de" 2383 | }, 2384 | { 2385 | "name": "Sebastian Bergmann", 2386 | "role": "Developer", 2387 | "email": "sebastian@phpunit.de" 2388 | } 2389 | ], 2390 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 2391 | "time": "2018-07-08T19:23:20+00:00" 2392 | }, 2393 | { 2394 | "name": "phar-io/version", 2395 | "version": "2.0.1", 2396 | "source": { 2397 | "type": "git", 2398 | "url": "https://github.com/phar-io/version.git", 2399 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" 2400 | }, 2401 | "dist": { 2402 | "type": "zip", 2403 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", 2404 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", 2405 | "shasum": "" 2406 | }, 2407 | "require": { 2408 | "php": "^5.6 || ^7.0" 2409 | }, 2410 | "type": "library", 2411 | "autoload": { 2412 | "classmap": [ 2413 | "src/" 2414 | ] 2415 | }, 2416 | "notification-url": "https://packagist.org/downloads/", 2417 | "license": [ 2418 | "BSD-3-Clause" 2419 | ], 2420 | "authors": [ 2421 | { 2422 | "name": "Arne Blankerts", 2423 | "role": "Developer", 2424 | "email": "arne@blankerts.de" 2425 | }, 2426 | { 2427 | "name": "Sebastian Heuer", 2428 | "role": "Developer", 2429 | "email": "sebastian@phpeople.de" 2430 | }, 2431 | { 2432 | "name": "Sebastian Bergmann", 2433 | "role": "Developer", 2434 | "email": "sebastian@phpunit.de" 2435 | } 2436 | ], 2437 | "description": "Library for handling version information and constraints", 2438 | "time": "2018-07-08T19:19:57+00:00" 2439 | }, 2440 | { 2441 | "name": "phpdocumentor/reflection-common", 2442 | "version": "2.0.0", 2443 | "source": { 2444 | "type": "git", 2445 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 2446 | "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" 2447 | }, 2448 | "dist": { 2449 | "type": "zip", 2450 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", 2451 | "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", 2452 | "shasum": "" 2453 | }, 2454 | "require": { 2455 | "php": ">=7.1" 2456 | }, 2457 | "require-dev": { 2458 | "phpunit/phpunit": "~6" 2459 | }, 2460 | "type": "library", 2461 | "extra": { 2462 | "branch-alias": { 2463 | "dev-master": "2.x-dev" 2464 | } 2465 | }, 2466 | "autoload": { 2467 | "psr-4": { 2468 | "phpDocumentor\\Reflection\\": "src/" 2469 | } 2470 | }, 2471 | "notification-url": "https://packagist.org/downloads/", 2472 | "license": [ 2473 | "MIT" 2474 | ], 2475 | "authors": [ 2476 | { 2477 | "name": "Jaap van Otterdijk", 2478 | "email": "opensource@ijaap.nl" 2479 | } 2480 | ], 2481 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 2482 | "homepage": "http://www.phpdoc.org", 2483 | "keywords": [ 2484 | "FQSEN", 2485 | "phpDocumentor", 2486 | "phpdoc", 2487 | "reflection", 2488 | "static analysis" 2489 | ], 2490 | "time": "2018-08-07T13:53:10+00:00" 2491 | }, 2492 | { 2493 | "name": "phpdocumentor/reflection-docblock", 2494 | "version": "4.3.2", 2495 | "source": { 2496 | "type": "git", 2497 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 2498 | "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e" 2499 | }, 2500 | "dist": { 2501 | "type": "zip", 2502 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e", 2503 | "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e", 2504 | "shasum": "" 2505 | }, 2506 | "require": { 2507 | "php": "^7.0", 2508 | "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", 2509 | "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", 2510 | "webmozart/assert": "^1.0" 2511 | }, 2512 | "require-dev": { 2513 | "doctrine/instantiator": "^1.0.5", 2514 | "mockery/mockery": "^1.0", 2515 | "phpunit/phpunit": "^6.4" 2516 | }, 2517 | "type": "library", 2518 | "extra": { 2519 | "branch-alias": { 2520 | "dev-master": "4.x-dev" 2521 | } 2522 | }, 2523 | "autoload": { 2524 | "psr-4": { 2525 | "phpDocumentor\\Reflection\\": [ 2526 | "src/" 2527 | ] 2528 | } 2529 | }, 2530 | "notification-url": "https://packagist.org/downloads/", 2531 | "license": [ 2532 | "MIT" 2533 | ], 2534 | "authors": [ 2535 | { 2536 | "name": "Mike van Riel", 2537 | "email": "me@mikevanriel.com" 2538 | } 2539 | ], 2540 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 2541 | "time": "2019-09-12T14:27:41+00:00" 2542 | }, 2543 | { 2544 | "name": "phpdocumentor/type-resolver", 2545 | "version": "1.0.1", 2546 | "source": { 2547 | "type": "git", 2548 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 2549 | "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" 2550 | }, 2551 | "dist": { 2552 | "type": "zip", 2553 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", 2554 | "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", 2555 | "shasum": "" 2556 | }, 2557 | "require": { 2558 | "php": "^7.1", 2559 | "phpdocumentor/reflection-common": "^2.0" 2560 | }, 2561 | "require-dev": { 2562 | "ext-tokenizer": "^7.1", 2563 | "mockery/mockery": "~1", 2564 | "phpunit/phpunit": "^7.0" 2565 | }, 2566 | "type": "library", 2567 | "extra": { 2568 | "branch-alias": { 2569 | "dev-master": "1.x-dev" 2570 | } 2571 | }, 2572 | "autoload": { 2573 | "psr-4": { 2574 | "phpDocumentor\\Reflection\\": "src" 2575 | } 2576 | }, 2577 | "notification-url": "https://packagist.org/downloads/", 2578 | "license": [ 2579 | "MIT" 2580 | ], 2581 | "authors": [ 2582 | { 2583 | "name": "Mike van Riel", 2584 | "email": "me@mikevanriel.com" 2585 | } 2586 | ], 2587 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 2588 | "time": "2019-08-22T18:11:29+00:00" 2589 | }, 2590 | { 2591 | "name": "phpspec/prophecy", 2592 | "version": "1.8.1", 2593 | "source": { 2594 | "type": "git", 2595 | "url": "https://github.com/phpspec/prophecy.git", 2596 | "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" 2597 | }, 2598 | "dist": { 2599 | "type": "zip", 2600 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", 2601 | "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", 2602 | "shasum": "" 2603 | }, 2604 | "require": { 2605 | "doctrine/instantiator": "^1.0.2", 2606 | "php": "^5.3|^7.0", 2607 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", 2608 | "sebastian/comparator": "^1.1|^2.0|^3.0", 2609 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 2610 | }, 2611 | "require-dev": { 2612 | "phpspec/phpspec": "^2.5|^3.2", 2613 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" 2614 | }, 2615 | "type": "library", 2616 | "extra": { 2617 | "branch-alias": { 2618 | "dev-master": "1.8.x-dev" 2619 | } 2620 | }, 2621 | "autoload": { 2622 | "psr-4": { 2623 | "Prophecy\\": "src/Prophecy" 2624 | } 2625 | }, 2626 | "notification-url": "https://packagist.org/downloads/", 2627 | "license": [ 2628 | "MIT" 2629 | ], 2630 | "authors": [ 2631 | { 2632 | "name": "Konstantin Kudryashov", 2633 | "email": "ever.zet@gmail.com", 2634 | "homepage": "http://everzet.com" 2635 | }, 2636 | { 2637 | "name": "Marcello Duarte", 2638 | "email": "marcello.duarte@gmail.com" 2639 | } 2640 | ], 2641 | "description": "Highly opinionated mocking framework for PHP 5.3+", 2642 | "homepage": "https://github.com/phpspec/prophecy", 2643 | "keywords": [ 2644 | "Double", 2645 | "Dummy", 2646 | "fake", 2647 | "mock", 2648 | "spy", 2649 | "stub" 2650 | ], 2651 | "time": "2019-06-13T12:50:23+00:00" 2652 | }, 2653 | { 2654 | "name": "phpstan/phpdoc-parser", 2655 | "version": "0.3.5", 2656 | "source": { 2657 | "type": "git", 2658 | "url": "https://github.com/phpstan/phpdoc-parser.git", 2659 | "reference": "8c4ef2aefd9788238897b678a985e1d5c8df6db4" 2660 | }, 2661 | "dist": { 2662 | "type": "zip", 2663 | "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/8c4ef2aefd9788238897b678a985e1d5c8df6db4", 2664 | "reference": "8c4ef2aefd9788238897b678a985e1d5c8df6db4", 2665 | "shasum": "" 2666 | }, 2667 | "require": { 2668 | "php": "~7.1" 2669 | }, 2670 | "require-dev": { 2671 | "consistence/coding-standard": "^3.5", 2672 | "jakub-onderka/php-parallel-lint": "^0.9.2", 2673 | "phing/phing": "^2.16.0", 2674 | "phpstan/phpstan": "^0.10", 2675 | "phpunit/phpunit": "^6.3", 2676 | "slevomat/coding-standard": "^4.7.2", 2677 | "squizlabs/php_codesniffer": "^3.3.2", 2678 | "symfony/process": "^3.4 || ^4.0" 2679 | }, 2680 | "type": "library", 2681 | "extra": { 2682 | "branch-alias": { 2683 | "dev-master": "0.3-dev" 2684 | } 2685 | }, 2686 | "autoload": { 2687 | "psr-4": { 2688 | "PHPStan\\PhpDocParser\\": [ 2689 | "src/" 2690 | ] 2691 | } 2692 | }, 2693 | "notification-url": "https://packagist.org/downloads/", 2694 | "license": [ 2695 | "MIT" 2696 | ], 2697 | "description": "PHPDoc parser with support for nullable, intersection and generic types", 2698 | "time": "2019-06-07T19:13:52+00:00" 2699 | }, 2700 | { 2701 | "name": "phpstan/phpstan", 2702 | "version": "0.10.8", 2703 | "source": { 2704 | "type": "git", 2705 | "url": "https://github.com/phpstan/phpstan.git", 2706 | "reference": "4f828460a0276180da76c670a0a6e592e7c38b71" 2707 | }, 2708 | "dist": { 2709 | "type": "zip", 2710 | "url": "https://api.github.com/repos/phpstan/phpstan/zipball/4f828460a0276180da76c670a0a6e592e7c38b71", 2711 | "reference": "4f828460a0276180da76c670a0a6e592e7c38b71", 2712 | "shasum": "" 2713 | }, 2714 | "require": { 2715 | "composer/xdebug-handler": "^1.3.0", 2716 | "jean85/pretty-package-versions": "^1.0.3", 2717 | "nette/bootstrap": "^2.4 || ^3.0", 2718 | "nette/di": "^2.4.7 || ^3.0", 2719 | "nette/robot-loader": "^3.0.1", 2720 | "nette/utils": "^2.4.5 || ^3.0", 2721 | "nikic/php-parser": "^4.0.2", 2722 | "php": "~7.1", 2723 | "phpstan/phpdoc-parser": "^0.3", 2724 | "symfony/console": "~3.2 || ~4.0", 2725 | "symfony/finder": "~3.2 || ~4.0" 2726 | }, 2727 | "conflict": { 2728 | "symfony/console": "3.4.16 || 4.1.5" 2729 | }, 2730 | "require-dev": { 2731 | "brianium/paratest": "^2.0", 2732 | "consistence/coding-standard": "^3.5", 2733 | "dealerdirect/phpcodesniffer-composer-installer": "^0.4.4", 2734 | "ext-gd": "*", 2735 | "ext-intl": "*", 2736 | "ext-mysqli": "*", 2737 | "ext-zip": "*", 2738 | "jakub-onderka/php-parallel-lint": "^1.0", 2739 | "localheinz/composer-normalize": "~0.9.0", 2740 | "phing/phing": "^2.16.0", 2741 | "phpstan/phpstan-deprecation-rules": "^0.10.2", 2742 | "phpstan/phpstan-php-parser": "^0.10", 2743 | "phpstan/phpstan-phpunit": "^0.10", 2744 | "phpstan/phpstan-strict-rules": "^0.10", 2745 | "phpunit/phpunit": "^7.0", 2746 | "slevomat/coding-standard": "^4.7.2", 2747 | "squizlabs/php_codesniffer": "^3.3.2" 2748 | }, 2749 | "bin": [ 2750 | "bin/phpstan" 2751 | ], 2752 | "type": "library", 2753 | "extra": { 2754 | "branch-alias": { 2755 | "dev-master": "0.10-dev" 2756 | } 2757 | }, 2758 | "autoload": { 2759 | "psr-4": { 2760 | "PHPStan\\": [ 2761 | "src/", 2762 | "build/PHPStan" 2763 | ] 2764 | } 2765 | }, 2766 | "notification-url": "https://packagist.org/downloads/", 2767 | "license": [ 2768 | "MIT" 2769 | ], 2770 | "description": "PHPStan - PHP Static Analysis Tool", 2771 | "time": "2019-01-08T09:51:19+00:00" 2772 | }, 2773 | { 2774 | "name": "phpunit/php-code-coverage", 2775 | "version": "6.1.4", 2776 | "source": { 2777 | "type": "git", 2778 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 2779 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" 2780 | }, 2781 | "dist": { 2782 | "type": "zip", 2783 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", 2784 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", 2785 | "shasum": "" 2786 | }, 2787 | "require": { 2788 | "ext-dom": "*", 2789 | "ext-xmlwriter": "*", 2790 | "php": "^7.1", 2791 | "phpunit/php-file-iterator": "^2.0", 2792 | "phpunit/php-text-template": "^1.2.1", 2793 | "phpunit/php-token-stream": "^3.0", 2794 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 2795 | "sebastian/environment": "^3.1 || ^4.0", 2796 | "sebastian/version": "^2.0.1", 2797 | "theseer/tokenizer": "^1.1" 2798 | }, 2799 | "require-dev": { 2800 | "phpunit/phpunit": "^7.0" 2801 | }, 2802 | "suggest": { 2803 | "ext-xdebug": "^2.6.0" 2804 | }, 2805 | "type": "library", 2806 | "extra": { 2807 | "branch-alias": { 2808 | "dev-master": "6.1-dev" 2809 | } 2810 | }, 2811 | "autoload": { 2812 | "classmap": [ 2813 | "src/" 2814 | ] 2815 | }, 2816 | "notification-url": "https://packagist.org/downloads/", 2817 | "license": [ 2818 | "BSD-3-Clause" 2819 | ], 2820 | "authors": [ 2821 | { 2822 | "name": "Sebastian Bergmann", 2823 | "role": "lead", 2824 | "email": "sebastian@phpunit.de" 2825 | } 2826 | ], 2827 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 2828 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 2829 | "keywords": [ 2830 | "coverage", 2831 | "testing", 2832 | "xunit" 2833 | ], 2834 | "time": "2018-10-31T16:06:48+00:00" 2835 | }, 2836 | { 2837 | "name": "phpunit/php-file-iterator", 2838 | "version": "2.0.2", 2839 | "source": { 2840 | "type": "git", 2841 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 2842 | "reference": "050bedf145a257b1ff02746c31894800e5122946" 2843 | }, 2844 | "dist": { 2845 | "type": "zip", 2846 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", 2847 | "reference": "050bedf145a257b1ff02746c31894800e5122946", 2848 | "shasum": "" 2849 | }, 2850 | "require": { 2851 | "php": "^7.1" 2852 | }, 2853 | "require-dev": { 2854 | "phpunit/phpunit": "^7.1" 2855 | }, 2856 | "type": "library", 2857 | "extra": { 2858 | "branch-alias": { 2859 | "dev-master": "2.0.x-dev" 2860 | } 2861 | }, 2862 | "autoload": { 2863 | "classmap": [ 2864 | "src/" 2865 | ] 2866 | }, 2867 | "notification-url": "https://packagist.org/downloads/", 2868 | "license": [ 2869 | "BSD-3-Clause" 2870 | ], 2871 | "authors": [ 2872 | { 2873 | "name": "Sebastian Bergmann", 2874 | "role": "lead", 2875 | "email": "sebastian@phpunit.de" 2876 | } 2877 | ], 2878 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 2879 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 2880 | "keywords": [ 2881 | "filesystem", 2882 | "iterator" 2883 | ], 2884 | "time": "2018-09-13T20:33:42+00:00" 2885 | }, 2886 | { 2887 | "name": "phpunit/php-text-template", 2888 | "version": "1.2.1", 2889 | "source": { 2890 | "type": "git", 2891 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 2892 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 2893 | }, 2894 | "dist": { 2895 | "type": "zip", 2896 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 2897 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 2898 | "shasum": "" 2899 | }, 2900 | "require": { 2901 | "php": ">=5.3.3" 2902 | }, 2903 | "type": "library", 2904 | "autoload": { 2905 | "classmap": [ 2906 | "src/" 2907 | ] 2908 | }, 2909 | "notification-url": "https://packagist.org/downloads/", 2910 | "license": [ 2911 | "BSD-3-Clause" 2912 | ], 2913 | "authors": [ 2914 | { 2915 | "name": "Sebastian Bergmann", 2916 | "role": "lead", 2917 | "email": "sebastian@phpunit.de" 2918 | } 2919 | ], 2920 | "description": "Simple template engine.", 2921 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 2922 | "keywords": [ 2923 | "template" 2924 | ], 2925 | "time": "2015-06-21T13:50:34+00:00" 2926 | }, 2927 | { 2928 | "name": "phpunit/php-timer", 2929 | "version": "2.1.2", 2930 | "source": { 2931 | "type": "git", 2932 | "url": "https://github.com/sebastianbergmann/php-timer.git", 2933 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" 2934 | }, 2935 | "dist": { 2936 | "type": "zip", 2937 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", 2938 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", 2939 | "shasum": "" 2940 | }, 2941 | "require": { 2942 | "php": "^7.1" 2943 | }, 2944 | "require-dev": { 2945 | "phpunit/phpunit": "^7.0" 2946 | }, 2947 | "type": "library", 2948 | "extra": { 2949 | "branch-alias": { 2950 | "dev-master": "2.1-dev" 2951 | } 2952 | }, 2953 | "autoload": { 2954 | "classmap": [ 2955 | "src/" 2956 | ] 2957 | }, 2958 | "notification-url": "https://packagist.org/downloads/", 2959 | "license": [ 2960 | "BSD-3-Clause" 2961 | ], 2962 | "authors": [ 2963 | { 2964 | "name": "Sebastian Bergmann", 2965 | "role": "lead", 2966 | "email": "sebastian@phpunit.de" 2967 | } 2968 | ], 2969 | "description": "Utility class for timing", 2970 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 2971 | "keywords": [ 2972 | "timer" 2973 | ], 2974 | "time": "2019-06-07T04:22:29+00:00" 2975 | }, 2976 | { 2977 | "name": "phpunit/php-token-stream", 2978 | "version": "3.1.1", 2979 | "source": { 2980 | "type": "git", 2981 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 2982 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" 2983 | }, 2984 | "dist": { 2985 | "type": "zip", 2986 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", 2987 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", 2988 | "shasum": "" 2989 | }, 2990 | "require": { 2991 | "ext-tokenizer": "*", 2992 | "php": "^7.1" 2993 | }, 2994 | "require-dev": { 2995 | "phpunit/phpunit": "^7.0" 2996 | }, 2997 | "type": "library", 2998 | "extra": { 2999 | "branch-alias": { 3000 | "dev-master": "3.1-dev" 3001 | } 3002 | }, 3003 | "autoload": { 3004 | "classmap": [ 3005 | "src/" 3006 | ] 3007 | }, 3008 | "notification-url": "https://packagist.org/downloads/", 3009 | "license": [ 3010 | "BSD-3-Clause" 3011 | ], 3012 | "authors": [ 3013 | { 3014 | "name": "Sebastian Bergmann", 3015 | "email": "sebastian@phpunit.de" 3016 | } 3017 | ], 3018 | "description": "Wrapper around PHP's tokenizer extension.", 3019 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 3020 | "keywords": [ 3021 | "tokenizer" 3022 | ], 3023 | "time": "2019-09-17T06:23:10+00:00" 3024 | }, 3025 | { 3026 | "name": "phpunit/phpunit", 3027 | "version": "7.5.16", 3028 | "source": { 3029 | "type": "git", 3030 | "url": "https://github.com/sebastianbergmann/phpunit.git", 3031 | "reference": "316afa6888d2562e04aeb67ea7f2017a0eb41661" 3032 | }, 3033 | "dist": { 3034 | "type": "zip", 3035 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/316afa6888d2562e04aeb67ea7f2017a0eb41661", 3036 | "reference": "316afa6888d2562e04aeb67ea7f2017a0eb41661", 3037 | "shasum": "" 3038 | }, 3039 | "require": { 3040 | "doctrine/instantiator": "^1.1", 3041 | "ext-dom": "*", 3042 | "ext-json": "*", 3043 | "ext-libxml": "*", 3044 | "ext-mbstring": "*", 3045 | "ext-xml": "*", 3046 | "myclabs/deep-copy": "^1.7", 3047 | "phar-io/manifest": "^1.0.2", 3048 | "phar-io/version": "^2.0", 3049 | "php": "^7.1", 3050 | "phpspec/prophecy": "^1.7", 3051 | "phpunit/php-code-coverage": "^6.0.7", 3052 | "phpunit/php-file-iterator": "^2.0.1", 3053 | "phpunit/php-text-template": "^1.2.1", 3054 | "phpunit/php-timer": "^2.1", 3055 | "sebastian/comparator": "^3.0", 3056 | "sebastian/diff": "^3.0", 3057 | "sebastian/environment": "^4.0", 3058 | "sebastian/exporter": "^3.1", 3059 | "sebastian/global-state": "^2.0", 3060 | "sebastian/object-enumerator": "^3.0.3", 3061 | "sebastian/resource-operations": "^2.0", 3062 | "sebastian/version": "^2.0.1" 3063 | }, 3064 | "conflict": { 3065 | "phpunit/phpunit-mock-objects": "*" 3066 | }, 3067 | "require-dev": { 3068 | "ext-pdo": "*" 3069 | }, 3070 | "suggest": { 3071 | "ext-soap": "*", 3072 | "ext-xdebug": "*", 3073 | "phpunit/php-invoker": "^2.0" 3074 | }, 3075 | "bin": [ 3076 | "phpunit" 3077 | ], 3078 | "type": "library", 3079 | "extra": { 3080 | "branch-alias": { 3081 | "dev-master": "7.5-dev" 3082 | } 3083 | }, 3084 | "autoload": { 3085 | "classmap": [ 3086 | "src/" 3087 | ] 3088 | }, 3089 | "notification-url": "https://packagist.org/downloads/", 3090 | "license": [ 3091 | "BSD-3-Clause" 3092 | ], 3093 | "authors": [ 3094 | { 3095 | "name": "Sebastian Bergmann", 3096 | "email": "sebastian@phpunit.de", 3097 | "role": "lead" 3098 | } 3099 | ], 3100 | "description": "The PHP Unit Testing framework.", 3101 | "homepage": "https://phpunit.de/", 3102 | "keywords": [ 3103 | "phpunit", 3104 | "testing", 3105 | "xunit" 3106 | ], 3107 | "time": "2019-09-14T09:08:39+00:00" 3108 | }, 3109 | { 3110 | "name": "sebastian/code-unit-reverse-lookup", 3111 | "version": "1.0.1", 3112 | "source": { 3113 | "type": "git", 3114 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 3115 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 3116 | }, 3117 | "dist": { 3118 | "type": "zip", 3119 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 3120 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 3121 | "shasum": "" 3122 | }, 3123 | "require": { 3124 | "php": "^5.6 || ^7.0" 3125 | }, 3126 | "require-dev": { 3127 | "phpunit/phpunit": "^5.7 || ^6.0" 3128 | }, 3129 | "type": "library", 3130 | "extra": { 3131 | "branch-alias": { 3132 | "dev-master": "1.0.x-dev" 3133 | } 3134 | }, 3135 | "autoload": { 3136 | "classmap": [ 3137 | "src/" 3138 | ] 3139 | }, 3140 | "notification-url": "https://packagist.org/downloads/", 3141 | "license": [ 3142 | "BSD-3-Clause" 3143 | ], 3144 | "authors": [ 3145 | { 3146 | "name": "Sebastian Bergmann", 3147 | "email": "sebastian@phpunit.de" 3148 | } 3149 | ], 3150 | "description": "Looks up which function or method a line of code belongs to", 3151 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 3152 | "time": "2017-03-04T06:30:41+00:00" 3153 | }, 3154 | { 3155 | "name": "sebastian/comparator", 3156 | "version": "3.0.2", 3157 | "source": { 3158 | "type": "git", 3159 | "url": "https://github.com/sebastianbergmann/comparator.git", 3160 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" 3161 | }, 3162 | "dist": { 3163 | "type": "zip", 3164 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 3165 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 3166 | "shasum": "" 3167 | }, 3168 | "require": { 3169 | "php": "^7.1", 3170 | "sebastian/diff": "^3.0", 3171 | "sebastian/exporter": "^3.1" 3172 | }, 3173 | "require-dev": { 3174 | "phpunit/phpunit": "^7.1" 3175 | }, 3176 | "type": "library", 3177 | "extra": { 3178 | "branch-alias": { 3179 | "dev-master": "3.0-dev" 3180 | } 3181 | }, 3182 | "autoload": { 3183 | "classmap": [ 3184 | "src/" 3185 | ] 3186 | }, 3187 | "notification-url": "https://packagist.org/downloads/", 3188 | "license": [ 3189 | "BSD-3-Clause" 3190 | ], 3191 | "authors": [ 3192 | { 3193 | "name": "Jeff Welch", 3194 | "email": "whatthejeff@gmail.com" 3195 | }, 3196 | { 3197 | "name": "Volker Dusch", 3198 | "email": "github@wallbash.com" 3199 | }, 3200 | { 3201 | "name": "Bernhard Schussek", 3202 | "email": "bschussek@2bepublished.at" 3203 | }, 3204 | { 3205 | "name": "Sebastian Bergmann", 3206 | "email": "sebastian@phpunit.de" 3207 | } 3208 | ], 3209 | "description": "Provides the functionality to compare PHP values for equality", 3210 | "homepage": "https://github.com/sebastianbergmann/comparator", 3211 | "keywords": [ 3212 | "comparator", 3213 | "compare", 3214 | "equality" 3215 | ], 3216 | "time": "2018-07-12T15:12:46+00:00" 3217 | }, 3218 | { 3219 | "name": "sebastian/diff", 3220 | "version": "3.0.2", 3221 | "source": { 3222 | "type": "git", 3223 | "url": "https://github.com/sebastianbergmann/diff.git", 3224 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" 3225 | }, 3226 | "dist": { 3227 | "type": "zip", 3228 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 3229 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 3230 | "shasum": "" 3231 | }, 3232 | "require": { 3233 | "php": "^7.1" 3234 | }, 3235 | "require-dev": { 3236 | "phpunit/phpunit": "^7.5 || ^8.0", 3237 | "symfony/process": "^2 || ^3.3 || ^4" 3238 | }, 3239 | "type": "library", 3240 | "extra": { 3241 | "branch-alias": { 3242 | "dev-master": "3.0-dev" 3243 | } 3244 | }, 3245 | "autoload": { 3246 | "classmap": [ 3247 | "src/" 3248 | ] 3249 | }, 3250 | "notification-url": "https://packagist.org/downloads/", 3251 | "license": [ 3252 | "BSD-3-Clause" 3253 | ], 3254 | "authors": [ 3255 | { 3256 | "name": "Kore Nordmann", 3257 | "email": "mail@kore-nordmann.de" 3258 | }, 3259 | { 3260 | "name": "Sebastian Bergmann", 3261 | "email": "sebastian@phpunit.de" 3262 | } 3263 | ], 3264 | "description": "Diff implementation", 3265 | "homepage": "https://github.com/sebastianbergmann/diff", 3266 | "keywords": [ 3267 | "diff", 3268 | "udiff", 3269 | "unidiff", 3270 | "unified diff" 3271 | ], 3272 | "time": "2019-02-04T06:01:07+00:00" 3273 | }, 3274 | { 3275 | "name": "sebastian/environment", 3276 | "version": "4.2.2", 3277 | "source": { 3278 | "type": "git", 3279 | "url": "https://github.com/sebastianbergmann/environment.git", 3280 | "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404" 3281 | }, 3282 | "dist": { 3283 | "type": "zip", 3284 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/f2a2c8e1c97c11ace607a7a667d73d47c19fe404", 3285 | "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404", 3286 | "shasum": "" 3287 | }, 3288 | "require": { 3289 | "php": "^7.1" 3290 | }, 3291 | "require-dev": { 3292 | "phpunit/phpunit": "^7.5" 3293 | }, 3294 | "suggest": { 3295 | "ext-posix": "*" 3296 | }, 3297 | "type": "library", 3298 | "extra": { 3299 | "branch-alias": { 3300 | "dev-master": "4.2-dev" 3301 | } 3302 | }, 3303 | "autoload": { 3304 | "classmap": [ 3305 | "src/" 3306 | ] 3307 | }, 3308 | "notification-url": "https://packagist.org/downloads/", 3309 | "license": [ 3310 | "BSD-3-Clause" 3311 | ], 3312 | "authors": [ 3313 | { 3314 | "name": "Sebastian Bergmann", 3315 | "email": "sebastian@phpunit.de" 3316 | } 3317 | ], 3318 | "description": "Provides functionality to handle HHVM/PHP environments", 3319 | "homepage": "http://www.github.com/sebastianbergmann/environment", 3320 | "keywords": [ 3321 | "Xdebug", 3322 | "environment", 3323 | "hhvm" 3324 | ], 3325 | "time": "2019-05-05T09:05:15+00:00" 3326 | }, 3327 | { 3328 | "name": "sebastian/exporter", 3329 | "version": "3.1.2", 3330 | "source": { 3331 | "type": "git", 3332 | "url": "https://github.com/sebastianbergmann/exporter.git", 3333 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" 3334 | }, 3335 | "dist": { 3336 | "type": "zip", 3337 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", 3338 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", 3339 | "shasum": "" 3340 | }, 3341 | "require": { 3342 | "php": "^7.0", 3343 | "sebastian/recursion-context": "^3.0" 3344 | }, 3345 | "require-dev": { 3346 | "ext-mbstring": "*", 3347 | "phpunit/phpunit": "^6.0" 3348 | }, 3349 | "type": "library", 3350 | "extra": { 3351 | "branch-alias": { 3352 | "dev-master": "3.1.x-dev" 3353 | } 3354 | }, 3355 | "autoload": { 3356 | "classmap": [ 3357 | "src/" 3358 | ] 3359 | }, 3360 | "notification-url": "https://packagist.org/downloads/", 3361 | "license": [ 3362 | "BSD-3-Clause" 3363 | ], 3364 | "authors": [ 3365 | { 3366 | "name": "Sebastian Bergmann", 3367 | "email": "sebastian@phpunit.de" 3368 | }, 3369 | { 3370 | "name": "Jeff Welch", 3371 | "email": "whatthejeff@gmail.com" 3372 | }, 3373 | { 3374 | "name": "Volker Dusch", 3375 | "email": "github@wallbash.com" 3376 | }, 3377 | { 3378 | "name": "Adam Harvey", 3379 | "email": "aharvey@php.net" 3380 | }, 3381 | { 3382 | "name": "Bernhard Schussek", 3383 | "email": "bschussek@gmail.com" 3384 | } 3385 | ], 3386 | "description": "Provides the functionality to export PHP variables for visualization", 3387 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 3388 | "keywords": [ 3389 | "export", 3390 | "exporter" 3391 | ], 3392 | "time": "2019-09-14T09:02:43+00:00" 3393 | }, 3394 | { 3395 | "name": "sebastian/global-state", 3396 | "version": "2.0.0", 3397 | "source": { 3398 | "type": "git", 3399 | "url": "https://github.com/sebastianbergmann/global-state.git", 3400 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" 3401 | }, 3402 | "dist": { 3403 | "type": "zip", 3404 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 3405 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 3406 | "shasum": "" 3407 | }, 3408 | "require": { 3409 | "php": "^7.0" 3410 | }, 3411 | "require-dev": { 3412 | "phpunit/phpunit": "^6.0" 3413 | }, 3414 | "suggest": { 3415 | "ext-uopz": "*" 3416 | }, 3417 | "type": "library", 3418 | "extra": { 3419 | "branch-alias": { 3420 | "dev-master": "2.0-dev" 3421 | } 3422 | }, 3423 | "autoload": { 3424 | "classmap": [ 3425 | "src/" 3426 | ] 3427 | }, 3428 | "notification-url": "https://packagist.org/downloads/", 3429 | "license": [ 3430 | "BSD-3-Clause" 3431 | ], 3432 | "authors": [ 3433 | { 3434 | "name": "Sebastian Bergmann", 3435 | "email": "sebastian@phpunit.de" 3436 | } 3437 | ], 3438 | "description": "Snapshotting of global state", 3439 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 3440 | "keywords": [ 3441 | "global state" 3442 | ], 3443 | "time": "2017-04-27T15:39:26+00:00" 3444 | }, 3445 | { 3446 | "name": "sebastian/object-enumerator", 3447 | "version": "3.0.3", 3448 | "source": { 3449 | "type": "git", 3450 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 3451 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 3452 | }, 3453 | "dist": { 3454 | "type": "zip", 3455 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", 3456 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 3457 | "shasum": "" 3458 | }, 3459 | "require": { 3460 | "php": "^7.0", 3461 | "sebastian/object-reflector": "^1.1.1", 3462 | "sebastian/recursion-context": "^3.0" 3463 | }, 3464 | "require-dev": { 3465 | "phpunit/phpunit": "^6.0" 3466 | }, 3467 | "type": "library", 3468 | "extra": { 3469 | "branch-alias": { 3470 | "dev-master": "3.0.x-dev" 3471 | } 3472 | }, 3473 | "autoload": { 3474 | "classmap": [ 3475 | "src/" 3476 | ] 3477 | }, 3478 | "notification-url": "https://packagist.org/downloads/", 3479 | "license": [ 3480 | "BSD-3-Clause" 3481 | ], 3482 | "authors": [ 3483 | { 3484 | "name": "Sebastian Bergmann", 3485 | "email": "sebastian@phpunit.de" 3486 | } 3487 | ], 3488 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 3489 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 3490 | "time": "2017-08-03T12:35:26+00:00" 3491 | }, 3492 | { 3493 | "name": "sebastian/object-reflector", 3494 | "version": "1.1.1", 3495 | "source": { 3496 | "type": "git", 3497 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 3498 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 3499 | }, 3500 | "dist": { 3501 | "type": "zip", 3502 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 3503 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 3504 | "shasum": "" 3505 | }, 3506 | "require": { 3507 | "php": "^7.0" 3508 | }, 3509 | "require-dev": { 3510 | "phpunit/phpunit": "^6.0" 3511 | }, 3512 | "type": "library", 3513 | "extra": { 3514 | "branch-alias": { 3515 | "dev-master": "1.1-dev" 3516 | } 3517 | }, 3518 | "autoload": { 3519 | "classmap": [ 3520 | "src/" 3521 | ] 3522 | }, 3523 | "notification-url": "https://packagist.org/downloads/", 3524 | "license": [ 3525 | "BSD-3-Clause" 3526 | ], 3527 | "authors": [ 3528 | { 3529 | "name": "Sebastian Bergmann", 3530 | "email": "sebastian@phpunit.de" 3531 | } 3532 | ], 3533 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 3534 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 3535 | "time": "2017-03-29T09:07:27+00:00" 3536 | }, 3537 | { 3538 | "name": "sebastian/recursion-context", 3539 | "version": "3.0.0", 3540 | "source": { 3541 | "type": "git", 3542 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 3543 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 3544 | }, 3545 | "dist": { 3546 | "type": "zip", 3547 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 3548 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 3549 | "shasum": "" 3550 | }, 3551 | "require": { 3552 | "php": "^7.0" 3553 | }, 3554 | "require-dev": { 3555 | "phpunit/phpunit": "^6.0" 3556 | }, 3557 | "type": "library", 3558 | "extra": { 3559 | "branch-alias": { 3560 | "dev-master": "3.0.x-dev" 3561 | } 3562 | }, 3563 | "autoload": { 3564 | "classmap": [ 3565 | "src/" 3566 | ] 3567 | }, 3568 | "notification-url": "https://packagist.org/downloads/", 3569 | "license": [ 3570 | "BSD-3-Clause" 3571 | ], 3572 | "authors": [ 3573 | { 3574 | "name": "Jeff Welch", 3575 | "email": "whatthejeff@gmail.com" 3576 | }, 3577 | { 3578 | "name": "Sebastian Bergmann", 3579 | "email": "sebastian@phpunit.de" 3580 | }, 3581 | { 3582 | "name": "Adam Harvey", 3583 | "email": "aharvey@php.net" 3584 | } 3585 | ], 3586 | "description": "Provides functionality to recursively process PHP variables", 3587 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 3588 | "time": "2017-03-03T06:23:57+00:00" 3589 | }, 3590 | { 3591 | "name": "sebastian/resource-operations", 3592 | "version": "2.0.1", 3593 | "source": { 3594 | "type": "git", 3595 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 3596 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" 3597 | }, 3598 | "dist": { 3599 | "type": "zip", 3600 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 3601 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 3602 | "shasum": "" 3603 | }, 3604 | "require": { 3605 | "php": "^7.1" 3606 | }, 3607 | "type": "library", 3608 | "extra": { 3609 | "branch-alias": { 3610 | "dev-master": "2.0-dev" 3611 | } 3612 | }, 3613 | "autoload": { 3614 | "classmap": [ 3615 | "src/" 3616 | ] 3617 | }, 3618 | "notification-url": "https://packagist.org/downloads/", 3619 | "license": [ 3620 | "BSD-3-Clause" 3621 | ], 3622 | "authors": [ 3623 | { 3624 | "name": "Sebastian Bergmann", 3625 | "email": "sebastian@phpunit.de" 3626 | } 3627 | ], 3628 | "description": "Provides a list of PHP built-in functions that operate on resources", 3629 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 3630 | "time": "2018-10-04T04:07:39+00:00" 3631 | }, 3632 | { 3633 | "name": "sebastian/version", 3634 | "version": "2.0.1", 3635 | "source": { 3636 | "type": "git", 3637 | "url": "https://github.com/sebastianbergmann/version.git", 3638 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 3639 | }, 3640 | "dist": { 3641 | "type": "zip", 3642 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 3643 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 3644 | "shasum": "" 3645 | }, 3646 | "require": { 3647 | "php": ">=5.6" 3648 | }, 3649 | "type": "library", 3650 | "extra": { 3651 | "branch-alias": { 3652 | "dev-master": "2.0.x-dev" 3653 | } 3654 | }, 3655 | "autoload": { 3656 | "classmap": [ 3657 | "src/" 3658 | ] 3659 | }, 3660 | "notification-url": "https://packagist.org/downloads/", 3661 | "license": [ 3662 | "BSD-3-Clause" 3663 | ], 3664 | "authors": [ 3665 | { 3666 | "name": "Sebastian Bergmann", 3667 | "role": "lead", 3668 | "email": "sebastian@phpunit.de" 3669 | } 3670 | ], 3671 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 3672 | "homepage": "https://github.com/sebastianbergmann/version", 3673 | "time": "2016-10-03T07:35:21+00:00" 3674 | }, 3675 | { 3676 | "name": "squizlabs/php_codesniffer", 3677 | "version": "3.4.2", 3678 | "source": { 3679 | "type": "git", 3680 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", 3681 | "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8" 3682 | }, 3683 | "dist": { 3684 | "type": "zip", 3685 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", 3686 | "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", 3687 | "shasum": "" 3688 | }, 3689 | "require": { 3690 | "ext-simplexml": "*", 3691 | "ext-tokenizer": "*", 3692 | "ext-xmlwriter": "*", 3693 | "php": ">=5.4.0" 3694 | }, 3695 | "require-dev": { 3696 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" 3697 | }, 3698 | "bin": [ 3699 | "bin/phpcs", 3700 | "bin/phpcbf" 3701 | ], 3702 | "type": "library", 3703 | "extra": { 3704 | "branch-alias": { 3705 | "dev-master": "3.x-dev" 3706 | } 3707 | }, 3708 | "notification-url": "https://packagist.org/downloads/", 3709 | "license": [ 3710 | "BSD-3-Clause" 3711 | ], 3712 | "authors": [ 3713 | { 3714 | "name": "Greg Sherwood", 3715 | "role": "lead" 3716 | } 3717 | ], 3718 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 3719 | "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", 3720 | "keywords": [ 3721 | "phpcs", 3722 | "standards" 3723 | ], 3724 | "time": "2019-04-10T23:49:02+00:00" 3725 | }, 3726 | { 3727 | "name": "symfony/console", 3728 | "version": "v4.3.4", 3729 | "source": { 3730 | "type": "git", 3731 | "url": "https://github.com/symfony/console.git", 3732 | "reference": "de63799239b3881b8a08f8481b22348f77ed7b36" 3733 | }, 3734 | "dist": { 3735 | "type": "zip", 3736 | "url": "https://api.github.com/repos/symfony/console/zipball/de63799239b3881b8a08f8481b22348f77ed7b36", 3737 | "reference": "de63799239b3881b8a08f8481b22348f77ed7b36", 3738 | "shasum": "" 3739 | }, 3740 | "require": { 3741 | "php": "^7.1.3", 3742 | "symfony/polyfill-mbstring": "~1.0", 3743 | "symfony/polyfill-php73": "^1.8", 3744 | "symfony/service-contracts": "^1.1" 3745 | }, 3746 | "conflict": { 3747 | "symfony/dependency-injection": "<3.4", 3748 | "symfony/event-dispatcher": "<4.3", 3749 | "symfony/process": "<3.3" 3750 | }, 3751 | "provide": { 3752 | "psr/log-implementation": "1.0" 3753 | }, 3754 | "require-dev": { 3755 | "psr/log": "~1.0", 3756 | "symfony/config": "~3.4|~4.0", 3757 | "symfony/dependency-injection": "~3.4|~4.0", 3758 | "symfony/event-dispatcher": "^4.3", 3759 | "symfony/lock": "~3.4|~4.0", 3760 | "symfony/process": "~3.4|~4.0", 3761 | "symfony/var-dumper": "^4.3" 3762 | }, 3763 | "suggest": { 3764 | "psr/log": "For using the console logger", 3765 | "symfony/event-dispatcher": "", 3766 | "symfony/lock": "", 3767 | "symfony/process": "" 3768 | }, 3769 | "type": "library", 3770 | "extra": { 3771 | "branch-alias": { 3772 | "dev-master": "4.3-dev" 3773 | } 3774 | }, 3775 | "autoload": { 3776 | "psr-4": { 3777 | "Symfony\\Component\\Console\\": "" 3778 | }, 3779 | "exclude-from-classmap": [ 3780 | "/Tests/" 3781 | ] 3782 | }, 3783 | "notification-url": "https://packagist.org/downloads/", 3784 | "license": [ 3785 | "MIT" 3786 | ], 3787 | "authors": [ 3788 | { 3789 | "name": "Fabien Potencier", 3790 | "email": "fabien@symfony.com" 3791 | }, 3792 | { 3793 | "name": "Symfony Community", 3794 | "homepage": "https://symfony.com/contributors" 3795 | } 3796 | ], 3797 | "description": "Symfony Console Component", 3798 | "homepage": "https://symfony.com", 3799 | "time": "2019-08-26T08:26:39+00:00" 3800 | }, 3801 | { 3802 | "name": "symfony/service-contracts", 3803 | "version": "v1.1.6", 3804 | "source": { 3805 | "type": "git", 3806 | "url": "https://github.com/symfony/service-contracts.git", 3807 | "reference": "ea7263d6b6d5f798b56a45a5b8d686725f2719a3" 3808 | }, 3809 | "dist": { 3810 | "type": "zip", 3811 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/ea7263d6b6d5f798b56a45a5b8d686725f2719a3", 3812 | "reference": "ea7263d6b6d5f798b56a45a5b8d686725f2719a3", 3813 | "shasum": "" 3814 | }, 3815 | "require": { 3816 | "php": "^7.1.3", 3817 | "psr/container": "^1.0" 3818 | }, 3819 | "suggest": { 3820 | "symfony/service-implementation": "" 3821 | }, 3822 | "type": "library", 3823 | "extra": { 3824 | "branch-alias": { 3825 | "dev-master": "1.1-dev" 3826 | } 3827 | }, 3828 | "autoload": { 3829 | "psr-4": { 3830 | "Symfony\\Contracts\\Service\\": "" 3831 | } 3832 | }, 3833 | "notification-url": "https://packagist.org/downloads/", 3834 | "license": [ 3835 | "MIT" 3836 | ], 3837 | "authors": [ 3838 | { 3839 | "name": "Nicolas Grekas", 3840 | "email": "p@tchwork.com" 3841 | }, 3842 | { 3843 | "name": "Symfony Community", 3844 | "homepage": "https://symfony.com/contributors" 3845 | } 3846 | ], 3847 | "description": "Generic abstractions related to writing services", 3848 | "homepage": "https://symfony.com", 3849 | "keywords": [ 3850 | "abstractions", 3851 | "contracts", 3852 | "decoupling", 3853 | "interfaces", 3854 | "interoperability", 3855 | "standards" 3856 | ], 3857 | "time": "2019-08-20T14:44:19+00:00" 3858 | }, 3859 | { 3860 | "name": "theseer/tokenizer", 3861 | "version": "1.1.3", 3862 | "source": { 3863 | "type": "git", 3864 | "url": "https://github.com/theseer/tokenizer.git", 3865 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" 3866 | }, 3867 | "dist": { 3868 | "type": "zip", 3869 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 3870 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 3871 | "shasum": "" 3872 | }, 3873 | "require": { 3874 | "ext-dom": "*", 3875 | "ext-tokenizer": "*", 3876 | "ext-xmlwriter": "*", 3877 | "php": "^7.0" 3878 | }, 3879 | "type": "library", 3880 | "autoload": { 3881 | "classmap": [ 3882 | "src/" 3883 | ] 3884 | }, 3885 | "notification-url": "https://packagist.org/downloads/", 3886 | "license": [ 3887 | "BSD-3-Clause" 3888 | ], 3889 | "authors": [ 3890 | { 3891 | "name": "Arne Blankerts", 3892 | "email": "arne@blankerts.de", 3893 | "role": "Developer" 3894 | } 3895 | ], 3896 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 3897 | "time": "2019-06-13T22:48:21+00:00" 3898 | }, 3899 | { 3900 | "name": "webmozart/assert", 3901 | "version": "1.5.0", 3902 | "source": { 3903 | "type": "git", 3904 | "url": "https://github.com/webmozart/assert.git", 3905 | "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" 3906 | }, 3907 | "dist": { 3908 | "type": "zip", 3909 | "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", 3910 | "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", 3911 | "shasum": "" 3912 | }, 3913 | "require": { 3914 | "php": "^5.3.3 || ^7.0", 3915 | "symfony/polyfill-ctype": "^1.8" 3916 | }, 3917 | "require-dev": { 3918 | "phpunit/phpunit": "^4.8.36 || ^7.5.13" 3919 | }, 3920 | "type": "library", 3921 | "extra": { 3922 | "branch-alias": { 3923 | "dev-master": "1.3-dev" 3924 | } 3925 | }, 3926 | "autoload": { 3927 | "psr-4": { 3928 | "Webmozart\\Assert\\": "src/" 3929 | } 3930 | }, 3931 | "notification-url": "https://packagist.org/downloads/", 3932 | "license": [ 3933 | "MIT" 3934 | ], 3935 | "authors": [ 3936 | { 3937 | "name": "Bernhard Schussek", 3938 | "email": "bschussek@gmail.com" 3939 | } 3940 | ], 3941 | "description": "Assertions to validate method input/output with nice error messages.", 3942 | "keywords": [ 3943 | "assert", 3944 | "check", 3945 | "validate" 3946 | ], 3947 | "time": "2019-08-24T08:43:50+00:00" 3948 | } 3949 | ], 3950 | "aliases": [], 3951 | "minimum-stability": "stable", 3952 | "stability-flags": [], 3953 | "prefer-stable": false, 3954 | "prefer-lowest": false, 3955 | "platform": [], 3956 | "platform-dev": [] 3957 | } 3958 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | ./tests 18 | 19 | 20 | 21 | 22 | ./src 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/BaseFilters.php: -------------------------------------------------------------------------------- 1 | request = $request; 44 | $this->functions = new Collection(); 45 | $this->globals = []; 46 | } 47 | 48 | /** 49 | * Applies respective filter methods declared in the subclass 50 | * that correspond to fields in request query parameters. 51 | * 52 | * @param \Illuminate\Database\Eloquent\Builder $builder 53 | * @param array $extraFilters 54 | * @return \Illuminate\Database\Eloquent\Builder 55 | */ 56 | public function apply(Builder $builder, array $extraFilters = null):Builder 57 | { 58 | $this->builder = $builder; 59 | 60 | $filters = $extraFilters ? array_merge($this->filters(), $extraFilters) : $this->filters(); 61 | 62 | foreach ($filters as $name => $value) { 63 | if (! method_exists($this, $name)) { 64 | continue; 65 | } 66 | if (isset($value)) { 67 | $this->$name($value); 68 | } else { 69 | $this->$name(); 70 | } 71 | } 72 | return $this->builder; 73 | } 74 | 75 | /** 76 | * Gets filters from request query parameters. 77 | * 78 | * @return array 79 | */ 80 | public function filters():array 81 | { 82 | return array_merge($this->request->all(), $this->globals); 83 | } 84 | 85 | /** 86 | * Registers queries for relations. 87 | * 88 | * @param \Closure $function 89 | * @return $this 90 | */ 91 | protected function defer(\Closure $function) 92 | { 93 | $this->functions->push($function); 94 | return $this; 95 | } 96 | 97 | 98 | /** Decorates \Illuminate\Database\Eloquent\Model with 99 | * query results from registered queries 100 | * for one or more model relations. 101 | * 102 | * @param \Illuminate\Database\Eloquent\Model $model 103 | * @return \Illuminate\Database\Eloquent\Model 104 | */ 105 | public function transform(Model $model) 106 | { 107 | return $this->functions->reduce(function ($model, $function) { 108 | return $function($model); 109 | }, $model); 110 | } 111 | 112 | /** 113 | * Adds a filter programmatically 114 | * 115 | * @param string $name 116 | * @param string $value|null 117 | * @return $this 118 | */ 119 | public function add(string $name, ?string $value = null) 120 | { 121 | $this->globals[$name] = $value; 122 | return $this; 123 | } 124 | 125 | public function request() { 126 | return $this->request; 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /src/Traits/FilterableTrait.php: -------------------------------------------------------------------------------- 1 | apply($query, $extraFilters); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tests/BaseFiltersTest.php: -------------------------------------------------------------------------------- 1 | subject = $this->subject(); 17 | } 18 | 19 | 20 | public function testFilters() 21 | { 22 | $filters = $this->subject->filters(); 23 | $this->assertSame($filters, $this->requestParameters); 24 | } 25 | 26 | public function testRelationQuery() 27 | { 28 | $this->subject->add('withFoo', 'baz')->filters(); 29 | $this->subject->apply($this->createMock(Builder::class)); 30 | $mock = $this->createMock(Model::class); 31 | $mock->expects($this->exactly(1)) 32 | ->method('setAttribute') 33 | ->with('foo', 'baz'); 34 | $this->subject->transform($mock); 35 | } 36 | 37 | public function testAddWhenValueOfRequestQueryParameterIsString() 38 | { 39 | $filters = $this->subject->add('foo', 'blas')->filters(); 40 | $this->assertSame($filters, ['foo' => 'blas', 'bar'=>'baz']); 41 | } 42 | 43 | public function testAddWhenValueOfRequestQueryParameterIsNull() 44 | { 45 | $filters = $this->subject->add('foo')->filters(); 46 | $this->assertSame($filters, ['foo' => null, 'bar'=>'baz']); 47 | } 48 | } -------------------------------------------------------------------------------- /tests/FakeBaseFilters.php: -------------------------------------------------------------------------------- 1 | builder->where('foo', '=', $value); 12 | } 13 | 14 | public function bar($value) 15 | { 16 | $this->builder->where('bar', '=', $value); 17 | } 18 | 19 | public function baz($value) 20 | { 21 | $this->builder->where('baz', '=', $value); 22 | } 23 | 24 | public function withFoo($value) 25 | { 26 | $this->defer(function ($obj) use ($value) { 27 | $obj->setAttribute('foo', $value); 28 | return $obj; 29 | }); 30 | } 31 | } -------------------------------------------------------------------------------- /tests/FilterableTraitTest.php: -------------------------------------------------------------------------------- 1 | subject = $this->subject(); 18 | } 19 | 20 | public function testScopeFilterMethod() 21 | { 22 | $mockTrait = $this->getMockForTrait(FilterableTrait::class); 23 | $mockQuery = $this->createMock(Builder::class); 24 | 25 | $mockQuery->expects($this->exactly(2)) 26 | ->method('where') 27 | ->withConsecutive( 28 | [$this->equalTo('foo'), $this->equalTo('='), $this->equalTo('bar'), $this->equalTo('and')], 29 | [$this->equalTo('bar'), $this->equalTo('='), $this->equalTo('baz'), $this->equalTo('and')] 30 | ); 31 | 32 | $result = $mockTrait->scopeFilter($mockQuery, $this->subject); 33 | } 34 | 35 | public function testScopeFilterWithExtraFiltersMethod() 36 | { 37 | $mockTrait = $this->getMockForTrait(FilterableTrait::class); 38 | $mockQuery = $this->createMock(Builder::class); 39 | 40 | $mockQuery->expects($this->exactly(3)) 41 | ->method('where') 42 | ->withConsecutive( 43 | [$this->equalTo('foo'), $this->equalTo('='), $this->equalTo('bar'), $this->equalTo('and')], 44 | [$this->equalTo('bar'), $this->equalTo('='), $this->equalTo('baz'), $this->equalTo('and')], 45 | [$this->equalTo('baz'), $this->equalTo('='), $this->equalTo('bas'), $this->equalTo('and')] 46 | ); 47 | 48 | $result = $mockTrait->scopeFilter($mockQuery, $this->subject, ['baz' => 'bas']); 49 | 50 | } 51 | } -------------------------------------------------------------------------------- /tests/SubjectTrait.php: -------------------------------------------------------------------------------- 1 | 'bar', 'bar' => 'baz']; 11 | 12 | private function subject() 13 | { 14 | $stub = $this->createMock(Request::class); 15 | 16 | $stub->expects($this->any())->method('all') 17 | ->willReturn($this->requestParameters); 18 | 19 | return new FakeBaseFilters($stub); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 |