├── .gitignore ├── README.md ├── _config.yml ├── composer.json ├── composer.lock ├── config └── press.php ├── database ├── factories │ └── PostFactory.php └── migrations │ └── 2018_11_01_000000_create_posts_table.php ├── phpunit.xml ├── resources └── views │ └── test.blade.php ├── routes └── web.php ├── src ├── Console │ ├── ProcessCommand.php │ └── stubs │ │ └── PressServiceProvider.stub ├── Drivers │ ├── Driver.php │ └── FileDriver.php ├── Exceptions │ └── FileDriverDirectoryNotFoundException.php ├── Facades │ └── Press.php ├── Fields │ ├── Body.php │ ├── Date.php │ ├── Description.php │ ├── Extra.php │ ├── FieldContract.php │ └── Title.php ├── Http │ └── Controllers │ │ └── TestController.php ├── MarkdownParser.php ├── Post.php ├── Press.php ├── PressBaseServiceProvider.php ├── PressFileParser.php └── Repositories │ └── PostRepository.php └── tests ├── Feature ├── MarkdownTest.php ├── PressFileParserTest.php └── SavePostsTest.php ├── TestCase.php └── blogs └── MarkFile1.md /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/hot 3 | /public/storage 4 | /storage/*.key 5 | /vendor 6 | /.idea 7 | /.vscode 8 | /nbproject 9 | /.vagrant 10 | Homestead.json 11 | Homestead.yaml 12 | npm-debug.log 13 | yarn-error.log 14 | .env 15 | .phpunit.result.cache -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Press 2 | An elegant markdown-powered blog for the Laravel framework. 3 | 4 | # Install 5 | 6 | Add these lines to your `composer.json` file 7 | 8 | ```json 9 | { 10 | "require": { 11 | "vicgonvt/press": "dev-master" 12 | }, 13 | "repositories": [ 14 | { 15 | "type": "git", 16 | "url": "https://github.com/vicgonvt/press.git" 17 | } 18 | ] 19 | } 20 | ``` 21 | 22 | And then in the terminal, run the following command. 23 | 24 | `composer update` 25 | 26 | ### Migrate Database 27 | 28 | Now that we have our package installed, we need to migrate the database to add the necessary tables for Press. In the command line, run the following command. 29 | 30 | `php artisan migrate` 31 | 32 | ### Publish the package config 33 | 34 | Up next, you need to publish the package's config file that includes some defaults for us. To publish that, run the following command. 35 | 36 | `php artisan vendor:publish --tag=press-config` 37 | 38 | You will now find the config file located in `/config/press.php` 39 | 40 | ### Create directory to hold posts 41 | 42 | The last step in the installation, is to create a directory for your markdown files that Press will use to turn into your blog posts. By default, it is just a directory in the root directory of your project called `blogs`. You may change that in the config file we published in the previous step. 43 | 44 | `mkdir blogs` 45 | 46 | ### Sample Post 47 | 48 | To create your first post, here's a sample markdown file to get you started. Copy and paste it into a `.md` file in your blogs diretory. 49 | 50 | ``` 51 | --- 52 | title: My First Blog Post 53 | description: This is my very first blog post with Press 54 | --- 55 | 56 | # Extra Extra Extra! 57 | 58 | You are now a blogger! 59 | ``` 60 | 61 | # Course 62 | This repo holds is the source code for the Laravel Package Development course found here - https://coderstape.com/series/1-laravel-package-development 63 | 64 | # In Progress 65 | 66 | Be warned, this source code and course is for educational purposes only and may not be production ready. Use at your own risk. 67 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-minimal -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vicgonvt/press", 3 | "description": "An elegant markdown-powered blog for the Laravel framework.", 4 | "license": "MIT", 5 | "authors": [ 6 | { 7 | "name": "Victor Gonzalez", 8 | "email": "vicgonvt@gmail.com" 9 | } 10 | ], 11 | "require": { 12 | "erusev/parsedown": "^1.7", 13 | "php": "^7.0", 14 | "ext-json": "*" 15 | }, 16 | "require-dev": { 17 | "orchestra/testbench": "^3.7", 18 | "mockery/mockery": "^1.2" 19 | }, 20 | "autoload": { 21 | "psr-4": { 22 | "vicgonvt\\Press\\": "src/" 23 | } 24 | }, 25 | "autoload-dev": { 26 | "psr-4": { 27 | "vicgonvt\\Press\\Tests\\": "tests/" 28 | } 29 | }, 30 | "extra": { 31 | "laravel": { 32 | "providers": [ 33 | "vicgonvt\\Press\\PressBaseServiceProvider" 34 | ] 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /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": "05a0dd0b96ca94e9b76c7506fe5a456a", 8 | "packages": [ 9 | { 10 | "name": "erusev/parsedown", 11 | "version": "1.7.1", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/erusev/parsedown.git", 15 | "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", 20 | "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "ext-mbstring": "*", 25 | "php": ">=5.3.0" 26 | }, 27 | "require-dev": { 28 | "phpunit/phpunit": "^4.8.35" 29 | }, 30 | "type": "library", 31 | "autoload": { 32 | "psr-0": { 33 | "Parsedown": "" 34 | } 35 | }, 36 | "notification-url": "https://packagist.org/downloads/", 37 | "license": [ 38 | "MIT" 39 | ], 40 | "authors": [ 41 | { 42 | "name": "Emanuil Rusev", 43 | "email": "hello@erusev.com", 44 | "homepage": "http://erusev.com" 45 | } 46 | ], 47 | "description": "Parser for Markdown.", 48 | "homepage": "http://parsedown.org", 49 | "keywords": [ 50 | "markdown", 51 | "parser" 52 | ], 53 | "time": "2018-03-08T01:11:30+00:00" 54 | } 55 | ], 56 | "packages-dev": [ 57 | { 58 | "name": "doctrine/inflector", 59 | "version": "v1.3.0", 60 | "source": { 61 | "type": "git", 62 | "url": "https://github.com/doctrine/inflector.git", 63 | "reference": "5527a48b7313d15261292c149e55e26eae771b0a" 64 | }, 65 | "dist": { 66 | "type": "zip", 67 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", 68 | "reference": "5527a48b7313d15261292c149e55e26eae771b0a", 69 | "shasum": "" 70 | }, 71 | "require": { 72 | "php": "^7.1" 73 | }, 74 | "require-dev": { 75 | "phpunit/phpunit": "^6.2" 76 | }, 77 | "type": "library", 78 | "extra": { 79 | "branch-alias": { 80 | "dev-master": "1.3.x-dev" 81 | } 82 | }, 83 | "autoload": { 84 | "psr-4": { 85 | "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" 86 | } 87 | }, 88 | "notification-url": "https://packagist.org/downloads/", 89 | "license": [ 90 | "MIT" 91 | ], 92 | "authors": [ 93 | { 94 | "name": "Roman Borschel", 95 | "email": "roman@code-factory.org" 96 | }, 97 | { 98 | "name": "Benjamin Eberlei", 99 | "email": "kontakt@beberlei.de" 100 | }, 101 | { 102 | "name": "Guilherme Blanco", 103 | "email": "guilhermeblanco@gmail.com" 104 | }, 105 | { 106 | "name": "Jonathan Wage", 107 | "email": "jonwage@gmail.com" 108 | }, 109 | { 110 | "name": "Johannes Schmitt", 111 | "email": "schmittjoh@gmail.com" 112 | } 113 | ], 114 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 115 | "homepage": "http://www.doctrine-project.org", 116 | "keywords": [ 117 | "inflection", 118 | "pluralize", 119 | "singularize", 120 | "string" 121 | ], 122 | "time": "2018-01-09T20:05:19+00:00" 123 | }, 124 | { 125 | "name": "doctrine/instantiator", 126 | "version": "1.1.0", 127 | "source": { 128 | "type": "git", 129 | "url": "https://github.com/doctrine/instantiator.git", 130 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" 131 | }, 132 | "dist": { 133 | "type": "zip", 134 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", 135 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", 136 | "shasum": "" 137 | }, 138 | "require": { 139 | "php": "^7.1" 140 | }, 141 | "require-dev": { 142 | "athletic/athletic": "~0.1.8", 143 | "ext-pdo": "*", 144 | "ext-phar": "*", 145 | "phpunit/phpunit": "^6.2.3", 146 | "squizlabs/php_codesniffer": "^3.0.2" 147 | }, 148 | "type": "library", 149 | "extra": { 150 | "branch-alias": { 151 | "dev-master": "1.2.x-dev" 152 | } 153 | }, 154 | "autoload": { 155 | "psr-4": { 156 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 157 | } 158 | }, 159 | "notification-url": "https://packagist.org/downloads/", 160 | "license": [ 161 | "MIT" 162 | ], 163 | "authors": [ 164 | { 165 | "name": "Marco Pivetta", 166 | "email": "ocramius@gmail.com", 167 | "homepage": "http://ocramius.github.com/" 168 | } 169 | ], 170 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 171 | "homepage": "https://github.com/doctrine/instantiator", 172 | "keywords": [ 173 | "constructor", 174 | "instantiate" 175 | ], 176 | "time": "2017-07-22T11:58:36+00:00" 177 | }, 178 | { 179 | "name": "doctrine/lexer", 180 | "version": "v1.0.1", 181 | "source": { 182 | "type": "git", 183 | "url": "https://github.com/doctrine/lexer.git", 184 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" 185 | }, 186 | "dist": { 187 | "type": "zip", 188 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", 189 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", 190 | "shasum": "" 191 | }, 192 | "require": { 193 | "php": ">=5.3.2" 194 | }, 195 | "type": "library", 196 | "extra": { 197 | "branch-alias": { 198 | "dev-master": "1.0.x-dev" 199 | } 200 | }, 201 | "autoload": { 202 | "psr-0": { 203 | "Doctrine\\Common\\Lexer\\": "lib/" 204 | } 205 | }, 206 | "notification-url": "https://packagist.org/downloads/", 207 | "license": [ 208 | "MIT" 209 | ], 210 | "authors": [ 211 | { 212 | "name": "Roman Borschel", 213 | "email": "roman@code-factory.org" 214 | }, 215 | { 216 | "name": "Guilherme Blanco", 217 | "email": "guilhermeblanco@gmail.com" 218 | }, 219 | { 220 | "name": "Johannes Schmitt", 221 | "email": "schmittjoh@gmail.com" 222 | } 223 | ], 224 | "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", 225 | "homepage": "http://www.doctrine-project.org", 226 | "keywords": [ 227 | "lexer", 228 | "parser" 229 | ], 230 | "time": "2014-09-09T13:34:57+00:00" 231 | }, 232 | { 233 | "name": "dragonmantank/cron-expression", 234 | "version": "v2.2.0", 235 | "source": { 236 | "type": "git", 237 | "url": "https://github.com/dragonmantank/cron-expression.git", 238 | "reference": "92a2c3768d50e21a1f26a53cb795ce72806266c5" 239 | }, 240 | "dist": { 241 | "type": "zip", 242 | "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/92a2c3768d50e21a1f26a53cb795ce72806266c5", 243 | "reference": "92a2c3768d50e21a1f26a53cb795ce72806266c5", 244 | "shasum": "" 245 | }, 246 | "require": { 247 | "php": ">=7.0.0" 248 | }, 249 | "require-dev": { 250 | "phpunit/phpunit": "~6.4" 251 | }, 252 | "type": "library", 253 | "autoload": { 254 | "psr-4": { 255 | "Cron\\": "src/Cron/" 256 | } 257 | }, 258 | "notification-url": "https://packagist.org/downloads/", 259 | "license": [ 260 | "MIT" 261 | ], 262 | "authors": [ 263 | { 264 | "name": "Michael Dowling", 265 | "email": "mtdowling@gmail.com", 266 | "homepage": "https://github.com/mtdowling" 267 | }, 268 | { 269 | "name": "Chris Tankersley", 270 | "email": "chris@ctankersley.com", 271 | "homepage": "https://github.com/dragonmantank" 272 | } 273 | ], 274 | "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", 275 | "keywords": [ 276 | "cron", 277 | "schedule" 278 | ], 279 | "time": "2018-06-06T03:12:17+00:00" 280 | }, 281 | { 282 | "name": "egulias/email-validator", 283 | "version": "2.1.7", 284 | "source": { 285 | "type": "git", 286 | "url": "https://github.com/egulias/EmailValidator.git", 287 | "reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e" 288 | }, 289 | "dist": { 290 | "type": "zip", 291 | "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/709f21f92707308cdf8f9bcfa1af4cb26586521e", 292 | "reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e", 293 | "shasum": "" 294 | }, 295 | "require": { 296 | "doctrine/lexer": "^1.0.1", 297 | "php": ">= 5.5" 298 | }, 299 | "require-dev": { 300 | "dominicsayers/isemail": "dev-master", 301 | "phpunit/phpunit": "^4.8.35||^5.7||^6.0", 302 | "satooshi/php-coveralls": "^1.0.1" 303 | }, 304 | "suggest": { 305 | "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" 306 | }, 307 | "type": "library", 308 | "extra": { 309 | "branch-alias": { 310 | "dev-master": "2.0.x-dev" 311 | } 312 | }, 313 | "autoload": { 314 | "psr-4": { 315 | "Egulias\\EmailValidator\\": "EmailValidator" 316 | } 317 | }, 318 | "notification-url": "https://packagist.org/downloads/", 319 | "license": [ 320 | "MIT" 321 | ], 322 | "authors": [ 323 | { 324 | "name": "Eduardo Gulias Davis" 325 | } 326 | ], 327 | "description": "A library for validating emails against several RFCs", 328 | "homepage": "https://github.com/egulias/EmailValidator", 329 | "keywords": [ 330 | "email", 331 | "emailvalidation", 332 | "emailvalidator", 333 | "validation", 334 | "validator" 335 | ], 336 | "time": "2018-12-04T22:38:24+00:00" 337 | }, 338 | { 339 | "name": "fzaninotto/faker", 340 | "version": "v1.8.0", 341 | "source": { 342 | "type": "git", 343 | "url": "https://github.com/fzaninotto/Faker.git", 344 | "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de" 345 | }, 346 | "dist": { 347 | "type": "zip", 348 | "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de", 349 | "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de", 350 | "shasum": "" 351 | }, 352 | "require": { 353 | "php": "^5.3.3 || ^7.0" 354 | }, 355 | "require-dev": { 356 | "ext-intl": "*", 357 | "phpunit/phpunit": "^4.8.35 || ^5.7", 358 | "squizlabs/php_codesniffer": "^1.5" 359 | }, 360 | "type": "library", 361 | "extra": { 362 | "branch-alias": { 363 | "dev-master": "1.8-dev" 364 | } 365 | }, 366 | "autoload": { 367 | "psr-4": { 368 | "Faker\\": "src/Faker/" 369 | } 370 | }, 371 | "notification-url": "https://packagist.org/downloads/", 372 | "license": [ 373 | "MIT" 374 | ], 375 | "authors": [ 376 | { 377 | "name": "François Zaninotto" 378 | } 379 | ], 380 | "description": "Faker is a PHP library that generates fake data for you.", 381 | "keywords": [ 382 | "data", 383 | "faker", 384 | "fixtures" 385 | ], 386 | "time": "2018-07-12T10:23:15+00:00" 387 | }, 388 | { 389 | "name": "guzzlehttp/guzzle", 390 | "version": "6.3.3", 391 | "source": { 392 | "type": "git", 393 | "url": "https://github.com/guzzle/guzzle.git", 394 | "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" 395 | }, 396 | "dist": { 397 | "type": "zip", 398 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", 399 | "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", 400 | "shasum": "" 401 | }, 402 | "require": { 403 | "guzzlehttp/promises": "^1.0", 404 | "guzzlehttp/psr7": "^1.4", 405 | "php": ">=5.5" 406 | }, 407 | "require-dev": { 408 | "ext-curl": "*", 409 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", 410 | "psr/log": "^1.0" 411 | }, 412 | "suggest": { 413 | "psr/log": "Required for using the Log middleware" 414 | }, 415 | "type": "library", 416 | "extra": { 417 | "branch-alias": { 418 | "dev-master": "6.3-dev" 419 | } 420 | }, 421 | "autoload": { 422 | "files": [ 423 | "src/functions_include.php" 424 | ], 425 | "psr-4": { 426 | "GuzzleHttp\\": "src/" 427 | } 428 | }, 429 | "notification-url": "https://packagist.org/downloads/", 430 | "license": [ 431 | "MIT" 432 | ], 433 | "authors": [ 434 | { 435 | "name": "Michael Dowling", 436 | "email": "mtdowling@gmail.com", 437 | "homepage": "https://github.com/mtdowling" 438 | } 439 | ], 440 | "description": "Guzzle is a PHP HTTP client library", 441 | "homepage": "http://guzzlephp.org/", 442 | "keywords": [ 443 | "client", 444 | "curl", 445 | "framework", 446 | "http", 447 | "http client", 448 | "rest", 449 | "web service" 450 | ], 451 | "time": "2018-04-22T15:46:56+00:00" 452 | }, 453 | { 454 | "name": "guzzlehttp/promises", 455 | "version": "v1.3.1", 456 | "source": { 457 | "type": "git", 458 | "url": "https://github.com/guzzle/promises.git", 459 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" 460 | }, 461 | "dist": { 462 | "type": "zip", 463 | "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", 464 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", 465 | "shasum": "" 466 | }, 467 | "require": { 468 | "php": ">=5.5.0" 469 | }, 470 | "require-dev": { 471 | "phpunit/phpunit": "^4.0" 472 | }, 473 | "type": "library", 474 | "extra": { 475 | "branch-alias": { 476 | "dev-master": "1.4-dev" 477 | } 478 | }, 479 | "autoload": { 480 | "psr-4": { 481 | "GuzzleHttp\\Promise\\": "src/" 482 | }, 483 | "files": [ 484 | "src/functions_include.php" 485 | ] 486 | }, 487 | "notification-url": "https://packagist.org/downloads/", 488 | "license": [ 489 | "MIT" 490 | ], 491 | "authors": [ 492 | { 493 | "name": "Michael Dowling", 494 | "email": "mtdowling@gmail.com", 495 | "homepage": "https://github.com/mtdowling" 496 | } 497 | ], 498 | "description": "Guzzle promises library", 499 | "keywords": [ 500 | "promise" 501 | ], 502 | "time": "2016-12-20T10:07:11+00:00" 503 | }, 504 | { 505 | "name": "guzzlehttp/psr7", 506 | "version": "1.5.2", 507 | "source": { 508 | "type": "git", 509 | "url": "https://github.com/guzzle/psr7.git", 510 | "reference": "9f83dded91781a01c63574e387eaa769be769115" 511 | }, 512 | "dist": { 513 | "type": "zip", 514 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", 515 | "reference": "9f83dded91781a01c63574e387eaa769be769115", 516 | "shasum": "" 517 | }, 518 | "require": { 519 | "php": ">=5.4.0", 520 | "psr/http-message": "~1.0", 521 | "ralouphie/getallheaders": "^2.0.5" 522 | }, 523 | "provide": { 524 | "psr/http-message-implementation": "1.0" 525 | }, 526 | "require-dev": { 527 | "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" 528 | }, 529 | "type": "library", 530 | "extra": { 531 | "branch-alias": { 532 | "dev-master": "1.5-dev" 533 | } 534 | }, 535 | "autoload": { 536 | "psr-4": { 537 | "GuzzleHttp\\Psr7\\": "src/" 538 | }, 539 | "files": [ 540 | "src/functions_include.php" 541 | ] 542 | }, 543 | "notification-url": "https://packagist.org/downloads/", 544 | "license": [ 545 | "MIT" 546 | ], 547 | "authors": [ 548 | { 549 | "name": "Michael Dowling", 550 | "email": "mtdowling@gmail.com", 551 | "homepage": "https://github.com/mtdowling" 552 | }, 553 | { 554 | "name": "Tobias Schultze", 555 | "homepage": "https://github.com/Tobion" 556 | } 557 | ], 558 | "description": "PSR-7 message implementation that also provides common utility methods", 559 | "keywords": [ 560 | "http", 561 | "message", 562 | "psr-7", 563 | "request", 564 | "response", 565 | "stream", 566 | "uri", 567 | "url" 568 | ], 569 | "time": "2018-12-04T20:46:45+00:00" 570 | }, 571 | { 572 | "name": "hamcrest/hamcrest-php", 573 | "version": "v2.0.0", 574 | "source": { 575 | "type": "git", 576 | "url": "https://github.com/hamcrest/hamcrest-php.git", 577 | "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" 578 | }, 579 | "dist": { 580 | "type": "zip", 581 | "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", 582 | "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", 583 | "shasum": "" 584 | }, 585 | "require": { 586 | "php": "^5.3|^7.0" 587 | }, 588 | "replace": { 589 | "cordoval/hamcrest-php": "*", 590 | "davedevelopment/hamcrest-php": "*", 591 | "kodova/hamcrest-php": "*" 592 | }, 593 | "require-dev": { 594 | "phpunit/php-file-iterator": "1.3.3", 595 | "phpunit/phpunit": "~4.0", 596 | "satooshi/php-coveralls": "^1.0" 597 | }, 598 | "type": "library", 599 | "extra": { 600 | "branch-alias": { 601 | "dev-master": "2.0-dev" 602 | } 603 | }, 604 | "autoload": { 605 | "classmap": [ 606 | "hamcrest" 607 | ] 608 | }, 609 | "notification-url": "https://packagist.org/downloads/", 610 | "license": [ 611 | "BSD" 612 | ], 613 | "description": "This is the PHP port of Hamcrest Matchers", 614 | "keywords": [ 615 | "test" 616 | ], 617 | "time": "2016-01-20T08:20:44+00:00" 618 | }, 619 | { 620 | "name": "laravel/framework", 621 | "version": "v5.7.17", 622 | "source": { 623 | "type": "git", 624 | "url": "https://github.com/laravel/framework.git", 625 | "reference": "a15898e2de5f5ae5548a09349c558ef0435d495a" 626 | }, 627 | "dist": { 628 | "type": "zip", 629 | "url": "https://api.github.com/repos/laravel/framework/zipball/a15898e2de5f5ae5548a09349c558ef0435d495a", 630 | "reference": "a15898e2de5f5ae5548a09349c558ef0435d495a", 631 | "shasum": "" 632 | }, 633 | "require": { 634 | "doctrine/inflector": "^1.1", 635 | "dragonmantank/cron-expression": "^2.0", 636 | "erusev/parsedown": "^1.7", 637 | "ext-mbstring": "*", 638 | "ext-openssl": "*", 639 | "laravel/nexmo-notification-channel": "^1.0", 640 | "laravel/slack-notification-channel": "^1.0", 641 | "league/flysystem": "^1.0.8", 642 | "monolog/monolog": "^1.12", 643 | "nesbot/carbon": "^1.26.3", 644 | "opis/closure": "^3.1", 645 | "php": "^7.1.3", 646 | "psr/container": "^1.0", 647 | "psr/simple-cache": "^1.0", 648 | "ramsey/uuid": "^3.7", 649 | "swiftmailer/swiftmailer": "^6.0", 650 | "symfony/console": "^4.1", 651 | "symfony/debug": "^4.1", 652 | "symfony/finder": "^4.1", 653 | "symfony/http-foundation": "^4.1", 654 | "symfony/http-kernel": "^4.1", 655 | "symfony/process": "^4.1", 656 | "symfony/routing": "^4.1", 657 | "symfony/var-dumper": "^4.1", 658 | "tijsverkoyen/css-to-inline-styles": "^2.2.1", 659 | "vlucas/phpdotenv": "^2.2" 660 | }, 661 | "conflict": { 662 | "tightenco/collect": "<5.5.33" 663 | }, 664 | "replace": { 665 | "illuminate/auth": "self.version", 666 | "illuminate/broadcasting": "self.version", 667 | "illuminate/bus": "self.version", 668 | "illuminate/cache": "self.version", 669 | "illuminate/config": "self.version", 670 | "illuminate/console": "self.version", 671 | "illuminate/container": "self.version", 672 | "illuminate/contracts": "self.version", 673 | "illuminate/cookie": "self.version", 674 | "illuminate/database": "self.version", 675 | "illuminate/encryption": "self.version", 676 | "illuminate/events": "self.version", 677 | "illuminate/filesystem": "self.version", 678 | "illuminate/hashing": "self.version", 679 | "illuminate/http": "self.version", 680 | "illuminate/log": "self.version", 681 | "illuminate/mail": "self.version", 682 | "illuminate/notifications": "self.version", 683 | "illuminate/pagination": "self.version", 684 | "illuminate/pipeline": "self.version", 685 | "illuminate/queue": "self.version", 686 | "illuminate/redis": "self.version", 687 | "illuminate/routing": "self.version", 688 | "illuminate/session": "self.version", 689 | "illuminate/support": "self.version", 690 | "illuminate/translation": "self.version", 691 | "illuminate/validation": "self.version", 692 | "illuminate/view": "self.version" 693 | }, 694 | "require-dev": { 695 | "aws/aws-sdk-php": "^3.0", 696 | "doctrine/dbal": "^2.6", 697 | "filp/whoops": "^2.1.4", 698 | "guzzlehttp/guzzle": "^6.3", 699 | "league/flysystem-cached-adapter": "^1.0", 700 | "mockery/mockery": "^1.0", 701 | "moontoast/math": "^1.1", 702 | "orchestra/testbench-core": "3.7.*", 703 | "pda/pheanstalk": "^3.0", 704 | "phpunit/phpunit": "^7.0", 705 | "predis/predis": "^1.1.1", 706 | "symfony/css-selector": "^4.1", 707 | "symfony/dom-crawler": "^4.1", 708 | "true/punycode": "^2.1" 709 | }, 710 | "suggest": { 711 | "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", 712 | "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", 713 | "ext-pcntl": "Required to use all features of the queue worker.", 714 | "ext-posix": "Required to use all features of the queue worker.", 715 | "filp/whoops": "Required for friendly error pages in development (^2.1.4).", 716 | "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", 717 | "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", 718 | "laravel/tinker": "Required to use the tinker console command (^1.0).", 719 | "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", 720 | "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", 721 | "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", 722 | "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", 723 | "moontoast/math": "Required to use ordered UUIDs (^1.1).", 724 | "nexmo/client": "Required to use the Nexmo transport (^1.0).", 725 | "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0).", 726 | "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", 727 | "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", 728 | "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).", 729 | "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).", 730 | "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)." 731 | }, 732 | "type": "library", 733 | "extra": { 734 | "branch-alias": { 735 | "dev-master": "5.7-dev" 736 | } 737 | }, 738 | "autoload": { 739 | "files": [ 740 | "src/Illuminate/Foundation/helpers.php", 741 | "src/Illuminate/Support/helpers.php" 742 | ], 743 | "psr-4": { 744 | "Illuminate\\": "src/Illuminate/" 745 | } 746 | }, 747 | "notification-url": "https://packagist.org/downloads/", 748 | "license": [ 749 | "MIT" 750 | ], 751 | "authors": [ 752 | { 753 | "name": "Taylor Otwell", 754 | "email": "taylor@laravel.com" 755 | } 756 | ], 757 | "description": "The Laravel Framework.", 758 | "homepage": "https://laravel.com", 759 | "keywords": [ 760 | "framework", 761 | "laravel" 762 | ], 763 | "time": "2018-12-12T14:38:09+00:00" 764 | }, 765 | { 766 | "name": "laravel/nexmo-notification-channel", 767 | "version": "v1.0.1", 768 | "source": { 769 | "type": "git", 770 | "url": "https://github.com/laravel/nexmo-notification-channel.git", 771 | "reference": "03edd42a55b306ff980c9950899d5a2b03260d48" 772 | }, 773 | "dist": { 774 | "type": "zip", 775 | "url": "https://api.github.com/repos/laravel/nexmo-notification-channel/zipball/03edd42a55b306ff980c9950899d5a2b03260d48", 776 | "reference": "03edd42a55b306ff980c9950899d5a2b03260d48", 777 | "shasum": "" 778 | }, 779 | "require": { 780 | "nexmo/client": "^1.0", 781 | "php": "^7.1.3" 782 | }, 783 | "require-dev": { 784 | "illuminate/notifications": "~5.7", 785 | "mockery/mockery": "^1.0", 786 | "phpunit/phpunit": "^7.0" 787 | }, 788 | "type": "library", 789 | "extra": { 790 | "branch-alias": { 791 | "dev-master": "1.0-dev" 792 | }, 793 | "laravel": { 794 | "providers": [ 795 | "Illuminate\\Notifications\\NexmoChannelServiceProvider" 796 | ] 797 | } 798 | }, 799 | "autoload": { 800 | "psr-4": { 801 | "Illuminate\\Notifications\\": "src/" 802 | } 803 | }, 804 | "notification-url": "https://packagist.org/downloads/", 805 | "license": [ 806 | "MIT" 807 | ], 808 | "authors": [ 809 | { 810 | "name": "Taylor Otwell", 811 | "email": "taylor@laravel.com" 812 | } 813 | ], 814 | "description": "Nexmo Notification Channel for laravel.", 815 | "keywords": [ 816 | "laravel", 817 | "nexmo", 818 | "notifications" 819 | ], 820 | "time": "2018-12-04T12:57:08+00:00" 821 | }, 822 | { 823 | "name": "laravel/slack-notification-channel", 824 | "version": "v1.0.3", 825 | "source": { 826 | "type": "git", 827 | "url": "https://github.com/laravel/slack-notification-channel.git", 828 | "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9" 829 | }, 830 | "dist": { 831 | "type": "zip", 832 | "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/6e164293b754a95f246faf50ab2bbea3e4923cc9", 833 | "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9", 834 | "shasum": "" 835 | }, 836 | "require": { 837 | "guzzlehttp/guzzle": "^6.0", 838 | "php": "^7.1.3" 839 | }, 840 | "require-dev": { 841 | "illuminate/notifications": "~5.7", 842 | "mockery/mockery": "^1.0", 843 | "phpunit/phpunit": "^7.0" 844 | }, 845 | "type": "library", 846 | "extra": { 847 | "branch-alias": { 848 | "dev-master": "1.0-dev" 849 | }, 850 | "laravel": { 851 | "providers": [ 852 | "Illuminate\\Notifications\\SlackChannelServiceProvider" 853 | ] 854 | } 855 | }, 856 | "autoload": { 857 | "psr-4": { 858 | "Illuminate\\Notifications\\": "src/" 859 | } 860 | }, 861 | "notification-url": "https://packagist.org/downloads/", 862 | "license": [ 863 | "MIT" 864 | ], 865 | "authors": [ 866 | { 867 | "name": "Taylor Otwell", 868 | "email": "taylor@laravel.com" 869 | } 870 | ], 871 | "description": "Slack Notification Channel for laravel.", 872 | "keywords": [ 873 | "laravel", 874 | "notifications", 875 | "slack" 876 | ], 877 | "time": "2018-12-12T13:12:06+00:00" 878 | }, 879 | { 880 | "name": "lcobucci/jwt", 881 | "version": "3.2.5", 882 | "source": { 883 | "type": "git", 884 | "url": "https://github.com/lcobucci/jwt.git", 885 | "reference": "82be04b4753f8b7693b62852b7eab30f97524f9b" 886 | }, 887 | "dist": { 888 | "type": "zip", 889 | "url": "https://api.github.com/repos/lcobucci/jwt/zipball/82be04b4753f8b7693b62852b7eab30f97524f9b", 890 | "reference": "82be04b4753f8b7693b62852b7eab30f97524f9b", 891 | "shasum": "" 892 | }, 893 | "require": { 894 | "ext-openssl": "*", 895 | "php": ">=5.5" 896 | }, 897 | "require-dev": { 898 | "mdanter/ecc": "~0.3.1", 899 | "mikey179/vfsstream": "~1.5", 900 | "phpmd/phpmd": "~2.2", 901 | "phpunit/php-invoker": "~1.1", 902 | "phpunit/phpunit": "~4.5", 903 | "squizlabs/php_codesniffer": "~2.3" 904 | }, 905 | "suggest": { 906 | "mdanter/ecc": "Required to use Elliptic Curves based algorithms." 907 | }, 908 | "type": "library", 909 | "extra": { 910 | "branch-alias": { 911 | "dev-master": "3.1-dev" 912 | } 913 | }, 914 | "autoload": { 915 | "psr-4": { 916 | "Lcobucci\\JWT\\": "src" 917 | } 918 | }, 919 | "notification-url": "https://packagist.org/downloads/", 920 | "license": [ 921 | "BSD-3-Clause" 922 | ], 923 | "authors": [ 924 | { 925 | "name": "Luís Otávio Cobucci Oblonczyk", 926 | "email": "lcobucci@gmail.com", 927 | "role": "Developer" 928 | } 929 | ], 930 | "description": "A simple library to work with JSON Web Token and JSON Web Signature", 931 | "keywords": [ 932 | "JWS", 933 | "jwt" 934 | ], 935 | "time": "2018-11-11T12:22:26+00:00" 936 | }, 937 | { 938 | "name": "league/flysystem", 939 | "version": "1.0.49", 940 | "source": { 941 | "type": "git", 942 | "url": "https://github.com/thephpleague/flysystem.git", 943 | "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd" 944 | }, 945 | "dist": { 946 | "type": "zip", 947 | "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd", 948 | "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd", 949 | "shasum": "" 950 | }, 951 | "require": { 952 | "ext-fileinfo": "*", 953 | "php": ">=5.5.9" 954 | }, 955 | "conflict": { 956 | "league/flysystem-sftp": "<1.0.6" 957 | }, 958 | "require-dev": { 959 | "phpspec/phpspec": "^3.4", 960 | "phpunit/phpunit": "^5.7.10" 961 | }, 962 | "suggest": { 963 | "ext-fileinfo": "Required for MimeType", 964 | "ext-ftp": "Allows you to use FTP server storage", 965 | "ext-openssl": "Allows you to use FTPS server storage", 966 | "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", 967 | "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", 968 | "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", 969 | "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", 970 | "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", 971 | "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", 972 | "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", 973 | "league/flysystem-webdav": "Allows you to use WebDAV storage", 974 | "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", 975 | "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", 976 | "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" 977 | }, 978 | "type": "library", 979 | "extra": { 980 | "branch-alias": { 981 | "dev-master": "1.1-dev" 982 | } 983 | }, 984 | "autoload": { 985 | "psr-4": { 986 | "League\\Flysystem\\": "src/" 987 | } 988 | }, 989 | "notification-url": "https://packagist.org/downloads/", 990 | "license": [ 991 | "MIT" 992 | ], 993 | "authors": [ 994 | { 995 | "name": "Frank de Jonge", 996 | "email": "info@frenky.net" 997 | } 998 | ], 999 | "description": "Filesystem abstraction: Many filesystems, one API.", 1000 | "keywords": [ 1001 | "Cloud Files", 1002 | "WebDAV", 1003 | "abstraction", 1004 | "aws", 1005 | "cloud", 1006 | "copy.com", 1007 | "dropbox", 1008 | "file systems", 1009 | "files", 1010 | "filesystem", 1011 | "filesystems", 1012 | "ftp", 1013 | "rackspace", 1014 | "remote", 1015 | "s3", 1016 | "sftp", 1017 | "storage" 1018 | ], 1019 | "time": "2018-11-23T23:41:29+00:00" 1020 | }, 1021 | { 1022 | "name": "mockery/mockery", 1023 | "version": "1.2.0", 1024 | "source": { 1025 | "type": "git", 1026 | "url": "https://github.com/mockery/mockery.git", 1027 | "reference": "100633629bf76d57430b86b7098cd6beb996a35a" 1028 | }, 1029 | "dist": { 1030 | "type": "zip", 1031 | "url": "https://api.github.com/repos/mockery/mockery/zipball/100633629bf76d57430b86b7098cd6beb996a35a", 1032 | "reference": "100633629bf76d57430b86b7098cd6beb996a35a", 1033 | "shasum": "" 1034 | }, 1035 | "require": { 1036 | "hamcrest/hamcrest-php": "~2.0", 1037 | "lib-pcre": ">=7.0", 1038 | "php": ">=5.6.0" 1039 | }, 1040 | "require-dev": { 1041 | "phpunit/phpunit": "~5.7.10|~6.5|~7.0" 1042 | }, 1043 | "type": "library", 1044 | "extra": { 1045 | "branch-alias": { 1046 | "dev-master": "1.0.x-dev" 1047 | } 1048 | }, 1049 | "autoload": { 1050 | "psr-0": { 1051 | "Mockery": "library/" 1052 | } 1053 | }, 1054 | "notification-url": "https://packagist.org/downloads/", 1055 | "license": [ 1056 | "BSD-3-Clause" 1057 | ], 1058 | "authors": [ 1059 | { 1060 | "name": "Pádraic Brady", 1061 | "email": "padraic.brady@gmail.com", 1062 | "homepage": "http://blog.astrumfutura.com" 1063 | }, 1064 | { 1065 | "name": "Dave Marshall", 1066 | "email": "dave.marshall@atstsolutions.co.uk", 1067 | "homepage": "http://davedevelopment.co.uk" 1068 | } 1069 | ], 1070 | "description": "Mockery is a simple yet flexible PHP mock object framework", 1071 | "homepage": "https://github.com/mockery/mockery", 1072 | "keywords": [ 1073 | "BDD", 1074 | "TDD", 1075 | "library", 1076 | "mock", 1077 | "mock objects", 1078 | "mockery", 1079 | "stub", 1080 | "test", 1081 | "test double", 1082 | "testing" 1083 | ], 1084 | "time": "2018-10-02T21:52:37+00:00" 1085 | }, 1086 | { 1087 | "name": "monolog/monolog", 1088 | "version": "1.24.0", 1089 | "source": { 1090 | "type": "git", 1091 | "url": "https://github.com/Seldaek/monolog.git", 1092 | "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" 1093 | }, 1094 | "dist": { 1095 | "type": "zip", 1096 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", 1097 | "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", 1098 | "shasum": "" 1099 | }, 1100 | "require": { 1101 | "php": ">=5.3.0", 1102 | "psr/log": "~1.0" 1103 | }, 1104 | "provide": { 1105 | "psr/log-implementation": "1.0.0" 1106 | }, 1107 | "require-dev": { 1108 | "aws/aws-sdk-php": "^2.4.9 || ^3.0", 1109 | "doctrine/couchdb": "~1.0@dev", 1110 | "graylog2/gelf-php": "~1.0", 1111 | "jakub-onderka/php-parallel-lint": "0.9", 1112 | "php-amqplib/php-amqplib": "~2.4", 1113 | "php-console/php-console": "^3.1.3", 1114 | "phpunit/phpunit": "~4.5", 1115 | "phpunit/phpunit-mock-objects": "2.3.0", 1116 | "ruflin/elastica": ">=0.90 <3.0", 1117 | "sentry/sentry": "^0.13", 1118 | "swiftmailer/swiftmailer": "^5.3|^6.0" 1119 | }, 1120 | "suggest": { 1121 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 1122 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 1123 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 1124 | "ext-mongo": "Allow sending log messages to a MongoDB server", 1125 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 1126 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", 1127 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", 1128 | "php-console/php-console": "Allow sending log messages to Google Chrome", 1129 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 1130 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server", 1131 | "sentry/sentry": "Allow sending log messages to a Sentry server" 1132 | }, 1133 | "type": "library", 1134 | "extra": { 1135 | "branch-alias": { 1136 | "dev-master": "2.0.x-dev" 1137 | } 1138 | }, 1139 | "autoload": { 1140 | "psr-4": { 1141 | "Monolog\\": "src/Monolog" 1142 | } 1143 | }, 1144 | "notification-url": "https://packagist.org/downloads/", 1145 | "license": [ 1146 | "MIT" 1147 | ], 1148 | "authors": [ 1149 | { 1150 | "name": "Jordi Boggiano", 1151 | "email": "j.boggiano@seld.be", 1152 | "homepage": "http://seld.be" 1153 | } 1154 | ], 1155 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 1156 | "homepage": "http://github.com/Seldaek/monolog", 1157 | "keywords": [ 1158 | "log", 1159 | "logging", 1160 | "psr-3" 1161 | ], 1162 | "time": "2018-11-05T09:00:11+00:00" 1163 | }, 1164 | { 1165 | "name": "myclabs/deep-copy", 1166 | "version": "1.8.1", 1167 | "source": { 1168 | "type": "git", 1169 | "url": "https://github.com/myclabs/DeepCopy.git", 1170 | "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" 1171 | }, 1172 | "dist": { 1173 | "type": "zip", 1174 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", 1175 | "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", 1176 | "shasum": "" 1177 | }, 1178 | "require": { 1179 | "php": "^7.1" 1180 | }, 1181 | "replace": { 1182 | "myclabs/deep-copy": "self.version" 1183 | }, 1184 | "require-dev": { 1185 | "doctrine/collections": "^1.0", 1186 | "doctrine/common": "^2.6", 1187 | "phpunit/phpunit": "^7.1" 1188 | }, 1189 | "type": "library", 1190 | "autoload": { 1191 | "psr-4": { 1192 | "DeepCopy\\": "src/DeepCopy/" 1193 | }, 1194 | "files": [ 1195 | "src/DeepCopy/deep_copy.php" 1196 | ] 1197 | }, 1198 | "notification-url": "https://packagist.org/downloads/", 1199 | "license": [ 1200 | "MIT" 1201 | ], 1202 | "description": "Create deep copies (clones) of your objects", 1203 | "keywords": [ 1204 | "clone", 1205 | "copy", 1206 | "duplicate", 1207 | "object", 1208 | "object graph" 1209 | ], 1210 | "time": "2018-06-11T23:09:50+00:00" 1211 | }, 1212 | { 1213 | "name": "nesbot/carbon", 1214 | "version": "1.36.1", 1215 | "source": { 1216 | "type": "git", 1217 | "url": "https://github.com/briannesbitt/Carbon.git", 1218 | "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983" 1219 | }, 1220 | "dist": { 1221 | "type": "zip", 1222 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983", 1223 | "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983", 1224 | "shasum": "" 1225 | }, 1226 | "require": { 1227 | "php": ">=5.3.9", 1228 | "symfony/translation": "~2.6 || ~3.0 || ~4.0" 1229 | }, 1230 | "require-dev": { 1231 | "phpunit/phpunit": "^4.8.35 || ^5.7" 1232 | }, 1233 | "suggest": { 1234 | "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.", 1235 | "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors." 1236 | }, 1237 | "type": "library", 1238 | "extra": { 1239 | "laravel": { 1240 | "providers": [ 1241 | "Carbon\\Laravel\\ServiceProvider" 1242 | ] 1243 | } 1244 | }, 1245 | "autoload": { 1246 | "psr-4": { 1247 | "": "src/" 1248 | } 1249 | }, 1250 | "notification-url": "https://packagist.org/downloads/", 1251 | "license": [ 1252 | "MIT" 1253 | ], 1254 | "authors": [ 1255 | { 1256 | "name": "Brian Nesbitt", 1257 | "email": "brian@nesbot.com", 1258 | "homepage": "http://nesbot.com" 1259 | } 1260 | ], 1261 | "description": "A simple API extension for DateTime.", 1262 | "homepage": "http://carbon.nesbot.com", 1263 | "keywords": [ 1264 | "date", 1265 | "datetime", 1266 | "time" 1267 | ], 1268 | "time": "2018-11-22T18:23:02+00:00" 1269 | }, 1270 | { 1271 | "name": "nexmo/client", 1272 | "version": "1.5.2", 1273 | "source": { 1274 | "type": "git", 1275 | "url": "https://github.com/Nexmo/nexmo-php.git", 1276 | "reference": "f192c84ec3cc3e2657fc754e0da1a17e39ac5542" 1277 | }, 1278 | "dist": { 1279 | "type": "zip", 1280 | "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/f192c84ec3cc3e2657fc754e0da1a17e39ac5542", 1281 | "reference": "f192c84ec3cc3e2657fc754e0da1a17e39ac5542", 1282 | "shasum": "" 1283 | }, 1284 | "require": { 1285 | "lcobucci/jwt": "^3.2", 1286 | "php": ">=5.6", 1287 | "php-http/client-implementation": "^1.0", 1288 | "php-http/guzzle6-adapter": "^1.0", 1289 | "zendframework/zend-diactoros": "^1.3" 1290 | }, 1291 | "require-dev": { 1292 | "estahn/phpunit-json-assertions": "^1.0.0", 1293 | "php-http/mock-client": "^0.3.0", 1294 | "phpunit/phpunit": "^5.7", 1295 | "squizlabs/php_codesniffer": "^3.1" 1296 | }, 1297 | "type": "library", 1298 | "autoload": { 1299 | "psr-4": { 1300 | "Nexmo\\": "src/" 1301 | } 1302 | }, 1303 | "notification-url": "https://packagist.org/downloads/", 1304 | "license": [ 1305 | "MIT" 1306 | ], 1307 | "authors": [ 1308 | { 1309 | "name": "Tim Lytle", 1310 | "email": "tim@nexmo.com", 1311 | "homepage": "http://twitter.com/tjlytle", 1312 | "role": "Developer" 1313 | } 1314 | ], 1315 | "description": "PHP Client for using Nexmo's API.", 1316 | "time": "2018-11-14T14:12:22+00:00" 1317 | }, 1318 | { 1319 | "name": "opis/closure", 1320 | "version": "3.1.1", 1321 | "source": { 1322 | "type": "git", 1323 | "url": "https://github.com/opis/closure.git", 1324 | "reference": "d3209e46ad6c69a969b705df0738fd0dbe26ef9e" 1325 | }, 1326 | "dist": { 1327 | "type": "zip", 1328 | "url": "https://api.github.com/repos/opis/closure/zipball/d3209e46ad6c69a969b705df0738fd0dbe26ef9e", 1329 | "reference": "d3209e46ad6c69a969b705df0738fd0dbe26ef9e", 1330 | "shasum": "" 1331 | }, 1332 | "require": { 1333 | "php": "^5.4 || ^7.0" 1334 | }, 1335 | "require-dev": { 1336 | "jeremeamia/superclosure": "^2.0", 1337 | "phpunit/phpunit": "^4.0" 1338 | }, 1339 | "type": "library", 1340 | "extra": { 1341 | "branch-alias": { 1342 | "dev-master": "3.0.x-dev" 1343 | } 1344 | }, 1345 | "autoload": { 1346 | "psr-4": { 1347 | "Opis\\Closure\\": "src/" 1348 | }, 1349 | "files": [ 1350 | "functions.php" 1351 | ] 1352 | }, 1353 | "notification-url": "https://packagist.org/downloads/", 1354 | "license": [ 1355 | "MIT" 1356 | ], 1357 | "authors": [ 1358 | { 1359 | "name": "Marius Sarca", 1360 | "email": "marius.sarca@gmail.com" 1361 | }, 1362 | { 1363 | "name": "Sorin Sarca", 1364 | "email": "sarca_sorin@hotmail.com" 1365 | } 1366 | ], 1367 | "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", 1368 | "homepage": "https://opis.io/closure", 1369 | "keywords": [ 1370 | "anonymous functions", 1371 | "closure", 1372 | "function", 1373 | "serializable", 1374 | "serialization", 1375 | "serialize" 1376 | ], 1377 | "time": "2018-10-02T13:36:53+00:00" 1378 | }, 1379 | { 1380 | "name": "orchestra/testbench", 1381 | "version": "v3.7.6", 1382 | "source": { 1383 | "type": "git", 1384 | "url": "https://github.com/orchestral/testbench.git", 1385 | "reference": "57c9dc9271e60421b8402f477c44589156fb67b6" 1386 | }, 1387 | "dist": { 1388 | "type": "zip", 1389 | "url": "https://api.github.com/repos/orchestral/testbench/zipball/57c9dc9271e60421b8402f477c44589156fb67b6", 1390 | "reference": "57c9dc9271e60421b8402f477c44589156fb67b6", 1391 | "shasum": "" 1392 | }, 1393 | "require": { 1394 | "laravel/framework": "~5.7.14", 1395 | "mockery/mockery": "^1.0", 1396 | "orchestra/testbench-core": "~3.7.7", 1397 | "php": ">=7.1", 1398 | "phpunit/phpunit": "^7.0" 1399 | }, 1400 | "type": "library", 1401 | "extra": { 1402 | "branch-alias": { 1403 | "dev-master": "3.7-dev" 1404 | } 1405 | }, 1406 | "notification-url": "https://packagist.org/downloads/", 1407 | "license": [ 1408 | "MIT" 1409 | ], 1410 | "authors": [ 1411 | { 1412 | "name": "Mior Muhammad Zaki", 1413 | "email": "crynobone@gmail.com", 1414 | "homepage": "https://github.com/crynobone" 1415 | } 1416 | ], 1417 | "description": "Laravel Testing Helper for Packages Development", 1418 | "homepage": "http://orchestraplatform.com/docs/latest/components/testbench/", 1419 | "keywords": [ 1420 | "BDD", 1421 | "TDD", 1422 | "laravel", 1423 | "orchestra-platform", 1424 | "orchestral", 1425 | "testing" 1426 | ], 1427 | "time": "2018-12-04T01:01:32+00:00" 1428 | }, 1429 | { 1430 | "name": "orchestra/testbench-core", 1431 | "version": "v3.7.7", 1432 | "source": { 1433 | "type": "git", 1434 | "url": "https://github.com/orchestral/testbench-core.git", 1435 | "reference": "b5c97f3f3ae488c9e92196c2a7fcf3def9d23e36" 1436 | }, 1437 | "dist": { 1438 | "type": "zip", 1439 | "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/b5c97f3f3ae488c9e92196c2a7fcf3def9d23e36", 1440 | "reference": "b5c97f3f3ae488c9e92196c2a7fcf3def9d23e36", 1441 | "shasum": "" 1442 | }, 1443 | "require": { 1444 | "fzaninotto/faker": "^1.4", 1445 | "php": ">=7.1" 1446 | }, 1447 | "require-dev": { 1448 | "laravel/framework": "~5.7.14", 1449 | "mockery/mockery": "^1.0", 1450 | "phpunit/phpunit": "^7.0" 1451 | }, 1452 | "suggest": { 1453 | "laravel/framework": "Required for testing (~5.7.14).", 1454 | "mockery/mockery": "Allow to use Mockery for testing (^1.0).", 1455 | "orchestra/testbench-browser-kit": "Allow to use legacy Laravel BrowserKit for testing (~3.7).", 1456 | "orchestra/testbench-dusk": "Allow to use Laravel Dusk for testing (~3.7).", 1457 | "phpunit/phpunit": "Allow to use PHPUnit for testing (^7.0)." 1458 | }, 1459 | "type": "library", 1460 | "extra": { 1461 | "branch-alias": { 1462 | "dev-master": "3.7-dev" 1463 | } 1464 | }, 1465 | "autoload": { 1466 | "psr-4": { 1467 | "Orchestra\\Testbench\\": "src/" 1468 | } 1469 | }, 1470 | "notification-url": "https://packagist.org/downloads/", 1471 | "license": [ 1472 | "MIT" 1473 | ], 1474 | "authors": [ 1475 | { 1476 | "name": "Mior Muhammad Zaki", 1477 | "email": "crynobone@gmail.com", 1478 | "homepage": "https://github.com/crynobone" 1479 | } 1480 | ], 1481 | "description": "Testing Helper for Laravel Development", 1482 | "homepage": "http://orchestraplatform.com/docs/latest/components/testbench/", 1483 | "keywords": [ 1484 | "BDD", 1485 | "TDD", 1486 | "laravel", 1487 | "orchestra-platform", 1488 | "orchestral", 1489 | "testing" 1490 | ], 1491 | "time": "2018-12-04T00:47:44+00:00" 1492 | }, 1493 | { 1494 | "name": "paragonie/random_compat", 1495 | "version": "v9.99.99", 1496 | "source": { 1497 | "type": "git", 1498 | "url": "https://github.com/paragonie/random_compat.git", 1499 | "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" 1500 | }, 1501 | "dist": { 1502 | "type": "zip", 1503 | "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", 1504 | "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", 1505 | "shasum": "" 1506 | }, 1507 | "require": { 1508 | "php": "^7" 1509 | }, 1510 | "require-dev": { 1511 | "phpunit/phpunit": "4.*|5.*", 1512 | "vimeo/psalm": "^1" 1513 | }, 1514 | "suggest": { 1515 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." 1516 | }, 1517 | "type": "library", 1518 | "notification-url": "https://packagist.org/downloads/", 1519 | "license": [ 1520 | "MIT" 1521 | ], 1522 | "authors": [ 1523 | { 1524 | "name": "Paragon Initiative Enterprises", 1525 | "email": "security@paragonie.com", 1526 | "homepage": "https://paragonie.com" 1527 | } 1528 | ], 1529 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", 1530 | "keywords": [ 1531 | "csprng", 1532 | "polyfill", 1533 | "pseudorandom", 1534 | "random" 1535 | ], 1536 | "time": "2018-07-02T15:55:56+00:00" 1537 | }, 1538 | { 1539 | "name": "phar-io/manifest", 1540 | "version": "1.0.3", 1541 | "source": { 1542 | "type": "git", 1543 | "url": "https://github.com/phar-io/manifest.git", 1544 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" 1545 | }, 1546 | "dist": { 1547 | "type": "zip", 1548 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 1549 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 1550 | "shasum": "" 1551 | }, 1552 | "require": { 1553 | "ext-dom": "*", 1554 | "ext-phar": "*", 1555 | "phar-io/version": "^2.0", 1556 | "php": "^5.6 || ^7.0" 1557 | }, 1558 | "type": "library", 1559 | "extra": { 1560 | "branch-alias": { 1561 | "dev-master": "1.0.x-dev" 1562 | } 1563 | }, 1564 | "autoload": { 1565 | "classmap": [ 1566 | "src/" 1567 | ] 1568 | }, 1569 | "notification-url": "https://packagist.org/downloads/", 1570 | "license": [ 1571 | "BSD-3-Clause" 1572 | ], 1573 | "authors": [ 1574 | { 1575 | "name": "Arne Blankerts", 1576 | "email": "arne@blankerts.de", 1577 | "role": "Developer" 1578 | }, 1579 | { 1580 | "name": "Sebastian Heuer", 1581 | "email": "sebastian@phpeople.de", 1582 | "role": "Developer" 1583 | }, 1584 | { 1585 | "name": "Sebastian Bergmann", 1586 | "email": "sebastian@phpunit.de", 1587 | "role": "Developer" 1588 | } 1589 | ], 1590 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 1591 | "time": "2018-07-08T19:23:20+00:00" 1592 | }, 1593 | { 1594 | "name": "phar-io/version", 1595 | "version": "2.0.1", 1596 | "source": { 1597 | "type": "git", 1598 | "url": "https://github.com/phar-io/version.git", 1599 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" 1600 | }, 1601 | "dist": { 1602 | "type": "zip", 1603 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", 1604 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", 1605 | "shasum": "" 1606 | }, 1607 | "require": { 1608 | "php": "^5.6 || ^7.0" 1609 | }, 1610 | "type": "library", 1611 | "autoload": { 1612 | "classmap": [ 1613 | "src/" 1614 | ] 1615 | }, 1616 | "notification-url": "https://packagist.org/downloads/", 1617 | "license": [ 1618 | "BSD-3-Clause" 1619 | ], 1620 | "authors": [ 1621 | { 1622 | "name": "Arne Blankerts", 1623 | "email": "arne@blankerts.de", 1624 | "role": "Developer" 1625 | }, 1626 | { 1627 | "name": "Sebastian Heuer", 1628 | "email": "sebastian@phpeople.de", 1629 | "role": "Developer" 1630 | }, 1631 | { 1632 | "name": "Sebastian Bergmann", 1633 | "email": "sebastian@phpunit.de", 1634 | "role": "Developer" 1635 | } 1636 | ], 1637 | "description": "Library for handling version information and constraints", 1638 | "time": "2018-07-08T19:19:57+00:00" 1639 | }, 1640 | { 1641 | "name": "php-http/guzzle6-adapter", 1642 | "version": "v1.1.1", 1643 | "source": { 1644 | "type": "git", 1645 | "url": "https://github.com/php-http/guzzle6-adapter.git", 1646 | "reference": "a56941f9dc6110409cfcddc91546ee97039277ab" 1647 | }, 1648 | "dist": { 1649 | "type": "zip", 1650 | "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab", 1651 | "reference": "a56941f9dc6110409cfcddc91546ee97039277ab", 1652 | "shasum": "" 1653 | }, 1654 | "require": { 1655 | "guzzlehttp/guzzle": "^6.0", 1656 | "php": ">=5.5.0", 1657 | "php-http/httplug": "^1.0" 1658 | }, 1659 | "provide": { 1660 | "php-http/async-client-implementation": "1.0", 1661 | "php-http/client-implementation": "1.0" 1662 | }, 1663 | "require-dev": { 1664 | "ext-curl": "*", 1665 | "php-http/adapter-integration-tests": "^0.4" 1666 | }, 1667 | "type": "library", 1668 | "extra": { 1669 | "branch-alias": { 1670 | "dev-master": "1.2-dev" 1671 | } 1672 | }, 1673 | "autoload": { 1674 | "psr-4": { 1675 | "Http\\Adapter\\Guzzle6\\": "src/" 1676 | } 1677 | }, 1678 | "notification-url": "https://packagist.org/downloads/", 1679 | "license": [ 1680 | "MIT" 1681 | ], 1682 | "authors": [ 1683 | { 1684 | "name": "Márk Sági-Kazár", 1685 | "email": "mark.sagikazar@gmail.com" 1686 | }, 1687 | { 1688 | "name": "David de Boer", 1689 | "email": "david@ddeboer.nl" 1690 | } 1691 | ], 1692 | "description": "Guzzle 6 HTTP Adapter", 1693 | "homepage": "http://httplug.io", 1694 | "keywords": [ 1695 | "Guzzle", 1696 | "http" 1697 | ], 1698 | "time": "2016-05-10T06:13:32+00:00" 1699 | }, 1700 | { 1701 | "name": "php-http/httplug", 1702 | "version": "v1.1.0", 1703 | "source": { 1704 | "type": "git", 1705 | "url": "https://github.com/php-http/httplug.git", 1706 | "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" 1707 | }, 1708 | "dist": { 1709 | "type": "zip", 1710 | "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", 1711 | "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", 1712 | "shasum": "" 1713 | }, 1714 | "require": { 1715 | "php": ">=5.4", 1716 | "php-http/promise": "^1.0", 1717 | "psr/http-message": "^1.0" 1718 | }, 1719 | "require-dev": { 1720 | "henrikbjorn/phpspec-code-coverage": "^1.0", 1721 | "phpspec/phpspec": "^2.4" 1722 | }, 1723 | "type": "library", 1724 | "extra": { 1725 | "branch-alias": { 1726 | "dev-master": "1.1-dev" 1727 | } 1728 | }, 1729 | "autoload": { 1730 | "psr-4": { 1731 | "Http\\Client\\": "src/" 1732 | } 1733 | }, 1734 | "notification-url": "https://packagist.org/downloads/", 1735 | "license": [ 1736 | "MIT" 1737 | ], 1738 | "authors": [ 1739 | { 1740 | "name": "Eric GELOEN", 1741 | "email": "geloen.eric@gmail.com" 1742 | }, 1743 | { 1744 | "name": "Márk Sági-Kazár", 1745 | "email": "mark.sagikazar@gmail.com" 1746 | } 1747 | ], 1748 | "description": "HTTPlug, the HTTP client abstraction for PHP", 1749 | "homepage": "http://httplug.io", 1750 | "keywords": [ 1751 | "client", 1752 | "http" 1753 | ], 1754 | "time": "2016-08-31T08:30:17+00:00" 1755 | }, 1756 | { 1757 | "name": "php-http/promise", 1758 | "version": "v1.0.0", 1759 | "source": { 1760 | "type": "git", 1761 | "url": "https://github.com/php-http/promise.git", 1762 | "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" 1763 | }, 1764 | "dist": { 1765 | "type": "zip", 1766 | "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", 1767 | "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", 1768 | "shasum": "" 1769 | }, 1770 | "require-dev": { 1771 | "henrikbjorn/phpspec-code-coverage": "^1.0", 1772 | "phpspec/phpspec": "^2.4" 1773 | }, 1774 | "type": "library", 1775 | "extra": { 1776 | "branch-alias": { 1777 | "dev-master": "1.1-dev" 1778 | } 1779 | }, 1780 | "autoload": { 1781 | "psr-4": { 1782 | "Http\\Promise\\": "src/" 1783 | } 1784 | }, 1785 | "notification-url": "https://packagist.org/downloads/", 1786 | "license": [ 1787 | "MIT" 1788 | ], 1789 | "authors": [ 1790 | { 1791 | "name": "Márk Sági-Kazár", 1792 | "email": "mark.sagikazar@gmail.com" 1793 | }, 1794 | { 1795 | "name": "Joel Wurtz", 1796 | "email": "joel.wurtz@gmail.com" 1797 | } 1798 | ], 1799 | "description": "Promise used for asynchronous HTTP requests", 1800 | "homepage": "http://httplug.io", 1801 | "keywords": [ 1802 | "promise" 1803 | ], 1804 | "time": "2016-01-26T13:27:02+00:00" 1805 | }, 1806 | { 1807 | "name": "phpdocumentor/reflection-common", 1808 | "version": "1.0.1", 1809 | "source": { 1810 | "type": "git", 1811 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 1812 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" 1813 | }, 1814 | "dist": { 1815 | "type": "zip", 1816 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 1817 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 1818 | "shasum": "" 1819 | }, 1820 | "require": { 1821 | "php": ">=5.5" 1822 | }, 1823 | "require-dev": { 1824 | "phpunit/phpunit": "^4.6" 1825 | }, 1826 | "type": "library", 1827 | "extra": { 1828 | "branch-alias": { 1829 | "dev-master": "1.0.x-dev" 1830 | } 1831 | }, 1832 | "autoload": { 1833 | "psr-4": { 1834 | "phpDocumentor\\Reflection\\": [ 1835 | "src" 1836 | ] 1837 | } 1838 | }, 1839 | "notification-url": "https://packagist.org/downloads/", 1840 | "license": [ 1841 | "MIT" 1842 | ], 1843 | "authors": [ 1844 | { 1845 | "name": "Jaap van Otterdijk", 1846 | "email": "opensource@ijaap.nl" 1847 | } 1848 | ], 1849 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 1850 | "homepage": "http://www.phpdoc.org", 1851 | "keywords": [ 1852 | "FQSEN", 1853 | "phpDocumentor", 1854 | "phpdoc", 1855 | "reflection", 1856 | "static analysis" 1857 | ], 1858 | "time": "2017-09-11T18:02:19+00:00" 1859 | }, 1860 | { 1861 | "name": "phpdocumentor/reflection-docblock", 1862 | "version": "4.3.0", 1863 | "source": { 1864 | "type": "git", 1865 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 1866 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08" 1867 | }, 1868 | "dist": { 1869 | "type": "zip", 1870 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", 1871 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08", 1872 | "shasum": "" 1873 | }, 1874 | "require": { 1875 | "php": "^7.0", 1876 | "phpdocumentor/reflection-common": "^1.0.0", 1877 | "phpdocumentor/type-resolver": "^0.4.0", 1878 | "webmozart/assert": "^1.0" 1879 | }, 1880 | "require-dev": { 1881 | "doctrine/instantiator": "~1.0.5", 1882 | "mockery/mockery": "^1.0", 1883 | "phpunit/phpunit": "^6.4" 1884 | }, 1885 | "type": "library", 1886 | "extra": { 1887 | "branch-alias": { 1888 | "dev-master": "4.x-dev" 1889 | } 1890 | }, 1891 | "autoload": { 1892 | "psr-4": { 1893 | "phpDocumentor\\Reflection\\": [ 1894 | "src/" 1895 | ] 1896 | } 1897 | }, 1898 | "notification-url": "https://packagist.org/downloads/", 1899 | "license": [ 1900 | "MIT" 1901 | ], 1902 | "authors": [ 1903 | { 1904 | "name": "Mike van Riel", 1905 | "email": "me@mikevanriel.com" 1906 | } 1907 | ], 1908 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 1909 | "time": "2017-11-30T07:14:17+00:00" 1910 | }, 1911 | { 1912 | "name": "phpdocumentor/type-resolver", 1913 | "version": "0.4.0", 1914 | "source": { 1915 | "type": "git", 1916 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 1917 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" 1918 | }, 1919 | "dist": { 1920 | "type": "zip", 1921 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", 1922 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", 1923 | "shasum": "" 1924 | }, 1925 | "require": { 1926 | "php": "^5.5 || ^7.0", 1927 | "phpdocumentor/reflection-common": "^1.0" 1928 | }, 1929 | "require-dev": { 1930 | "mockery/mockery": "^0.9.4", 1931 | "phpunit/phpunit": "^5.2||^4.8.24" 1932 | }, 1933 | "type": "library", 1934 | "extra": { 1935 | "branch-alias": { 1936 | "dev-master": "1.0.x-dev" 1937 | } 1938 | }, 1939 | "autoload": { 1940 | "psr-4": { 1941 | "phpDocumentor\\Reflection\\": [ 1942 | "src/" 1943 | ] 1944 | } 1945 | }, 1946 | "notification-url": "https://packagist.org/downloads/", 1947 | "license": [ 1948 | "MIT" 1949 | ], 1950 | "authors": [ 1951 | { 1952 | "name": "Mike van Riel", 1953 | "email": "me@mikevanriel.com" 1954 | } 1955 | ], 1956 | "time": "2017-07-14T14:27:02+00:00" 1957 | }, 1958 | { 1959 | "name": "phpspec/prophecy", 1960 | "version": "1.8.0", 1961 | "source": { 1962 | "type": "git", 1963 | "url": "https://github.com/phpspec/prophecy.git", 1964 | "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" 1965 | }, 1966 | "dist": { 1967 | "type": "zip", 1968 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", 1969 | "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", 1970 | "shasum": "" 1971 | }, 1972 | "require": { 1973 | "doctrine/instantiator": "^1.0.2", 1974 | "php": "^5.3|^7.0", 1975 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", 1976 | "sebastian/comparator": "^1.1|^2.0|^3.0", 1977 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 1978 | }, 1979 | "require-dev": { 1980 | "phpspec/phpspec": "^2.5|^3.2", 1981 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" 1982 | }, 1983 | "type": "library", 1984 | "extra": { 1985 | "branch-alias": { 1986 | "dev-master": "1.8.x-dev" 1987 | } 1988 | }, 1989 | "autoload": { 1990 | "psr-0": { 1991 | "Prophecy\\": "src/" 1992 | } 1993 | }, 1994 | "notification-url": "https://packagist.org/downloads/", 1995 | "license": [ 1996 | "MIT" 1997 | ], 1998 | "authors": [ 1999 | { 2000 | "name": "Konstantin Kudryashov", 2001 | "email": "ever.zet@gmail.com", 2002 | "homepage": "http://everzet.com" 2003 | }, 2004 | { 2005 | "name": "Marcello Duarte", 2006 | "email": "marcello.duarte@gmail.com" 2007 | } 2008 | ], 2009 | "description": "Highly opinionated mocking framework for PHP 5.3+", 2010 | "homepage": "https://github.com/phpspec/prophecy", 2011 | "keywords": [ 2012 | "Double", 2013 | "Dummy", 2014 | "fake", 2015 | "mock", 2016 | "spy", 2017 | "stub" 2018 | ], 2019 | "time": "2018-08-05T17:53:17+00:00" 2020 | }, 2021 | { 2022 | "name": "phpunit/php-code-coverage", 2023 | "version": "6.1.4", 2024 | "source": { 2025 | "type": "git", 2026 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 2027 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" 2028 | }, 2029 | "dist": { 2030 | "type": "zip", 2031 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", 2032 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", 2033 | "shasum": "" 2034 | }, 2035 | "require": { 2036 | "ext-dom": "*", 2037 | "ext-xmlwriter": "*", 2038 | "php": "^7.1", 2039 | "phpunit/php-file-iterator": "^2.0", 2040 | "phpunit/php-text-template": "^1.2.1", 2041 | "phpunit/php-token-stream": "^3.0", 2042 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 2043 | "sebastian/environment": "^3.1 || ^4.0", 2044 | "sebastian/version": "^2.0.1", 2045 | "theseer/tokenizer": "^1.1" 2046 | }, 2047 | "require-dev": { 2048 | "phpunit/phpunit": "^7.0" 2049 | }, 2050 | "suggest": { 2051 | "ext-xdebug": "^2.6.0" 2052 | }, 2053 | "type": "library", 2054 | "extra": { 2055 | "branch-alias": { 2056 | "dev-master": "6.1-dev" 2057 | } 2058 | }, 2059 | "autoload": { 2060 | "classmap": [ 2061 | "src/" 2062 | ] 2063 | }, 2064 | "notification-url": "https://packagist.org/downloads/", 2065 | "license": [ 2066 | "BSD-3-Clause" 2067 | ], 2068 | "authors": [ 2069 | { 2070 | "name": "Sebastian Bergmann", 2071 | "email": "sebastian@phpunit.de", 2072 | "role": "lead" 2073 | } 2074 | ], 2075 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 2076 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 2077 | "keywords": [ 2078 | "coverage", 2079 | "testing", 2080 | "xunit" 2081 | ], 2082 | "time": "2018-10-31T16:06:48+00:00" 2083 | }, 2084 | { 2085 | "name": "phpunit/php-file-iterator", 2086 | "version": "2.0.2", 2087 | "source": { 2088 | "type": "git", 2089 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 2090 | "reference": "050bedf145a257b1ff02746c31894800e5122946" 2091 | }, 2092 | "dist": { 2093 | "type": "zip", 2094 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", 2095 | "reference": "050bedf145a257b1ff02746c31894800e5122946", 2096 | "shasum": "" 2097 | }, 2098 | "require": { 2099 | "php": "^7.1" 2100 | }, 2101 | "require-dev": { 2102 | "phpunit/phpunit": "^7.1" 2103 | }, 2104 | "type": "library", 2105 | "extra": { 2106 | "branch-alias": { 2107 | "dev-master": "2.0.x-dev" 2108 | } 2109 | }, 2110 | "autoload": { 2111 | "classmap": [ 2112 | "src/" 2113 | ] 2114 | }, 2115 | "notification-url": "https://packagist.org/downloads/", 2116 | "license": [ 2117 | "BSD-3-Clause" 2118 | ], 2119 | "authors": [ 2120 | { 2121 | "name": "Sebastian Bergmann", 2122 | "email": "sebastian@phpunit.de", 2123 | "role": "lead" 2124 | } 2125 | ], 2126 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 2127 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 2128 | "keywords": [ 2129 | "filesystem", 2130 | "iterator" 2131 | ], 2132 | "time": "2018-09-13T20:33:42+00:00" 2133 | }, 2134 | { 2135 | "name": "phpunit/php-text-template", 2136 | "version": "1.2.1", 2137 | "source": { 2138 | "type": "git", 2139 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 2140 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 2141 | }, 2142 | "dist": { 2143 | "type": "zip", 2144 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 2145 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 2146 | "shasum": "" 2147 | }, 2148 | "require": { 2149 | "php": ">=5.3.3" 2150 | }, 2151 | "type": "library", 2152 | "autoload": { 2153 | "classmap": [ 2154 | "src/" 2155 | ] 2156 | }, 2157 | "notification-url": "https://packagist.org/downloads/", 2158 | "license": [ 2159 | "BSD-3-Clause" 2160 | ], 2161 | "authors": [ 2162 | { 2163 | "name": "Sebastian Bergmann", 2164 | "email": "sebastian@phpunit.de", 2165 | "role": "lead" 2166 | } 2167 | ], 2168 | "description": "Simple template engine.", 2169 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 2170 | "keywords": [ 2171 | "template" 2172 | ], 2173 | "time": "2015-06-21T13:50:34+00:00" 2174 | }, 2175 | { 2176 | "name": "phpunit/php-timer", 2177 | "version": "2.0.0", 2178 | "source": { 2179 | "type": "git", 2180 | "url": "https://github.com/sebastianbergmann/php-timer.git", 2181 | "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f" 2182 | }, 2183 | "dist": { 2184 | "type": "zip", 2185 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f", 2186 | "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f", 2187 | "shasum": "" 2188 | }, 2189 | "require": { 2190 | "php": "^7.1" 2191 | }, 2192 | "require-dev": { 2193 | "phpunit/phpunit": "^7.0" 2194 | }, 2195 | "type": "library", 2196 | "extra": { 2197 | "branch-alias": { 2198 | "dev-master": "2.0-dev" 2199 | } 2200 | }, 2201 | "autoload": { 2202 | "classmap": [ 2203 | "src/" 2204 | ] 2205 | }, 2206 | "notification-url": "https://packagist.org/downloads/", 2207 | "license": [ 2208 | "BSD-3-Clause" 2209 | ], 2210 | "authors": [ 2211 | { 2212 | "name": "Sebastian Bergmann", 2213 | "email": "sebastian@phpunit.de", 2214 | "role": "lead" 2215 | } 2216 | ], 2217 | "description": "Utility class for timing", 2218 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 2219 | "keywords": [ 2220 | "timer" 2221 | ], 2222 | "time": "2018-02-01T13:07:23+00:00" 2223 | }, 2224 | { 2225 | "name": "phpunit/php-token-stream", 2226 | "version": "3.0.1", 2227 | "source": { 2228 | "type": "git", 2229 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 2230 | "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18" 2231 | }, 2232 | "dist": { 2233 | "type": "zip", 2234 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/c99e3be9d3e85f60646f152f9002d46ed7770d18", 2235 | "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18", 2236 | "shasum": "" 2237 | }, 2238 | "require": { 2239 | "ext-tokenizer": "*", 2240 | "php": "^7.1" 2241 | }, 2242 | "require-dev": { 2243 | "phpunit/phpunit": "^7.0" 2244 | }, 2245 | "type": "library", 2246 | "extra": { 2247 | "branch-alias": { 2248 | "dev-master": "3.0-dev" 2249 | } 2250 | }, 2251 | "autoload": { 2252 | "classmap": [ 2253 | "src/" 2254 | ] 2255 | }, 2256 | "notification-url": "https://packagist.org/downloads/", 2257 | "license": [ 2258 | "BSD-3-Clause" 2259 | ], 2260 | "authors": [ 2261 | { 2262 | "name": "Sebastian Bergmann", 2263 | "email": "sebastian@phpunit.de" 2264 | } 2265 | ], 2266 | "description": "Wrapper around PHP's tokenizer extension.", 2267 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 2268 | "keywords": [ 2269 | "tokenizer" 2270 | ], 2271 | "time": "2018-10-30T05:52:18+00:00" 2272 | }, 2273 | { 2274 | "name": "phpunit/phpunit", 2275 | "version": "7.5.1", 2276 | "source": { 2277 | "type": "git", 2278 | "url": "https://github.com/sebastianbergmann/phpunit.git", 2279 | "reference": "c23d78776ad415d5506e0679723cb461d71f488f" 2280 | }, 2281 | "dist": { 2282 | "type": "zip", 2283 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c23d78776ad415d5506e0679723cb461d71f488f", 2284 | "reference": "c23d78776ad415d5506e0679723cb461d71f488f", 2285 | "shasum": "" 2286 | }, 2287 | "require": { 2288 | "doctrine/instantiator": "^1.1", 2289 | "ext-dom": "*", 2290 | "ext-json": "*", 2291 | "ext-libxml": "*", 2292 | "ext-mbstring": "*", 2293 | "ext-xml": "*", 2294 | "myclabs/deep-copy": "^1.7", 2295 | "phar-io/manifest": "^1.0.2", 2296 | "phar-io/version": "^2.0", 2297 | "php": "^7.1", 2298 | "phpspec/prophecy": "^1.7", 2299 | "phpunit/php-code-coverage": "^6.0.7", 2300 | "phpunit/php-file-iterator": "^2.0.1", 2301 | "phpunit/php-text-template": "^1.2.1", 2302 | "phpunit/php-timer": "^2.0", 2303 | "sebastian/comparator": "^3.0", 2304 | "sebastian/diff": "^3.0", 2305 | "sebastian/environment": "^4.0", 2306 | "sebastian/exporter": "^3.1", 2307 | "sebastian/global-state": "^2.0", 2308 | "sebastian/object-enumerator": "^3.0.3", 2309 | "sebastian/resource-operations": "^2.0", 2310 | "sebastian/version": "^2.0.1" 2311 | }, 2312 | "conflict": { 2313 | "phpunit/phpunit-mock-objects": "*" 2314 | }, 2315 | "require-dev": { 2316 | "ext-pdo": "*" 2317 | }, 2318 | "suggest": { 2319 | "ext-soap": "*", 2320 | "ext-xdebug": "*", 2321 | "phpunit/php-invoker": "^2.0" 2322 | }, 2323 | "bin": [ 2324 | "phpunit" 2325 | ], 2326 | "type": "library", 2327 | "extra": { 2328 | "branch-alias": { 2329 | "dev-master": "7.5-dev" 2330 | } 2331 | }, 2332 | "autoload": { 2333 | "classmap": [ 2334 | "src/" 2335 | ] 2336 | }, 2337 | "notification-url": "https://packagist.org/downloads/", 2338 | "license": [ 2339 | "BSD-3-Clause" 2340 | ], 2341 | "authors": [ 2342 | { 2343 | "name": "Sebastian Bergmann", 2344 | "email": "sebastian@phpunit.de", 2345 | "role": "lead" 2346 | } 2347 | ], 2348 | "description": "The PHP Unit Testing framework.", 2349 | "homepage": "https://phpunit.de/", 2350 | "keywords": [ 2351 | "phpunit", 2352 | "testing", 2353 | "xunit" 2354 | ], 2355 | "time": "2018-12-12T07:20:32+00:00" 2356 | }, 2357 | { 2358 | "name": "psr/container", 2359 | "version": "1.0.0", 2360 | "source": { 2361 | "type": "git", 2362 | "url": "https://github.com/php-fig/container.git", 2363 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 2364 | }, 2365 | "dist": { 2366 | "type": "zip", 2367 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 2368 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 2369 | "shasum": "" 2370 | }, 2371 | "require": { 2372 | "php": ">=5.3.0" 2373 | }, 2374 | "type": "library", 2375 | "extra": { 2376 | "branch-alias": { 2377 | "dev-master": "1.0.x-dev" 2378 | } 2379 | }, 2380 | "autoload": { 2381 | "psr-4": { 2382 | "Psr\\Container\\": "src/" 2383 | } 2384 | }, 2385 | "notification-url": "https://packagist.org/downloads/", 2386 | "license": [ 2387 | "MIT" 2388 | ], 2389 | "authors": [ 2390 | { 2391 | "name": "PHP-FIG", 2392 | "homepage": "http://www.php-fig.org/" 2393 | } 2394 | ], 2395 | "description": "Common Container Interface (PHP FIG PSR-11)", 2396 | "homepage": "https://github.com/php-fig/container", 2397 | "keywords": [ 2398 | "PSR-11", 2399 | "container", 2400 | "container-interface", 2401 | "container-interop", 2402 | "psr" 2403 | ], 2404 | "time": "2017-02-14T16:28:37+00:00" 2405 | }, 2406 | { 2407 | "name": "psr/http-message", 2408 | "version": "1.0.1", 2409 | "source": { 2410 | "type": "git", 2411 | "url": "https://github.com/php-fig/http-message.git", 2412 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 2413 | }, 2414 | "dist": { 2415 | "type": "zip", 2416 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 2417 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 2418 | "shasum": "" 2419 | }, 2420 | "require": { 2421 | "php": ">=5.3.0" 2422 | }, 2423 | "type": "library", 2424 | "extra": { 2425 | "branch-alias": { 2426 | "dev-master": "1.0.x-dev" 2427 | } 2428 | }, 2429 | "autoload": { 2430 | "psr-4": { 2431 | "Psr\\Http\\Message\\": "src/" 2432 | } 2433 | }, 2434 | "notification-url": "https://packagist.org/downloads/", 2435 | "license": [ 2436 | "MIT" 2437 | ], 2438 | "authors": [ 2439 | { 2440 | "name": "PHP-FIG", 2441 | "homepage": "http://www.php-fig.org/" 2442 | } 2443 | ], 2444 | "description": "Common interface for HTTP messages", 2445 | "homepage": "https://github.com/php-fig/http-message", 2446 | "keywords": [ 2447 | "http", 2448 | "http-message", 2449 | "psr", 2450 | "psr-7", 2451 | "request", 2452 | "response" 2453 | ], 2454 | "time": "2016-08-06T14:39:51+00:00" 2455 | }, 2456 | { 2457 | "name": "psr/log", 2458 | "version": "1.1.0", 2459 | "source": { 2460 | "type": "git", 2461 | "url": "https://github.com/php-fig/log.git", 2462 | "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" 2463 | }, 2464 | "dist": { 2465 | "type": "zip", 2466 | "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", 2467 | "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", 2468 | "shasum": "" 2469 | }, 2470 | "require": { 2471 | "php": ">=5.3.0" 2472 | }, 2473 | "type": "library", 2474 | "extra": { 2475 | "branch-alias": { 2476 | "dev-master": "1.0.x-dev" 2477 | } 2478 | }, 2479 | "autoload": { 2480 | "psr-4": { 2481 | "Psr\\Log\\": "Psr/Log/" 2482 | } 2483 | }, 2484 | "notification-url": "https://packagist.org/downloads/", 2485 | "license": [ 2486 | "MIT" 2487 | ], 2488 | "authors": [ 2489 | { 2490 | "name": "PHP-FIG", 2491 | "homepage": "http://www.php-fig.org/" 2492 | } 2493 | ], 2494 | "description": "Common interface for logging libraries", 2495 | "homepage": "https://github.com/php-fig/log", 2496 | "keywords": [ 2497 | "log", 2498 | "psr", 2499 | "psr-3" 2500 | ], 2501 | "time": "2018-11-20T15:27:04+00:00" 2502 | }, 2503 | { 2504 | "name": "psr/simple-cache", 2505 | "version": "1.0.1", 2506 | "source": { 2507 | "type": "git", 2508 | "url": "https://github.com/php-fig/simple-cache.git", 2509 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" 2510 | }, 2511 | "dist": { 2512 | "type": "zip", 2513 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 2514 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 2515 | "shasum": "" 2516 | }, 2517 | "require": { 2518 | "php": ">=5.3.0" 2519 | }, 2520 | "type": "library", 2521 | "extra": { 2522 | "branch-alias": { 2523 | "dev-master": "1.0.x-dev" 2524 | } 2525 | }, 2526 | "autoload": { 2527 | "psr-4": { 2528 | "Psr\\SimpleCache\\": "src/" 2529 | } 2530 | }, 2531 | "notification-url": "https://packagist.org/downloads/", 2532 | "license": [ 2533 | "MIT" 2534 | ], 2535 | "authors": [ 2536 | { 2537 | "name": "PHP-FIG", 2538 | "homepage": "http://www.php-fig.org/" 2539 | } 2540 | ], 2541 | "description": "Common interfaces for simple caching", 2542 | "keywords": [ 2543 | "cache", 2544 | "caching", 2545 | "psr", 2546 | "psr-16", 2547 | "simple-cache" 2548 | ], 2549 | "time": "2017-10-23T01:57:42+00:00" 2550 | }, 2551 | { 2552 | "name": "ralouphie/getallheaders", 2553 | "version": "2.0.5", 2554 | "source": { 2555 | "type": "git", 2556 | "url": "https://github.com/ralouphie/getallheaders.git", 2557 | "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" 2558 | }, 2559 | "dist": { 2560 | "type": "zip", 2561 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", 2562 | "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", 2563 | "shasum": "" 2564 | }, 2565 | "require": { 2566 | "php": ">=5.3" 2567 | }, 2568 | "require-dev": { 2569 | "phpunit/phpunit": "~3.7.0", 2570 | "satooshi/php-coveralls": ">=1.0" 2571 | }, 2572 | "type": "library", 2573 | "autoload": { 2574 | "files": [ 2575 | "src/getallheaders.php" 2576 | ] 2577 | }, 2578 | "notification-url": "https://packagist.org/downloads/", 2579 | "license": [ 2580 | "MIT" 2581 | ], 2582 | "authors": [ 2583 | { 2584 | "name": "Ralph Khattar", 2585 | "email": "ralph.khattar@gmail.com" 2586 | } 2587 | ], 2588 | "description": "A polyfill for getallheaders.", 2589 | "time": "2016-02-11T07:05:27+00:00" 2590 | }, 2591 | { 2592 | "name": "ramsey/uuid", 2593 | "version": "3.8.0", 2594 | "source": { 2595 | "type": "git", 2596 | "url": "https://github.com/ramsey/uuid.git", 2597 | "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" 2598 | }, 2599 | "dist": { 2600 | "type": "zip", 2601 | "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", 2602 | "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", 2603 | "shasum": "" 2604 | }, 2605 | "require": { 2606 | "paragonie/random_compat": "^1.0|^2.0|9.99.99", 2607 | "php": "^5.4 || ^7.0", 2608 | "symfony/polyfill-ctype": "^1.8" 2609 | }, 2610 | "replace": { 2611 | "rhumsaa/uuid": "self.version" 2612 | }, 2613 | "require-dev": { 2614 | "codeception/aspect-mock": "^1.0 | ~2.0.0", 2615 | "doctrine/annotations": "~1.2.0", 2616 | "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", 2617 | "ircmaxell/random-lib": "^1.1", 2618 | "jakub-onderka/php-parallel-lint": "^0.9.0", 2619 | "mockery/mockery": "^0.9.9", 2620 | "moontoast/math": "^1.1", 2621 | "php-mock/php-mock-phpunit": "^0.3|^1.1", 2622 | "phpunit/phpunit": "^4.7|^5.0|^6.5", 2623 | "squizlabs/php_codesniffer": "^2.3" 2624 | }, 2625 | "suggest": { 2626 | "ext-ctype": "Provides support for PHP Ctype functions", 2627 | "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", 2628 | "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", 2629 | "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", 2630 | "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", 2631 | "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", 2632 | "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." 2633 | }, 2634 | "type": "library", 2635 | "extra": { 2636 | "branch-alias": { 2637 | "dev-master": "3.x-dev" 2638 | } 2639 | }, 2640 | "autoload": { 2641 | "psr-4": { 2642 | "Ramsey\\Uuid\\": "src/" 2643 | } 2644 | }, 2645 | "notification-url": "https://packagist.org/downloads/", 2646 | "license": [ 2647 | "MIT" 2648 | ], 2649 | "authors": [ 2650 | { 2651 | "name": "Marijn Huizendveld", 2652 | "email": "marijn.huizendveld@gmail.com" 2653 | }, 2654 | { 2655 | "name": "Thibaud Fabre", 2656 | "email": "thibaud@aztech.io" 2657 | }, 2658 | { 2659 | "name": "Ben Ramsey", 2660 | "email": "ben@benramsey.com", 2661 | "homepage": "https://benramsey.com" 2662 | } 2663 | ], 2664 | "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", 2665 | "homepage": "https://github.com/ramsey/uuid", 2666 | "keywords": [ 2667 | "guid", 2668 | "identifier", 2669 | "uuid" 2670 | ], 2671 | "time": "2018-07-19T23:38:55+00:00" 2672 | }, 2673 | { 2674 | "name": "sebastian/code-unit-reverse-lookup", 2675 | "version": "1.0.1", 2676 | "source": { 2677 | "type": "git", 2678 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 2679 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 2680 | }, 2681 | "dist": { 2682 | "type": "zip", 2683 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 2684 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 2685 | "shasum": "" 2686 | }, 2687 | "require": { 2688 | "php": "^5.6 || ^7.0" 2689 | }, 2690 | "require-dev": { 2691 | "phpunit/phpunit": "^5.7 || ^6.0" 2692 | }, 2693 | "type": "library", 2694 | "extra": { 2695 | "branch-alias": { 2696 | "dev-master": "1.0.x-dev" 2697 | } 2698 | }, 2699 | "autoload": { 2700 | "classmap": [ 2701 | "src/" 2702 | ] 2703 | }, 2704 | "notification-url": "https://packagist.org/downloads/", 2705 | "license": [ 2706 | "BSD-3-Clause" 2707 | ], 2708 | "authors": [ 2709 | { 2710 | "name": "Sebastian Bergmann", 2711 | "email": "sebastian@phpunit.de" 2712 | } 2713 | ], 2714 | "description": "Looks up which function or method a line of code belongs to", 2715 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 2716 | "time": "2017-03-04T06:30:41+00:00" 2717 | }, 2718 | { 2719 | "name": "sebastian/comparator", 2720 | "version": "3.0.2", 2721 | "source": { 2722 | "type": "git", 2723 | "url": "https://github.com/sebastianbergmann/comparator.git", 2724 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" 2725 | }, 2726 | "dist": { 2727 | "type": "zip", 2728 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 2729 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 2730 | "shasum": "" 2731 | }, 2732 | "require": { 2733 | "php": "^7.1", 2734 | "sebastian/diff": "^3.0", 2735 | "sebastian/exporter": "^3.1" 2736 | }, 2737 | "require-dev": { 2738 | "phpunit/phpunit": "^7.1" 2739 | }, 2740 | "type": "library", 2741 | "extra": { 2742 | "branch-alias": { 2743 | "dev-master": "3.0-dev" 2744 | } 2745 | }, 2746 | "autoload": { 2747 | "classmap": [ 2748 | "src/" 2749 | ] 2750 | }, 2751 | "notification-url": "https://packagist.org/downloads/", 2752 | "license": [ 2753 | "BSD-3-Clause" 2754 | ], 2755 | "authors": [ 2756 | { 2757 | "name": "Jeff Welch", 2758 | "email": "whatthejeff@gmail.com" 2759 | }, 2760 | { 2761 | "name": "Volker Dusch", 2762 | "email": "github@wallbash.com" 2763 | }, 2764 | { 2765 | "name": "Bernhard Schussek", 2766 | "email": "bschussek@2bepublished.at" 2767 | }, 2768 | { 2769 | "name": "Sebastian Bergmann", 2770 | "email": "sebastian@phpunit.de" 2771 | } 2772 | ], 2773 | "description": "Provides the functionality to compare PHP values for equality", 2774 | "homepage": "https://github.com/sebastianbergmann/comparator", 2775 | "keywords": [ 2776 | "comparator", 2777 | "compare", 2778 | "equality" 2779 | ], 2780 | "time": "2018-07-12T15:12:46+00:00" 2781 | }, 2782 | { 2783 | "name": "sebastian/diff", 2784 | "version": "3.0.1", 2785 | "source": { 2786 | "type": "git", 2787 | "url": "https://github.com/sebastianbergmann/diff.git", 2788 | "reference": "366541b989927187c4ca70490a35615d3fef2dce" 2789 | }, 2790 | "dist": { 2791 | "type": "zip", 2792 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/366541b989927187c4ca70490a35615d3fef2dce", 2793 | "reference": "366541b989927187c4ca70490a35615d3fef2dce", 2794 | "shasum": "" 2795 | }, 2796 | "require": { 2797 | "php": "^7.1" 2798 | }, 2799 | "require-dev": { 2800 | "phpunit/phpunit": "^7.0", 2801 | "symfony/process": "^2 || ^3.3 || ^4" 2802 | }, 2803 | "type": "library", 2804 | "extra": { 2805 | "branch-alias": { 2806 | "dev-master": "3.0-dev" 2807 | } 2808 | }, 2809 | "autoload": { 2810 | "classmap": [ 2811 | "src/" 2812 | ] 2813 | }, 2814 | "notification-url": "https://packagist.org/downloads/", 2815 | "license": [ 2816 | "BSD-3-Clause" 2817 | ], 2818 | "authors": [ 2819 | { 2820 | "name": "Kore Nordmann", 2821 | "email": "mail@kore-nordmann.de" 2822 | }, 2823 | { 2824 | "name": "Sebastian Bergmann", 2825 | "email": "sebastian@phpunit.de" 2826 | } 2827 | ], 2828 | "description": "Diff implementation", 2829 | "homepage": "https://github.com/sebastianbergmann/diff", 2830 | "keywords": [ 2831 | "diff", 2832 | "udiff", 2833 | "unidiff", 2834 | "unified diff" 2835 | ], 2836 | "time": "2018-06-10T07:54:39+00:00" 2837 | }, 2838 | { 2839 | "name": "sebastian/environment", 2840 | "version": "4.0.1", 2841 | "source": { 2842 | "type": "git", 2843 | "url": "https://github.com/sebastianbergmann/environment.git", 2844 | "reference": "febd209a219cea7b56ad799b30ebbea34b71eb8f" 2845 | }, 2846 | "dist": { 2847 | "type": "zip", 2848 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/febd209a219cea7b56ad799b30ebbea34b71eb8f", 2849 | "reference": "febd209a219cea7b56ad799b30ebbea34b71eb8f", 2850 | "shasum": "" 2851 | }, 2852 | "require": { 2853 | "php": "^7.1" 2854 | }, 2855 | "require-dev": { 2856 | "phpunit/phpunit": "^7.4" 2857 | }, 2858 | "type": "library", 2859 | "extra": { 2860 | "branch-alias": { 2861 | "dev-master": "4.0-dev" 2862 | } 2863 | }, 2864 | "autoload": { 2865 | "classmap": [ 2866 | "src/" 2867 | ] 2868 | }, 2869 | "notification-url": "https://packagist.org/downloads/", 2870 | "license": [ 2871 | "BSD-3-Clause" 2872 | ], 2873 | "authors": [ 2874 | { 2875 | "name": "Sebastian Bergmann", 2876 | "email": "sebastian@phpunit.de" 2877 | } 2878 | ], 2879 | "description": "Provides functionality to handle HHVM/PHP environments", 2880 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2881 | "keywords": [ 2882 | "Xdebug", 2883 | "environment", 2884 | "hhvm" 2885 | ], 2886 | "time": "2018-11-25T09:31:21+00:00" 2887 | }, 2888 | { 2889 | "name": "sebastian/exporter", 2890 | "version": "3.1.0", 2891 | "source": { 2892 | "type": "git", 2893 | "url": "https://github.com/sebastianbergmann/exporter.git", 2894 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" 2895 | }, 2896 | "dist": { 2897 | "type": "zip", 2898 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", 2899 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", 2900 | "shasum": "" 2901 | }, 2902 | "require": { 2903 | "php": "^7.0", 2904 | "sebastian/recursion-context": "^3.0" 2905 | }, 2906 | "require-dev": { 2907 | "ext-mbstring": "*", 2908 | "phpunit/phpunit": "^6.0" 2909 | }, 2910 | "type": "library", 2911 | "extra": { 2912 | "branch-alias": { 2913 | "dev-master": "3.1.x-dev" 2914 | } 2915 | }, 2916 | "autoload": { 2917 | "classmap": [ 2918 | "src/" 2919 | ] 2920 | }, 2921 | "notification-url": "https://packagist.org/downloads/", 2922 | "license": [ 2923 | "BSD-3-Clause" 2924 | ], 2925 | "authors": [ 2926 | { 2927 | "name": "Jeff Welch", 2928 | "email": "whatthejeff@gmail.com" 2929 | }, 2930 | { 2931 | "name": "Volker Dusch", 2932 | "email": "github@wallbash.com" 2933 | }, 2934 | { 2935 | "name": "Bernhard Schussek", 2936 | "email": "bschussek@2bepublished.at" 2937 | }, 2938 | { 2939 | "name": "Sebastian Bergmann", 2940 | "email": "sebastian@phpunit.de" 2941 | }, 2942 | { 2943 | "name": "Adam Harvey", 2944 | "email": "aharvey@php.net" 2945 | } 2946 | ], 2947 | "description": "Provides the functionality to export PHP variables for visualization", 2948 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 2949 | "keywords": [ 2950 | "export", 2951 | "exporter" 2952 | ], 2953 | "time": "2017-04-03T13:19:02+00:00" 2954 | }, 2955 | { 2956 | "name": "sebastian/global-state", 2957 | "version": "2.0.0", 2958 | "source": { 2959 | "type": "git", 2960 | "url": "https://github.com/sebastianbergmann/global-state.git", 2961 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" 2962 | }, 2963 | "dist": { 2964 | "type": "zip", 2965 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 2966 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 2967 | "shasum": "" 2968 | }, 2969 | "require": { 2970 | "php": "^7.0" 2971 | }, 2972 | "require-dev": { 2973 | "phpunit/phpunit": "^6.0" 2974 | }, 2975 | "suggest": { 2976 | "ext-uopz": "*" 2977 | }, 2978 | "type": "library", 2979 | "extra": { 2980 | "branch-alias": { 2981 | "dev-master": "2.0-dev" 2982 | } 2983 | }, 2984 | "autoload": { 2985 | "classmap": [ 2986 | "src/" 2987 | ] 2988 | }, 2989 | "notification-url": "https://packagist.org/downloads/", 2990 | "license": [ 2991 | "BSD-3-Clause" 2992 | ], 2993 | "authors": [ 2994 | { 2995 | "name": "Sebastian Bergmann", 2996 | "email": "sebastian@phpunit.de" 2997 | } 2998 | ], 2999 | "description": "Snapshotting of global state", 3000 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 3001 | "keywords": [ 3002 | "global state" 3003 | ], 3004 | "time": "2017-04-27T15:39:26+00:00" 3005 | }, 3006 | { 3007 | "name": "sebastian/object-enumerator", 3008 | "version": "3.0.3", 3009 | "source": { 3010 | "type": "git", 3011 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 3012 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 3013 | }, 3014 | "dist": { 3015 | "type": "zip", 3016 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", 3017 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 3018 | "shasum": "" 3019 | }, 3020 | "require": { 3021 | "php": "^7.0", 3022 | "sebastian/object-reflector": "^1.1.1", 3023 | "sebastian/recursion-context": "^3.0" 3024 | }, 3025 | "require-dev": { 3026 | "phpunit/phpunit": "^6.0" 3027 | }, 3028 | "type": "library", 3029 | "extra": { 3030 | "branch-alias": { 3031 | "dev-master": "3.0.x-dev" 3032 | } 3033 | }, 3034 | "autoload": { 3035 | "classmap": [ 3036 | "src/" 3037 | ] 3038 | }, 3039 | "notification-url": "https://packagist.org/downloads/", 3040 | "license": [ 3041 | "BSD-3-Clause" 3042 | ], 3043 | "authors": [ 3044 | { 3045 | "name": "Sebastian Bergmann", 3046 | "email": "sebastian@phpunit.de" 3047 | } 3048 | ], 3049 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 3050 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 3051 | "time": "2017-08-03T12:35:26+00:00" 3052 | }, 3053 | { 3054 | "name": "sebastian/object-reflector", 3055 | "version": "1.1.1", 3056 | "source": { 3057 | "type": "git", 3058 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 3059 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 3060 | }, 3061 | "dist": { 3062 | "type": "zip", 3063 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 3064 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 3065 | "shasum": "" 3066 | }, 3067 | "require": { 3068 | "php": "^7.0" 3069 | }, 3070 | "require-dev": { 3071 | "phpunit/phpunit": "^6.0" 3072 | }, 3073 | "type": "library", 3074 | "extra": { 3075 | "branch-alias": { 3076 | "dev-master": "1.1-dev" 3077 | } 3078 | }, 3079 | "autoload": { 3080 | "classmap": [ 3081 | "src/" 3082 | ] 3083 | }, 3084 | "notification-url": "https://packagist.org/downloads/", 3085 | "license": [ 3086 | "BSD-3-Clause" 3087 | ], 3088 | "authors": [ 3089 | { 3090 | "name": "Sebastian Bergmann", 3091 | "email": "sebastian@phpunit.de" 3092 | } 3093 | ], 3094 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 3095 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 3096 | "time": "2017-03-29T09:07:27+00:00" 3097 | }, 3098 | { 3099 | "name": "sebastian/recursion-context", 3100 | "version": "3.0.0", 3101 | "source": { 3102 | "type": "git", 3103 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 3104 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 3105 | }, 3106 | "dist": { 3107 | "type": "zip", 3108 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 3109 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 3110 | "shasum": "" 3111 | }, 3112 | "require": { 3113 | "php": "^7.0" 3114 | }, 3115 | "require-dev": { 3116 | "phpunit/phpunit": "^6.0" 3117 | }, 3118 | "type": "library", 3119 | "extra": { 3120 | "branch-alias": { 3121 | "dev-master": "3.0.x-dev" 3122 | } 3123 | }, 3124 | "autoload": { 3125 | "classmap": [ 3126 | "src/" 3127 | ] 3128 | }, 3129 | "notification-url": "https://packagist.org/downloads/", 3130 | "license": [ 3131 | "BSD-3-Clause" 3132 | ], 3133 | "authors": [ 3134 | { 3135 | "name": "Jeff Welch", 3136 | "email": "whatthejeff@gmail.com" 3137 | }, 3138 | { 3139 | "name": "Sebastian Bergmann", 3140 | "email": "sebastian@phpunit.de" 3141 | }, 3142 | { 3143 | "name": "Adam Harvey", 3144 | "email": "aharvey@php.net" 3145 | } 3146 | ], 3147 | "description": "Provides functionality to recursively process PHP variables", 3148 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 3149 | "time": "2017-03-03T06:23:57+00:00" 3150 | }, 3151 | { 3152 | "name": "sebastian/resource-operations", 3153 | "version": "2.0.1", 3154 | "source": { 3155 | "type": "git", 3156 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 3157 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" 3158 | }, 3159 | "dist": { 3160 | "type": "zip", 3161 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 3162 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 3163 | "shasum": "" 3164 | }, 3165 | "require": { 3166 | "php": "^7.1" 3167 | }, 3168 | "type": "library", 3169 | "extra": { 3170 | "branch-alias": { 3171 | "dev-master": "2.0-dev" 3172 | } 3173 | }, 3174 | "autoload": { 3175 | "classmap": [ 3176 | "src/" 3177 | ] 3178 | }, 3179 | "notification-url": "https://packagist.org/downloads/", 3180 | "license": [ 3181 | "BSD-3-Clause" 3182 | ], 3183 | "authors": [ 3184 | { 3185 | "name": "Sebastian Bergmann", 3186 | "email": "sebastian@phpunit.de" 3187 | } 3188 | ], 3189 | "description": "Provides a list of PHP built-in functions that operate on resources", 3190 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 3191 | "time": "2018-10-04T04:07:39+00:00" 3192 | }, 3193 | { 3194 | "name": "sebastian/version", 3195 | "version": "2.0.1", 3196 | "source": { 3197 | "type": "git", 3198 | "url": "https://github.com/sebastianbergmann/version.git", 3199 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 3200 | }, 3201 | "dist": { 3202 | "type": "zip", 3203 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 3204 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 3205 | "shasum": "" 3206 | }, 3207 | "require": { 3208 | "php": ">=5.6" 3209 | }, 3210 | "type": "library", 3211 | "extra": { 3212 | "branch-alias": { 3213 | "dev-master": "2.0.x-dev" 3214 | } 3215 | }, 3216 | "autoload": { 3217 | "classmap": [ 3218 | "src/" 3219 | ] 3220 | }, 3221 | "notification-url": "https://packagist.org/downloads/", 3222 | "license": [ 3223 | "BSD-3-Clause" 3224 | ], 3225 | "authors": [ 3226 | { 3227 | "name": "Sebastian Bergmann", 3228 | "email": "sebastian@phpunit.de", 3229 | "role": "lead" 3230 | } 3231 | ], 3232 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 3233 | "homepage": "https://github.com/sebastianbergmann/version", 3234 | "time": "2016-10-03T07:35:21+00:00" 3235 | }, 3236 | { 3237 | "name": "swiftmailer/swiftmailer", 3238 | "version": "v6.1.3", 3239 | "source": { 3240 | "type": "git", 3241 | "url": "https://github.com/swiftmailer/swiftmailer.git", 3242 | "reference": "8ddcb66ac10c392d3beb54829eef8ac1438595f4" 3243 | }, 3244 | "dist": { 3245 | "type": "zip", 3246 | "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8ddcb66ac10c392d3beb54829eef8ac1438595f4", 3247 | "reference": "8ddcb66ac10c392d3beb54829eef8ac1438595f4", 3248 | "shasum": "" 3249 | }, 3250 | "require": { 3251 | "egulias/email-validator": "~2.0", 3252 | "php": ">=7.0.0" 3253 | }, 3254 | "require-dev": { 3255 | "mockery/mockery": "~0.9.1", 3256 | "symfony/phpunit-bridge": "~3.3@dev" 3257 | }, 3258 | "suggest": { 3259 | "ext-intl": "Needed to support internationalized email addresses", 3260 | "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" 3261 | }, 3262 | "type": "library", 3263 | "extra": { 3264 | "branch-alias": { 3265 | "dev-master": "6.1-dev" 3266 | } 3267 | }, 3268 | "autoload": { 3269 | "files": [ 3270 | "lib/swift_required.php" 3271 | ] 3272 | }, 3273 | "notification-url": "https://packagist.org/downloads/", 3274 | "license": [ 3275 | "MIT" 3276 | ], 3277 | "authors": [ 3278 | { 3279 | "name": "Chris Corbyn" 3280 | }, 3281 | { 3282 | "name": "Fabien Potencier", 3283 | "email": "fabien@symfony.com" 3284 | } 3285 | ], 3286 | "description": "Swiftmailer, free feature-rich PHP mailer", 3287 | "homepage": "https://swiftmailer.symfony.com", 3288 | "keywords": [ 3289 | "email", 3290 | "mail", 3291 | "mailer" 3292 | ], 3293 | "time": "2018-09-11T07:12:52+00:00" 3294 | }, 3295 | { 3296 | "name": "symfony/console", 3297 | "version": "v4.2.1", 3298 | "source": { 3299 | "type": "git", 3300 | "url": "https://github.com/symfony/console.git", 3301 | "reference": "4dff24e5d01e713818805c1862d2e3f901ee7dd0" 3302 | }, 3303 | "dist": { 3304 | "type": "zip", 3305 | "url": "https://api.github.com/repos/symfony/console/zipball/4dff24e5d01e713818805c1862d2e3f901ee7dd0", 3306 | "reference": "4dff24e5d01e713818805c1862d2e3f901ee7dd0", 3307 | "shasum": "" 3308 | }, 3309 | "require": { 3310 | "php": "^7.1.3", 3311 | "symfony/contracts": "^1.0", 3312 | "symfony/polyfill-mbstring": "~1.0" 3313 | }, 3314 | "conflict": { 3315 | "symfony/dependency-injection": "<3.4", 3316 | "symfony/process": "<3.3" 3317 | }, 3318 | "require-dev": { 3319 | "psr/log": "~1.0", 3320 | "symfony/config": "~3.4|~4.0", 3321 | "symfony/dependency-injection": "~3.4|~4.0", 3322 | "symfony/event-dispatcher": "~3.4|~4.0", 3323 | "symfony/lock": "~3.4|~4.0", 3324 | "symfony/process": "~3.4|~4.0" 3325 | }, 3326 | "suggest": { 3327 | "psr/log-implementation": "For using the console logger", 3328 | "symfony/event-dispatcher": "", 3329 | "symfony/lock": "", 3330 | "symfony/process": "" 3331 | }, 3332 | "type": "library", 3333 | "extra": { 3334 | "branch-alias": { 3335 | "dev-master": "4.2-dev" 3336 | } 3337 | }, 3338 | "autoload": { 3339 | "psr-4": { 3340 | "Symfony\\Component\\Console\\": "" 3341 | }, 3342 | "exclude-from-classmap": [ 3343 | "/Tests/" 3344 | ] 3345 | }, 3346 | "notification-url": "https://packagist.org/downloads/", 3347 | "license": [ 3348 | "MIT" 3349 | ], 3350 | "authors": [ 3351 | { 3352 | "name": "Fabien Potencier", 3353 | "email": "fabien@symfony.com" 3354 | }, 3355 | { 3356 | "name": "Symfony Community", 3357 | "homepage": "https://symfony.com/contributors" 3358 | } 3359 | ], 3360 | "description": "Symfony Console Component", 3361 | "homepage": "https://symfony.com", 3362 | "time": "2018-11-27T07:40:44+00:00" 3363 | }, 3364 | { 3365 | "name": "symfony/contracts", 3366 | "version": "v1.0.2", 3367 | "source": { 3368 | "type": "git", 3369 | "url": "https://github.com/symfony/contracts.git", 3370 | "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf" 3371 | }, 3372 | "dist": { 3373 | "type": "zip", 3374 | "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf", 3375 | "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf", 3376 | "shasum": "" 3377 | }, 3378 | "require": { 3379 | "php": "^7.1.3" 3380 | }, 3381 | "require-dev": { 3382 | "psr/cache": "^1.0", 3383 | "psr/container": "^1.0" 3384 | }, 3385 | "suggest": { 3386 | "psr/cache": "When using the Cache contracts", 3387 | "psr/container": "When using the Service contracts", 3388 | "symfony/cache-contracts-implementation": "", 3389 | "symfony/service-contracts-implementation": "", 3390 | "symfony/translation-contracts-implementation": "" 3391 | }, 3392 | "type": "library", 3393 | "extra": { 3394 | "branch-alias": { 3395 | "dev-master": "1.0-dev" 3396 | } 3397 | }, 3398 | "autoload": { 3399 | "psr-4": { 3400 | "Symfony\\Contracts\\": "" 3401 | }, 3402 | "exclude-from-classmap": [ 3403 | "**/Tests/" 3404 | ] 3405 | }, 3406 | "notification-url": "https://packagist.org/downloads/", 3407 | "license": [ 3408 | "MIT" 3409 | ], 3410 | "authors": [ 3411 | { 3412 | "name": "Nicolas Grekas", 3413 | "email": "p@tchwork.com" 3414 | }, 3415 | { 3416 | "name": "Symfony Community", 3417 | "homepage": "https://symfony.com/contributors" 3418 | } 3419 | ], 3420 | "description": "A set of abstractions extracted out of the Symfony components", 3421 | "homepage": "https://symfony.com", 3422 | "keywords": [ 3423 | "abstractions", 3424 | "contracts", 3425 | "decoupling", 3426 | "interfaces", 3427 | "interoperability", 3428 | "standards" 3429 | ], 3430 | "time": "2018-12-05T08:06:11+00:00" 3431 | }, 3432 | { 3433 | "name": "symfony/css-selector", 3434 | "version": "v4.2.1", 3435 | "source": { 3436 | "type": "git", 3437 | "url": "https://github.com/symfony/css-selector.git", 3438 | "reference": "aa9fa526ba1b2ec087ffdfb32753803d999fcfcd" 3439 | }, 3440 | "dist": { 3441 | "type": "zip", 3442 | "url": "https://api.github.com/repos/symfony/css-selector/zipball/aa9fa526ba1b2ec087ffdfb32753803d999fcfcd", 3443 | "reference": "aa9fa526ba1b2ec087ffdfb32753803d999fcfcd", 3444 | "shasum": "" 3445 | }, 3446 | "require": { 3447 | "php": "^7.1.3" 3448 | }, 3449 | "type": "library", 3450 | "extra": { 3451 | "branch-alias": { 3452 | "dev-master": "4.2-dev" 3453 | } 3454 | }, 3455 | "autoload": { 3456 | "psr-4": { 3457 | "Symfony\\Component\\CssSelector\\": "" 3458 | }, 3459 | "exclude-from-classmap": [ 3460 | "/Tests/" 3461 | ] 3462 | }, 3463 | "notification-url": "https://packagist.org/downloads/", 3464 | "license": [ 3465 | "MIT" 3466 | ], 3467 | "authors": [ 3468 | { 3469 | "name": "Jean-François Simon", 3470 | "email": "jeanfrancois.simon@sensiolabs.com" 3471 | }, 3472 | { 3473 | "name": "Fabien Potencier", 3474 | "email": "fabien@symfony.com" 3475 | }, 3476 | { 3477 | "name": "Symfony Community", 3478 | "homepage": "https://symfony.com/contributors" 3479 | } 3480 | ], 3481 | "description": "Symfony CssSelector Component", 3482 | "homepage": "https://symfony.com", 3483 | "time": "2018-11-11T19:52:12+00:00" 3484 | }, 3485 | { 3486 | "name": "symfony/debug", 3487 | "version": "v4.2.1", 3488 | "source": { 3489 | "type": "git", 3490 | "url": "https://github.com/symfony/debug.git", 3491 | "reference": "e0a2b92ee0b5b934f973d90c2f58e18af109d276" 3492 | }, 3493 | "dist": { 3494 | "type": "zip", 3495 | "url": "https://api.github.com/repos/symfony/debug/zipball/e0a2b92ee0b5b934f973d90c2f58e18af109d276", 3496 | "reference": "e0a2b92ee0b5b934f973d90c2f58e18af109d276", 3497 | "shasum": "" 3498 | }, 3499 | "require": { 3500 | "php": "^7.1.3", 3501 | "psr/log": "~1.0" 3502 | }, 3503 | "conflict": { 3504 | "symfony/http-kernel": "<3.4" 3505 | }, 3506 | "require-dev": { 3507 | "symfony/http-kernel": "~3.4|~4.0" 3508 | }, 3509 | "type": "library", 3510 | "extra": { 3511 | "branch-alias": { 3512 | "dev-master": "4.2-dev" 3513 | } 3514 | }, 3515 | "autoload": { 3516 | "psr-4": { 3517 | "Symfony\\Component\\Debug\\": "" 3518 | }, 3519 | "exclude-from-classmap": [ 3520 | "/Tests/" 3521 | ] 3522 | }, 3523 | "notification-url": "https://packagist.org/downloads/", 3524 | "license": [ 3525 | "MIT" 3526 | ], 3527 | "authors": [ 3528 | { 3529 | "name": "Fabien Potencier", 3530 | "email": "fabien@symfony.com" 3531 | }, 3532 | { 3533 | "name": "Symfony Community", 3534 | "homepage": "https://symfony.com/contributors" 3535 | } 3536 | ], 3537 | "description": "Symfony Debug Component", 3538 | "homepage": "https://symfony.com", 3539 | "time": "2018-11-28T18:24:18+00:00" 3540 | }, 3541 | { 3542 | "name": "symfony/event-dispatcher", 3543 | "version": "v4.2.1", 3544 | "source": { 3545 | "type": "git", 3546 | "url": "https://github.com/symfony/event-dispatcher.git", 3547 | "reference": "921f49c3158a276d27c0d770a5a347a3b718b328" 3548 | }, 3549 | "dist": { 3550 | "type": "zip", 3551 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/921f49c3158a276d27c0d770a5a347a3b718b328", 3552 | "reference": "921f49c3158a276d27c0d770a5a347a3b718b328", 3553 | "shasum": "" 3554 | }, 3555 | "require": { 3556 | "php": "^7.1.3", 3557 | "symfony/contracts": "^1.0" 3558 | }, 3559 | "conflict": { 3560 | "symfony/dependency-injection": "<3.4" 3561 | }, 3562 | "require-dev": { 3563 | "psr/log": "~1.0", 3564 | "symfony/config": "~3.4|~4.0", 3565 | "symfony/dependency-injection": "~3.4|~4.0", 3566 | "symfony/expression-language": "~3.4|~4.0", 3567 | "symfony/stopwatch": "~3.4|~4.0" 3568 | }, 3569 | "suggest": { 3570 | "symfony/dependency-injection": "", 3571 | "symfony/http-kernel": "" 3572 | }, 3573 | "type": "library", 3574 | "extra": { 3575 | "branch-alias": { 3576 | "dev-master": "4.2-dev" 3577 | } 3578 | }, 3579 | "autoload": { 3580 | "psr-4": { 3581 | "Symfony\\Component\\EventDispatcher\\": "" 3582 | }, 3583 | "exclude-from-classmap": [ 3584 | "/Tests/" 3585 | ] 3586 | }, 3587 | "notification-url": "https://packagist.org/downloads/", 3588 | "license": [ 3589 | "MIT" 3590 | ], 3591 | "authors": [ 3592 | { 3593 | "name": "Fabien Potencier", 3594 | "email": "fabien@symfony.com" 3595 | }, 3596 | { 3597 | "name": "Symfony Community", 3598 | "homepage": "https://symfony.com/contributors" 3599 | } 3600 | ], 3601 | "description": "Symfony EventDispatcher Component", 3602 | "homepage": "https://symfony.com", 3603 | "time": "2018-12-01T08:52:38+00:00" 3604 | }, 3605 | { 3606 | "name": "symfony/finder", 3607 | "version": "v4.2.1", 3608 | "source": { 3609 | "type": "git", 3610 | "url": "https://github.com/symfony/finder.git", 3611 | "reference": "e53d477d7b5c4982d0e1bfd2298dbee63d01441d" 3612 | }, 3613 | "dist": { 3614 | "type": "zip", 3615 | "url": "https://api.github.com/repos/symfony/finder/zipball/e53d477d7b5c4982d0e1bfd2298dbee63d01441d", 3616 | "reference": "e53d477d7b5c4982d0e1bfd2298dbee63d01441d", 3617 | "shasum": "" 3618 | }, 3619 | "require": { 3620 | "php": "^7.1.3" 3621 | }, 3622 | "type": "library", 3623 | "extra": { 3624 | "branch-alias": { 3625 | "dev-master": "4.2-dev" 3626 | } 3627 | }, 3628 | "autoload": { 3629 | "psr-4": { 3630 | "Symfony\\Component\\Finder\\": "" 3631 | }, 3632 | "exclude-from-classmap": [ 3633 | "/Tests/" 3634 | ] 3635 | }, 3636 | "notification-url": "https://packagist.org/downloads/", 3637 | "license": [ 3638 | "MIT" 3639 | ], 3640 | "authors": [ 3641 | { 3642 | "name": "Fabien Potencier", 3643 | "email": "fabien@symfony.com" 3644 | }, 3645 | { 3646 | "name": "Symfony Community", 3647 | "homepage": "https://symfony.com/contributors" 3648 | } 3649 | ], 3650 | "description": "Symfony Finder Component", 3651 | "homepage": "https://symfony.com", 3652 | "time": "2018-11-11T19:52:12+00:00" 3653 | }, 3654 | { 3655 | "name": "symfony/http-foundation", 3656 | "version": "v4.2.1", 3657 | "source": { 3658 | "type": "git", 3659 | "url": "https://github.com/symfony/http-foundation.git", 3660 | "reference": "1b31f3017fadd8cb05cf2c8aebdbf3b12a943851" 3661 | }, 3662 | "dist": { 3663 | "type": "zip", 3664 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/1b31f3017fadd8cb05cf2c8aebdbf3b12a943851", 3665 | "reference": "1b31f3017fadd8cb05cf2c8aebdbf3b12a943851", 3666 | "shasum": "" 3667 | }, 3668 | "require": { 3669 | "php": "^7.1.3", 3670 | "symfony/polyfill-mbstring": "~1.1" 3671 | }, 3672 | "require-dev": { 3673 | "predis/predis": "~1.0", 3674 | "symfony/expression-language": "~3.4|~4.0" 3675 | }, 3676 | "type": "library", 3677 | "extra": { 3678 | "branch-alias": { 3679 | "dev-master": "4.2-dev" 3680 | } 3681 | }, 3682 | "autoload": { 3683 | "psr-4": { 3684 | "Symfony\\Component\\HttpFoundation\\": "" 3685 | }, 3686 | "exclude-from-classmap": [ 3687 | "/Tests/" 3688 | ] 3689 | }, 3690 | "notification-url": "https://packagist.org/downloads/", 3691 | "license": [ 3692 | "MIT" 3693 | ], 3694 | "authors": [ 3695 | { 3696 | "name": "Fabien Potencier", 3697 | "email": "fabien@symfony.com" 3698 | }, 3699 | { 3700 | "name": "Symfony Community", 3701 | "homepage": "https://symfony.com/contributors" 3702 | } 3703 | ], 3704 | "description": "Symfony HttpFoundation Component", 3705 | "homepage": "https://symfony.com", 3706 | "time": "2018-11-26T10:55:26+00:00" 3707 | }, 3708 | { 3709 | "name": "symfony/http-kernel", 3710 | "version": "v4.2.1", 3711 | "source": { 3712 | "type": "git", 3713 | "url": "https://github.com/symfony/http-kernel.git", 3714 | "reference": "b39ceffc0388232c309cbde3a7c3685f2ec0a624" 3715 | }, 3716 | "dist": { 3717 | "type": "zip", 3718 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b39ceffc0388232c309cbde3a7c3685f2ec0a624", 3719 | "reference": "b39ceffc0388232c309cbde3a7c3685f2ec0a624", 3720 | "shasum": "" 3721 | }, 3722 | "require": { 3723 | "php": "^7.1.3", 3724 | "psr/log": "~1.0", 3725 | "symfony/contracts": "^1.0.2", 3726 | "symfony/debug": "~3.4|~4.0", 3727 | "symfony/event-dispatcher": "~4.1", 3728 | "symfony/http-foundation": "^4.1.1", 3729 | "symfony/polyfill-ctype": "~1.8" 3730 | }, 3731 | "conflict": { 3732 | "symfony/config": "<3.4", 3733 | "symfony/dependency-injection": "<4.2", 3734 | "symfony/translation": "<4.2", 3735 | "symfony/var-dumper": "<4.1.1", 3736 | "twig/twig": "<1.34|<2.4,>=2" 3737 | }, 3738 | "provide": { 3739 | "psr/log-implementation": "1.0" 3740 | }, 3741 | "require-dev": { 3742 | "psr/cache": "~1.0", 3743 | "symfony/browser-kit": "~3.4|~4.0", 3744 | "symfony/config": "~3.4|~4.0", 3745 | "symfony/console": "~3.4|~4.0", 3746 | "symfony/css-selector": "~3.4|~4.0", 3747 | "symfony/dependency-injection": "^4.2", 3748 | "symfony/dom-crawler": "~3.4|~4.0", 3749 | "symfony/expression-language": "~3.4|~4.0", 3750 | "symfony/finder": "~3.4|~4.0", 3751 | "symfony/process": "~3.4|~4.0", 3752 | "symfony/routing": "~3.4|~4.0", 3753 | "symfony/stopwatch": "~3.4|~4.0", 3754 | "symfony/templating": "~3.4|~4.0", 3755 | "symfony/translation": "~4.2", 3756 | "symfony/var-dumper": "^4.1.1" 3757 | }, 3758 | "suggest": { 3759 | "symfony/browser-kit": "", 3760 | "symfony/config": "", 3761 | "symfony/console": "", 3762 | "symfony/dependency-injection": "", 3763 | "symfony/var-dumper": "" 3764 | }, 3765 | "type": "library", 3766 | "extra": { 3767 | "branch-alias": { 3768 | "dev-master": "4.2-dev" 3769 | } 3770 | }, 3771 | "autoload": { 3772 | "psr-4": { 3773 | "Symfony\\Component\\HttpKernel\\": "" 3774 | }, 3775 | "exclude-from-classmap": [ 3776 | "/Tests/" 3777 | ] 3778 | }, 3779 | "notification-url": "https://packagist.org/downloads/", 3780 | "license": [ 3781 | "MIT" 3782 | ], 3783 | "authors": [ 3784 | { 3785 | "name": "Fabien Potencier", 3786 | "email": "fabien@symfony.com" 3787 | }, 3788 | { 3789 | "name": "Symfony Community", 3790 | "homepage": "https://symfony.com/contributors" 3791 | } 3792 | ], 3793 | "description": "Symfony HttpKernel Component", 3794 | "homepage": "https://symfony.com", 3795 | "time": "2018-12-06T17:39:52+00:00" 3796 | }, 3797 | { 3798 | "name": "symfony/polyfill-ctype", 3799 | "version": "v1.10.0", 3800 | "source": { 3801 | "type": "git", 3802 | "url": "https://github.com/symfony/polyfill-ctype.git", 3803 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" 3804 | }, 3805 | "dist": { 3806 | "type": "zip", 3807 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", 3808 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", 3809 | "shasum": "" 3810 | }, 3811 | "require": { 3812 | "php": ">=5.3.3" 3813 | }, 3814 | "suggest": { 3815 | "ext-ctype": "For best performance" 3816 | }, 3817 | "type": "library", 3818 | "extra": { 3819 | "branch-alias": { 3820 | "dev-master": "1.9-dev" 3821 | } 3822 | }, 3823 | "autoload": { 3824 | "psr-4": { 3825 | "Symfony\\Polyfill\\Ctype\\": "" 3826 | }, 3827 | "files": [ 3828 | "bootstrap.php" 3829 | ] 3830 | }, 3831 | "notification-url": "https://packagist.org/downloads/", 3832 | "license": [ 3833 | "MIT" 3834 | ], 3835 | "authors": [ 3836 | { 3837 | "name": "Symfony Community", 3838 | "homepage": "https://symfony.com/contributors" 3839 | }, 3840 | { 3841 | "name": "Gert de Pagter", 3842 | "email": "BackEndTea@gmail.com" 3843 | } 3844 | ], 3845 | "description": "Symfony polyfill for ctype functions", 3846 | "homepage": "https://symfony.com", 3847 | "keywords": [ 3848 | "compatibility", 3849 | "ctype", 3850 | "polyfill", 3851 | "portable" 3852 | ], 3853 | "time": "2018-08-06T14:22:27+00:00" 3854 | }, 3855 | { 3856 | "name": "symfony/polyfill-mbstring", 3857 | "version": "v1.10.0", 3858 | "source": { 3859 | "type": "git", 3860 | "url": "https://github.com/symfony/polyfill-mbstring.git", 3861 | "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" 3862 | }, 3863 | "dist": { 3864 | "type": "zip", 3865 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", 3866 | "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", 3867 | "shasum": "" 3868 | }, 3869 | "require": { 3870 | "php": ">=5.3.3" 3871 | }, 3872 | "suggest": { 3873 | "ext-mbstring": "For best performance" 3874 | }, 3875 | "type": "library", 3876 | "extra": { 3877 | "branch-alias": { 3878 | "dev-master": "1.9-dev" 3879 | } 3880 | }, 3881 | "autoload": { 3882 | "psr-4": { 3883 | "Symfony\\Polyfill\\Mbstring\\": "" 3884 | }, 3885 | "files": [ 3886 | "bootstrap.php" 3887 | ] 3888 | }, 3889 | "notification-url": "https://packagist.org/downloads/", 3890 | "license": [ 3891 | "MIT" 3892 | ], 3893 | "authors": [ 3894 | { 3895 | "name": "Nicolas Grekas", 3896 | "email": "p@tchwork.com" 3897 | }, 3898 | { 3899 | "name": "Symfony Community", 3900 | "homepage": "https://symfony.com/contributors" 3901 | } 3902 | ], 3903 | "description": "Symfony polyfill for the Mbstring extension", 3904 | "homepage": "https://symfony.com", 3905 | "keywords": [ 3906 | "compatibility", 3907 | "mbstring", 3908 | "polyfill", 3909 | "portable", 3910 | "shim" 3911 | ], 3912 | "time": "2018-09-21T13:07:52+00:00" 3913 | }, 3914 | { 3915 | "name": "symfony/polyfill-php72", 3916 | "version": "v1.10.0", 3917 | "source": { 3918 | "type": "git", 3919 | "url": "https://github.com/symfony/polyfill-php72.git", 3920 | "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631" 3921 | }, 3922 | "dist": { 3923 | "type": "zip", 3924 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9050816e2ca34a8e916c3a0ae8b9c2fccf68b631", 3925 | "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631", 3926 | "shasum": "" 3927 | }, 3928 | "require": { 3929 | "php": ">=5.3.3" 3930 | }, 3931 | "type": "library", 3932 | "extra": { 3933 | "branch-alias": { 3934 | "dev-master": "1.9-dev" 3935 | } 3936 | }, 3937 | "autoload": { 3938 | "psr-4": { 3939 | "Symfony\\Polyfill\\Php72\\": "" 3940 | }, 3941 | "files": [ 3942 | "bootstrap.php" 3943 | ] 3944 | }, 3945 | "notification-url": "https://packagist.org/downloads/", 3946 | "license": [ 3947 | "MIT" 3948 | ], 3949 | "authors": [ 3950 | { 3951 | "name": "Nicolas Grekas", 3952 | "email": "p@tchwork.com" 3953 | }, 3954 | { 3955 | "name": "Symfony Community", 3956 | "homepage": "https://symfony.com/contributors" 3957 | } 3958 | ], 3959 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", 3960 | "homepage": "https://symfony.com", 3961 | "keywords": [ 3962 | "compatibility", 3963 | "polyfill", 3964 | "portable", 3965 | "shim" 3966 | ], 3967 | "time": "2018-09-21T13:07:52+00:00" 3968 | }, 3969 | { 3970 | "name": "symfony/process", 3971 | "version": "v4.2.1", 3972 | "source": { 3973 | "type": "git", 3974 | "url": "https://github.com/symfony/process.git", 3975 | "reference": "2b341009ccec76837a7f46f59641b431e4d4c2b0" 3976 | }, 3977 | "dist": { 3978 | "type": "zip", 3979 | "url": "https://api.github.com/repos/symfony/process/zipball/2b341009ccec76837a7f46f59641b431e4d4c2b0", 3980 | "reference": "2b341009ccec76837a7f46f59641b431e4d4c2b0", 3981 | "shasum": "" 3982 | }, 3983 | "require": { 3984 | "php": "^7.1.3" 3985 | }, 3986 | "type": "library", 3987 | "extra": { 3988 | "branch-alias": { 3989 | "dev-master": "4.2-dev" 3990 | } 3991 | }, 3992 | "autoload": { 3993 | "psr-4": { 3994 | "Symfony\\Component\\Process\\": "" 3995 | }, 3996 | "exclude-from-classmap": [ 3997 | "/Tests/" 3998 | ] 3999 | }, 4000 | "notification-url": "https://packagist.org/downloads/", 4001 | "license": [ 4002 | "MIT" 4003 | ], 4004 | "authors": [ 4005 | { 4006 | "name": "Fabien Potencier", 4007 | "email": "fabien@symfony.com" 4008 | }, 4009 | { 4010 | "name": "Symfony Community", 4011 | "homepage": "https://symfony.com/contributors" 4012 | } 4013 | ], 4014 | "description": "Symfony Process Component", 4015 | "homepage": "https://symfony.com", 4016 | "time": "2018-11-20T16:22:05+00:00" 4017 | }, 4018 | { 4019 | "name": "symfony/routing", 4020 | "version": "v4.2.1", 4021 | "source": { 4022 | "type": "git", 4023 | "url": "https://github.com/symfony/routing.git", 4024 | "reference": "649460207e77da6c545326c7f53618d23ad2c866" 4025 | }, 4026 | "dist": { 4027 | "type": "zip", 4028 | "url": "https://api.github.com/repos/symfony/routing/zipball/649460207e77da6c545326c7f53618d23ad2c866", 4029 | "reference": "649460207e77da6c545326c7f53618d23ad2c866", 4030 | "shasum": "" 4031 | }, 4032 | "require": { 4033 | "php": "^7.1.3" 4034 | }, 4035 | "conflict": { 4036 | "symfony/config": "<4.2", 4037 | "symfony/dependency-injection": "<3.4", 4038 | "symfony/yaml": "<3.4" 4039 | }, 4040 | "require-dev": { 4041 | "doctrine/annotations": "~1.0", 4042 | "psr/log": "~1.0", 4043 | "symfony/config": "~4.2", 4044 | "symfony/dependency-injection": "~3.4|~4.0", 4045 | "symfony/expression-language": "~3.4|~4.0", 4046 | "symfony/http-foundation": "~3.4|~4.0", 4047 | "symfony/yaml": "~3.4|~4.0" 4048 | }, 4049 | "suggest": { 4050 | "doctrine/annotations": "For using the annotation loader", 4051 | "symfony/config": "For using the all-in-one router or any loader", 4052 | "symfony/dependency-injection": "For loading routes from a service", 4053 | "symfony/expression-language": "For using expression matching", 4054 | "symfony/http-foundation": "For using a Symfony Request object", 4055 | "symfony/yaml": "For using the YAML loader" 4056 | }, 4057 | "type": "library", 4058 | "extra": { 4059 | "branch-alias": { 4060 | "dev-master": "4.2-dev" 4061 | } 4062 | }, 4063 | "autoload": { 4064 | "psr-4": { 4065 | "Symfony\\Component\\Routing\\": "" 4066 | }, 4067 | "exclude-from-classmap": [ 4068 | "/Tests/" 4069 | ] 4070 | }, 4071 | "notification-url": "https://packagist.org/downloads/", 4072 | "license": [ 4073 | "MIT" 4074 | ], 4075 | "authors": [ 4076 | { 4077 | "name": "Fabien Potencier", 4078 | "email": "fabien@symfony.com" 4079 | }, 4080 | { 4081 | "name": "Symfony Community", 4082 | "homepage": "https://symfony.com/contributors" 4083 | } 4084 | ], 4085 | "description": "Symfony Routing Component", 4086 | "homepage": "https://symfony.com", 4087 | "keywords": [ 4088 | "router", 4089 | "routing", 4090 | "uri", 4091 | "url" 4092 | ], 4093 | "time": "2018-12-03T22:08:12+00:00" 4094 | }, 4095 | { 4096 | "name": "symfony/translation", 4097 | "version": "v4.2.1", 4098 | "source": { 4099 | "type": "git", 4100 | "url": "https://github.com/symfony/translation.git", 4101 | "reference": "c0e2191e9bed845946ab3d99767513b56ca7dcd6" 4102 | }, 4103 | "dist": { 4104 | "type": "zip", 4105 | "url": "https://api.github.com/repos/symfony/translation/zipball/c0e2191e9bed845946ab3d99767513b56ca7dcd6", 4106 | "reference": "c0e2191e9bed845946ab3d99767513b56ca7dcd6", 4107 | "shasum": "" 4108 | }, 4109 | "require": { 4110 | "php": "^7.1.3", 4111 | "symfony/contracts": "^1.0.2", 4112 | "symfony/polyfill-mbstring": "~1.0" 4113 | }, 4114 | "conflict": { 4115 | "symfony/config": "<3.4", 4116 | "symfony/dependency-injection": "<3.4", 4117 | "symfony/yaml": "<3.4" 4118 | }, 4119 | "provide": { 4120 | "symfony/translation-contracts-implementation": "1.0" 4121 | }, 4122 | "require-dev": { 4123 | "psr/log": "~1.0", 4124 | "symfony/config": "~3.4|~4.0", 4125 | "symfony/console": "~3.4|~4.0", 4126 | "symfony/dependency-injection": "~3.4|~4.0", 4127 | "symfony/finder": "~2.8|~3.0|~4.0", 4128 | "symfony/intl": "~3.4|~4.0", 4129 | "symfony/yaml": "~3.4|~4.0" 4130 | }, 4131 | "suggest": { 4132 | "psr/log-implementation": "To use logging capability in translator", 4133 | "symfony/config": "", 4134 | "symfony/yaml": "" 4135 | }, 4136 | "type": "library", 4137 | "extra": { 4138 | "branch-alias": { 4139 | "dev-master": "4.2-dev" 4140 | } 4141 | }, 4142 | "autoload": { 4143 | "psr-4": { 4144 | "Symfony\\Component\\Translation\\": "" 4145 | }, 4146 | "exclude-from-classmap": [ 4147 | "/Tests/" 4148 | ] 4149 | }, 4150 | "notification-url": "https://packagist.org/downloads/", 4151 | "license": [ 4152 | "MIT" 4153 | ], 4154 | "authors": [ 4155 | { 4156 | "name": "Fabien Potencier", 4157 | "email": "fabien@symfony.com" 4158 | }, 4159 | { 4160 | "name": "Symfony Community", 4161 | "homepage": "https://symfony.com/contributors" 4162 | } 4163 | ], 4164 | "description": "Symfony Translation Component", 4165 | "homepage": "https://symfony.com", 4166 | "time": "2018-12-06T10:45:32+00:00" 4167 | }, 4168 | { 4169 | "name": "symfony/var-dumper", 4170 | "version": "v4.2.1", 4171 | "source": { 4172 | "type": "git", 4173 | "url": "https://github.com/symfony/var-dumper.git", 4174 | "reference": "db61258540350725f4beb6b84006e32398acd120" 4175 | }, 4176 | "dist": { 4177 | "type": "zip", 4178 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/db61258540350725f4beb6b84006e32398acd120", 4179 | "reference": "db61258540350725f4beb6b84006e32398acd120", 4180 | "shasum": "" 4181 | }, 4182 | "require": { 4183 | "php": "^7.1.3", 4184 | "symfony/polyfill-mbstring": "~1.0", 4185 | "symfony/polyfill-php72": "~1.5" 4186 | }, 4187 | "conflict": { 4188 | "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", 4189 | "symfony/console": "<3.4" 4190 | }, 4191 | "require-dev": { 4192 | "ext-iconv": "*", 4193 | "symfony/process": "~3.4|~4.0", 4194 | "twig/twig": "~1.34|~2.4" 4195 | }, 4196 | "suggest": { 4197 | "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", 4198 | "ext-intl": "To show region name in time zone dump", 4199 | "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" 4200 | }, 4201 | "bin": [ 4202 | "Resources/bin/var-dump-server" 4203 | ], 4204 | "type": "library", 4205 | "extra": { 4206 | "branch-alias": { 4207 | "dev-master": "4.2-dev" 4208 | } 4209 | }, 4210 | "autoload": { 4211 | "files": [ 4212 | "Resources/functions/dump.php" 4213 | ], 4214 | "psr-4": { 4215 | "Symfony\\Component\\VarDumper\\": "" 4216 | }, 4217 | "exclude-from-classmap": [ 4218 | "/Tests/" 4219 | ] 4220 | }, 4221 | "notification-url": "https://packagist.org/downloads/", 4222 | "license": [ 4223 | "MIT" 4224 | ], 4225 | "authors": [ 4226 | { 4227 | "name": "Nicolas Grekas", 4228 | "email": "p@tchwork.com" 4229 | }, 4230 | { 4231 | "name": "Symfony Community", 4232 | "homepage": "https://symfony.com/contributors" 4233 | } 4234 | ], 4235 | "description": "Symfony mechanism for exploring and dumping PHP variables", 4236 | "homepage": "https://symfony.com", 4237 | "keywords": [ 4238 | "debug", 4239 | "dump" 4240 | ], 4241 | "time": "2018-11-25T12:50:42+00:00" 4242 | }, 4243 | { 4244 | "name": "theseer/tokenizer", 4245 | "version": "1.1.0", 4246 | "source": { 4247 | "type": "git", 4248 | "url": "https://github.com/theseer/tokenizer.git", 4249 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" 4250 | }, 4251 | "dist": { 4252 | "type": "zip", 4253 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", 4254 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", 4255 | "shasum": "" 4256 | }, 4257 | "require": { 4258 | "ext-dom": "*", 4259 | "ext-tokenizer": "*", 4260 | "ext-xmlwriter": "*", 4261 | "php": "^7.0" 4262 | }, 4263 | "type": "library", 4264 | "autoload": { 4265 | "classmap": [ 4266 | "src/" 4267 | ] 4268 | }, 4269 | "notification-url": "https://packagist.org/downloads/", 4270 | "license": [ 4271 | "BSD-3-Clause" 4272 | ], 4273 | "authors": [ 4274 | { 4275 | "name": "Arne Blankerts", 4276 | "email": "arne@blankerts.de", 4277 | "role": "Developer" 4278 | } 4279 | ], 4280 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 4281 | "time": "2017-04-07T12:08:54+00:00" 4282 | }, 4283 | { 4284 | "name": "tijsverkoyen/css-to-inline-styles", 4285 | "version": "2.2.1", 4286 | "source": { 4287 | "type": "git", 4288 | "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", 4289 | "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757" 4290 | }, 4291 | "dist": { 4292 | "type": "zip", 4293 | "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", 4294 | "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", 4295 | "shasum": "" 4296 | }, 4297 | "require": { 4298 | "php": "^5.5 || ^7.0", 4299 | "symfony/css-selector": "^2.7 || ^3.0 || ^4.0" 4300 | }, 4301 | "require-dev": { 4302 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 4303 | }, 4304 | "type": "library", 4305 | "extra": { 4306 | "branch-alias": { 4307 | "dev-master": "2.2.x-dev" 4308 | } 4309 | }, 4310 | "autoload": { 4311 | "psr-4": { 4312 | "TijsVerkoyen\\CssToInlineStyles\\": "src" 4313 | } 4314 | }, 4315 | "notification-url": "https://packagist.org/downloads/", 4316 | "license": [ 4317 | "BSD-3-Clause" 4318 | ], 4319 | "authors": [ 4320 | { 4321 | "name": "Tijs Verkoyen", 4322 | "email": "css_to_inline_styles@verkoyen.eu", 4323 | "role": "Developer" 4324 | } 4325 | ], 4326 | "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", 4327 | "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", 4328 | "time": "2017-11-27T11:13:29+00:00" 4329 | }, 4330 | { 4331 | "name": "vlucas/phpdotenv", 4332 | "version": "v2.5.1", 4333 | "source": { 4334 | "type": "git", 4335 | "url": "https://github.com/vlucas/phpdotenv.git", 4336 | "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" 4337 | }, 4338 | "dist": { 4339 | "type": "zip", 4340 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", 4341 | "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", 4342 | "shasum": "" 4343 | }, 4344 | "require": { 4345 | "php": ">=5.3.9" 4346 | }, 4347 | "require-dev": { 4348 | "phpunit/phpunit": "^4.8.35 || ^5.0" 4349 | }, 4350 | "type": "library", 4351 | "extra": { 4352 | "branch-alias": { 4353 | "dev-master": "2.5-dev" 4354 | } 4355 | }, 4356 | "autoload": { 4357 | "psr-4": { 4358 | "Dotenv\\": "src/" 4359 | } 4360 | }, 4361 | "notification-url": "https://packagist.org/downloads/", 4362 | "license": [ 4363 | "BSD-3-Clause" 4364 | ], 4365 | "authors": [ 4366 | { 4367 | "name": "Vance Lucas", 4368 | "email": "vance@vancelucas.com", 4369 | "homepage": "http://www.vancelucas.com" 4370 | } 4371 | ], 4372 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", 4373 | "keywords": [ 4374 | "dotenv", 4375 | "env", 4376 | "environment" 4377 | ], 4378 | "time": "2018-07-29T20:33:41+00:00" 4379 | }, 4380 | { 4381 | "name": "webmozart/assert", 4382 | "version": "1.3.0", 4383 | "source": { 4384 | "type": "git", 4385 | "url": "https://github.com/webmozart/assert.git", 4386 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a" 4387 | }, 4388 | "dist": { 4389 | "type": "zip", 4390 | "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", 4391 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a", 4392 | "shasum": "" 4393 | }, 4394 | "require": { 4395 | "php": "^5.3.3 || ^7.0" 4396 | }, 4397 | "require-dev": { 4398 | "phpunit/phpunit": "^4.6", 4399 | "sebastian/version": "^1.0.1" 4400 | }, 4401 | "type": "library", 4402 | "extra": { 4403 | "branch-alias": { 4404 | "dev-master": "1.3-dev" 4405 | } 4406 | }, 4407 | "autoload": { 4408 | "psr-4": { 4409 | "Webmozart\\Assert\\": "src/" 4410 | } 4411 | }, 4412 | "notification-url": "https://packagist.org/downloads/", 4413 | "license": [ 4414 | "MIT" 4415 | ], 4416 | "authors": [ 4417 | { 4418 | "name": "Bernhard Schussek", 4419 | "email": "bschussek@gmail.com" 4420 | } 4421 | ], 4422 | "description": "Assertions to validate method input/output with nice error messages.", 4423 | "keywords": [ 4424 | "assert", 4425 | "check", 4426 | "validate" 4427 | ], 4428 | "time": "2018-01-29T19:49:41+00:00" 4429 | }, 4430 | { 4431 | "name": "zendframework/zend-diactoros", 4432 | "version": "1.8.6", 4433 | "source": { 4434 | "type": "git", 4435 | "url": "https://github.com/zendframework/zend-diactoros.git", 4436 | "reference": "20da13beba0dde8fb648be3cc19765732790f46e" 4437 | }, 4438 | "dist": { 4439 | "type": "zip", 4440 | "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/20da13beba0dde8fb648be3cc19765732790f46e", 4441 | "reference": "20da13beba0dde8fb648be3cc19765732790f46e", 4442 | "shasum": "" 4443 | }, 4444 | "require": { 4445 | "php": "^5.6 || ^7.0", 4446 | "psr/http-message": "^1.0" 4447 | }, 4448 | "provide": { 4449 | "psr/http-message-implementation": "1.0" 4450 | }, 4451 | "require-dev": { 4452 | "ext-dom": "*", 4453 | "ext-libxml": "*", 4454 | "php-http/psr7-integration-tests": "dev-master", 4455 | "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7", 4456 | "zendframework/zend-coding-standard": "~1.0" 4457 | }, 4458 | "type": "library", 4459 | "extra": { 4460 | "branch-alias": { 4461 | "dev-master": "1.8.x-dev", 4462 | "dev-develop": "1.9.x-dev", 4463 | "dev-release-2.0": "2.0.x-dev" 4464 | } 4465 | }, 4466 | "autoload": { 4467 | "files": [ 4468 | "src/functions/create_uploaded_file.php", 4469 | "src/functions/marshal_headers_from_sapi.php", 4470 | "src/functions/marshal_method_from_sapi.php", 4471 | "src/functions/marshal_protocol_version_from_sapi.php", 4472 | "src/functions/marshal_uri_from_sapi.php", 4473 | "src/functions/normalize_server.php", 4474 | "src/functions/normalize_uploaded_files.php", 4475 | "src/functions/parse_cookie_header.php" 4476 | ], 4477 | "psr-4": { 4478 | "Zend\\Diactoros\\": "src/" 4479 | } 4480 | }, 4481 | "notification-url": "https://packagist.org/downloads/", 4482 | "license": [ 4483 | "BSD-2-Clause" 4484 | ], 4485 | "description": "PSR HTTP Message implementations", 4486 | "homepage": "https://github.com/zendframework/zend-diactoros", 4487 | "keywords": [ 4488 | "http", 4489 | "psr", 4490 | "psr-7" 4491 | ], 4492 | "time": "2018-09-05T19:29:37+00:00" 4493 | } 4494 | ], 4495 | "aliases": [], 4496 | "minimum-stability": "stable", 4497 | "stability-flags": [], 4498 | "prefer-stable": false, 4499 | "prefer-lowest": false, 4500 | "platform": { 4501 | "php": "^7.0", 4502 | "ext-json": "*" 4503 | }, 4504 | "platform-dev": [] 4505 | } 4506 | -------------------------------------------------------------------------------- /config/press.php: -------------------------------------------------------------------------------- 1 | 'file', 18 | 19 | /* 20 | |-------------------------------------------------------------------------- 21 | | File Driver Options 22 | |-------------------------------------------------------------------------- 23 | | 24 | | Here you can specify any configuration options that should be used with 25 | | the file driver. The path option is a path to the directory with all 26 | | of the markdown files that will be processed inside the command. 27 | | 28 | */ 29 | 30 | 'file' => [ 31 | 'path' => 'blogs', 32 | ], 33 | 34 | /* 35 | |-------------------------------------------------------------------------- 36 | | URI Address Path 37 | |-------------------------------------------------------------------------- 38 | | 39 | | Use this path value to determine on what URI we are going to serve the 40 | | blog. For example, if you wanted to serve it at a different prefix 41 | | like www.example.com/my-blog, change the value to '/my-blog'. 42 | | 43 | */ 44 | 45 | 'path' => 'blogs', 46 | ]; -------------------------------------------------------------------------------- /database/factories/PostFactory.php: -------------------------------------------------------------------------------- 1 | define(Post::class, function (Faker\Generator $faker) { 6 | return [ 7 | 'identifier' => str_random(), 8 | 'slug' => str_slug($faker->sentence), 9 | 'title' => $faker->sentence, 10 | 'body' => $faker->paragraph, 11 | 'extra' => json_encode(['test' => 'value']), 12 | ]; 13 | }); -------------------------------------------------------------------------------- /database/migrations/2018_11_01_000000_create_posts_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 13 | $table->string('identifier')->index(); 14 | $table->string('slug')->unique()->index(); 15 | $table->string('title'); 16 | $table->text('body'); 17 | $table->text('extra'); 18 | $table->timestamps(); 19 | 20 | $table->index('created_at'); 21 | $table->index('updated_at'); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::dropIfExists('posts'); 33 | } 34 | } -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | ./tests/Unit 14 | 15 | 16 | 17 | ./tests/Feature 18 | 19 | 20 | 21 | 22 | ./src 23 | 24 | 25 | -------------------------------------------------------------------------------- /resources/views/test.blade.php: -------------------------------------------------------------------------------- 1 |

Working!

-------------------------------------------------------------------------------- /routes/web.php: -------------------------------------------------------------------------------- 1 | warn('Please publish the config file by running ' . 37 | '\'php artisan vendor:publish --tag=press-config\''); 38 | } 39 | 40 | try { 41 | $posts = Press::driver()->fetchPosts(); 42 | 43 | $this->info('Number of Posts: ' . count($posts)); 44 | 45 | foreach ($posts as $post) { 46 | $postRepository->save($post); 47 | 48 | $this->info('Post: ' . $post['title']); 49 | } 50 | } catch (\Exception $e) { 51 | $this->error($e->getMessage()); 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /src/Console/stubs/PressServiceProvider.stub: -------------------------------------------------------------------------------- 1 | registerFields()); 13 | } 14 | 15 | public function register() 16 | { 17 | // 18 | } 19 | 20 | protected function registerFields() 21 | { 22 | return [ 23 | // 24 | ]; 25 | } 26 | } -------------------------------------------------------------------------------- /src/Drivers/Driver.php: -------------------------------------------------------------------------------- 1 | setConfig(); 25 | 26 | $this->validateSource(); 27 | } 28 | 29 | /** 30 | * Fetch and parse all of the posts for the given source. 31 | * 32 | * @return mixed 33 | */ 34 | public abstract function fetchPosts(); 35 | 36 | /** 37 | * Fetch the appropriate config array for this source. 38 | * 39 | * @return void 40 | */ 41 | protected function setConfig() 42 | { 43 | $this->config = config('press.' . config('press.driver')); 44 | } 45 | 46 | /** 47 | * Perform any validation necessary to assert source is valid. 48 | * 49 | * @return bool 50 | */ 51 | protected function validateSource() 52 | { 53 | return true; 54 | } 55 | 56 | /** 57 | * Instantiates the PressFileParser and build up an array of posts. 58 | * 59 | * @param $content 60 | * @param $identifier 61 | * 62 | * @return void 63 | */ 64 | protected function parse($content, $identifier) 65 | { 66 | $this->posts[] = array_merge( 67 | (new PressFileParser($content))->getData(), 68 | ['identifier' => str_slug($identifier)] 69 | ); 70 | } 71 | } -------------------------------------------------------------------------------- /src/Drivers/FileDriver.php: -------------------------------------------------------------------------------- 1 | config['path']); 18 | 19 | foreach ($files as $file) { 20 | $this->parse($file->getPathname(), $file->getFilename()); 21 | } 22 | 23 | return $this->posts; 24 | } 25 | 26 | /** 27 | * Instantiates the PressFileParser and build up an array of posts. 28 | * 29 | * @return bool|void 30 | * @throws \vicgonvt\Press\Exceptions\FileDriverDirectoryNotFoundException 31 | * 32 | * @return void 33 | */ 34 | protected function validateSource() 35 | { 36 | if ( ! File::exists($this->config['path'])) { 37 | throw new FileDriverDirectoryNotFoundException( 38 | 'Director: at \'' . $this->config['path'] . '\' does not exist. ' . 39 | 'Check the directory path in the config file.' 40 | ); 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /src/Exceptions/FileDriverDirectoryNotFoundException.php: -------------------------------------------------------------------------------- 1 | MarkdownParser::parse($fieldValue), 22 | ]; 23 | } 24 | } -------------------------------------------------------------------------------- /src/Fields/Date.php: -------------------------------------------------------------------------------- 1 | Carbon::parse($fieldValue), 22 | 'parsed_at' => Carbon::now(), 23 | ]; 24 | } 25 | } -------------------------------------------------------------------------------- /src/Fields/Description.php: -------------------------------------------------------------------------------- 1 | json_encode(array_merge($extra, [ 22 | $fieldType => $fieldValue, 23 | ])) 24 | ]; 25 | } 26 | } -------------------------------------------------------------------------------- /src/Fields/FieldContract.php: -------------------------------------------------------------------------------- 1 | $fieldValue 20 | ]; 21 | } 22 | } -------------------------------------------------------------------------------- /src/Fields/Title.php: -------------------------------------------------------------------------------- 1 | text($string); 19 | } 20 | } -------------------------------------------------------------------------------- /src/Post.php: -------------------------------------------------------------------------------- 1 | extra))->$field; 24 | } 25 | } -------------------------------------------------------------------------------- /src/Press.php: -------------------------------------------------------------------------------- 1 | fields = array_merge($this->fields, $fields); 53 | } 54 | 55 | /** 56 | * Returns the list of available fields in reverse order. 57 | * 58 | * @return array 59 | */ 60 | public function availableFields() 61 | { 62 | return array_reverse($this->fields); 63 | } 64 | } -------------------------------------------------------------------------------- /src/PressBaseServiceProvider.php: -------------------------------------------------------------------------------- 1 | app->runningInConsole()) { 19 | $this->registerPublishing(); 20 | } 21 | 22 | $this->registerResources(); 23 | } 24 | 25 | /** 26 | * Register any application services. 27 | * 28 | * @return void 29 | */ 30 | public function register() 31 | { 32 | $this->commands([ 33 | Console\ProcessCommand::class, 34 | ]); 35 | } 36 | 37 | /** 38 | * Register the package resources. 39 | * 40 | * @return void 41 | */ 42 | private function registerResources() 43 | { 44 | $this->loadMigrationsFrom(__DIR__.'/../database/migrations'); 45 | $this->loadViewsFrom(__DIR__.'/../resources/views', 'press'); 46 | 47 | $this->registerFacades(); 48 | $this->registerRoutes(); 49 | $this->registerFields(); 50 | } 51 | 52 | /** 53 | * Register the package's publishable resources. 54 | * 55 | * @return void 56 | */ 57 | protected function registerPublishing() 58 | { 59 | $this->publishes([ 60 | __DIR__.'/../config/press.php' => config_path('press.php'), 61 | ], 'press-config'); 62 | 63 | $this->publishes([ 64 | __DIR__.'/Console/stubs/PressServiceProvider.stub' => app_path('Providers/PressServiceProvider.php'), 65 | ], 'press-provider'); 66 | } 67 | 68 | /** 69 | * Register the package routes. 70 | * 71 | * @return void 72 | */ 73 | protected function registerRoutes() 74 | { 75 | Route::group($this->routeConfiguration(), function () { 76 | $this->loadRoutesFrom(__DIR__.'/../routes/web.php'); 77 | }); 78 | } 79 | 80 | /** 81 | * Get the Press route group configuration array. 82 | * 83 | * @return array 84 | */ 85 | private function routeConfiguration() 86 | { 87 | return [ 88 | 'prefix' => Press::path(), 89 | 'namespace' => 'vicgonvt\Press\Http\Controllers', 90 | ]; 91 | } 92 | 93 | /** 94 | * Register any bindings to the app. 95 | * 96 | * @return void 97 | */ 98 | protected function registerFacades() 99 | { 100 | $this->app->singleton('Press', function ($app) { 101 | return new \vicgonvt\Press\Press(); 102 | }); 103 | } 104 | 105 | /** 106 | * Register any default fields to the app. 107 | * 108 | * @return void 109 | */ 110 | private function registerFields() 111 | { 112 | Press::fields([ 113 | Fields\Body::class, 114 | Fields\Date::class, 115 | Fields\Description::class, 116 | Fields\Extra::class, 117 | Fields\Title::class, 118 | ]); 119 | } 120 | } -------------------------------------------------------------------------------- /src/PressFileParser.php: -------------------------------------------------------------------------------- 1 | filename = $filename; 36 | 37 | $this->splitFile(); 38 | 39 | $this->explodeData(); 40 | 41 | $this->processFields(); 42 | } 43 | 44 | /** 45 | * Get the underlying parsed data. 46 | * 47 | * @return mixed 48 | */ 49 | public function getData() 50 | { 51 | return $this->data; 52 | } 53 | 54 | /** 55 | * Get the underlying raw data. 56 | * 57 | * @return mixed 58 | */ 59 | public function getRawData() 60 | { 61 | return $this->rawData; 62 | } 63 | 64 | /** 65 | * It separates the head from the body for further manipulation 66 | * 67 | * @return void 68 | */ 69 | protected function splitFile() 70 | { 71 | preg_match('/^\-{3}(.*?)\-{3}(.*)/s', 72 | File::exists($this->filename) ? File::get($this->filename) : $this->filename, 73 | $this->rawData 74 | ); 75 | } 76 | 77 | /** 78 | * Separate each line in the head, trims it and saves it, along with the body. 79 | * 80 | * @return void 81 | */ 82 | protected function explodeData() 83 | { 84 | foreach (explode("\n", trim($this->rawData[1])) as $fieldString) { 85 | preg_match('/(.*):\s?(.*)/', $fieldString, $fieldArray); 86 | 87 | $this->data[$fieldArray[1]] = $fieldArray[2]; 88 | } 89 | 90 | $this->data['body'] = trim($this->rawData[2]); 91 | } 92 | 93 | /** 94 | * Iterates through each field and tries to find a class with a matching name. If found 95 | * it will call a process() method on it. Any other fields, get sent sent to a catch 96 | * all class called Extra, where they will be merged and JSON encoded in extra. 97 | * 98 | * @return void 99 | * @throws \ReflectionException 100 | */ 101 | protected function processFields() 102 | { 103 | foreach ($this->data as $field => $value) { 104 | 105 | $class = $this->getField(title_case($field)); 106 | 107 | if ( ! class_exists($class) && ! method_exists($class, 'process')) { 108 | $class = 'vicgonvt\\Press\\Fields\\Extra'; 109 | } 110 | 111 | $this->data = array_merge( 112 | $this->data, 113 | $class::process($field, $value, $this->data) 114 | ); 115 | } 116 | } 117 | 118 | /** 119 | * Attempt to find a field by the same name out of the array of available fields. 120 | * 121 | * @param $field 122 | * 123 | * @return string 124 | * @throws \ReflectionException 125 | */ 126 | private function getField($field) 127 | { 128 | foreach (Press::availableFields() as $availableField) { 129 | $class = new ReflectionClass($availableField); 130 | 131 | if ($class->getShortName() == $field) { 132 | return $class->getName(); 133 | } 134 | } 135 | } 136 | } -------------------------------------------------------------------------------- /src/Repositories/PostRepository.php: -------------------------------------------------------------------------------- 1 | $post['identifier'], 20 | ], [ 21 | 'slug' => str_slug($post['title']), 22 | 'title' => $post['title'], 23 | 'body' => $post['body'], 24 | 'extra' => $this->extra($post), 25 | ]); 26 | } 27 | 28 | /** 29 | * Collect all of the extra fields to set it as a json string. 30 | * 31 | * @param $post 32 | * 33 | * @return false|string 34 | */ 35 | private function extra($post) 36 | { 37 | $extra = (array)json_decode($post['extra'] ?? '[]'); 38 | $attributes = array_except($post, ['title', 'body', 'identifier', 'extra']); 39 | 40 | return json_encode(array_merge($extra, $attributes)); 41 | } 42 | } -------------------------------------------------------------------------------- /tests/Feature/MarkdownTest.php: -------------------------------------------------------------------------------- 1 | assertEquals('

Heading

', MarkdownParser::parse('# Heading')); 13 | } 14 | } -------------------------------------------------------------------------------- /tests/Feature/PressFileParserTest.php: -------------------------------------------------------------------------------- 1 | getRawData(); 16 | 17 | $this->assertContains('title: My Title', $data[1]); 18 | $this->assertContains('description: Description here', $data[1]); 19 | $this->assertContains('Blog post body here', $data[2]); 20 | } 21 | 22 | /** @test */ 23 | public function a_string_can_also_be_used_instead() 24 | { 25 | $pressFileParser = (new PressFileParser("---\ntitle: My Title\n---\nBlog post body here")); 26 | 27 | $data = $pressFileParser->getRawData(); 28 | 29 | $this->assertContains('title: My Title', $data[1]); 30 | $this->assertContains('Blog post body here', $data[2]); 31 | } 32 | 33 | /** @test */ 34 | public function each_head_field_gets_separated() 35 | { 36 | $pressFileParser = (new PressFileParser(__DIR__.'/../blogs/MarkFile1.md')); 37 | 38 | $data = $pressFileParser->getData(); 39 | 40 | $this->assertEquals('My Title', $data['title']); 41 | $this->assertEquals('Description here', $data['description']); 42 | } 43 | 44 | /** @test */ 45 | public function the_body_gets_saved_and_trimmed() 46 | { 47 | $pressFileParser = (new PressFileParser(__DIR__.'/../blogs/MarkFile1.md')); 48 | 49 | $data = $pressFileParser->getData(); 50 | 51 | $this->assertEquals("

Heading

\n

Blog post body here

", $data['body']); 52 | } 53 | 54 | /** @test */ 55 | public function a_date_field_gets_parsed() 56 | { 57 | $pressFileParser = (new PressFileParser("---\ndate: May 14, 1988\n---\n")); 58 | 59 | $data = $pressFileParser->getData(); 60 | 61 | $this->assertInstanceOf(Carbon::class, $data['date']); 62 | $this->assertEquals('05/14/1988', $data['date']->format('m/d/Y')); 63 | } 64 | 65 | /** @test */ 66 | public function an_extra_field_gets_saved() 67 | { 68 | $pressFileParser = (new PressFileParser("---\nauthor: John Doe\n---\n")); 69 | 70 | $data = $pressFileParser->getData(); 71 | 72 | $this->assertEquals(json_encode(['author' => 'John Doe']), $data['extra']); 73 | } 74 | 75 | /** @test */ 76 | public function two_additional_fields_are_put_into_extra() 77 | { 78 | $pressFileParser = (new PressFileParser("---\nauthor: John Doe\nimage: some/image.jpg\n---\n")); 79 | 80 | $data = $pressFileParser->getData(); 81 | 82 | $this->assertEquals(json_encode(['author' => 'John Doe', 'image' => 'some/image.jpg']), $data['extra']); 83 | } 84 | } -------------------------------------------------------------------------------- /tests/Feature/SavePostsTest.php: -------------------------------------------------------------------------------- 1 | create(); 16 | 17 | $this->assertCount(1, Post::all()); 18 | } 19 | } -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | withFactories(__DIR__.'/../database/factories'); 14 | } 15 | 16 | /** 17 | * Get package providers. 18 | * 19 | * @param \Illuminate\Foundation\Application $app 20 | * 21 | * @return array 22 | */ 23 | protected function getPackageProviders($app) 24 | { 25 | return [ 26 | PressBaseServiceProvider::class, 27 | ]; 28 | } 29 | 30 | protected function getEnvironmentSetUp($app) 31 | { 32 | $app['config']->set('database.default', 'testdb'); 33 | $app['config']->set('database.connections.testdb', [ 34 | 'driver' => 'sqlite', 35 | 'database' => ':memory:' 36 | ]); 37 | } 38 | } -------------------------------------------------------------------------------- /tests/blogs/MarkFile1.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: My Title 3 | description: Description here 4 | --- 5 | 6 | # Heading 7 | 8 | Blog post body here --------------------------------------------------------------------------------