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