├── .codeclimate.yml ├── .editorconfig ├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── composer.json ├── composer.lock ├── docs ├── md │ ├── 1. Namespaces.md │ ├── 2. Classes.md │ ├── 3. Interfaces.md │ └── Shrink0r │ │ └── Monatic │ │ ├── Eventually.md │ │ ├── Many.md │ │ ├── ManyMaybe.md │ │ ├── Maybe.md │ │ ├── MonadInterface.md │ │ └── None.md └── usage.md ├── phpunit.xml.dist ├── sami.cfg.php ├── src ├── Attempt.php ├── Error.php ├── Eventually.php ├── Many.php ├── ManyMaybe.php ├── Maybe.php ├── MonadInterface.php ├── None.php ├── Result.php └── Success.php └── tests ├── AttemptTest.php ├── EventuallyTest.php ├── Fixtures ├── Article.php └── Category.php ├── ManyMaybeTest.php ├── ManyTest.php ├── MaybeTest.php ├── NoneTest.php └── TestCase.php /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | engines: 2 | duplication: 3 | enabled: true 4 | config: 5 | languages: 6 | - php 7 | fixme: 8 | enabled: true 9 | phpcodesniffer: 10 | enabled: true 11 | config: 12 | standard: "PSR1,PSR2" 13 | phpmd: 14 | enabled: true 15 | config: 16 | file_extensions: "php" 17 | rulesets: "unusedcode,codesize,naming,design,cleancode" 18 | 19 | ratings: 20 | paths: 21 | - "**.php" 22 | 23 | exclude_paths: 24 | - "tests/**/*" 25 | - "vendor/**/*" 26 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 4 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.yml] 12 | indent_size = 2 13 | 14 | [*.md] 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # project related stuff 2 | /bin/phpunit 3 | /build/ 4 | 5 | # composer related stuff 6 | /vendor/ 7 | /composer.lock 8 | composer.phar 9 | 10 | # other dependency tools 11 | node_modules 12 | components 13 | bower_components 14 | 15 | # general os and editors related stuff 16 | .DS_Store 17 | Thumbs.db 18 | *.sublime-project 19 | *.sublime-workspace 20 | .bundle/ 21 | *~ 22 | *.tmp 23 | *.bak 24 | *.swp 25 | *~.nib 26 | .class 27 | .classpath 28 | .settings/ 29 | .loadpath 30 | .project 31 | .metadata 32 | *.launch 33 | .buildpath 34 | .cproject 35 | .externalToolBuilders/ 36 | .plugins/ 37 | *.pydevproject 38 | nbproject/ 39 | *.tmproj 40 | 41 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | php: 3 | - 7.2 4 | - 7.3 5 | - 7.4 6 | before_script: composer install 7 | script: 8 | - vendor/bin/phpunit 9 | - vendor/bin/phpcs --standard=PSR2 src/ tests/ 10 | after_script: php vendor/bin/coveralls -v 11 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All new features, changes and fixes should be listed here. Please use tickets to reference changes. 4 | 5 | ## 0.2.0 (2016/10/21) 6 | 7 | * [new] aligned project structure using [graste's project template](https://github.com/graste/empty-php-project) 8 | * [change] Maybe::unit does not cast null to None, but returns a regular Maybe instance 9 | 10 | ## 0.1.0 (2016/10/21) 11 | 12 | * [new] initial version 13 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Your input and contributions are very welcome! Please open issues with improvements, feature requests or bug reports. 4 | 5 | If you want to contribute source code, add documentation or fix spelling mistakes try this: 6 | 7 | 1. [Fork](http://help.github.com/forking/) the project. 8 | 1. Install vendor libraries needed for testing etc. via `make install-dependencies-dev`. 9 | 1. Make your changes and additions (e.g. in a new branch). 10 | 1. Verify your changes by making sure that `composer test` does not fail. 11 | 1. Add, commit, squash and push the changes to your forked repository. 12 | 1. Send a [pull request](http://help.github.com/pull-requests/) with a well written issue describing the change and why it is necessary. 13 | 14 | Please note, that the code tries to adhere to the [PSR-2 Coding Style Guide](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md). Commits are continously integrated via [TravisCI](https://travis-ci.org/shrink0r/monatic) and failing the PHPUnit or PHP CodeSniffer tests will fail the builds. Usually the build status will be shown on your pull request by Github. If something fails please try to fix your changes as otherwise integrating them is harder. 15 | 16 | # Contributor Covenant Code of Conduct 17 | 18 | ## Our Pledge 19 | 20 | In the interest of fostering an open and welcoming environment, we as 21 | contributors and maintainers pledge to making participation in our project and 22 | our community a harassment-free experience for everyone, regardless of age, body 23 | size, disability, ethnicity, gender identity and expression, level of experience, 24 | nationality, personal appearance, race, religion, or sexual identity and 25 | orientation. 26 | 27 | ## Our Standards 28 | 29 | Examples of behavior that contributes to creating a positive environment 30 | include: 31 | 32 | * Using welcoming and inclusive language 33 | * Being respectful of differing viewpoints and experiences 34 | * Gracefully accepting constructive criticism 35 | * Focusing on what is best for the community 36 | * Showing empathy towards other community members 37 | 38 | Examples of unacceptable behavior by participants include: 39 | 40 | * The use of sexualized language or imagery and unwelcome sexual attention or 41 | advances 42 | * Trolling, insulting/derogatory comments, and personal or political attacks 43 | * Public or private harassment 44 | * Publishing others' private information, such as a physical or electronic 45 | address, without explicit permission 46 | * Other conduct which could reasonably be considered inappropriate in a 47 | professional setting 48 | 49 | ## Our Responsibilities 50 | 51 | Project maintainers are responsible for clarifying the standards of acceptable 52 | behavior and are expected to take appropriate and fair corrective action in 53 | response to any instances of unacceptable behavior. 54 | 55 | Project maintainers have the right and responsibility to remove, edit, or 56 | reject comments, commits, code, wiki edits, issues, and other contributions 57 | that are not aligned to this Code of Conduct, or to ban temporarily or 58 | permanently any contributor for other behaviors that they deem inappropriate, 59 | threatening, offensive, or harmful. 60 | 61 | ## Scope 62 | 63 | This Code of Conduct applies both within project spaces and in public spaces 64 | when an individual is representing the project or its community. Examples of 65 | representing a project or community include using an official project e-mail 66 | address, posting via an official social media account, or acting as an appointed 67 | representative at an online or offline event. Representation of a project may be 68 | further defined and clarified by project maintainers. 69 | 70 | ## Enforcement 71 | 72 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 73 | reported by contacting the project team at [INSERT EMAIL ADDRESS]. All 74 | complaints will be reviewed and investigated and will result in a response that 75 | is deemed necessary and appropriate to the circumstances. The project team is 76 | obligated to maintain confidentiality with regard to the reporter of an incident. 77 | Further details of specific enforcement policies may be posted separately. 78 | 79 | Project maintainers who do not follow or enforce the Code of Conduct in good 80 | faith may face temporary or permanent repercussions as determined by other 81 | members of the project's leadership. 82 | 83 | ## Attribution 84 | 85 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 86 | available at [http://contributor-covenant.org/version/1/4][version] 87 | 88 | [homepage]: http://contributor-covenant.org 89 | [version]: http://contributor-covenant.org/version/1/4/ 90 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # The MIT License (MIT) 2 | 3 | Copyright (c) 2016 [github contributors graph](https://github.com/shrink0r/monatic/graphs/contributors) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # monatic 2 | 3 | [![Latest-Stable-Version](https://poser.pugx.org/shrink0r/monatic/v/stable.svg)][1] 4 | [![License](https://poser.pugx.org/shrink0r/monatic/license.svg)][10] 5 | [![Latest Unstable Version](https://poser.pugx.org/shrink0r/monatic/v/unstable.svg)][1] 6 | [![Build Status](https://secure.travis-ci.org/shrink0r/monatic.png)][2] 7 | [![Coverage Status](https://coveralls.io/repos/shrink0r/monatic/badge.png)][3] 8 | [![Code Climate](https://codeclimate.com/github/shrink0r/monatic/badges/gpa.svg)](https://codeclimate.com/github/shrink0r/monatic) 9 | [![Dependency Status](https://www.versioneye.com/user/projects/550b51f2a80b5fc12d00017d/badge.svg?style=flat-square)][4] 10 | [![Stories in Ready](https://badge.waffle.io/shrink0r/monatic.png?label=ready&title=Ready)][9] 11 | [![Total Composer Downloads](https://poser.pugx.org/shrink0r/monatic/d/total.png)][1] 12 | 13 | ## Purpose 14 | 15 | Fiddling with the monad concept in php. 16 | 17 | ## Requirements and installation 18 | 19 | - PHP v5.6+ 20 | 21 | Install the library via [Composer](http://getcomposer.org/): 22 | 23 | ```./composer.phar require shrink0r/monatic [optional version]``` 24 | 25 | Adding it manually as a vendor library requirement to the `composer.json` file of your project works as well: 26 | 27 | ```json 28 | { 29 | "require": { 30 | "shrink0r/monatic": "^0.2" 31 | } 32 | } 33 | ``` 34 | 35 | Alternatively, you can download a release archive from the [available releases](https://github.com/shrink0r/monatic/releases) page. 36 | 37 | ## Documentation 38 | 39 | * [Usage](docs/usage.md) 40 | * [Markdown API-Doc](docs/md/2. Classes.md) 41 | 42 | ## Community 43 | 44 | None, but you may join the freenode IRC [`#honeybee`](irc://irc.freenode.org/honeybee) channel anytime. :-) 45 | 46 | ## Contributors 47 | 48 | Please contribute by [forking](http://help.github.com/forking/) and sending a [pull request](http://help.github.com/pull-requests/). More information can be found in the [`CONTRIBUTING.md`](CONTRIBUTING.md) file. The authors and contributors are mentioned in the [github contributors graph](https://github.com/shrink0r/monatic/graphs/contributors) of this repository. 49 | 50 | The code tries to adhere to the following PHP-FIG standards: [PSR-4][6], [PSR-1][7] and [PSR-2][8]. 51 | 52 | ## Changelog 53 | 54 | See [`CHANGELOG.md`](CHANGELOG.md) for more information about changes. 55 | 56 | ## License 57 | 58 | This project is MIT licensed. See the [linked license](LICENSE.md) for details. 59 | 60 | [1]: https://packagist.org/packages/shrink0r/monatic "shrink0r/monatic on packagist" 61 | [2]: http://travis-ci.org/shrink0r/monatic "shrink0r/monatic on travis-ci" 62 | [3]: https://coveralls.io/r/shrink0r/monatic "shrink0r/monatic on coveralls" 63 | [4]: https://www.versioneye.com/user/projects/550b51f2a80b5fc12d00017d "shrink0r/monatic on versioneye" 64 | [6]: http://www.php-fig.org/psr/psr-4/ "PSR-4 Autoloading Standard" 65 | [7]: http://www.php-fig.org/psr/psr-1/ "PSR-1 Basic Coding Standard" 66 | [8]: http://www.php-fig.org/psr/psr-2/ "PSR-2 Coding Style Guide" 67 | [9]: https://waffle.io/shrink0r/monatic "shrink0r/monatic on waffle" 68 | [10]: LICENSE.md "license file with full text of the license" 69 | 70 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "shrink0r/monatic", 3 | "license": "MIT", 4 | "description": "Fiddling with the monad concept in php", 5 | "keywords": [ "monad" ], 6 | "require": { 7 | "php": "^7.0", 8 | "symfony/property-access": "^4.0 || ^5.0" 9 | }, 10 | "require-dev": { 11 | "roave/security-advisories": "dev-master", 12 | "phploc/phploc": "^5.0 || ^6.0", 13 | "phpmd/phpmd": "^2.8", 14 | "phpunit/phpunit": "^5.5 || ^6.0 || ^7.0", 15 | "php-coveralls/php-coveralls": "^2.2", 16 | "squizlabs/php_codesniffer": "^2.7" 17 | }, 18 | "autoload": { 19 | "psr-4": { 20 | "Shrink0r\\Monatic\\": "src/" 21 | } 22 | }, 23 | "autoload-dev": { 24 | "psr-4": { 25 | "Shrink0r\\Monatic\\Tests\\": "tests/" 26 | } 27 | }, 28 | "archive": { 29 | "exclude": [ 30 | "/tests", 31 | "/build", 32 | "/vendor" 33 | ] 34 | }, 35 | "scripts": { 36 | "test": [ 37 | "@php-test", 38 | "@code-sniffer", 39 | "@validate-json" 40 | ], 41 | "sniff": [ 42 | "@code-sniffer-autofix", 43 | "@code-sniffer", 44 | "@mess-detector" 45 | ], 46 | "code-sniffer": "phpcs -p -s --extensions=php --standard='PSR1,PSR2' src/ tests/", 47 | "code-sniffer-autofix": "phpcbf --standard=PSR2 -d tabWidth=4 src/ tests/", 48 | "mess-detector": "phpmd src,tests text codesize,unusedcode,naming,design", 49 | "php-loc": "phploc src", 50 | "php-test": "phpunit", 51 | "reports": [ 52 | "phpmd src xml codesize,unusedcode,naming,cleancode,design --reportfile ./build/coverage/logs/phpmd.xml || echo", 53 | "phpmd src html codesize,unusedcode,naming,cleancode,design --reportfile ./build/coverage/logs/phpmd.html || echo", 54 | "phploc --log-xml ./build/coverage/logs/phploc.xml src || echo", 55 | "phpcs -p -s --extensions=php --report=checkstyle --report-file=./build/coverage/logs/checkstyle.xml --standard='PSR1,PSR2' src/ tests/ || echo" 56 | ], 57 | "validate-json": "composer validate --no-check-all --no-check-lock", 58 | "validate-deps": "composer validate --with-dependencies --strict" 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /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": "aa68bc4ee72c59d669cb248e07391407", 8 | "packages": [ 9 | { 10 | "name": "symfony/inflector", 11 | "version": "v5.0.4", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/symfony/inflector.git", 15 | "reference": "e375603b6bd12e8e3aec3fc1b640ac18a4ef4cb2" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/symfony/inflector/zipball/e375603b6bd12e8e3aec3fc1b640ac18a4ef4cb2", 20 | "reference": "e375603b6bd12e8e3aec3fc1b640ac18a4ef4cb2", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "^7.2.5", 25 | "symfony/polyfill-ctype": "~1.8" 26 | }, 27 | "type": "library", 28 | "extra": { 29 | "branch-alias": { 30 | "dev-master": "5.0-dev" 31 | } 32 | }, 33 | "autoload": { 34 | "psr-4": { 35 | "Symfony\\Component\\Inflector\\": "" 36 | }, 37 | "exclude-from-classmap": [ 38 | "/Tests/" 39 | ] 40 | }, 41 | "notification-url": "https://packagist.org/downloads/", 42 | "license": [ 43 | "MIT" 44 | ], 45 | "authors": [ 46 | { 47 | "name": "Bernhard Schussek", 48 | "email": "bschussek@gmail.com" 49 | }, 50 | { 51 | "name": "Symfony Community", 52 | "homepage": "https://symfony.com/contributors" 53 | } 54 | ], 55 | "description": "Symfony Inflector Component", 56 | "homepage": "https://symfony.com", 57 | "keywords": [ 58 | "inflection", 59 | "pluralize", 60 | "singularize", 61 | "string", 62 | "symfony", 63 | "words" 64 | ], 65 | "time": "2020-01-04T14:08:26+00:00" 66 | }, 67 | { 68 | "name": "symfony/polyfill-ctype", 69 | "version": "v1.14.0", 70 | "source": { 71 | "type": "git", 72 | "url": "https://github.com/symfony/polyfill-ctype.git", 73 | "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38" 74 | }, 75 | "dist": { 76 | "type": "zip", 77 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", 78 | "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", 79 | "shasum": "" 80 | }, 81 | "require": { 82 | "php": ">=5.3.3" 83 | }, 84 | "suggest": { 85 | "ext-ctype": "For best performance" 86 | }, 87 | "type": "library", 88 | "extra": { 89 | "branch-alias": { 90 | "dev-master": "1.14-dev" 91 | } 92 | }, 93 | "autoload": { 94 | "psr-4": { 95 | "Symfony\\Polyfill\\Ctype\\": "" 96 | }, 97 | "files": [ 98 | "bootstrap.php" 99 | ] 100 | }, 101 | "notification-url": "https://packagist.org/downloads/", 102 | "license": [ 103 | "MIT" 104 | ], 105 | "authors": [ 106 | { 107 | "name": "Gert de Pagter", 108 | "email": "BackEndTea@gmail.com" 109 | }, 110 | { 111 | "name": "Symfony Community", 112 | "homepage": "https://symfony.com/contributors" 113 | } 114 | ], 115 | "description": "Symfony polyfill for ctype functions", 116 | "homepage": "https://symfony.com", 117 | "keywords": [ 118 | "compatibility", 119 | "ctype", 120 | "polyfill", 121 | "portable" 122 | ], 123 | "time": "2020-01-13T11:15:53+00:00" 124 | }, 125 | { 126 | "name": "symfony/property-access", 127 | "version": "v5.0.4", 128 | "source": { 129 | "type": "git", 130 | "url": "https://github.com/symfony/property-access.git", 131 | "reference": "18617a8c26b97a262f816c78765eb3cd91630e19" 132 | }, 133 | "dist": { 134 | "type": "zip", 135 | "url": "https://api.github.com/repos/symfony/property-access/zipball/18617a8c26b97a262f816c78765eb3cd91630e19", 136 | "reference": "18617a8c26b97a262f816c78765eb3cd91630e19", 137 | "shasum": "" 138 | }, 139 | "require": { 140 | "php": "^7.2.5", 141 | "symfony/inflector": "^4.4|^5.0" 142 | }, 143 | "require-dev": { 144 | "symfony/cache": "^4.4|^5.0" 145 | }, 146 | "suggest": { 147 | "psr/cache-implementation": "To cache access methods." 148 | }, 149 | "type": "library", 150 | "extra": { 151 | "branch-alias": { 152 | "dev-master": "5.0-dev" 153 | } 154 | }, 155 | "autoload": { 156 | "psr-4": { 157 | "Symfony\\Component\\PropertyAccess\\": "" 158 | }, 159 | "exclude-from-classmap": [ 160 | "/Tests/" 161 | ] 162 | }, 163 | "notification-url": "https://packagist.org/downloads/", 164 | "license": [ 165 | "MIT" 166 | ], 167 | "authors": [ 168 | { 169 | "name": "Fabien Potencier", 170 | "email": "fabien@symfony.com" 171 | }, 172 | { 173 | "name": "Symfony Community", 174 | "homepage": "https://symfony.com/contributors" 175 | } 176 | ], 177 | "description": "Symfony PropertyAccess Component", 178 | "homepage": "https://symfony.com", 179 | "keywords": [ 180 | "access", 181 | "array", 182 | "extraction", 183 | "index", 184 | "injection", 185 | "object", 186 | "property", 187 | "property path", 188 | "reflection" 189 | ], 190 | "time": "2020-01-04T14:08:26+00:00" 191 | } 192 | ], 193 | "packages-dev": [ 194 | { 195 | "name": "composer/xdebug-handler", 196 | "version": "1.4.0", 197 | "source": { 198 | "type": "git", 199 | "url": "https://github.com/composer/xdebug-handler.git", 200 | "reference": "cbe23383749496fe0f373345208b79568e4bc248" 201 | }, 202 | "dist": { 203 | "type": "zip", 204 | "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/cbe23383749496fe0f373345208b79568e4bc248", 205 | "reference": "cbe23383749496fe0f373345208b79568e4bc248", 206 | "shasum": "" 207 | }, 208 | "require": { 209 | "php": "^5.3.2 || ^7.0 || ^8.0", 210 | "psr/log": "^1.0" 211 | }, 212 | "require-dev": { 213 | "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" 214 | }, 215 | "type": "library", 216 | "autoload": { 217 | "psr-4": { 218 | "Composer\\XdebugHandler\\": "src" 219 | } 220 | }, 221 | "notification-url": "https://packagist.org/downloads/", 222 | "license": [ 223 | "MIT" 224 | ], 225 | "authors": [ 226 | { 227 | "name": "John Stevenson", 228 | "email": "john-stevenson@blueyonder.co.uk" 229 | } 230 | ], 231 | "description": "Restarts a process without Xdebug.", 232 | "keywords": [ 233 | "Xdebug", 234 | "performance" 235 | ], 236 | "time": "2019-11-06T16:40:04+00:00" 237 | }, 238 | { 239 | "name": "doctrine/instantiator", 240 | "version": "1.3.0", 241 | "source": { 242 | "type": "git", 243 | "url": "https://github.com/doctrine/instantiator.git", 244 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" 245 | }, 246 | "dist": { 247 | "type": "zip", 248 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", 249 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", 250 | "shasum": "" 251 | }, 252 | "require": { 253 | "php": "^7.1" 254 | }, 255 | "require-dev": { 256 | "doctrine/coding-standard": "^6.0", 257 | "ext-pdo": "*", 258 | "ext-phar": "*", 259 | "phpbench/phpbench": "^0.13", 260 | "phpstan/phpstan-phpunit": "^0.11", 261 | "phpstan/phpstan-shim": "^0.11", 262 | "phpunit/phpunit": "^7.0" 263 | }, 264 | "type": "library", 265 | "extra": { 266 | "branch-alias": { 267 | "dev-master": "1.2.x-dev" 268 | } 269 | }, 270 | "autoload": { 271 | "psr-4": { 272 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 273 | } 274 | }, 275 | "notification-url": "https://packagist.org/downloads/", 276 | "license": [ 277 | "MIT" 278 | ], 279 | "authors": [ 280 | { 281 | "name": "Marco Pivetta", 282 | "email": "ocramius@gmail.com", 283 | "homepage": "http://ocramius.github.com/" 284 | } 285 | ], 286 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 287 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 288 | "keywords": [ 289 | "constructor", 290 | "instantiate" 291 | ], 292 | "time": "2019-10-21T16:45:58+00:00" 293 | }, 294 | { 295 | "name": "guzzlehttp/guzzle", 296 | "version": "6.5.2", 297 | "source": { 298 | "type": "git", 299 | "url": "https://github.com/guzzle/guzzle.git", 300 | "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" 301 | }, 302 | "dist": { 303 | "type": "zip", 304 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", 305 | "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", 306 | "shasum": "" 307 | }, 308 | "require": { 309 | "ext-json": "*", 310 | "guzzlehttp/promises": "^1.0", 311 | "guzzlehttp/psr7": "^1.6.1", 312 | "php": ">=5.5" 313 | }, 314 | "require-dev": { 315 | "ext-curl": "*", 316 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", 317 | "psr/log": "^1.1" 318 | }, 319 | "suggest": { 320 | "ext-intl": "Required for Internationalized Domain Name (IDN) support", 321 | "psr/log": "Required for using the Log middleware" 322 | }, 323 | "type": "library", 324 | "extra": { 325 | "branch-alias": { 326 | "dev-master": "6.5-dev" 327 | } 328 | }, 329 | "autoload": { 330 | "psr-4": { 331 | "GuzzleHttp\\": "src/" 332 | }, 333 | "files": [ 334 | "src/functions_include.php" 335 | ] 336 | }, 337 | "notification-url": "https://packagist.org/downloads/", 338 | "license": [ 339 | "MIT" 340 | ], 341 | "authors": [ 342 | { 343 | "name": "Michael Dowling", 344 | "email": "mtdowling@gmail.com", 345 | "homepage": "https://github.com/mtdowling" 346 | } 347 | ], 348 | "description": "Guzzle is a PHP HTTP client library", 349 | "homepage": "http://guzzlephp.org/", 350 | "keywords": [ 351 | "client", 352 | "curl", 353 | "framework", 354 | "http", 355 | "http client", 356 | "rest", 357 | "web service" 358 | ], 359 | "time": "2019-12-23T11:57:10+00:00" 360 | }, 361 | { 362 | "name": "guzzlehttp/promises", 363 | "version": "v1.3.1", 364 | "source": { 365 | "type": "git", 366 | "url": "https://github.com/guzzle/promises.git", 367 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" 368 | }, 369 | "dist": { 370 | "type": "zip", 371 | "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", 372 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", 373 | "shasum": "" 374 | }, 375 | "require": { 376 | "php": ">=5.5.0" 377 | }, 378 | "require-dev": { 379 | "phpunit/phpunit": "^4.0" 380 | }, 381 | "type": "library", 382 | "extra": { 383 | "branch-alias": { 384 | "dev-master": "1.4-dev" 385 | } 386 | }, 387 | "autoload": { 388 | "psr-4": { 389 | "GuzzleHttp\\Promise\\": "src/" 390 | }, 391 | "files": [ 392 | "src/functions_include.php" 393 | ] 394 | }, 395 | "notification-url": "https://packagist.org/downloads/", 396 | "license": [ 397 | "MIT" 398 | ], 399 | "authors": [ 400 | { 401 | "name": "Michael Dowling", 402 | "email": "mtdowling@gmail.com", 403 | "homepage": "https://github.com/mtdowling" 404 | } 405 | ], 406 | "description": "Guzzle promises library", 407 | "keywords": [ 408 | "promise" 409 | ], 410 | "time": "2016-12-20T10:07:11+00:00" 411 | }, 412 | { 413 | "name": "guzzlehttp/psr7", 414 | "version": "1.6.1", 415 | "source": { 416 | "type": "git", 417 | "url": "https://github.com/guzzle/psr7.git", 418 | "reference": "239400de7a173fe9901b9ac7c06497751f00727a" 419 | }, 420 | "dist": { 421 | "type": "zip", 422 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", 423 | "reference": "239400de7a173fe9901b9ac7c06497751f00727a", 424 | "shasum": "" 425 | }, 426 | "require": { 427 | "php": ">=5.4.0", 428 | "psr/http-message": "~1.0", 429 | "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" 430 | }, 431 | "provide": { 432 | "psr/http-message-implementation": "1.0" 433 | }, 434 | "require-dev": { 435 | "ext-zlib": "*", 436 | "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" 437 | }, 438 | "suggest": { 439 | "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" 440 | }, 441 | "type": "library", 442 | "extra": { 443 | "branch-alias": { 444 | "dev-master": "1.6-dev" 445 | } 446 | }, 447 | "autoload": { 448 | "psr-4": { 449 | "GuzzleHttp\\Psr7\\": "src/" 450 | }, 451 | "files": [ 452 | "src/functions_include.php" 453 | ] 454 | }, 455 | "notification-url": "https://packagist.org/downloads/", 456 | "license": [ 457 | "MIT" 458 | ], 459 | "authors": [ 460 | { 461 | "name": "Michael Dowling", 462 | "email": "mtdowling@gmail.com", 463 | "homepage": "https://github.com/mtdowling" 464 | }, 465 | { 466 | "name": "Tobias Schultze", 467 | "homepage": "https://github.com/Tobion" 468 | } 469 | ], 470 | "description": "PSR-7 message implementation that also provides common utility methods", 471 | "keywords": [ 472 | "http", 473 | "message", 474 | "psr-7", 475 | "request", 476 | "response", 477 | "stream", 478 | "uri", 479 | "url" 480 | ], 481 | "time": "2019-07-01T23:21:34+00:00" 482 | }, 483 | { 484 | "name": "myclabs/deep-copy", 485 | "version": "1.9.5", 486 | "source": { 487 | "type": "git", 488 | "url": "https://github.com/myclabs/DeepCopy.git", 489 | "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" 490 | }, 491 | "dist": { 492 | "type": "zip", 493 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", 494 | "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", 495 | "shasum": "" 496 | }, 497 | "require": { 498 | "php": "^7.1" 499 | }, 500 | "replace": { 501 | "myclabs/deep-copy": "self.version" 502 | }, 503 | "require-dev": { 504 | "doctrine/collections": "^1.0", 505 | "doctrine/common": "^2.6", 506 | "phpunit/phpunit": "^7.1" 507 | }, 508 | "type": "library", 509 | "autoload": { 510 | "psr-4": { 511 | "DeepCopy\\": "src/DeepCopy/" 512 | }, 513 | "files": [ 514 | "src/DeepCopy/deep_copy.php" 515 | ] 516 | }, 517 | "notification-url": "https://packagist.org/downloads/", 518 | "license": [ 519 | "MIT" 520 | ], 521 | "description": "Create deep copies (clones) of your objects", 522 | "keywords": [ 523 | "clone", 524 | "copy", 525 | "duplicate", 526 | "object", 527 | "object graph" 528 | ], 529 | "time": "2020-01-17T21:11:47+00:00" 530 | }, 531 | { 532 | "name": "pdepend/pdepend", 533 | "version": "2.7.1", 534 | "source": { 535 | "type": "git", 536 | "url": "https://github.com/pdepend/pdepend.git", 537 | "reference": "daba1cf0a6edaf172fa02a17807ae29f4c1c7471" 538 | }, 539 | "dist": { 540 | "type": "zip", 541 | "url": "https://api.github.com/repos/pdepend/pdepend/zipball/daba1cf0a6edaf172fa02a17807ae29f4c1c7471", 542 | "reference": "daba1cf0a6edaf172fa02a17807ae29f4c1c7471", 543 | "shasum": "" 544 | }, 545 | "require": { 546 | "php": ">=5.3.7", 547 | "symfony/config": "^2.3.0|^3|^4|^5", 548 | "symfony/dependency-injection": "^2.3.0|^3|^4|^5", 549 | "symfony/filesystem": "^2.3.0|^3|^4|^5" 550 | }, 551 | "require-dev": { 552 | "easy-doc/easy-doc": "0.0.0 || ^1.2.3", 553 | "gregwar/rst": "^1.0", 554 | "phpunit/phpunit": "^4.8.35|^5.7", 555 | "squizlabs/php_codesniffer": "^2.0.0" 556 | }, 557 | "bin": [ 558 | "src/bin/pdepend" 559 | ], 560 | "type": "library", 561 | "extra": { 562 | "branch-alias": { 563 | "dev-master": "2.x-dev" 564 | } 565 | }, 566 | "autoload": { 567 | "psr-4": { 568 | "PDepend\\": "src/main/php/PDepend" 569 | } 570 | }, 571 | "notification-url": "https://packagist.org/downloads/", 572 | "license": [ 573 | "BSD-3-Clause" 574 | ], 575 | "description": "Official version of pdepend to be handled with Composer", 576 | "time": "2020-02-08T12:06:13+00:00" 577 | }, 578 | { 579 | "name": "phar-io/manifest", 580 | "version": "1.0.3", 581 | "source": { 582 | "type": "git", 583 | "url": "https://github.com/phar-io/manifest.git", 584 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" 585 | }, 586 | "dist": { 587 | "type": "zip", 588 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 589 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 590 | "shasum": "" 591 | }, 592 | "require": { 593 | "ext-dom": "*", 594 | "ext-phar": "*", 595 | "phar-io/version": "^2.0", 596 | "php": "^5.6 || ^7.0" 597 | }, 598 | "type": "library", 599 | "extra": { 600 | "branch-alias": { 601 | "dev-master": "1.0.x-dev" 602 | } 603 | }, 604 | "autoload": { 605 | "classmap": [ 606 | "src/" 607 | ] 608 | }, 609 | "notification-url": "https://packagist.org/downloads/", 610 | "license": [ 611 | "BSD-3-Clause" 612 | ], 613 | "authors": [ 614 | { 615 | "name": "Arne Blankerts", 616 | "email": "arne@blankerts.de", 617 | "role": "Developer" 618 | }, 619 | { 620 | "name": "Sebastian Heuer", 621 | "email": "sebastian@phpeople.de", 622 | "role": "Developer" 623 | }, 624 | { 625 | "name": "Sebastian Bergmann", 626 | "email": "sebastian@phpunit.de", 627 | "role": "Developer" 628 | } 629 | ], 630 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 631 | "time": "2018-07-08T19:23:20+00:00" 632 | }, 633 | { 634 | "name": "phar-io/version", 635 | "version": "2.0.1", 636 | "source": { 637 | "type": "git", 638 | "url": "https://github.com/phar-io/version.git", 639 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" 640 | }, 641 | "dist": { 642 | "type": "zip", 643 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", 644 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", 645 | "shasum": "" 646 | }, 647 | "require": { 648 | "php": "^5.6 || ^7.0" 649 | }, 650 | "type": "library", 651 | "autoload": { 652 | "classmap": [ 653 | "src/" 654 | ] 655 | }, 656 | "notification-url": "https://packagist.org/downloads/", 657 | "license": [ 658 | "BSD-3-Clause" 659 | ], 660 | "authors": [ 661 | { 662 | "name": "Arne Blankerts", 663 | "email": "arne@blankerts.de", 664 | "role": "Developer" 665 | }, 666 | { 667 | "name": "Sebastian Heuer", 668 | "email": "sebastian@phpeople.de", 669 | "role": "Developer" 670 | }, 671 | { 672 | "name": "Sebastian Bergmann", 673 | "email": "sebastian@phpunit.de", 674 | "role": "Developer" 675 | } 676 | ], 677 | "description": "Library for handling version information and constraints", 678 | "time": "2018-07-08T19:19:57+00:00" 679 | }, 680 | { 681 | "name": "php-coveralls/php-coveralls", 682 | "version": "v2.2.0", 683 | "source": { 684 | "type": "git", 685 | "url": "https://github.com/php-coveralls/php-coveralls.git", 686 | "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae" 687 | }, 688 | "dist": { 689 | "type": "zip", 690 | "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3e6420fa666ef7bae5e750ddeac903153e193bae", 691 | "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae", 692 | "shasum": "" 693 | }, 694 | "require": { 695 | "ext-json": "*", 696 | "ext-simplexml": "*", 697 | "guzzlehttp/guzzle": "^6.0", 698 | "php": "^5.5 || ^7.0", 699 | "psr/log": "^1.0", 700 | "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0", 701 | "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0", 702 | "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0", 703 | "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0" 704 | }, 705 | "require-dev": { 706 | "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" 707 | }, 708 | "suggest": { 709 | "symfony/http-kernel": "Allows Symfony integration" 710 | }, 711 | "bin": [ 712 | "bin/php-coveralls" 713 | ], 714 | "type": "library", 715 | "extra": { 716 | "branch-alias": { 717 | "dev-master": "2.2-dev" 718 | } 719 | }, 720 | "autoload": { 721 | "psr-4": { 722 | "PhpCoveralls\\": "src/" 723 | } 724 | }, 725 | "notification-url": "https://packagist.org/downloads/", 726 | "license": [ 727 | "MIT" 728 | ], 729 | "authors": [ 730 | { 731 | "name": "Kitamura Satoshi", 732 | "email": "with.no.parachute@gmail.com", 733 | "homepage": "https://www.facebook.com/satooshi.jp", 734 | "role": "Original creator" 735 | }, 736 | { 737 | "name": "Takashi Matsuo", 738 | "email": "tmatsuo@google.com" 739 | }, 740 | { 741 | "name": "Google Inc" 742 | }, 743 | { 744 | "name": "Dariusz Ruminski", 745 | "email": "dariusz.ruminski@gmail.com", 746 | "homepage": "https://github.com/keradus" 747 | }, 748 | { 749 | "name": "Contributors", 750 | "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" 751 | } 752 | ], 753 | "description": "PHP client library for Coveralls API", 754 | "homepage": "https://github.com/php-coveralls/php-coveralls", 755 | "keywords": [ 756 | "ci", 757 | "coverage", 758 | "github", 759 | "test" 760 | ], 761 | "time": "2019-11-20T16:29:20+00:00" 762 | }, 763 | { 764 | "name": "phpdocumentor/reflection-common", 765 | "version": "2.0.0", 766 | "source": { 767 | "type": "git", 768 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 769 | "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" 770 | }, 771 | "dist": { 772 | "type": "zip", 773 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", 774 | "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", 775 | "shasum": "" 776 | }, 777 | "require": { 778 | "php": ">=7.1" 779 | }, 780 | "require-dev": { 781 | "phpunit/phpunit": "~6" 782 | }, 783 | "type": "library", 784 | "extra": { 785 | "branch-alias": { 786 | "dev-master": "2.x-dev" 787 | } 788 | }, 789 | "autoload": { 790 | "psr-4": { 791 | "phpDocumentor\\Reflection\\": "src/" 792 | } 793 | }, 794 | "notification-url": "https://packagist.org/downloads/", 795 | "license": [ 796 | "MIT" 797 | ], 798 | "authors": [ 799 | { 800 | "name": "Jaap van Otterdijk", 801 | "email": "opensource@ijaap.nl" 802 | } 803 | ], 804 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 805 | "homepage": "http://www.phpdoc.org", 806 | "keywords": [ 807 | "FQSEN", 808 | "phpDocumentor", 809 | "phpdoc", 810 | "reflection", 811 | "static analysis" 812 | ], 813 | "time": "2018-08-07T13:53:10+00:00" 814 | }, 815 | { 816 | "name": "phpdocumentor/reflection-docblock", 817 | "version": "5.1.0", 818 | "source": { 819 | "type": "git", 820 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 821 | "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" 822 | }, 823 | "dist": { 824 | "type": "zip", 825 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", 826 | "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", 827 | "shasum": "" 828 | }, 829 | "require": { 830 | "ext-filter": "^7.1", 831 | "php": "^7.2", 832 | "phpdocumentor/reflection-common": "^2.0", 833 | "phpdocumentor/type-resolver": "^1.0", 834 | "webmozart/assert": "^1" 835 | }, 836 | "require-dev": { 837 | "doctrine/instantiator": "^1", 838 | "mockery/mockery": "^1" 839 | }, 840 | "type": "library", 841 | "extra": { 842 | "branch-alias": { 843 | "dev-master": "5.x-dev" 844 | } 845 | }, 846 | "autoload": { 847 | "psr-4": { 848 | "phpDocumentor\\Reflection\\": "src" 849 | } 850 | }, 851 | "notification-url": "https://packagist.org/downloads/", 852 | "license": [ 853 | "MIT" 854 | ], 855 | "authors": [ 856 | { 857 | "name": "Mike van Riel", 858 | "email": "me@mikevanriel.com" 859 | }, 860 | { 861 | "name": "Jaap van Otterdijk", 862 | "email": "account@ijaap.nl" 863 | } 864 | ], 865 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 866 | "time": "2020-02-22T12:28:44+00:00" 867 | }, 868 | { 869 | "name": "phpdocumentor/type-resolver", 870 | "version": "1.0.1", 871 | "source": { 872 | "type": "git", 873 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 874 | "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" 875 | }, 876 | "dist": { 877 | "type": "zip", 878 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", 879 | "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", 880 | "shasum": "" 881 | }, 882 | "require": { 883 | "php": "^7.1", 884 | "phpdocumentor/reflection-common": "^2.0" 885 | }, 886 | "require-dev": { 887 | "ext-tokenizer": "^7.1", 888 | "mockery/mockery": "~1", 889 | "phpunit/phpunit": "^7.0" 890 | }, 891 | "type": "library", 892 | "extra": { 893 | "branch-alias": { 894 | "dev-master": "1.x-dev" 895 | } 896 | }, 897 | "autoload": { 898 | "psr-4": { 899 | "phpDocumentor\\Reflection\\": "src" 900 | } 901 | }, 902 | "notification-url": "https://packagist.org/downloads/", 903 | "license": [ 904 | "MIT" 905 | ], 906 | "authors": [ 907 | { 908 | "name": "Mike van Riel", 909 | "email": "me@mikevanriel.com" 910 | } 911 | ], 912 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 913 | "time": "2019-08-22T18:11:29+00:00" 914 | }, 915 | { 916 | "name": "phploc/phploc", 917 | "version": "5.0.0", 918 | "source": { 919 | "type": "git", 920 | "url": "https://github.com/sebastianbergmann/phploc.git", 921 | "reference": "5b714ccb7cb8ca29ccf9caf6eb1aed0131d3a884" 922 | }, 923 | "dist": { 924 | "type": "zip", 925 | "url": "https://api.github.com/repos/sebastianbergmann/phploc/zipball/5b714ccb7cb8ca29ccf9caf6eb1aed0131d3a884", 926 | "reference": "5b714ccb7cb8ca29ccf9caf6eb1aed0131d3a884", 927 | "shasum": "" 928 | }, 929 | "require": { 930 | "php": "^7.2", 931 | "sebastian/finder-facade": "^1.1", 932 | "sebastian/version": "^2.0", 933 | "symfony/console": "^4.0" 934 | }, 935 | "bin": [ 936 | "phploc" 937 | ], 938 | "type": "library", 939 | "extra": { 940 | "branch-alias": { 941 | "dev-master": "5.0-dev" 942 | } 943 | }, 944 | "autoload": { 945 | "classmap": [ 946 | "src/" 947 | ] 948 | }, 949 | "notification-url": "https://packagist.org/downloads/", 950 | "license": [ 951 | "BSD-3-Clause" 952 | ], 953 | "authors": [ 954 | { 955 | "name": "Sebastian Bergmann", 956 | "email": "sebastian@phpunit.de", 957 | "role": "lead" 958 | } 959 | ], 960 | "description": "A tool for quickly measuring the size of a PHP project.", 961 | "homepage": "https://github.com/sebastianbergmann/phploc", 962 | "time": "2019-03-16T10:41:19+00:00" 963 | }, 964 | { 965 | "name": "phpmd/phpmd", 966 | "version": "2.8.2", 967 | "source": { 968 | "type": "git", 969 | "url": "https://github.com/phpmd/phpmd.git", 970 | "reference": "714629ed782537f638fe23c4346637659b779a77" 971 | }, 972 | "dist": { 973 | "type": "zip", 974 | "url": "https://api.github.com/repos/phpmd/phpmd/zipball/714629ed782537f638fe23c4346637659b779a77", 975 | "reference": "714629ed782537f638fe23c4346637659b779a77", 976 | "shasum": "" 977 | }, 978 | "require": { 979 | "composer/xdebug-handler": "^1.0", 980 | "ext-xml": "*", 981 | "pdepend/pdepend": "^2.7.1", 982 | "php": ">=5.3.9" 983 | }, 984 | "require-dev": { 985 | "easy-doc/easy-doc": "0.0.0 || ^1.3.2", 986 | "gregwar/rst": "^1.0", 987 | "mikey179/vfsstream": "^1.6.4", 988 | "phpunit/phpunit": "^4.8.36 || ^5.7.27", 989 | "squizlabs/php_codesniffer": "^2.0" 990 | }, 991 | "bin": [ 992 | "src/bin/phpmd" 993 | ], 994 | "type": "library", 995 | "autoload": { 996 | "psr-0": { 997 | "PHPMD\\": "src/main/php" 998 | } 999 | }, 1000 | "notification-url": "https://packagist.org/downloads/", 1001 | "license": [ 1002 | "BSD-3-Clause" 1003 | ], 1004 | "authors": [ 1005 | { 1006 | "name": "Manuel Pichler", 1007 | "email": "github@manuel-pichler.de", 1008 | "homepage": "https://github.com/manuelpichler", 1009 | "role": "Project Founder" 1010 | }, 1011 | { 1012 | "name": "Marc Würth", 1013 | "email": "ravage@bluewin.ch", 1014 | "homepage": "https://github.com/ravage84", 1015 | "role": "Project Maintainer" 1016 | }, 1017 | { 1018 | "name": "Other contributors", 1019 | "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", 1020 | "role": "Contributors" 1021 | } 1022 | ], 1023 | "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", 1024 | "homepage": "https://phpmd.org/", 1025 | "keywords": [ 1026 | "mess detection", 1027 | "mess detector", 1028 | "pdepend", 1029 | "phpmd", 1030 | "pmd" 1031 | ], 1032 | "time": "2020-02-16T20:15:50+00:00" 1033 | }, 1034 | { 1035 | "name": "phpspec/prophecy", 1036 | "version": "v1.10.2", 1037 | "source": { 1038 | "type": "git", 1039 | "url": "https://github.com/phpspec/prophecy.git", 1040 | "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9" 1041 | }, 1042 | "dist": { 1043 | "type": "zip", 1044 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b4400efc9d206e83138e2bb97ed7f5b14b831cd9", 1045 | "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9", 1046 | "shasum": "" 1047 | }, 1048 | "require": { 1049 | "doctrine/instantiator": "^1.0.2", 1050 | "php": "^5.3|^7.0", 1051 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", 1052 | "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", 1053 | "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" 1054 | }, 1055 | "require-dev": { 1056 | "phpspec/phpspec": "^2.5 || ^3.2", 1057 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" 1058 | }, 1059 | "type": "library", 1060 | "extra": { 1061 | "branch-alias": { 1062 | "dev-master": "1.10.x-dev" 1063 | } 1064 | }, 1065 | "autoload": { 1066 | "psr-4": { 1067 | "Prophecy\\": "src/Prophecy" 1068 | } 1069 | }, 1070 | "notification-url": "https://packagist.org/downloads/", 1071 | "license": [ 1072 | "MIT" 1073 | ], 1074 | "authors": [ 1075 | { 1076 | "name": "Konstantin Kudryashov", 1077 | "email": "ever.zet@gmail.com", 1078 | "homepage": "http://everzet.com" 1079 | }, 1080 | { 1081 | "name": "Marcello Duarte", 1082 | "email": "marcello.duarte@gmail.com" 1083 | } 1084 | ], 1085 | "description": "Highly opinionated mocking framework for PHP 5.3+", 1086 | "homepage": "https://github.com/phpspec/prophecy", 1087 | "keywords": [ 1088 | "Double", 1089 | "Dummy", 1090 | "fake", 1091 | "mock", 1092 | "spy", 1093 | "stub" 1094 | ], 1095 | "time": "2020-01-20T15:57:02+00:00" 1096 | }, 1097 | { 1098 | "name": "phpunit/php-code-coverage", 1099 | "version": "6.1.4", 1100 | "source": { 1101 | "type": "git", 1102 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1103 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" 1104 | }, 1105 | "dist": { 1106 | "type": "zip", 1107 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", 1108 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", 1109 | "shasum": "" 1110 | }, 1111 | "require": { 1112 | "ext-dom": "*", 1113 | "ext-xmlwriter": "*", 1114 | "php": "^7.1", 1115 | "phpunit/php-file-iterator": "^2.0", 1116 | "phpunit/php-text-template": "^1.2.1", 1117 | "phpunit/php-token-stream": "^3.0", 1118 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 1119 | "sebastian/environment": "^3.1 || ^4.0", 1120 | "sebastian/version": "^2.0.1", 1121 | "theseer/tokenizer": "^1.1" 1122 | }, 1123 | "require-dev": { 1124 | "phpunit/phpunit": "^7.0" 1125 | }, 1126 | "suggest": { 1127 | "ext-xdebug": "^2.6.0" 1128 | }, 1129 | "type": "library", 1130 | "extra": { 1131 | "branch-alias": { 1132 | "dev-master": "6.1-dev" 1133 | } 1134 | }, 1135 | "autoload": { 1136 | "classmap": [ 1137 | "src/" 1138 | ] 1139 | }, 1140 | "notification-url": "https://packagist.org/downloads/", 1141 | "license": [ 1142 | "BSD-3-Clause" 1143 | ], 1144 | "authors": [ 1145 | { 1146 | "name": "Sebastian Bergmann", 1147 | "email": "sebastian@phpunit.de", 1148 | "role": "lead" 1149 | } 1150 | ], 1151 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1152 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1153 | "keywords": [ 1154 | "coverage", 1155 | "testing", 1156 | "xunit" 1157 | ], 1158 | "time": "2018-10-31T16:06:48+00:00" 1159 | }, 1160 | { 1161 | "name": "phpunit/php-file-iterator", 1162 | "version": "2.0.2", 1163 | "source": { 1164 | "type": "git", 1165 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1166 | "reference": "050bedf145a257b1ff02746c31894800e5122946" 1167 | }, 1168 | "dist": { 1169 | "type": "zip", 1170 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", 1171 | "reference": "050bedf145a257b1ff02746c31894800e5122946", 1172 | "shasum": "" 1173 | }, 1174 | "require": { 1175 | "php": "^7.1" 1176 | }, 1177 | "require-dev": { 1178 | "phpunit/phpunit": "^7.1" 1179 | }, 1180 | "type": "library", 1181 | "extra": { 1182 | "branch-alias": { 1183 | "dev-master": "2.0.x-dev" 1184 | } 1185 | }, 1186 | "autoload": { 1187 | "classmap": [ 1188 | "src/" 1189 | ] 1190 | }, 1191 | "notification-url": "https://packagist.org/downloads/", 1192 | "license": [ 1193 | "BSD-3-Clause" 1194 | ], 1195 | "authors": [ 1196 | { 1197 | "name": "Sebastian Bergmann", 1198 | "email": "sebastian@phpunit.de", 1199 | "role": "lead" 1200 | } 1201 | ], 1202 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1203 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1204 | "keywords": [ 1205 | "filesystem", 1206 | "iterator" 1207 | ], 1208 | "time": "2018-09-13T20:33:42+00:00" 1209 | }, 1210 | { 1211 | "name": "phpunit/php-text-template", 1212 | "version": "1.2.1", 1213 | "source": { 1214 | "type": "git", 1215 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1216 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 1217 | }, 1218 | "dist": { 1219 | "type": "zip", 1220 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1221 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1222 | "shasum": "" 1223 | }, 1224 | "require": { 1225 | "php": ">=5.3.3" 1226 | }, 1227 | "type": "library", 1228 | "autoload": { 1229 | "classmap": [ 1230 | "src/" 1231 | ] 1232 | }, 1233 | "notification-url": "https://packagist.org/downloads/", 1234 | "license": [ 1235 | "BSD-3-Clause" 1236 | ], 1237 | "authors": [ 1238 | { 1239 | "name": "Sebastian Bergmann", 1240 | "email": "sebastian@phpunit.de", 1241 | "role": "lead" 1242 | } 1243 | ], 1244 | "description": "Simple template engine.", 1245 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1246 | "keywords": [ 1247 | "template" 1248 | ], 1249 | "time": "2015-06-21T13:50:34+00:00" 1250 | }, 1251 | { 1252 | "name": "phpunit/php-timer", 1253 | "version": "2.1.2", 1254 | "source": { 1255 | "type": "git", 1256 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1257 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" 1258 | }, 1259 | "dist": { 1260 | "type": "zip", 1261 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", 1262 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", 1263 | "shasum": "" 1264 | }, 1265 | "require": { 1266 | "php": "^7.1" 1267 | }, 1268 | "require-dev": { 1269 | "phpunit/phpunit": "^7.0" 1270 | }, 1271 | "type": "library", 1272 | "extra": { 1273 | "branch-alias": { 1274 | "dev-master": "2.1-dev" 1275 | } 1276 | }, 1277 | "autoload": { 1278 | "classmap": [ 1279 | "src/" 1280 | ] 1281 | }, 1282 | "notification-url": "https://packagist.org/downloads/", 1283 | "license": [ 1284 | "BSD-3-Clause" 1285 | ], 1286 | "authors": [ 1287 | { 1288 | "name": "Sebastian Bergmann", 1289 | "email": "sebastian@phpunit.de", 1290 | "role": "lead" 1291 | } 1292 | ], 1293 | "description": "Utility class for timing", 1294 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1295 | "keywords": [ 1296 | "timer" 1297 | ], 1298 | "time": "2019-06-07T04:22:29+00:00" 1299 | }, 1300 | { 1301 | "name": "phpunit/php-token-stream", 1302 | "version": "3.1.1", 1303 | "source": { 1304 | "type": "git", 1305 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1306 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" 1307 | }, 1308 | "dist": { 1309 | "type": "zip", 1310 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", 1311 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", 1312 | "shasum": "" 1313 | }, 1314 | "require": { 1315 | "ext-tokenizer": "*", 1316 | "php": "^7.1" 1317 | }, 1318 | "require-dev": { 1319 | "phpunit/phpunit": "^7.0" 1320 | }, 1321 | "type": "library", 1322 | "extra": { 1323 | "branch-alias": { 1324 | "dev-master": "3.1-dev" 1325 | } 1326 | }, 1327 | "autoload": { 1328 | "classmap": [ 1329 | "src/" 1330 | ] 1331 | }, 1332 | "notification-url": "https://packagist.org/downloads/", 1333 | "license": [ 1334 | "BSD-3-Clause" 1335 | ], 1336 | "authors": [ 1337 | { 1338 | "name": "Sebastian Bergmann", 1339 | "email": "sebastian@phpunit.de" 1340 | } 1341 | ], 1342 | "description": "Wrapper around PHP's tokenizer extension.", 1343 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1344 | "keywords": [ 1345 | "tokenizer" 1346 | ], 1347 | "time": "2019-09-17T06:23:10+00:00" 1348 | }, 1349 | { 1350 | "name": "phpunit/phpunit", 1351 | "version": "7.5.20", 1352 | "source": { 1353 | "type": "git", 1354 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1355 | "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" 1356 | }, 1357 | "dist": { 1358 | "type": "zip", 1359 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", 1360 | "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", 1361 | "shasum": "" 1362 | }, 1363 | "require": { 1364 | "doctrine/instantiator": "^1.1", 1365 | "ext-dom": "*", 1366 | "ext-json": "*", 1367 | "ext-libxml": "*", 1368 | "ext-mbstring": "*", 1369 | "ext-xml": "*", 1370 | "myclabs/deep-copy": "^1.7", 1371 | "phar-io/manifest": "^1.0.2", 1372 | "phar-io/version": "^2.0", 1373 | "php": "^7.1", 1374 | "phpspec/prophecy": "^1.7", 1375 | "phpunit/php-code-coverage": "^6.0.7", 1376 | "phpunit/php-file-iterator": "^2.0.1", 1377 | "phpunit/php-text-template": "^1.2.1", 1378 | "phpunit/php-timer": "^2.1", 1379 | "sebastian/comparator": "^3.0", 1380 | "sebastian/diff": "^3.0", 1381 | "sebastian/environment": "^4.0", 1382 | "sebastian/exporter": "^3.1", 1383 | "sebastian/global-state": "^2.0", 1384 | "sebastian/object-enumerator": "^3.0.3", 1385 | "sebastian/resource-operations": "^2.0", 1386 | "sebastian/version": "^2.0.1" 1387 | }, 1388 | "conflict": { 1389 | "phpunit/phpunit-mock-objects": "*" 1390 | }, 1391 | "require-dev": { 1392 | "ext-pdo": "*" 1393 | }, 1394 | "suggest": { 1395 | "ext-soap": "*", 1396 | "ext-xdebug": "*", 1397 | "phpunit/php-invoker": "^2.0" 1398 | }, 1399 | "bin": [ 1400 | "phpunit" 1401 | ], 1402 | "type": "library", 1403 | "extra": { 1404 | "branch-alias": { 1405 | "dev-master": "7.5-dev" 1406 | } 1407 | }, 1408 | "autoload": { 1409 | "classmap": [ 1410 | "src/" 1411 | ] 1412 | }, 1413 | "notification-url": "https://packagist.org/downloads/", 1414 | "license": [ 1415 | "BSD-3-Clause" 1416 | ], 1417 | "authors": [ 1418 | { 1419 | "name": "Sebastian Bergmann", 1420 | "email": "sebastian@phpunit.de", 1421 | "role": "lead" 1422 | } 1423 | ], 1424 | "description": "The PHP Unit Testing framework.", 1425 | "homepage": "https://phpunit.de/", 1426 | "keywords": [ 1427 | "phpunit", 1428 | "testing", 1429 | "xunit" 1430 | ], 1431 | "time": "2020-01-08T08:45:45+00:00" 1432 | }, 1433 | { 1434 | "name": "psr/container", 1435 | "version": "1.0.0", 1436 | "source": { 1437 | "type": "git", 1438 | "url": "https://github.com/php-fig/container.git", 1439 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 1440 | }, 1441 | "dist": { 1442 | "type": "zip", 1443 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 1444 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 1445 | "shasum": "" 1446 | }, 1447 | "require": { 1448 | "php": ">=5.3.0" 1449 | }, 1450 | "type": "library", 1451 | "extra": { 1452 | "branch-alias": { 1453 | "dev-master": "1.0.x-dev" 1454 | } 1455 | }, 1456 | "autoload": { 1457 | "psr-4": { 1458 | "Psr\\Container\\": "src/" 1459 | } 1460 | }, 1461 | "notification-url": "https://packagist.org/downloads/", 1462 | "license": [ 1463 | "MIT" 1464 | ], 1465 | "authors": [ 1466 | { 1467 | "name": "PHP-FIG", 1468 | "homepage": "http://www.php-fig.org/" 1469 | } 1470 | ], 1471 | "description": "Common Container Interface (PHP FIG PSR-11)", 1472 | "homepage": "https://github.com/php-fig/container", 1473 | "keywords": [ 1474 | "PSR-11", 1475 | "container", 1476 | "container-interface", 1477 | "container-interop", 1478 | "psr" 1479 | ], 1480 | "time": "2017-02-14T16:28:37+00:00" 1481 | }, 1482 | { 1483 | "name": "psr/http-message", 1484 | "version": "1.0.1", 1485 | "source": { 1486 | "type": "git", 1487 | "url": "https://github.com/php-fig/http-message.git", 1488 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 1489 | }, 1490 | "dist": { 1491 | "type": "zip", 1492 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 1493 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 1494 | "shasum": "" 1495 | }, 1496 | "require": { 1497 | "php": ">=5.3.0" 1498 | }, 1499 | "type": "library", 1500 | "extra": { 1501 | "branch-alias": { 1502 | "dev-master": "1.0.x-dev" 1503 | } 1504 | }, 1505 | "autoload": { 1506 | "psr-4": { 1507 | "Psr\\Http\\Message\\": "src/" 1508 | } 1509 | }, 1510 | "notification-url": "https://packagist.org/downloads/", 1511 | "license": [ 1512 | "MIT" 1513 | ], 1514 | "authors": [ 1515 | { 1516 | "name": "PHP-FIG", 1517 | "homepage": "http://www.php-fig.org/" 1518 | } 1519 | ], 1520 | "description": "Common interface for HTTP messages", 1521 | "homepage": "https://github.com/php-fig/http-message", 1522 | "keywords": [ 1523 | "http", 1524 | "http-message", 1525 | "psr", 1526 | "psr-7", 1527 | "request", 1528 | "response" 1529 | ], 1530 | "time": "2016-08-06T14:39:51+00:00" 1531 | }, 1532 | { 1533 | "name": "psr/log", 1534 | "version": "1.1.2", 1535 | "source": { 1536 | "type": "git", 1537 | "url": "https://github.com/php-fig/log.git", 1538 | "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" 1539 | }, 1540 | "dist": { 1541 | "type": "zip", 1542 | "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", 1543 | "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", 1544 | "shasum": "" 1545 | }, 1546 | "require": { 1547 | "php": ">=5.3.0" 1548 | }, 1549 | "type": "library", 1550 | "extra": { 1551 | "branch-alias": { 1552 | "dev-master": "1.1.x-dev" 1553 | } 1554 | }, 1555 | "autoload": { 1556 | "psr-4": { 1557 | "Psr\\Log\\": "Psr/Log/" 1558 | } 1559 | }, 1560 | "notification-url": "https://packagist.org/downloads/", 1561 | "license": [ 1562 | "MIT" 1563 | ], 1564 | "authors": [ 1565 | { 1566 | "name": "PHP-FIG", 1567 | "homepage": "http://www.php-fig.org/" 1568 | } 1569 | ], 1570 | "description": "Common interface for logging libraries", 1571 | "homepage": "https://github.com/php-fig/log", 1572 | "keywords": [ 1573 | "log", 1574 | "psr", 1575 | "psr-3" 1576 | ], 1577 | "time": "2019-11-01T11:05:21+00:00" 1578 | }, 1579 | { 1580 | "name": "ralouphie/getallheaders", 1581 | "version": "3.0.3", 1582 | "source": { 1583 | "type": "git", 1584 | "url": "https://github.com/ralouphie/getallheaders.git", 1585 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 1586 | }, 1587 | "dist": { 1588 | "type": "zip", 1589 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 1590 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 1591 | "shasum": "" 1592 | }, 1593 | "require": { 1594 | "php": ">=5.6" 1595 | }, 1596 | "require-dev": { 1597 | "php-coveralls/php-coveralls": "^2.1", 1598 | "phpunit/phpunit": "^5 || ^6.5" 1599 | }, 1600 | "type": "library", 1601 | "autoload": { 1602 | "files": [ 1603 | "src/getallheaders.php" 1604 | ] 1605 | }, 1606 | "notification-url": "https://packagist.org/downloads/", 1607 | "license": [ 1608 | "MIT" 1609 | ], 1610 | "authors": [ 1611 | { 1612 | "name": "Ralph Khattar", 1613 | "email": "ralph.khattar@gmail.com" 1614 | } 1615 | ], 1616 | "description": "A polyfill for getallheaders.", 1617 | "time": "2019-03-08T08:55:37+00:00" 1618 | }, 1619 | { 1620 | "name": "roave/security-advisories", 1621 | "version": "dev-master", 1622 | "source": { 1623 | "type": "git", 1624 | "url": "https://github.com/Roave/SecurityAdvisories.git", 1625 | "reference": "1df6b9d09d2b074fd3f0f10a7696d9f797d4772c" 1626 | }, 1627 | "dist": { 1628 | "type": "zip", 1629 | "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/1df6b9d09d2b074fd3f0f10a7696d9f797d4772c", 1630 | "reference": "1df6b9d09d2b074fd3f0f10a7696d9f797d4772c", 1631 | "shasum": "" 1632 | }, 1633 | "conflict": { 1634 | "3f/pygmentize": "<1.2", 1635 | "adodb/adodb-php": "<5.20.12", 1636 | "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", 1637 | "amphp/artax": "<1.0.6|>=2,<2.0.6", 1638 | "amphp/http": "<1.0.1", 1639 | "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6", 1640 | "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", 1641 | "aws/aws-sdk-php": ">=3,<3.2.1", 1642 | "bagisto/bagisto": "<0.1.5", 1643 | "bolt/bolt": "<3.6.10", 1644 | "brightlocal/phpwhois": "<=4.2.5", 1645 | "bugsnag/bugsnag-laravel": ">=2,<2.0.2", 1646 | "cakephp/cakephp": ">=1.3,<1.3.18|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=2.7,<2.7.6|>=3,<3.5.18|>=3.6,<3.6.15|>=3.7,<3.7.7", 1647 | "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", 1648 | "cartalyst/sentry": "<=2.1.6", 1649 | "centreon/centreon": "<18.10.8|>=19,<19.4.5", 1650 | "cesnet/simplesamlphp-module-proxystatistics": "<3.1", 1651 | "codeigniter/framework": "<=3.0.6", 1652 | "composer/composer": "<=1-alpha.11", 1653 | "contao-components/mediaelement": ">=2.14.2,<2.21.1", 1654 | "contao/core": ">=2,<3.5.39", 1655 | "contao/core-bundle": ">=4,<4.4.46|>=4.5,<4.8.6", 1656 | "contao/listing-bundle": ">=4,<4.4.8", 1657 | "datadog/dd-trace": ">=0.30,<0.30.2", 1658 | "david-garcia/phpwhois": "<=4.3.1", 1659 | "doctrine/annotations": ">=1,<1.2.7", 1660 | "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", 1661 | "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", 1662 | "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2", 1663 | "doctrine/doctrine-bundle": "<1.5.2", 1664 | "doctrine/doctrine-module": "<=0.7.1", 1665 | "doctrine/mongodb-odm": ">=1,<1.0.2", 1666 | "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", 1667 | "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", 1668 | "dolibarr/dolibarr": "<=10.0.6", 1669 | "dompdf/dompdf": ">=0.6,<0.6.2", 1670 | "drupal/core": ">=7,<7.69|>=8,<8.7.11|>=8.8,<8.8.1", 1671 | "drupal/drupal": ">=7,<7.69|>=8,<8.7.11|>=8.8,<8.8.1", 1672 | "endroid/qr-code-bundle": "<3.4.2", 1673 | "enshrined/svg-sanitize": "<0.12", 1674 | "erusev/parsedown": "<1.7.2", 1675 | "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1", 1676 | "ezsystems/ezplatform": ">=1.7,<1.7.9.1|>=1.13,<1.13.5.1|>=2.5,<2.5.4", 1677 | "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6", 1678 | "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2", 1679 | "ezsystems/ezplatform-user": ">=1,<1.0.1", 1680 | "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.13.1|>=6,<6.7.9.1|>=6.8,<6.13.5.1|>=7,<7.2.4.1|>=7.3,<7.3.2.1", 1681 | "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.6|>=5.4,<5.4.12.3|>=2011,<2017.12.4.3|>=2018.6,<2018.6.1.4|>=2018.9,<2018.9.1.3", 1682 | "ezsystems/repository-forms": ">=2.3,<2.3.2.1", 1683 | "ezyang/htmlpurifier": "<4.1.1", 1684 | "firebase/php-jwt": "<2", 1685 | "fooman/tcpdf": "<6.2.22", 1686 | "fossar/tcpdf-parser": "<6.2.22", 1687 | "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", 1688 | "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", 1689 | "fuel/core": "<1.8.1", 1690 | "getgrav/grav": "<1.7-beta.8", 1691 | "gree/jose": "<=2.2", 1692 | "gregwar/rst": "<1.0.3", 1693 | "guzzlehttp/guzzle": ">=4-rc.2,<4.2.4|>=5,<5.3.1|>=6,<6.2.1", 1694 | "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", 1695 | "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.42|>=5.6,<5.6.30", 1696 | "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29", 1697 | "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", 1698 | "ivankristianto/phpwhois": "<=4.3", 1699 | "james-heinrich/getid3": "<1.9.9", 1700 | "joomla/session": "<1.3.1", 1701 | "jsmitty12/phpwhois": "<5.1", 1702 | "kazist/phpwhois": "<=4.2.6", 1703 | "kreait/firebase-php": ">=3.2,<3.8.1", 1704 | "la-haute-societe/tcpdf": "<6.2.22", 1705 | "laravel/framework": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.42|>=5.6,<5.6.30", 1706 | "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", 1707 | "league/commonmark": "<0.18.3", 1708 | "librenms/librenms": "<1.53", 1709 | "magento/community-edition": ">=2,<2.2.10|>=2.3,<2.3.3", 1710 | "magento/magento1ce": "<1.9.4.3", 1711 | "magento/magento1ee": ">=1,<1.14.4.3", 1712 | "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", 1713 | "monolog/monolog": ">=1.8,<1.12", 1714 | "namshi/jose": "<2.2", 1715 | "onelogin/php-saml": "<2.10.4", 1716 | "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", 1717 | "openid/php-openid": "<2.3", 1718 | "oro/crm": ">=1.7,<1.7.4", 1719 | "oro/platform": ">=1.7,<1.7.4", 1720 | "padraic/humbug_get_contents": "<1.1.2", 1721 | "pagarme/pagarme-php": ">=0,<3", 1722 | "paragonie/random_compat": "<2", 1723 | "paypal/merchant-sdk-php": "<3.12", 1724 | "pear/archive_tar": "<1.4.4", 1725 | "phpfastcache/phpfastcache": ">=5,<5.0.13", 1726 | "phpmailer/phpmailer": ">=5,<5.2.27|>=6,<6.0.6", 1727 | "phpmyadmin/phpmyadmin": "<4.9.2", 1728 | "phpoffice/phpexcel": "<1.8.2", 1729 | "phpoffice/phpspreadsheet": "<1.8", 1730 | "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", 1731 | "phpwhois/phpwhois": "<=4.2.5", 1732 | "phpxmlrpc/extras": "<0.6.1", 1733 | "pimcore/pimcore": "<6.3", 1734 | "prestashop/autoupgrade": ">=4,<4.10.1", 1735 | "prestashop/gamification": "<2.3.2", 1736 | "prestashop/ps_facetedsearch": "<3.4.1", 1737 | "privatebin/privatebin": "<1.2.2|>=1.3,<1.3.2", 1738 | "propel/propel": ">=2-alpha.1,<=2-alpha.7", 1739 | "propel/propel1": ">=1,<=1.7.1", 1740 | "pusher/pusher-php-server": "<2.2.1", 1741 | "robrichards/xmlseclibs": "<3.0.4", 1742 | "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", 1743 | "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", 1744 | "sensiolabs/connect": "<4.2.3", 1745 | "serluck/phpwhois": "<=4.2.6", 1746 | "shopware/shopware": "<5.3.7", 1747 | "silverstripe/admin": ">=1.0.3,<1.0.4|>=1.1,<1.1.1", 1748 | "silverstripe/assets": ">=1,<1.3.5", 1749 | "silverstripe/cms": "<4.3.6|>=4.4,<4.4.4", 1750 | "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", 1751 | "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", 1752 | "silverstripe/framework": "<4.4.5|>=4.5,<4.5.2", 1753 | "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.1.2", 1754 | "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", 1755 | "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", 1756 | "silverstripe/subsites": ">=2,<2.1.1", 1757 | "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", 1758 | "silverstripe/userforms": "<3", 1759 | "simple-updates/phpwhois": "<=1", 1760 | "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4", 1761 | "simplesamlphp/simplesamlphp": "<1.18.4", 1762 | "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", 1763 | "simplito/elliptic-php": "<1.0.6", 1764 | "slim/slim": "<2.6", 1765 | "smarty/smarty": "<3.1.33", 1766 | "socalnick/scn-social-auth": "<1.15.2", 1767 | "spoonity/tcpdf": "<6.2.22", 1768 | "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", 1769 | "stormpath/sdk": ">=0,<9.9.99", 1770 | "studio-42/elfinder": "<2.1.49", 1771 | "swiftmailer/swiftmailer": ">=4,<5.4.5", 1772 | "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", 1773 | "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", 1774 | "sylius/grid-bundle": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", 1775 | "sylius/resource-bundle": "<1.3.13|>=1.4,<1.4.6|>=1.5,<1.5.1|>=1.6,<1.6.3", 1776 | "sylius/sylius": "<1.3.16|>=1.4,<1.4.12|>=1.5,<1.5.9|>=1.6,<1.6.5", 1777 | "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", 1778 | "symbiote/silverstripe-versionedfiles": "<=2.0.3", 1779 | "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", 1780 | "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", 1781 | "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", 1782 | "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", 1783 | "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", 1784 | "symfony/http-kernel": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", 1785 | "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", 1786 | "symfony/mime": ">=4.3,<4.3.8", 1787 | "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", 1788 | "symfony/polyfill": ">=1,<1.10", 1789 | "symfony/polyfill-php55": ">=1,<1.10", 1790 | "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", 1791 | "symfony/routing": ">=2,<2.0.19", 1792 | "symfony/security": ">=2,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", 1793 | "symfony/security-bundle": ">=2,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", 1794 | "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<2.8.37|>=3,<3.3.17|>=3.4,<3.4.7|>=4,<4.0.7", 1795 | "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", 1796 | "symfony/security-guard": ">=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", 1797 | "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8", 1798 | "symfony/serializer": ">=2,<2.0.11", 1799 | "symfony/symfony": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", 1800 | "symfony/translation": ">=2,<2.0.17", 1801 | "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", 1802 | "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", 1803 | "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", 1804 | "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", 1805 | "tecnickcom/tcpdf": "<6.2.22", 1806 | "thelia/backoffice-default-template": ">=2.1,<2.1.2", 1807 | "thelia/thelia": ">=2.1-beta.1,<2.1.3", 1808 | "theonedemon/phpwhois": "<=4.2.5", 1809 | "titon/framework": ">=0,<9.9.99", 1810 | "truckersmp/phpwhois": "<=4.3.1", 1811 | "twig/twig": "<1.38|>=2,<2.7", 1812 | "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.30|>=9,<9.5.12|>=10,<10.2.1", 1813 | "typo3/cms-core": ">=8,<8.7.30|>=9,<9.5.12|>=10,<10.2.1", 1814 | "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", 1815 | "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", 1816 | "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", 1817 | "ua-parser/uap-php": "<3.8", 1818 | "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", 1819 | "verot/class.upload.php": "<1.0.3|>=2,<2.0.4", 1820 | "wallabag/tcpdf": "<6.2.22", 1821 | "willdurand/js-translation-bundle": "<2.1.1", 1822 | "yii2mod/yii2-cms": "<1.9.2", 1823 | "yiisoft/yii": ">=1.1.14,<1.1.15", 1824 | "yiisoft/yii2": "<2.0.15", 1825 | "yiisoft/yii2-bootstrap": "<2.0.4", 1826 | "yiisoft/yii2-dev": "<2.0.15", 1827 | "yiisoft/yii2-elasticsearch": "<2.0.5", 1828 | "yiisoft/yii2-gii": "<2.0.4", 1829 | "yiisoft/yii2-jui": "<2.0.4", 1830 | "yiisoft/yii2-redis": "<2.0.8", 1831 | "yourls/yourls": "<1.7.4", 1832 | "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", 1833 | "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", 1834 | "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", 1835 | "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5", 1836 | "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", 1837 | "zendframework/zend-diactoros": ">=1,<1.8.4", 1838 | "zendframework/zend-feed": ">=1,<2.10.3", 1839 | "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1", 1840 | "zendframework/zend-http": ">=1,<2.8.1", 1841 | "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", 1842 | "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", 1843 | "zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2", 1844 | "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", 1845 | "zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4", 1846 | "zendframework/zend-validator": ">=2.3,<2.3.6", 1847 | "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", 1848 | "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", 1849 | "zendframework/zendframework": "<2.5.1", 1850 | "zendframework/zendframework1": "<1.12.20", 1851 | "zendframework/zendopenid": ">=2,<2.0.2", 1852 | "zendframework/zendxml": ">=1,<1.0.1", 1853 | "zetacomponents/mail": "<1.8.2", 1854 | "zf-commons/zfc-user": "<1.2.2", 1855 | "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", 1856 | "zfr/zfr-oauth2-server-module": "<0.1.2" 1857 | }, 1858 | "type": "metapackage", 1859 | "notification-url": "https://packagist.org/downloads/", 1860 | "license": [ 1861 | "MIT" 1862 | ], 1863 | "authors": [ 1864 | { 1865 | "name": "Marco Pivetta", 1866 | "email": "ocramius@gmail.com", 1867 | "role": "maintainer" 1868 | }, 1869 | { 1870 | "name": "Ilya Tribusean", 1871 | "email": "slash3b@gmail.com", 1872 | "role": "maintainer" 1873 | } 1874 | ], 1875 | "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", 1876 | "time": "2020-02-19T06:23:50+00:00" 1877 | }, 1878 | { 1879 | "name": "sebastian/code-unit-reverse-lookup", 1880 | "version": "1.0.1", 1881 | "source": { 1882 | "type": "git", 1883 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1884 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 1885 | }, 1886 | "dist": { 1887 | "type": "zip", 1888 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1889 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1890 | "shasum": "" 1891 | }, 1892 | "require": { 1893 | "php": "^5.6 || ^7.0" 1894 | }, 1895 | "require-dev": { 1896 | "phpunit/phpunit": "^5.7 || ^6.0" 1897 | }, 1898 | "type": "library", 1899 | "extra": { 1900 | "branch-alias": { 1901 | "dev-master": "1.0.x-dev" 1902 | } 1903 | }, 1904 | "autoload": { 1905 | "classmap": [ 1906 | "src/" 1907 | ] 1908 | }, 1909 | "notification-url": "https://packagist.org/downloads/", 1910 | "license": [ 1911 | "BSD-3-Clause" 1912 | ], 1913 | "authors": [ 1914 | { 1915 | "name": "Sebastian Bergmann", 1916 | "email": "sebastian@phpunit.de" 1917 | } 1918 | ], 1919 | "description": "Looks up which function or method a line of code belongs to", 1920 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1921 | "time": "2017-03-04T06:30:41+00:00" 1922 | }, 1923 | { 1924 | "name": "sebastian/comparator", 1925 | "version": "3.0.2", 1926 | "source": { 1927 | "type": "git", 1928 | "url": "https://github.com/sebastianbergmann/comparator.git", 1929 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" 1930 | }, 1931 | "dist": { 1932 | "type": "zip", 1933 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 1934 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 1935 | "shasum": "" 1936 | }, 1937 | "require": { 1938 | "php": "^7.1", 1939 | "sebastian/diff": "^3.0", 1940 | "sebastian/exporter": "^3.1" 1941 | }, 1942 | "require-dev": { 1943 | "phpunit/phpunit": "^7.1" 1944 | }, 1945 | "type": "library", 1946 | "extra": { 1947 | "branch-alias": { 1948 | "dev-master": "3.0-dev" 1949 | } 1950 | }, 1951 | "autoload": { 1952 | "classmap": [ 1953 | "src/" 1954 | ] 1955 | }, 1956 | "notification-url": "https://packagist.org/downloads/", 1957 | "license": [ 1958 | "BSD-3-Clause" 1959 | ], 1960 | "authors": [ 1961 | { 1962 | "name": "Jeff Welch", 1963 | "email": "whatthejeff@gmail.com" 1964 | }, 1965 | { 1966 | "name": "Volker Dusch", 1967 | "email": "github@wallbash.com" 1968 | }, 1969 | { 1970 | "name": "Bernhard Schussek", 1971 | "email": "bschussek@2bepublished.at" 1972 | }, 1973 | { 1974 | "name": "Sebastian Bergmann", 1975 | "email": "sebastian@phpunit.de" 1976 | } 1977 | ], 1978 | "description": "Provides the functionality to compare PHP values for equality", 1979 | "homepage": "https://github.com/sebastianbergmann/comparator", 1980 | "keywords": [ 1981 | "comparator", 1982 | "compare", 1983 | "equality" 1984 | ], 1985 | "time": "2018-07-12T15:12:46+00:00" 1986 | }, 1987 | { 1988 | "name": "sebastian/diff", 1989 | "version": "3.0.2", 1990 | "source": { 1991 | "type": "git", 1992 | "url": "https://github.com/sebastianbergmann/diff.git", 1993 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" 1994 | }, 1995 | "dist": { 1996 | "type": "zip", 1997 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 1998 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 1999 | "shasum": "" 2000 | }, 2001 | "require": { 2002 | "php": "^7.1" 2003 | }, 2004 | "require-dev": { 2005 | "phpunit/phpunit": "^7.5 || ^8.0", 2006 | "symfony/process": "^2 || ^3.3 || ^4" 2007 | }, 2008 | "type": "library", 2009 | "extra": { 2010 | "branch-alias": { 2011 | "dev-master": "3.0-dev" 2012 | } 2013 | }, 2014 | "autoload": { 2015 | "classmap": [ 2016 | "src/" 2017 | ] 2018 | }, 2019 | "notification-url": "https://packagist.org/downloads/", 2020 | "license": [ 2021 | "BSD-3-Clause" 2022 | ], 2023 | "authors": [ 2024 | { 2025 | "name": "Kore Nordmann", 2026 | "email": "mail@kore-nordmann.de" 2027 | }, 2028 | { 2029 | "name": "Sebastian Bergmann", 2030 | "email": "sebastian@phpunit.de" 2031 | } 2032 | ], 2033 | "description": "Diff implementation", 2034 | "homepage": "https://github.com/sebastianbergmann/diff", 2035 | "keywords": [ 2036 | "diff", 2037 | "udiff", 2038 | "unidiff", 2039 | "unified diff" 2040 | ], 2041 | "time": "2019-02-04T06:01:07+00:00" 2042 | }, 2043 | { 2044 | "name": "sebastian/environment", 2045 | "version": "4.2.3", 2046 | "source": { 2047 | "type": "git", 2048 | "url": "https://github.com/sebastianbergmann/environment.git", 2049 | "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" 2050 | }, 2051 | "dist": { 2052 | "type": "zip", 2053 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", 2054 | "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", 2055 | "shasum": "" 2056 | }, 2057 | "require": { 2058 | "php": "^7.1" 2059 | }, 2060 | "require-dev": { 2061 | "phpunit/phpunit": "^7.5" 2062 | }, 2063 | "suggest": { 2064 | "ext-posix": "*" 2065 | }, 2066 | "type": "library", 2067 | "extra": { 2068 | "branch-alias": { 2069 | "dev-master": "4.2-dev" 2070 | } 2071 | }, 2072 | "autoload": { 2073 | "classmap": [ 2074 | "src/" 2075 | ] 2076 | }, 2077 | "notification-url": "https://packagist.org/downloads/", 2078 | "license": [ 2079 | "BSD-3-Clause" 2080 | ], 2081 | "authors": [ 2082 | { 2083 | "name": "Sebastian Bergmann", 2084 | "email": "sebastian@phpunit.de" 2085 | } 2086 | ], 2087 | "description": "Provides functionality to handle HHVM/PHP environments", 2088 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2089 | "keywords": [ 2090 | "Xdebug", 2091 | "environment", 2092 | "hhvm" 2093 | ], 2094 | "time": "2019-11-20T08:46:58+00:00" 2095 | }, 2096 | { 2097 | "name": "sebastian/exporter", 2098 | "version": "3.1.2", 2099 | "source": { 2100 | "type": "git", 2101 | "url": "https://github.com/sebastianbergmann/exporter.git", 2102 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" 2103 | }, 2104 | "dist": { 2105 | "type": "zip", 2106 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", 2107 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", 2108 | "shasum": "" 2109 | }, 2110 | "require": { 2111 | "php": "^7.0", 2112 | "sebastian/recursion-context": "^3.0" 2113 | }, 2114 | "require-dev": { 2115 | "ext-mbstring": "*", 2116 | "phpunit/phpunit": "^6.0" 2117 | }, 2118 | "type": "library", 2119 | "extra": { 2120 | "branch-alias": { 2121 | "dev-master": "3.1.x-dev" 2122 | } 2123 | }, 2124 | "autoload": { 2125 | "classmap": [ 2126 | "src/" 2127 | ] 2128 | }, 2129 | "notification-url": "https://packagist.org/downloads/", 2130 | "license": [ 2131 | "BSD-3-Clause" 2132 | ], 2133 | "authors": [ 2134 | { 2135 | "name": "Sebastian Bergmann", 2136 | "email": "sebastian@phpunit.de" 2137 | }, 2138 | { 2139 | "name": "Jeff Welch", 2140 | "email": "whatthejeff@gmail.com" 2141 | }, 2142 | { 2143 | "name": "Volker Dusch", 2144 | "email": "github@wallbash.com" 2145 | }, 2146 | { 2147 | "name": "Adam Harvey", 2148 | "email": "aharvey@php.net" 2149 | }, 2150 | { 2151 | "name": "Bernhard Schussek", 2152 | "email": "bschussek@gmail.com" 2153 | } 2154 | ], 2155 | "description": "Provides the functionality to export PHP variables for visualization", 2156 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 2157 | "keywords": [ 2158 | "export", 2159 | "exporter" 2160 | ], 2161 | "time": "2019-09-14T09:02:43+00:00" 2162 | }, 2163 | { 2164 | "name": "sebastian/finder-facade", 2165 | "version": "1.2.3", 2166 | "source": { 2167 | "type": "git", 2168 | "url": "https://github.com/sebastianbergmann/finder-facade.git", 2169 | "reference": "167c45d131f7fc3d159f56f191a0a22228765e16" 2170 | }, 2171 | "dist": { 2172 | "type": "zip", 2173 | "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/167c45d131f7fc3d159f56f191a0a22228765e16", 2174 | "reference": "167c45d131f7fc3d159f56f191a0a22228765e16", 2175 | "shasum": "" 2176 | }, 2177 | "require": { 2178 | "php": "^7.1", 2179 | "symfony/finder": "^2.3|^3.0|^4.0|^5.0", 2180 | "theseer/fdomdocument": "^1.6" 2181 | }, 2182 | "type": "library", 2183 | "extra": { 2184 | "branch-alias": [] 2185 | }, 2186 | "autoload": { 2187 | "classmap": [ 2188 | "src/" 2189 | ] 2190 | }, 2191 | "notification-url": "https://packagist.org/downloads/", 2192 | "license": [ 2193 | "BSD-3-Clause" 2194 | ], 2195 | "authors": [ 2196 | { 2197 | "name": "Sebastian Bergmann", 2198 | "email": "sebastian@phpunit.de", 2199 | "role": "lead" 2200 | } 2201 | ], 2202 | "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", 2203 | "homepage": "https://github.com/sebastianbergmann/finder-facade", 2204 | "time": "2020-01-16T08:08:45+00:00" 2205 | }, 2206 | { 2207 | "name": "sebastian/global-state", 2208 | "version": "2.0.0", 2209 | "source": { 2210 | "type": "git", 2211 | "url": "https://github.com/sebastianbergmann/global-state.git", 2212 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" 2213 | }, 2214 | "dist": { 2215 | "type": "zip", 2216 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 2217 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 2218 | "shasum": "" 2219 | }, 2220 | "require": { 2221 | "php": "^7.0" 2222 | }, 2223 | "require-dev": { 2224 | "phpunit/phpunit": "^6.0" 2225 | }, 2226 | "suggest": { 2227 | "ext-uopz": "*" 2228 | }, 2229 | "type": "library", 2230 | "extra": { 2231 | "branch-alias": { 2232 | "dev-master": "2.0-dev" 2233 | } 2234 | }, 2235 | "autoload": { 2236 | "classmap": [ 2237 | "src/" 2238 | ] 2239 | }, 2240 | "notification-url": "https://packagist.org/downloads/", 2241 | "license": [ 2242 | "BSD-3-Clause" 2243 | ], 2244 | "authors": [ 2245 | { 2246 | "name": "Sebastian Bergmann", 2247 | "email": "sebastian@phpunit.de" 2248 | } 2249 | ], 2250 | "description": "Snapshotting of global state", 2251 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 2252 | "keywords": [ 2253 | "global state" 2254 | ], 2255 | "time": "2017-04-27T15:39:26+00:00" 2256 | }, 2257 | { 2258 | "name": "sebastian/object-enumerator", 2259 | "version": "3.0.3", 2260 | "source": { 2261 | "type": "git", 2262 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2263 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 2264 | }, 2265 | "dist": { 2266 | "type": "zip", 2267 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", 2268 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 2269 | "shasum": "" 2270 | }, 2271 | "require": { 2272 | "php": "^7.0", 2273 | "sebastian/object-reflector": "^1.1.1", 2274 | "sebastian/recursion-context": "^3.0" 2275 | }, 2276 | "require-dev": { 2277 | "phpunit/phpunit": "^6.0" 2278 | }, 2279 | "type": "library", 2280 | "extra": { 2281 | "branch-alias": { 2282 | "dev-master": "3.0.x-dev" 2283 | } 2284 | }, 2285 | "autoload": { 2286 | "classmap": [ 2287 | "src/" 2288 | ] 2289 | }, 2290 | "notification-url": "https://packagist.org/downloads/", 2291 | "license": [ 2292 | "BSD-3-Clause" 2293 | ], 2294 | "authors": [ 2295 | { 2296 | "name": "Sebastian Bergmann", 2297 | "email": "sebastian@phpunit.de" 2298 | } 2299 | ], 2300 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2301 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2302 | "time": "2017-08-03T12:35:26+00:00" 2303 | }, 2304 | { 2305 | "name": "sebastian/object-reflector", 2306 | "version": "1.1.1", 2307 | "source": { 2308 | "type": "git", 2309 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 2310 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 2311 | }, 2312 | "dist": { 2313 | "type": "zip", 2314 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 2315 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 2316 | "shasum": "" 2317 | }, 2318 | "require": { 2319 | "php": "^7.0" 2320 | }, 2321 | "require-dev": { 2322 | "phpunit/phpunit": "^6.0" 2323 | }, 2324 | "type": "library", 2325 | "extra": { 2326 | "branch-alias": { 2327 | "dev-master": "1.1-dev" 2328 | } 2329 | }, 2330 | "autoload": { 2331 | "classmap": [ 2332 | "src/" 2333 | ] 2334 | }, 2335 | "notification-url": "https://packagist.org/downloads/", 2336 | "license": [ 2337 | "BSD-3-Clause" 2338 | ], 2339 | "authors": [ 2340 | { 2341 | "name": "Sebastian Bergmann", 2342 | "email": "sebastian@phpunit.de" 2343 | } 2344 | ], 2345 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 2346 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 2347 | "time": "2017-03-29T09:07:27+00:00" 2348 | }, 2349 | { 2350 | "name": "sebastian/recursion-context", 2351 | "version": "3.0.0", 2352 | "source": { 2353 | "type": "git", 2354 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2355 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 2356 | }, 2357 | "dist": { 2358 | "type": "zip", 2359 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 2360 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 2361 | "shasum": "" 2362 | }, 2363 | "require": { 2364 | "php": "^7.0" 2365 | }, 2366 | "require-dev": { 2367 | "phpunit/phpunit": "^6.0" 2368 | }, 2369 | "type": "library", 2370 | "extra": { 2371 | "branch-alias": { 2372 | "dev-master": "3.0.x-dev" 2373 | } 2374 | }, 2375 | "autoload": { 2376 | "classmap": [ 2377 | "src/" 2378 | ] 2379 | }, 2380 | "notification-url": "https://packagist.org/downloads/", 2381 | "license": [ 2382 | "BSD-3-Clause" 2383 | ], 2384 | "authors": [ 2385 | { 2386 | "name": "Jeff Welch", 2387 | "email": "whatthejeff@gmail.com" 2388 | }, 2389 | { 2390 | "name": "Sebastian Bergmann", 2391 | "email": "sebastian@phpunit.de" 2392 | }, 2393 | { 2394 | "name": "Adam Harvey", 2395 | "email": "aharvey@php.net" 2396 | } 2397 | ], 2398 | "description": "Provides functionality to recursively process PHP variables", 2399 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2400 | "time": "2017-03-03T06:23:57+00:00" 2401 | }, 2402 | { 2403 | "name": "sebastian/resource-operations", 2404 | "version": "2.0.1", 2405 | "source": { 2406 | "type": "git", 2407 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 2408 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" 2409 | }, 2410 | "dist": { 2411 | "type": "zip", 2412 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 2413 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 2414 | "shasum": "" 2415 | }, 2416 | "require": { 2417 | "php": "^7.1" 2418 | }, 2419 | "type": "library", 2420 | "extra": { 2421 | "branch-alias": { 2422 | "dev-master": "2.0-dev" 2423 | } 2424 | }, 2425 | "autoload": { 2426 | "classmap": [ 2427 | "src/" 2428 | ] 2429 | }, 2430 | "notification-url": "https://packagist.org/downloads/", 2431 | "license": [ 2432 | "BSD-3-Clause" 2433 | ], 2434 | "authors": [ 2435 | { 2436 | "name": "Sebastian Bergmann", 2437 | "email": "sebastian@phpunit.de" 2438 | } 2439 | ], 2440 | "description": "Provides a list of PHP built-in functions that operate on resources", 2441 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2442 | "time": "2018-10-04T04:07:39+00:00" 2443 | }, 2444 | { 2445 | "name": "sebastian/version", 2446 | "version": "2.0.1", 2447 | "source": { 2448 | "type": "git", 2449 | "url": "https://github.com/sebastianbergmann/version.git", 2450 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 2451 | }, 2452 | "dist": { 2453 | "type": "zip", 2454 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 2455 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 2456 | "shasum": "" 2457 | }, 2458 | "require": { 2459 | "php": ">=5.6" 2460 | }, 2461 | "type": "library", 2462 | "extra": { 2463 | "branch-alias": { 2464 | "dev-master": "2.0.x-dev" 2465 | } 2466 | }, 2467 | "autoload": { 2468 | "classmap": [ 2469 | "src/" 2470 | ] 2471 | }, 2472 | "notification-url": "https://packagist.org/downloads/", 2473 | "license": [ 2474 | "BSD-3-Clause" 2475 | ], 2476 | "authors": [ 2477 | { 2478 | "name": "Sebastian Bergmann", 2479 | "email": "sebastian@phpunit.de", 2480 | "role": "lead" 2481 | } 2482 | ], 2483 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2484 | "homepage": "https://github.com/sebastianbergmann/version", 2485 | "time": "2016-10-03T07:35:21+00:00" 2486 | }, 2487 | { 2488 | "name": "squizlabs/php_codesniffer", 2489 | "version": "2.9.2", 2490 | "source": { 2491 | "type": "git", 2492 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", 2493 | "reference": "2acf168de78487db620ab4bc524135a13cfe6745" 2494 | }, 2495 | "dist": { 2496 | "type": "zip", 2497 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745", 2498 | "reference": "2acf168de78487db620ab4bc524135a13cfe6745", 2499 | "shasum": "" 2500 | }, 2501 | "require": { 2502 | "ext-simplexml": "*", 2503 | "ext-tokenizer": "*", 2504 | "ext-xmlwriter": "*", 2505 | "php": ">=5.1.2" 2506 | }, 2507 | "require-dev": { 2508 | "phpunit/phpunit": "~4.0" 2509 | }, 2510 | "bin": [ 2511 | "scripts/phpcs", 2512 | "scripts/phpcbf" 2513 | ], 2514 | "type": "library", 2515 | "extra": { 2516 | "branch-alias": { 2517 | "dev-master": "2.x-dev" 2518 | } 2519 | }, 2520 | "autoload": { 2521 | "classmap": [ 2522 | "CodeSniffer.php", 2523 | "CodeSniffer/CLI.php", 2524 | "CodeSniffer/Exception.php", 2525 | "CodeSniffer/File.php", 2526 | "CodeSniffer/Fixer.php", 2527 | "CodeSniffer/Report.php", 2528 | "CodeSniffer/Reporting.php", 2529 | "CodeSniffer/Sniff.php", 2530 | "CodeSniffer/Tokens.php", 2531 | "CodeSniffer/Reports/", 2532 | "CodeSniffer/Tokenizers/", 2533 | "CodeSniffer/DocGenerators/", 2534 | "CodeSniffer/Standards/AbstractPatternSniff.php", 2535 | "CodeSniffer/Standards/AbstractScopeSniff.php", 2536 | "CodeSniffer/Standards/AbstractVariableSniff.php", 2537 | "CodeSniffer/Standards/IncorrectPatternException.php", 2538 | "CodeSniffer/Standards/Generic/Sniffs/", 2539 | "CodeSniffer/Standards/MySource/Sniffs/", 2540 | "CodeSniffer/Standards/PEAR/Sniffs/", 2541 | "CodeSniffer/Standards/PSR1/Sniffs/", 2542 | "CodeSniffer/Standards/PSR2/Sniffs/", 2543 | "CodeSniffer/Standards/Squiz/Sniffs/", 2544 | "CodeSniffer/Standards/Zend/Sniffs/" 2545 | ] 2546 | }, 2547 | "notification-url": "https://packagist.org/downloads/", 2548 | "license": [ 2549 | "BSD-3-Clause" 2550 | ], 2551 | "authors": [ 2552 | { 2553 | "name": "Greg Sherwood", 2554 | "role": "lead" 2555 | } 2556 | ], 2557 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 2558 | "homepage": "http://www.squizlabs.com/php-codesniffer", 2559 | "keywords": [ 2560 | "phpcs", 2561 | "standards" 2562 | ], 2563 | "time": "2018-11-07T22:31:41+00:00" 2564 | }, 2565 | { 2566 | "name": "symfony/config", 2567 | "version": "v5.0.4", 2568 | "source": { 2569 | "type": "git", 2570 | "url": "https://github.com/symfony/config.git", 2571 | "reference": "7640c6704f56bf64045066bc5d93fd9d664baa63" 2572 | }, 2573 | "dist": { 2574 | "type": "zip", 2575 | "url": "https://api.github.com/repos/symfony/config/zipball/7640c6704f56bf64045066bc5d93fd9d664baa63", 2576 | "reference": "7640c6704f56bf64045066bc5d93fd9d664baa63", 2577 | "shasum": "" 2578 | }, 2579 | "require": { 2580 | "php": "^7.2.5", 2581 | "symfony/filesystem": "^4.4|^5.0", 2582 | "symfony/polyfill-ctype": "~1.8" 2583 | }, 2584 | "conflict": { 2585 | "symfony/finder": "<4.4" 2586 | }, 2587 | "require-dev": { 2588 | "symfony/event-dispatcher": "^4.4|^5.0", 2589 | "symfony/finder": "^4.4|^5.0", 2590 | "symfony/messenger": "^4.4|^5.0", 2591 | "symfony/service-contracts": "^1.1|^2", 2592 | "symfony/yaml": "^4.4|^5.0" 2593 | }, 2594 | "suggest": { 2595 | "symfony/yaml": "To use the yaml reference dumper" 2596 | }, 2597 | "type": "library", 2598 | "extra": { 2599 | "branch-alias": { 2600 | "dev-master": "5.0-dev" 2601 | } 2602 | }, 2603 | "autoload": { 2604 | "psr-4": { 2605 | "Symfony\\Component\\Config\\": "" 2606 | }, 2607 | "exclude-from-classmap": [ 2608 | "/Tests/" 2609 | ] 2610 | }, 2611 | "notification-url": "https://packagist.org/downloads/", 2612 | "license": [ 2613 | "MIT" 2614 | ], 2615 | "authors": [ 2616 | { 2617 | "name": "Fabien Potencier", 2618 | "email": "fabien@symfony.com" 2619 | }, 2620 | { 2621 | "name": "Symfony Community", 2622 | "homepage": "https://symfony.com/contributors" 2623 | } 2624 | ], 2625 | "description": "Symfony Config Component", 2626 | "homepage": "https://symfony.com", 2627 | "time": "2020-01-04T14:08:26+00:00" 2628 | }, 2629 | { 2630 | "name": "symfony/console", 2631 | "version": "v4.4.4", 2632 | "source": { 2633 | "type": "git", 2634 | "url": "https://github.com/symfony/console.git", 2635 | "reference": "f512001679f37e6a042b51897ed24a2f05eba656" 2636 | }, 2637 | "dist": { 2638 | "type": "zip", 2639 | "url": "https://api.github.com/repos/symfony/console/zipball/f512001679f37e6a042b51897ed24a2f05eba656", 2640 | "reference": "f512001679f37e6a042b51897ed24a2f05eba656", 2641 | "shasum": "" 2642 | }, 2643 | "require": { 2644 | "php": "^7.1.3", 2645 | "symfony/polyfill-mbstring": "~1.0", 2646 | "symfony/polyfill-php73": "^1.8", 2647 | "symfony/service-contracts": "^1.1|^2" 2648 | }, 2649 | "conflict": { 2650 | "symfony/dependency-injection": "<3.4", 2651 | "symfony/event-dispatcher": "<4.3|>=5", 2652 | "symfony/lock": "<4.4", 2653 | "symfony/process": "<3.3" 2654 | }, 2655 | "provide": { 2656 | "psr/log-implementation": "1.0" 2657 | }, 2658 | "require-dev": { 2659 | "psr/log": "~1.0", 2660 | "symfony/config": "^3.4|^4.0|^5.0", 2661 | "symfony/dependency-injection": "^3.4|^4.0|^5.0", 2662 | "symfony/event-dispatcher": "^4.3", 2663 | "symfony/lock": "^4.4|^5.0", 2664 | "symfony/process": "^3.4|^4.0|^5.0", 2665 | "symfony/var-dumper": "^4.3|^5.0" 2666 | }, 2667 | "suggest": { 2668 | "psr/log": "For using the console logger", 2669 | "symfony/event-dispatcher": "", 2670 | "symfony/lock": "", 2671 | "symfony/process": "" 2672 | }, 2673 | "type": "library", 2674 | "extra": { 2675 | "branch-alias": { 2676 | "dev-master": "4.4-dev" 2677 | } 2678 | }, 2679 | "autoload": { 2680 | "psr-4": { 2681 | "Symfony\\Component\\Console\\": "" 2682 | }, 2683 | "exclude-from-classmap": [ 2684 | "/Tests/" 2685 | ] 2686 | }, 2687 | "notification-url": "https://packagist.org/downloads/", 2688 | "license": [ 2689 | "MIT" 2690 | ], 2691 | "authors": [ 2692 | { 2693 | "name": "Fabien Potencier", 2694 | "email": "fabien@symfony.com" 2695 | }, 2696 | { 2697 | "name": "Symfony Community", 2698 | "homepage": "https://symfony.com/contributors" 2699 | } 2700 | ], 2701 | "description": "Symfony Console Component", 2702 | "homepage": "https://symfony.com", 2703 | "time": "2020-01-25T12:44:29+00:00" 2704 | }, 2705 | { 2706 | "name": "symfony/dependency-injection", 2707 | "version": "v5.0.4", 2708 | "source": { 2709 | "type": "git", 2710 | "url": "https://github.com/symfony/dependency-injection.git", 2711 | "reference": "86338f459313525dd95f5a012f8a9ea118002f94" 2712 | }, 2713 | "dist": { 2714 | "type": "zip", 2715 | "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/86338f459313525dd95f5a012f8a9ea118002f94", 2716 | "reference": "86338f459313525dd95f5a012f8a9ea118002f94", 2717 | "shasum": "" 2718 | }, 2719 | "require": { 2720 | "php": "^7.2.5", 2721 | "psr/container": "^1.0", 2722 | "symfony/service-contracts": "^1.1.6|^2" 2723 | }, 2724 | "conflict": { 2725 | "symfony/config": "<5.0", 2726 | "symfony/finder": "<4.4", 2727 | "symfony/proxy-manager-bridge": "<4.4", 2728 | "symfony/yaml": "<4.4" 2729 | }, 2730 | "provide": { 2731 | "psr/container-implementation": "1.0", 2732 | "symfony/service-implementation": "1.0" 2733 | }, 2734 | "require-dev": { 2735 | "symfony/config": "^5.0", 2736 | "symfony/expression-language": "^4.4|^5.0", 2737 | "symfony/yaml": "^4.4|^5.0" 2738 | }, 2739 | "suggest": { 2740 | "symfony/config": "", 2741 | "symfony/expression-language": "For using expressions in service container configuration", 2742 | "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", 2743 | "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", 2744 | "symfony/yaml": "" 2745 | }, 2746 | "type": "library", 2747 | "extra": { 2748 | "branch-alias": { 2749 | "dev-master": "5.0-dev" 2750 | } 2751 | }, 2752 | "autoload": { 2753 | "psr-4": { 2754 | "Symfony\\Component\\DependencyInjection\\": "" 2755 | }, 2756 | "exclude-from-classmap": [ 2757 | "/Tests/" 2758 | ] 2759 | }, 2760 | "notification-url": "https://packagist.org/downloads/", 2761 | "license": [ 2762 | "MIT" 2763 | ], 2764 | "authors": [ 2765 | { 2766 | "name": "Fabien Potencier", 2767 | "email": "fabien@symfony.com" 2768 | }, 2769 | { 2770 | "name": "Symfony Community", 2771 | "homepage": "https://symfony.com/contributors" 2772 | } 2773 | ], 2774 | "description": "Symfony DependencyInjection Component", 2775 | "homepage": "https://symfony.com", 2776 | "time": "2020-01-31T09:49:43+00:00" 2777 | }, 2778 | { 2779 | "name": "symfony/filesystem", 2780 | "version": "v5.0.4", 2781 | "source": { 2782 | "type": "git", 2783 | "url": "https://github.com/symfony/filesystem.git", 2784 | "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c" 2785 | }, 2786 | "dist": { 2787 | "type": "zip", 2788 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/3afadc0f57cd74f86379d073e694b0f2cda2a88c", 2789 | "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c", 2790 | "shasum": "" 2791 | }, 2792 | "require": { 2793 | "php": "^7.2.5", 2794 | "symfony/polyfill-ctype": "~1.8" 2795 | }, 2796 | "type": "library", 2797 | "extra": { 2798 | "branch-alias": { 2799 | "dev-master": "5.0-dev" 2800 | } 2801 | }, 2802 | "autoload": { 2803 | "psr-4": { 2804 | "Symfony\\Component\\Filesystem\\": "" 2805 | }, 2806 | "exclude-from-classmap": [ 2807 | "/Tests/" 2808 | ] 2809 | }, 2810 | "notification-url": "https://packagist.org/downloads/", 2811 | "license": [ 2812 | "MIT" 2813 | ], 2814 | "authors": [ 2815 | { 2816 | "name": "Fabien Potencier", 2817 | "email": "fabien@symfony.com" 2818 | }, 2819 | { 2820 | "name": "Symfony Community", 2821 | "homepage": "https://symfony.com/contributors" 2822 | } 2823 | ], 2824 | "description": "Symfony Filesystem Component", 2825 | "homepage": "https://symfony.com", 2826 | "time": "2020-01-21T08:40:24+00:00" 2827 | }, 2828 | { 2829 | "name": "symfony/finder", 2830 | "version": "v5.0.4", 2831 | "source": { 2832 | "type": "git", 2833 | "url": "https://github.com/symfony/finder.git", 2834 | "reference": "4176e7cb846fe08f32518b7e0ed8462e2db8d9bb" 2835 | }, 2836 | "dist": { 2837 | "type": "zip", 2838 | "url": "https://api.github.com/repos/symfony/finder/zipball/4176e7cb846fe08f32518b7e0ed8462e2db8d9bb", 2839 | "reference": "4176e7cb846fe08f32518b7e0ed8462e2db8d9bb", 2840 | "shasum": "" 2841 | }, 2842 | "require": { 2843 | "php": "^7.2.5" 2844 | }, 2845 | "type": "library", 2846 | "extra": { 2847 | "branch-alias": { 2848 | "dev-master": "5.0-dev" 2849 | } 2850 | }, 2851 | "autoload": { 2852 | "psr-4": { 2853 | "Symfony\\Component\\Finder\\": "" 2854 | }, 2855 | "exclude-from-classmap": [ 2856 | "/Tests/" 2857 | ] 2858 | }, 2859 | "notification-url": "https://packagist.org/downloads/", 2860 | "license": [ 2861 | "MIT" 2862 | ], 2863 | "authors": [ 2864 | { 2865 | "name": "Fabien Potencier", 2866 | "email": "fabien@symfony.com" 2867 | }, 2868 | { 2869 | "name": "Symfony Community", 2870 | "homepage": "https://symfony.com/contributors" 2871 | } 2872 | ], 2873 | "description": "Symfony Finder Component", 2874 | "homepage": "https://symfony.com", 2875 | "time": "2020-01-04T14:08:26+00:00" 2876 | }, 2877 | { 2878 | "name": "symfony/polyfill-mbstring", 2879 | "version": "v1.14.0", 2880 | "source": { 2881 | "type": "git", 2882 | "url": "https://github.com/symfony/polyfill-mbstring.git", 2883 | "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2" 2884 | }, 2885 | "dist": { 2886 | "type": "zip", 2887 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2", 2888 | "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2", 2889 | "shasum": "" 2890 | }, 2891 | "require": { 2892 | "php": ">=5.3.3" 2893 | }, 2894 | "suggest": { 2895 | "ext-mbstring": "For best performance" 2896 | }, 2897 | "type": "library", 2898 | "extra": { 2899 | "branch-alias": { 2900 | "dev-master": "1.14-dev" 2901 | } 2902 | }, 2903 | "autoload": { 2904 | "psr-4": { 2905 | "Symfony\\Polyfill\\Mbstring\\": "" 2906 | }, 2907 | "files": [ 2908 | "bootstrap.php" 2909 | ] 2910 | }, 2911 | "notification-url": "https://packagist.org/downloads/", 2912 | "license": [ 2913 | "MIT" 2914 | ], 2915 | "authors": [ 2916 | { 2917 | "name": "Nicolas Grekas", 2918 | "email": "p@tchwork.com" 2919 | }, 2920 | { 2921 | "name": "Symfony Community", 2922 | "homepage": "https://symfony.com/contributors" 2923 | } 2924 | ], 2925 | "description": "Symfony polyfill for the Mbstring extension", 2926 | "homepage": "https://symfony.com", 2927 | "keywords": [ 2928 | "compatibility", 2929 | "mbstring", 2930 | "polyfill", 2931 | "portable", 2932 | "shim" 2933 | ], 2934 | "time": "2020-01-13T11:15:53+00:00" 2935 | }, 2936 | { 2937 | "name": "symfony/polyfill-php73", 2938 | "version": "v1.14.0", 2939 | "source": { 2940 | "type": "git", 2941 | "url": "https://github.com/symfony/polyfill-php73.git", 2942 | "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675" 2943 | }, 2944 | "dist": { 2945 | "type": "zip", 2946 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/5e66a0fa1070bf46bec4bea7962d285108edd675", 2947 | "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675", 2948 | "shasum": "" 2949 | }, 2950 | "require": { 2951 | "php": ">=5.3.3" 2952 | }, 2953 | "type": "library", 2954 | "extra": { 2955 | "branch-alias": { 2956 | "dev-master": "1.14-dev" 2957 | } 2958 | }, 2959 | "autoload": { 2960 | "psr-4": { 2961 | "Symfony\\Polyfill\\Php73\\": "" 2962 | }, 2963 | "files": [ 2964 | "bootstrap.php" 2965 | ], 2966 | "classmap": [ 2967 | "Resources/stubs" 2968 | ] 2969 | }, 2970 | "notification-url": "https://packagist.org/downloads/", 2971 | "license": [ 2972 | "MIT" 2973 | ], 2974 | "authors": [ 2975 | { 2976 | "name": "Nicolas Grekas", 2977 | "email": "p@tchwork.com" 2978 | }, 2979 | { 2980 | "name": "Symfony Community", 2981 | "homepage": "https://symfony.com/contributors" 2982 | } 2983 | ], 2984 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 2985 | "homepage": "https://symfony.com", 2986 | "keywords": [ 2987 | "compatibility", 2988 | "polyfill", 2989 | "portable", 2990 | "shim" 2991 | ], 2992 | "time": "2020-01-13T11:15:53+00:00" 2993 | }, 2994 | { 2995 | "name": "symfony/service-contracts", 2996 | "version": "v2.0.1", 2997 | "source": { 2998 | "type": "git", 2999 | "url": "https://github.com/symfony/service-contracts.git", 3000 | "reference": "144c5e51266b281231e947b51223ba14acf1a749" 3001 | }, 3002 | "dist": { 3003 | "type": "zip", 3004 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", 3005 | "reference": "144c5e51266b281231e947b51223ba14acf1a749", 3006 | "shasum": "" 3007 | }, 3008 | "require": { 3009 | "php": "^7.2.5", 3010 | "psr/container": "^1.0" 3011 | }, 3012 | "suggest": { 3013 | "symfony/service-implementation": "" 3014 | }, 3015 | "type": "library", 3016 | "extra": { 3017 | "branch-alias": { 3018 | "dev-master": "2.0-dev" 3019 | } 3020 | }, 3021 | "autoload": { 3022 | "psr-4": { 3023 | "Symfony\\Contracts\\Service\\": "" 3024 | } 3025 | }, 3026 | "notification-url": "https://packagist.org/downloads/", 3027 | "license": [ 3028 | "MIT" 3029 | ], 3030 | "authors": [ 3031 | { 3032 | "name": "Nicolas Grekas", 3033 | "email": "p@tchwork.com" 3034 | }, 3035 | { 3036 | "name": "Symfony Community", 3037 | "homepage": "https://symfony.com/contributors" 3038 | } 3039 | ], 3040 | "description": "Generic abstractions related to writing services", 3041 | "homepage": "https://symfony.com", 3042 | "keywords": [ 3043 | "abstractions", 3044 | "contracts", 3045 | "decoupling", 3046 | "interfaces", 3047 | "interoperability", 3048 | "standards" 3049 | ], 3050 | "time": "2019-11-18T17:27:11+00:00" 3051 | }, 3052 | { 3053 | "name": "symfony/stopwatch", 3054 | "version": "v5.0.4", 3055 | "source": { 3056 | "type": "git", 3057 | "url": "https://github.com/symfony/stopwatch.git", 3058 | "reference": "5d9add8034135b9a5f7b101d1e42c797e7f053e4" 3059 | }, 3060 | "dist": { 3061 | "type": "zip", 3062 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5d9add8034135b9a5f7b101d1e42c797e7f053e4", 3063 | "reference": "5d9add8034135b9a5f7b101d1e42c797e7f053e4", 3064 | "shasum": "" 3065 | }, 3066 | "require": { 3067 | "php": "^7.2.5", 3068 | "symfony/service-contracts": "^1.0|^2" 3069 | }, 3070 | "type": "library", 3071 | "extra": { 3072 | "branch-alias": { 3073 | "dev-master": "5.0-dev" 3074 | } 3075 | }, 3076 | "autoload": { 3077 | "psr-4": { 3078 | "Symfony\\Component\\Stopwatch\\": "" 3079 | }, 3080 | "exclude-from-classmap": [ 3081 | "/Tests/" 3082 | ] 3083 | }, 3084 | "notification-url": "https://packagist.org/downloads/", 3085 | "license": [ 3086 | "MIT" 3087 | ], 3088 | "authors": [ 3089 | { 3090 | "name": "Fabien Potencier", 3091 | "email": "fabien@symfony.com" 3092 | }, 3093 | { 3094 | "name": "Symfony Community", 3095 | "homepage": "https://symfony.com/contributors" 3096 | } 3097 | ], 3098 | "description": "Symfony Stopwatch Component", 3099 | "homepage": "https://symfony.com", 3100 | "time": "2020-01-04T14:08:26+00:00" 3101 | }, 3102 | { 3103 | "name": "symfony/yaml", 3104 | "version": "v5.0.4", 3105 | "source": { 3106 | "type": "git", 3107 | "url": "https://github.com/symfony/yaml.git", 3108 | "reference": "69b44e3b8f90949aee2eb3aa9b86ceeb01cbf62a" 3109 | }, 3110 | "dist": { 3111 | "type": "zip", 3112 | "url": "https://api.github.com/repos/symfony/yaml/zipball/69b44e3b8f90949aee2eb3aa9b86ceeb01cbf62a", 3113 | "reference": "69b44e3b8f90949aee2eb3aa9b86ceeb01cbf62a", 3114 | "shasum": "" 3115 | }, 3116 | "require": { 3117 | "php": "^7.2.5", 3118 | "symfony/polyfill-ctype": "~1.8" 3119 | }, 3120 | "conflict": { 3121 | "symfony/console": "<4.4" 3122 | }, 3123 | "require-dev": { 3124 | "symfony/console": "^4.4|^5.0" 3125 | }, 3126 | "suggest": { 3127 | "symfony/console": "For validating YAML files using the lint command" 3128 | }, 3129 | "type": "library", 3130 | "extra": { 3131 | "branch-alias": { 3132 | "dev-master": "5.0-dev" 3133 | } 3134 | }, 3135 | "autoload": { 3136 | "psr-4": { 3137 | "Symfony\\Component\\Yaml\\": "" 3138 | }, 3139 | "exclude-from-classmap": [ 3140 | "/Tests/" 3141 | ] 3142 | }, 3143 | "notification-url": "https://packagist.org/downloads/", 3144 | "license": [ 3145 | "MIT" 3146 | ], 3147 | "authors": [ 3148 | { 3149 | "name": "Fabien Potencier", 3150 | "email": "fabien@symfony.com" 3151 | }, 3152 | { 3153 | "name": "Symfony Community", 3154 | "homepage": "https://symfony.com/contributors" 3155 | } 3156 | ], 3157 | "description": "Symfony Yaml Component", 3158 | "homepage": "https://symfony.com", 3159 | "time": "2020-01-21T11:12:28+00:00" 3160 | }, 3161 | { 3162 | "name": "theseer/fdomdocument", 3163 | "version": "1.6.6", 3164 | "source": { 3165 | "type": "git", 3166 | "url": "https://github.com/theseer/fDOMDocument.git", 3167 | "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca" 3168 | }, 3169 | "dist": { 3170 | "type": "zip", 3171 | "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/6e8203e40a32a9c770bcb62fe37e68b948da6dca", 3172 | "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca", 3173 | "shasum": "" 3174 | }, 3175 | "require": { 3176 | "ext-dom": "*", 3177 | "lib-libxml": "*", 3178 | "php": ">=5.3.3" 3179 | }, 3180 | "type": "library", 3181 | "autoload": { 3182 | "classmap": [ 3183 | "src/" 3184 | ] 3185 | }, 3186 | "notification-url": "https://packagist.org/downloads/", 3187 | "license": [ 3188 | "BSD-3-Clause" 3189 | ], 3190 | "authors": [ 3191 | { 3192 | "name": "Arne Blankerts", 3193 | "email": "arne@blankerts.de", 3194 | "role": "lead" 3195 | } 3196 | ], 3197 | "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.", 3198 | "homepage": "https://github.com/theseer/fDOMDocument", 3199 | "time": "2017-06-30T11:53:12+00:00" 3200 | }, 3201 | { 3202 | "name": "theseer/tokenizer", 3203 | "version": "1.1.3", 3204 | "source": { 3205 | "type": "git", 3206 | "url": "https://github.com/theseer/tokenizer.git", 3207 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" 3208 | }, 3209 | "dist": { 3210 | "type": "zip", 3211 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 3212 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 3213 | "shasum": "" 3214 | }, 3215 | "require": { 3216 | "ext-dom": "*", 3217 | "ext-tokenizer": "*", 3218 | "ext-xmlwriter": "*", 3219 | "php": "^7.0" 3220 | }, 3221 | "type": "library", 3222 | "autoload": { 3223 | "classmap": [ 3224 | "src/" 3225 | ] 3226 | }, 3227 | "notification-url": "https://packagist.org/downloads/", 3228 | "license": [ 3229 | "BSD-3-Clause" 3230 | ], 3231 | "authors": [ 3232 | { 3233 | "name": "Arne Blankerts", 3234 | "email": "arne@blankerts.de", 3235 | "role": "Developer" 3236 | } 3237 | ], 3238 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 3239 | "time": "2019-06-13T22:48:21+00:00" 3240 | }, 3241 | { 3242 | "name": "webmozart/assert", 3243 | "version": "1.7.0", 3244 | "source": { 3245 | "type": "git", 3246 | "url": "https://github.com/webmozart/assert.git", 3247 | "reference": "aed98a490f9a8f78468232db345ab9cf606cf598" 3248 | }, 3249 | "dist": { 3250 | "type": "zip", 3251 | "url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598", 3252 | "reference": "aed98a490f9a8f78468232db345ab9cf606cf598", 3253 | "shasum": "" 3254 | }, 3255 | "require": { 3256 | "php": "^5.3.3 || ^7.0", 3257 | "symfony/polyfill-ctype": "^1.8" 3258 | }, 3259 | "conflict": { 3260 | "vimeo/psalm": "<3.6.0" 3261 | }, 3262 | "require-dev": { 3263 | "phpunit/phpunit": "^4.8.36 || ^7.5.13" 3264 | }, 3265 | "type": "library", 3266 | "autoload": { 3267 | "psr-4": { 3268 | "Webmozart\\Assert\\": "src/" 3269 | } 3270 | }, 3271 | "notification-url": "https://packagist.org/downloads/", 3272 | "license": [ 3273 | "MIT" 3274 | ], 3275 | "authors": [ 3276 | { 3277 | "name": "Bernhard Schussek", 3278 | "email": "bschussek@gmail.com" 3279 | } 3280 | ], 3281 | "description": "Assertions to validate method input/output with nice error messages.", 3282 | "keywords": [ 3283 | "assert", 3284 | "check", 3285 | "validate" 3286 | ], 3287 | "time": "2020-02-14T12:15:55+00:00" 3288 | } 3289 | ], 3290 | "aliases": [], 3291 | "minimum-stability": "stable", 3292 | "stability-flags": { 3293 | "roave/security-advisories": 20 3294 | }, 3295 | "prefer-stable": false, 3296 | "prefer-lowest": false, 3297 | "platform": { 3298 | "php": "^7.0" 3299 | }, 3300 | "platform-dev": [] 3301 | } 3302 | -------------------------------------------------------------------------------- /docs/md/1. Namespaces.md: -------------------------------------------------------------------------------- 1 | Namespaces 2 | ========== 3 | 4 | This is a complete list of available namespaces: 5 | 6 | - [`Shrink0r`](Shrink0r) 7 | - [`Shrink0r\Monatic`](Shrink0r/Monatic) 8 | -------------------------------------------------------------------------------- /docs/md/2. Classes.md: -------------------------------------------------------------------------------- 1 | Classes 2 | ======= 3 | 4 | This is a complete list of available classes: 5 | 6 | - [`Shrink0r\Monatic\Eventually`](Shrink0r/Monatic/Eventually.md) — Wraps a given callable, which will eventually invoke a given success callback, when it can provide a value. 7 | - [`Shrink0r\Monatic\Many`](Shrink0r/Monatic/Many.md) — Wraps a given collection, thereby providing recursive/fluent access to any underlying collections. 8 | - [`Shrink0r\Monatic\ManyMaybe`](Shrink0r/Monatic/ManyMaybe.md) — Special subtype of the Many monad, that composes it's collection-items into Maybe monads. 9 | - [`Shrink0r\Monatic\Maybe`](Shrink0r/Monatic/Maybe.md) — Wraps a given value and provides fluent access to it's underlying properties. 10 | - [`Shrink0r\Monatic\None`](Shrink0r/Monatic/None.md) — Acts as a null-value for the Maybe monad. 11 | -------------------------------------------------------------------------------- /docs/md/3. Interfaces.md: -------------------------------------------------------------------------------- 1 | Interfaces 2 | ========== 3 | 4 | This is a complete list of available interfaces: 5 | 6 | - [`Shrink0r\Monatic\MonadInterface`](Shrink0r/Monatic/MonadInterface.md) — Specifies the behavior, that must be provided by concrete monad implementations within "monatic". 7 | -------------------------------------------------------------------------------- /docs/md/Shrink0r/Monatic/Eventually.md: -------------------------------------------------------------------------------- 1 | Shrink0r\Monatic 2 | 3 | Eventually 4 | ========== 5 | 6 | Wraps a given callable, which will eventually invoke a given success callback, when it can provide a value. 7 | 8 | Description 9 | ----------- 10 | 11 | Basically this allows to chain async calls in a straight line without nesting callbacks. 12 | 13 | Signature 14 | --------- 15 | 16 | - It is a(n) **class**. 17 | - It implements the [`MonadInterface`](../../Shrink0r/Monatic/MonadInterface.md) interface. 18 | 19 | Methods 20 | ------- 21 | 22 | The class defines the following methods: 23 | 24 | - [`unit()`](#unit) — Wrap the given value inside a specific MonadInterface implementation. 25 | - [`get()`](#get) — Ununit the the value contained by a specific MonadInterface implementation. 26 | - [`bind()`](#bind) — Process the given $codeBlock in the context of the contained value 27 | and allow for continuation by returning a new monad instance. 28 | 29 | ### `unit()` 30 | 31 | Wrap the given value inside a specific MonadInterface implementation. 32 | 33 | #### Signature 34 | 35 | - It is a **public static** method. 36 | - It accepts the following parameter(s): 37 | - `$codeBlock` (`callable`) 38 | - It returns a(n) [`Eventually`](../../Shrink0r/Monatic/Eventually.md) value. 39 | 40 | ### `get()` 41 | 42 | Ununit the the value contained by a specific MonadInterface implementation. 43 | 44 | #### Description 45 | 46 | In most cases the optonal $codeBlock allows to directly manipulate the value during retrieval. 47 | 48 | #### Signature 49 | 50 | - It is a **public** method. 51 | - It accepts the following parameter(s): 52 | - `$codeBlock` (`callable`) 53 | - _Returns:_ Returns an instance of Eventually, if the value wasn't available yet. 54 | - `mixed` 55 | 56 | ### `bind()` 57 | 58 | Process the given $codeBlock in the context of the contained value 59 | and allow for continuation by returning a new monad instance. 60 | 61 | #### Signature 62 | 63 | - It is a **public** method. 64 | - It accepts the following parameter(s): 65 | - `$codeBlock` (`callable`) — Is expected to return an instance of Eventually. 66 | - It returns a(n) [`Eventually`](../../Shrink0r/Monatic/Eventually.md) value. 67 | 68 | -------------------------------------------------------------------------------- /docs/md/Shrink0r/Monatic/Many.md: -------------------------------------------------------------------------------- 1 | Shrink0r\Monatic 2 | 3 | Many 4 | ==== 5 | 6 | Wraps a given collection, thereby providing recursive/fluent access to any underlying collections. 7 | 8 | Signature 9 | --------- 10 | 11 | - It is a(n) **class**. 12 | - It implements the [`MonadInterface`](../../Shrink0r/Monatic/MonadInterface.md) interface. 13 | 14 | Methods 15 | ------- 16 | 17 | The class defines the following methods: 18 | 19 | - [`unit()`](#unit) — Wrap the given value inside a specific MonadInterface implementation. 20 | - [`get()`](#get) — Ununit the the value contained by a specific MonadInterface implementation. 21 | - [`bind()`](#bind) — Process the given $codeBlock in the context of the contained value 22 | and allow for continuation by returning a new monad instance. 23 | - [`__get()`](#__get) — Retrieves the Many value for the underlying collection-property by name. 24 | - [`__call()`](#__call) — Call an arbitrary method on the monad's value and return a new monad with the result. 25 | 26 | ### `unit()` 27 | 28 | Wrap the given value inside a specific MonadInterface implementation. 29 | 30 | #### Signature 31 | 32 | - It is a **public static** method. 33 | - It accepts the following parameter(s): 34 | - `$values` (`mixed`) — If the value isn't an array, a new array is created from it. 35 | - _Returns:_ Returns None if the given value is null. 36 | - [`Maybe`](../../Shrink0r/Monatic/Maybe.md) 37 | 38 | ### `get()` 39 | 40 | Ununit the the value contained by a specific MonadInterface implementation. 41 | 42 | #### Description 43 | 44 | In most cases the optonal $codeBlock allows to directly manipulate the value during retrieval. 45 | 46 | #### Signature 47 | 48 | - It is a **public** method. 49 | - It accepts the following parameter(s): 50 | - `$codeBlock` (`callable`) 51 | - It returns a(n) `array` value. 52 | 53 | ### `bind()` 54 | 55 | Process the given $codeBlock in the context of the contained value 56 | and allow for continuation by returning a new monad instance. 57 | 58 | #### Signature 59 | 60 | - It is a **public** method. 61 | - It accepts the following parameter(s): 62 | - `$codeBlock` (`callable`) 63 | - It returns a(n) [`Many`](../../Shrink0r/Monatic/Many.md) value. 64 | 65 | ### `__get()` 66 | 67 | Retrieves the Many value for the underlying collection-property by name. 68 | 69 | #### Description 70 | 71 | This allows to chain recursive collection access. 72 | Example: Many::unit($arr)->collection1_1->collection1_2->someKey->get(); 73 | Will return all the values for "someKey" found within the elements of collection1_2, 74 | that are contained within the elements of collection1_1. 75 | 76 | #### Signature 77 | 78 | - It is a **public** method. 79 | - It accepts the following parameter(s): 80 | - `$propertyName` (`string`) 81 | - _Returns:_ Returns None if the property/key doesn't exist or equals null. 82 | - [`Maybe`](../../Shrink0r/Monatic/Maybe.md) 83 | 84 | ### `__call()` 85 | 86 | Call an arbitrary method on the monad's value and return a new monad with the result. 87 | 88 | #### Signature 89 | 90 | - It is a **public** method. 91 | - It accepts the following parameter(s): 92 | - `$name` (`string`) 93 | - `$arguments` (`array`) 94 | - It returns a(n) [`MonadInterface`](../../Shrink0r/Monatic/MonadInterface.md) value. 95 | 96 | -------------------------------------------------------------------------------- /docs/md/Shrink0r/Monatic/ManyMaybe.md: -------------------------------------------------------------------------------- 1 | Shrink0r\Monatic 2 | 3 | ManyMaybe 4 | ========= 5 | 6 | Special subtype of the Many monad, that composes it's collection-items into Maybe monads. 7 | 8 | Signature 9 | --------- 10 | 11 | - It is a(n) **class**. 12 | - It is a subclass of [`Many`](../../Shrink0r/Monatic/Many.md). 13 | 14 | Methods 15 | ------- 16 | 17 | The class defines the following methods: 18 | 19 | - [`get()`](#get) — Ununit the the value contained by a specific MonadInterface implementation. 20 | 21 | ### `get()` 22 | 23 | Ununit the the value contained by a specific MonadInterface implementation. 24 | 25 | #### Description 26 | 27 | In most cases the optonal $codeBlock allows to directly manipulate the value during retrieval. 28 | 29 | #### Signature 30 | 31 | - It is a **public** method. 32 | - It accepts the following parameter(s): 33 | - `$codeBlock` (`callable`) 34 | - It returns a(n) `array` value. 35 | 36 | -------------------------------------------------------------------------------- /docs/md/Shrink0r/Monatic/Maybe.md: -------------------------------------------------------------------------------- 1 | Shrink0r\Monatic 2 | 3 | Maybe 4 | ===== 5 | 6 | Wraps a given value and provides fluent access to it's underlying properties. 7 | 8 | Signature 9 | --------- 10 | 11 | - It is a(n) **class**. 12 | - It implements the [`MonadInterface`](../../Shrink0r/Monatic/MonadInterface.md) interface. 13 | 14 | Methods 15 | ------- 16 | 17 | The class defines the following methods: 18 | 19 | - [`unit()`](#unit) — Wrap the given value inside a specific MonadInterface implementation. 20 | - [`get()`](#get) — Ununit the the value contained by a specific MonadInterface implementation. 21 | - [`bind()`](#bind) — Process the given $codeBlock in the context of the contained value 22 | and allow for continuation by returning a new monad instance. 23 | - [`__get()`](#__get) — Retrieves the monad's value for the underlying property by name. 24 | - [`__call()`](#__call) — Calls an arbitrary method on the monad's value and returns a monad with the result. 25 | 26 | ### `unit()` 27 | 28 | Wrap the given value inside a specific MonadInterface implementation. 29 | 30 | #### Signature 31 | 32 | - It is a **public static** method. 33 | - It accepts the following parameter(s): 34 | - `$value` (`mixed`) — A value that is specific to a concrete monad. 35 | - _Returns:_ Returns None if the given value is null. 36 | - [`Maybe`](../../Shrink0r/Monatic/Maybe.md) 37 | 38 | ### `get()` 39 | 40 | Ununit the the value contained by a specific MonadInterface implementation. 41 | 42 | #### Description 43 | 44 | In most cases the optonal $codeBlock allows to directly manipulate the value during retrieval. 45 | 46 | #### Signature 47 | 48 | - It is a **public** method. 49 | - It accepts the following parameter(s): 50 | - `$codeBlock` (`callable`) 51 | - It returns a(n) `mixed` value. 52 | 53 | ### `bind()` 54 | 55 | Process the given $codeBlock in the context of the contained value 56 | and allow for continuation by returning a new monad instance. 57 | 58 | #### Signature 59 | 60 | - It is a **public** method. 61 | - It accepts the following parameter(s): 62 | - `$codeBlock` (`callable`) — Is expected to return the next value to be unitped. 63 | - _Returns:_ Returns None if the next value is null. 64 | - [`Maybe`](../../Shrink0r/Monatic/Maybe.md) 65 | 66 | ### `__get()` 67 | 68 | Retrieves the monad's value for the underlying property by name. 69 | 70 | #### Description 71 | 72 | This adds syntatic sugar to the Maybe monad, allowing to chain property/array access. 73 | Example: Maybe::unit($arr)->keyone->keytwo->etc->get(); 74 | 75 | #### Signature 76 | 77 | - It is a **public** method. 78 | - It accepts the following parameter(s): 79 | - `$propertyName` (`string`) 80 | - _Returns:_ Returns None if the property/key doesn't exist or equals null. 81 | - [`Maybe`](../../Shrink0r/Monatic/Maybe.md) 82 | 83 | ### `__call()` 84 | 85 | Calls an arbitrary method on the monad's value and returns a monad with the result. 86 | 87 | #### Signature 88 | 89 | - It is a **public** method. 90 | - It accepts the following parameter(s): 91 | - `$methodName` 92 | - `$arguments` (`array`) 93 | - It returns a(n) [`MonadInterface`](../../Shrink0r/Monatic/MonadInterface.md) value. 94 | 95 | -------------------------------------------------------------------------------- /docs/md/Shrink0r/Monatic/MonadInterface.md: -------------------------------------------------------------------------------- 1 | Shrink0r\Monatic 2 | 3 | MonadInterface 4 | ============== 5 | 6 | Specifies the behavior, that must be provided by concrete monad implementations within "monatic". 7 | 8 | Signature 9 | --------- 10 | 11 | - It is a(n) **interface**. 12 | 13 | Methods 14 | ------- 15 | 16 | The interface defines the following methods: 17 | 18 | - [`unit()`](#unit) — Wrap the given value inside a specific MonadInterface implementation. 19 | - [`get()`](#get) — Ununit the the value contained by a specific MonadInterface implementation. 20 | - [`bind()`](#bind) — Process the given $codeBlock in the context of the contained value 21 | and allow for continuation by returning a new monad instance. 22 | 23 | ### `unit()` 24 | 25 | Wrap the given value inside a specific MonadInterface implementation. 26 | 27 | #### Signature 28 | 29 | - It is a **public static** method. 30 | - It accepts the following parameter(s): 31 | - `$value` (`mixed`) — A value that is specific to a concrete monad. 32 | - It returns a(n) [`MonadInterface`](../../Shrink0r/Monatic/MonadInterface.md) value. 33 | 34 | ### `get()` 35 | 36 | Ununit the the value contained by a specific MonadInterface implementation. 37 | 38 | #### Description 39 | 40 | In most cases the optonal $codeBlock allows to directly manipulate the value during retrieval. 41 | 42 | #### Signature 43 | 44 | - It is a **public** method. 45 | - It accepts the following parameter(s): 46 | - `$codeBlock` (`callable`) 47 | - It returns a(n) `mixed` value. 48 | 49 | ### `bind()` 50 | 51 | Process the given $codeBlock in the context of the contained value 52 | and allow for continuation by returning a new monad instance. 53 | 54 | #### Signature 55 | 56 | - It is a **public** method. 57 | - It accepts the following parameter(s): 58 | - `$codeBlock` (`callable`) 59 | - It returns a(n) [`MonadInterface`](../../Shrink0r/Monatic/MonadInterface.md) value. 60 | 61 | -------------------------------------------------------------------------------- /docs/md/Shrink0r/Monatic/None.md: -------------------------------------------------------------------------------- 1 | Shrink0r\Monatic 2 | 3 | None 4 | ==== 5 | 6 | Acts as a null-value for the Maybe monad. 7 | 8 | Signature 9 | --------- 10 | 11 | - It is a(n) **class**. 12 | - It is a subclass of [`Maybe`](../../Shrink0r/Monatic/Maybe.md). 13 | 14 | Methods 15 | ------- 16 | 17 | The class defines the following methods: 18 | 19 | - [`__construct()`](#__construct) — Creates a new None monad. 20 | - [`unit()`](#unit) — Wrap the given value inside a specific MonadInterface implementation. 21 | - [`get()`](#get) — Ununit the the value contained by a specific MonadInterface implementation. 22 | 23 | ### `__construct()` 24 | 25 | Creates a new None monad. 26 | 27 | #### Signature 28 | 29 | - It is a **public** method. 30 | - It does not return anything. 31 | 32 | ### `unit()` 33 | 34 | Wrap the given value inside a specific MonadInterface implementation. 35 | 36 | #### Signature 37 | 38 | - It is a **public static** method. 39 | - It accepts the following parameter(s): 40 | - `$value` (`mixed`) — A value that is specific to a concrete monad. 41 | - _Returns:_ Returns None if the given value is null. 42 | - [`None`](../../Shrink0r/Monatic/None.md) 43 | 44 | ### `get()` 45 | 46 | Ununit the the value contained by a specific MonadInterface implementation. 47 | 48 | #### Description 49 | 50 | In most cases the optonal $codeBlock allows to directly manipulate the value during retrieval. 51 | 52 | #### Signature 53 | 54 | - It is a **public** method. 55 | - It accepts the following parameter(s): 56 | - `$codeBlock` (`callable`) — Is never executed for this type. 57 | - It returns a(n) `null` value. 58 | 59 | -------------------------------------------------------------------------------- /docs/usage.md: -------------------------------------------------------------------------------- 1 | # Brief usage examples 2 | 3 | ## Maybe 4 | 5 | Chained access to nested array/object values: 6 | 7 | ```php 8 | [ "bar" => "hello world!"] ]; 13 | 14 | echo Maybe::unit($data)->foo->bar->get(); 15 | // > hello world! 16 | 17 | echo Maybe::unit($data)->foo->snafu->get(); 18 | // > (null) 19 | 20 | echo get_class(Maybe::unit($data)->foo->snafu); 21 | // > Shrink0r\Monatic\None 22 | 23 | ?> 24 | ``` 25 | 26 | ## Many 27 | 28 | Chained access across recursive collections: 29 | 30 | ```php 31 | [ 38 | [ 39 | "name" => "category-one", 40 | "articles" => [ 41 | [ "title" => "foo one text" ] 42 | ] 43 | ], 44 | [ 45 | "name" => "category-two", 46 | "articles" => [ 47 | [ "title" => "foo two text" ] 48 | ] 49 | ] 50 | ] 51 | ], 52 | [ 53 | "categories" => [ 54 | [ 55 | "name" => "category-three", 56 | "articles" => [ 57 | [ "title" => "foo three text" ] 58 | ] 59 | ], 60 | [ 61 | "name" => "category-four", 62 | "articles" => [ 63 | [ "title" => "foo four text" ] 64 | ] 65 | ] 66 | ] 67 | ] 68 | ]; 69 | 70 | echo implode(', ', Many::unit($data)->categories->articles->title->get()); 71 | // > foo one text, foo two text, foo three text, foo four text 72 | 73 | echo implode(', ', Many::unit($data)->snafu->articles->title->get()); 74 | // > (empty string) 75 | 76 | ?> 77 | ``` 78 | 79 | ## ManyMaybe 80 | 81 | Similar to ```Many```. The difference is, that the ```$value```, that is passed to ```bind```'s callback is guaranteed to be a ```Maybe``` monad: 82 | 83 | ```php 84 | categories->articles->bind(function (Maybe $article) { 94 | // instead of relying on $article['title'] we can now use $article->title 95 | return ManyMaybe::unit(explode(' ', $article->title->get())); 96 | }); 97 | 98 | echo implode(', ', array_unique($titleWords->get())); 99 | // > foo, one, text, two, three, four 100 | 101 | ?> 102 | ``` 103 | 104 | ## Attempt 105 | 106 | Chained execution of dependent method invocations that might throw an exception. 107 | In case an exception is raised along the way, then an Error is returned in the end. 108 | 109 | ```php 110 | get(), [ 'ruby', 'rust', 'erlang' ]); 120 | }; 121 | 122 | $result = Attempt::unit($loadInitialData)->bind($loadMoreData)->get(); 123 | echo implode(", ", $result->get()); // $result is a Success monad 124 | // > php, python, ruby, rust, erlang 125 | 126 | 127 | // Error case example: 128 | $loadInitialData = function (Success $result) { 129 | throw new Exception("An error occured!"); 130 | }; 131 | $loadMoreData = function (Success $result) { 132 | return array_merge($result->get(), [ 'ruby', 'rust', 'erlang' ]); 133 | }; 134 | 135 | $result = Attempt::unit($loadInitialData)->bind($loadMoreData)->get(); 136 | echo $result->get()->getMessage(); // $result is an Error monad 137 | // > An error occured! 138 | 139 | ?> 140 | ``` 141 | 142 | ## Eventually 143 | 144 | Chained execution of dependent method invocations that might execute asynchronously: 145 | 146 | ```php 147 | bind($loadMoreData)->get(function ($finalData) { 165 | echo implode(", ", $finalData); 166 | }); 167 | // > php, python, ruby, rust, erlang 168 | 169 | ?> 170 | ``` 171 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 15 | 16 | 17 | src/ 18 | tests/ 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | src 29 | tests/ 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /sami.cfg.php: -------------------------------------------------------------------------------- 1 | files() 8 | ->name('*.php') 9 | ->in(__DIR__ . '/src'); 10 | 11 | return new Sami($iterator, [ 12 | 'title' => 'monatic - api doc', 13 | 'default_opened_level' => 2, 14 | 'build_dir' => __DIR__ . '/build/docs/sami/api/%version%', 15 | 'cache_dir' => __DIR__ . '/build/cache/sami/%version%' 16 | ]); 17 | -------------------------------------------------------------------------------- /src/Attempt.php: -------------------------------------------------------------------------------- 1 | result) { 41 | $this->result = $this->run(new Success); 42 | } 43 | 44 | if ($this->result instanceof Success) { 45 | return is_callable($codeBlock) ? $codeBlock($this->result) : $this->result; 46 | } 47 | 48 | return $this->result; 49 | } 50 | 51 | /** 52 | * Returns a new Attempt monad that is bound to the given code-block. 53 | * 54 | * @param callable $codeBlock 55 | * 56 | * @return Attempt 57 | */ 58 | public function bind(callable $codeBlock) 59 | { 60 | return static::unit(function ($result) use ($codeBlock) { 61 | $result = $this->run($result); 62 | if ($result instanceof Success) { 63 | return $codeBlock($result); 64 | } 65 | return $result; 66 | }); 67 | } 68 | 69 | /** 70 | * Creates a new Attempt monad. 71 | * 72 | * @param callable $codeBlock 73 | */ 74 | protected function __construct(callable $codeBlock) 75 | { 76 | $this->codeBlock = $codeBlock; 77 | $this->result = null; 78 | } 79 | 80 | /** 81 | * Runs the monad's code-block. 82 | * 83 | * @param MonadInterface $prevResult 84 | * 85 | * @return MonadInterface Either Success or Error in case an exception occured. 86 | */ 87 | protected function run(MonadInterface $prevResult) 88 | { 89 | try { 90 | $result = call_user_func($this->codeBlock, $prevResult); 91 | return ($result instanceof MonadInterface) ? $result : Success::unit($result); 92 | } catch (Exception $error) { 93 | return Error::unit($error); 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/Error.php: -------------------------------------------------------------------------------- 1 | result === null) { 47 | $this->run(function ($value) use ($codeBlock) { 48 | $this->result = $value; 49 | if (is_callable($codeBlock)) { 50 | $codeBlock($this->result); 51 | } 52 | }); 53 | 54 | return $this; 55 | } 56 | 57 | if (is_callable($codeBlock)) { 58 | $codeBlock($this->result); 59 | } 60 | return $this->result; 61 | } 62 | 63 | /** 64 | * Binds the given callable to the monad's managed code-block's successful execution. 65 | * 66 | * @param callable $codeBlock Is expected to return an instance of Eventually. 67 | * 68 | * @return Eventually 69 | */ 70 | public function bind(callable $codeBlock) 71 | { 72 | assert($this->result === null, "'Eventually' instance may not be mutated after code-block execution."); 73 | 74 | return static::unit(function ($success) use ($codeBlock) { 75 | $this->run(function ($value) use ($codeBlock, $success) { 76 | return $codeBlock($value)->run($success); 77 | }); 78 | }); 79 | } 80 | 81 | /** 82 | * Creates a new Eventually instance from the given callable. 83 | * 84 | * @param callable $codeBlock 85 | */ 86 | protected function __construct(callable $codeBlock) 87 | { 88 | $this->codeBlock = $codeBlock; 89 | $this->result = null; 90 | } 91 | 92 | /** 93 | * Executes the monad's managed code-block, passing it the given success callback. 94 | * 95 | * @param callable $success 96 | */ 97 | protected function run(callable $success = null) 98 | { 99 | call_user_func($this->codeBlock, $success); 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/Many.php: -------------------------------------------------------------------------------- 1 | values); 45 | } 46 | return $this->values; 47 | } 48 | 49 | /** 50 | * Maps the given $codeBlock to each element of the contained array 51 | * and units the flattened result in a new Many instance. 52 | * 53 | * @param callable $codeBlock 54 | * 55 | * @return Many 56 | */ 57 | public function bind(callable $codeBlock) 58 | { 59 | return static::unit(array_reduce(array_map($codeBlock, $this->values), [ $this, 'flatMap' ], [])); 60 | } 61 | 62 | /** 63 | * Retrieves the Many value for the underlying collection-property by name. 64 | * 65 | * This allows to chain recursive collection access. 66 | * Example: Many::unit($arr)->collection1_1->collection1_2->someKey->get(); 67 | * Will return all the values for "someKey" found within the elements of collection1_2, 68 | * that are contained within the elements of collection1_1. 69 | * 70 | * @param string $propertyName 71 | * 72 | * @return Maybe Returns None if the property/key doesn't exist or equals null. 73 | */ 74 | public function __get($propertyName) 75 | { 76 | return $this->bind(function ($value) use ($propertyName) { 77 | return static::unit($this->accessValue($value, $propertyName)); 78 | }); 79 | } 80 | 81 | /** 82 | * Call an arbitrary method on the monad's value and return a new monad with the result. 83 | * 84 | * @param string $name 85 | * @param array $arguments 86 | * 87 | * @return MonadInterface 88 | */ 89 | public function __call($name, array $arguments) 90 | { 91 | return $this->bind(function ($value) use ($name, $arguments) { 92 | return static::unit( 93 | call_user_func_array([$value, $name], $arguments) 94 | ); 95 | }); 96 | } 97 | 98 | /** 99 | * Creates a new Many instance from the given array. 100 | * 101 | * @param array $values 102 | */ 103 | protected function __construct(array $values) 104 | { 105 | $this->values = $values; 106 | $this->accessor = PropertyAccess::createPropertyAccessor(); 107 | } 108 | 109 | /** 110 | * Internal helper method that is used to retrieve an underlying value from a given option/array/object. 111 | * If the given $context is scalar, it is returned as it was given. 112 | * If the given $context is an Maybe, the getped result of the value-access is returned. 113 | * 114 | * @param mixed $context The context to retrieve the value from. 115 | * @param string $key The property-name/array-key to use in order to read the value from the $context. 116 | * 117 | * @return mixed 118 | */ 119 | protected function accessValue($context, $key) 120 | { 121 | if ($context instanceof Maybe) { 122 | return $context->$key->get(); 123 | } 124 | if (is_array($context)) { 125 | return $this->accessor->getValue($context, "[{$key}]"); 126 | } 127 | if (is_object($context)) { 128 | return $this->accessor->getValue($context, $key); 129 | } 130 | return $context; 131 | } 132 | 133 | /** 134 | * Internal callback that is used in conjunction with php's array_reduce to flatten recursive chain results. 135 | * 136 | * @param array $flattened The current flat array. 137 | * @param MonadInterface $result The result to be reduced into the flat array. 138 | * 139 | * @return array A new flat array created from merging in the flattened result. 140 | */ 141 | protected function flatMap(array $flattened, MonadInterface $result) 142 | { 143 | $value = $result->get(); 144 | 145 | if (!is_array($value)) { 146 | $value = [ $value ]; 147 | } 148 | 149 | return array_merge($flattened, $value); 150 | } 151 | } 152 | -------------------------------------------------------------------------------- /src/ManyMaybe.php: -------------------------------------------------------------------------------- 1 | get(); 21 | }; 22 | 23 | return array_map($getValue, parent::get($codeBlock)); 24 | } 25 | 26 | /** 27 | * Creates a new ManyMaybe instance from the given collection, 28 | * thereby composing each collection item into an Maybe monad. 29 | * 30 | * @param array $values 31 | */ 32 | protected function __construct(array $values) 33 | { 34 | $unit = function ($value) { 35 | return Maybe::unit($value); 36 | }; 37 | 38 | parent::__construct(array_map($unit, $values)); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/Maybe.php: -------------------------------------------------------------------------------- 1 | value); 45 | } 46 | return $this->value; 47 | } 48 | 49 | /** 50 | * Runs the given code-block on the monad's value, if the value isn't null. 51 | * 52 | * @param callable $codeBlock Is expected to return the next value to be unitped. 53 | * 54 | * @return Maybe Returns None if the next value is null. 55 | */ 56 | public function bind(callable $codeBlock) 57 | { 58 | if ($this->value === null) { 59 | return new None; 60 | } 61 | return static::unit(call_user_func($codeBlock, $this->value)); 62 | } 63 | 64 | /** 65 | * Retrieves the monad's value for the underlying property by name. 66 | * 67 | * This adds syntatic sugar to the Maybe monad, allowing to chain property/array access. 68 | * Example: Maybe::unit($arr)->keyone->keytwo->etc->get(); 69 | * 70 | * @param string $propertyName 71 | * 72 | * @return Maybe Returns None if the property/key doesn't exist or equals null. 73 | */ 74 | public function __get($propertyName) 75 | { 76 | return $this->bind(function ($value) use ($propertyName) { 77 | return $this->accessValue($value, $propertyName); 78 | }); 79 | } 80 | 81 | /** 82 | * Calls an arbitrary method on the monad's value and returns a monad with the result. 83 | * 84 | * @param string $name 85 | * @param array $arguments 86 | * 87 | * @return MonadInterface 88 | */ 89 | public function __call($methodName, array $arguments) 90 | { 91 | return $this->bind(function ($value) use ($methodName, $arguments) { 92 | $callable = [ $value, $methodName ]; 93 | 94 | $result = null; 95 | if (is_callable($callable)) { 96 | $result = call_user_func_array([$value, $methodName], $arguments); 97 | } 98 | 99 | return static::unit($result); 100 | }); 101 | } 102 | 103 | /** 104 | * Creates a new Maybe monad. 105 | * 106 | * @param mixed $value 107 | */ 108 | protected function __construct($value) 109 | { 110 | $this->value = ($value instanceof MonadInterface) ? $value->get() : $value; 111 | $this->accessor = PropertyAccess::createPropertyAccessor(); 112 | } 113 | 114 | /** 115 | * Internal helper method that is used to retrieve an underlying value from a given context (object/array). 116 | * If the given context is scalar, it is returned as the resulting value. 117 | * 118 | * @param mixed $context The context to retrieve the value from. 119 | * @param string $key The property-name/array-key to use in order to read the value from the $context. 120 | * 121 | * @return mixed 122 | */ 123 | protected function accessValue($context, $key) 124 | { 125 | if (is_array($context)) { 126 | return $this->accessor->getValue($context, "[{$key}]"); 127 | } 128 | if (is_object($context)) { 129 | return $this->accessor->getValue($context, $key); 130 | } 131 | return $context; 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /src/MonadInterface.php: -------------------------------------------------------------------------------- 1 | bind(function ($result) { 17 | return $result->get() * 2; 18 | })->get(); 19 | 20 | $this->assertInstanceOf(Success::CLASS, $result); 21 | $this->assertEquals(46, $result->get()); 22 | } 23 | 24 | public function testErrorResult() 25 | { 26 | $result = Attempt::unit(function ($result) { 27 | throw new Exception("Snafu!"); 28 | })->bind(function ($result) { 29 | return $result->get() * 2; 30 | })->get(); 31 | 32 | $this->assertInstanceOf(Error::CLASS, $result); 33 | $this->assertEquals("Snafu!", $result->message->get()); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /tests/EventuallyTest.php: -------------------------------------------------------------------------------- 1 | $noOp, 'usersLoaded' => $noOp ]; 16 | 17 | // function that pretends it loads a list of urls from somewhere 18 | $loadUrls = function () use (&$callbackTriggers) { 19 | return Eventually::unit(function ($success) use (&$callbackTriggers) { 20 | $callbackTriggers['urlsLoaded'] = function () use ($success) { 21 | $success([ 'http://google.de', 'http://shrink.de' ]); 22 | }; 23 | }); 24 | }; 25 | 26 | // function that pretends it loads a list of usernames from somewhere 27 | // it requires a list of urls to build on 28 | $loadUsers = function () use (&$callbackTriggers) { 29 | return Eventually::unit(function ($success) use (&$callbackTriggers) { 30 | $callbackTriggers['usersLoaded'] = function () use ($success) { 31 | $success([ 'shrink0r', 'graste' ]); 32 | }; 33 | }); 34 | }; 35 | 36 | $loadedUsers = []; 37 | // chain the loadUrls and loadUsers functions and do something with the users when they become available 38 | $loadUrls()->bind($loadUsers)->get(function ($users) use (&$loadedUsers) { 39 | foreach ($users as $user) { 40 | $loadedUsers[] = $user; 41 | } 42 | }); 43 | 44 | // simulate events firing later 45 | $callbackTriggers['urlsLoaded'](); 46 | $callbackTriggers['usersLoaded'](); 47 | 48 | $this->assertEquals([ 'shrink0r', 'graste' ], $loadedUsers); 49 | } 50 | 51 | public function testAndThenSync() 52 | { 53 | // function that immediately provides a list of urls from somewhere 54 | $loadUrls = function () { 55 | return Eventually::unit(function ($success) { 56 | $success([ 'http://google.de', 'http://shrink.de' ]); 57 | }); 58 | }; 59 | 60 | // function that immediately provides a list of usernames 61 | $loadUsers = function () { 62 | return Eventually::unit(function ($success) { 63 | $success([ 'shrink0r', 'graste' ]); 64 | }); 65 | }; 66 | 67 | $loadedUsers = []; 68 | // chain the loadUrls and loadUsers functions 69 | $eventually = $loadUrls()->bind($loadUsers)->get(function ($users) use (&$loadedUsers) { 70 | foreach ($users as $user) { 71 | $loadedUsers[] = $user; 72 | } 73 | }); 74 | 75 | $expectedUsers = [ 'shrink0r', 'graste' ]; 76 | $this->assertEquals($expectedUsers, $loadedUsers); 77 | $this->assertEquals($expectedUsers, $eventually->get()); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /tests/Fixtures/Article.php: -------------------------------------------------------------------------------- 1 | title = $title; 14 | $this->text = $text; 15 | $this->tags = $tags; 16 | } 17 | 18 | public function getTitle() 19 | { 20 | return $this->title; 21 | } 22 | 23 | public function getText() 24 | { 25 | return $this->text; 26 | } 27 | 28 | public function getTags() 29 | { 30 | return $this->tags; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /tests/Fixtures/Category.php: -------------------------------------------------------------------------------- 1 | name = $name; 14 | $this->articles = $articles; 15 | } 16 | 17 | public function getName() 18 | { 19 | return $this->name; 20 | } 21 | 22 | public function getFirstArticle() 23 | { 24 | return reset($this->articles) ?: null; 25 | } 26 | 27 | public function getArticles() 28 | { 29 | return $this->articles; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /tests/ManyMaybeTest.php: -------------------------------------------------------------------------------- 1 | [ 14 | [ 15 | 'title' => 'foo category', 16 | 'articles' => [ 17 | [ 18 | 'title' => 'article one', 19 | 'text' => 'article one text' 20 | ], 21 | [ 22 | 'title' => 'article two', 23 | 'text' => 'article two text' 24 | ] 25 | ] 26 | ], 27 | [ 28 | 'title' => 'bar category', 29 | 'articles' => [ 30 | [ 31 | 'title' => 'article three', 32 | 'text' => 'article three text' 33 | ], 34 | [ 35 | 'title' => 'article four', 36 | 'text' => 'article four text' 37 | ] 38 | ] 39 | ] 40 | ] 41 | ] 42 | ]; 43 | 44 | $expectedWords = [ 'article', 'one', 'article', 'two', 'article', 'three', 'article', 'four']; 45 | 46 | $titleWords = ManyMaybe::unit($blogs)->categories->articles->bind(function ($optArticle) { 47 | return ManyMaybe::unit(explode(' ', $optArticle->title->get())); 48 | }); 49 | $this->assertEquals($expectedWords, $titleWords->get()); 50 | 51 | $titleWords = ManyMaybe::unit($blogs)->categories->articles->title->bind(function ($optTitle) { 52 | return ManyMaybe::unit(explode(' ', $optTitle->get())); 53 | }); 54 | $this->assertEquals($expectedWords, $titleWords->get()); 55 | } 56 | 57 | public function stestAndThenInvalid() 58 | { 59 | $blogs = [ 60 | [ 61 | 'categsories' => [ // <- key is misspelled here 62 | [ 63 | 'title' => 'foo category', 64 | 'articles' => [ 65 | [ 66 | 'title' => 'article one', 67 | 'text' => 'article one text' 68 | ], 69 | [ 70 | 'title' => 'article two', 71 | 'text' => 'article two text' 72 | ] 73 | ] 74 | ], 75 | [ 76 | 'title' => 'bar category', 77 | 'articles' => [ 78 | [ 79 | 'title' => 'article three', 80 | 'text' => 'article three text' 81 | ], 82 | [ 83 | 'title' => 'article four', 84 | 'text' => 'article four text' 85 | ] 86 | ] 87 | ] 88 | ] 89 | ] 90 | ]; 91 | 92 | $titleWords = ManyMaybe::unit($blogs)->categories->articles->bind(function ($optArticle) { 93 | return ManyMaybe::unit(explode(' ', $optArticle->title->get())); 94 | }); 95 | 96 | $this->assertEquals([], $titleWords->get()); 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /tests/ManyTest.php: -------------------------------------------------------------------------------- 1 | [ 16 | [ 17 | 'title' => 'foo category', 18 | 'articles' => [ 19 | [ 20 | 'title' => 'article one', 21 | 'text' => 'article one text' 22 | ], 23 | [ 24 | 'title' => 'article two', 25 | 'text' => 'article two text' 26 | ] 27 | ] 28 | ], 29 | [ 30 | 'title' => 'bar category', 31 | 'articles' => [ 32 | [ 33 | 'title' => 'article three', 34 | 'text' => 'article three text' 35 | ], 36 | [ 37 | 'title' => 'article four', 38 | 'text' => 'article four text' 39 | ] 40 | ] 41 | ] 42 | ] 43 | ] 44 | ]; 45 | 46 | $expectedWords = [ 'article', 'one', 'article', 'two', 'article', 'three', 'article', 'four']; 47 | 48 | $titleWords = Many::unit($blogs)->categories->articles->bind(function ($article) { 49 | return Many::unit(explode(' ', $article['title'])); 50 | }); 51 | $this->assertEquals($expectedWords, $titleWords->get()); 52 | 53 | $titleWords = Many::unit($blogs)->categories->articles->title->bind(function ($title) { 54 | return Many::unit(explode(' ', $title)); 55 | }); 56 | $this->assertEquals($expectedWords, $titleWords->get()); 57 | } 58 | 59 | public function testAndThenInvalid() 60 | { 61 | $blogs = [ 62 | [ 63 | 'categsories' => [ // <- key is misspelled here 64 | [ 65 | 'title' => 'foo category', 66 | 'articles' => [ 67 | [ 68 | 'title' => 'article one', 69 | 'text' => 'article one text' 70 | ], 71 | [ 72 | 'title' => 'article two', 73 | 'text' => 'article two text' 74 | ] 75 | ] 76 | ], 77 | [ 78 | 'title' => 'bar category', 79 | 'articles' => [ 80 | [ 81 | 'title' => 'article three', 82 | 'text' => 'article three text' 83 | ], 84 | [ 85 | 'title' => 'article four', 86 | 'text' => 'article four text' 87 | ] 88 | ] 89 | ] 90 | ] 91 | ] 92 | ]; 93 | 94 | $titleWords = Many::unit($blogs)->categories->articles->bind(function ($article) { 95 | return Many::unit(explode(' ', $article['title'])); 96 | }); 97 | 98 | $this->assertEquals([], $titleWords->get()); 99 | } 100 | 101 | public function testCallChainValid() 102 | { 103 | $article1 = new Article('monads hurray 1', '', ['one', 'two']); 104 | $article2 = new Article('monads hurray 2', '', ['foo', 'bar']); 105 | $category = new Category('programming', [ $article1, $article2 ]); 106 | 107 | $tags = Many::unit($category)->getArticles()->getTags(); 108 | 109 | $this->assertEquals(['one', 'two', 'foo', 'bar'], $tags->get()); 110 | } 111 | 112 | public function testCallChainInvalid() 113 | { 114 | $article1 = new Article('monads hurray 1', ''); 115 | $article2 = new Article('monads hurray 2', ''); 116 | $category = new Category('programming', [ $article1, $article2 ]); 117 | 118 | $tags = Many::unit($category)->getArticles()->getTags(); 119 | 120 | $this->assertEquals([], $tags->get()); 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /tests/MaybeTest.php: -------------------------------------------------------------------------------- 1 | [ 16 | 'address' => [ 17 | 'country' => [ 18 | 'capital' => [ 19 | 'weather' => 'sunny' 20 | ] 21 | ] 22 | ] 23 | ] 24 | ]; 25 | 26 | $weather = Maybe::unit($data)->creator->address->country->capital->weather; 27 | 28 | $this->assertEquals('sunny', $weather->get()); 29 | } 30 | 31 | public function testAndThenInvalid() 32 | { 33 | $data = [ 34 | 'creator' => [ 35 | 'address' => [ 36 | 'country' => [ 37 | 'capistal' => [ // <- non-existant/invalid key used here 38 | 'weather' => 'sunny' 39 | ] 40 | ] 41 | ] 42 | ] 43 | ]; 44 | 45 | $weather = Maybe::unit($data)->creator->address->country->capital->weather; 46 | 47 | $this->assertNull($weather->get()); 48 | $this->assertInstanceOf(None::CLASS, $weather); 49 | } 50 | 51 | public function testAndThenValidObject() 52 | { 53 | $article = new Article('monads hurray', 'I can haz monads and so can haz you!'); 54 | $category = new Category('programming', [ $article ]); 55 | 56 | $title = Maybe::unit($category)->firstArticle->title; 57 | 58 | $this->assertEquals($article->getTitle(), $title->get()); 59 | } 60 | 61 | public function testAndThenInvalidObject() 62 | { 63 | $category = new Category('programming'); 64 | 65 | $title = Maybe::unit($category)->firstArticle->title; 66 | 67 | $this->assertNull($title->get()); 68 | $this->assertInstanceOf(None::CLASS, $title); 69 | } 70 | 71 | public function testCallChainValid() 72 | { 73 | $article = new Article('monads hurray', 'I can haz monads and so can haz you!'); 74 | $category = new Category('programming', [ $article ]); 75 | 76 | $title = Maybe::unit($category)->getFirstArticle()->getTitle(); 77 | 78 | $this->assertEquals($article->getTitle(), $title->get()); 79 | } 80 | 81 | public function testCallChainInvalid() 82 | { 83 | $category = new Category('programming', [ ]); 84 | 85 | $title = Maybe::unit($category)->getFirstArticle()->getTitle(); 86 | 87 | $this->assertInstanceOf(None::CLASS, $title); 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /tests/NoneTest.php: -------------------------------------------------------------------------------- 1 | foobar; 12 | 13 | $this->assertNull($none->get()); 14 | } 15 | 16 | public function testCreate() 17 | { 18 | $none = new None; 19 | 20 | $this->assertNull($none->get()); 21 | } 22 | 23 | public function testWrap() 24 | { 25 | $none = None::unit(23); 26 | 27 | $this->assertNull($none->get()); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 |