├── .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 | [][1]
4 | [][10]
5 | [][1]
6 | [][2]
7 | [][3]
8 | [](https://codeclimate.com/github/shrink0r/monatic)
9 | [][4]
10 | [][9]
11 | [][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 |