├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .php-cs-fixer.php ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── Resources ├── demo.gif └── logo.png ├── VERSIONING.md ├── composer.json ├── composer.lock ├── phpunit.xml.dist ├── src └── NotifierPlugin.php └── tests └── NotifierPluginTest.php /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | schedule: 8 | - cron: '0 0 * * MON' 9 | 10 | jobs: 11 | check-cs: 12 | name: Check Coding Standards 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout 16 | uses: actions/checkout@v2 17 | 18 | - name: PHP-CS-Fixer 19 | uses: docker://oskarstark/php-cs-fixer-ga 20 | with: 21 | args: --config=.php-cs-fixer.php --diff --dry-run 22 | 23 | ci: 24 | name: Test PHP ${{ matrix.php-version }} ${{ matrix.name }} 25 | runs-on: ubuntu-latest 26 | strategy: 27 | fail-fast: false 28 | matrix: 29 | php-version: ['7.4', '8.0', '8.1', '8.2'] 30 | minimum-stability: [''] 31 | composer-flags: [''] 32 | name: [''] 33 | include: 34 | - php-version: 7.4 35 | composer-flags: '--prefer-lowest' 36 | name: '(prefer lowest dependencies)' 37 | - php-version: 8.2 38 | minimum-stability: 'dev' 39 | name: '(minimum dev stability)' 40 | steps: 41 | - name: Checkout 42 | uses: actions/checkout@v2 43 | 44 | - name: Setup PHP, with composer and extensions 45 | uses: shivammathur/setup-php@v2 46 | with: 47 | php-version: ${{ matrix.php-version }} 48 | extensions: mbstring, xml 49 | ini-values: phar.readonly="Off" 50 | 51 | - name: Get composer cache directory 52 | id: composer-cache 53 | run: echo "::set-output name=dir::$(composer config cache-files-dir)" 54 | 55 | - name: Cache composer dependencies 56 | uses: actions/cache@v2 57 | with: 58 | path: ${{ steps.composer-cache.outputs.dir }} 59 | key: ${{ runner.os }}-composer-${{ github.sha }} 60 | restore-keys: ${{ runner.os }}-composer- 61 | 62 | - name: Allow dev dependencies 63 | run: if [ "${{ matrix.minimum-stability }}" = "dev" ]; then perl -pi -e 's/^}$/,"minimum-stability":"dev"}/' composer.json; fi; 64 | 65 | - name: Install Composer dependencies 66 | run: composer update --prefer-dist --no-interaction ${{ matrix.composer-flags }} 67 | 68 | - name: Run Tests 69 | run: php vendor/bin/simple-phpunit 70 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /vendor 3 | 4 | # Composer 5 | composer.phar 6 | 7 | # PHP-cs-fixer 8 | .php-cs-fixer.cache 9 | 10 | # PHPUnit 11 | .phpunit.result.cache 12 | -------------------------------------------------------------------------------- /.php-cs-fixer.php: -------------------------------------------------------------------------------- 1 | 7 | 8 | For the full copyright and license information, please view the LICENSE 9 | file that was distributed with this source code. 10 | EOF; 11 | 12 | $finder = PhpCsFixer\Finder::create() 13 | ->in([__DIR__]) 14 | ; 15 | 16 | $config = new PhpCsFixer\Config(); 17 | $config 18 | ->setRiskyAllowed(true) 19 | ->setRules([ 20 | '@Symfony' => true, 21 | 'array_syntax' => ['syntax' => 'short'], // Replace array() by [] 22 | 'blank_line_after_opening_tag' => true, // Force new line after ['spacing' => 'one'], // Force space around concatenation operator 24 | 'header_comment' => ['header' => $header], // Add the provided header comment ($header) 25 | 'heredoc_to_nowdoc' => false, // Do not convert heredoc to nowdoc 26 | 'no_superfluous_phpdoc_tags' => false, // Ensure complete PHPDoc annotations for all params 27 | 'phpdoc_order' => true, // Order "use" statements alphabetically 28 | 'simplified_null_return' => false, // Keep return null; 29 | 'single_line_throw' => false, // Allow throwing exceptions in more than one row 30 | 'strict_comparison' => true, // Strict comparison 31 | 'strict_param' => true, // Functions should use $strict param 32 | ]) 33 | ->setUsingCache(true) 34 | ->setFinder($finder) 35 | ; 36 | 37 | return $config; 38 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changes between versions 2 | 3 | ## 1.1.0 (2023-01-07) 4 | 5 | * Added support for Composer v2 APIs 6 | * Dropped support for PHP < 7.4 7 | * Added unit tests and setup CI 8 | * Modernize code base 9 | * Update code style to recent standards 10 | 11 | ## 1.0.3 (2015-06-11) 12 | 13 | * Fixed the Composer version required 14 | 15 | ## 1.0.2 (2015-04-26) 16 | 17 | * Fixed the use of a deprecated Composer class 18 | 19 | ## 1.0.1 (2015-04-15) 20 | 21 | * Fixed notification messages 22 | * Fixed listener priorities 23 | 24 | ## 1.0 (2015-04-14) 25 | 26 | * Initial release 27 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | First of all, **thank you** for contributing, **you are awesome**! 4 | 5 | Everybody should be able to help. Here's how you can do it: 6 | 7 | 1. [Fork it](https://github.com/pyrech/composer-notifier/fork_select) 8 | 2. improve it 9 | 3. submit a [pull request](https://help.github.com/articles/creating-a-pull-request) 10 | 11 | Here's some tips to make you the best contributor ever: 12 | 13 | * [Rules](#rules) 14 | * [Green tests](#green-tests) 15 | * [Standard code](#standard-code) 16 | * [Keeping your fork up-to-date](#keeping-your-fork-up-to-date) 17 | 18 | ## Rules 19 | 20 | Here are a few rules to follow in order to ease code reviews, and discussions 21 | before maintainers accept and merge your work. 22 | 23 | * You MUST follow the [PSR-1](http://www.php-fig.org/psr/1/) and 24 | [PSR-2](http://www.php-fig.org/psr/2/) (see [Rules](#rules)). 25 | * You MUST run the test suite (see [Green tests](#green-tests)). 26 | * You MUST write (or update) unit tests. 27 | * You SHOULD write documentation. 28 | 29 | Please, write [commit messages that make 30 | sense](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html), 31 | and [rebase your branch](http://git-scm.com/book/en/Git-Branching-Rebasing) 32 | before submitting your Pull Request (see also how to [keep your 33 | fork up-to-date](#keeping-your-fork-up-to-date)). 34 | 35 | One may ask you to [squash your 36 | commits](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html) 37 | too. This is used to "clean" your Pull Request before merging it (we don't want 38 | commits such as `fix tests`, `fix 2`, `fix 3`, etc.). 39 | 40 | Also, while creating your Pull Request on GitHub, you MUST write a description 41 | which gives the context and/or explains why you are creating it. 42 | 43 | Your work will then be reviewed as soon as possible (suggestions about some 44 | changes, improvements or alternatives may be given). 45 | 46 | ## Green tests 47 | 48 | Run the tests using the following script: 49 | 50 | ```shell 51 | vendor/bin/simple-phpunit 52 | ``` 53 | or the alias: 54 | ```shell 55 | composer test 56 | ``` 57 | 58 | ## Standard code 59 | 60 | Use [PHP CS fixer](https://cs.symfony.com/) to make your code compliant with 61 | composer-notifier's coding standards: 62 | 63 | ```shell 64 | vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php --diff 65 | ``` 66 | or the alias: 67 | ```shell 68 | composer fix-cs 69 | ``` 70 | 71 | ## Keeping your fork up-to-date 72 | 73 | To keep your fork up-to-date, you should track the upstream (original) one 74 | using the following command: 75 | 76 | 77 | ```shell 78 | git remote add upstream https://github.com/pyrech/composer-notifier.git 79 | ``` 80 | 81 | Then get the upstream changes: 82 | 83 | ```shell 84 | git checkout main 85 | git pull --rebase origin main 86 | git pull --rebase upstream main 87 | git checkout 88 | git rebase main 89 | ``` 90 | 91 | Finally, publish your changes: 92 | 93 | ```shell 94 | git push -f origin 95 | ``` 96 | 97 | Your pull request will be automatically updated. 98 | 99 | Thank you! 100 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 Loïck Piera 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # composer-notifier 2 | 3 | [![Latest Stable Version](https://poser.pugx.org/pyrech/composer-notifier/v/stable)](https://packagist.org/packages/pyrech/composer-notifier) [![Total Downloads](https://poser.pugx.org/pyrech/composer-notifier/downloads)](https://packagist.org/packages/pyrech/composer-notifier) [![Latest Unstable Version](https://poser.pugx.org/pyrech/composer-notifier/v/unstable)](https://packagist.org/packages/pyrech/composer-notifier) 4 | 5 | composer-notifier is a plugin for Composer. It displays desktop notification when 6 | Composer finishes install/update commands. 7 | 8 | ![Demo](Resources/demo.gif) 9 | 10 | ## Installation 11 | 12 | You can install it either locally: 13 | 14 | ```shell 15 | composer require "pyrech/composer-notifier" 16 | ``` 17 | 18 | or globally: 19 | 20 | ```shell 21 | composer global require "pyrech/composer-notifier" 22 | ``` 23 | 24 | ## Usage 25 | 26 | That's it! Composer will enable automatically the plugin as soon it's 27 | installed. Just run your Composer commands as usual :) 28 | 29 | If you no longer want to display notifications, you can either: 30 | - run your Composer command with the option `--no-plugins` 31 | - uninstall the package 32 | 33 | ## Further documentation 34 | 35 | You can see the current and past versions using one of the following: 36 | 37 | * the `git tag` command 38 | * the [releases page on Github](https://github.com/pyrech/composer-notifier/releases) 39 | * the file listing the [changes between versions](CHANGELOG.md) 40 | 41 | And finally some meta documentation: 42 | 43 | * [versioning and branching models](VERSIONING.md) 44 | * [contribution instructions](CONTRIBUTING.md) 45 | 46 | ## Credits 47 | 48 | * [Loïck Piera](https://github.com/pyrech) 49 | * [All contributors](https://github.com/pyrech/composer-notifier/graphs/contributors) 50 | 51 | ## License 52 | 53 | composer-notifier is licensed under the MIT License - see the [LICENSE](LICENSE) 54 | file for details. 55 | -------------------------------------------------------------------------------- /Resources/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrech/composer-notifier/e3ba7edeff354f0e68a4604306882bd01f6fb594/Resources/demo.gif -------------------------------------------------------------------------------- /Resources/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyrech/composer-notifier/e3ba7edeff354f0e68a4604306882bd01f6fb594/Resources/logo.png -------------------------------------------------------------------------------- /VERSIONING.md: -------------------------------------------------------------------------------- 1 | # Versioning and branching models 2 | 3 | This file explains the versioning and branching models of this project. 4 | 5 | ## Versioning 6 | 7 | The versioning is inspired by [Semantic Versioning](http://semver.org/): 8 | 9 | > Given a version number MAJOR.MINOR.PATCH, increment the: 10 | > 11 | > 1. MAJOR version when you make incompatible API changes 12 | > 2. MINOR version when you add functionality in a backwards-compatible manner 13 | > 3. PATCH version when you make backwards-compatible bug fixes 14 | 15 | ## Branching Model 16 | 17 | The branching is inspired by [@jbenet](https://github.com/jbenet) 18 | [simple git branching model](https://gist.github.com/jbenet/ee6c9ac48068889b0912): 19 | 20 | > 1. `main` must always be deployable. 21 | > 2. **all changes** are made through feature branches (pull-request + merge) 22 | > 3. rebase to avoid/resolve conflicts; merge in to `main` 23 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pyrech/composer-notifier", 3 | "description": "Display desktop notifications when composer finishes to install / update", 4 | "keywords": ["composer", "plugin", "notification"], 5 | "license": "MIT", 6 | "type": "composer-plugin", 7 | "authors": [ 8 | { 9 | "name": "Loïck Piera", 10 | "email": "pyrech@gmail.com" 11 | } 12 | ], 13 | "require": { 14 | "php": ">=7.4", 15 | "composer-plugin-api": "^1.0 || ^2.0", 16 | "jolicode/jolinotif": "~2.0" 17 | }, 18 | "require-dev": { 19 | "composer/composer": "^2.0", 20 | "friendsofphp/php-cs-fixer": "^3.0", 21 | "symfony/phpunit-bridge": "^6.2" 22 | }, 23 | "autoload": { 24 | "psr-4": { 25 | "Pyrech\\ComposerNotifier\\": "src/" 26 | } 27 | }, 28 | "autoload-dev": { 29 | "psr-4": { 30 | "Pyrech\\ComposerNotifier\\tests\\": "tests/" 31 | } 32 | }, 33 | "config": { 34 | "sort-packages": true, 35 | "allow-plugins": { 36 | "pyrech/composer-notifier": true 37 | } 38 | }, 39 | "extra": { 40 | "class": "Pyrech\\ComposerNotifier\\NotifierPlugin" 41 | }, 42 | "scripts": { 43 | "cs": "vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php --diff --dry-run --verbose", 44 | "fix-cs": "vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php --diff --verbose", 45 | "test": "vendor/bin/simple-phpunit" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /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": "d6fad925516bfdcafb05984bf19fbc06", 8 | "packages": [ 9 | { 10 | "name": "jolicode/jolinotif", 11 | "version": "v2.5.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/jolicode/JoliNotif.git", 15 | "reference": "a10a7cb3bf6dbf8833d1d1f1f0554506cb1d9eaa" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/jolicode/JoliNotif/zipball/a10a7cb3bf6dbf8833d1d1f1f0554506cb1d9eaa", 20 | "reference": "a10a7cb3bf6dbf8833d1d1f1f0554506cb1d9eaa", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=8.0", 25 | "symfony/process": "^5.4 || ^6.0" 26 | }, 27 | "require-dev": { 28 | "friendsofphp/php-cs-fixer": "^3.13", 29 | "symfony/finder": "^5.4 || ^6.0", 30 | "symfony/phpunit-bridge": "^5.4 || ^6.0" 31 | }, 32 | "bin": [ 33 | "jolinotif" 34 | ], 35 | "type": "library", 36 | "autoload": { 37 | "psr-4": { 38 | "Joli\\JoliNotif\\": "src/" 39 | } 40 | }, 41 | "notification-url": "https://packagist.org/downloads/", 42 | "license": [ 43 | "MIT" 44 | ], 45 | "authors": [ 46 | { 47 | "name": "Loïck Piera", 48 | "email": "pyrech@gmail.com" 49 | } 50 | ], 51 | "description": "Send desktop notifications on Windows, Linux, MacOS.", 52 | "keywords": [ 53 | "MAC", 54 | "growl", 55 | "linux", 56 | "notification", 57 | "windows" 58 | ], 59 | "support": { 60 | "issues": "https://github.com/jolicode/JoliNotif/issues", 61 | "source": "https://github.com/jolicode/JoliNotif/tree/v2.5.0" 62 | }, 63 | "funding": [ 64 | { 65 | "url": "https://tidelift.com/funding/github/packagist/jolicode/jolinotif", 66 | "type": "tidelift" 67 | } 68 | ], 69 | "time": "2022-12-24T13:38:12+00:00" 70 | }, 71 | { 72 | "name": "symfony/process", 73 | "version": "v6.2.0", 74 | "source": { 75 | "type": "git", 76 | "url": "https://github.com/symfony/process.git", 77 | "reference": "ba6e55359f8f755fe996c58a81e00eaa67a35877" 78 | }, 79 | "dist": { 80 | "type": "zip", 81 | "url": "https://api.github.com/repos/symfony/process/zipball/ba6e55359f8f755fe996c58a81e00eaa67a35877", 82 | "reference": "ba6e55359f8f755fe996c58a81e00eaa67a35877", 83 | "shasum": "" 84 | }, 85 | "require": { 86 | "php": ">=8.1" 87 | }, 88 | "type": "library", 89 | "autoload": { 90 | "psr-4": { 91 | "Symfony\\Component\\Process\\": "" 92 | }, 93 | "exclude-from-classmap": [ 94 | "/Tests/" 95 | ] 96 | }, 97 | "notification-url": "https://packagist.org/downloads/", 98 | "license": [ 99 | "MIT" 100 | ], 101 | "authors": [ 102 | { 103 | "name": "Fabien Potencier", 104 | "email": "fabien@symfony.com" 105 | }, 106 | { 107 | "name": "Symfony Community", 108 | "homepage": "https://symfony.com/contributors" 109 | } 110 | ], 111 | "description": "Executes commands in sub-processes", 112 | "homepage": "https://symfony.com", 113 | "support": { 114 | "source": "https://github.com/symfony/process/tree/v6.2.0" 115 | }, 116 | "funding": [ 117 | { 118 | "url": "https://symfony.com/sponsor", 119 | "type": "custom" 120 | }, 121 | { 122 | "url": "https://github.com/fabpot", 123 | "type": "github" 124 | }, 125 | { 126 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 127 | "type": "tidelift" 128 | } 129 | ], 130 | "time": "2022-11-02T09:08:04+00:00" 131 | } 132 | ], 133 | "packages-dev": [ 134 | { 135 | "name": "composer/ca-bundle", 136 | "version": "1.3.4", 137 | "source": { 138 | "type": "git", 139 | "url": "https://github.com/composer/ca-bundle.git", 140 | "reference": "69098eca243998b53eed7a48d82dedd28b447cd5" 141 | }, 142 | "dist": { 143 | "type": "zip", 144 | "url": "https://api.github.com/repos/composer/ca-bundle/zipball/69098eca243998b53eed7a48d82dedd28b447cd5", 145 | "reference": "69098eca243998b53eed7a48d82dedd28b447cd5", 146 | "shasum": "" 147 | }, 148 | "require": { 149 | "ext-openssl": "*", 150 | "ext-pcre": "*", 151 | "php": "^5.3.2 || ^7.0 || ^8.0" 152 | }, 153 | "require-dev": { 154 | "phpstan/phpstan": "^0.12.55", 155 | "psr/log": "^1.0", 156 | "symfony/phpunit-bridge": "^4.2 || ^5", 157 | "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" 158 | }, 159 | "type": "library", 160 | "extra": { 161 | "branch-alias": { 162 | "dev-main": "1.x-dev" 163 | } 164 | }, 165 | "autoload": { 166 | "psr-4": { 167 | "Composer\\CaBundle\\": "src" 168 | } 169 | }, 170 | "notification-url": "https://packagist.org/downloads/", 171 | "license": [ 172 | "MIT" 173 | ], 174 | "authors": [ 175 | { 176 | "name": "Jordi Boggiano", 177 | "email": "j.boggiano@seld.be", 178 | "homepage": "http://seld.be" 179 | } 180 | ], 181 | "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", 182 | "keywords": [ 183 | "cabundle", 184 | "cacert", 185 | "certificate", 186 | "ssl", 187 | "tls" 188 | ], 189 | "support": { 190 | "irc": "irc://irc.freenode.org/composer", 191 | "issues": "https://github.com/composer/ca-bundle/issues", 192 | "source": "https://github.com/composer/ca-bundle/tree/1.3.4" 193 | }, 194 | "funding": [ 195 | { 196 | "url": "https://packagist.com", 197 | "type": "custom" 198 | }, 199 | { 200 | "url": "https://github.com/composer", 201 | "type": "github" 202 | }, 203 | { 204 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 205 | "type": "tidelift" 206 | } 207 | ], 208 | "time": "2022-10-12T12:08:29+00:00" 209 | }, 210 | { 211 | "name": "composer/class-map-generator", 212 | "version": "1.0.0", 213 | "source": { 214 | "type": "git", 215 | "url": "https://github.com/composer/class-map-generator.git", 216 | "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513" 217 | }, 218 | "dist": { 219 | "type": "zip", 220 | "url": "https://api.github.com/repos/composer/class-map-generator/zipball/1e1cb2b791facb2dfe32932a7718cf2571187513", 221 | "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513", 222 | "shasum": "" 223 | }, 224 | "require": { 225 | "composer/pcre": "^2 || ^3", 226 | "php": "^7.2 || ^8.0", 227 | "symfony/finder": "^4.4 || ^5.3 || ^6" 228 | }, 229 | "require-dev": { 230 | "phpstan/phpstan": "^1.6", 231 | "phpstan/phpstan-deprecation-rules": "^1", 232 | "phpstan/phpstan-phpunit": "^1", 233 | "phpstan/phpstan-strict-rules": "^1.1", 234 | "symfony/filesystem": "^5.4 || ^6", 235 | "symfony/phpunit-bridge": "^5" 236 | }, 237 | "type": "library", 238 | "extra": { 239 | "branch-alias": { 240 | "dev-main": "1.x-dev" 241 | } 242 | }, 243 | "autoload": { 244 | "psr-4": { 245 | "Composer\\ClassMapGenerator\\": "src" 246 | } 247 | }, 248 | "notification-url": "https://packagist.org/downloads/", 249 | "license": [ 250 | "MIT" 251 | ], 252 | "authors": [ 253 | { 254 | "name": "Jordi Boggiano", 255 | "email": "j.boggiano@seld.be", 256 | "homepage": "https://seld.be" 257 | } 258 | ], 259 | "description": "Utilities to scan PHP code and generate class maps.", 260 | "keywords": [ 261 | "classmap" 262 | ], 263 | "support": { 264 | "issues": "https://github.com/composer/class-map-generator/issues", 265 | "source": "https://github.com/composer/class-map-generator/tree/1.0.0" 266 | }, 267 | "funding": [ 268 | { 269 | "url": "https://packagist.com", 270 | "type": "custom" 271 | }, 272 | { 273 | "url": "https://github.com/composer", 274 | "type": "github" 275 | }, 276 | { 277 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 278 | "type": "tidelift" 279 | } 280 | ], 281 | "time": "2022-06-19T11:31:27+00:00" 282 | }, 283 | { 284 | "name": "composer/composer", 285 | "version": "2.5.1", 286 | "source": { 287 | "type": "git", 288 | "url": "https://github.com/composer/composer.git", 289 | "reference": "923278ad13e1621946eb76ab2882655d2cc396a4" 290 | }, 291 | "dist": { 292 | "type": "zip", 293 | "url": "https://api.github.com/repos/composer/composer/zipball/923278ad13e1621946eb76ab2882655d2cc396a4", 294 | "reference": "923278ad13e1621946eb76ab2882655d2cc396a4", 295 | "shasum": "" 296 | }, 297 | "require": { 298 | "composer/ca-bundle": "^1.0", 299 | "composer/class-map-generator": "^1.0", 300 | "composer/metadata-minifier": "^1.0", 301 | "composer/pcre": "^2.1 || ^3.1", 302 | "composer/semver": "^3.0", 303 | "composer/spdx-licenses": "^1.5.7", 304 | "composer/xdebug-handler": "^2.0.2 || ^3.0.3", 305 | "justinrainbow/json-schema": "^5.2.11", 306 | "php": "^7.2.5 || ^8.0", 307 | "psr/log": "^1.0 || ^2.0 || ^3.0", 308 | "react/promise": "^2.8", 309 | "seld/jsonlint": "^1.4", 310 | "seld/phar-utils": "^1.2", 311 | "seld/signal-handler": "^2.0", 312 | "symfony/console": "^5.4.11 || ^6.0.11", 313 | "symfony/filesystem": "^5.4 || ^6.0", 314 | "symfony/finder": "^5.4 || ^6.0", 315 | "symfony/polyfill-php73": "^1.24", 316 | "symfony/polyfill-php80": "^1.24", 317 | "symfony/polyfill-php81": "^1.24", 318 | "symfony/process": "^5.4 || ^6.0" 319 | }, 320 | "require-dev": { 321 | "phpstan/phpstan": "^1.9.3", 322 | "phpstan/phpstan-deprecation-rules": "^1", 323 | "phpstan/phpstan-phpunit": "^1.0", 324 | "phpstan/phpstan-strict-rules": "^1", 325 | "phpstan/phpstan-symfony": "^1.2.10", 326 | "symfony/phpunit-bridge": "^6.0" 327 | }, 328 | "suggest": { 329 | "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", 330 | "ext-zip": "Enabling the zip extension allows you to unzip archives", 331 | "ext-zlib": "Allow gzip compression of HTTP requests" 332 | }, 333 | "bin": [ 334 | "bin/composer" 335 | ], 336 | "type": "library", 337 | "extra": { 338 | "branch-alias": { 339 | "dev-main": "2.5-dev" 340 | }, 341 | "phpstan": { 342 | "includes": [ 343 | "phpstan/rules.neon" 344 | ] 345 | } 346 | }, 347 | "autoload": { 348 | "psr-4": { 349 | "Composer\\": "src/Composer" 350 | } 351 | }, 352 | "notification-url": "https://packagist.org/downloads/", 353 | "license": [ 354 | "MIT" 355 | ], 356 | "authors": [ 357 | { 358 | "name": "Nils Adermann", 359 | "email": "naderman@naderman.de", 360 | "homepage": "https://www.naderman.de" 361 | }, 362 | { 363 | "name": "Jordi Boggiano", 364 | "email": "j.boggiano@seld.be", 365 | "homepage": "https://seld.be" 366 | } 367 | ], 368 | "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", 369 | "homepage": "https://getcomposer.org/", 370 | "keywords": [ 371 | "autoload", 372 | "dependency", 373 | "package" 374 | ], 375 | "support": { 376 | "irc": "ircs://irc.libera.chat:6697/composer", 377 | "issues": "https://github.com/composer/composer/issues", 378 | "source": "https://github.com/composer/composer/tree/2.5.1" 379 | }, 380 | "funding": [ 381 | { 382 | "url": "https://packagist.com", 383 | "type": "custom" 384 | }, 385 | { 386 | "url": "https://github.com/composer", 387 | "type": "github" 388 | }, 389 | { 390 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 391 | "type": "tidelift" 392 | } 393 | ], 394 | "time": "2022-12-22T14:33:54+00:00" 395 | }, 396 | { 397 | "name": "composer/metadata-minifier", 398 | "version": "1.0.0", 399 | "source": { 400 | "type": "git", 401 | "url": "https://github.com/composer/metadata-minifier.git", 402 | "reference": "c549d23829536f0d0e984aaabbf02af91f443207" 403 | }, 404 | "dist": { 405 | "type": "zip", 406 | "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207", 407 | "reference": "c549d23829536f0d0e984aaabbf02af91f443207", 408 | "shasum": "" 409 | }, 410 | "require": { 411 | "php": "^5.3.2 || ^7.0 || ^8.0" 412 | }, 413 | "require-dev": { 414 | "composer/composer": "^2", 415 | "phpstan/phpstan": "^0.12.55", 416 | "symfony/phpunit-bridge": "^4.2 || ^5" 417 | }, 418 | "type": "library", 419 | "extra": { 420 | "branch-alias": { 421 | "dev-main": "1.x-dev" 422 | } 423 | }, 424 | "autoload": { 425 | "psr-4": { 426 | "Composer\\MetadataMinifier\\": "src" 427 | } 428 | }, 429 | "notification-url": "https://packagist.org/downloads/", 430 | "license": [ 431 | "MIT" 432 | ], 433 | "authors": [ 434 | { 435 | "name": "Jordi Boggiano", 436 | "email": "j.boggiano@seld.be", 437 | "homepage": "http://seld.be" 438 | } 439 | ], 440 | "description": "Small utility library that handles metadata minification and expansion.", 441 | "keywords": [ 442 | "composer", 443 | "compression" 444 | ], 445 | "support": { 446 | "issues": "https://github.com/composer/metadata-minifier/issues", 447 | "source": "https://github.com/composer/metadata-minifier/tree/1.0.0" 448 | }, 449 | "funding": [ 450 | { 451 | "url": "https://packagist.com", 452 | "type": "custom" 453 | }, 454 | { 455 | "url": "https://github.com/composer", 456 | "type": "github" 457 | }, 458 | { 459 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 460 | "type": "tidelift" 461 | } 462 | ], 463 | "time": "2021-04-07T13:37:33+00:00" 464 | }, 465 | { 466 | "name": "composer/pcre", 467 | "version": "3.1.0", 468 | "source": { 469 | "type": "git", 470 | "url": "https://github.com/composer/pcre.git", 471 | "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" 472 | }, 473 | "dist": { 474 | "type": "zip", 475 | "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", 476 | "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", 477 | "shasum": "" 478 | }, 479 | "require": { 480 | "php": "^7.4 || ^8.0" 481 | }, 482 | "require-dev": { 483 | "phpstan/phpstan": "^1.3", 484 | "phpstan/phpstan-strict-rules": "^1.1", 485 | "symfony/phpunit-bridge": "^5" 486 | }, 487 | "type": "library", 488 | "extra": { 489 | "branch-alias": { 490 | "dev-main": "3.x-dev" 491 | } 492 | }, 493 | "autoload": { 494 | "psr-4": { 495 | "Composer\\Pcre\\": "src" 496 | } 497 | }, 498 | "notification-url": "https://packagist.org/downloads/", 499 | "license": [ 500 | "MIT" 501 | ], 502 | "authors": [ 503 | { 504 | "name": "Jordi Boggiano", 505 | "email": "j.boggiano@seld.be", 506 | "homepage": "http://seld.be" 507 | } 508 | ], 509 | "description": "PCRE wrapping library that offers type-safe preg_* replacements.", 510 | "keywords": [ 511 | "PCRE", 512 | "preg", 513 | "regex", 514 | "regular expression" 515 | ], 516 | "support": { 517 | "issues": "https://github.com/composer/pcre/issues", 518 | "source": "https://github.com/composer/pcre/tree/3.1.0" 519 | }, 520 | "funding": [ 521 | { 522 | "url": "https://packagist.com", 523 | "type": "custom" 524 | }, 525 | { 526 | "url": "https://github.com/composer", 527 | "type": "github" 528 | }, 529 | { 530 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 531 | "type": "tidelift" 532 | } 533 | ], 534 | "time": "2022-11-17T09:50:14+00:00" 535 | }, 536 | { 537 | "name": "composer/semver", 538 | "version": "3.3.2", 539 | "source": { 540 | "type": "git", 541 | "url": "https://github.com/composer/semver.git", 542 | "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" 543 | }, 544 | "dist": { 545 | "type": "zip", 546 | "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", 547 | "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", 548 | "shasum": "" 549 | }, 550 | "require": { 551 | "php": "^5.3.2 || ^7.0 || ^8.0" 552 | }, 553 | "require-dev": { 554 | "phpstan/phpstan": "^1.4", 555 | "symfony/phpunit-bridge": "^4.2 || ^5" 556 | }, 557 | "type": "library", 558 | "extra": { 559 | "branch-alias": { 560 | "dev-main": "3.x-dev" 561 | } 562 | }, 563 | "autoload": { 564 | "psr-4": { 565 | "Composer\\Semver\\": "src" 566 | } 567 | }, 568 | "notification-url": "https://packagist.org/downloads/", 569 | "license": [ 570 | "MIT" 571 | ], 572 | "authors": [ 573 | { 574 | "name": "Nils Adermann", 575 | "email": "naderman@naderman.de", 576 | "homepage": "http://www.naderman.de" 577 | }, 578 | { 579 | "name": "Jordi Boggiano", 580 | "email": "j.boggiano@seld.be", 581 | "homepage": "http://seld.be" 582 | }, 583 | { 584 | "name": "Rob Bast", 585 | "email": "rob.bast@gmail.com", 586 | "homepage": "http://robbast.nl" 587 | } 588 | ], 589 | "description": "Semver library that offers utilities, version constraint parsing and validation.", 590 | "keywords": [ 591 | "semantic", 592 | "semver", 593 | "validation", 594 | "versioning" 595 | ], 596 | "support": { 597 | "irc": "irc://irc.freenode.org/composer", 598 | "issues": "https://github.com/composer/semver/issues", 599 | "source": "https://github.com/composer/semver/tree/3.3.2" 600 | }, 601 | "funding": [ 602 | { 603 | "url": "https://packagist.com", 604 | "type": "custom" 605 | }, 606 | { 607 | "url": "https://github.com/composer", 608 | "type": "github" 609 | }, 610 | { 611 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 612 | "type": "tidelift" 613 | } 614 | ], 615 | "time": "2022-04-01T19:23:25+00:00" 616 | }, 617 | { 618 | "name": "composer/spdx-licenses", 619 | "version": "1.5.7", 620 | "source": { 621 | "type": "git", 622 | "url": "https://github.com/composer/spdx-licenses.git", 623 | "reference": "c848241796da2abf65837d51dce1fae55a960149" 624 | }, 625 | "dist": { 626 | "type": "zip", 627 | "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/c848241796da2abf65837d51dce1fae55a960149", 628 | "reference": "c848241796da2abf65837d51dce1fae55a960149", 629 | "shasum": "" 630 | }, 631 | "require": { 632 | "php": "^5.3.2 || ^7.0 || ^8.0" 633 | }, 634 | "require-dev": { 635 | "phpstan/phpstan": "^0.12.55", 636 | "symfony/phpunit-bridge": "^4.2 || ^5" 637 | }, 638 | "type": "library", 639 | "extra": { 640 | "branch-alias": { 641 | "dev-main": "1.x-dev" 642 | } 643 | }, 644 | "autoload": { 645 | "psr-4": { 646 | "Composer\\Spdx\\": "src" 647 | } 648 | }, 649 | "notification-url": "https://packagist.org/downloads/", 650 | "license": [ 651 | "MIT" 652 | ], 653 | "authors": [ 654 | { 655 | "name": "Nils Adermann", 656 | "email": "naderman@naderman.de", 657 | "homepage": "http://www.naderman.de" 658 | }, 659 | { 660 | "name": "Jordi Boggiano", 661 | "email": "j.boggiano@seld.be", 662 | "homepage": "http://seld.be" 663 | }, 664 | { 665 | "name": "Rob Bast", 666 | "email": "rob.bast@gmail.com", 667 | "homepage": "http://robbast.nl" 668 | } 669 | ], 670 | "description": "SPDX licenses list and validation library.", 671 | "keywords": [ 672 | "license", 673 | "spdx", 674 | "validator" 675 | ], 676 | "support": { 677 | "irc": "irc://irc.freenode.org/composer", 678 | "issues": "https://github.com/composer/spdx-licenses/issues", 679 | "source": "https://github.com/composer/spdx-licenses/tree/1.5.7" 680 | }, 681 | "funding": [ 682 | { 683 | "url": "https://packagist.com", 684 | "type": "custom" 685 | }, 686 | { 687 | "url": "https://github.com/composer", 688 | "type": "github" 689 | }, 690 | { 691 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 692 | "type": "tidelift" 693 | } 694 | ], 695 | "time": "2022-05-23T07:37:50+00:00" 696 | }, 697 | { 698 | "name": "composer/xdebug-handler", 699 | "version": "3.0.3", 700 | "source": { 701 | "type": "git", 702 | "url": "https://github.com/composer/xdebug-handler.git", 703 | "reference": "ced299686f41dce890debac69273b47ffe98a40c" 704 | }, 705 | "dist": { 706 | "type": "zip", 707 | "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", 708 | "reference": "ced299686f41dce890debac69273b47ffe98a40c", 709 | "shasum": "" 710 | }, 711 | "require": { 712 | "composer/pcre": "^1 || ^2 || ^3", 713 | "php": "^7.2.5 || ^8.0", 714 | "psr/log": "^1 || ^2 || ^3" 715 | }, 716 | "require-dev": { 717 | "phpstan/phpstan": "^1.0", 718 | "phpstan/phpstan-strict-rules": "^1.1", 719 | "symfony/phpunit-bridge": "^6.0" 720 | }, 721 | "type": "library", 722 | "autoload": { 723 | "psr-4": { 724 | "Composer\\XdebugHandler\\": "src" 725 | } 726 | }, 727 | "notification-url": "https://packagist.org/downloads/", 728 | "license": [ 729 | "MIT" 730 | ], 731 | "authors": [ 732 | { 733 | "name": "John Stevenson", 734 | "email": "john-stevenson@blueyonder.co.uk" 735 | } 736 | ], 737 | "description": "Restarts a process without Xdebug.", 738 | "keywords": [ 739 | "Xdebug", 740 | "performance" 741 | ], 742 | "support": { 743 | "irc": "irc://irc.freenode.org/composer", 744 | "issues": "https://github.com/composer/xdebug-handler/issues", 745 | "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" 746 | }, 747 | "funding": [ 748 | { 749 | "url": "https://packagist.com", 750 | "type": "custom" 751 | }, 752 | { 753 | "url": "https://github.com/composer", 754 | "type": "github" 755 | }, 756 | { 757 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 758 | "type": "tidelift" 759 | } 760 | ], 761 | "time": "2022-02-25T21:32:43+00:00" 762 | }, 763 | { 764 | "name": "doctrine/annotations", 765 | "version": "1.14.2", 766 | "source": { 767 | "type": "git", 768 | "url": "https://github.com/doctrine/annotations.git", 769 | "reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b" 770 | }, 771 | "dist": { 772 | "type": "zip", 773 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/ad785217c1e9555a7d6c6c8c9f406395a5e2882b", 774 | "reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b", 775 | "shasum": "" 776 | }, 777 | "require": { 778 | "doctrine/lexer": "^1 || ^2", 779 | "ext-tokenizer": "*", 780 | "php": "^7.1 || ^8.0", 781 | "psr/cache": "^1 || ^2 || ^3" 782 | }, 783 | "require-dev": { 784 | "doctrine/cache": "^1.11 || ^2.0", 785 | "doctrine/coding-standard": "^9 || ^10", 786 | "phpstan/phpstan": "~1.4.10 || ^1.8.0", 787 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", 788 | "symfony/cache": "^4.4 || ^5.4 || ^6", 789 | "vimeo/psalm": "^4.10" 790 | }, 791 | "suggest": { 792 | "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" 793 | }, 794 | "type": "library", 795 | "autoload": { 796 | "psr-4": { 797 | "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" 798 | } 799 | }, 800 | "notification-url": "https://packagist.org/downloads/", 801 | "license": [ 802 | "MIT" 803 | ], 804 | "authors": [ 805 | { 806 | "name": "Guilherme Blanco", 807 | "email": "guilhermeblanco@gmail.com" 808 | }, 809 | { 810 | "name": "Roman Borschel", 811 | "email": "roman@code-factory.org" 812 | }, 813 | { 814 | "name": "Benjamin Eberlei", 815 | "email": "kontakt@beberlei.de" 816 | }, 817 | { 818 | "name": "Jonathan Wage", 819 | "email": "jonwage@gmail.com" 820 | }, 821 | { 822 | "name": "Johannes Schmitt", 823 | "email": "schmittjoh@gmail.com" 824 | } 825 | ], 826 | "description": "Docblock Annotations Parser", 827 | "homepage": "https://www.doctrine-project.org/projects/annotations.html", 828 | "keywords": [ 829 | "annotations", 830 | "docblock", 831 | "parser" 832 | ], 833 | "support": { 834 | "issues": "https://github.com/doctrine/annotations/issues", 835 | "source": "https://github.com/doctrine/annotations/tree/1.14.2" 836 | }, 837 | "time": "2022-12-15T06:48:22+00:00" 838 | }, 839 | { 840 | "name": "doctrine/deprecations", 841 | "version": "v1.0.0", 842 | "source": { 843 | "type": "git", 844 | "url": "https://github.com/doctrine/deprecations.git", 845 | "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" 846 | }, 847 | "dist": { 848 | "type": "zip", 849 | "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", 850 | "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", 851 | "shasum": "" 852 | }, 853 | "require": { 854 | "php": "^7.1|^8.0" 855 | }, 856 | "require-dev": { 857 | "doctrine/coding-standard": "^9", 858 | "phpunit/phpunit": "^7.5|^8.5|^9.5", 859 | "psr/log": "^1|^2|^3" 860 | }, 861 | "suggest": { 862 | "psr/log": "Allows logging deprecations via PSR-3 logger implementation" 863 | }, 864 | "type": "library", 865 | "autoload": { 866 | "psr-4": { 867 | "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" 868 | } 869 | }, 870 | "notification-url": "https://packagist.org/downloads/", 871 | "license": [ 872 | "MIT" 873 | ], 874 | "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", 875 | "homepage": "https://www.doctrine-project.org/", 876 | "support": { 877 | "issues": "https://github.com/doctrine/deprecations/issues", 878 | "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" 879 | }, 880 | "time": "2022-05-02T15:47:09+00:00" 881 | }, 882 | { 883 | "name": "doctrine/lexer", 884 | "version": "2.1.0", 885 | "source": { 886 | "type": "git", 887 | "url": "https://github.com/doctrine/lexer.git", 888 | "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" 889 | }, 890 | "dist": { 891 | "type": "zip", 892 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", 893 | "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", 894 | "shasum": "" 895 | }, 896 | "require": { 897 | "doctrine/deprecations": "^1.0", 898 | "php": "^7.1 || ^8.0" 899 | }, 900 | "require-dev": { 901 | "doctrine/coding-standard": "^9 || ^10", 902 | "phpstan/phpstan": "^1.3", 903 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", 904 | "psalm/plugin-phpunit": "^0.18.3", 905 | "vimeo/psalm": "^4.11 || ^5.0" 906 | }, 907 | "type": "library", 908 | "autoload": { 909 | "psr-4": { 910 | "Doctrine\\Common\\Lexer\\": "src" 911 | } 912 | }, 913 | "notification-url": "https://packagist.org/downloads/", 914 | "license": [ 915 | "MIT" 916 | ], 917 | "authors": [ 918 | { 919 | "name": "Guilherme Blanco", 920 | "email": "guilhermeblanco@gmail.com" 921 | }, 922 | { 923 | "name": "Roman Borschel", 924 | "email": "roman@code-factory.org" 925 | }, 926 | { 927 | "name": "Johannes Schmitt", 928 | "email": "schmittjoh@gmail.com" 929 | } 930 | ], 931 | "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", 932 | "homepage": "https://www.doctrine-project.org/projects/lexer.html", 933 | "keywords": [ 934 | "annotations", 935 | "docblock", 936 | "lexer", 937 | "parser", 938 | "php" 939 | ], 940 | "support": { 941 | "issues": "https://github.com/doctrine/lexer/issues", 942 | "source": "https://github.com/doctrine/lexer/tree/2.1.0" 943 | }, 944 | "funding": [ 945 | { 946 | "url": "https://www.doctrine-project.org/sponsorship.html", 947 | "type": "custom" 948 | }, 949 | { 950 | "url": "https://www.patreon.com/phpdoctrine", 951 | "type": "patreon" 952 | }, 953 | { 954 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", 955 | "type": "tidelift" 956 | } 957 | ], 958 | "time": "2022-12-14T08:49:07+00:00" 959 | }, 960 | { 961 | "name": "friendsofphp/php-cs-fixer", 962 | "version": "v3.13.2", 963 | "source": { 964 | "type": "git", 965 | "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", 966 | "reference": "3952f08a81bd3b1b15e11c3de0b6bf037faa8496" 967 | }, 968 | "dist": { 969 | "type": "zip", 970 | "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/3952f08a81bd3b1b15e11c3de0b6bf037faa8496", 971 | "reference": "3952f08a81bd3b1b15e11c3de0b6bf037faa8496", 972 | "shasum": "" 973 | }, 974 | "require": { 975 | "composer/semver": "^3.2", 976 | "composer/xdebug-handler": "^3.0.3", 977 | "doctrine/annotations": "^1.13", 978 | "ext-json": "*", 979 | "ext-tokenizer": "*", 980 | "php": "^7.4 || ^8.0", 981 | "sebastian/diff": "^4.0", 982 | "symfony/console": "^5.4 || ^6.0", 983 | "symfony/event-dispatcher": "^5.4 || ^6.0", 984 | "symfony/filesystem": "^5.4 || ^6.0", 985 | "symfony/finder": "^5.4 || ^6.0", 986 | "symfony/options-resolver": "^5.4 || ^6.0", 987 | "symfony/polyfill-mbstring": "^1.23", 988 | "symfony/polyfill-php80": "^1.25", 989 | "symfony/polyfill-php81": "^1.25", 990 | "symfony/process": "^5.4 || ^6.0", 991 | "symfony/stopwatch": "^5.4 || ^6.0" 992 | }, 993 | "require-dev": { 994 | "justinrainbow/json-schema": "^5.2", 995 | "keradus/cli-executor": "^2.0", 996 | "mikey179/vfsstream": "^1.6.10", 997 | "php-coveralls/php-coveralls": "^2.5.2", 998 | "php-cs-fixer/accessible-object": "^1.1", 999 | "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", 1000 | "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", 1001 | "phpspec/prophecy": "^1.15", 1002 | "phpspec/prophecy-phpunit": "^2.0", 1003 | "phpunit/phpunit": "^9.5", 1004 | "phpunitgoodpractices/polyfill": "^1.6", 1005 | "phpunitgoodpractices/traits": "^1.9.2", 1006 | "symfony/phpunit-bridge": "^6.0", 1007 | "symfony/yaml": "^5.4 || ^6.0" 1008 | }, 1009 | "suggest": { 1010 | "ext-dom": "For handling output formats in XML", 1011 | "ext-mbstring": "For handling non-UTF8 characters." 1012 | }, 1013 | "bin": [ 1014 | "php-cs-fixer" 1015 | ], 1016 | "type": "application", 1017 | "autoload": { 1018 | "psr-4": { 1019 | "PhpCsFixer\\": "src/" 1020 | } 1021 | }, 1022 | "notification-url": "https://packagist.org/downloads/", 1023 | "license": [ 1024 | "MIT" 1025 | ], 1026 | "authors": [ 1027 | { 1028 | "name": "Fabien Potencier", 1029 | "email": "fabien@symfony.com" 1030 | }, 1031 | { 1032 | "name": "Dariusz Rumiński", 1033 | "email": "dariusz.ruminski@gmail.com" 1034 | } 1035 | ], 1036 | "description": "A tool to automatically fix PHP code style", 1037 | "support": { 1038 | "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", 1039 | "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.13.2" 1040 | }, 1041 | "funding": [ 1042 | { 1043 | "url": "https://github.com/keradus", 1044 | "type": "github" 1045 | } 1046 | ], 1047 | "time": "2023-01-02T23:53:50+00:00" 1048 | }, 1049 | { 1050 | "name": "justinrainbow/json-schema", 1051 | "version": "5.2.12", 1052 | "source": { 1053 | "type": "git", 1054 | "url": "https://github.com/justinrainbow/json-schema.git", 1055 | "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60" 1056 | }, 1057 | "dist": { 1058 | "type": "zip", 1059 | "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", 1060 | "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", 1061 | "shasum": "" 1062 | }, 1063 | "require": { 1064 | "php": ">=5.3.3" 1065 | }, 1066 | "require-dev": { 1067 | "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", 1068 | "json-schema/json-schema-test-suite": "1.2.0", 1069 | "phpunit/phpunit": "^4.8.35" 1070 | }, 1071 | "bin": [ 1072 | "bin/validate-json" 1073 | ], 1074 | "type": "library", 1075 | "extra": { 1076 | "branch-alias": { 1077 | "dev-master": "5.0.x-dev" 1078 | } 1079 | }, 1080 | "autoload": { 1081 | "psr-4": { 1082 | "JsonSchema\\": "src/JsonSchema/" 1083 | } 1084 | }, 1085 | "notification-url": "https://packagist.org/downloads/", 1086 | "license": [ 1087 | "MIT" 1088 | ], 1089 | "authors": [ 1090 | { 1091 | "name": "Bruno Prieto Reis", 1092 | "email": "bruno.p.reis@gmail.com" 1093 | }, 1094 | { 1095 | "name": "Justin Rainbow", 1096 | "email": "justin.rainbow@gmail.com" 1097 | }, 1098 | { 1099 | "name": "Igor Wiedler", 1100 | "email": "igor@wiedler.ch" 1101 | }, 1102 | { 1103 | "name": "Robert Schönthal", 1104 | "email": "seroscho@googlemail.com" 1105 | } 1106 | ], 1107 | "description": "A library to validate a json schema.", 1108 | "homepage": "https://github.com/justinrainbow/json-schema", 1109 | "keywords": [ 1110 | "json", 1111 | "schema" 1112 | ], 1113 | "support": { 1114 | "issues": "https://github.com/justinrainbow/json-schema/issues", 1115 | "source": "https://github.com/justinrainbow/json-schema/tree/5.2.12" 1116 | }, 1117 | "time": "2022-04-13T08:02:27+00:00" 1118 | }, 1119 | { 1120 | "name": "psr/cache", 1121 | "version": "3.0.0", 1122 | "source": { 1123 | "type": "git", 1124 | "url": "https://github.com/php-fig/cache.git", 1125 | "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" 1126 | }, 1127 | "dist": { 1128 | "type": "zip", 1129 | "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", 1130 | "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", 1131 | "shasum": "" 1132 | }, 1133 | "require": { 1134 | "php": ">=8.0.0" 1135 | }, 1136 | "type": "library", 1137 | "extra": { 1138 | "branch-alias": { 1139 | "dev-master": "1.0.x-dev" 1140 | } 1141 | }, 1142 | "autoload": { 1143 | "psr-4": { 1144 | "Psr\\Cache\\": "src/" 1145 | } 1146 | }, 1147 | "notification-url": "https://packagist.org/downloads/", 1148 | "license": [ 1149 | "MIT" 1150 | ], 1151 | "authors": [ 1152 | { 1153 | "name": "PHP-FIG", 1154 | "homepage": "https://www.php-fig.org/" 1155 | } 1156 | ], 1157 | "description": "Common interface for caching libraries", 1158 | "keywords": [ 1159 | "cache", 1160 | "psr", 1161 | "psr-6" 1162 | ], 1163 | "support": { 1164 | "source": "https://github.com/php-fig/cache/tree/3.0.0" 1165 | }, 1166 | "time": "2021-02-03T23:26:27+00:00" 1167 | }, 1168 | { 1169 | "name": "psr/container", 1170 | "version": "2.0.2", 1171 | "source": { 1172 | "type": "git", 1173 | "url": "https://github.com/php-fig/container.git", 1174 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" 1175 | }, 1176 | "dist": { 1177 | "type": "zip", 1178 | "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", 1179 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", 1180 | "shasum": "" 1181 | }, 1182 | "require": { 1183 | "php": ">=7.4.0" 1184 | }, 1185 | "type": "library", 1186 | "extra": { 1187 | "branch-alias": { 1188 | "dev-master": "2.0.x-dev" 1189 | } 1190 | }, 1191 | "autoload": { 1192 | "psr-4": { 1193 | "Psr\\Container\\": "src/" 1194 | } 1195 | }, 1196 | "notification-url": "https://packagist.org/downloads/", 1197 | "license": [ 1198 | "MIT" 1199 | ], 1200 | "authors": [ 1201 | { 1202 | "name": "PHP-FIG", 1203 | "homepage": "https://www.php-fig.org/" 1204 | } 1205 | ], 1206 | "description": "Common Container Interface (PHP FIG PSR-11)", 1207 | "homepage": "https://github.com/php-fig/container", 1208 | "keywords": [ 1209 | "PSR-11", 1210 | "container", 1211 | "container-interface", 1212 | "container-interop", 1213 | "psr" 1214 | ], 1215 | "support": { 1216 | "issues": "https://github.com/php-fig/container/issues", 1217 | "source": "https://github.com/php-fig/container/tree/2.0.2" 1218 | }, 1219 | "time": "2021-11-05T16:47:00+00:00" 1220 | }, 1221 | { 1222 | "name": "psr/event-dispatcher", 1223 | "version": "1.0.0", 1224 | "source": { 1225 | "type": "git", 1226 | "url": "https://github.com/php-fig/event-dispatcher.git", 1227 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" 1228 | }, 1229 | "dist": { 1230 | "type": "zip", 1231 | "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", 1232 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", 1233 | "shasum": "" 1234 | }, 1235 | "require": { 1236 | "php": ">=7.2.0" 1237 | }, 1238 | "type": "library", 1239 | "extra": { 1240 | "branch-alias": { 1241 | "dev-master": "1.0.x-dev" 1242 | } 1243 | }, 1244 | "autoload": { 1245 | "psr-4": { 1246 | "Psr\\EventDispatcher\\": "src/" 1247 | } 1248 | }, 1249 | "notification-url": "https://packagist.org/downloads/", 1250 | "license": [ 1251 | "MIT" 1252 | ], 1253 | "authors": [ 1254 | { 1255 | "name": "PHP-FIG", 1256 | "homepage": "http://www.php-fig.org/" 1257 | } 1258 | ], 1259 | "description": "Standard interfaces for event handling.", 1260 | "keywords": [ 1261 | "events", 1262 | "psr", 1263 | "psr-14" 1264 | ], 1265 | "support": { 1266 | "issues": "https://github.com/php-fig/event-dispatcher/issues", 1267 | "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" 1268 | }, 1269 | "time": "2019-01-08T18:20:26+00:00" 1270 | }, 1271 | { 1272 | "name": "psr/log", 1273 | "version": "3.0.0", 1274 | "source": { 1275 | "type": "git", 1276 | "url": "https://github.com/php-fig/log.git", 1277 | "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" 1278 | }, 1279 | "dist": { 1280 | "type": "zip", 1281 | "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", 1282 | "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", 1283 | "shasum": "" 1284 | }, 1285 | "require": { 1286 | "php": ">=8.0.0" 1287 | }, 1288 | "type": "library", 1289 | "extra": { 1290 | "branch-alias": { 1291 | "dev-master": "3.x-dev" 1292 | } 1293 | }, 1294 | "autoload": { 1295 | "psr-4": { 1296 | "Psr\\Log\\": "src" 1297 | } 1298 | }, 1299 | "notification-url": "https://packagist.org/downloads/", 1300 | "license": [ 1301 | "MIT" 1302 | ], 1303 | "authors": [ 1304 | { 1305 | "name": "PHP-FIG", 1306 | "homepage": "https://www.php-fig.org/" 1307 | } 1308 | ], 1309 | "description": "Common interface for logging libraries", 1310 | "homepage": "https://github.com/php-fig/log", 1311 | "keywords": [ 1312 | "log", 1313 | "psr", 1314 | "psr-3" 1315 | ], 1316 | "support": { 1317 | "source": "https://github.com/php-fig/log/tree/3.0.0" 1318 | }, 1319 | "time": "2021-07-14T16:46:02+00:00" 1320 | }, 1321 | { 1322 | "name": "react/promise", 1323 | "version": "v2.9.0", 1324 | "source": { 1325 | "type": "git", 1326 | "url": "https://github.com/reactphp/promise.git", 1327 | "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910" 1328 | }, 1329 | "dist": { 1330 | "type": "zip", 1331 | "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910", 1332 | "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910", 1333 | "shasum": "" 1334 | }, 1335 | "require": { 1336 | "php": ">=5.4.0" 1337 | }, 1338 | "require-dev": { 1339 | "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" 1340 | }, 1341 | "type": "library", 1342 | "autoload": { 1343 | "files": [ 1344 | "src/functions_include.php" 1345 | ], 1346 | "psr-4": { 1347 | "React\\Promise\\": "src/" 1348 | } 1349 | }, 1350 | "notification-url": "https://packagist.org/downloads/", 1351 | "license": [ 1352 | "MIT" 1353 | ], 1354 | "authors": [ 1355 | { 1356 | "name": "Jan Sorgalla", 1357 | "email": "jsorgalla@gmail.com", 1358 | "homepage": "https://sorgalla.com/" 1359 | }, 1360 | { 1361 | "name": "Christian Lück", 1362 | "email": "christian@clue.engineering", 1363 | "homepage": "https://clue.engineering/" 1364 | }, 1365 | { 1366 | "name": "Cees-Jan Kiewiet", 1367 | "email": "reactphp@ceesjankiewiet.nl", 1368 | "homepage": "https://wyrihaximus.net/" 1369 | }, 1370 | { 1371 | "name": "Chris Boden", 1372 | "email": "cboden@gmail.com", 1373 | "homepage": "https://cboden.dev/" 1374 | } 1375 | ], 1376 | "description": "A lightweight implementation of CommonJS Promises/A for PHP", 1377 | "keywords": [ 1378 | "promise", 1379 | "promises" 1380 | ], 1381 | "support": { 1382 | "issues": "https://github.com/reactphp/promise/issues", 1383 | "source": "https://github.com/reactphp/promise/tree/v2.9.0" 1384 | }, 1385 | "funding": [ 1386 | { 1387 | "url": "https://github.com/WyriHaximus", 1388 | "type": "github" 1389 | }, 1390 | { 1391 | "url": "https://github.com/clue", 1392 | "type": "github" 1393 | } 1394 | ], 1395 | "time": "2022-02-11T10:27:51+00:00" 1396 | }, 1397 | { 1398 | "name": "sebastian/diff", 1399 | "version": "4.0.4", 1400 | "source": { 1401 | "type": "git", 1402 | "url": "https://github.com/sebastianbergmann/diff.git", 1403 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" 1404 | }, 1405 | "dist": { 1406 | "type": "zip", 1407 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1408 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1409 | "shasum": "" 1410 | }, 1411 | "require": { 1412 | "php": ">=7.3" 1413 | }, 1414 | "require-dev": { 1415 | "phpunit/phpunit": "^9.3", 1416 | "symfony/process": "^4.2 || ^5" 1417 | }, 1418 | "type": "library", 1419 | "extra": { 1420 | "branch-alias": { 1421 | "dev-master": "4.0-dev" 1422 | } 1423 | }, 1424 | "autoload": { 1425 | "classmap": [ 1426 | "src/" 1427 | ] 1428 | }, 1429 | "notification-url": "https://packagist.org/downloads/", 1430 | "license": [ 1431 | "BSD-3-Clause" 1432 | ], 1433 | "authors": [ 1434 | { 1435 | "name": "Sebastian Bergmann", 1436 | "email": "sebastian@phpunit.de" 1437 | }, 1438 | { 1439 | "name": "Kore Nordmann", 1440 | "email": "mail@kore-nordmann.de" 1441 | } 1442 | ], 1443 | "description": "Diff implementation", 1444 | "homepage": "https://github.com/sebastianbergmann/diff", 1445 | "keywords": [ 1446 | "diff", 1447 | "udiff", 1448 | "unidiff", 1449 | "unified diff" 1450 | ], 1451 | "support": { 1452 | "issues": "https://github.com/sebastianbergmann/diff/issues", 1453 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" 1454 | }, 1455 | "funding": [ 1456 | { 1457 | "url": "https://github.com/sebastianbergmann", 1458 | "type": "github" 1459 | } 1460 | ], 1461 | "time": "2020-10-26T13:10:38+00:00" 1462 | }, 1463 | { 1464 | "name": "seld/jsonlint", 1465 | "version": "1.9.0", 1466 | "source": { 1467 | "type": "git", 1468 | "url": "https://github.com/Seldaek/jsonlint.git", 1469 | "reference": "4211420d25eba80712bff236a98960ef68b866b7" 1470 | }, 1471 | "dist": { 1472 | "type": "zip", 1473 | "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7", 1474 | "reference": "4211420d25eba80712bff236a98960ef68b866b7", 1475 | "shasum": "" 1476 | }, 1477 | "require": { 1478 | "php": "^5.3 || ^7.0 || ^8.0" 1479 | }, 1480 | "require-dev": { 1481 | "phpstan/phpstan": "^1.5", 1482 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" 1483 | }, 1484 | "bin": [ 1485 | "bin/jsonlint" 1486 | ], 1487 | "type": "library", 1488 | "autoload": { 1489 | "psr-4": { 1490 | "Seld\\JsonLint\\": "src/Seld/JsonLint/" 1491 | } 1492 | }, 1493 | "notification-url": "https://packagist.org/downloads/", 1494 | "license": [ 1495 | "MIT" 1496 | ], 1497 | "authors": [ 1498 | { 1499 | "name": "Jordi Boggiano", 1500 | "email": "j.boggiano@seld.be", 1501 | "homepage": "http://seld.be" 1502 | } 1503 | ], 1504 | "description": "JSON Linter", 1505 | "keywords": [ 1506 | "json", 1507 | "linter", 1508 | "parser", 1509 | "validator" 1510 | ], 1511 | "support": { 1512 | "issues": "https://github.com/Seldaek/jsonlint/issues", 1513 | "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0" 1514 | }, 1515 | "funding": [ 1516 | { 1517 | "url": "https://github.com/Seldaek", 1518 | "type": "github" 1519 | }, 1520 | { 1521 | "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", 1522 | "type": "tidelift" 1523 | } 1524 | ], 1525 | "time": "2022-04-01T13:37:23+00:00" 1526 | }, 1527 | { 1528 | "name": "seld/phar-utils", 1529 | "version": "1.2.1", 1530 | "source": { 1531 | "type": "git", 1532 | "url": "https://github.com/Seldaek/phar-utils.git", 1533 | "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c" 1534 | }, 1535 | "dist": { 1536 | "type": "zip", 1537 | "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", 1538 | "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", 1539 | "shasum": "" 1540 | }, 1541 | "require": { 1542 | "php": ">=5.3" 1543 | }, 1544 | "type": "library", 1545 | "extra": { 1546 | "branch-alias": { 1547 | "dev-master": "1.x-dev" 1548 | } 1549 | }, 1550 | "autoload": { 1551 | "psr-4": { 1552 | "Seld\\PharUtils\\": "src/" 1553 | } 1554 | }, 1555 | "notification-url": "https://packagist.org/downloads/", 1556 | "license": [ 1557 | "MIT" 1558 | ], 1559 | "authors": [ 1560 | { 1561 | "name": "Jordi Boggiano", 1562 | "email": "j.boggiano@seld.be" 1563 | } 1564 | ], 1565 | "description": "PHAR file format utilities, for when PHP phars you up", 1566 | "keywords": [ 1567 | "phar" 1568 | ], 1569 | "support": { 1570 | "issues": "https://github.com/Seldaek/phar-utils/issues", 1571 | "source": "https://github.com/Seldaek/phar-utils/tree/1.2.1" 1572 | }, 1573 | "time": "2022-08-31T10:31:18+00:00" 1574 | }, 1575 | { 1576 | "name": "seld/signal-handler", 1577 | "version": "2.0.1", 1578 | "source": { 1579 | "type": "git", 1580 | "url": "https://github.com/Seldaek/signal-handler.git", 1581 | "reference": "f69d119511dc0360440cdbdaa71829c149b7be75" 1582 | }, 1583 | "dist": { 1584 | "type": "zip", 1585 | "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/f69d119511dc0360440cdbdaa71829c149b7be75", 1586 | "reference": "f69d119511dc0360440cdbdaa71829c149b7be75", 1587 | "shasum": "" 1588 | }, 1589 | "require": { 1590 | "php": ">=7.2.0" 1591 | }, 1592 | "require-dev": { 1593 | "phpstan/phpstan": "^1", 1594 | "phpstan/phpstan-deprecation-rules": "^1.0", 1595 | "phpstan/phpstan-phpunit": "^1", 1596 | "phpstan/phpstan-strict-rules": "^1.3", 1597 | "phpunit/phpunit": "^7.5.20 || ^8.5.23", 1598 | "psr/log": "^1 || ^2 || ^3" 1599 | }, 1600 | "type": "library", 1601 | "extra": { 1602 | "branch-alias": { 1603 | "dev-main": "2.x-dev" 1604 | } 1605 | }, 1606 | "autoload": { 1607 | "psr-4": { 1608 | "Seld\\Signal\\": "src/" 1609 | } 1610 | }, 1611 | "notification-url": "https://packagist.org/downloads/", 1612 | "license": [ 1613 | "MIT" 1614 | ], 1615 | "authors": [ 1616 | { 1617 | "name": "Jordi Boggiano", 1618 | "email": "j.boggiano@seld.be", 1619 | "homepage": "http://seld.be" 1620 | } 1621 | ], 1622 | "description": "Simple unix signal handler that silently fails where signals are not supported for easy cross-platform development", 1623 | "keywords": [ 1624 | "posix", 1625 | "sigint", 1626 | "signal", 1627 | "sigterm", 1628 | "unix" 1629 | ], 1630 | "support": { 1631 | "issues": "https://github.com/Seldaek/signal-handler/issues", 1632 | "source": "https://github.com/Seldaek/signal-handler/tree/2.0.1" 1633 | }, 1634 | "time": "2022-07-20T18:31:45+00:00" 1635 | }, 1636 | { 1637 | "name": "symfony/console", 1638 | "version": "v6.2.3", 1639 | "source": { 1640 | "type": "git", 1641 | "url": "https://github.com/symfony/console.git", 1642 | "reference": "0f579613e771dba2dbb8211c382342a641f5da06" 1643 | }, 1644 | "dist": { 1645 | "type": "zip", 1646 | "url": "https://api.github.com/repos/symfony/console/zipball/0f579613e771dba2dbb8211c382342a641f5da06", 1647 | "reference": "0f579613e771dba2dbb8211c382342a641f5da06", 1648 | "shasum": "" 1649 | }, 1650 | "require": { 1651 | "php": ">=8.1", 1652 | "symfony/deprecation-contracts": "^2.1|^3", 1653 | "symfony/polyfill-mbstring": "~1.0", 1654 | "symfony/service-contracts": "^1.1|^2|^3", 1655 | "symfony/string": "^5.4|^6.0" 1656 | }, 1657 | "conflict": { 1658 | "symfony/dependency-injection": "<5.4", 1659 | "symfony/dotenv": "<5.4", 1660 | "symfony/event-dispatcher": "<5.4", 1661 | "symfony/lock": "<5.4", 1662 | "symfony/process": "<5.4" 1663 | }, 1664 | "provide": { 1665 | "psr/log-implementation": "1.0|2.0|3.0" 1666 | }, 1667 | "require-dev": { 1668 | "psr/log": "^1|^2|^3", 1669 | "symfony/config": "^5.4|^6.0", 1670 | "symfony/dependency-injection": "^5.4|^6.0", 1671 | "symfony/event-dispatcher": "^5.4|^6.0", 1672 | "symfony/lock": "^5.4|^6.0", 1673 | "symfony/process": "^5.4|^6.0", 1674 | "symfony/var-dumper": "^5.4|^6.0" 1675 | }, 1676 | "suggest": { 1677 | "psr/log": "For using the console logger", 1678 | "symfony/event-dispatcher": "", 1679 | "symfony/lock": "", 1680 | "symfony/process": "" 1681 | }, 1682 | "type": "library", 1683 | "autoload": { 1684 | "psr-4": { 1685 | "Symfony\\Component\\Console\\": "" 1686 | }, 1687 | "exclude-from-classmap": [ 1688 | "/Tests/" 1689 | ] 1690 | }, 1691 | "notification-url": "https://packagist.org/downloads/", 1692 | "license": [ 1693 | "MIT" 1694 | ], 1695 | "authors": [ 1696 | { 1697 | "name": "Fabien Potencier", 1698 | "email": "fabien@symfony.com" 1699 | }, 1700 | { 1701 | "name": "Symfony Community", 1702 | "homepage": "https://symfony.com/contributors" 1703 | } 1704 | ], 1705 | "description": "Eases the creation of beautiful and testable command line interfaces", 1706 | "homepage": "https://symfony.com", 1707 | "keywords": [ 1708 | "cli", 1709 | "command line", 1710 | "console", 1711 | "terminal" 1712 | ], 1713 | "support": { 1714 | "source": "https://github.com/symfony/console/tree/v6.2.3" 1715 | }, 1716 | "funding": [ 1717 | { 1718 | "url": "https://symfony.com/sponsor", 1719 | "type": "custom" 1720 | }, 1721 | { 1722 | "url": "https://github.com/fabpot", 1723 | "type": "github" 1724 | }, 1725 | { 1726 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1727 | "type": "tidelift" 1728 | } 1729 | ], 1730 | "time": "2022-12-28T14:26:22+00:00" 1731 | }, 1732 | { 1733 | "name": "symfony/deprecation-contracts", 1734 | "version": "v3.2.0", 1735 | "source": { 1736 | "type": "git", 1737 | "url": "https://github.com/symfony/deprecation-contracts.git", 1738 | "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" 1739 | }, 1740 | "dist": { 1741 | "type": "zip", 1742 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", 1743 | "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", 1744 | "shasum": "" 1745 | }, 1746 | "require": { 1747 | "php": ">=8.1" 1748 | }, 1749 | "type": "library", 1750 | "extra": { 1751 | "branch-alias": { 1752 | "dev-main": "3.3-dev" 1753 | }, 1754 | "thanks": { 1755 | "name": "symfony/contracts", 1756 | "url": "https://github.com/symfony/contracts" 1757 | } 1758 | }, 1759 | "autoload": { 1760 | "files": [ 1761 | "function.php" 1762 | ] 1763 | }, 1764 | "notification-url": "https://packagist.org/downloads/", 1765 | "license": [ 1766 | "MIT" 1767 | ], 1768 | "authors": [ 1769 | { 1770 | "name": "Nicolas Grekas", 1771 | "email": "p@tchwork.com" 1772 | }, 1773 | { 1774 | "name": "Symfony Community", 1775 | "homepage": "https://symfony.com/contributors" 1776 | } 1777 | ], 1778 | "description": "A generic function and convention to trigger deprecation notices", 1779 | "homepage": "https://symfony.com", 1780 | "support": { 1781 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" 1782 | }, 1783 | "funding": [ 1784 | { 1785 | "url": "https://symfony.com/sponsor", 1786 | "type": "custom" 1787 | }, 1788 | { 1789 | "url": "https://github.com/fabpot", 1790 | "type": "github" 1791 | }, 1792 | { 1793 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1794 | "type": "tidelift" 1795 | } 1796 | ], 1797 | "time": "2022-11-25T10:21:52+00:00" 1798 | }, 1799 | { 1800 | "name": "symfony/event-dispatcher", 1801 | "version": "v6.2.2", 1802 | "source": { 1803 | "type": "git", 1804 | "url": "https://github.com/symfony/event-dispatcher.git", 1805 | "reference": "3ffeb31139b49bf6ef0bc09d1db95eac053388d1" 1806 | }, 1807 | "dist": { 1808 | "type": "zip", 1809 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3ffeb31139b49bf6ef0bc09d1db95eac053388d1", 1810 | "reference": "3ffeb31139b49bf6ef0bc09d1db95eac053388d1", 1811 | "shasum": "" 1812 | }, 1813 | "require": { 1814 | "php": ">=8.1", 1815 | "symfony/event-dispatcher-contracts": "^2|^3" 1816 | }, 1817 | "conflict": { 1818 | "symfony/dependency-injection": "<5.4" 1819 | }, 1820 | "provide": { 1821 | "psr/event-dispatcher-implementation": "1.0", 1822 | "symfony/event-dispatcher-implementation": "2.0|3.0" 1823 | }, 1824 | "require-dev": { 1825 | "psr/log": "^1|^2|^3", 1826 | "symfony/config": "^5.4|^6.0", 1827 | "symfony/dependency-injection": "^5.4|^6.0", 1828 | "symfony/error-handler": "^5.4|^6.0", 1829 | "symfony/expression-language": "^5.4|^6.0", 1830 | "symfony/http-foundation": "^5.4|^6.0", 1831 | "symfony/service-contracts": "^1.1|^2|^3", 1832 | "symfony/stopwatch": "^5.4|^6.0" 1833 | }, 1834 | "suggest": { 1835 | "symfony/dependency-injection": "", 1836 | "symfony/http-kernel": "" 1837 | }, 1838 | "type": "library", 1839 | "autoload": { 1840 | "psr-4": { 1841 | "Symfony\\Component\\EventDispatcher\\": "" 1842 | }, 1843 | "exclude-from-classmap": [ 1844 | "/Tests/" 1845 | ] 1846 | }, 1847 | "notification-url": "https://packagist.org/downloads/", 1848 | "license": [ 1849 | "MIT" 1850 | ], 1851 | "authors": [ 1852 | { 1853 | "name": "Fabien Potencier", 1854 | "email": "fabien@symfony.com" 1855 | }, 1856 | { 1857 | "name": "Symfony Community", 1858 | "homepage": "https://symfony.com/contributors" 1859 | } 1860 | ], 1861 | "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", 1862 | "homepage": "https://symfony.com", 1863 | "support": { 1864 | "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.2" 1865 | }, 1866 | "funding": [ 1867 | { 1868 | "url": "https://symfony.com/sponsor", 1869 | "type": "custom" 1870 | }, 1871 | { 1872 | "url": "https://github.com/fabpot", 1873 | "type": "github" 1874 | }, 1875 | { 1876 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1877 | "type": "tidelift" 1878 | } 1879 | ], 1880 | "time": "2022-12-14T16:11:27+00:00" 1881 | }, 1882 | { 1883 | "name": "symfony/event-dispatcher-contracts", 1884 | "version": "v3.2.0", 1885 | "source": { 1886 | "type": "git", 1887 | "url": "https://github.com/symfony/event-dispatcher-contracts.git", 1888 | "reference": "0782b0b52a737a05b4383d0df35a474303cabdae" 1889 | }, 1890 | "dist": { 1891 | "type": "zip", 1892 | "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae", 1893 | "reference": "0782b0b52a737a05b4383d0df35a474303cabdae", 1894 | "shasum": "" 1895 | }, 1896 | "require": { 1897 | "php": ">=8.1", 1898 | "psr/event-dispatcher": "^1" 1899 | }, 1900 | "suggest": { 1901 | "symfony/event-dispatcher-implementation": "" 1902 | }, 1903 | "type": "library", 1904 | "extra": { 1905 | "branch-alias": { 1906 | "dev-main": "3.3-dev" 1907 | }, 1908 | "thanks": { 1909 | "name": "symfony/contracts", 1910 | "url": "https://github.com/symfony/contracts" 1911 | } 1912 | }, 1913 | "autoload": { 1914 | "psr-4": { 1915 | "Symfony\\Contracts\\EventDispatcher\\": "" 1916 | } 1917 | }, 1918 | "notification-url": "https://packagist.org/downloads/", 1919 | "license": [ 1920 | "MIT" 1921 | ], 1922 | "authors": [ 1923 | { 1924 | "name": "Nicolas Grekas", 1925 | "email": "p@tchwork.com" 1926 | }, 1927 | { 1928 | "name": "Symfony Community", 1929 | "homepage": "https://symfony.com/contributors" 1930 | } 1931 | ], 1932 | "description": "Generic abstractions related to dispatching event", 1933 | "homepage": "https://symfony.com", 1934 | "keywords": [ 1935 | "abstractions", 1936 | "contracts", 1937 | "decoupling", 1938 | "interfaces", 1939 | "interoperability", 1940 | "standards" 1941 | ], 1942 | "support": { 1943 | "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0" 1944 | }, 1945 | "funding": [ 1946 | { 1947 | "url": "https://symfony.com/sponsor", 1948 | "type": "custom" 1949 | }, 1950 | { 1951 | "url": "https://github.com/fabpot", 1952 | "type": "github" 1953 | }, 1954 | { 1955 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1956 | "type": "tidelift" 1957 | } 1958 | ], 1959 | "time": "2022-11-25T10:21:52+00:00" 1960 | }, 1961 | { 1962 | "name": "symfony/filesystem", 1963 | "version": "v6.2.0", 1964 | "source": { 1965 | "type": "git", 1966 | "url": "https://github.com/symfony/filesystem.git", 1967 | "reference": "50b2523c874605cf3d4acf7a9e2b30b6a440a016" 1968 | }, 1969 | "dist": { 1970 | "type": "zip", 1971 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/50b2523c874605cf3d4acf7a9e2b30b6a440a016", 1972 | "reference": "50b2523c874605cf3d4acf7a9e2b30b6a440a016", 1973 | "shasum": "" 1974 | }, 1975 | "require": { 1976 | "php": ">=8.1", 1977 | "symfony/polyfill-ctype": "~1.8", 1978 | "symfony/polyfill-mbstring": "~1.8" 1979 | }, 1980 | "type": "library", 1981 | "autoload": { 1982 | "psr-4": { 1983 | "Symfony\\Component\\Filesystem\\": "" 1984 | }, 1985 | "exclude-from-classmap": [ 1986 | "/Tests/" 1987 | ] 1988 | }, 1989 | "notification-url": "https://packagist.org/downloads/", 1990 | "license": [ 1991 | "MIT" 1992 | ], 1993 | "authors": [ 1994 | { 1995 | "name": "Fabien Potencier", 1996 | "email": "fabien@symfony.com" 1997 | }, 1998 | { 1999 | "name": "Symfony Community", 2000 | "homepage": "https://symfony.com/contributors" 2001 | } 2002 | ], 2003 | "description": "Provides basic utilities for the filesystem", 2004 | "homepage": "https://symfony.com", 2005 | "support": { 2006 | "source": "https://github.com/symfony/filesystem/tree/v6.2.0" 2007 | }, 2008 | "funding": [ 2009 | { 2010 | "url": "https://symfony.com/sponsor", 2011 | "type": "custom" 2012 | }, 2013 | { 2014 | "url": "https://github.com/fabpot", 2015 | "type": "github" 2016 | }, 2017 | { 2018 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2019 | "type": "tidelift" 2020 | } 2021 | ], 2022 | "time": "2022-11-20T13:01:27+00:00" 2023 | }, 2024 | { 2025 | "name": "symfony/finder", 2026 | "version": "v6.2.3", 2027 | "source": { 2028 | "type": "git", 2029 | "url": "https://github.com/symfony/finder.git", 2030 | "reference": "81eefbddfde282ee33b437ba5e13d7753211ae8e" 2031 | }, 2032 | "dist": { 2033 | "type": "zip", 2034 | "url": "https://api.github.com/repos/symfony/finder/zipball/81eefbddfde282ee33b437ba5e13d7753211ae8e", 2035 | "reference": "81eefbddfde282ee33b437ba5e13d7753211ae8e", 2036 | "shasum": "" 2037 | }, 2038 | "require": { 2039 | "php": ">=8.1" 2040 | }, 2041 | "require-dev": { 2042 | "symfony/filesystem": "^6.0" 2043 | }, 2044 | "type": "library", 2045 | "autoload": { 2046 | "psr-4": { 2047 | "Symfony\\Component\\Finder\\": "" 2048 | }, 2049 | "exclude-from-classmap": [ 2050 | "/Tests/" 2051 | ] 2052 | }, 2053 | "notification-url": "https://packagist.org/downloads/", 2054 | "license": [ 2055 | "MIT" 2056 | ], 2057 | "authors": [ 2058 | { 2059 | "name": "Fabien Potencier", 2060 | "email": "fabien@symfony.com" 2061 | }, 2062 | { 2063 | "name": "Symfony Community", 2064 | "homepage": "https://symfony.com/contributors" 2065 | } 2066 | ], 2067 | "description": "Finds files and directories via an intuitive fluent interface", 2068 | "homepage": "https://symfony.com", 2069 | "support": { 2070 | "source": "https://github.com/symfony/finder/tree/v6.2.3" 2071 | }, 2072 | "funding": [ 2073 | { 2074 | "url": "https://symfony.com/sponsor", 2075 | "type": "custom" 2076 | }, 2077 | { 2078 | "url": "https://github.com/fabpot", 2079 | "type": "github" 2080 | }, 2081 | { 2082 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2083 | "type": "tidelift" 2084 | } 2085 | ], 2086 | "time": "2022-12-22T17:55:15+00:00" 2087 | }, 2088 | { 2089 | "name": "symfony/options-resolver", 2090 | "version": "v6.2.0", 2091 | "source": { 2092 | "type": "git", 2093 | "url": "https://github.com/symfony/options-resolver.git", 2094 | "reference": "d28f02acde71ff75e957082cd36e973df395f626" 2095 | }, 2096 | "dist": { 2097 | "type": "zip", 2098 | "url": "https://api.github.com/repos/symfony/options-resolver/zipball/d28f02acde71ff75e957082cd36e973df395f626", 2099 | "reference": "d28f02acde71ff75e957082cd36e973df395f626", 2100 | "shasum": "" 2101 | }, 2102 | "require": { 2103 | "php": ">=8.1", 2104 | "symfony/deprecation-contracts": "^2.1|^3" 2105 | }, 2106 | "type": "library", 2107 | "autoload": { 2108 | "psr-4": { 2109 | "Symfony\\Component\\OptionsResolver\\": "" 2110 | }, 2111 | "exclude-from-classmap": [ 2112 | "/Tests/" 2113 | ] 2114 | }, 2115 | "notification-url": "https://packagist.org/downloads/", 2116 | "license": [ 2117 | "MIT" 2118 | ], 2119 | "authors": [ 2120 | { 2121 | "name": "Fabien Potencier", 2122 | "email": "fabien@symfony.com" 2123 | }, 2124 | { 2125 | "name": "Symfony Community", 2126 | "homepage": "https://symfony.com/contributors" 2127 | } 2128 | ], 2129 | "description": "Provides an improved replacement for the array_replace PHP function", 2130 | "homepage": "https://symfony.com", 2131 | "keywords": [ 2132 | "config", 2133 | "configuration", 2134 | "options" 2135 | ], 2136 | "support": { 2137 | "source": "https://github.com/symfony/options-resolver/tree/v6.2.0" 2138 | }, 2139 | "funding": [ 2140 | { 2141 | "url": "https://symfony.com/sponsor", 2142 | "type": "custom" 2143 | }, 2144 | { 2145 | "url": "https://github.com/fabpot", 2146 | "type": "github" 2147 | }, 2148 | { 2149 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2150 | "type": "tidelift" 2151 | } 2152 | ], 2153 | "time": "2022-11-02T09:08:04+00:00" 2154 | }, 2155 | { 2156 | "name": "symfony/phpunit-bridge", 2157 | "version": "v6.2.3", 2158 | "source": { 2159 | "type": "git", 2160 | "url": "https://github.com/symfony/phpunit-bridge.git", 2161 | "reference": "3766b8269d3bac5c214a04ebd6870e71e52bcb60" 2162 | }, 2163 | "dist": { 2164 | "type": "zip", 2165 | "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/3766b8269d3bac5c214a04ebd6870e71e52bcb60", 2166 | "reference": "3766b8269d3bac5c214a04ebd6870e71e52bcb60", 2167 | "shasum": "" 2168 | }, 2169 | "require": { 2170 | "php": ">=7.1.3" 2171 | }, 2172 | "conflict": { 2173 | "phpunit/phpunit": "<7.5|9.1.2" 2174 | }, 2175 | "require-dev": { 2176 | "symfony/deprecation-contracts": "^2.1|^3.0", 2177 | "symfony/error-handler": "^5.4|^6.0" 2178 | }, 2179 | "suggest": { 2180 | "symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" 2181 | }, 2182 | "bin": [ 2183 | "bin/simple-phpunit" 2184 | ], 2185 | "type": "symfony-bridge", 2186 | "extra": { 2187 | "thanks": { 2188 | "name": "phpunit/phpunit", 2189 | "url": "https://github.com/sebastianbergmann/phpunit" 2190 | } 2191 | }, 2192 | "autoload": { 2193 | "files": [ 2194 | "bootstrap.php" 2195 | ], 2196 | "psr-4": { 2197 | "Symfony\\Bridge\\PhpUnit\\": "" 2198 | }, 2199 | "exclude-from-classmap": [ 2200 | "/Tests/" 2201 | ] 2202 | }, 2203 | "notification-url": "https://packagist.org/downloads/", 2204 | "license": [ 2205 | "MIT" 2206 | ], 2207 | "authors": [ 2208 | { 2209 | "name": "Nicolas Grekas", 2210 | "email": "p@tchwork.com" 2211 | }, 2212 | { 2213 | "name": "Symfony Community", 2214 | "homepage": "https://symfony.com/contributors" 2215 | } 2216 | ], 2217 | "description": "Provides utilities for PHPUnit, especially user deprecation notices management", 2218 | "homepage": "https://symfony.com", 2219 | "support": { 2220 | "source": "https://github.com/symfony/phpunit-bridge/tree/v6.2.3" 2221 | }, 2222 | "funding": [ 2223 | { 2224 | "url": "https://symfony.com/sponsor", 2225 | "type": "custom" 2226 | }, 2227 | { 2228 | "url": "https://github.com/fabpot", 2229 | "type": "github" 2230 | }, 2231 | { 2232 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2233 | "type": "tidelift" 2234 | } 2235 | ], 2236 | "time": "2022-12-28T14:26:22+00:00" 2237 | }, 2238 | { 2239 | "name": "symfony/polyfill-ctype", 2240 | "version": "v1.27.0", 2241 | "source": { 2242 | "type": "git", 2243 | "url": "https://github.com/symfony/polyfill-ctype.git", 2244 | "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" 2245 | }, 2246 | "dist": { 2247 | "type": "zip", 2248 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", 2249 | "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", 2250 | "shasum": "" 2251 | }, 2252 | "require": { 2253 | "php": ">=7.1" 2254 | }, 2255 | "provide": { 2256 | "ext-ctype": "*" 2257 | }, 2258 | "suggest": { 2259 | "ext-ctype": "For best performance" 2260 | }, 2261 | "type": "library", 2262 | "extra": { 2263 | "branch-alias": { 2264 | "dev-main": "1.27-dev" 2265 | }, 2266 | "thanks": { 2267 | "name": "symfony/polyfill", 2268 | "url": "https://github.com/symfony/polyfill" 2269 | } 2270 | }, 2271 | "autoload": { 2272 | "files": [ 2273 | "bootstrap.php" 2274 | ], 2275 | "psr-4": { 2276 | "Symfony\\Polyfill\\Ctype\\": "" 2277 | } 2278 | }, 2279 | "notification-url": "https://packagist.org/downloads/", 2280 | "license": [ 2281 | "MIT" 2282 | ], 2283 | "authors": [ 2284 | { 2285 | "name": "Gert de Pagter", 2286 | "email": "BackEndTea@gmail.com" 2287 | }, 2288 | { 2289 | "name": "Symfony Community", 2290 | "homepage": "https://symfony.com/contributors" 2291 | } 2292 | ], 2293 | "description": "Symfony polyfill for ctype functions", 2294 | "homepage": "https://symfony.com", 2295 | "keywords": [ 2296 | "compatibility", 2297 | "ctype", 2298 | "polyfill", 2299 | "portable" 2300 | ], 2301 | "support": { 2302 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" 2303 | }, 2304 | "funding": [ 2305 | { 2306 | "url": "https://symfony.com/sponsor", 2307 | "type": "custom" 2308 | }, 2309 | { 2310 | "url": "https://github.com/fabpot", 2311 | "type": "github" 2312 | }, 2313 | { 2314 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2315 | "type": "tidelift" 2316 | } 2317 | ], 2318 | "time": "2022-11-03T14:55:06+00:00" 2319 | }, 2320 | { 2321 | "name": "symfony/polyfill-intl-grapheme", 2322 | "version": "v1.27.0", 2323 | "source": { 2324 | "type": "git", 2325 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 2326 | "reference": "511a08c03c1960e08a883f4cffcacd219b758354" 2327 | }, 2328 | "dist": { 2329 | "type": "zip", 2330 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", 2331 | "reference": "511a08c03c1960e08a883f4cffcacd219b758354", 2332 | "shasum": "" 2333 | }, 2334 | "require": { 2335 | "php": ">=7.1" 2336 | }, 2337 | "suggest": { 2338 | "ext-intl": "For best performance" 2339 | }, 2340 | "type": "library", 2341 | "extra": { 2342 | "branch-alias": { 2343 | "dev-main": "1.27-dev" 2344 | }, 2345 | "thanks": { 2346 | "name": "symfony/polyfill", 2347 | "url": "https://github.com/symfony/polyfill" 2348 | } 2349 | }, 2350 | "autoload": { 2351 | "files": [ 2352 | "bootstrap.php" 2353 | ], 2354 | "psr-4": { 2355 | "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 2356 | } 2357 | }, 2358 | "notification-url": "https://packagist.org/downloads/", 2359 | "license": [ 2360 | "MIT" 2361 | ], 2362 | "authors": [ 2363 | { 2364 | "name": "Nicolas Grekas", 2365 | "email": "p@tchwork.com" 2366 | }, 2367 | { 2368 | "name": "Symfony Community", 2369 | "homepage": "https://symfony.com/contributors" 2370 | } 2371 | ], 2372 | "description": "Symfony polyfill for intl's grapheme_* functions", 2373 | "homepage": "https://symfony.com", 2374 | "keywords": [ 2375 | "compatibility", 2376 | "grapheme", 2377 | "intl", 2378 | "polyfill", 2379 | "portable", 2380 | "shim" 2381 | ], 2382 | "support": { 2383 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" 2384 | }, 2385 | "funding": [ 2386 | { 2387 | "url": "https://symfony.com/sponsor", 2388 | "type": "custom" 2389 | }, 2390 | { 2391 | "url": "https://github.com/fabpot", 2392 | "type": "github" 2393 | }, 2394 | { 2395 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2396 | "type": "tidelift" 2397 | } 2398 | ], 2399 | "time": "2022-11-03T14:55:06+00:00" 2400 | }, 2401 | { 2402 | "name": "symfony/polyfill-intl-normalizer", 2403 | "version": "v1.27.0", 2404 | "source": { 2405 | "type": "git", 2406 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 2407 | "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" 2408 | }, 2409 | "dist": { 2410 | "type": "zip", 2411 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", 2412 | "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", 2413 | "shasum": "" 2414 | }, 2415 | "require": { 2416 | "php": ">=7.1" 2417 | }, 2418 | "suggest": { 2419 | "ext-intl": "For best performance" 2420 | }, 2421 | "type": "library", 2422 | "extra": { 2423 | "branch-alias": { 2424 | "dev-main": "1.27-dev" 2425 | }, 2426 | "thanks": { 2427 | "name": "symfony/polyfill", 2428 | "url": "https://github.com/symfony/polyfill" 2429 | } 2430 | }, 2431 | "autoload": { 2432 | "files": [ 2433 | "bootstrap.php" 2434 | ], 2435 | "psr-4": { 2436 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 2437 | }, 2438 | "classmap": [ 2439 | "Resources/stubs" 2440 | ] 2441 | }, 2442 | "notification-url": "https://packagist.org/downloads/", 2443 | "license": [ 2444 | "MIT" 2445 | ], 2446 | "authors": [ 2447 | { 2448 | "name": "Nicolas Grekas", 2449 | "email": "p@tchwork.com" 2450 | }, 2451 | { 2452 | "name": "Symfony Community", 2453 | "homepage": "https://symfony.com/contributors" 2454 | } 2455 | ], 2456 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 2457 | "homepage": "https://symfony.com", 2458 | "keywords": [ 2459 | "compatibility", 2460 | "intl", 2461 | "normalizer", 2462 | "polyfill", 2463 | "portable", 2464 | "shim" 2465 | ], 2466 | "support": { 2467 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" 2468 | }, 2469 | "funding": [ 2470 | { 2471 | "url": "https://symfony.com/sponsor", 2472 | "type": "custom" 2473 | }, 2474 | { 2475 | "url": "https://github.com/fabpot", 2476 | "type": "github" 2477 | }, 2478 | { 2479 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2480 | "type": "tidelift" 2481 | } 2482 | ], 2483 | "time": "2022-11-03T14:55:06+00:00" 2484 | }, 2485 | { 2486 | "name": "symfony/polyfill-mbstring", 2487 | "version": "v1.27.0", 2488 | "source": { 2489 | "type": "git", 2490 | "url": "https://github.com/symfony/polyfill-mbstring.git", 2491 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" 2492 | }, 2493 | "dist": { 2494 | "type": "zip", 2495 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", 2496 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", 2497 | "shasum": "" 2498 | }, 2499 | "require": { 2500 | "php": ">=7.1" 2501 | }, 2502 | "provide": { 2503 | "ext-mbstring": "*" 2504 | }, 2505 | "suggest": { 2506 | "ext-mbstring": "For best performance" 2507 | }, 2508 | "type": "library", 2509 | "extra": { 2510 | "branch-alias": { 2511 | "dev-main": "1.27-dev" 2512 | }, 2513 | "thanks": { 2514 | "name": "symfony/polyfill", 2515 | "url": "https://github.com/symfony/polyfill" 2516 | } 2517 | }, 2518 | "autoload": { 2519 | "files": [ 2520 | "bootstrap.php" 2521 | ], 2522 | "psr-4": { 2523 | "Symfony\\Polyfill\\Mbstring\\": "" 2524 | } 2525 | }, 2526 | "notification-url": "https://packagist.org/downloads/", 2527 | "license": [ 2528 | "MIT" 2529 | ], 2530 | "authors": [ 2531 | { 2532 | "name": "Nicolas Grekas", 2533 | "email": "p@tchwork.com" 2534 | }, 2535 | { 2536 | "name": "Symfony Community", 2537 | "homepage": "https://symfony.com/contributors" 2538 | } 2539 | ], 2540 | "description": "Symfony polyfill for the Mbstring extension", 2541 | "homepage": "https://symfony.com", 2542 | "keywords": [ 2543 | "compatibility", 2544 | "mbstring", 2545 | "polyfill", 2546 | "portable", 2547 | "shim" 2548 | ], 2549 | "support": { 2550 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" 2551 | }, 2552 | "funding": [ 2553 | { 2554 | "url": "https://symfony.com/sponsor", 2555 | "type": "custom" 2556 | }, 2557 | { 2558 | "url": "https://github.com/fabpot", 2559 | "type": "github" 2560 | }, 2561 | { 2562 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2563 | "type": "tidelift" 2564 | } 2565 | ], 2566 | "time": "2022-11-03T14:55:06+00:00" 2567 | }, 2568 | { 2569 | "name": "symfony/polyfill-php73", 2570 | "version": "v1.27.0", 2571 | "source": { 2572 | "type": "git", 2573 | "url": "https://github.com/symfony/polyfill-php73.git", 2574 | "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" 2575 | }, 2576 | "dist": { 2577 | "type": "zip", 2578 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", 2579 | "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", 2580 | "shasum": "" 2581 | }, 2582 | "require": { 2583 | "php": ">=7.1" 2584 | }, 2585 | "type": "library", 2586 | "extra": { 2587 | "branch-alias": { 2588 | "dev-main": "1.27-dev" 2589 | }, 2590 | "thanks": { 2591 | "name": "symfony/polyfill", 2592 | "url": "https://github.com/symfony/polyfill" 2593 | } 2594 | }, 2595 | "autoload": { 2596 | "files": [ 2597 | "bootstrap.php" 2598 | ], 2599 | "psr-4": { 2600 | "Symfony\\Polyfill\\Php73\\": "" 2601 | }, 2602 | "classmap": [ 2603 | "Resources/stubs" 2604 | ] 2605 | }, 2606 | "notification-url": "https://packagist.org/downloads/", 2607 | "license": [ 2608 | "MIT" 2609 | ], 2610 | "authors": [ 2611 | { 2612 | "name": "Nicolas Grekas", 2613 | "email": "p@tchwork.com" 2614 | }, 2615 | { 2616 | "name": "Symfony Community", 2617 | "homepage": "https://symfony.com/contributors" 2618 | } 2619 | ], 2620 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 2621 | "homepage": "https://symfony.com", 2622 | "keywords": [ 2623 | "compatibility", 2624 | "polyfill", 2625 | "portable", 2626 | "shim" 2627 | ], 2628 | "support": { 2629 | "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" 2630 | }, 2631 | "funding": [ 2632 | { 2633 | "url": "https://symfony.com/sponsor", 2634 | "type": "custom" 2635 | }, 2636 | { 2637 | "url": "https://github.com/fabpot", 2638 | "type": "github" 2639 | }, 2640 | { 2641 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2642 | "type": "tidelift" 2643 | } 2644 | ], 2645 | "time": "2022-11-03T14:55:06+00:00" 2646 | }, 2647 | { 2648 | "name": "symfony/polyfill-php80", 2649 | "version": "v1.27.0", 2650 | "source": { 2651 | "type": "git", 2652 | "url": "https://github.com/symfony/polyfill-php80.git", 2653 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" 2654 | }, 2655 | "dist": { 2656 | "type": "zip", 2657 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", 2658 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", 2659 | "shasum": "" 2660 | }, 2661 | "require": { 2662 | "php": ">=7.1" 2663 | }, 2664 | "type": "library", 2665 | "extra": { 2666 | "branch-alias": { 2667 | "dev-main": "1.27-dev" 2668 | }, 2669 | "thanks": { 2670 | "name": "symfony/polyfill", 2671 | "url": "https://github.com/symfony/polyfill" 2672 | } 2673 | }, 2674 | "autoload": { 2675 | "files": [ 2676 | "bootstrap.php" 2677 | ], 2678 | "psr-4": { 2679 | "Symfony\\Polyfill\\Php80\\": "" 2680 | }, 2681 | "classmap": [ 2682 | "Resources/stubs" 2683 | ] 2684 | }, 2685 | "notification-url": "https://packagist.org/downloads/", 2686 | "license": [ 2687 | "MIT" 2688 | ], 2689 | "authors": [ 2690 | { 2691 | "name": "Ion Bazan", 2692 | "email": "ion.bazan@gmail.com" 2693 | }, 2694 | { 2695 | "name": "Nicolas Grekas", 2696 | "email": "p@tchwork.com" 2697 | }, 2698 | { 2699 | "name": "Symfony Community", 2700 | "homepage": "https://symfony.com/contributors" 2701 | } 2702 | ], 2703 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 2704 | "homepage": "https://symfony.com", 2705 | "keywords": [ 2706 | "compatibility", 2707 | "polyfill", 2708 | "portable", 2709 | "shim" 2710 | ], 2711 | "support": { 2712 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" 2713 | }, 2714 | "funding": [ 2715 | { 2716 | "url": "https://symfony.com/sponsor", 2717 | "type": "custom" 2718 | }, 2719 | { 2720 | "url": "https://github.com/fabpot", 2721 | "type": "github" 2722 | }, 2723 | { 2724 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2725 | "type": "tidelift" 2726 | } 2727 | ], 2728 | "time": "2022-11-03T14:55:06+00:00" 2729 | }, 2730 | { 2731 | "name": "symfony/polyfill-php81", 2732 | "version": "v1.27.0", 2733 | "source": { 2734 | "type": "git", 2735 | "url": "https://github.com/symfony/polyfill-php81.git", 2736 | "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" 2737 | }, 2738 | "dist": { 2739 | "type": "zip", 2740 | "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", 2741 | "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", 2742 | "shasum": "" 2743 | }, 2744 | "require": { 2745 | "php": ">=7.1" 2746 | }, 2747 | "type": "library", 2748 | "extra": { 2749 | "branch-alias": { 2750 | "dev-main": "1.27-dev" 2751 | }, 2752 | "thanks": { 2753 | "name": "symfony/polyfill", 2754 | "url": "https://github.com/symfony/polyfill" 2755 | } 2756 | }, 2757 | "autoload": { 2758 | "files": [ 2759 | "bootstrap.php" 2760 | ], 2761 | "psr-4": { 2762 | "Symfony\\Polyfill\\Php81\\": "" 2763 | }, 2764 | "classmap": [ 2765 | "Resources/stubs" 2766 | ] 2767 | }, 2768 | "notification-url": "https://packagist.org/downloads/", 2769 | "license": [ 2770 | "MIT" 2771 | ], 2772 | "authors": [ 2773 | { 2774 | "name": "Nicolas Grekas", 2775 | "email": "p@tchwork.com" 2776 | }, 2777 | { 2778 | "name": "Symfony Community", 2779 | "homepage": "https://symfony.com/contributors" 2780 | } 2781 | ], 2782 | "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", 2783 | "homepage": "https://symfony.com", 2784 | "keywords": [ 2785 | "compatibility", 2786 | "polyfill", 2787 | "portable", 2788 | "shim" 2789 | ], 2790 | "support": { 2791 | "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" 2792 | }, 2793 | "funding": [ 2794 | { 2795 | "url": "https://symfony.com/sponsor", 2796 | "type": "custom" 2797 | }, 2798 | { 2799 | "url": "https://github.com/fabpot", 2800 | "type": "github" 2801 | }, 2802 | { 2803 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2804 | "type": "tidelift" 2805 | } 2806 | ], 2807 | "time": "2022-11-03T14:55:06+00:00" 2808 | }, 2809 | { 2810 | "name": "symfony/service-contracts", 2811 | "version": "v3.2.0", 2812 | "source": { 2813 | "type": "git", 2814 | "url": "https://github.com/symfony/service-contracts.git", 2815 | "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" 2816 | }, 2817 | "dist": { 2818 | "type": "zip", 2819 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", 2820 | "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", 2821 | "shasum": "" 2822 | }, 2823 | "require": { 2824 | "php": ">=8.1", 2825 | "psr/container": "^2.0" 2826 | }, 2827 | "conflict": { 2828 | "ext-psr": "<1.1|>=2" 2829 | }, 2830 | "suggest": { 2831 | "symfony/service-implementation": "" 2832 | }, 2833 | "type": "library", 2834 | "extra": { 2835 | "branch-alias": { 2836 | "dev-main": "3.3-dev" 2837 | }, 2838 | "thanks": { 2839 | "name": "symfony/contracts", 2840 | "url": "https://github.com/symfony/contracts" 2841 | } 2842 | }, 2843 | "autoload": { 2844 | "psr-4": { 2845 | "Symfony\\Contracts\\Service\\": "" 2846 | }, 2847 | "exclude-from-classmap": [ 2848 | "/Test/" 2849 | ] 2850 | }, 2851 | "notification-url": "https://packagist.org/downloads/", 2852 | "license": [ 2853 | "MIT" 2854 | ], 2855 | "authors": [ 2856 | { 2857 | "name": "Nicolas Grekas", 2858 | "email": "p@tchwork.com" 2859 | }, 2860 | { 2861 | "name": "Symfony Community", 2862 | "homepage": "https://symfony.com/contributors" 2863 | } 2864 | ], 2865 | "description": "Generic abstractions related to writing services", 2866 | "homepage": "https://symfony.com", 2867 | "keywords": [ 2868 | "abstractions", 2869 | "contracts", 2870 | "decoupling", 2871 | "interfaces", 2872 | "interoperability", 2873 | "standards" 2874 | ], 2875 | "support": { 2876 | "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" 2877 | }, 2878 | "funding": [ 2879 | { 2880 | "url": "https://symfony.com/sponsor", 2881 | "type": "custom" 2882 | }, 2883 | { 2884 | "url": "https://github.com/fabpot", 2885 | "type": "github" 2886 | }, 2887 | { 2888 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2889 | "type": "tidelift" 2890 | } 2891 | ], 2892 | "time": "2022-11-25T10:21:52+00:00" 2893 | }, 2894 | { 2895 | "name": "symfony/stopwatch", 2896 | "version": "v6.2.0", 2897 | "source": { 2898 | "type": "git", 2899 | "url": "https://github.com/symfony/stopwatch.git", 2900 | "reference": "266636bb8f3fbdccc302491df7b3a1b9a8c238a7" 2901 | }, 2902 | "dist": { 2903 | "type": "zip", 2904 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/266636bb8f3fbdccc302491df7b3a1b9a8c238a7", 2905 | "reference": "266636bb8f3fbdccc302491df7b3a1b9a8c238a7", 2906 | "shasum": "" 2907 | }, 2908 | "require": { 2909 | "php": ">=8.1", 2910 | "symfony/service-contracts": "^1|^2|^3" 2911 | }, 2912 | "type": "library", 2913 | "autoload": { 2914 | "psr-4": { 2915 | "Symfony\\Component\\Stopwatch\\": "" 2916 | }, 2917 | "exclude-from-classmap": [ 2918 | "/Tests/" 2919 | ] 2920 | }, 2921 | "notification-url": "https://packagist.org/downloads/", 2922 | "license": [ 2923 | "MIT" 2924 | ], 2925 | "authors": [ 2926 | { 2927 | "name": "Fabien Potencier", 2928 | "email": "fabien@symfony.com" 2929 | }, 2930 | { 2931 | "name": "Symfony Community", 2932 | "homepage": "https://symfony.com/contributors" 2933 | } 2934 | ], 2935 | "description": "Provides a way to profile code", 2936 | "homepage": "https://symfony.com", 2937 | "support": { 2938 | "source": "https://github.com/symfony/stopwatch/tree/v6.2.0" 2939 | }, 2940 | "funding": [ 2941 | { 2942 | "url": "https://symfony.com/sponsor", 2943 | "type": "custom" 2944 | }, 2945 | { 2946 | "url": "https://github.com/fabpot", 2947 | "type": "github" 2948 | }, 2949 | { 2950 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2951 | "type": "tidelift" 2952 | } 2953 | ], 2954 | "time": "2022-09-28T16:00:52+00:00" 2955 | }, 2956 | { 2957 | "name": "symfony/string", 2958 | "version": "v6.2.2", 2959 | "source": { 2960 | "type": "git", 2961 | "url": "https://github.com/symfony/string.git", 2962 | "reference": "863219fd713fa41cbcd285a79723f94672faff4d" 2963 | }, 2964 | "dist": { 2965 | "type": "zip", 2966 | "url": "https://api.github.com/repos/symfony/string/zipball/863219fd713fa41cbcd285a79723f94672faff4d", 2967 | "reference": "863219fd713fa41cbcd285a79723f94672faff4d", 2968 | "shasum": "" 2969 | }, 2970 | "require": { 2971 | "php": ">=8.1", 2972 | "symfony/polyfill-ctype": "~1.8", 2973 | "symfony/polyfill-intl-grapheme": "~1.0", 2974 | "symfony/polyfill-intl-normalizer": "~1.0", 2975 | "symfony/polyfill-mbstring": "~1.0" 2976 | }, 2977 | "conflict": { 2978 | "symfony/translation-contracts": "<2.0" 2979 | }, 2980 | "require-dev": { 2981 | "symfony/error-handler": "^5.4|^6.0", 2982 | "symfony/http-client": "^5.4|^6.0", 2983 | "symfony/intl": "^6.2", 2984 | "symfony/translation-contracts": "^2.0|^3.0", 2985 | "symfony/var-exporter": "^5.4|^6.0" 2986 | }, 2987 | "type": "library", 2988 | "autoload": { 2989 | "files": [ 2990 | "Resources/functions.php" 2991 | ], 2992 | "psr-4": { 2993 | "Symfony\\Component\\String\\": "" 2994 | }, 2995 | "exclude-from-classmap": [ 2996 | "/Tests/" 2997 | ] 2998 | }, 2999 | "notification-url": "https://packagist.org/downloads/", 3000 | "license": [ 3001 | "MIT" 3002 | ], 3003 | "authors": [ 3004 | { 3005 | "name": "Nicolas Grekas", 3006 | "email": "p@tchwork.com" 3007 | }, 3008 | { 3009 | "name": "Symfony Community", 3010 | "homepage": "https://symfony.com/contributors" 3011 | } 3012 | ], 3013 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", 3014 | "homepage": "https://symfony.com", 3015 | "keywords": [ 3016 | "grapheme", 3017 | "i18n", 3018 | "string", 3019 | "unicode", 3020 | "utf-8", 3021 | "utf8" 3022 | ], 3023 | "support": { 3024 | "source": "https://github.com/symfony/string/tree/v6.2.2" 3025 | }, 3026 | "funding": [ 3027 | { 3028 | "url": "https://symfony.com/sponsor", 3029 | "type": "custom" 3030 | }, 3031 | { 3032 | "url": "https://github.com/fabpot", 3033 | "type": "github" 3034 | }, 3035 | { 3036 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3037 | "type": "tidelift" 3038 | } 3039 | ], 3040 | "time": "2022-12-14T16:11:27+00:00" 3041 | } 3042 | ], 3043 | "aliases": [], 3044 | "minimum-stability": "stable", 3045 | "stability-flags": [], 3046 | "prefer-stable": false, 3047 | "prefer-lowest": false, 3048 | "platform": { 3049 | "php": ">=7.4", 3050 | "composer-plugin-api": "^1.0 || ^2.0" 3051 | }, 3052 | "platform-dev": [], 3053 | "plugin-api-version": "2.3.0" 3054 | } 3055 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ./ 6 | 7 | 8 | ./vendor 9 | ./tests 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | ./tests/ 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/NotifierPlugin.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Pyrech\ComposerNotifier; 13 | 14 | use Composer\Composer; 15 | use Composer\EventDispatcher\EventSubscriberInterface; 16 | use Composer\IO\IOInterface; 17 | use Composer\Plugin\PluginInterface; 18 | use Composer\Script\Event; 19 | use Composer\Script\ScriptEvents; 20 | use Joli\JoliNotif\Notification; 21 | use Joli\JoliNotif\Notifier; 22 | use Joli\JoliNotif\NotifierFactory; 23 | 24 | class NotifierPlugin implements PluginInterface, EventSubscriberInterface 25 | { 26 | protected ?Composer $composer = null; 27 | private ?Notifier $notifier; 28 | 29 | public function __construct(Notifier $notifier = null) 30 | { 31 | $this->notifier = $notifier ?: NotifierFactory::create(); 32 | } 33 | 34 | public function activate(Composer $composer, IOInterface $io): void 35 | { 36 | $this->composer = $composer; 37 | } 38 | 39 | public function deactivate(Composer $composer, IOInterface $io): void 40 | { 41 | } 42 | 43 | public function uninstall(Composer $composer, IOInterface $io): void 44 | { 45 | } 46 | 47 | public static function getSubscribedEvents(): array 48 | { 49 | return [ 50 | ScriptEvents::POST_INSTALL_CMD => [ 51 | ['postInstall', -10000], 52 | ], 53 | ScriptEvents::POST_UPDATE_CMD => [ 54 | ['postUpdate', -10000], 55 | ], 56 | ]; 57 | } 58 | 59 | public function postInstall(Event $event): void 60 | { 61 | $this->notify('Composer just finished the install command'); 62 | } 63 | 64 | public function postUpdate(Event $event): void 65 | { 66 | $this->notify('Composer just finished the update command'); 67 | } 68 | 69 | private function getProjectName(): string 70 | { 71 | return $this->composer->getPackage()->getName(); 72 | } 73 | 74 | private function notify(string $body): void 75 | { 76 | if (!$this->notifier) { 77 | return; 78 | } 79 | 80 | $notification = 81 | (new Notification()) 82 | ->setTitle($this->getProjectName()) 83 | ->setBody($body) 84 | ->setIcon(__DIR__ . '/../Resources/logo.png') 85 | ; 86 | 87 | $this->notifier->send($notification); 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /tests/NotifierPluginTest.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Pyrech\ComposerNotifier\tests; 13 | 14 | use Composer\Composer; 15 | use Composer\Factory; 16 | use Composer\IO\BufferIO; 17 | use Composer\Package\Package; 18 | use Composer\Script\ScriptEvents; 19 | use Joli\JoliNotif\Notifier; 20 | use PHPUnit\Framework\TestCase; 21 | use Pyrech\ComposerNotifier\NotifierPlugin; 22 | 23 | class NotifierPluginTest extends TestCase 24 | { 25 | private Composer $composer; 26 | 27 | /** 28 | * {@inheritdoc} 29 | */ 30 | protected function setUp(): void 31 | { 32 | $this->composer = Factory::create(new BufferIO()); 33 | } 34 | 35 | public function testItIsRegisteredAndActivated() 36 | { 37 | $plugin = new NotifierPlugin(); 38 | 39 | $pluginManager = $this->composer->getPluginManager(); 40 | $pluginManager->addPlugin($plugin, false, new Package('pyrech/composer-notifier', '1', 'v1')); 41 | 42 | $this->assertSame([$plugin], $this->composer->getPluginManager()->getPlugins()); 43 | } 44 | 45 | public function testEventsAreHandled() 46 | { 47 | $notifier = $this->createMock(Notifier::class); 48 | 49 | $notifier 50 | ->expects($this->exactly(1)) 51 | ->method('send') 52 | ->willReturn(true) 53 | ; 54 | 55 | $plugin = new NotifierPlugin($notifier); 56 | 57 | $pluginManager = $this->composer->getPluginManager(); 58 | $pluginManager->addPlugin($plugin, false, new Package('pyrech/composer-notifier', '1', 'v1')); 59 | 60 | $this->composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_INSTALL_CMD); 61 | } 62 | } 63 | --------------------------------------------------------------------------------