├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ └── config.yml └── workflows │ ├── php-cs-fixer.yml │ ├── update-changelog.yml │ └── run-tests.yml ├── src ├── Exceptions │ └── InvalidConfiguration.php ├── Sources │ ├── UtmSource.php │ └── RequestHeader.php ├── Helpers │ └── Url.php ├── Source.php ├── CaptureReferer.php ├── RefererServiceProvider.php └── Referer.php ├── .editorconfig ├── config └── referer.php ├── LICENSE.md ├── .php-cs-fixer.dist.php ├── composer.json ├── CHANGELOG.md └── README.md /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: spatie 2 | custom: https://spatie.be/open-source/support-us 3 | -------------------------------------------------------------------------------- /src/Exceptions/InvalidConfiguration.php: -------------------------------------------------------------------------------- 1 | get('utm_source') ?? ''; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Helpers/Url.php: -------------------------------------------------------------------------------- 1 | 'referer', 9 | 10 | /* 11 | * The sources used to determine the referer. 12 | */ 13 | 'sources' => [ 14 | Spatie\Referer\Sources\UtmSource::class, 15 | Spatie\Referer\Sources\RequestHeader::class, 16 | ], 17 | ]; 18 | -------------------------------------------------------------------------------- /src/Source.php: -------------------------------------------------------------------------------- 1 | referer = $referer; 15 | } 16 | 17 | public function handle($request, Closure $next) 18 | { 19 | $this->referer->putFromRequest($request); 20 | 21 | return $next($request); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /.github/workflows/php-cs-fixer.yml: -------------------------------------------------------------------------------- 1 | name: Check & fix styling 2 | 3 | on: [ push ] 4 | 5 | jobs: 6 | php-cs-fixer: 7 | runs-on: ubuntu-latest 8 | 9 | steps: 10 | - name: Checkout code 11 | uses: actions/checkout@v2 12 | with: 13 | ref: ${{ github.head_ref }} 14 | 15 | - name: Run PHP CS Fixer 16 | uses: docker://oskarstark/php-cs-fixer-ga 17 | with: 18 | args: --config=.php-cs-fixer.dist.php --allow-risky=yes 19 | 20 | - name: Commit changes 21 | uses: stefanzweifel/git-auto-commit-action@v4 22 | with: 23 | commit_message: Fix styling 24 | -------------------------------------------------------------------------------- /src/Sources/RequestHeader.php: -------------------------------------------------------------------------------- 1 | header('referer', ''); 14 | 15 | if (empty($referer)) { 16 | return ''; 17 | } 18 | 19 | $refererHost = Url::host($referer); 20 | 21 | if (empty($refererHost)) { 22 | return ''; 23 | } 24 | 25 | if ($refererHost === $request->getHost()) { 26 | return ''; 27 | } 28 | 29 | return $refererHost; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /.github/workflows/update-changelog.yml: -------------------------------------------------------------------------------- 1 | name: "Update Changelog" 2 | 3 | on: 4 | release: 5 | types: [released] 6 | 7 | jobs: 8 | update: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - name: Checkout code 13 | uses: actions/checkout@v2 14 | with: 15 | ref: main 16 | 17 | - name: Update Changelog 18 | uses: stefanzweifel/changelog-updater-action@v1 19 | with: 20 | latest-version: ${{ github.event.release.name }} 21 | release-notes: ${{ github.event.release.body }} 22 | 23 | - name: Commit updated CHANGELOG 24 | uses: stefanzweifel/git-auto-commit-action@v4 25 | with: 26 | branch: main 27 | commit_message: Update CHANGELOG 28 | file_pattern: CHANGELOG.md 29 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Spatie bvba 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 13 | all 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 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/RefererServiceProvider.php: -------------------------------------------------------------------------------- 1 | publishes([ 15 | __DIR__.'/../config/referer.php' => config_path('referer.php'), 16 | ], 'config'); 17 | } 18 | 19 | /** 20 | * Register the application services. 21 | */ 22 | public function register() 23 | { 24 | $this->mergeConfigFrom(__DIR__.'/../config/referer.php', 'referer'); 25 | 26 | $this->app->when(Referer::class) 27 | ->needs('$sessionKey') 28 | ->give(function () { 29 | return $this->app['config']->get('referer.session_key'); 30 | }); 31 | 32 | $this->app->when(Referer::class) 33 | ->needs('$sources') 34 | ->give(function () { 35 | return $this->app['config']->get('referer.sources', []); 36 | }); 37 | 38 | $this->app->singleton(Referer::class); 39 | $this->app->alias(Referer::class, 'referer'); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /.php-cs-fixer.dist.php: -------------------------------------------------------------------------------- 1 | notPath('bootstrap/*') 5 | ->notPath('storage/*') 6 | ->notPath('resources/view/mail/*') 7 | ->in([ 8 | __DIR__ . '/src', 9 | __DIR__ . '/tests', 10 | ]) 11 | ->name('*.php') 12 | ->notName('*.blade.php') 13 | ->ignoreDotFiles(true) 14 | ->ignoreVCS(true); 15 | 16 | return (new PhpCsFixer\Config) 17 | ->setRules([ 18 | '@PSR2' => true, 19 | 'array_syntax' => ['syntax' => 'short'], 20 | 'ordered_imports' => ['sort_algorithm' => 'alpha'], 21 | 'no_unused_imports' => true, 22 | 'not_operator_with_successor_space' => true, 23 | 'trailing_comma_in_multiline' => true, 24 | 'phpdoc_scalar' => true, 25 | 'unary_operator_spaces' => true, 26 | 'binary_operator_spaces' => true, 27 | 'blank_line_before_statement' => [ 28 | 'statements' => ['break', 'continue', 'declare', 'return', 'throw', 'try'], 29 | ], 30 | 'phpdoc_single_line_var_spacing' => true, 31 | 'phpdoc_var_without_name' => true, 32 | 'method_argument_space' => [ 33 | 'on_multiline' => 'ensure_fully_multiline', 34 | 'keep_multiple_spaces_after_comma' => true, 35 | ] 36 | ]) 37 | ->setFinder($finder); 38 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spatie/laravel-referer", 3 | "description": "Keep a visitor's original referer in session", 4 | "keywords": [ 5 | "spatie", 6 | "laravel-referer" 7 | ], 8 | "homepage": "https://github.com/spatie/laravel-referer", 9 | "license": "MIT", 10 | "authors": [ 11 | { 12 | "name": "Sebastian De Deyne", 13 | "email": "sebastian@spatie.be", 14 | "homepage": "https://spatie.be", 15 | "role": "Developer" 16 | } 17 | ], 18 | "require": { 19 | "php": "^7.4|^8.0", 20 | "illuminate/contracts": "^8.73|^9.0|^10.0|^11.0|^12.0", 21 | "illuminate/http": "^8.73|^9.0|^10.0|^11.0|^12.0", 22 | "illuminate/support": "^8.73|^9.0|^10.0|^11.0|^12.0" 23 | }, 24 | "require-dev": { 25 | "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0|^10.0", 26 | "phpunit/phpunit": "^9.5|^10.5|^11.5.3" 27 | }, 28 | "autoload": { 29 | "psr-4": { 30 | "Spatie\\Referer\\": "src" 31 | } 32 | }, 33 | "autoload-dev": { 34 | "psr-4": { 35 | "Spatie\\Referer\\Test\\": "tests" 36 | } 37 | }, 38 | "scripts": { 39 | "test": "vendor/bin/phpunit" 40 | }, 41 | "config": { 42 | "sort-packages": true 43 | }, 44 | "extra": { 45 | "laravel": { 46 | "providers": [ 47 | "Spatie\\Referer\\RefererServiceProvider" 48 | ] 49 | } 50 | }, 51 | "minimum-stability": "dev", 52 | "prefer-stable": true 53 | } 54 | -------------------------------------------------------------------------------- /src/Referer.php: -------------------------------------------------------------------------------- 1 | sessionKey = $sessionKey; 27 | $this->sources = $sources; 28 | $this->session = $session; 29 | } 30 | 31 | public function get(): string 32 | { 33 | return $this->session->get($this->sessionKey, ''); 34 | } 35 | 36 | public function forget() 37 | { 38 | $this->session->forget($this->sessionKey); 39 | } 40 | 41 | public function put(string $referer) 42 | { 43 | return $this->session->put($this->sessionKey, $referer); 44 | } 45 | 46 | public function putFromRequest(Request $request) 47 | { 48 | $referer = $this->determineFromRequest($request); 49 | 50 | if (! empty($referer)) { 51 | $this->put($referer); 52 | } 53 | } 54 | 55 | protected function determineFromRequest(Request $request): string 56 | { 57 | foreach ($this->sources as $source) { 58 | if ($referer = (new $source)->getReferer($request)) { 59 | return $referer; 60 | } 61 | } 62 | 63 | return ''; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /.github/workflows/run-tests.yml: -------------------------------------------------------------------------------- 1 | name: run-tests 2 | 3 | on: 4 | - push 5 | - pull_request 6 | 7 | jobs: 8 | test: 9 | runs-on: ${{ matrix.os }} 10 | 11 | strategy: 12 | fail-fast: true 13 | matrix: 14 | os: [ubuntu-latest] 15 | php: [8.2, 8.1, 8.0, 7.4] 16 | laravel: ['8.*', '9.*', '10.*', '11.*', '12.*'] 17 | dependency-version: [prefer-lowest, prefer-stable] 18 | include: 19 | - laravel: 10.* 20 | testbench: ^8.0 21 | - laravel: 9.* 22 | testbench: ^7.0 23 | - laravel: 8.* 24 | testbench: ^6.23 25 | - laravel: 11.* 26 | testbench: ^9.0 27 | - laravel: 12.* 28 | testbench: ^10.0 29 | exclude: 30 | - laravel: 10.* 31 | php: 8.0 32 | - laravel: 10.* 33 | php: 7.4 34 | - laravel: 9.* 35 | php: 7.4 36 | - laravel: 11.* 37 | php: 8.1 38 | - laravel: 11.* 39 | php: 8.0 40 | - laravel: 11.* 41 | php: 7.4 42 | - laravel: 12.* 43 | php: 8.1 44 | - laravel: 12.* 45 | php: 8.0 46 | - laravel: 12.* 47 | php: 7.4 48 | 49 | name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.dependency-version }} - ${{ matrix.os }} 50 | 51 | steps: 52 | - name: Checkout code 53 | uses: actions/checkout@v1 54 | 55 | - name: Cache dependencies 56 | uses: actions/cache@v1 57 | with: 58 | path: ~/.composer/cache/files 59 | key: dependencies-laravel-${{ matrix.laravel }}-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }} 60 | 61 | - name: Setup PHP 62 | uses: shivammathur/setup-php@v2 63 | with: 64 | php-version: ${{ matrix.php }} 65 | extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, imagick 66 | coverage: none 67 | 68 | - name: Install dependencies 69 | run: | 70 | composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" --no-interaction --no-update 71 | composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction --no-suggest 72 | 73 | - name: Execute tests 74 | run: vendor/bin/phpunit 75 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to `laravel-referer` will be documented in this file 4 | 5 | ## 1.9.1 - 2025-02-20 6 | 7 | ### What's Changed 8 | 9 | * Laravel 12.x Compatibility by @laravel-shift in https://github.com/spatie/laravel-referer/pull/52 10 | 11 | **Full Changelog**: https://github.com/spatie/laravel-referer/compare/1.9.0...1.9.1 12 | 13 | ## 1.9.0 - 2024-04-08 14 | 15 | ### What's Changed 16 | 17 | * Laravel 11.x Compatibility by @laravel-shift in https://github.com/spatie/laravel-referer/pull/48 18 | 19 | **Full Changelog**: https://github.com/spatie/laravel-referer/compare/1.8.1...1.9.0 20 | 21 | ## 1.8.1 - 2023-01-24 22 | 23 | ### What's Changed 24 | 25 | - Add PHP 8.2 Support by @patinthehat in https://github.com/spatie/laravel-referer/pull/46 26 | - Laravel 10.x Compatibility by @laravel-shift in https://github.com/spatie/laravel-referer/pull/47 27 | 28 | **Full Changelog**: https://github.com/spatie/laravel-referer/compare/1.8.0...1.8.1 29 | 30 | ## 1.8.0 - 2022-01-13 31 | 32 | ## What's Changed 33 | 34 | - Fix use statement in the code example for "Forgetting or manually setting the referer" documentation section by @vurpa in https://github.com/spatie/laravel-referer/pull/41 35 | - Add PHP 8.1 Support by @patinthehat in https://github.com/spatie/laravel-referer/pull/42 36 | - Add Laravel 9 support 37 | 38 | ## New Contributors 39 | 40 | - @vurpa made their first contribution in https://github.com/spatie/laravel-referer/pull/41 41 | - @patinthehat made their first contribution in https://github.com/spatie/laravel-referer/pull/42 42 | 43 | **Full Changelog**: https://github.com/spatie/laravel-referer/compare/1.7.3...1.8.0 44 | 45 | ## 1.7.3 - 2021-05-07 46 | 47 | - fix laravel-referer 1.7.2 on Laravel 7.30.4 (#39) 48 | 49 | ## 1.7.2 - 2021-04-06 50 | 51 | - prep for Octane (#37) 52 | 53 | ## 1.7.1 - 2021-01-15 54 | 55 | - add support for PHP 8 56 | 57 | ## 1.7.0 - 2020-09-08 58 | 59 | - add support for Laravel 8 60 | 61 | ## 1.6.1 - 2020-07-14 62 | 63 | - fixes bug with null values for session key arg in Referer class constructor (#30) 64 | 65 | ## 1.6.0 - 2020-03-03 66 | 67 | - add support for Laravel 7 68 | 69 | ## 1.5.0 - 2019-09-04 70 | 71 | - add support for Laravel 6 72 | 73 | ## 1.4.0 - 2019-02-27 74 | 75 | - drop support for PHP 7.1 and below 76 | - drop support for Laravel 5.8 and below 77 | 78 | ## 1.3.4 - 2019-02-27 79 | 80 | - add support for Laravel 5.8 81 | 82 | ## 1.3.3 - 2018-08-29 83 | 84 | - add support for Laravel 5.7 85 | 86 | ## 1.3.2 - 2018-05-14 87 | 88 | - Ensure `UtmSource` always returns a referer string 89 | 90 | ## 1.3.1 - 2018-02-08 91 | 92 | - Make compatible with Laravel 5.6 93 | - Make compatible with phpunit 7 94 | 95 | ## 1.3.0 - 2017-08-31 96 | 97 | - Make compatible with Laravel 5.5 98 | 99 | ## 1.2.1 - 2017-02-12 100 | 101 | - Fixed: publishing of config file 102 | 103 | ## 1.2.0 - 2017-02-08 104 | 105 | - **Breaking**: Sources are now configured via `Source` implementations 106 | - **Breaking**: The configuration key `referer.key` has been renamed to `referer.session_key` 107 | 108 | ## 1.1.1 - 2017-02-07 109 | 110 | - Fixed: Fixed a regression that was introduced in 1.1.0 111 | 112 | ## 1.1.0 - 2017-02-07 113 | 114 | - Added: You can now configure which sources you want to use to capture a referer (currently `utm_source` and `referer_header`) 115 | 116 | ## 1.0.0 - 2017-01-06 117 | 118 | - Initial release 119 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Remember a visitor's original referer 2 | 3 | [![Latest Version on Packagist](https://img.shields.io/packagist/v/spatie/laravel-referer.svg?style=flat-square)](https://packagist.org/packages/spatie/laravel-referer) 4 | [![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md) 5 | [![run-tests](https://github.com/spatie/laravel-referer/actions/workflows/run-tests.yml/badge.svg)](https://github.com/spatie/laravel-referer/actions/workflows/run-tests.yml) 6 | [![Total Downloads](https://img.shields.io/packagist/dt/spatie/laravel-referer.svg?style=flat-square)](https://packagist.org/packages/spatie/laravel-referer) 7 | 8 | Remember a visitor's original referer in session. The referer is (highest priority first): 9 | 10 | - The `utm_source` query parameter 11 | - The domain from the request's `Referer` header if there's an external host in the URL 12 | - Empty 13 | 14 | ## Support us 15 | 16 | [](https://spatie.be/github-ad-click/laravel-referer) 17 | 18 | We invest a lot of resources into creating [best in class open source packages](https://spatie.be/open-source). You can support us by [buying one of our paid products](https://spatie.be/open-source/support-us). 19 | 20 | We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on [our contact page](https://spatie.be/about-us). We publish all received postcards on [our virtual postcard wall](https://spatie.be/open-source/postcards). 21 | 22 | ## Installation 23 | 24 | You can install the package via composer: 25 | 26 | ``` bash 27 | composer require spatie/laravel-referer 28 | ``` 29 | 30 | The package will automatically register itself in Laravel 5.5. In Laravel 5.4. you'll manually need to register the `Spatie\Referer\RefererServiceProvider` service provider in `config/app.php`. 31 | 32 | You can publish the config file with: 33 | 34 | ``` 35 | php artisan vendor:publish --provider="Spatie\Referer\RefererServiceProvider" 36 | ``` 37 | 38 | Publishing the config file is necessary if you want to change the key in which the referer is stored in the session or 39 | if you want to disable a referer source. 40 | 41 | ```php 42 | return [ 43 | 44 | /* 45 | * The key that will be used to remember the referer in the session. 46 | */ 47 | 'session_key' => 'referer', 48 | 49 | /* 50 | * The sources used to determine the referer. 51 | */ 52 | 'sources' => [ 53 | Spatie\Referer\Sources\UtmSource::class, 54 | Spatie\Referer\Sources\RequestHeader::class, 55 | ], 56 | ]; 57 | ``` 58 | 59 | ## Usage 60 | 61 | To capture the referer, all you need to do is add the `Spatie\Referer\CaptureReferer` middleware to your middleware stack. In most configuration's, you'll only want to capture the referer in "web" requests, so it makes sense to register it in the `web` stack. Make sure it comes **after** Laravel's `StartSession` middleware! 62 | 63 | ```php 64 | // app/Http/Kernel.php 65 | 66 | protected $middlewareGroups = [ 67 | 'web' => [ 68 | // ... 69 | \Illuminate\Session\Middleware\StartSession::class, 70 | // ... 71 | \Spatie\Referer\CaptureReferer::class, 72 | // ... 73 | ], 74 | // ... 75 | ]; 76 | ``` 77 | 78 | The easiest way to retrieve the referer is by just resolving it out of the container: 79 | 80 | ```php 81 | use Spatie\Referer\Referer; 82 | 83 | $referer = app(Referer::class)->get(); // 'google.com' 84 | ``` 85 | 86 | Or you could opt to use Laravel's automatic facades: 87 | 88 | ```php 89 | use Facades\Spatie\Referer\Referer; 90 | 91 | $referer = Referer::get(); // 'google.com' 92 | ``` 93 | 94 | The captured referer is (from high to low priority): 95 | 96 | - The `utm_source` query parameter, or: 97 | - The domain from the request's `Referer` header if there's an external host in the URL, or: 98 | - Empty 99 | 100 | An empty referer will never overwrite an exisiting referer. So if a visitor comes from google.com and visits a few pages on your site, those pages won't affect the referer since local hosts are ignored. 101 | 102 | ### Forgetting or manually setting the referer 103 | 104 | The `Referer` class provides dedicated methods to forget, or manually set the referer. 105 | 106 | ```php 107 | use Facades\Spatie\Referer\Referer; 108 | 109 | Referer::put('google.com'); 110 | Referer::get(); // 'google.com' 111 | Referer::forget(); 112 | Referer::get(); // '' 113 | ``` 114 | 115 | ### Changing the way the referer is determined 116 | 117 | The referer is determined by doing checks on various sources, which are defined in the configuration. 118 | 119 | ```php 120 | return [ 121 | // ... 122 | 'sources' => [ 123 | Spatie\Referer\Sources\UtmSource::class, 124 | Spatie\Referer\Sources\RequestHeader::class, 125 | ], 126 | ]; 127 | ``` 128 | 129 | A source implements the `Source` interface, and requires one method, `getReferer`. If a source is able to determine a referer, other sources will be ignored. In other words, the `sources` array is ordered by priority. 130 | 131 | In the next example, we'll add a source that can use a `?ref` query parameter to determine the referer. Additionally, we'll ignore `?utm_source` parameters. 132 | 133 | First, create the source implementations: 134 | 135 | ```php 136 | namespace App\Referer; 137 | 138 | use Illuminate\Http\Request; 139 | use Spatie\Referer\Source; 140 | 141 | class RefParameter implements Source 142 | { 143 | public function getReferer(Request $request): string 144 | { 145 | return $request->get('ref', ''); 146 | } 147 | } 148 | ``` 149 | 150 | Then register your source in the `sources` array. We'll also disable the `utm_source` while we're at it. 151 | 152 | ```php 153 | return [ 154 | // ... 155 | 'sources' => [ 156 | App\Referer\RefParameter::class, 157 | Spatie\Referer\Sources\RequestHeader::class, 158 | ], 159 | ]; 160 | ``` 161 | 162 | That's it! Source implementations can be this simple, or more advanced if necessary. 163 | 164 | ## Changelog 165 | 166 | Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently. 167 | 168 | ## Testing 169 | 170 | ``` bash 171 | composer test 172 | ``` 173 | 174 | ## Contributing 175 | 176 | Please see [CONTRIBUTING](https://github.com/spatie/.github/blob/main/CONTRIBUTING.md) for details. 177 | 178 | ## Security 179 | 180 | If you've found a bug regarding security please mail [security@spatie.be](mailto:security@spatie.be) instead of using the issue tracker. 181 | 182 | ## Credits 183 | 184 | - [Sebastian De Deyne](https://github.com/sebastiandedeyne) 185 | - [All Contributors](../../contributors) 186 | 187 | ## License 188 | 189 | The MIT License (MIT). Please see [License File](LICENSE.md) for more information. 190 | --------------------------------------------------------------------------------