├── .gitignore ├── .travis.yml ├── LICENSE.md ├── README.md ├── composer.json ├── composer.lock ├── docs ├── .nojekyll ├── README.md ├── assets │ └── laravel-mailsceptor-banner.png └── index.html ├── phpunit.xml ├── src ├── Config │ └── mailsceptor.php ├── Mailsception.php ├── MailsceptorHook.php ├── MailsceptorServiceProvider.php ├── Migrations │ └── migration.php └── Models │ └── Email.php └── tests ├── .gitkeep ├── Hooks └── MyCustomHook.php ├── TestCase.php └── Unit └── MailsceptorTest.php /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | sudo: true 4 | 5 | php: 6 | - 7.2 7 | 8 | services: 9 | - sqlite 10 | 11 | before_script: 12 | - composer install 13 | - travis_retry composer self-update 14 | - travis_retry composer update --no-interaction --prefer-dist 15 | - composer show laravel/framework 16 | 17 | script: 18 | - vendor/bin/phpunit 19 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Stephen Lake 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Laravel Mailsceptor 2 | 3 | ![tests](https://img.shields.io/travis/stephenlake/laravel-mailsceptor/master.svg?style=flat-square) 4 | ![styleci](https://github.styleci.io/repos/148940371/shield?branch=master&style=flat-square) 5 | ![scrutinzer](https://img.shields.io/scrutinizer/g/stephenlake/laravel-mailsceptor.svg?style=flat-square) 6 | ![downloads](https://img.shields.io/packagist/dt/stephenlake/laravel-mailsceptor.svg?style=flat-square) 7 | ![release](https://img.shields.io/github/release/stephenlake/laravel-mailsceptor.svg?style=flat-square) 8 | ![license](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square) 9 | 10 | **Laravel Mailsceptor** catches outgoing emails before they're submitted where you can modify the message recipients and save the output while still allowing the regular email sending process to continue as usual with any existing email drivers in place. 11 | 12 | Made with ❤️ by [Stephen Lake](http://stephenlake.github.io/) 13 | 14 | ## Getting Started 15 | 16 | Install the package via composer. 17 | 18 | composer require stephenlake/laravel-mailsceptor 19 | 20 | #### See [documentation](https://stephenlake.github.io/laravel-mailsceptor) for configuration and usage. 21 | 22 | ## Requirements 23 | 24 | - Laravel 5.2 or later. 25 | 26 | ## License 27 | 28 | This library is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details. 29 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stephenlake/laravel-mailsceptor", 3 | "description": "Intercept emails before they're submitted allowing you to redirect to alternative destinations, store output, view output via route and test development emails.", 4 | "type": "library", 5 | "license": "MIT", 6 | "authors": [{ 7 | "name": "Stephen Lake", 8 | "email": "stephen@closurecode.com" 9 | }], 10 | "require-dev": { 11 | "phpunit/phpunit": "~7.0", 12 | "illuminate/support": "~5.2.0|~5.3.0|~5.4.0|~5.5.0|~5.6.0|~5.7.0", 13 | "laravel/framework": "~5.2.0|~5.3.0|~5.4.0|~5.5.0|~5.6.0|~5.7.0", 14 | "orchestra/testbench": "~3.4.0|~3.5.0|~3.6.0" 15 | }, 16 | "autoload": { 17 | "psr-4": { 18 | "Mailsceptor\\": "src/" 19 | } 20 | }, 21 | "autoload-dev": { 22 | "psr-4": { 23 | "Mailsceptor\\Tests\\": "tests/" 24 | } 25 | }, 26 | "extra": { 27 | "laravel": { 28 | "providers": [ 29 | "Mailsceptor\\MailsceptorServiceProvider" 30 | ] 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "c9097e4c4fa7521e7f7a47f91c8d464f", 8 | "packages": [], 9 | "packages-dev": [ 10 | { 11 | "name": "doctrine/inflector", 12 | "version": "v1.3.0", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/doctrine/inflector.git", 16 | "reference": "5527a48b7313d15261292c149e55e26eae771b0a" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", 21 | "reference": "5527a48b7313d15261292c149e55e26eae771b0a", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "php": "^7.1" 26 | }, 27 | "require-dev": { 28 | "phpunit/phpunit": "^6.2" 29 | }, 30 | "type": "library", 31 | "extra": { 32 | "branch-alias": { 33 | "dev-master": "1.3.x-dev" 34 | } 35 | }, 36 | "autoload": { 37 | "psr-4": { 38 | "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" 39 | } 40 | }, 41 | "notification-url": "https://packagist.org/downloads/", 42 | "license": [ 43 | "MIT" 44 | ], 45 | "authors": [ 46 | { 47 | "name": "Roman Borschel", 48 | "email": "roman@code-factory.org" 49 | }, 50 | { 51 | "name": "Benjamin Eberlei", 52 | "email": "kontakt@beberlei.de" 53 | }, 54 | { 55 | "name": "Guilherme Blanco", 56 | "email": "guilhermeblanco@gmail.com" 57 | }, 58 | { 59 | "name": "Jonathan Wage", 60 | "email": "jonwage@gmail.com" 61 | }, 62 | { 63 | "name": "Johannes Schmitt", 64 | "email": "schmittjoh@gmail.com" 65 | } 66 | ], 67 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 68 | "homepage": "http://www.doctrine-project.org", 69 | "keywords": [ 70 | "inflection", 71 | "pluralize", 72 | "singularize", 73 | "string" 74 | ], 75 | "time": "2018-01-09T20:05:19+00:00" 76 | }, 77 | { 78 | "name": "doctrine/instantiator", 79 | "version": "1.1.0", 80 | "source": { 81 | "type": "git", 82 | "url": "https://github.com/doctrine/instantiator.git", 83 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" 84 | }, 85 | "dist": { 86 | "type": "zip", 87 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", 88 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", 89 | "shasum": "" 90 | }, 91 | "require": { 92 | "php": "^7.1" 93 | }, 94 | "require-dev": { 95 | "athletic/athletic": "~0.1.8", 96 | "ext-pdo": "*", 97 | "ext-phar": "*", 98 | "phpunit/phpunit": "^6.2.3", 99 | "squizlabs/php_codesniffer": "^3.0.2" 100 | }, 101 | "type": "library", 102 | "extra": { 103 | "branch-alias": { 104 | "dev-master": "1.2.x-dev" 105 | } 106 | }, 107 | "autoload": { 108 | "psr-4": { 109 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 110 | } 111 | }, 112 | "notification-url": "https://packagist.org/downloads/", 113 | "license": [ 114 | "MIT" 115 | ], 116 | "authors": [ 117 | { 118 | "name": "Marco Pivetta", 119 | "email": "ocramius@gmail.com", 120 | "homepage": "http://ocramius.github.com/" 121 | } 122 | ], 123 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 124 | "homepage": "https://github.com/doctrine/instantiator", 125 | "keywords": [ 126 | "constructor", 127 | "instantiate" 128 | ], 129 | "time": "2017-07-22T11:58:36+00:00" 130 | }, 131 | { 132 | "name": "doctrine/lexer", 133 | "version": "v1.0.1", 134 | "source": { 135 | "type": "git", 136 | "url": "https://github.com/doctrine/lexer.git", 137 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" 138 | }, 139 | "dist": { 140 | "type": "zip", 141 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", 142 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", 143 | "shasum": "" 144 | }, 145 | "require": { 146 | "php": ">=5.3.2" 147 | }, 148 | "type": "library", 149 | "extra": { 150 | "branch-alias": { 151 | "dev-master": "1.0.x-dev" 152 | } 153 | }, 154 | "autoload": { 155 | "psr-0": { 156 | "Doctrine\\Common\\Lexer\\": "lib/" 157 | } 158 | }, 159 | "notification-url": "https://packagist.org/downloads/", 160 | "license": [ 161 | "MIT" 162 | ], 163 | "authors": [ 164 | { 165 | "name": "Roman Borschel", 166 | "email": "roman@code-factory.org" 167 | }, 168 | { 169 | "name": "Guilherme Blanco", 170 | "email": "guilhermeblanco@gmail.com" 171 | }, 172 | { 173 | "name": "Johannes Schmitt", 174 | "email": "schmittjoh@gmail.com" 175 | } 176 | ], 177 | "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", 178 | "homepage": "http://www.doctrine-project.org", 179 | "keywords": [ 180 | "lexer", 181 | "parser" 182 | ], 183 | "time": "2014-09-09T13:34:57+00:00" 184 | }, 185 | { 186 | "name": "dragonmantank/cron-expression", 187 | "version": "v2.2.0", 188 | "source": { 189 | "type": "git", 190 | "url": "https://github.com/dragonmantank/cron-expression.git", 191 | "reference": "92a2c3768d50e21a1f26a53cb795ce72806266c5" 192 | }, 193 | "dist": { 194 | "type": "zip", 195 | "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/92a2c3768d50e21a1f26a53cb795ce72806266c5", 196 | "reference": "92a2c3768d50e21a1f26a53cb795ce72806266c5", 197 | "shasum": "" 198 | }, 199 | "require": { 200 | "php": ">=7.0.0" 201 | }, 202 | "require-dev": { 203 | "phpunit/phpunit": "~6.4" 204 | }, 205 | "type": "library", 206 | "autoload": { 207 | "psr-4": { 208 | "Cron\\": "src/Cron/" 209 | } 210 | }, 211 | "notification-url": "https://packagist.org/downloads/", 212 | "license": [ 213 | "MIT" 214 | ], 215 | "authors": [ 216 | { 217 | "name": "Michael Dowling", 218 | "email": "mtdowling@gmail.com", 219 | "homepage": "https://github.com/mtdowling" 220 | }, 221 | { 222 | "name": "Chris Tankersley", 223 | "email": "chris@ctankersley.com", 224 | "homepage": "https://github.com/dragonmantank" 225 | } 226 | ], 227 | "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", 228 | "keywords": [ 229 | "cron", 230 | "schedule" 231 | ], 232 | "time": "2018-06-06T03:12:17+00:00" 233 | }, 234 | { 235 | "name": "egulias/email-validator", 236 | "version": "2.1.6", 237 | "source": { 238 | "type": "git", 239 | "url": "https://github.com/egulias/EmailValidator.git", 240 | "reference": "0578b32b30b22de3e8664f797cf846fc9246f786" 241 | }, 242 | "dist": { 243 | "type": "zip", 244 | "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0578b32b30b22de3e8664f797cf846fc9246f786", 245 | "reference": "0578b32b30b22de3e8664f797cf846fc9246f786", 246 | "shasum": "" 247 | }, 248 | "require": { 249 | "doctrine/lexer": "^1.0.1", 250 | "php": ">= 5.5" 251 | }, 252 | "require-dev": { 253 | "dominicsayers/isemail": "dev-master", 254 | "phpunit/phpunit": "^4.8.35||^5.7||^6.0", 255 | "satooshi/php-coveralls": "^1.0.1" 256 | }, 257 | "suggest": { 258 | "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" 259 | }, 260 | "type": "library", 261 | "extra": { 262 | "branch-alias": { 263 | "dev-master": "2.0.x-dev" 264 | } 265 | }, 266 | "autoload": { 267 | "psr-4": { 268 | "Egulias\\EmailValidator\\": "EmailValidator" 269 | } 270 | }, 271 | "notification-url": "https://packagist.org/downloads/", 272 | "license": [ 273 | "MIT" 274 | ], 275 | "authors": [ 276 | { 277 | "name": "Eduardo Gulias Davis" 278 | } 279 | ], 280 | "description": "A library for validating emails against several RFCs", 281 | "homepage": "https://github.com/egulias/EmailValidator", 282 | "keywords": [ 283 | "email", 284 | "emailvalidation", 285 | "emailvalidator", 286 | "validation", 287 | "validator" 288 | ], 289 | "time": "2018-09-25T20:47:26+00:00" 290 | }, 291 | { 292 | "name": "erusev/parsedown", 293 | "version": "1.7.1", 294 | "source": { 295 | "type": "git", 296 | "url": "https://github.com/erusev/parsedown.git", 297 | "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" 298 | }, 299 | "dist": { 300 | "type": "zip", 301 | "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", 302 | "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", 303 | "shasum": "" 304 | }, 305 | "require": { 306 | "ext-mbstring": "*", 307 | "php": ">=5.3.0" 308 | }, 309 | "require-dev": { 310 | "phpunit/phpunit": "^4.8.35" 311 | }, 312 | "type": "library", 313 | "autoload": { 314 | "psr-0": { 315 | "Parsedown": "" 316 | } 317 | }, 318 | "notification-url": "https://packagist.org/downloads/", 319 | "license": [ 320 | "MIT" 321 | ], 322 | "authors": [ 323 | { 324 | "name": "Emanuil Rusev", 325 | "email": "hello@erusev.com", 326 | "homepage": "http://erusev.com" 327 | } 328 | ], 329 | "description": "Parser for Markdown.", 330 | "homepage": "http://parsedown.org", 331 | "keywords": [ 332 | "markdown", 333 | "parser" 334 | ], 335 | "time": "2018-03-08T01:11:30+00:00" 336 | }, 337 | { 338 | "name": "fzaninotto/faker", 339 | "version": "v1.8.0", 340 | "source": { 341 | "type": "git", 342 | "url": "https://github.com/fzaninotto/Faker.git", 343 | "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de" 344 | }, 345 | "dist": { 346 | "type": "zip", 347 | "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de", 348 | "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de", 349 | "shasum": "" 350 | }, 351 | "require": { 352 | "php": "^5.3.3 || ^7.0" 353 | }, 354 | "require-dev": { 355 | "ext-intl": "*", 356 | "phpunit/phpunit": "^4.8.35 || ^5.7", 357 | "squizlabs/php_codesniffer": "^1.5" 358 | }, 359 | "type": "library", 360 | "extra": { 361 | "branch-alias": { 362 | "dev-master": "1.8-dev" 363 | } 364 | }, 365 | "autoload": { 366 | "psr-4": { 367 | "Faker\\": "src/Faker/" 368 | } 369 | }, 370 | "notification-url": "https://packagist.org/downloads/", 371 | "license": [ 372 | "MIT" 373 | ], 374 | "authors": [ 375 | { 376 | "name": "François Zaninotto" 377 | } 378 | ], 379 | "description": "Faker is a PHP library that generates fake data for you.", 380 | "keywords": [ 381 | "data", 382 | "faker", 383 | "fixtures" 384 | ], 385 | "time": "2018-07-12T10:23:15+00:00" 386 | }, 387 | { 388 | "name": "laravel/framework", 389 | "version": "v5.6.39", 390 | "source": { 391 | "type": "git", 392 | "url": "https://github.com/laravel/framework.git", 393 | "reference": "37bb306f516669ab4f888c16003f694313ab299e" 394 | }, 395 | "dist": { 396 | "type": "zip", 397 | "url": "https://api.github.com/repos/laravel/framework/zipball/37bb306f516669ab4f888c16003f694313ab299e", 398 | "reference": "37bb306f516669ab4f888c16003f694313ab299e", 399 | "shasum": "" 400 | }, 401 | "require": { 402 | "doctrine/inflector": "~1.1", 403 | "dragonmantank/cron-expression": "~2.0", 404 | "erusev/parsedown": "~1.7", 405 | "ext-mbstring": "*", 406 | "ext-openssl": "*", 407 | "league/flysystem": "^1.0.8", 408 | "monolog/monolog": "~1.12", 409 | "nesbot/carbon": "1.25.*", 410 | "php": "^7.1.3", 411 | "psr/container": "~1.0", 412 | "psr/simple-cache": "^1.0", 413 | "ramsey/uuid": "^3.7", 414 | "swiftmailer/swiftmailer": "~6.0", 415 | "symfony/console": "~4.0", 416 | "symfony/debug": "~4.0", 417 | "symfony/finder": "~4.0", 418 | "symfony/http-foundation": "~4.0", 419 | "symfony/http-kernel": "~4.0", 420 | "symfony/process": "~4.0", 421 | "symfony/routing": "~4.0", 422 | "symfony/var-dumper": "~4.0", 423 | "tijsverkoyen/css-to-inline-styles": "^2.2.1", 424 | "vlucas/phpdotenv": "~2.2" 425 | }, 426 | "conflict": { 427 | "tightenco/collect": "<5.5.33" 428 | }, 429 | "replace": { 430 | "illuminate/auth": "self.version", 431 | "illuminate/broadcasting": "self.version", 432 | "illuminate/bus": "self.version", 433 | "illuminate/cache": "self.version", 434 | "illuminate/config": "self.version", 435 | "illuminate/console": "self.version", 436 | "illuminate/container": "self.version", 437 | "illuminate/contracts": "self.version", 438 | "illuminate/cookie": "self.version", 439 | "illuminate/database": "self.version", 440 | "illuminate/encryption": "self.version", 441 | "illuminate/events": "self.version", 442 | "illuminate/filesystem": "self.version", 443 | "illuminate/hashing": "self.version", 444 | "illuminate/http": "self.version", 445 | "illuminate/log": "self.version", 446 | "illuminate/mail": "self.version", 447 | "illuminate/notifications": "self.version", 448 | "illuminate/pagination": "self.version", 449 | "illuminate/pipeline": "self.version", 450 | "illuminate/queue": "self.version", 451 | "illuminate/redis": "self.version", 452 | "illuminate/routing": "self.version", 453 | "illuminate/session": "self.version", 454 | "illuminate/support": "self.version", 455 | "illuminate/translation": "self.version", 456 | "illuminate/validation": "self.version", 457 | "illuminate/view": "self.version" 458 | }, 459 | "require-dev": { 460 | "aws/aws-sdk-php": "~3.0", 461 | "doctrine/dbal": "~2.6", 462 | "filp/whoops": "^2.1.4", 463 | "league/flysystem-cached-adapter": "~1.0", 464 | "mockery/mockery": "~1.0", 465 | "moontoast/math": "^1.1", 466 | "orchestra/testbench-core": "3.6.*", 467 | "pda/pheanstalk": "~3.0", 468 | "phpunit/phpunit": "~7.0", 469 | "predis/predis": "^1.1.1", 470 | "symfony/css-selector": "~4.0", 471 | "symfony/dom-crawler": "~4.0" 472 | }, 473 | "suggest": { 474 | "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", 475 | "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.6).", 476 | "ext-pcntl": "Required to use all features of the queue worker.", 477 | "ext-posix": "Required to use all features of the queue worker.", 478 | "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", 479 | "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", 480 | "laravel/tinker": "Required to use the tinker console command (~1.0).", 481 | "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", 482 | "league/flysystem-cached-adapter": "Required to use the Flysystem cache (~1.0).", 483 | "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", 484 | "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (~1.0).", 485 | "nexmo/client": "Required to use the Nexmo transport (~1.0).", 486 | "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", 487 | "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", 488 | "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", 489 | "symfony/css-selector": "Required to use some of the crawler integration testing tools (~4.0).", 490 | "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~4.0).", 491 | "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." 492 | }, 493 | "type": "library", 494 | "extra": { 495 | "branch-alias": { 496 | "dev-master": "5.6-dev" 497 | } 498 | }, 499 | "autoload": { 500 | "files": [ 501 | "src/Illuminate/Foundation/helpers.php", 502 | "src/Illuminate/Support/helpers.php" 503 | ], 504 | "psr-4": { 505 | "Illuminate\\": "src/Illuminate/" 506 | } 507 | }, 508 | "notification-url": "https://packagist.org/downloads/", 509 | "license": [ 510 | "MIT" 511 | ], 512 | "authors": [ 513 | { 514 | "name": "Taylor Otwell", 515 | "email": "taylor@laravel.com" 516 | } 517 | ], 518 | "description": "The Laravel Framework.", 519 | "homepage": "https://laravel.com", 520 | "keywords": [ 521 | "framework", 522 | "laravel" 523 | ], 524 | "time": "2018-10-04T14:50:41+00:00" 525 | }, 526 | { 527 | "name": "league/flysystem", 528 | "version": "1.0.48", 529 | "source": { 530 | "type": "git", 531 | "url": "https://github.com/thephpleague/flysystem.git", 532 | "reference": "a6ded5b2f6055e2db97b4b859fdfca2b952b78aa" 533 | }, 534 | "dist": { 535 | "type": "zip", 536 | "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a6ded5b2f6055e2db97b4b859fdfca2b952b78aa", 537 | "reference": "a6ded5b2f6055e2db97b4b859fdfca2b952b78aa", 538 | "shasum": "" 539 | }, 540 | "require": { 541 | "ext-fileinfo": "*", 542 | "php": ">=5.5.9" 543 | }, 544 | "conflict": { 545 | "league/flysystem-sftp": "<1.0.6" 546 | }, 547 | "require-dev": { 548 | "phpspec/phpspec": "^3.4", 549 | "phpunit/phpunit": "^5.7.10" 550 | }, 551 | "suggest": { 552 | "ext-fileinfo": "Required for MimeType", 553 | "ext-ftp": "Allows you to use FTP server storage", 554 | "ext-openssl": "Allows you to use FTPS server storage", 555 | "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", 556 | "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", 557 | "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", 558 | "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", 559 | "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", 560 | "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", 561 | "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", 562 | "league/flysystem-webdav": "Allows you to use WebDAV storage", 563 | "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", 564 | "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", 565 | "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" 566 | }, 567 | "type": "library", 568 | "extra": { 569 | "branch-alias": { 570 | "dev-master": "1.1-dev" 571 | } 572 | }, 573 | "autoload": { 574 | "psr-4": { 575 | "League\\Flysystem\\": "src/" 576 | } 577 | }, 578 | "notification-url": "https://packagist.org/downloads/", 579 | "license": [ 580 | "MIT" 581 | ], 582 | "authors": [ 583 | { 584 | "name": "Frank de Jonge", 585 | "email": "info@frenky.net" 586 | } 587 | ], 588 | "description": "Filesystem abstraction: Many filesystems, one API.", 589 | "keywords": [ 590 | "Cloud Files", 591 | "WebDAV", 592 | "abstraction", 593 | "aws", 594 | "cloud", 595 | "copy.com", 596 | "dropbox", 597 | "file systems", 598 | "files", 599 | "filesystem", 600 | "filesystems", 601 | "ftp", 602 | "rackspace", 603 | "remote", 604 | "s3", 605 | "sftp", 606 | "storage" 607 | ], 608 | "time": "2018-10-15T13:53:10+00:00" 609 | }, 610 | { 611 | "name": "monolog/monolog", 612 | "version": "1.23.0", 613 | "source": { 614 | "type": "git", 615 | "url": "https://github.com/Seldaek/monolog.git", 616 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" 617 | }, 618 | "dist": { 619 | "type": "zip", 620 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", 621 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", 622 | "shasum": "" 623 | }, 624 | "require": { 625 | "php": ">=5.3.0", 626 | "psr/log": "~1.0" 627 | }, 628 | "provide": { 629 | "psr/log-implementation": "1.0.0" 630 | }, 631 | "require-dev": { 632 | "aws/aws-sdk-php": "^2.4.9 || ^3.0", 633 | "doctrine/couchdb": "~1.0@dev", 634 | "graylog2/gelf-php": "~1.0", 635 | "jakub-onderka/php-parallel-lint": "0.9", 636 | "php-amqplib/php-amqplib": "~2.4", 637 | "php-console/php-console": "^3.1.3", 638 | "phpunit/phpunit": "~4.5", 639 | "phpunit/phpunit-mock-objects": "2.3.0", 640 | "ruflin/elastica": ">=0.90 <3.0", 641 | "sentry/sentry": "^0.13", 642 | "swiftmailer/swiftmailer": "^5.3|^6.0" 643 | }, 644 | "suggest": { 645 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 646 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 647 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 648 | "ext-mongo": "Allow sending log messages to a MongoDB server", 649 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 650 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", 651 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", 652 | "php-console/php-console": "Allow sending log messages to Google Chrome", 653 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 654 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server", 655 | "sentry/sentry": "Allow sending log messages to a Sentry server" 656 | }, 657 | "type": "library", 658 | "extra": { 659 | "branch-alias": { 660 | "dev-master": "2.0.x-dev" 661 | } 662 | }, 663 | "autoload": { 664 | "psr-4": { 665 | "Monolog\\": "src/Monolog" 666 | } 667 | }, 668 | "notification-url": "https://packagist.org/downloads/", 669 | "license": [ 670 | "MIT" 671 | ], 672 | "authors": [ 673 | { 674 | "name": "Jordi Boggiano", 675 | "email": "j.boggiano@seld.be", 676 | "homepage": "http://seld.be" 677 | } 678 | ], 679 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 680 | "homepage": "http://github.com/Seldaek/monolog", 681 | "keywords": [ 682 | "log", 683 | "logging", 684 | "psr-3" 685 | ], 686 | "time": "2017-06-19T01:22:40+00:00" 687 | }, 688 | { 689 | "name": "myclabs/deep-copy", 690 | "version": "1.8.1", 691 | "source": { 692 | "type": "git", 693 | "url": "https://github.com/myclabs/DeepCopy.git", 694 | "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" 695 | }, 696 | "dist": { 697 | "type": "zip", 698 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", 699 | "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", 700 | "shasum": "" 701 | }, 702 | "require": { 703 | "php": "^7.1" 704 | }, 705 | "replace": { 706 | "myclabs/deep-copy": "self.version" 707 | }, 708 | "require-dev": { 709 | "doctrine/collections": "^1.0", 710 | "doctrine/common": "^2.6", 711 | "phpunit/phpunit": "^7.1" 712 | }, 713 | "type": "library", 714 | "autoload": { 715 | "psr-4": { 716 | "DeepCopy\\": "src/DeepCopy/" 717 | }, 718 | "files": [ 719 | "src/DeepCopy/deep_copy.php" 720 | ] 721 | }, 722 | "notification-url": "https://packagist.org/downloads/", 723 | "license": [ 724 | "MIT" 725 | ], 726 | "description": "Create deep copies (clones) of your objects", 727 | "keywords": [ 728 | "clone", 729 | "copy", 730 | "duplicate", 731 | "object", 732 | "object graph" 733 | ], 734 | "time": "2018-06-11T23:09:50+00:00" 735 | }, 736 | { 737 | "name": "nesbot/carbon", 738 | "version": "1.25.0", 739 | "source": { 740 | "type": "git", 741 | "url": "https://github.com/briannesbitt/Carbon.git", 742 | "reference": "cbcf13da0b531767e39eb86e9687f5deba9857b4" 743 | }, 744 | "dist": { 745 | "type": "zip", 746 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/cbcf13da0b531767e39eb86e9687f5deba9857b4", 747 | "reference": "cbcf13da0b531767e39eb86e9687f5deba9857b4", 748 | "shasum": "" 749 | }, 750 | "require": { 751 | "php": ">=5.3.9", 752 | "symfony/translation": "~2.6 || ~3.0 || ~4.0" 753 | }, 754 | "require-dev": { 755 | "friendsofphp/php-cs-fixer": "~2", 756 | "phpunit/phpunit": "^4.8.35 || ^5.7" 757 | }, 758 | "type": "library", 759 | "extra": { 760 | "branch-alias": { 761 | "dev-master": "1.23-dev" 762 | } 763 | }, 764 | "autoload": { 765 | "psr-4": { 766 | "Carbon\\": "src/Carbon/" 767 | } 768 | }, 769 | "notification-url": "https://packagist.org/downloads/", 770 | "license": [ 771 | "MIT" 772 | ], 773 | "authors": [ 774 | { 775 | "name": "Brian Nesbitt", 776 | "email": "brian@nesbot.com", 777 | "homepage": "http://nesbot.com" 778 | } 779 | ], 780 | "description": "A simple API extension for DateTime.", 781 | "homepage": "http://carbon.nesbot.com", 782 | "keywords": [ 783 | "date", 784 | "datetime", 785 | "time" 786 | ], 787 | "time": "2018-03-19T15:50:49+00:00" 788 | }, 789 | { 790 | "name": "orchestra/testbench", 791 | "version": "v3.6.5", 792 | "source": { 793 | "type": "git", 794 | "url": "https://github.com/orchestral/testbench.git", 795 | "reference": "74a7e330f375fe578a86176cefabeaf8b1636f15" 796 | }, 797 | "dist": { 798 | "type": "zip", 799 | "url": "https://api.github.com/repos/orchestral/testbench/zipball/74a7e330f375fe578a86176cefabeaf8b1636f15", 800 | "reference": "74a7e330f375fe578a86176cefabeaf8b1636f15", 801 | "shasum": "" 802 | }, 803 | "require": { 804 | "laravel/framework": "~5.6.13", 805 | "orchestra/testbench-core": "~3.6.6", 806 | "php": ">=7.1", 807 | "phpunit/phpunit": "^7.0" 808 | }, 809 | "require-dev": { 810 | "mockery/mockery": "^1.0" 811 | }, 812 | "type": "library", 813 | "extra": { 814 | "branch-alias": { 815 | "dev-master": "3.6-dev" 816 | } 817 | }, 818 | "notification-url": "https://packagist.org/downloads/", 819 | "license": [ 820 | "MIT" 821 | ], 822 | "authors": [ 823 | { 824 | "name": "Mior Muhammad Zaki", 825 | "email": "crynobone@gmail.com", 826 | "homepage": "https://github.com/crynobone" 827 | } 828 | ], 829 | "description": "Laravel Testing Helper for Packages Development", 830 | "homepage": "http://orchestraplatform.com/docs/latest/components/testbench/", 831 | "keywords": [ 832 | "BDD", 833 | "TDD", 834 | "laravel", 835 | "orchestra-platform", 836 | "orchestral", 837 | "testing" 838 | ], 839 | "time": "2018-08-06T20:41:43+00:00" 840 | }, 841 | { 842 | "name": "orchestra/testbench-core", 843 | "version": "v3.6.6", 844 | "source": { 845 | "type": "git", 846 | "url": "https://github.com/orchestral/testbench-core.git", 847 | "reference": "cd0ead2c66877bed5e82e7cb7eea91a8168c29ba" 848 | }, 849 | "dist": { 850 | "type": "zip", 851 | "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/cd0ead2c66877bed5e82e7cb7eea91a8168c29ba", 852 | "reference": "cd0ead2c66877bed5e82e7cb7eea91a8168c29ba", 853 | "shasum": "" 854 | }, 855 | "require": { 856 | "fzaninotto/faker": "^1.4", 857 | "php": ">=7.1" 858 | }, 859 | "require-dev": { 860 | "laravel/framework": "~5.6.13", 861 | "mockery/mockery": "^1.0", 862 | "phpunit/phpunit": "^7.0" 863 | }, 864 | "suggest": { 865 | "laravel/framework": "Required for testing (~5.6.13).", 866 | "mockery/mockery": "Allow to use Mockery for testing (~1.0).", 867 | "orchestra/testbench-browser-kit": "Allow to use legacy Laravel BrowserKit for testing (~3.6).", 868 | "orchestra/testbench-dusk": "Allow to use Laravel Dusk for testing (~3.6).", 869 | "phpunit/phpunit": "Allow to use PHPUnit for testing (~7.0)." 870 | }, 871 | "type": "library", 872 | "extra": { 873 | "branch-alias": { 874 | "dev-master": "3.6-dev" 875 | } 876 | }, 877 | "autoload": { 878 | "psr-4": { 879 | "Orchestra\\Testbench\\": "src/" 880 | } 881 | }, 882 | "notification-url": "https://packagist.org/downloads/", 883 | "license": [ 884 | "MIT" 885 | ], 886 | "authors": [ 887 | { 888 | "name": "Mior Muhammad Zaki", 889 | "email": "crynobone@gmail.com", 890 | "homepage": "https://github.com/crynobone" 891 | } 892 | ], 893 | "description": "Testing Helper for Laravel Development", 894 | "homepage": "http://orchestraplatform.com/docs/latest/components/testbench/", 895 | "keywords": [ 896 | "BDD", 897 | "TDD", 898 | "laravel", 899 | "orchestra-platform", 900 | "orchestral", 901 | "testing" 902 | ], 903 | "time": "2018-07-12T01:01:15+00:00" 904 | }, 905 | { 906 | "name": "paragonie/random_compat", 907 | "version": "v9.99.99", 908 | "source": { 909 | "type": "git", 910 | "url": "https://github.com/paragonie/random_compat.git", 911 | "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" 912 | }, 913 | "dist": { 914 | "type": "zip", 915 | "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", 916 | "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", 917 | "shasum": "" 918 | }, 919 | "require": { 920 | "php": "^7" 921 | }, 922 | "require-dev": { 923 | "phpunit/phpunit": "4.*|5.*", 924 | "vimeo/psalm": "^1" 925 | }, 926 | "suggest": { 927 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." 928 | }, 929 | "type": "library", 930 | "notification-url": "https://packagist.org/downloads/", 931 | "license": [ 932 | "MIT" 933 | ], 934 | "authors": [ 935 | { 936 | "name": "Paragon Initiative Enterprises", 937 | "email": "security@paragonie.com", 938 | "homepage": "https://paragonie.com" 939 | } 940 | ], 941 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", 942 | "keywords": [ 943 | "csprng", 944 | "polyfill", 945 | "pseudorandom", 946 | "random" 947 | ], 948 | "time": "2018-07-02T15:55:56+00:00" 949 | }, 950 | { 951 | "name": "phar-io/manifest", 952 | "version": "1.0.3", 953 | "source": { 954 | "type": "git", 955 | "url": "https://github.com/phar-io/manifest.git", 956 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" 957 | }, 958 | "dist": { 959 | "type": "zip", 960 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 961 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 962 | "shasum": "" 963 | }, 964 | "require": { 965 | "ext-dom": "*", 966 | "ext-phar": "*", 967 | "phar-io/version": "^2.0", 968 | "php": "^5.6 || ^7.0" 969 | }, 970 | "type": "library", 971 | "extra": { 972 | "branch-alias": { 973 | "dev-master": "1.0.x-dev" 974 | } 975 | }, 976 | "autoload": { 977 | "classmap": [ 978 | "src/" 979 | ] 980 | }, 981 | "notification-url": "https://packagist.org/downloads/", 982 | "license": [ 983 | "BSD-3-Clause" 984 | ], 985 | "authors": [ 986 | { 987 | "name": "Arne Blankerts", 988 | "email": "arne@blankerts.de", 989 | "role": "Developer" 990 | }, 991 | { 992 | "name": "Sebastian Heuer", 993 | "email": "sebastian@phpeople.de", 994 | "role": "Developer" 995 | }, 996 | { 997 | "name": "Sebastian Bergmann", 998 | "email": "sebastian@phpunit.de", 999 | "role": "Developer" 1000 | } 1001 | ], 1002 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 1003 | "time": "2018-07-08T19:23:20+00:00" 1004 | }, 1005 | { 1006 | "name": "phar-io/version", 1007 | "version": "2.0.1", 1008 | "source": { 1009 | "type": "git", 1010 | "url": "https://github.com/phar-io/version.git", 1011 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" 1012 | }, 1013 | "dist": { 1014 | "type": "zip", 1015 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", 1016 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", 1017 | "shasum": "" 1018 | }, 1019 | "require": { 1020 | "php": "^5.6 || ^7.0" 1021 | }, 1022 | "type": "library", 1023 | "autoload": { 1024 | "classmap": [ 1025 | "src/" 1026 | ] 1027 | }, 1028 | "notification-url": "https://packagist.org/downloads/", 1029 | "license": [ 1030 | "BSD-3-Clause" 1031 | ], 1032 | "authors": [ 1033 | { 1034 | "name": "Arne Blankerts", 1035 | "email": "arne@blankerts.de", 1036 | "role": "Developer" 1037 | }, 1038 | { 1039 | "name": "Sebastian Heuer", 1040 | "email": "sebastian@phpeople.de", 1041 | "role": "Developer" 1042 | }, 1043 | { 1044 | "name": "Sebastian Bergmann", 1045 | "email": "sebastian@phpunit.de", 1046 | "role": "Developer" 1047 | } 1048 | ], 1049 | "description": "Library for handling version information and constraints", 1050 | "time": "2018-07-08T19:19:57+00:00" 1051 | }, 1052 | { 1053 | "name": "phpdocumentor/reflection-common", 1054 | "version": "1.0.1", 1055 | "source": { 1056 | "type": "git", 1057 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 1058 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" 1059 | }, 1060 | "dist": { 1061 | "type": "zip", 1062 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 1063 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 1064 | "shasum": "" 1065 | }, 1066 | "require": { 1067 | "php": ">=5.5" 1068 | }, 1069 | "require-dev": { 1070 | "phpunit/phpunit": "^4.6" 1071 | }, 1072 | "type": "library", 1073 | "extra": { 1074 | "branch-alias": { 1075 | "dev-master": "1.0.x-dev" 1076 | } 1077 | }, 1078 | "autoload": { 1079 | "psr-4": { 1080 | "phpDocumentor\\Reflection\\": [ 1081 | "src" 1082 | ] 1083 | } 1084 | }, 1085 | "notification-url": "https://packagist.org/downloads/", 1086 | "license": [ 1087 | "MIT" 1088 | ], 1089 | "authors": [ 1090 | { 1091 | "name": "Jaap van Otterdijk", 1092 | "email": "opensource@ijaap.nl" 1093 | } 1094 | ], 1095 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 1096 | "homepage": "http://www.phpdoc.org", 1097 | "keywords": [ 1098 | "FQSEN", 1099 | "phpDocumentor", 1100 | "phpdoc", 1101 | "reflection", 1102 | "static analysis" 1103 | ], 1104 | "time": "2017-09-11T18:02:19+00:00" 1105 | }, 1106 | { 1107 | "name": "phpdocumentor/reflection-docblock", 1108 | "version": "4.3.0", 1109 | "source": { 1110 | "type": "git", 1111 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 1112 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08" 1113 | }, 1114 | "dist": { 1115 | "type": "zip", 1116 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", 1117 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08", 1118 | "shasum": "" 1119 | }, 1120 | "require": { 1121 | "php": "^7.0", 1122 | "phpdocumentor/reflection-common": "^1.0.0", 1123 | "phpdocumentor/type-resolver": "^0.4.0", 1124 | "webmozart/assert": "^1.0" 1125 | }, 1126 | "require-dev": { 1127 | "doctrine/instantiator": "~1.0.5", 1128 | "mockery/mockery": "^1.0", 1129 | "phpunit/phpunit": "^6.4" 1130 | }, 1131 | "type": "library", 1132 | "extra": { 1133 | "branch-alias": { 1134 | "dev-master": "4.x-dev" 1135 | } 1136 | }, 1137 | "autoload": { 1138 | "psr-4": { 1139 | "phpDocumentor\\Reflection\\": [ 1140 | "src/" 1141 | ] 1142 | } 1143 | }, 1144 | "notification-url": "https://packagist.org/downloads/", 1145 | "license": [ 1146 | "MIT" 1147 | ], 1148 | "authors": [ 1149 | { 1150 | "name": "Mike van Riel", 1151 | "email": "me@mikevanriel.com" 1152 | } 1153 | ], 1154 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 1155 | "time": "2017-11-30T07:14:17+00:00" 1156 | }, 1157 | { 1158 | "name": "phpdocumentor/type-resolver", 1159 | "version": "0.4.0", 1160 | "source": { 1161 | "type": "git", 1162 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 1163 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" 1164 | }, 1165 | "dist": { 1166 | "type": "zip", 1167 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", 1168 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", 1169 | "shasum": "" 1170 | }, 1171 | "require": { 1172 | "php": "^5.5 || ^7.0", 1173 | "phpdocumentor/reflection-common": "^1.0" 1174 | }, 1175 | "require-dev": { 1176 | "mockery/mockery": "^0.9.4", 1177 | "phpunit/phpunit": "^5.2||^4.8.24" 1178 | }, 1179 | "type": "library", 1180 | "extra": { 1181 | "branch-alias": { 1182 | "dev-master": "1.0.x-dev" 1183 | } 1184 | }, 1185 | "autoload": { 1186 | "psr-4": { 1187 | "phpDocumentor\\Reflection\\": [ 1188 | "src/" 1189 | ] 1190 | } 1191 | }, 1192 | "notification-url": "https://packagist.org/downloads/", 1193 | "license": [ 1194 | "MIT" 1195 | ], 1196 | "authors": [ 1197 | { 1198 | "name": "Mike van Riel", 1199 | "email": "me@mikevanriel.com" 1200 | } 1201 | ], 1202 | "time": "2017-07-14T14:27:02+00:00" 1203 | }, 1204 | { 1205 | "name": "phpspec/prophecy", 1206 | "version": "1.8.0", 1207 | "source": { 1208 | "type": "git", 1209 | "url": "https://github.com/phpspec/prophecy.git", 1210 | "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" 1211 | }, 1212 | "dist": { 1213 | "type": "zip", 1214 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", 1215 | "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", 1216 | "shasum": "" 1217 | }, 1218 | "require": { 1219 | "doctrine/instantiator": "^1.0.2", 1220 | "php": "^5.3|^7.0", 1221 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", 1222 | "sebastian/comparator": "^1.1|^2.0|^3.0", 1223 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 1224 | }, 1225 | "require-dev": { 1226 | "phpspec/phpspec": "^2.5|^3.2", 1227 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" 1228 | }, 1229 | "type": "library", 1230 | "extra": { 1231 | "branch-alias": { 1232 | "dev-master": "1.8.x-dev" 1233 | } 1234 | }, 1235 | "autoload": { 1236 | "psr-0": { 1237 | "Prophecy\\": "src/" 1238 | } 1239 | }, 1240 | "notification-url": "https://packagist.org/downloads/", 1241 | "license": [ 1242 | "MIT" 1243 | ], 1244 | "authors": [ 1245 | { 1246 | "name": "Konstantin Kudryashov", 1247 | "email": "ever.zet@gmail.com", 1248 | "homepage": "http://everzet.com" 1249 | }, 1250 | { 1251 | "name": "Marcello Duarte", 1252 | "email": "marcello.duarte@gmail.com" 1253 | } 1254 | ], 1255 | "description": "Highly opinionated mocking framework for PHP 5.3+", 1256 | "homepage": "https://github.com/phpspec/prophecy", 1257 | "keywords": [ 1258 | "Double", 1259 | "Dummy", 1260 | "fake", 1261 | "mock", 1262 | "spy", 1263 | "stub" 1264 | ], 1265 | "time": "2018-08-05T17:53:17+00:00" 1266 | }, 1267 | { 1268 | "name": "phpunit/php-code-coverage", 1269 | "version": "6.1.3", 1270 | "source": { 1271 | "type": "git", 1272 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1273 | "reference": "4d3ae9b21a7d7e440bd0cf65565533117976859f" 1274 | }, 1275 | "dist": { 1276 | "type": "zip", 1277 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4d3ae9b21a7d7e440bd0cf65565533117976859f", 1278 | "reference": "4d3ae9b21a7d7e440bd0cf65565533117976859f", 1279 | "shasum": "" 1280 | }, 1281 | "require": { 1282 | "ext-dom": "*", 1283 | "ext-xmlwriter": "*", 1284 | "php": "^7.1", 1285 | "phpunit/php-file-iterator": "^2.0", 1286 | "phpunit/php-text-template": "^1.2.1", 1287 | "phpunit/php-token-stream": "^3.0", 1288 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 1289 | "sebastian/environment": "^3.1 || ^4.0", 1290 | "sebastian/version": "^2.0.1", 1291 | "theseer/tokenizer": "^1.1" 1292 | }, 1293 | "require-dev": { 1294 | "phpunit/phpunit": "^7.0" 1295 | }, 1296 | "suggest": { 1297 | "ext-xdebug": "^2.6.0" 1298 | }, 1299 | "type": "library", 1300 | "extra": { 1301 | "branch-alias": { 1302 | "dev-master": "6.1-dev" 1303 | } 1304 | }, 1305 | "autoload": { 1306 | "classmap": [ 1307 | "src/" 1308 | ] 1309 | }, 1310 | "notification-url": "https://packagist.org/downloads/", 1311 | "license": [ 1312 | "BSD-3-Clause" 1313 | ], 1314 | "authors": [ 1315 | { 1316 | "name": "Sebastian Bergmann", 1317 | "email": "sebastian@phpunit.de", 1318 | "role": "lead" 1319 | } 1320 | ], 1321 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1322 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1323 | "keywords": [ 1324 | "coverage", 1325 | "testing", 1326 | "xunit" 1327 | ], 1328 | "time": "2018-10-23T05:59:32+00:00" 1329 | }, 1330 | { 1331 | "name": "phpunit/php-file-iterator", 1332 | "version": "2.0.2", 1333 | "source": { 1334 | "type": "git", 1335 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1336 | "reference": "050bedf145a257b1ff02746c31894800e5122946" 1337 | }, 1338 | "dist": { 1339 | "type": "zip", 1340 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", 1341 | "reference": "050bedf145a257b1ff02746c31894800e5122946", 1342 | "shasum": "" 1343 | }, 1344 | "require": { 1345 | "php": "^7.1" 1346 | }, 1347 | "require-dev": { 1348 | "phpunit/phpunit": "^7.1" 1349 | }, 1350 | "type": "library", 1351 | "extra": { 1352 | "branch-alias": { 1353 | "dev-master": "2.0.x-dev" 1354 | } 1355 | }, 1356 | "autoload": { 1357 | "classmap": [ 1358 | "src/" 1359 | ] 1360 | }, 1361 | "notification-url": "https://packagist.org/downloads/", 1362 | "license": [ 1363 | "BSD-3-Clause" 1364 | ], 1365 | "authors": [ 1366 | { 1367 | "name": "Sebastian Bergmann", 1368 | "email": "sebastian@phpunit.de", 1369 | "role": "lead" 1370 | } 1371 | ], 1372 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1373 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1374 | "keywords": [ 1375 | "filesystem", 1376 | "iterator" 1377 | ], 1378 | "time": "2018-09-13T20:33:42+00:00" 1379 | }, 1380 | { 1381 | "name": "phpunit/php-text-template", 1382 | "version": "1.2.1", 1383 | "source": { 1384 | "type": "git", 1385 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1386 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 1387 | }, 1388 | "dist": { 1389 | "type": "zip", 1390 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1391 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1392 | "shasum": "" 1393 | }, 1394 | "require": { 1395 | "php": ">=5.3.3" 1396 | }, 1397 | "type": "library", 1398 | "autoload": { 1399 | "classmap": [ 1400 | "src/" 1401 | ] 1402 | }, 1403 | "notification-url": "https://packagist.org/downloads/", 1404 | "license": [ 1405 | "BSD-3-Clause" 1406 | ], 1407 | "authors": [ 1408 | { 1409 | "name": "Sebastian Bergmann", 1410 | "email": "sebastian@phpunit.de", 1411 | "role": "lead" 1412 | } 1413 | ], 1414 | "description": "Simple template engine.", 1415 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1416 | "keywords": [ 1417 | "template" 1418 | ], 1419 | "time": "2015-06-21T13:50:34+00:00" 1420 | }, 1421 | { 1422 | "name": "phpunit/php-timer", 1423 | "version": "2.0.0", 1424 | "source": { 1425 | "type": "git", 1426 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1427 | "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f" 1428 | }, 1429 | "dist": { 1430 | "type": "zip", 1431 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f", 1432 | "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f", 1433 | "shasum": "" 1434 | }, 1435 | "require": { 1436 | "php": "^7.1" 1437 | }, 1438 | "require-dev": { 1439 | "phpunit/phpunit": "^7.0" 1440 | }, 1441 | "type": "library", 1442 | "extra": { 1443 | "branch-alias": { 1444 | "dev-master": "2.0-dev" 1445 | } 1446 | }, 1447 | "autoload": { 1448 | "classmap": [ 1449 | "src/" 1450 | ] 1451 | }, 1452 | "notification-url": "https://packagist.org/downloads/", 1453 | "license": [ 1454 | "BSD-3-Clause" 1455 | ], 1456 | "authors": [ 1457 | { 1458 | "name": "Sebastian Bergmann", 1459 | "email": "sebastian@phpunit.de", 1460 | "role": "lead" 1461 | } 1462 | ], 1463 | "description": "Utility class for timing", 1464 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1465 | "keywords": [ 1466 | "timer" 1467 | ], 1468 | "time": "2018-02-01T13:07:23+00:00" 1469 | }, 1470 | { 1471 | "name": "phpunit/php-token-stream", 1472 | "version": "3.0.1", 1473 | "source": { 1474 | "type": "git", 1475 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1476 | "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18" 1477 | }, 1478 | "dist": { 1479 | "type": "zip", 1480 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/c99e3be9d3e85f60646f152f9002d46ed7770d18", 1481 | "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18", 1482 | "shasum": "" 1483 | }, 1484 | "require": { 1485 | "ext-tokenizer": "*", 1486 | "php": "^7.1" 1487 | }, 1488 | "require-dev": { 1489 | "phpunit/phpunit": "^7.0" 1490 | }, 1491 | "type": "library", 1492 | "extra": { 1493 | "branch-alias": { 1494 | "dev-master": "3.0-dev" 1495 | } 1496 | }, 1497 | "autoload": { 1498 | "classmap": [ 1499 | "src/" 1500 | ] 1501 | }, 1502 | "notification-url": "https://packagist.org/downloads/", 1503 | "license": [ 1504 | "BSD-3-Clause" 1505 | ], 1506 | "authors": [ 1507 | { 1508 | "name": "Sebastian Bergmann", 1509 | "email": "sebastian@phpunit.de" 1510 | } 1511 | ], 1512 | "description": "Wrapper around PHP's tokenizer extension.", 1513 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1514 | "keywords": [ 1515 | "tokenizer" 1516 | ], 1517 | "time": "2018-10-30T05:52:18+00:00" 1518 | }, 1519 | { 1520 | "name": "phpunit/phpunit", 1521 | "version": "7.4.3", 1522 | "source": { 1523 | "type": "git", 1524 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1525 | "reference": "c151651fb6ed264038d486ea262e243af72e5e64" 1526 | }, 1527 | "dist": { 1528 | "type": "zip", 1529 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c151651fb6ed264038d486ea262e243af72e5e64", 1530 | "reference": "c151651fb6ed264038d486ea262e243af72e5e64", 1531 | "shasum": "" 1532 | }, 1533 | "require": { 1534 | "doctrine/instantiator": "^1.1", 1535 | "ext-dom": "*", 1536 | "ext-json": "*", 1537 | "ext-libxml": "*", 1538 | "ext-mbstring": "*", 1539 | "ext-xml": "*", 1540 | "myclabs/deep-copy": "^1.7", 1541 | "phar-io/manifest": "^1.0.2", 1542 | "phar-io/version": "^2.0", 1543 | "php": "^7.1", 1544 | "phpspec/prophecy": "^1.7", 1545 | "phpunit/php-code-coverage": "^6.0.7", 1546 | "phpunit/php-file-iterator": "^2.0.1", 1547 | "phpunit/php-text-template": "^1.2.1", 1548 | "phpunit/php-timer": "^2.0", 1549 | "sebastian/comparator": "^3.0", 1550 | "sebastian/diff": "^3.0", 1551 | "sebastian/environment": "^3.1 || ^4.0", 1552 | "sebastian/exporter": "^3.1", 1553 | "sebastian/global-state": "^2.0", 1554 | "sebastian/object-enumerator": "^3.0.3", 1555 | "sebastian/resource-operations": "^2.0", 1556 | "sebastian/version": "^2.0.1" 1557 | }, 1558 | "conflict": { 1559 | "phpunit/phpunit-mock-objects": "*" 1560 | }, 1561 | "require-dev": { 1562 | "ext-pdo": "*" 1563 | }, 1564 | "suggest": { 1565 | "ext-soap": "*", 1566 | "ext-xdebug": "*", 1567 | "phpunit/php-invoker": "^2.0" 1568 | }, 1569 | "bin": [ 1570 | "phpunit" 1571 | ], 1572 | "type": "library", 1573 | "extra": { 1574 | "branch-alias": { 1575 | "dev-master": "7.4-dev" 1576 | } 1577 | }, 1578 | "autoload": { 1579 | "classmap": [ 1580 | "src/" 1581 | ] 1582 | }, 1583 | "notification-url": "https://packagist.org/downloads/", 1584 | "license": [ 1585 | "BSD-3-Clause" 1586 | ], 1587 | "authors": [ 1588 | { 1589 | "name": "Sebastian Bergmann", 1590 | "email": "sebastian@phpunit.de", 1591 | "role": "lead" 1592 | } 1593 | ], 1594 | "description": "The PHP Unit Testing framework.", 1595 | "homepage": "https://phpunit.de/", 1596 | "keywords": [ 1597 | "phpunit", 1598 | "testing", 1599 | "xunit" 1600 | ], 1601 | "time": "2018-10-23T05:57:41+00:00" 1602 | }, 1603 | { 1604 | "name": "psr/container", 1605 | "version": "1.0.0", 1606 | "source": { 1607 | "type": "git", 1608 | "url": "https://github.com/php-fig/container.git", 1609 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 1610 | }, 1611 | "dist": { 1612 | "type": "zip", 1613 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 1614 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 1615 | "shasum": "" 1616 | }, 1617 | "require": { 1618 | "php": ">=5.3.0" 1619 | }, 1620 | "type": "library", 1621 | "extra": { 1622 | "branch-alias": { 1623 | "dev-master": "1.0.x-dev" 1624 | } 1625 | }, 1626 | "autoload": { 1627 | "psr-4": { 1628 | "Psr\\Container\\": "src/" 1629 | } 1630 | }, 1631 | "notification-url": "https://packagist.org/downloads/", 1632 | "license": [ 1633 | "MIT" 1634 | ], 1635 | "authors": [ 1636 | { 1637 | "name": "PHP-FIG", 1638 | "homepage": "http://www.php-fig.org/" 1639 | } 1640 | ], 1641 | "description": "Common Container Interface (PHP FIG PSR-11)", 1642 | "homepage": "https://github.com/php-fig/container", 1643 | "keywords": [ 1644 | "PSR-11", 1645 | "container", 1646 | "container-interface", 1647 | "container-interop", 1648 | "psr" 1649 | ], 1650 | "time": "2017-02-14T16:28:37+00:00" 1651 | }, 1652 | { 1653 | "name": "psr/log", 1654 | "version": "1.0.2", 1655 | "source": { 1656 | "type": "git", 1657 | "url": "https://github.com/php-fig/log.git", 1658 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 1659 | }, 1660 | "dist": { 1661 | "type": "zip", 1662 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 1663 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 1664 | "shasum": "" 1665 | }, 1666 | "require": { 1667 | "php": ">=5.3.0" 1668 | }, 1669 | "type": "library", 1670 | "extra": { 1671 | "branch-alias": { 1672 | "dev-master": "1.0.x-dev" 1673 | } 1674 | }, 1675 | "autoload": { 1676 | "psr-4": { 1677 | "Psr\\Log\\": "Psr/Log/" 1678 | } 1679 | }, 1680 | "notification-url": "https://packagist.org/downloads/", 1681 | "license": [ 1682 | "MIT" 1683 | ], 1684 | "authors": [ 1685 | { 1686 | "name": "PHP-FIG", 1687 | "homepage": "http://www.php-fig.org/" 1688 | } 1689 | ], 1690 | "description": "Common interface for logging libraries", 1691 | "homepage": "https://github.com/php-fig/log", 1692 | "keywords": [ 1693 | "log", 1694 | "psr", 1695 | "psr-3" 1696 | ], 1697 | "time": "2016-10-10T12:19:37+00:00" 1698 | }, 1699 | { 1700 | "name": "psr/simple-cache", 1701 | "version": "1.0.1", 1702 | "source": { 1703 | "type": "git", 1704 | "url": "https://github.com/php-fig/simple-cache.git", 1705 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" 1706 | }, 1707 | "dist": { 1708 | "type": "zip", 1709 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 1710 | "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", 1711 | "shasum": "" 1712 | }, 1713 | "require": { 1714 | "php": ">=5.3.0" 1715 | }, 1716 | "type": "library", 1717 | "extra": { 1718 | "branch-alias": { 1719 | "dev-master": "1.0.x-dev" 1720 | } 1721 | }, 1722 | "autoload": { 1723 | "psr-4": { 1724 | "Psr\\SimpleCache\\": "src/" 1725 | } 1726 | }, 1727 | "notification-url": "https://packagist.org/downloads/", 1728 | "license": [ 1729 | "MIT" 1730 | ], 1731 | "authors": [ 1732 | { 1733 | "name": "PHP-FIG", 1734 | "homepage": "http://www.php-fig.org/" 1735 | } 1736 | ], 1737 | "description": "Common interfaces for simple caching", 1738 | "keywords": [ 1739 | "cache", 1740 | "caching", 1741 | "psr", 1742 | "psr-16", 1743 | "simple-cache" 1744 | ], 1745 | "time": "2017-10-23T01:57:42+00:00" 1746 | }, 1747 | { 1748 | "name": "ramsey/uuid", 1749 | "version": "3.8.0", 1750 | "source": { 1751 | "type": "git", 1752 | "url": "https://github.com/ramsey/uuid.git", 1753 | "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" 1754 | }, 1755 | "dist": { 1756 | "type": "zip", 1757 | "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", 1758 | "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", 1759 | "shasum": "" 1760 | }, 1761 | "require": { 1762 | "paragonie/random_compat": "^1.0|^2.0|9.99.99", 1763 | "php": "^5.4 || ^7.0", 1764 | "symfony/polyfill-ctype": "^1.8" 1765 | }, 1766 | "replace": { 1767 | "rhumsaa/uuid": "self.version" 1768 | }, 1769 | "require-dev": { 1770 | "codeception/aspect-mock": "^1.0 | ~2.0.0", 1771 | "doctrine/annotations": "~1.2.0", 1772 | "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", 1773 | "ircmaxell/random-lib": "^1.1", 1774 | "jakub-onderka/php-parallel-lint": "^0.9.0", 1775 | "mockery/mockery": "^0.9.9", 1776 | "moontoast/math": "^1.1", 1777 | "php-mock/php-mock-phpunit": "^0.3|^1.1", 1778 | "phpunit/phpunit": "^4.7|^5.0|^6.5", 1779 | "squizlabs/php_codesniffer": "^2.3" 1780 | }, 1781 | "suggest": { 1782 | "ext-ctype": "Provides support for PHP Ctype functions", 1783 | "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", 1784 | "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", 1785 | "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", 1786 | "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", 1787 | "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", 1788 | "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." 1789 | }, 1790 | "type": "library", 1791 | "extra": { 1792 | "branch-alias": { 1793 | "dev-master": "3.x-dev" 1794 | } 1795 | }, 1796 | "autoload": { 1797 | "psr-4": { 1798 | "Ramsey\\Uuid\\": "src/" 1799 | } 1800 | }, 1801 | "notification-url": "https://packagist.org/downloads/", 1802 | "license": [ 1803 | "MIT" 1804 | ], 1805 | "authors": [ 1806 | { 1807 | "name": "Marijn Huizendveld", 1808 | "email": "marijn.huizendveld@gmail.com" 1809 | }, 1810 | { 1811 | "name": "Thibaud Fabre", 1812 | "email": "thibaud@aztech.io" 1813 | }, 1814 | { 1815 | "name": "Ben Ramsey", 1816 | "email": "ben@benramsey.com", 1817 | "homepage": "https://benramsey.com" 1818 | } 1819 | ], 1820 | "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", 1821 | "homepage": "https://github.com/ramsey/uuid", 1822 | "keywords": [ 1823 | "guid", 1824 | "identifier", 1825 | "uuid" 1826 | ], 1827 | "time": "2018-07-19T23:38:55+00:00" 1828 | }, 1829 | { 1830 | "name": "sebastian/code-unit-reverse-lookup", 1831 | "version": "1.0.1", 1832 | "source": { 1833 | "type": "git", 1834 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1835 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 1836 | }, 1837 | "dist": { 1838 | "type": "zip", 1839 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1840 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1841 | "shasum": "" 1842 | }, 1843 | "require": { 1844 | "php": "^5.6 || ^7.0" 1845 | }, 1846 | "require-dev": { 1847 | "phpunit/phpunit": "^5.7 || ^6.0" 1848 | }, 1849 | "type": "library", 1850 | "extra": { 1851 | "branch-alias": { 1852 | "dev-master": "1.0.x-dev" 1853 | } 1854 | }, 1855 | "autoload": { 1856 | "classmap": [ 1857 | "src/" 1858 | ] 1859 | }, 1860 | "notification-url": "https://packagist.org/downloads/", 1861 | "license": [ 1862 | "BSD-3-Clause" 1863 | ], 1864 | "authors": [ 1865 | { 1866 | "name": "Sebastian Bergmann", 1867 | "email": "sebastian@phpunit.de" 1868 | } 1869 | ], 1870 | "description": "Looks up which function or method a line of code belongs to", 1871 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1872 | "time": "2017-03-04T06:30:41+00:00" 1873 | }, 1874 | { 1875 | "name": "sebastian/comparator", 1876 | "version": "3.0.2", 1877 | "source": { 1878 | "type": "git", 1879 | "url": "https://github.com/sebastianbergmann/comparator.git", 1880 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" 1881 | }, 1882 | "dist": { 1883 | "type": "zip", 1884 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 1885 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 1886 | "shasum": "" 1887 | }, 1888 | "require": { 1889 | "php": "^7.1", 1890 | "sebastian/diff": "^3.0", 1891 | "sebastian/exporter": "^3.1" 1892 | }, 1893 | "require-dev": { 1894 | "phpunit/phpunit": "^7.1" 1895 | }, 1896 | "type": "library", 1897 | "extra": { 1898 | "branch-alias": { 1899 | "dev-master": "3.0-dev" 1900 | } 1901 | }, 1902 | "autoload": { 1903 | "classmap": [ 1904 | "src/" 1905 | ] 1906 | }, 1907 | "notification-url": "https://packagist.org/downloads/", 1908 | "license": [ 1909 | "BSD-3-Clause" 1910 | ], 1911 | "authors": [ 1912 | { 1913 | "name": "Jeff Welch", 1914 | "email": "whatthejeff@gmail.com" 1915 | }, 1916 | { 1917 | "name": "Volker Dusch", 1918 | "email": "github@wallbash.com" 1919 | }, 1920 | { 1921 | "name": "Bernhard Schussek", 1922 | "email": "bschussek@2bepublished.at" 1923 | }, 1924 | { 1925 | "name": "Sebastian Bergmann", 1926 | "email": "sebastian@phpunit.de" 1927 | } 1928 | ], 1929 | "description": "Provides the functionality to compare PHP values for equality", 1930 | "homepage": "https://github.com/sebastianbergmann/comparator", 1931 | "keywords": [ 1932 | "comparator", 1933 | "compare", 1934 | "equality" 1935 | ], 1936 | "time": "2018-07-12T15:12:46+00:00" 1937 | }, 1938 | { 1939 | "name": "sebastian/diff", 1940 | "version": "3.0.1", 1941 | "source": { 1942 | "type": "git", 1943 | "url": "https://github.com/sebastianbergmann/diff.git", 1944 | "reference": "366541b989927187c4ca70490a35615d3fef2dce" 1945 | }, 1946 | "dist": { 1947 | "type": "zip", 1948 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/366541b989927187c4ca70490a35615d3fef2dce", 1949 | "reference": "366541b989927187c4ca70490a35615d3fef2dce", 1950 | "shasum": "" 1951 | }, 1952 | "require": { 1953 | "php": "^7.1" 1954 | }, 1955 | "require-dev": { 1956 | "phpunit/phpunit": "^7.0", 1957 | "symfony/process": "^2 || ^3.3 || ^4" 1958 | }, 1959 | "type": "library", 1960 | "extra": { 1961 | "branch-alias": { 1962 | "dev-master": "3.0-dev" 1963 | } 1964 | }, 1965 | "autoload": { 1966 | "classmap": [ 1967 | "src/" 1968 | ] 1969 | }, 1970 | "notification-url": "https://packagist.org/downloads/", 1971 | "license": [ 1972 | "BSD-3-Clause" 1973 | ], 1974 | "authors": [ 1975 | { 1976 | "name": "Kore Nordmann", 1977 | "email": "mail@kore-nordmann.de" 1978 | }, 1979 | { 1980 | "name": "Sebastian Bergmann", 1981 | "email": "sebastian@phpunit.de" 1982 | } 1983 | ], 1984 | "description": "Diff implementation", 1985 | "homepage": "https://github.com/sebastianbergmann/diff", 1986 | "keywords": [ 1987 | "diff", 1988 | "udiff", 1989 | "unidiff", 1990 | "unified diff" 1991 | ], 1992 | "time": "2018-06-10T07:54:39+00:00" 1993 | }, 1994 | { 1995 | "name": "sebastian/environment", 1996 | "version": "3.1.0", 1997 | "source": { 1998 | "type": "git", 1999 | "url": "https://github.com/sebastianbergmann/environment.git", 2000 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" 2001 | }, 2002 | "dist": { 2003 | "type": "zip", 2004 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", 2005 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", 2006 | "shasum": "" 2007 | }, 2008 | "require": { 2009 | "php": "^7.0" 2010 | }, 2011 | "require-dev": { 2012 | "phpunit/phpunit": "^6.1" 2013 | }, 2014 | "type": "library", 2015 | "extra": { 2016 | "branch-alias": { 2017 | "dev-master": "3.1.x-dev" 2018 | } 2019 | }, 2020 | "autoload": { 2021 | "classmap": [ 2022 | "src/" 2023 | ] 2024 | }, 2025 | "notification-url": "https://packagist.org/downloads/", 2026 | "license": [ 2027 | "BSD-3-Clause" 2028 | ], 2029 | "authors": [ 2030 | { 2031 | "name": "Sebastian Bergmann", 2032 | "email": "sebastian@phpunit.de" 2033 | } 2034 | ], 2035 | "description": "Provides functionality to handle HHVM/PHP environments", 2036 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2037 | "keywords": [ 2038 | "Xdebug", 2039 | "environment", 2040 | "hhvm" 2041 | ], 2042 | "time": "2017-07-01T08:51:00+00:00" 2043 | }, 2044 | { 2045 | "name": "sebastian/exporter", 2046 | "version": "3.1.0", 2047 | "source": { 2048 | "type": "git", 2049 | "url": "https://github.com/sebastianbergmann/exporter.git", 2050 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" 2051 | }, 2052 | "dist": { 2053 | "type": "zip", 2054 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", 2055 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", 2056 | "shasum": "" 2057 | }, 2058 | "require": { 2059 | "php": "^7.0", 2060 | "sebastian/recursion-context": "^3.0" 2061 | }, 2062 | "require-dev": { 2063 | "ext-mbstring": "*", 2064 | "phpunit/phpunit": "^6.0" 2065 | }, 2066 | "type": "library", 2067 | "extra": { 2068 | "branch-alias": { 2069 | "dev-master": "3.1.x-dev" 2070 | } 2071 | }, 2072 | "autoload": { 2073 | "classmap": [ 2074 | "src/" 2075 | ] 2076 | }, 2077 | "notification-url": "https://packagist.org/downloads/", 2078 | "license": [ 2079 | "BSD-3-Clause" 2080 | ], 2081 | "authors": [ 2082 | { 2083 | "name": "Jeff Welch", 2084 | "email": "whatthejeff@gmail.com" 2085 | }, 2086 | { 2087 | "name": "Volker Dusch", 2088 | "email": "github@wallbash.com" 2089 | }, 2090 | { 2091 | "name": "Bernhard Schussek", 2092 | "email": "bschussek@2bepublished.at" 2093 | }, 2094 | { 2095 | "name": "Sebastian Bergmann", 2096 | "email": "sebastian@phpunit.de" 2097 | }, 2098 | { 2099 | "name": "Adam Harvey", 2100 | "email": "aharvey@php.net" 2101 | } 2102 | ], 2103 | "description": "Provides the functionality to export PHP variables for visualization", 2104 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 2105 | "keywords": [ 2106 | "export", 2107 | "exporter" 2108 | ], 2109 | "time": "2017-04-03T13:19:02+00:00" 2110 | }, 2111 | { 2112 | "name": "sebastian/global-state", 2113 | "version": "2.0.0", 2114 | "source": { 2115 | "type": "git", 2116 | "url": "https://github.com/sebastianbergmann/global-state.git", 2117 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" 2118 | }, 2119 | "dist": { 2120 | "type": "zip", 2121 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 2122 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 2123 | "shasum": "" 2124 | }, 2125 | "require": { 2126 | "php": "^7.0" 2127 | }, 2128 | "require-dev": { 2129 | "phpunit/phpunit": "^6.0" 2130 | }, 2131 | "suggest": { 2132 | "ext-uopz": "*" 2133 | }, 2134 | "type": "library", 2135 | "extra": { 2136 | "branch-alias": { 2137 | "dev-master": "2.0-dev" 2138 | } 2139 | }, 2140 | "autoload": { 2141 | "classmap": [ 2142 | "src/" 2143 | ] 2144 | }, 2145 | "notification-url": "https://packagist.org/downloads/", 2146 | "license": [ 2147 | "BSD-3-Clause" 2148 | ], 2149 | "authors": [ 2150 | { 2151 | "name": "Sebastian Bergmann", 2152 | "email": "sebastian@phpunit.de" 2153 | } 2154 | ], 2155 | "description": "Snapshotting of global state", 2156 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 2157 | "keywords": [ 2158 | "global state" 2159 | ], 2160 | "time": "2017-04-27T15:39:26+00:00" 2161 | }, 2162 | { 2163 | "name": "sebastian/object-enumerator", 2164 | "version": "3.0.3", 2165 | "source": { 2166 | "type": "git", 2167 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2168 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 2169 | }, 2170 | "dist": { 2171 | "type": "zip", 2172 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", 2173 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 2174 | "shasum": "" 2175 | }, 2176 | "require": { 2177 | "php": "^7.0", 2178 | "sebastian/object-reflector": "^1.1.1", 2179 | "sebastian/recursion-context": "^3.0" 2180 | }, 2181 | "require-dev": { 2182 | "phpunit/phpunit": "^6.0" 2183 | }, 2184 | "type": "library", 2185 | "extra": { 2186 | "branch-alias": { 2187 | "dev-master": "3.0.x-dev" 2188 | } 2189 | }, 2190 | "autoload": { 2191 | "classmap": [ 2192 | "src/" 2193 | ] 2194 | }, 2195 | "notification-url": "https://packagist.org/downloads/", 2196 | "license": [ 2197 | "BSD-3-Clause" 2198 | ], 2199 | "authors": [ 2200 | { 2201 | "name": "Sebastian Bergmann", 2202 | "email": "sebastian@phpunit.de" 2203 | } 2204 | ], 2205 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2206 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2207 | "time": "2017-08-03T12:35:26+00:00" 2208 | }, 2209 | { 2210 | "name": "sebastian/object-reflector", 2211 | "version": "1.1.1", 2212 | "source": { 2213 | "type": "git", 2214 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 2215 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 2216 | }, 2217 | "dist": { 2218 | "type": "zip", 2219 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 2220 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 2221 | "shasum": "" 2222 | }, 2223 | "require": { 2224 | "php": "^7.0" 2225 | }, 2226 | "require-dev": { 2227 | "phpunit/phpunit": "^6.0" 2228 | }, 2229 | "type": "library", 2230 | "extra": { 2231 | "branch-alias": { 2232 | "dev-master": "1.1-dev" 2233 | } 2234 | }, 2235 | "autoload": { 2236 | "classmap": [ 2237 | "src/" 2238 | ] 2239 | }, 2240 | "notification-url": "https://packagist.org/downloads/", 2241 | "license": [ 2242 | "BSD-3-Clause" 2243 | ], 2244 | "authors": [ 2245 | { 2246 | "name": "Sebastian Bergmann", 2247 | "email": "sebastian@phpunit.de" 2248 | } 2249 | ], 2250 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 2251 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 2252 | "time": "2017-03-29T09:07:27+00:00" 2253 | }, 2254 | { 2255 | "name": "sebastian/recursion-context", 2256 | "version": "3.0.0", 2257 | "source": { 2258 | "type": "git", 2259 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2260 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 2261 | }, 2262 | "dist": { 2263 | "type": "zip", 2264 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 2265 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 2266 | "shasum": "" 2267 | }, 2268 | "require": { 2269 | "php": "^7.0" 2270 | }, 2271 | "require-dev": { 2272 | "phpunit/phpunit": "^6.0" 2273 | }, 2274 | "type": "library", 2275 | "extra": { 2276 | "branch-alias": { 2277 | "dev-master": "3.0.x-dev" 2278 | } 2279 | }, 2280 | "autoload": { 2281 | "classmap": [ 2282 | "src/" 2283 | ] 2284 | }, 2285 | "notification-url": "https://packagist.org/downloads/", 2286 | "license": [ 2287 | "BSD-3-Clause" 2288 | ], 2289 | "authors": [ 2290 | { 2291 | "name": "Jeff Welch", 2292 | "email": "whatthejeff@gmail.com" 2293 | }, 2294 | { 2295 | "name": "Sebastian Bergmann", 2296 | "email": "sebastian@phpunit.de" 2297 | }, 2298 | { 2299 | "name": "Adam Harvey", 2300 | "email": "aharvey@php.net" 2301 | } 2302 | ], 2303 | "description": "Provides functionality to recursively process PHP variables", 2304 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2305 | "time": "2017-03-03T06:23:57+00:00" 2306 | }, 2307 | { 2308 | "name": "sebastian/resource-operations", 2309 | "version": "2.0.1", 2310 | "source": { 2311 | "type": "git", 2312 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 2313 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" 2314 | }, 2315 | "dist": { 2316 | "type": "zip", 2317 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 2318 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 2319 | "shasum": "" 2320 | }, 2321 | "require": { 2322 | "php": "^7.1" 2323 | }, 2324 | "type": "library", 2325 | "extra": { 2326 | "branch-alias": { 2327 | "dev-master": "2.0-dev" 2328 | } 2329 | }, 2330 | "autoload": { 2331 | "classmap": [ 2332 | "src/" 2333 | ] 2334 | }, 2335 | "notification-url": "https://packagist.org/downloads/", 2336 | "license": [ 2337 | "BSD-3-Clause" 2338 | ], 2339 | "authors": [ 2340 | { 2341 | "name": "Sebastian Bergmann", 2342 | "email": "sebastian@phpunit.de" 2343 | } 2344 | ], 2345 | "description": "Provides a list of PHP built-in functions that operate on resources", 2346 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2347 | "time": "2018-10-04T04:07:39+00:00" 2348 | }, 2349 | { 2350 | "name": "sebastian/version", 2351 | "version": "2.0.1", 2352 | "source": { 2353 | "type": "git", 2354 | "url": "https://github.com/sebastianbergmann/version.git", 2355 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 2356 | }, 2357 | "dist": { 2358 | "type": "zip", 2359 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 2360 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 2361 | "shasum": "" 2362 | }, 2363 | "require": { 2364 | "php": ">=5.6" 2365 | }, 2366 | "type": "library", 2367 | "extra": { 2368 | "branch-alias": { 2369 | "dev-master": "2.0.x-dev" 2370 | } 2371 | }, 2372 | "autoload": { 2373 | "classmap": [ 2374 | "src/" 2375 | ] 2376 | }, 2377 | "notification-url": "https://packagist.org/downloads/", 2378 | "license": [ 2379 | "BSD-3-Clause" 2380 | ], 2381 | "authors": [ 2382 | { 2383 | "name": "Sebastian Bergmann", 2384 | "email": "sebastian@phpunit.de", 2385 | "role": "lead" 2386 | } 2387 | ], 2388 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2389 | "homepage": "https://github.com/sebastianbergmann/version", 2390 | "time": "2016-10-03T07:35:21+00:00" 2391 | }, 2392 | { 2393 | "name": "swiftmailer/swiftmailer", 2394 | "version": "v6.1.3", 2395 | "source": { 2396 | "type": "git", 2397 | "url": "https://github.com/swiftmailer/swiftmailer.git", 2398 | "reference": "8ddcb66ac10c392d3beb54829eef8ac1438595f4" 2399 | }, 2400 | "dist": { 2401 | "type": "zip", 2402 | "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8ddcb66ac10c392d3beb54829eef8ac1438595f4", 2403 | "reference": "8ddcb66ac10c392d3beb54829eef8ac1438595f4", 2404 | "shasum": "" 2405 | }, 2406 | "require": { 2407 | "egulias/email-validator": "~2.0", 2408 | "php": ">=7.0.0" 2409 | }, 2410 | "require-dev": { 2411 | "mockery/mockery": "~0.9.1", 2412 | "symfony/phpunit-bridge": "~3.3@dev" 2413 | }, 2414 | "suggest": { 2415 | "ext-intl": "Needed to support internationalized email addresses", 2416 | "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" 2417 | }, 2418 | "type": "library", 2419 | "extra": { 2420 | "branch-alias": { 2421 | "dev-master": "6.1-dev" 2422 | } 2423 | }, 2424 | "autoload": { 2425 | "files": [ 2426 | "lib/swift_required.php" 2427 | ] 2428 | }, 2429 | "notification-url": "https://packagist.org/downloads/", 2430 | "license": [ 2431 | "MIT" 2432 | ], 2433 | "authors": [ 2434 | { 2435 | "name": "Chris Corbyn" 2436 | }, 2437 | { 2438 | "name": "Fabien Potencier", 2439 | "email": "fabien@symfony.com" 2440 | } 2441 | ], 2442 | "description": "Swiftmailer, free feature-rich PHP mailer", 2443 | "homepage": "https://swiftmailer.symfony.com", 2444 | "keywords": [ 2445 | "email", 2446 | "mail", 2447 | "mailer" 2448 | ], 2449 | "time": "2018-09-11T07:12:52+00:00" 2450 | }, 2451 | { 2452 | "name": "symfony/console", 2453 | "version": "v4.1.6", 2454 | "source": { 2455 | "type": "git", 2456 | "url": "https://github.com/symfony/console.git", 2457 | "reference": "dc7122fe5f6113cfaba3b3de575d31112c9aa60b" 2458 | }, 2459 | "dist": { 2460 | "type": "zip", 2461 | "url": "https://api.github.com/repos/symfony/console/zipball/dc7122fe5f6113cfaba3b3de575d31112c9aa60b", 2462 | "reference": "dc7122fe5f6113cfaba3b3de575d31112c9aa60b", 2463 | "shasum": "" 2464 | }, 2465 | "require": { 2466 | "php": "^7.1.3", 2467 | "symfony/polyfill-mbstring": "~1.0" 2468 | }, 2469 | "conflict": { 2470 | "symfony/dependency-injection": "<3.4", 2471 | "symfony/process": "<3.3" 2472 | }, 2473 | "require-dev": { 2474 | "psr/log": "~1.0", 2475 | "symfony/config": "~3.4|~4.0", 2476 | "symfony/dependency-injection": "~3.4|~4.0", 2477 | "symfony/event-dispatcher": "~3.4|~4.0", 2478 | "symfony/lock": "~3.4|~4.0", 2479 | "symfony/process": "~3.4|~4.0" 2480 | }, 2481 | "suggest": { 2482 | "psr/log-implementation": "For using the console logger", 2483 | "symfony/event-dispatcher": "", 2484 | "symfony/lock": "", 2485 | "symfony/process": "" 2486 | }, 2487 | "type": "library", 2488 | "extra": { 2489 | "branch-alias": { 2490 | "dev-master": "4.1-dev" 2491 | } 2492 | }, 2493 | "autoload": { 2494 | "psr-4": { 2495 | "Symfony\\Component\\Console\\": "" 2496 | }, 2497 | "exclude-from-classmap": [ 2498 | "/Tests/" 2499 | ] 2500 | }, 2501 | "notification-url": "https://packagist.org/downloads/", 2502 | "license": [ 2503 | "MIT" 2504 | ], 2505 | "authors": [ 2506 | { 2507 | "name": "Fabien Potencier", 2508 | "email": "fabien@symfony.com" 2509 | }, 2510 | { 2511 | "name": "Symfony Community", 2512 | "homepage": "https://symfony.com/contributors" 2513 | } 2514 | ], 2515 | "description": "Symfony Console Component", 2516 | "homepage": "https://symfony.com", 2517 | "time": "2018-10-03T08:15:46+00:00" 2518 | }, 2519 | { 2520 | "name": "symfony/css-selector", 2521 | "version": "v4.1.6", 2522 | "source": { 2523 | "type": "git", 2524 | "url": "https://github.com/symfony/css-selector.git", 2525 | "reference": "d67de79a70a27d93c92c47f37ece958bf8de4d8a" 2526 | }, 2527 | "dist": { 2528 | "type": "zip", 2529 | "url": "https://api.github.com/repos/symfony/css-selector/zipball/d67de79a70a27d93c92c47f37ece958bf8de4d8a", 2530 | "reference": "d67de79a70a27d93c92c47f37ece958bf8de4d8a", 2531 | "shasum": "" 2532 | }, 2533 | "require": { 2534 | "php": "^7.1.3" 2535 | }, 2536 | "type": "library", 2537 | "extra": { 2538 | "branch-alias": { 2539 | "dev-master": "4.1-dev" 2540 | } 2541 | }, 2542 | "autoload": { 2543 | "psr-4": { 2544 | "Symfony\\Component\\CssSelector\\": "" 2545 | }, 2546 | "exclude-from-classmap": [ 2547 | "/Tests/" 2548 | ] 2549 | }, 2550 | "notification-url": "https://packagist.org/downloads/", 2551 | "license": [ 2552 | "MIT" 2553 | ], 2554 | "authors": [ 2555 | { 2556 | "name": "Jean-François Simon", 2557 | "email": "jeanfrancois.simon@sensiolabs.com" 2558 | }, 2559 | { 2560 | "name": "Fabien Potencier", 2561 | "email": "fabien@symfony.com" 2562 | }, 2563 | { 2564 | "name": "Symfony Community", 2565 | "homepage": "https://symfony.com/contributors" 2566 | } 2567 | ], 2568 | "description": "Symfony CssSelector Component", 2569 | "homepage": "https://symfony.com", 2570 | "time": "2018-10-02T16:36:10+00:00" 2571 | }, 2572 | { 2573 | "name": "symfony/debug", 2574 | "version": "v4.1.6", 2575 | "source": { 2576 | "type": "git", 2577 | "url": "https://github.com/symfony/debug.git", 2578 | "reference": "e3f76ce6198f81994e019bb2b4e533e9de1b9b90" 2579 | }, 2580 | "dist": { 2581 | "type": "zip", 2582 | "url": "https://api.github.com/repos/symfony/debug/zipball/e3f76ce6198f81994e019bb2b4e533e9de1b9b90", 2583 | "reference": "e3f76ce6198f81994e019bb2b4e533e9de1b9b90", 2584 | "shasum": "" 2585 | }, 2586 | "require": { 2587 | "php": "^7.1.3", 2588 | "psr/log": "~1.0" 2589 | }, 2590 | "conflict": { 2591 | "symfony/http-kernel": "<3.4" 2592 | }, 2593 | "require-dev": { 2594 | "symfony/http-kernel": "~3.4|~4.0" 2595 | }, 2596 | "type": "library", 2597 | "extra": { 2598 | "branch-alias": { 2599 | "dev-master": "4.1-dev" 2600 | } 2601 | }, 2602 | "autoload": { 2603 | "psr-4": { 2604 | "Symfony\\Component\\Debug\\": "" 2605 | }, 2606 | "exclude-from-classmap": [ 2607 | "/Tests/" 2608 | ] 2609 | }, 2610 | "notification-url": "https://packagist.org/downloads/", 2611 | "license": [ 2612 | "MIT" 2613 | ], 2614 | "authors": [ 2615 | { 2616 | "name": "Fabien Potencier", 2617 | "email": "fabien@symfony.com" 2618 | }, 2619 | { 2620 | "name": "Symfony Community", 2621 | "homepage": "https://symfony.com/contributors" 2622 | } 2623 | ], 2624 | "description": "Symfony Debug Component", 2625 | "homepage": "https://symfony.com", 2626 | "time": "2018-10-02T16:36:10+00:00" 2627 | }, 2628 | { 2629 | "name": "symfony/event-dispatcher", 2630 | "version": "v4.1.6", 2631 | "source": { 2632 | "type": "git", 2633 | "url": "https://github.com/symfony/event-dispatcher.git", 2634 | "reference": "bfb30c2ad377615a463ebbc875eba64a99f6aa3e" 2635 | }, 2636 | "dist": { 2637 | "type": "zip", 2638 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/bfb30c2ad377615a463ebbc875eba64a99f6aa3e", 2639 | "reference": "bfb30c2ad377615a463ebbc875eba64a99f6aa3e", 2640 | "shasum": "" 2641 | }, 2642 | "require": { 2643 | "php": "^7.1.3" 2644 | }, 2645 | "conflict": { 2646 | "symfony/dependency-injection": "<3.4" 2647 | }, 2648 | "require-dev": { 2649 | "psr/log": "~1.0", 2650 | "symfony/config": "~3.4|~4.0", 2651 | "symfony/dependency-injection": "~3.4|~4.0", 2652 | "symfony/expression-language": "~3.4|~4.0", 2653 | "symfony/stopwatch": "~3.4|~4.0" 2654 | }, 2655 | "suggest": { 2656 | "symfony/dependency-injection": "", 2657 | "symfony/http-kernel": "" 2658 | }, 2659 | "type": "library", 2660 | "extra": { 2661 | "branch-alias": { 2662 | "dev-master": "4.1-dev" 2663 | } 2664 | }, 2665 | "autoload": { 2666 | "psr-4": { 2667 | "Symfony\\Component\\EventDispatcher\\": "" 2668 | }, 2669 | "exclude-from-classmap": [ 2670 | "/Tests/" 2671 | ] 2672 | }, 2673 | "notification-url": "https://packagist.org/downloads/", 2674 | "license": [ 2675 | "MIT" 2676 | ], 2677 | "authors": [ 2678 | { 2679 | "name": "Fabien Potencier", 2680 | "email": "fabien@symfony.com" 2681 | }, 2682 | { 2683 | "name": "Symfony Community", 2684 | "homepage": "https://symfony.com/contributors" 2685 | } 2686 | ], 2687 | "description": "Symfony EventDispatcher Component", 2688 | "homepage": "https://symfony.com", 2689 | "time": "2018-07-26T09:10:45+00:00" 2690 | }, 2691 | { 2692 | "name": "symfony/finder", 2693 | "version": "v4.1.6", 2694 | "source": { 2695 | "type": "git", 2696 | "url": "https://github.com/symfony/finder.git", 2697 | "reference": "1f17195b44543017a9c9b2d437c670627e96ad06" 2698 | }, 2699 | "dist": { 2700 | "type": "zip", 2701 | "url": "https://api.github.com/repos/symfony/finder/zipball/1f17195b44543017a9c9b2d437c670627e96ad06", 2702 | "reference": "1f17195b44543017a9c9b2d437c670627e96ad06", 2703 | "shasum": "" 2704 | }, 2705 | "require": { 2706 | "php": "^7.1.3" 2707 | }, 2708 | "type": "library", 2709 | "extra": { 2710 | "branch-alias": { 2711 | "dev-master": "4.1-dev" 2712 | } 2713 | }, 2714 | "autoload": { 2715 | "psr-4": { 2716 | "Symfony\\Component\\Finder\\": "" 2717 | }, 2718 | "exclude-from-classmap": [ 2719 | "/Tests/" 2720 | ] 2721 | }, 2722 | "notification-url": "https://packagist.org/downloads/", 2723 | "license": [ 2724 | "MIT" 2725 | ], 2726 | "authors": [ 2727 | { 2728 | "name": "Fabien Potencier", 2729 | "email": "fabien@symfony.com" 2730 | }, 2731 | { 2732 | "name": "Symfony Community", 2733 | "homepage": "https://symfony.com/contributors" 2734 | } 2735 | ], 2736 | "description": "Symfony Finder Component", 2737 | "homepage": "https://symfony.com", 2738 | "time": "2018-10-03T08:47:56+00:00" 2739 | }, 2740 | { 2741 | "name": "symfony/http-foundation", 2742 | "version": "v4.1.6", 2743 | "source": { 2744 | "type": "git", 2745 | "url": "https://github.com/symfony/http-foundation.git", 2746 | "reference": "d528136617ff24f530e70df9605acc1b788b08d4" 2747 | }, 2748 | "dist": { 2749 | "type": "zip", 2750 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d528136617ff24f530e70df9605acc1b788b08d4", 2751 | "reference": "d528136617ff24f530e70df9605acc1b788b08d4", 2752 | "shasum": "" 2753 | }, 2754 | "require": { 2755 | "php": "^7.1.3", 2756 | "symfony/polyfill-mbstring": "~1.1" 2757 | }, 2758 | "require-dev": { 2759 | "predis/predis": "~1.0", 2760 | "symfony/expression-language": "~3.4|~4.0" 2761 | }, 2762 | "type": "library", 2763 | "extra": { 2764 | "branch-alias": { 2765 | "dev-master": "4.1-dev" 2766 | } 2767 | }, 2768 | "autoload": { 2769 | "psr-4": { 2770 | "Symfony\\Component\\HttpFoundation\\": "" 2771 | }, 2772 | "exclude-from-classmap": [ 2773 | "/Tests/" 2774 | ] 2775 | }, 2776 | "notification-url": "https://packagist.org/downloads/", 2777 | "license": [ 2778 | "MIT" 2779 | ], 2780 | "authors": [ 2781 | { 2782 | "name": "Fabien Potencier", 2783 | "email": "fabien@symfony.com" 2784 | }, 2785 | { 2786 | "name": "Symfony Community", 2787 | "homepage": "https://symfony.com/contributors" 2788 | } 2789 | ], 2790 | "description": "Symfony HttpFoundation Component", 2791 | "homepage": "https://symfony.com", 2792 | "time": "2018-10-03T08:48:45+00:00" 2793 | }, 2794 | { 2795 | "name": "symfony/http-kernel", 2796 | "version": "v4.1.6", 2797 | "source": { 2798 | "type": "git", 2799 | "url": "https://github.com/symfony/http-kernel.git", 2800 | "reference": "f5e7c15a5d010be0e16ce798594c5960451d4220" 2801 | }, 2802 | "dist": { 2803 | "type": "zip", 2804 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f5e7c15a5d010be0e16ce798594c5960451d4220", 2805 | "reference": "f5e7c15a5d010be0e16ce798594c5960451d4220", 2806 | "shasum": "" 2807 | }, 2808 | "require": { 2809 | "php": "^7.1.3", 2810 | "psr/log": "~1.0", 2811 | "symfony/debug": "~3.4|~4.0", 2812 | "symfony/event-dispatcher": "~4.1", 2813 | "symfony/http-foundation": "^4.1.1", 2814 | "symfony/polyfill-ctype": "~1.8" 2815 | }, 2816 | "conflict": { 2817 | "symfony/config": "<3.4", 2818 | "symfony/dependency-injection": "<4.1", 2819 | "symfony/var-dumper": "<4.1.1", 2820 | "twig/twig": "<1.34|<2.4,>=2" 2821 | }, 2822 | "provide": { 2823 | "psr/log-implementation": "1.0" 2824 | }, 2825 | "require-dev": { 2826 | "psr/cache": "~1.0", 2827 | "symfony/browser-kit": "~3.4|~4.0", 2828 | "symfony/config": "~3.4|~4.0", 2829 | "symfony/console": "~3.4|~4.0", 2830 | "symfony/css-selector": "~3.4|~4.0", 2831 | "symfony/dependency-injection": "^4.1", 2832 | "symfony/dom-crawler": "~3.4|~4.0", 2833 | "symfony/expression-language": "~3.4|~4.0", 2834 | "symfony/finder": "~3.4|~4.0", 2835 | "symfony/process": "~3.4|~4.0", 2836 | "symfony/routing": "~3.4|~4.0", 2837 | "symfony/stopwatch": "~3.4|~4.0", 2838 | "symfony/templating": "~3.4|~4.0", 2839 | "symfony/translation": "~3.4|~4.0", 2840 | "symfony/var-dumper": "^4.1.1" 2841 | }, 2842 | "suggest": { 2843 | "symfony/browser-kit": "", 2844 | "symfony/config": "", 2845 | "symfony/console": "", 2846 | "symfony/dependency-injection": "", 2847 | "symfony/var-dumper": "" 2848 | }, 2849 | "type": "library", 2850 | "extra": { 2851 | "branch-alias": { 2852 | "dev-master": "4.1-dev" 2853 | } 2854 | }, 2855 | "autoload": { 2856 | "psr-4": { 2857 | "Symfony\\Component\\HttpKernel\\": "" 2858 | }, 2859 | "exclude-from-classmap": [ 2860 | "/Tests/" 2861 | ] 2862 | }, 2863 | "notification-url": "https://packagist.org/downloads/", 2864 | "license": [ 2865 | "MIT" 2866 | ], 2867 | "authors": [ 2868 | { 2869 | "name": "Fabien Potencier", 2870 | "email": "fabien@symfony.com" 2871 | }, 2872 | { 2873 | "name": "Symfony Community", 2874 | "homepage": "https://symfony.com/contributors" 2875 | } 2876 | ], 2877 | "description": "Symfony HttpKernel Component", 2878 | "homepage": "https://symfony.com", 2879 | "time": "2018-10-03T12:53:38+00:00" 2880 | }, 2881 | { 2882 | "name": "symfony/polyfill-ctype", 2883 | "version": "v1.9.0", 2884 | "source": { 2885 | "type": "git", 2886 | "url": "https://github.com/symfony/polyfill-ctype.git", 2887 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" 2888 | }, 2889 | "dist": { 2890 | "type": "zip", 2891 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", 2892 | "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", 2893 | "shasum": "" 2894 | }, 2895 | "require": { 2896 | "php": ">=5.3.3" 2897 | }, 2898 | "suggest": { 2899 | "ext-ctype": "For best performance" 2900 | }, 2901 | "type": "library", 2902 | "extra": { 2903 | "branch-alias": { 2904 | "dev-master": "1.9-dev" 2905 | } 2906 | }, 2907 | "autoload": { 2908 | "psr-4": { 2909 | "Symfony\\Polyfill\\Ctype\\": "" 2910 | }, 2911 | "files": [ 2912 | "bootstrap.php" 2913 | ] 2914 | }, 2915 | "notification-url": "https://packagist.org/downloads/", 2916 | "license": [ 2917 | "MIT" 2918 | ], 2919 | "authors": [ 2920 | { 2921 | "name": "Symfony Community", 2922 | "homepage": "https://symfony.com/contributors" 2923 | }, 2924 | { 2925 | "name": "Gert de Pagter", 2926 | "email": "BackEndTea@gmail.com" 2927 | } 2928 | ], 2929 | "description": "Symfony polyfill for ctype functions", 2930 | "homepage": "https://symfony.com", 2931 | "keywords": [ 2932 | "compatibility", 2933 | "ctype", 2934 | "polyfill", 2935 | "portable" 2936 | ], 2937 | "time": "2018-08-06T14:22:27+00:00" 2938 | }, 2939 | { 2940 | "name": "symfony/polyfill-mbstring", 2941 | "version": "v1.9.0", 2942 | "source": { 2943 | "type": "git", 2944 | "url": "https://github.com/symfony/polyfill-mbstring.git", 2945 | "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8" 2946 | }, 2947 | "dist": { 2948 | "type": "zip", 2949 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8", 2950 | "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8", 2951 | "shasum": "" 2952 | }, 2953 | "require": { 2954 | "php": ">=5.3.3" 2955 | }, 2956 | "suggest": { 2957 | "ext-mbstring": "For best performance" 2958 | }, 2959 | "type": "library", 2960 | "extra": { 2961 | "branch-alias": { 2962 | "dev-master": "1.9-dev" 2963 | } 2964 | }, 2965 | "autoload": { 2966 | "psr-4": { 2967 | "Symfony\\Polyfill\\Mbstring\\": "" 2968 | }, 2969 | "files": [ 2970 | "bootstrap.php" 2971 | ] 2972 | }, 2973 | "notification-url": "https://packagist.org/downloads/", 2974 | "license": [ 2975 | "MIT" 2976 | ], 2977 | "authors": [ 2978 | { 2979 | "name": "Nicolas Grekas", 2980 | "email": "p@tchwork.com" 2981 | }, 2982 | { 2983 | "name": "Symfony Community", 2984 | "homepage": "https://symfony.com/contributors" 2985 | } 2986 | ], 2987 | "description": "Symfony polyfill for the Mbstring extension", 2988 | "homepage": "https://symfony.com", 2989 | "keywords": [ 2990 | "compatibility", 2991 | "mbstring", 2992 | "polyfill", 2993 | "portable", 2994 | "shim" 2995 | ], 2996 | "time": "2018-08-06T14:22:27+00:00" 2997 | }, 2998 | { 2999 | "name": "symfony/polyfill-php72", 3000 | "version": "v1.9.0", 3001 | "source": { 3002 | "type": "git", 3003 | "url": "https://github.com/symfony/polyfill-php72.git", 3004 | "reference": "95c50420b0baed23852452a7f0c7b527303ed5ae" 3005 | }, 3006 | "dist": { 3007 | "type": "zip", 3008 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/95c50420b0baed23852452a7f0c7b527303ed5ae", 3009 | "reference": "95c50420b0baed23852452a7f0c7b527303ed5ae", 3010 | "shasum": "" 3011 | }, 3012 | "require": { 3013 | "php": ">=5.3.3" 3014 | }, 3015 | "type": "library", 3016 | "extra": { 3017 | "branch-alias": { 3018 | "dev-master": "1.9-dev" 3019 | } 3020 | }, 3021 | "autoload": { 3022 | "psr-4": { 3023 | "Symfony\\Polyfill\\Php72\\": "" 3024 | }, 3025 | "files": [ 3026 | "bootstrap.php" 3027 | ] 3028 | }, 3029 | "notification-url": "https://packagist.org/downloads/", 3030 | "license": [ 3031 | "MIT" 3032 | ], 3033 | "authors": [ 3034 | { 3035 | "name": "Nicolas Grekas", 3036 | "email": "p@tchwork.com" 3037 | }, 3038 | { 3039 | "name": "Symfony Community", 3040 | "homepage": "https://symfony.com/contributors" 3041 | } 3042 | ], 3043 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", 3044 | "homepage": "https://symfony.com", 3045 | "keywords": [ 3046 | "compatibility", 3047 | "polyfill", 3048 | "portable", 3049 | "shim" 3050 | ], 3051 | "time": "2018-08-06T14:22:27+00:00" 3052 | }, 3053 | { 3054 | "name": "symfony/process", 3055 | "version": "v4.1.6", 3056 | "source": { 3057 | "type": "git", 3058 | "url": "https://github.com/symfony/process.git", 3059 | "reference": "ee33c0322a8fee0855afcc11fff81e6b1011b529" 3060 | }, 3061 | "dist": { 3062 | "type": "zip", 3063 | "url": "https://api.github.com/repos/symfony/process/zipball/ee33c0322a8fee0855afcc11fff81e6b1011b529", 3064 | "reference": "ee33c0322a8fee0855afcc11fff81e6b1011b529", 3065 | "shasum": "" 3066 | }, 3067 | "require": { 3068 | "php": "^7.1.3" 3069 | }, 3070 | "type": "library", 3071 | "extra": { 3072 | "branch-alias": { 3073 | "dev-master": "4.1-dev" 3074 | } 3075 | }, 3076 | "autoload": { 3077 | "psr-4": { 3078 | "Symfony\\Component\\Process\\": "" 3079 | }, 3080 | "exclude-from-classmap": [ 3081 | "/Tests/" 3082 | ] 3083 | }, 3084 | "notification-url": "https://packagist.org/downloads/", 3085 | "license": [ 3086 | "MIT" 3087 | ], 3088 | "authors": [ 3089 | { 3090 | "name": "Fabien Potencier", 3091 | "email": "fabien@symfony.com" 3092 | }, 3093 | { 3094 | "name": "Symfony Community", 3095 | "homepage": "https://symfony.com/contributors" 3096 | } 3097 | ], 3098 | "description": "Symfony Process Component", 3099 | "homepage": "https://symfony.com", 3100 | "time": "2018-10-02T12:40:59+00:00" 3101 | }, 3102 | { 3103 | "name": "symfony/routing", 3104 | "version": "v4.1.6", 3105 | "source": { 3106 | "type": "git", 3107 | "url": "https://github.com/symfony/routing.git", 3108 | "reference": "537803f0bdfede36b9acef052d2e4d447d9fa0e9" 3109 | }, 3110 | "dist": { 3111 | "type": "zip", 3112 | "url": "https://api.github.com/repos/symfony/routing/zipball/537803f0bdfede36b9acef052d2e4d447d9fa0e9", 3113 | "reference": "537803f0bdfede36b9acef052d2e4d447d9fa0e9", 3114 | "shasum": "" 3115 | }, 3116 | "require": { 3117 | "php": "^7.1.3" 3118 | }, 3119 | "conflict": { 3120 | "symfony/config": "<3.4", 3121 | "symfony/dependency-injection": "<3.4", 3122 | "symfony/yaml": "<3.4" 3123 | }, 3124 | "require-dev": { 3125 | "doctrine/annotations": "~1.0", 3126 | "psr/log": "~1.0", 3127 | "symfony/config": "~3.4|~4.0", 3128 | "symfony/dependency-injection": "~3.4|~4.0", 3129 | "symfony/expression-language": "~3.4|~4.0", 3130 | "symfony/http-foundation": "~3.4|~4.0", 3131 | "symfony/yaml": "~3.4|~4.0" 3132 | }, 3133 | "suggest": { 3134 | "doctrine/annotations": "For using the annotation loader", 3135 | "symfony/config": "For using the all-in-one router or any loader", 3136 | "symfony/dependency-injection": "For loading routes from a service", 3137 | "symfony/expression-language": "For using expression matching", 3138 | "symfony/http-foundation": "For using a Symfony Request object", 3139 | "symfony/yaml": "For using the YAML loader" 3140 | }, 3141 | "type": "library", 3142 | "extra": { 3143 | "branch-alias": { 3144 | "dev-master": "4.1-dev" 3145 | } 3146 | }, 3147 | "autoload": { 3148 | "psr-4": { 3149 | "Symfony\\Component\\Routing\\": "" 3150 | }, 3151 | "exclude-from-classmap": [ 3152 | "/Tests/" 3153 | ] 3154 | }, 3155 | "notification-url": "https://packagist.org/downloads/", 3156 | "license": [ 3157 | "MIT" 3158 | ], 3159 | "authors": [ 3160 | { 3161 | "name": "Fabien Potencier", 3162 | "email": "fabien@symfony.com" 3163 | }, 3164 | { 3165 | "name": "Symfony Community", 3166 | "homepage": "https://symfony.com/contributors" 3167 | } 3168 | ], 3169 | "description": "Symfony Routing Component", 3170 | "homepage": "https://symfony.com", 3171 | "keywords": [ 3172 | "router", 3173 | "routing", 3174 | "uri", 3175 | "url" 3176 | ], 3177 | "time": "2018-10-02T12:40:59+00:00" 3178 | }, 3179 | { 3180 | "name": "symfony/translation", 3181 | "version": "v4.1.6", 3182 | "source": { 3183 | "type": "git", 3184 | "url": "https://github.com/symfony/translation.git", 3185 | "reference": "9f0b61e339160a466ebcde167a6c5521c810e304" 3186 | }, 3187 | "dist": { 3188 | "type": "zip", 3189 | "url": "https://api.github.com/repos/symfony/translation/zipball/9f0b61e339160a466ebcde167a6c5521c810e304", 3190 | "reference": "9f0b61e339160a466ebcde167a6c5521c810e304", 3191 | "shasum": "" 3192 | }, 3193 | "require": { 3194 | "php": "^7.1.3", 3195 | "symfony/polyfill-mbstring": "~1.0" 3196 | }, 3197 | "conflict": { 3198 | "symfony/config": "<3.4", 3199 | "symfony/dependency-injection": "<3.4", 3200 | "symfony/yaml": "<3.4" 3201 | }, 3202 | "require-dev": { 3203 | "psr/log": "~1.0", 3204 | "symfony/config": "~3.4|~4.0", 3205 | "symfony/console": "~3.4|~4.0", 3206 | "symfony/dependency-injection": "~3.4|~4.0", 3207 | "symfony/finder": "~2.8|~3.0|~4.0", 3208 | "symfony/intl": "~3.4|~4.0", 3209 | "symfony/yaml": "~3.4|~4.0" 3210 | }, 3211 | "suggest": { 3212 | "psr/log-implementation": "To use logging capability in translator", 3213 | "symfony/config": "", 3214 | "symfony/yaml": "" 3215 | }, 3216 | "type": "library", 3217 | "extra": { 3218 | "branch-alias": { 3219 | "dev-master": "4.1-dev" 3220 | } 3221 | }, 3222 | "autoload": { 3223 | "psr-4": { 3224 | "Symfony\\Component\\Translation\\": "" 3225 | }, 3226 | "exclude-from-classmap": [ 3227 | "/Tests/" 3228 | ] 3229 | }, 3230 | "notification-url": "https://packagist.org/downloads/", 3231 | "license": [ 3232 | "MIT" 3233 | ], 3234 | "authors": [ 3235 | { 3236 | "name": "Fabien Potencier", 3237 | "email": "fabien@symfony.com" 3238 | }, 3239 | { 3240 | "name": "Symfony Community", 3241 | "homepage": "https://symfony.com/contributors" 3242 | } 3243 | ], 3244 | "description": "Symfony Translation Component", 3245 | "homepage": "https://symfony.com", 3246 | "time": "2018-10-02T16:36:10+00:00" 3247 | }, 3248 | { 3249 | "name": "symfony/var-dumper", 3250 | "version": "v4.1.6", 3251 | "source": { 3252 | "type": "git", 3253 | "url": "https://github.com/symfony/var-dumper.git", 3254 | "reference": "60319b45653580b0cdacca499344577d87732f16" 3255 | }, 3256 | "dist": { 3257 | "type": "zip", 3258 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/60319b45653580b0cdacca499344577d87732f16", 3259 | "reference": "60319b45653580b0cdacca499344577d87732f16", 3260 | "shasum": "" 3261 | }, 3262 | "require": { 3263 | "php": "^7.1.3", 3264 | "symfony/polyfill-mbstring": "~1.0", 3265 | "symfony/polyfill-php72": "~1.5" 3266 | }, 3267 | "conflict": { 3268 | "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", 3269 | "symfony/console": "<3.4" 3270 | }, 3271 | "require-dev": { 3272 | "ext-iconv": "*", 3273 | "symfony/process": "~3.4|~4.0", 3274 | "twig/twig": "~1.34|~2.4" 3275 | }, 3276 | "suggest": { 3277 | "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", 3278 | "ext-intl": "To show region name in time zone dump", 3279 | "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" 3280 | }, 3281 | "bin": [ 3282 | "Resources/bin/var-dump-server" 3283 | ], 3284 | "type": "library", 3285 | "extra": { 3286 | "branch-alias": { 3287 | "dev-master": "4.1-dev" 3288 | } 3289 | }, 3290 | "autoload": { 3291 | "files": [ 3292 | "Resources/functions/dump.php" 3293 | ], 3294 | "psr-4": { 3295 | "Symfony\\Component\\VarDumper\\": "" 3296 | }, 3297 | "exclude-from-classmap": [ 3298 | "/Tests/" 3299 | ] 3300 | }, 3301 | "notification-url": "https://packagist.org/downloads/", 3302 | "license": [ 3303 | "MIT" 3304 | ], 3305 | "authors": [ 3306 | { 3307 | "name": "Nicolas Grekas", 3308 | "email": "p@tchwork.com" 3309 | }, 3310 | { 3311 | "name": "Symfony Community", 3312 | "homepage": "https://symfony.com/contributors" 3313 | } 3314 | ], 3315 | "description": "Symfony mechanism for exploring and dumping PHP variables", 3316 | "homepage": "https://symfony.com", 3317 | "keywords": [ 3318 | "debug", 3319 | "dump" 3320 | ], 3321 | "time": "2018-10-02T16:36:10+00:00" 3322 | }, 3323 | { 3324 | "name": "theseer/tokenizer", 3325 | "version": "1.1.0", 3326 | "source": { 3327 | "type": "git", 3328 | "url": "https://github.com/theseer/tokenizer.git", 3329 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" 3330 | }, 3331 | "dist": { 3332 | "type": "zip", 3333 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", 3334 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", 3335 | "shasum": "" 3336 | }, 3337 | "require": { 3338 | "ext-dom": "*", 3339 | "ext-tokenizer": "*", 3340 | "ext-xmlwriter": "*", 3341 | "php": "^7.0" 3342 | }, 3343 | "type": "library", 3344 | "autoload": { 3345 | "classmap": [ 3346 | "src/" 3347 | ] 3348 | }, 3349 | "notification-url": "https://packagist.org/downloads/", 3350 | "license": [ 3351 | "BSD-3-Clause" 3352 | ], 3353 | "authors": [ 3354 | { 3355 | "name": "Arne Blankerts", 3356 | "email": "arne@blankerts.de", 3357 | "role": "Developer" 3358 | } 3359 | ], 3360 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 3361 | "time": "2017-04-07T12:08:54+00:00" 3362 | }, 3363 | { 3364 | "name": "tijsverkoyen/css-to-inline-styles", 3365 | "version": "2.2.1", 3366 | "source": { 3367 | "type": "git", 3368 | "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", 3369 | "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757" 3370 | }, 3371 | "dist": { 3372 | "type": "zip", 3373 | "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", 3374 | "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", 3375 | "shasum": "" 3376 | }, 3377 | "require": { 3378 | "php": "^5.5 || ^7.0", 3379 | "symfony/css-selector": "^2.7 || ^3.0 || ^4.0" 3380 | }, 3381 | "require-dev": { 3382 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 3383 | }, 3384 | "type": "library", 3385 | "extra": { 3386 | "branch-alias": { 3387 | "dev-master": "2.2.x-dev" 3388 | } 3389 | }, 3390 | "autoload": { 3391 | "psr-4": { 3392 | "TijsVerkoyen\\CssToInlineStyles\\": "src" 3393 | } 3394 | }, 3395 | "notification-url": "https://packagist.org/downloads/", 3396 | "license": [ 3397 | "BSD-3-Clause" 3398 | ], 3399 | "authors": [ 3400 | { 3401 | "name": "Tijs Verkoyen", 3402 | "email": "css_to_inline_styles@verkoyen.eu", 3403 | "role": "Developer" 3404 | } 3405 | ], 3406 | "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.", 3407 | "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", 3408 | "time": "2017-11-27T11:13:29+00:00" 3409 | }, 3410 | { 3411 | "name": "vlucas/phpdotenv", 3412 | "version": "v2.5.1", 3413 | "source": { 3414 | "type": "git", 3415 | "url": "https://github.com/vlucas/phpdotenv.git", 3416 | "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" 3417 | }, 3418 | "dist": { 3419 | "type": "zip", 3420 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", 3421 | "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", 3422 | "shasum": "" 3423 | }, 3424 | "require": { 3425 | "php": ">=5.3.9" 3426 | }, 3427 | "require-dev": { 3428 | "phpunit/phpunit": "^4.8.35 || ^5.0" 3429 | }, 3430 | "type": "library", 3431 | "extra": { 3432 | "branch-alias": { 3433 | "dev-master": "2.5-dev" 3434 | } 3435 | }, 3436 | "autoload": { 3437 | "psr-4": { 3438 | "Dotenv\\": "src/" 3439 | } 3440 | }, 3441 | "notification-url": "https://packagist.org/downloads/", 3442 | "license": [ 3443 | "BSD-3-Clause" 3444 | ], 3445 | "authors": [ 3446 | { 3447 | "name": "Vance Lucas", 3448 | "email": "vance@vancelucas.com", 3449 | "homepage": "http://www.vancelucas.com" 3450 | } 3451 | ], 3452 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", 3453 | "keywords": [ 3454 | "dotenv", 3455 | "env", 3456 | "environment" 3457 | ], 3458 | "time": "2018-07-29T20:33:41+00:00" 3459 | }, 3460 | { 3461 | "name": "webmozart/assert", 3462 | "version": "1.3.0", 3463 | "source": { 3464 | "type": "git", 3465 | "url": "https://github.com/webmozart/assert.git", 3466 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a" 3467 | }, 3468 | "dist": { 3469 | "type": "zip", 3470 | "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", 3471 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a", 3472 | "shasum": "" 3473 | }, 3474 | "require": { 3475 | "php": "^5.3.3 || ^7.0" 3476 | }, 3477 | "require-dev": { 3478 | "phpunit/phpunit": "^4.6", 3479 | "sebastian/version": "^1.0.1" 3480 | }, 3481 | "type": "library", 3482 | "extra": { 3483 | "branch-alias": { 3484 | "dev-master": "1.3-dev" 3485 | } 3486 | }, 3487 | "autoload": { 3488 | "psr-4": { 3489 | "Webmozart\\Assert\\": "src/" 3490 | } 3491 | }, 3492 | "notification-url": "https://packagist.org/downloads/", 3493 | "license": [ 3494 | "MIT" 3495 | ], 3496 | "authors": [ 3497 | { 3498 | "name": "Bernhard Schussek", 3499 | "email": "bschussek@gmail.com" 3500 | } 3501 | ], 3502 | "description": "Assertions to validate method input/output with nice error messages.", 3503 | "keywords": [ 3504 | "assert", 3505 | "check", 3506 | "validate" 3507 | ], 3508 | "time": "2018-01-29T19:49:41+00:00" 3509 | } 3510 | ], 3511 | "aliases": [], 3512 | "minimum-stability": "stable", 3513 | "stability-flags": [], 3514 | "prefer-stable": false, 3515 | "prefer-lowest": false, 3516 | "platform": [], 3517 | "platform-dev": [] 3518 | } 3519 | -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stephenlake/laravel-mailsceptor/427803da7bb6fcb7fac8904123f1f049c5a24cfb/docs/.nojekyll -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
6 | Intercept, reroute and store emails before they're submitted. 7 |
8 | 9 | # Getting Started 10 | 11 | **NOTE:** This package requires Laravel 5.7 or later. 12 | 13 | ## Install via Composer 14 | 15 | Install the package via composer. 16 | 17 | composer require stephenlake/laravel-mailsceptor 18 | 19 | ## Publish Configuration 20 | 21 | Publish the configuration file. 22 | 23 | php artisan vendor:publish --provider="Mailsceptor\MailsceptorServiceProvider" --tag="config" 24 | 25 | ## Setup your email driver 26 | 27 | This package does not interfere with mail driver configurations nor does it provide free credentials. You will need to setup your mail driver with its credentials in order to use the package successfully. 28 | 29 | # Usage 30 | 31 | Technically, usage is optional as there's no code required in order to start using Mailsceptor. As soon as the mail driver is fired for sending, Mailsceptor will intercept the request and process its tasks. 32 | 33 | Mailsceptor injects itself by listening for the `\Illuminate\Mail\Events\MessageSending::class` event at which point it processes a configuration defined hook named `beforeHook` and if that hook returns true it will then process all internal remaining hooks. 34 | 35 | 36 | ## Configuration 37 | 38 | ### Redirect 39 | 40 | The redirect configuration option allows your application to re-route an email from one address to another, this is particularly useful when testing outbound emails on your development environment and you need to use real-world email addresses. 41 | 42 | To enable the redirecting of emails, either: 43 | 44 | - Edit your .env to include the `MAILSCEPTOR_REDIRECT_DESTINATION` key with the value of an email address. 45 | 46 | or 47 | 48 | - Edit the `config/mailsceptor.php` config file and replace the `redirect` value with the email address. 49 | 50 | If you do not wish to use the redirection option, enter a value of `false`. 51 | 52 | ### Database Storage 53 | 54 | If you wish to store emails in the database, you'll need to publish the migration: 55 | 56 | php artisan vendor:publish --provider="Mailsceptor\MailsceptorServiceProvider" --tag="migrations" 57 | 58 | Then run 59 | 60 | php artisan migrate 61 | 62 | The `model` field in the configuration file allows you define your own email model, if doing so, your model should extend the provided one as it uses mutators for storing and retrieving the data. 63 | 64 | ### Before Hook 65 | 66 | The `beforeHook` field contains a value pointing to the `MailsceptotHook` class which you may extend, this class is called before any other hooks are fired and must return `true` if the rest of the hooks may continue, for example: 67 | 68 | ```php 69 | swiftMessage; 81 | 82 | $hooksMayContinue = false; 83 | 84 | if ($email->getSubject() == 'You are pretty.') { 85 | $hooksMayContinue = true; 86 | } 87 | 88 | // Allow the rest of the internal hooks to continue 89 | return $hooksMayContinue; 90 | } 91 | } 92 | ``` 93 | 94 | ### Proceed After Hooks 95 | 96 | The `proceedAfterHooks` field defines whether or not the normal emailing procedure should continue, as in, whether or not the original email should still be delivered to its original intended recipient after all internal hooks have taken place. Set to `true` to continue or `false` to prevent delivery. 97 | -------------------------------------------------------------------------------- /docs/assets/laravel-mailsceptor-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stephenlake/laravel-mailsceptor/427803da7bb6fcb7fac8904123f1f049c5a24cfb/docs/assets/laravel-mailsceptor-banner.png -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Laravel Mailsceptor 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | ./tests/Unit/ 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/Config/mailsceptor.php: -------------------------------------------------------------------------------- 1 | env('MAILSCEPTOR_REDIRECT_DESTINATION', false), 16 | 17 | /* 18 | |-------------------------------------------------------------------------- 19 | | Database Storage 20 | |-------------------------------------------------------------------------- 21 | | 22 | | If you would like to store all outgoing emails to database, you can use 23 | | the default provided model or your own which extends the default. 24 | | 25 | | Comment out the following line or set to false to disable. 26 | | 27 | */ 28 | 'model' => \Mailsceptor\Models\Email::class, 29 | 30 | /* 31 | |-------------------------------------------------------------------------- 32 | | Before Hooks 33 | |-------------------------------------------------------------------------- 34 | | 35 | | This class will be executed before any internal Mailsceptor hooks are 36 | | processed, by extending MailsceptorHook::class, you can define your own 37 | | hook to run before the internals. See the documentation for details. 38 | | 39 | */ 40 | 'beforeHook' => \Mailsceptor\MailsceptorHook::class, 41 | 42 | /* 43 | |-------------------------------------------------------------------------- 44 | | Proceed After Hooks 45 | |-------------------------------------------------------------------------- 46 | | 47 | | If set to true, the original message as it were unmodified will be submitted 48 | | to the original recipient after all hooks have been executed. 49 | | 50 | */ 51 | 'proceedAfterHooks' => env('MAILSCEPTOR_PROCEED_AFTER', true), 52 | 53 | ]; 54 | -------------------------------------------------------------------------------- /src/Mailsception.php: -------------------------------------------------------------------------------- 1 | message = $message; 26 | $this->config = config('mailsceptor'); 27 | } 28 | 29 | /** 30 | * Process hooks. 31 | * 32 | * @return void 33 | */ 34 | public function intercept() 35 | { 36 | $continue = true; 37 | 38 | if (isset($this->config['beforeHook']) && class_exists($this->config['beforeHook'])) { 39 | $continue = (new $this->config['beforeHook']())->hooked($this->message); 40 | } 41 | 42 | if ($continue) { 43 | $this->handleRedirectHook(); 44 | $this->handleDatabaseHook(); 45 | } 46 | 47 | return $this->config['proceedAfterHooks']; 48 | } 49 | 50 | /** 51 | * Handle database hook. 52 | * 53 | * @return void 54 | */ 55 | private function handleDatabaseHook() 56 | { 57 | if (($this->config['model'] ?? false)) { 58 | $model = new $this->config['model']() ?? \Mailsceptor\Models\Email::class; 59 | $model->create([ 60 | 'subject' => $this->message->getSubject(), 61 | 'body' => $this->message->getBody(), 62 | 'to' => $this->message->getTo() ? array_keys($this->message->getTo()) : [], 63 | 'cc' => $this->message->getCc() ? array_keys($this->message->getCc()) : [], 64 | 'bcc' => $this->message->getBcc() ? array_keys($this->message->getBcc()) : [], 65 | ]); 66 | } 67 | } 68 | 69 | /** 70 | * Handle redirect hook. 71 | * 72 | * @return void 73 | */ 74 | private function handleRedirectHook() 75 | { 76 | if (($redirectionTo = ($this->config['redirect'] ?? false))) { 77 | $intendedDestination = array_keys($this->message->getTo()); 78 | 79 | if (!count($intendedDestination)) { 80 | return; 81 | } 82 | 83 | $intendedDestination = $intendedDestination[0]; 84 | 85 | if ($intendedDestination != $redirectionTo) { 86 | Mail::send([], [], function ($m) use ($redirectionTo) { 87 | $m->getSwiftMessage() 88 | ->getHeaders() 89 | ->addTextHeader('x-mailscepted', 'true'); 90 | 91 | $m->to($redirectionTo) 92 | ->subject("[Mailsceptor] {$this->message->getSubject()}") 93 | ->setBody($this->message->getBody(), 'text/html'); 94 | }); 95 | } 96 | } 97 | } 98 | 99 | /** 100 | * Overload constructed configuration file. 101 | * 102 | * @return void 103 | */ 104 | public function setConfig(array $config) 105 | { 106 | $this->config = $config; 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/MailsceptorHook.php: -------------------------------------------------------------------------------- 1 | swiftMessage = $swiftMessage; 19 | 20 | return $this->process(); 21 | } 22 | 23 | /** 24 | * Process hook and return bool whether or not the internal 25 | * Mailsceptor hooks may continue. 26 | * 27 | * @return void 28 | */ 29 | public function process() 30 | { 31 | return true; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/MailsceptorServiceProvider.php: -------------------------------------------------------------------------------- 1 | publishes([ 18 | __DIR__.'/Config/mailsceptor.php' => config_path('mailsceptor.php'), 19 | ], 'config'); 20 | 21 | $this->publishes([ 22 | __DIR__.'/Migrations/migration.php' => database_path('migrations/2018_09_06_135819_create_emails_table.php'), 23 | ], 'migrations'); 24 | 25 | $this->registerListener(); 26 | } 27 | 28 | /** 29 | * Register outgoing email listener. 30 | * 31 | * @return void 32 | */ 33 | private function registerListener() 34 | { 35 | Event::listen(\Illuminate\Mail\Events\MessageSending::class, function ($event) { 36 | $intercepted = !is_null($event->message->getHeaders()->get('x-mailscepted')); 37 | 38 | if ($intercepted) { 39 | return true; 40 | } 41 | 42 | return (new Mailsception($event->message))->intercept(); 43 | }); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/Migrations/migration.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->string('subject'); 19 | $table->text('to')->nullable(); 20 | $table->text('cc')->nullable(); 21 | $table->text('bcc')->nullable(); 22 | $table->longText('body'); 23 | $table->timestamps(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::dropIfExists('emails'); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/Models/Email.php: -------------------------------------------------------------------------------- 1 | 'array', 29 | 'cc' => 'array', 30 | 'bcc' => 'array', 31 | ]; 32 | } 33 | -------------------------------------------------------------------------------- /tests/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stephenlake/laravel-mailsceptor/427803da7bb6fcb7fac8904123f1f049c5a24cfb/tests/.gitkeep -------------------------------------------------------------------------------- /tests/Hooks/MyCustomHook.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stephenlake/laravel-mailsceptor/427803da7bb6fcb7fac8904123f1f049c5a24cfb/tests/Hooks/MyCustomHook.php -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | app->setBasePath(__DIR__.'/../'); 18 | } 19 | 20 | protected function getPackageProviders($app) 21 | { 22 | return [ 23 | \Illuminate\Mail\MailServiceProvider::class, 24 | \Mailsceptor\MailsceptorServiceProvider::class, 25 | ]; 26 | } 27 | 28 | protected function getEnvironmentSetUp($app) 29 | { 30 | $app['config']->set('database.default', 'testbench'); 31 | $app['config']->set('database.connections.testbench', [ 32 | 'driver' => 'sqlite', 33 | 'database' => ':memory:', 34 | 'prefix' => '', 35 | ]); 36 | 37 | $app['config']->set('mail.driver', 'log'); 38 | 39 | $app['config']->set('mailsceptor.proceedAfterHooks', true); 40 | $app['config']->set('mailsceptor.model', \Mailsceptor\Models\Email::class); 41 | $app['config']->set('mailsceptor.beforeHook', \Mailsceptor\MailsceptorHook::class); 42 | $app['config']->set('mailsceptor.redirect', 'stephen@closurecode.com'); 43 | 44 | Schema::dropIfExists('emails'); 45 | Schema::create('emails', function ($table) { 46 | $table->increments('id'); 47 | $table->string('subject')->nullable(); 48 | $table->string('body')->nullable(); 49 | $table->string('to')->nullable(); 50 | $table->string('cc')->nullable(); 51 | $table->string('bcc')->nullable(); 52 | $table->timestamps(); 53 | }); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /tests/Unit/MailsceptorTest.php: -------------------------------------------------------------------------------- 1 | assertTrue($emailsCount === 0); 16 | 17 | $emailBody = 'Hi Bob!'; 18 | $emailTo = 'bob@example.org'; 19 | $emailSubject = 'What a crazy cool email!'; 20 | 21 | Mail::raw($emailBody, function ($message) use ($emailTo, $emailSubject) { 22 | $message->to($emailTo)->subject($emailSubject); 23 | }); 24 | 25 | $emails = Email::get(); 26 | 27 | $this->assertTrue($emails->count() > 0); 28 | 29 | $redirectedEmail = Email::first(); 30 | 31 | $this->assertTrue($redirectedEmail->subject == $emailSubject); 32 | $this->assertTrue($redirectedEmail->body == $emailBody); 33 | $this->assertTrue($redirectedEmail->to[0] == $emailTo); 34 | } 35 | } 36 | --------------------------------------------------------------------------------