├── .gitignore ├── .travis.yml ├── ISSUE_TEMPLATE.md ├── LICENSE ├── PULL_REQUEST_TEMPLATE.md ├── composer.json ├── composer.lock ├── phpunit.xml ├── readme.md ├── src └── PwnedPasswords │ ├── Exceptions │ ├── InvalidPasswordException.php │ └── InvalidResponseException.php │ └── PwnedPasswords.php └── tests └── PwnedPasswordsTest.php /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | /.idea 3 | .phpunit.result.cache 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | php: 3 | - '7.2' 4 | - '7.3' 5 | script: 6 | - composer install 7 | - phpunit --configuration phpunit.xml -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Expected Behavior 2 | 3 | 4 | ## Actual Behavior 5 | 6 | 7 | ## Steps to Reproduce the Problem 8 | 9 | 1. 10 | 2. 11 | 12 | ## Specifications 13 | - Platform: 14 | - Subsystem: 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Ron 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Fixes # 2 | 3 | ## Proposed Changes 4 | 5 | - 6 | - 7 | - 8 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mxrxdxn/pwned-passwords", 3 | "description": "A library to query Troy Hunt's Pwned Passwords service to see whether or not a password has been included in a public breach.", 4 | "keywords": ["password", "passwords", "security"], 5 | "type": "library", 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "Ron Marsden", 10 | "email": "hello@ronmarsden.com" 11 | }, 12 | { 13 | "name": "Saif Eddin Gmati", 14 | "email": "azjezz2@gmail.com" 15 | } 16 | ], 17 | "autoload": { 18 | "psr-4" : { 19 | "PwnedPasswords\\": "src/PwnedPasswords/" 20 | } 21 | }, 22 | "require": { 23 | "php": "^7.3 | ^8.0", 24 | "guzzlehttp/guzzle": "^6.3 | ^7.0" 25 | }, 26 | "require-dev": { 27 | "phpunit/phpunit": "^9.5", 28 | "symfony/var-dumper": "^5.3" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /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": "e0c7dd6c7248e1cfff2b3b27022884af", 8 | "packages": [ 9 | { 10 | "name": "guzzlehttp/guzzle", 11 | "version": "7.3.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/guzzle/guzzle.git", 15 | "reference": "7008573787b430c1c1f650e3722d9bba59967628" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", 20 | "reference": "7008573787b430c1c1f650e3722d9bba59967628", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "ext-json": "*", 25 | "guzzlehttp/promises": "^1.4", 26 | "guzzlehttp/psr7": "^1.7 || ^2.0", 27 | "php": "^7.2.5 || ^8.0", 28 | "psr/http-client": "^1.0" 29 | }, 30 | "provide": { 31 | "psr/http-client-implementation": "1.0" 32 | }, 33 | "require-dev": { 34 | "bamarni/composer-bin-plugin": "^1.4.1", 35 | "ext-curl": "*", 36 | "php-http/client-integration-tests": "^3.0", 37 | "phpunit/phpunit": "^8.5.5 || ^9.3.5", 38 | "psr/log": "^1.1" 39 | }, 40 | "suggest": { 41 | "ext-curl": "Required for CURL handler support", 42 | "ext-intl": "Required for Internationalized Domain Name (IDN) support", 43 | "psr/log": "Required for using the Log middleware" 44 | }, 45 | "type": "library", 46 | "extra": { 47 | "branch-alias": { 48 | "dev-master": "7.3-dev" 49 | } 50 | }, 51 | "autoload": { 52 | "psr-4": { 53 | "GuzzleHttp\\": "src/" 54 | }, 55 | "files": [ 56 | "src/functions_include.php" 57 | ] 58 | }, 59 | "notification-url": "https://packagist.org/downloads/", 60 | "license": [ 61 | "MIT" 62 | ], 63 | "authors": [ 64 | { 65 | "name": "Michael Dowling", 66 | "email": "mtdowling@gmail.com", 67 | "homepage": "https://github.com/mtdowling" 68 | }, 69 | { 70 | "name": "Márk Sági-Kazár", 71 | "email": "mark.sagikazar@gmail.com", 72 | "homepage": "https://sagikazarmark.hu" 73 | } 74 | ], 75 | "description": "Guzzle is a PHP HTTP client library", 76 | "homepage": "http://guzzlephp.org/", 77 | "keywords": [ 78 | "client", 79 | "curl", 80 | "framework", 81 | "http", 82 | "http client", 83 | "psr-18", 84 | "psr-7", 85 | "rest", 86 | "web service" 87 | ], 88 | "support": { 89 | "issues": "https://github.com/guzzle/guzzle/issues", 90 | "source": "https://github.com/guzzle/guzzle/tree/7.3.0" 91 | }, 92 | "funding": [ 93 | { 94 | "url": "https://github.com/GrahamCampbell", 95 | "type": "github" 96 | }, 97 | { 98 | "url": "https://github.com/Nyholm", 99 | "type": "github" 100 | }, 101 | { 102 | "url": "https://github.com/alexeyshockov", 103 | "type": "github" 104 | }, 105 | { 106 | "url": "https://github.com/gmponos", 107 | "type": "github" 108 | } 109 | ], 110 | "time": "2021-03-23T11:33:13+00:00" 111 | }, 112 | { 113 | "name": "guzzlehttp/promises", 114 | "version": "1.4.1", 115 | "source": { 116 | "type": "git", 117 | "url": "https://github.com/guzzle/promises.git", 118 | "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" 119 | }, 120 | "dist": { 121 | "type": "zip", 122 | "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", 123 | "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", 124 | "shasum": "" 125 | }, 126 | "require": { 127 | "php": ">=5.5" 128 | }, 129 | "require-dev": { 130 | "symfony/phpunit-bridge": "^4.4 || ^5.1" 131 | }, 132 | "type": "library", 133 | "extra": { 134 | "branch-alias": { 135 | "dev-master": "1.4-dev" 136 | } 137 | }, 138 | "autoload": { 139 | "psr-4": { 140 | "GuzzleHttp\\Promise\\": "src/" 141 | }, 142 | "files": [ 143 | "src/functions_include.php" 144 | ] 145 | }, 146 | "notification-url": "https://packagist.org/downloads/", 147 | "license": [ 148 | "MIT" 149 | ], 150 | "authors": [ 151 | { 152 | "name": "Michael Dowling", 153 | "email": "mtdowling@gmail.com", 154 | "homepage": "https://github.com/mtdowling" 155 | } 156 | ], 157 | "description": "Guzzle promises library", 158 | "keywords": [ 159 | "promise" 160 | ], 161 | "support": { 162 | "issues": "https://github.com/guzzle/promises/issues", 163 | "source": "https://github.com/guzzle/promises/tree/1.4.1" 164 | }, 165 | "time": "2021-03-07T09:25:29+00:00" 166 | }, 167 | { 168 | "name": "guzzlehttp/psr7", 169 | "version": "2.0.0", 170 | "source": { 171 | "type": "git", 172 | "url": "https://github.com/guzzle/psr7.git", 173 | "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7" 174 | }, 175 | "dist": { 176 | "type": "zip", 177 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", 178 | "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", 179 | "shasum": "" 180 | }, 181 | "require": { 182 | "php": "^7.2.5 || ^8.0", 183 | "psr/http-factory": "^1.0", 184 | "psr/http-message": "^1.0", 185 | "ralouphie/getallheaders": "^3.0" 186 | }, 187 | "provide": { 188 | "psr/http-factory-implementation": "1.0", 189 | "psr/http-message-implementation": "1.0" 190 | }, 191 | "require-dev": { 192 | "bamarni/composer-bin-plugin": "^1.4.1", 193 | "http-interop/http-factory-tests": "^0.9", 194 | "phpunit/phpunit": "^8.5.8 || ^9.3.10" 195 | }, 196 | "suggest": { 197 | "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" 198 | }, 199 | "type": "library", 200 | "extra": { 201 | "branch-alias": { 202 | "dev-master": "2.0-dev" 203 | } 204 | }, 205 | "autoload": { 206 | "psr-4": { 207 | "GuzzleHttp\\Psr7\\": "src/" 208 | } 209 | }, 210 | "notification-url": "https://packagist.org/downloads/", 211 | "license": [ 212 | "MIT" 213 | ], 214 | "authors": [ 215 | { 216 | "name": "Michael Dowling", 217 | "email": "mtdowling@gmail.com", 218 | "homepage": "https://github.com/mtdowling" 219 | }, 220 | { 221 | "name": "Tobias Schultze", 222 | "homepage": "https://github.com/Tobion" 223 | }, 224 | { 225 | "name": "Márk Sági-Kazár", 226 | "email": "mark.sagikazar@gmail.com", 227 | "homepage": "https://sagikazarmark.hu" 228 | } 229 | ], 230 | "description": "PSR-7 message implementation that also provides common utility methods", 231 | "keywords": [ 232 | "http", 233 | "message", 234 | "psr-7", 235 | "request", 236 | "response", 237 | "stream", 238 | "uri", 239 | "url" 240 | ], 241 | "support": { 242 | "issues": "https://github.com/guzzle/psr7/issues", 243 | "source": "https://github.com/guzzle/psr7/tree/2.0.0" 244 | }, 245 | "time": "2021-06-30T20:03:07+00:00" 246 | }, 247 | { 248 | "name": "psr/http-client", 249 | "version": "1.0.1", 250 | "source": { 251 | "type": "git", 252 | "url": "https://github.com/php-fig/http-client.git", 253 | "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" 254 | }, 255 | "dist": { 256 | "type": "zip", 257 | "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", 258 | "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", 259 | "shasum": "" 260 | }, 261 | "require": { 262 | "php": "^7.0 || ^8.0", 263 | "psr/http-message": "^1.0" 264 | }, 265 | "type": "library", 266 | "extra": { 267 | "branch-alias": { 268 | "dev-master": "1.0.x-dev" 269 | } 270 | }, 271 | "autoload": { 272 | "psr-4": { 273 | "Psr\\Http\\Client\\": "src/" 274 | } 275 | }, 276 | "notification-url": "https://packagist.org/downloads/", 277 | "license": [ 278 | "MIT" 279 | ], 280 | "authors": [ 281 | { 282 | "name": "PHP-FIG", 283 | "homepage": "http://www.php-fig.org/" 284 | } 285 | ], 286 | "description": "Common interface for HTTP clients", 287 | "homepage": "https://github.com/php-fig/http-client", 288 | "keywords": [ 289 | "http", 290 | "http-client", 291 | "psr", 292 | "psr-18" 293 | ], 294 | "support": { 295 | "source": "https://github.com/php-fig/http-client/tree/master" 296 | }, 297 | "time": "2020-06-29T06:28:15+00:00" 298 | }, 299 | { 300 | "name": "psr/http-factory", 301 | "version": "1.0.1", 302 | "source": { 303 | "type": "git", 304 | "url": "https://github.com/php-fig/http-factory.git", 305 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" 306 | }, 307 | "dist": { 308 | "type": "zip", 309 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", 310 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", 311 | "shasum": "" 312 | }, 313 | "require": { 314 | "php": ">=7.0.0", 315 | "psr/http-message": "^1.0" 316 | }, 317 | "type": "library", 318 | "extra": { 319 | "branch-alias": { 320 | "dev-master": "1.0.x-dev" 321 | } 322 | }, 323 | "autoload": { 324 | "psr-4": { 325 | "Psr\\Http\\Message\\": "src/" 326 | } 327 | }, 328 | "notification-url": "https://packagist.org/downloads/", 329 | "license": [ 330 | "MIT" 331 | ], 332 | "authors": [ 333 | { 334 | "name": "PHP-FIG", 335 | "homepage": "http://www.php-fig.org/" 336 | } 337 | ], 338 | "description": "Common interfaces for PSR-7 HTTP message factories", 339 | "keywords": [ 340 | "factory", 341 | "http", 342 | "message", 343 | "psr", 344 | "psr-17", 345 | "psr-7", 346 | "request", 347 | "response" 348 | ], 349 | "support": { 350 | "source": "https://github.com/php-fig/http-factory/tree/master" 351 | }, 352 | "time": "2019-04-30T12:38:16+00:00" 353 | }, 354 | { 355 | "name": "psr/http-message", 356 | "version": "1.0.1", 357 | "source": { 358 | "type": "git", 359 | "url": "https://github.com/php-fig/http-message.git", 360 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 361 | }, 362 | "dist": { 363 | "type": "zip", 364 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 365 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 366 | "shasum": "" 367 | }, 368 | "require": { 369 | "php": ">=5.3.0" 370 | }, 371 | "type": "library", 372 | "extra": { 373 | "branch-alias": { 374 | "dev-master": "1.0.x-dev" 375 | } 376 | }, 377 | "autoload": { 378 | "psr-4": { 379 | "Psr\\Http\\Message\\": "src/" 380 | } 381 | }, 382 | "notification-url": "https://packagist.org/downloads/", 383 | "license": [ 384 | "MIT" 385 | ], 386 | "authors": [ 387 | { 388 | "name": "PHP-FIG", 389 | "homepage": "http://www.php-fig.org/" 390 | } 391 | ], 392 | "description": "Common interface for HTTP messages", 393 | "homepage": "https://github.com/php-fig/http-message", 394 | "keywords": [ 395 | "http", 396 | "http-message", 397 | "psr", 398 | "psr-7", 399 | "request", 400 | "response" 401 | ], 402 | "support": { 403 | "source": "https://github.com/php-fig/http-message/tree/master" 404 | }, 405 | "time": "2016-08-06T14:39:51+00:00" 406 | }, 407 | { 408 | "name": "ralouphie/getallheaders", 409 | "version": "3.0.3", 410 | "source": { 411 | "type": "git", 412 | "url": "https://github.com/ralouphie/getallheaders.git", 413 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 414 | }, 415 | "dist": { 416 | "type": "zip", 417 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 418 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 419 | "shasum": "" 420 | }, 421 | "require": { 422 | "php": ">=5.6" 423 | }, 424 | "require-dev": { 425 | "php-coveralls/php-coveralls": "^2.1", 426 | "phpunit/phpunit": "^5 || ^6.5" 427 | }, 428 | "type": "library", 429 | "autoload": { 430 | "files": [ 431 | "src/getallheaders.php" 432 | ] 433 | }, 434 | "notification-url": "https://packagist.org/downloads/", 435 | "license": [ 436 | "MIT" 437 | ], 438 | "authors": [ 439 | { 440 | "name": "Ralph Khattar", 441 | "email": "ralph.khattar@gmail.com" 442 | } 443 | ], 444 | "description": "A polyfill for getallheaders.", 445 | "support": { 446 | "issues": "https://github.com/ralouphie/getallheaders/issues", 447 | "source": "https://github.com/ralouphie/getallheaders/tree/develop" 448 | }, 449 | "time": "2019-03-08T08:55:37+00:00" 450 | } 451 | ], 452 | "packages-dev": [ 453 | { 454 | "name": "doctrine/instantiator", 455 | "version": "1.4.0", 456 | "source": { 457 | "type": "git", 458 | "url": "https://github.com/doctrine/instantiator.git", 459 | "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" 460 | }, 461 | "dist": { 462 | "type": "zip", 463 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", 464 | "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", 465 | "shasum": "" 466 | }, 467 | "require": { 468 | "php": "^7.1 || ^8.0" 469 | }, 470 | "require-dev": { 471 | "doctrine/coding-standard": "^8.0", 472 | "ext-pdo": "*", 473 | "ext-phar": "*", 474 | "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", 475 | "phpstan/phpstan": "^0.12", 476 | "phpstan/phpstan-phpunit": "^0.12", 477 | "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" 478 | }, 479 | "type": "library", 480 | "autoload": { 481 | "psr-4": { 482 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 483 | } 484 | }, 485 | "notification-url": "https://packagist.org/downloads/", 486 | "license": [ 487 | "MIT" 488 | ], 489 | "authors": [ 490 | { 491 | "name": "Marco Pivetta", 492 | "email": "ocramius@gmail.com", 493 | "homepage": "https://ocramius.github.io/" 494 | } 495 | ], 496 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 497 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 498 | "keywords": [ 499 | "constructor", 500 | "instantiate" 501 | ], 502 | "support": { 503 | "issues": "https://github.com/doctrine/instantiator/issues", 504 | "source": "https://github.com/doctrine/instantiator/tree/1.4.0" 505 | }, 506 | "funding": [ 507 | { 508 | "url": "https://www.doctrine-project.org/sponsorship.html", 509 | "type": "custom" 510 | }, 511 | { 512 | "url": "https://www.patreon.com/phpdoctrine", 513 | "type": "patreon" 514 | }, 515 | { 516 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 517 | "type": "tidelift" 518 | } 519 | ], 520 | "time": "2020-11-10T18:47:58+00:00" 521 | }, 522 | { 523 | "name": "myclabs/deep-copy", 524 | "version": "1.10.2", 525 | "source": { 526 | "type": "git", 527 | "url": "https://github.com/myclabs/DeepCopy.git", 528 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" 529 | }, 530 | "dist": { 531 | "type": "zip", 532 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", 533 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", 534 | "shasum": "" 535 | }, 536 | "require": { 537 | "php": "^7.1 || ^8.0" 538 | }, 539 | "replace": { 540 | "myclabs/deep-copy": "self.version" 541 | }, 542 | "require-dev": { 543 | "doctrine/collections": "^1.0", 544 | "doctrine/common": "^2.6", 545 | "phpunit/phpunit": "^7.1" 546 | }, 547 | "type": "library", 548 | "autoload": { 549 | "psr-4": { 550 | "DeepCopy\\": "src/DeepCopy/" 551 | }, 552 | "files": [ 553 | "src/DeepCopy/deep_copy.php" 554 | ] 555 | }, 556 | "notification-url": "https://packagist.org/downloads/", 557 | "license": [ 558 | "MIT" 559 | ], 560 | "description": "Create deep copies (clones) of your objects", 561 | "keywords": [ 562 | "clone", 563 | "copy", 564 | "duplicate", 565 | "object", 566 | "object graph" 567 | ], 568 | "support": { 569 | "issues": "https://github.com/myclabs/DeepCopy/issues", 570 | "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" 571 | }, 572 | "funding": [ 573 | { 574 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 575 | "type": "tidelift" 576 | } 577 | ], 578 | "time": "2020-11-13T09:40:50+00:00" 579 | }, 580 | { 581 | "name": "nikic/php-parser", 582 | "version": "v4.12.0", 583 | "source": { 584 | "type": "git", 585 | "url": "https://github.com/nikic/PHP-Parser.git", 586 | "reference": "6608f01670c3cc5079e18c1dab1104e002579143" 587 | }, 588 | "dist": { 589 | "type": "zip", 590 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6608f01670c3cc5079e18c1dab1104e002579143", 591 | "reference": "6608f01670c3cc5079e18c1dab1104e002579143", 592 | "shasum": "" 593 | }, 594 | "require": { 595 | "ext-tokenizer": "*", 596 | "php": ">=7.0" 597 | }, 598 | "require-dev": { 599 | "ircmaxell/php-yacc": "^0.0.7", 600 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 601 | }, 602 | "bin": [ 603 | "bin/php-parse" 604 | ], 605 | "type": "library", 606 | "extra": { 607 | "branch-alias": { 608 | "dev-master": "4.9-dev" 609 | } 610 | }, 611 | "autoload": { 612 | "psr-4": { 613 | "PhpParser\\": "lib/PhpParser" 614 | } 615 | }, 616 | "notification-url": "https://packagist.org/downloads/", 617 | "license": [ 618 | "BSD-3-Clause" 619 | ], 620 | "authors": [ 621 | { 622 | "name": "Nikita Popov" 623 | } 624 | ], 625 | "description": "A PHP parser written in PHP", 626 | "keywords": [ 627 | "parser", 628 | "php" 629 | ], 630 | "support": { 631 | "issues": "https://github.com/nikic/PHP-Parser/issues", 632 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.12.0" 633 | }, 634 | "time": "2021-07-21T10:44:31+00:00" 635 | }, 636 | { 637 | "name": "phar-io/manifest", 638 | "version": "2.0.3", 639 | "source": { 640 | "type": "git", 641 | "url": "https://github.com/phar-io/manifest.git", 642 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53" 643 | }, 644 | "dist": { 645 | "type": "zip", 646 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", 647 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53", 648 | "shasum": "" 649 | }, 650 | "require": { 651 | "ext-dom": "*", 652 | "ext-phar": "*", 653 | "ext-xmlwriter": "*", 654 | "phar-io/version": "^3.0.1", 655 | "php": "^7.2 || ^8.0" 656 | }, 657 | "type": "library", 658 | "extra": { 659 | "branch-alias": { 660 | "dev-master": "2.0.x-dev" 661 | } 662 | }, 663 | "autoload": { 664 | "classmap": [ 665 | "src/" 666 | ] 667 | }, 668 | "notification-url": "https://packagist.org/downloads/", 669 | "license": [ 670 | "BSD-3-Clause" 671 | ], 672 | "authors": [ 673 | { 674 | "name": "Arne Blankerts", 675 | "email": "arne@blankerts.de", 676 | "role": "Developer" 677 | }, 678 | { 679 | "name": "Sebastian Heuer", 680 | "email": "sebastian@phpeople.de", 681 | "role": "Developer" 682 | }, 683 | { 684 | "name": "Sebastian Bergmann", 685 | "email": "sebastian@phpunit.de", 686 | "role": "Developer" 687 | } 688 | ], 689 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 690 | "support": { 691 | "issues": "https://github.com/phar-io/manifest/issues", 692 | "source": "https://github.com/phar-io/manifest/tree/2.0.3" 693 | }, 694 | "time": "2021-07-20T11:28:43+00:00" 695 | }, 696 | { 697 | "name": "phar-io/version", 698 | "version": "3.1.0", 699 | "source": { 700 | "type": "git", 701 | "url": "https://github.com/phar-io/version.git", 702 | "reference": "bae7c545bef187884426f042434e561ab1ddb182" 703 | }, 704 | "dist": { 705 | "type": "zip", 706 | "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", 707 | "reference": "bae7c545bef187884426f042434e561ab1ddb182", 708 | "shasum": "" 709 | }, 710 | "require": { 711 | "php": "^7.2 || ^8.0" 712 | }, 713 | "type": "library", 714 | "autoload": { 715 | "classmap": [ 716 | "src/" 717 | ] 718 | }, 719 | "notification-url": "https://packagist.org/downloads/", 720 | "license": [ 721 | "BSD-3-Clause" 722 | ], 723 | "authors": [ 724 | { 725 | "name": "Arne Blankerts", 726 | "email": "arne@blankerts.de", 727 | "role": "Developer" 728 | }, 729 | { 730 | "name": "Sebastian Heuer", 731 | "email": "sebastian@phpeople.de", 732 | "role": "Developer" 733 | }, 734 | { 735 | "name": "Sebastian Bergmann", 736 | "email": "sebastian@phpunit.de", 737 | "role": "Developer" 738 | } 739 | ], 740 | "description": "Library for handling version information and constraints", 741 | "support": { 742 | "issues": "https://github.com/phar-io/version/issues", 743 | "source": "https://github.com/phar-io/version/tree/3.1.0" 744 | }, 745 | "time": "2021-02-23T14:00:09+00:00" 746 | }, 747 | { 748 | "name": "phpdocumentor/reflection-common", 749 | "version": "2.2.0", 750 | "source": { 751 | "type": "git", 752 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 753 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" 754 | }, 755 | "dist": { 756 | "type": "zip", 757 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", 758 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", 759 | "shasum": "" 760 | }, 761 | "require": { 762 | "php": "^7.2 || ^8.0" 763 | }, 764 | "type": "library", 765 | "extra": { 766 | "branch-alias": { 767 | "dev-2.x": "2.x-dev" 768 | } 769 | }, 770 | "autoload": { 771 | "psr-4": { 772 | "phpDocumentor\\Reflection\\": "src/" 773 | } 774 | }, 775 | "notification-url": "https://packagist.org/downloads/", 776 | "license": [ 777 | "MIT" 778 | ], 779 | "authors": [ 780 | { 781 | "name": "Jaap van Otterdijk", 782 | "email": "opensource@ijaap.nl" 783 | } 784 | ], 785 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 786 | "homepage": "http://www.phpdoc.org", 787 | "keywords": [ 788 | "FQSEN", 789 | "phpDocumentor", 790 | "phpdoc", 791 | "reflection", 792 | "static analysis" 793 | ], 794 | "support": { 795 | "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", 796 | "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" 797 | }, 798 | "time": "2020-06-27T09:03:43+00:00" 799 | }, 800 | { 801 | "name": "phpdocumentor/reflection-docblock", 802 | "version": "5.2.2", 803 | "source": { 804 | "type": "git", 805 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 806 | "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" 807 | }, 808 | "dist": { 809 | "type": "zip", 810 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", 811 | "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", 812 | "shasum": "" 813 | }, 814 | "require": { 815 | "ext-filter": "*", 816 | "php": "^7.2 || ^8.0", 817 | "phpdocumentor/reflection-common": "^2.2", 818 | "phpdocumentor/type-resolver": "^1.3", 819 | "webmozart/assert": "^1.9.1" 820 | }, 821 | "require-dev": { 822 | "mockery/mockery": "~1.3.2" 823 | }, 824 | "type": "library", 825 | "extra": { 826 | "branch-alias": { 827 | "dev-master": "5.x-dev" 828 | } 829 | }, 830 | "autoload": { 831 | "psr-4": { 832 | "phpDocumentor\\Reflection\\": "src" 833 | } 834 | }, 835 | "notification-url": "https://packagist.org/downloads/", 836 | "license": [ 837 | "MIT" 838 | ], 839 | "authors": [ 840 | { 841 | "name": "Mike van Riel", 842 | "email": "me@mikevanriel.com" 843 | }, 844 | { 845 | "name": "Jaap van Otterdijk", 846 | "email": "account@ijaap.nl" 847 | } 848 | ], 849 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 850 | "support": { 851 | "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", 852 | "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" 853 | }, 854 | "time": "2020-09-03T19:13:55+00:00" 855 | }, 856 | { 857 | "name": "phpdocumentor/type-resolver", 858 | "version": "1.4.0", 859 | "source": { 860 | "type": "git", 861 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 862 | "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" 863 | }, 864 | "dist": { 865 | "type": "zip", 866 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", 867 | "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", 868 | "shasum": "" 869 | }, 870 | "require": { 871 | "php": "^7.2 || ^8.0", 872 | "phpdocumentor/reflection-common": "^2.0" 873 | }, 874 | "require-dev": { 875 | "ext-tokenizer": "*" 876 | }, 877 | "type": "library", 878 | "extra": { 879 | "branch-alias": { 880 | "dev-1.x": "1.x-dev" 881 | } 882 | }, 883 | "autoload": { 884 | "psr-4": { 885 | "phpDocumentor\\Reflection\\": "src" 886 | } 887 | }, 888 | "notification-url": "https://packagist.org/downloads/", 889 | "license": [ 890 | "MIT" 891 | ], 892 | "authors": [ 893 | { 894 | "name": "Mike van Riel", 895 | "email": "me@mikevanriel.com" 896 | } 897 | ], 898 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 899 | "support": { 900 | "issues": "https://github.com/phpDocumentor/TypeResolver/issues", 901 | "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" 902 | }, 903 | "time": "2020-09-17T18:55:26+00:00" 904 | }, 905 | { 906 | "name": "phpspec/prophecy", 907 | "version": "1.13.0", 908 | "source": { 909 | "type": "git", 910 | "url": "https://github.com/phpspec/prophecy.git", 911 | "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" 912 | }, 913 | "dist": { 914 | "type": "zip", 915 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", 916 | "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", 917 | "shasum": "" 918 | }, 919 | "require": { 920 | "doctrine/instantiator": "^1.2", 921 | "php": "^7.2 || ~8.0, <8.1", 922 | "phpdocumentor/reflection-docblock": "^5.2", 923 | "sebastian/comparator": "^3.0 || ^4.0", 924 | "sebastian/recursion-context": "^3.0 || ^4.0" 925 | }, 926 | "require-dev": { 927 | "phpspec/phpspec": "^6.0", 928 | "phpunit/phpunit": "^8.0 || ^9.0" 929 | }, 930 | "type": "library", 931 | "extra": { 932 | "branch-alias": { 933 | "dev-master": "1.11.x-dev" 934 | } 935 | }, 936 | "autoload": { 937 | "psr-4": { 938 | "Prophecy\\": "src/Prophecy" 939 | } 940 | }, 941 | "notification-url": "https://packagist.org/downloads/", 942 | "license": [ 943 | "MIT" 944 | ], 945 | "authors": [ 946 | { 947 | "name": "Konstantin Kudryashov", 948 | "email": "ever.zet@gmail.com", 949 | "homepage": "http://everzet.com" 950 | }, 951 | { 952 | "name": "Marcello Duarte", 953 | "email": "marcello.duarte@gmail.com" 954 | } 955 | ], 956 | "description": "Highly opinionated mocking framework for PHP 5.3+", 957 | "homepage": "https://github.com/phpspec/prophecy", 958 | "keywords": [ 959 | "Double", 960 | "Dummy", 961 | "fake", 962 | "mock", 963 | "spy", 964 | "stub" 965 | ], 966 | "support": { 967 | "issues": "https://github.com/phpspec/prophecy/issues", 968 | "source": "https://github.com/phpspec/prophecy/tree/1.13.0" 969 | }, 970 | "time": "2021-03-17T13:42:18+00:00" 971 | }, 972 | { 973 | "name": "phpunit/php-code-coverage", 974 | "version": "9.2.6", 975 | "source": { 976 | "type": "git", 977 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 978 | "reference": "f6293e1b30a2354e8428e004689671b83871edde" 979 | }, 980 | "dist": { 981 | "type": "zip", 982 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", 983 | "reference": "f6293e1b30a2354e8428e004689671b83871edde", 984 | "shasum": "" 985 | }, 986 | "require": { 987 | "ext-dom": "*", 988 | "ext-libxml": "*", 989 | "ext-xmlwriter": "*", 990 | "nikic/php-parser": "^4.10.2", 991 | "php": ">=7.3", 992 | "phpunit/php-file-iterator": "^3.0.3", 993 | "phpunit/php-text-template": "^2.0.2", 994 | "sebastian/code-unit-reverse-lookup": "^2.0.2", 995 | "sebastian/complexity": "^2.0", 996 | "sebastian/environment": "^5.1.2", 997 | "sebastian/lines-of-code": "^1.0.3", 998 | "sebastian/version": "^3.0.1", 999 | "theseer/tokenizer": "^1.2.0" 1000 | }, 1001 | "require-dev": { 1002 | "phpunit/phpunit": "^9.3" 1003 | }, 1004 | "suggest": { 1005 | "ext-pcov": "*", 1006 | "ext-xdebug": "*" 1007 | }, 1008 | "type": "library", 1009 | "extra": { 1010 | "branch-alias": { 1011 | "dev-master": "9.2-dev" 1012 | } 1013 | }, 1014 | "autoload": { 1015 | "classmap": [ 1016 | "src/" 1017 | ] 1018 | }, 1019 | "notification-url": "https://packagist.org/downloads/", 1020 | "license": [ 1021 | "BSD-3-Clause" 1022 | ], 1023 | "authors": [ 1024 | { 1025 | "name": "Sebastian Bergmann", 1026 | "email": "sebastian@phpunit.de", 1027 | "role": "lead" 1028 | } 1029 | ], 1030 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1031 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1032 | "keywords": [ 1033 | "coverage", 1034 | "testing", 1035 | "xunit" 1036 | ], 1037 | "support": { 1038 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 1039 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" 1040 | }, 1041 | "funding": [ 1042 | { 1043 | "url": "https://github.com/sebastianbergmann", 1044 | "type": "github" 1045 | } 1046 | ], 1047 | "time": "2021-03-28T07:26:59+00:00" 1048 | }, 1049 | { 1050 | "name": "phpunit/php-file-iterator", 1051 | "version": "3.0.5", 1052 | "source": { 1053 | "type": "git", 1054 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1055 | "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" 1056 | }, 1057 | "dist": { 1058 | "type": "zip", 1059 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", 1060 | "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", 1061 | "shasum": "" 1062 | }, 1063 | "require": { 1064 | "php": ">=7.3" 1065 | }, 1066 | "require-dev": { 1067 | "phpunit/phpunit": "^9.3" 1068 | }, 1069 | "type": "library", 1070 | "extra": { 1071 | "branch-alias": { 1072 | "dev-master": "3.0-dev" 1073 | } 1074 | }, 1075 | "autoload": { 1076 | "classmap": [ 1077 | "src/" 1078 | ] 1079 | }, 1080 | "notification-url": "https://packagist.org/downloads/", 1081 | "license": [ 1082 | "BSD-3-Clause" 1083 | ], 1084 | "authors": [ 1085 | { 1086 | "name": "Sebastian Bergmann", 1087 | "email": "sebastian@phpunit.de", 1088 | "role": "lead" 1089 | } 1090 | ], 1091 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1092 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1093 | "keywords": [ 1094 | "filesystem", 1095 | "iterator" 1096 | ], 1097 | "support": { 1098 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 1099 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" 1100 | }, 1101 | "funding": [ 1102 | { 1103 | "url": "https://github.com/sebastianbergmann", 1104 | "type": "github" 1105 | } 1106 | ], 1107 | "time": "2020-09-28T05:57:25+00:00" 1108 | }, 1109 | { 1110 | "name": "phpunit/php-invoker", 1111 | "version": "3.1.1", 1112 | "source": { 1113 | "type": "git", 1114 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 1115 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" 1116 | }, 1117 | "dist": { 1118 | "type": "zip", 1119 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 1120 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 1121 | "shasum": "" 1122 | }, 1123 | "require": { 1124 | "php": ">=7.3" 1125 | }, 1126 | "require-dev": { 1127 | "ext-pcntl": "*", 1128 | "phpunit/phpunit": "^9.3" 1129 | }, 1130 | "suggest": { 1131 | "ext-pcntl": "*" 1132 | }, 1133 | "type": "library", 1134 | "extra": { 1135 | "branch-alias": { 1136 | "dev-master": "3.1-dev" 1137 | } 1138 | }, 1139 | "autoload": { 1140 | "classmap": [ 1141 | "src/" 1142 | ] 1143 | }, 1144 | "notification-url": "https://packagist.org/downloads/", 1145 | "license": [ 1146 | "BSD-3-Clause" 1147 | ], 1148 | "authors": [ 1149 | { 1150 | "name": "Sebastian Bergmann", 1151 | "email": "sebastian@phpunit.de", 1152 | "role": "lead" 1153 | } 1154 | ], 1155 | "description": "Invoke callables with a timeout", 1156 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 1157 | "keywords": [ 1158 | "process" 1159 | ], 1160 | "support": { 1161 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues", 1162 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" 1163 | }, 1164 | "funding": [ 1165 | { 1166 | "url": "https://github.com/sebastianbergmann", 1167 | "type": "github" 1168 | } 1169 | ], 1170 | "time": "2020-09-28T05:58:55+00:00" 1171 | }, 1172 | { 1173 | "name": "phpunit/php-text-template", 1174 | "version": "2.0.4", 1175 | "source": { 1176 | "type": "git", 1177 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1178 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" 1179 | }, 1180 | "dist": { 1181 | "type": "zip", 1182 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 1183 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 1184 | "shasum": "" 1185 | }, 1186 | "require": { 1187 | "php": ">=7.3" 1188 | }, 1189 | "require-dev": { 1190 | "phpunit/phpunit": "^9.3" 1191 | }, 1192 | "type": "library", 1193 | "extra": { 1194 | "branch-alias": { 1195 | "dev-master": "2.0-dev" 1196 | } 1197 | }, 1198 | "autoload": { 1199 | "classmap": [ 1200 | "src/" 1201 | ] 1202 | }, 1203 | "notification-url": "https://packagist.org/downloads/", 1204 | "license": [ 1205 | "BSD-3-Clause" 1206 | ], 1207 | "authors": [ 1208 | { 1209 | "name": "Sebastian Bergmann", 1210 | "email": "sebastian@phpunit.de", 1211 | "role": "lead" 1212 | } 1213 | ], 1214 | "description": "Simple template engine.", 1215 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1216 | "keywords": [ 1217 | "template" 1218 | ], 1219 | "support": { 1220 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 1221 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" 1222 | }, 1223 | "funding": [ 1224 | { 1225 | "url": "https://github.com/sebastianbergmann", 1226 | "type": "github" 1227 | } 1228 | ], 1229 | "time": "2020-10-26T05:33:50+00:00" 1230 | }, 1231 | { 1232 | "name": "phpunit/php-timer", 1233 | "version": "5.0.3", 1234 | "source": { 1235 | "type": "git", 1236 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1237 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" 1238 | }, 1239 | "dist": { 1240 | "type": "zip", 1241 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 1242 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 1243 | "shasum": "" 1244 | }, 1245 | "require": { 1246 | "php": ">=7.3" 1247 | }, 1248 | "require-dev": { 1249 | "phpunit/phpunit": "^9.3" 1250 | }, 1251 | "type": "library", 1252 | "extra": { 1253 | "branch-alias": { 1254 | "dev-master": "5.0-dev" 1255 | } 1256 | }, 1257 | "autoload": { 1258 | "classmap": [ 1259 | "src/" 1260 | ] 1261 | }, 1262 | "notification-url": "https://packagist.org/downloads/", 1263 | "license": [ 1264 | "BSD-3-Clause" 1265 | ], 1266 | "authors": [ 1267 | { 1268 | "name": "Sebastian Bergmann", 1269 | "email": "sebastian@phpunit.de", 1270 | "role": "lead" 1271 | } 1272 | ], 1273 | "description": "Utility class for timing", 1274 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1275 | "keywords": [ 1276 | "timer" 1277 | ], 1278 | "support": { 1279 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 1280 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" 1281 | }, 1282 | "funding": [ 1283 | { 1284 | "url": "https://github.com/sebastianbergmann", 1285 | "type": "github" 1286 | } 1287 | ], 1288 | "time": "2020-10-26T13:16:10+00:00" 1289 | }, 1290 | { 1291 | "name": "phpunit/phpunit", 1292 | "version": "9.5.8", 1293 | "source": { 1294 | "type": "git", 1295 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1296 | "reference": "191768ccd5c85513b4068bdbe99bb6390c7d54fb" 1297 | }, 1298 | "dist": { 1299 | "type": "zip", 1300 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/191768ccd5c85513b4068bdbe99bb6390c7d54fb", 1301 | "reference": "191768ccd5c85513b4068bdbe99bb6390c7d54fb", 1302 | "shasum": "" 1303 | }, 1304 | "require": { 1305 | "doctrine/instantiator": "^1.3.1", 1306 | "ext-dom": "*", 1307 | "ext-json": "*", 1308 | "ext-libxml": "*", 1309 | "ext-mbstring": "*", 1310 | "ext-xml": "*", 1311 | "ext-xmlwriter": "*", 1312 | "myclabs/deep-copy": "^1.10.1", 1313 | "phar-io/manifest": "^2.0.3", 1314 | "phar-io/version": "^3.0.2", 1315 | "php": ">=7.3", 1316 | "phpspec/prophecy": "^1.12.1", 1317 | "phpunit/php-code-coverage": "^9.2.3", 1318 | "phpunit/php-file-iterator": "^3.0.5", 1319 | "phpunit/php-invoker": "^3.1.1", 1320 | "phpunit/php-text-template": "^2.0.3", 1321 | "phpunit/php-timer": "^5.0.2", 1322 | "sebastian/cli-parser": "^1.0.1", 1323 | "sebastian/code-unit": "^1.0.6", 1324 | "sebastian/comparator": "^4.0.5", 1325 | "sebastian/diff": "^4.0.3", 1326 | "sebastian/environment": "^5.1.3", 1327 | "sebastian/exporter": "^4.0.3", 1328 | "sebastian/global-state": "^5.0.1", 1329 | "sebastian/object-enumerator": "^4.0.3", 1330 | "sebastian/resource-operations": "^3.0.3", 1331 | "sebastian/type": "^2.3.4", 1332 | "sebastian/version": "^3.0.2" 1333 | }, 1334 | "require-dev": { 1335 | "ext-pdo": "*", 1336 | "phpspec/prophecy-phpunit": "^2.0.1" 1337 | }, 1338 | "suggest": { 1339 | "ext-soap": "*", 1340 | "ext-xdebug": "*" 1341 | }, 1342 | "bin": [ 1343 | "phpunit" 1344 | ], 1345 | "type": "library", 1346 | "extra": { 1347 | "branch-alias": { 1348 | "dev-master": "9.5-dev" 1349 | } 1350 | }, 1351 | "autoload": { 1352 | "classmap": [ 1353 | "src/" 1354 | ], 1355 | "files": [ 1356 | "src/Framework/Assert/Functions.php" 1357 | ] 1358 | }, 1359 | "notification-url": "https://packagist.org/downloads/", 1360 | "license": [ 1361 | "BSD-3-Clause" 1362 | ], 1363 | "authors": [ 1364 | { 1365 | "name": "Sebastian Bergmann", 1366 | "email": "sebastian@phpunit.de", 1367 | "role": "lead" 1368 | } 1369 | ], 1370 | "description": "The PHP Unit Testing framework.", 1371 | "homepage": "https://phpunit.de/", 1372 | "keywords": [ 1373 | "phpunit", 1374 | "testing", 1375 | "xunit" 1376 | ], 1377 | "support": { 1378 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 1379 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.8" 1380 | }, 1381 | "funding": [ 1382 | { 1383 | "url": "https://phpunit.de/donate.html", 1384 | "type": "custom" 1385 | }, 1386 | { 1387 | "url": "https://github.com/sebastianbergmann", 1388 | "type": "github" 1389 | } 1390 | ], 1391 | "time": "2021-07-31T15:17:34+00:00" 1392 | }, 1393 | { 1394 | "name": "sebastian/cli-parser", 1395 | "version": "1.0.1", 1396 | "source": { 1397 | "type": "git", 1398 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 1399 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" 1400 | }, 1401 | "dist": { 1402 | "type": "zip", 1403 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", 1404 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", 1405 | "shasum": "" 1406 | }, 1407 | "require": { 1408 | "php": ">=7.3" 1409 | }, 1410 | "require-dev": { 1411 | "phpunit/phpunit": "^9.3" 1412 | }, 1413 | "type": "library", 1414 | "extra": { 1415 | "branch-alias": { 1416 | "dev-master": "1.0-dev" 1417 | } 1418 | }, 1419 | "autoload": { 1420 | "classmap": [ 1421 | "src/" 1422 | ] 1423 | }, 1424 | "notification-url": "https://packagist.org/downloads/", 1425 | "license": [ 1426 | "BSD-3-Clause" 1427 | ], 1428 | "authors": [ 1429 | { 1430 | "name": "Sebastian Bergmann", 1431 | "email": "sebastian@phpunit.de", 1432 | "role": "lead" 1433 | } 1434 | ], 1435 | "description": "Library for parsing CLI options", 1436 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 1437 | "support": { 1438 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues", 1439 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" 1440 | }, 1441 | "funding": [ 1442 | { 1443 | "url": "https://github.com/sebastianbergmann", 1444 | "type": "github" 1445 | } 1446 | ], 1447 | "time": "2020-09-28T06:08:49+00:00" 1448 | }, 1449 | { 1450 | "name": "sebastian/code-unit", 1451 | "version": "1.0.8", 1452 | "source": { 1453 | "type": "git", 1454 | "url": "https://github.com/sebastianbergmann/code-unit.git", 1455 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" 1456 | }, 1457 | "dist": { 1458 | "type": "zip", 1459 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", 1460 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", 1461 | "shasum": "" 1462 | }, 1463 | "require": { 1464 | "php": ">=7.3" 1465 | }, 1466 | "require-dev": { 1467 | "phpunit/phpunit": "^9.3" 1468 | }, 1469 | "type": "library", 1470 | "extra": { 1471 | "branch-alias": { 1472 | "dev-master": "1.0-dev" 1473 | } 1474 | }, 1475 | "autoload": { 1476 | "classmap": [ 1477 | "src/" 1478 | ] 1479 | }, 1480 | "notification-url": "https://packagist.org/downloads/", 1481 | "license": [ 1482 | "BSD-3-Clause" 1483 | ], 1484 | "authors": [ 1485 | { 1486 | "name": "Sebastian Bergmann", 1487 | "email": "sebastian@phpunit.de", 1488 | "role": "lead" 1489 | } 1490 | ], 1491 | "description": "Collection of value objects that represent the PHP code units", 1492 | "homepage": "https://github.com/sebastianbergmann/code-unit", 1493 | "support": { 1494 | "issues": "https://github.com/sebastianbergmann/code-unit/issues", 1495 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" 1496 | }, 1497 | "funding": [ 1498 | { 1499 | "url": "https://github.com/sebastianbergmann", 1500 | "type": "github" 1501 | } 1502 | ], 1503 | "time": "2020-10-26T13:08:54+00:00" 1504 | }, 1505 | { 1506 | "name": "sebastian/code-unit-reverse-lookup", 1507 | "version": "2.0.3", 1508 | "source": { 1509 | "type": "git", 1510 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1511 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" 1512 | }, 1513 | "dist": { 1514 | "type": "zip", 1515 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 1516 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 1517 | "shasum": "" 1518 | }, 1519 | "require": { 1520 | "php": ">=7.3" 1521 | }, 1522 | "require-dev": { 1523 | "phpunit/phpunit": "^9.3" 1524 | }, 1525 | "type": "library", 1526 | "extra": { 1527 | "branch-alias": { 1528 | "dev-master": "2.0-dev" 1529 | } 1530 | }, 1531 | "autoload": { 1532 | "classmap": [ 1533 | "src/" 1534 | ] 1535 | }, 1536 | "notification-url": "https://packagist.org/downloads/", 1537 | "license": [ 1538 | "BSD-3-Clause" 1539 | ], 1540 | "authors": [ 1541 | { 1542 | "name": "Sebastian Bergmann", 1543 | "email": "sebastian@phpunit.de" 1544 | } 1545 | ], 1546 | "description": "Looks up which function or method a line of code belongs to", 1547 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1548 | "support": { 1549 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 1550 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" 1551 | }, 1552 | "funding": [ 1553 | { 1554 | "url": "https://github.com/sebastianbergmann", 1555 | "type": "github" 1556 | } 1557 | ], 1558 | "time": "2020-09-28T05:30:19+00:00" 1559 | }, 1560 | { 1561 | "name": "sebastian/comparator", 1562 | "version": "4.0.6", 1563 | "source": { 1564 | "type": "git", 1565 | "url": "https://github.com/sebastianbergmann/comparator.git", 1566 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382" 1567 | }, 1568 | "dist": { 1569 | "type": "zip", 1570 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", 1571 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382", 1572 | "shasum": "" 1573 | }, 1574 | "require": { 1575 | "php": ">=7.3", 1576 | "sebastian/diff": "^4.0", 1577 | "sebastian/exporter": "^4.0" 1578 | }, 1579 | "require-dev": { 1580 | "phpunit/phpunit": "^9.3" 1581 | }, 1582 | "type": "library", 1583 | "extra": { 1584 | "branch-alias": { 1585 | "dev-master": "4.0-dev" 1586 | } 1587 | }, 1588 | "autoload": { 1589 | "classmap": [ 1590 | "src/" 1591 | ] 1592 | }, 1593 | "notification-url": "https://packagist.org/downloads/", 1594 | "license": [ 1595 | "BSD-3-Clause" 1596 | ], 1597 | "authors": [ 1598 | { 1599 | "name": "Sebastian Bergmann", 1600 | "email": "sebastian@phpunit.de" 1601 | }, 1602 | { 1603 | "name": "Jeff Welch", 1604 | "email": "whatthejeff@gmail.com" 1605 | }, 1606 | { 1607 | "name": "Volker Dusch", 1608 | "email": "github@wallbash.com" 1609 | }, 1610 | { 1611 | "name": "Bernhard Schussek", 1612 | "email": "bschussek@2bepublished.at" 1613 | } 1614 | ], 1615 | "description": "Provides the functionality to compare PHP values for equality", 1616 | "homepage": "https://github.com/sebastianbergmann/comparator", 1617 | "keywords": [ 1618 | "comparator", 1619 | "compare", 1620 | "equality" 1621 | ], 1622 | "support": { 1623 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 1624 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" 1625 | }, 1626 | "funding": [ 1627 | { 1628 | "url": "https://github.com/sebastianbergmann", 1629 | "type": "github" 1630 | } 1631 | ], 1632 | "time": "2020-10-26T15:49:45+00:00" 1633 | }, 1634 | { 1635 | "name": "sebastian/complexity", 1636 | "version": "2.0.2", 1637 | "source": { 1638 | "type": "git", 1639 | "url": "https://github.com/sebastianbergmann/complexity.git", 1640 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" 1641 | }, 1642 | "dist": { 1643 | "type": "zip", 1644 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", 1645 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", 1646 | "shasum": "" 1647 | }, 1648 | "require": { 1649 | "nikic/php-parser": "^4.7", 1650 | "php": ">=7.3" 1651 | }, 1652 | "require-dev": { 1653 | "phpunit/phpunit": "^9.3" 1654 | }, 1655 | "type": "library", 1656 | "extra": { 1657 | "branch-alias": { 1658 | "dev-master": "2.0-dev" 1659 | } 1660 | }, 1661 | "autoload": { 1662 | "classmap": [ 1663 | "src/" 1664 | ] 1665 | }, 1666 | "notification-url": "https://packagist.org/downloads/", 1667 | "license": [ 1668 | "BSD-3-Clause" 1669 | ], 1670 | "authors": [ 1671 | { 1672 | "name": "Sebastian Bergmann", 1673 | "email": "sebastian@phpunit.de", 1674 | "role": "lead" 1675 | } 1676 | ], 1677 | "description": "Library for calculating the complexity of PHP code units", 1678 | "homepage": "https://github.com/sebastianbergmann/complexity", 1679 | "support": { 1680 | "issues": "https://github.com/sebastianbergmann/complexity/issues", 1681 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" 1682 | }, 1683 | "funding": [ 1684 | { 1685 | "url": "https://github.com/sebastianbergmann", 1686 | "type": "github" 1687 | } 1688 | ], 1689 | "time": "2020-10-26T15:52:27+00:00" 1690 | }, 1691 | { 1692 | "name": "sebastian/diff", 1693 | "version": "4.0.4", 1694 | "source": { 1695 | "type": "git", 1696 | "url": "https://github.com/sebastianbergmann/diff.git", 1697 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" 1698 | }, 1699 | "dist": { 1700 | "type": "zip", 1701 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1702 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1703 | "shasum": "" 1704 | }, 1705 | "require": { 1706 | "php": ">=7.3" 1707 | }, 1708 | "require-dev": { 1709 | "phpunit/phpunit": "^9.3", 1710 | "symfony/process": "^4.2 || ^5" 1711 | }, 1712 | "type": "library", 1713 | "extra": { 1714 | "branch-alias": { 1715 | "dev-master": "4.0-dev" 1716 | } 1717 | }, 1718 | "autoload": { 1719 | "classmap": [ 1720 | "src/" 1721 | ] 1722 | }, 1723 | "notification-url": "https://packagist.org/downloads/", 1724 | "license": [ 1725 | "BSD-3-Clause" 1726 | ], 1727 | "authors": [ 1728 | { 1729 | "name": "Sebastian Bergmann", 1730 | "email": "sebastian@phpunit.de" 1731 | }, 1732 | { 1733 | "name": "Kore Nordmann", 1734 | "email": "mail@kore-nordmann.de" 1735 | } 1736 | ], 1737 | "description": "Diff implementation", 1738 | "homepage": "https://github.com/sebastianbergmann/diff", 1739 | "keywords": [ 1740 | "diff", 1741 | "udiff", 1742 | "unidiff", 1743 | "unified diff" 1744 | ], 1745 | "support": { 1746 | "issues": "https://github.com/sebastianbergmann/diff/issues", 1747 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" 1748 | }, 1749 | "funding": [ 1750 | { 1751 | "url": "https://github.com/sebastianbergmann", 1752 | "type": "github" 1753 | } 1754 | ], 1755 | "time": "2020-10-26T13:10:38+00:00" 1756 | }, 1757 | { 1758 | "name": "sebastian/environment", 1759 | "version": "5.1.3", 1760 | "source": { 1761 | "type": "git", 1762 | "url": "https://github.com/sebastianbergmann/environment.git", 1763 | "reference": "388b6ced16caa751030f6a69e588299fa09200ac" 1764 | }, 1765 | "dist": { 1766 | "type": "zip", 1767 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", 1768 | "reference": "388b6ced16caa751030f6a69e588299fa09200ac", 1769 | "shasum": "" 1770 | }, 1771 | "require": { 1772 | "php": ">=7.3" 1773 | }, 1774 | "require-dev": { 1775 | "phpunit/phpunit": "^9.3" 1776 | }, 1777 | "suggest": { 1778 | "ext-posix": "*" 1779 | }, 1780 | "type": "library", 1781 | "extra": { 1782 | "branch-alias": { 1783 | "dev-master": "5.1-dev" 1784 | } 1785 | }, 1786 | "autoload": { 1787 | "classmap": [ 1788 | "src/" 1789 | ] 1790 | }, 1791 | "notification-url": "https://packagist.org/downloads/", 1792 | "license": [ 1793 | "BSD-3-Clause" 1794 | ], 1795 | "authors": [ 1796 | { 1797 | "name": "Sebastian Bergmann", 1798 | "email": "sebastian@phpunit.de" 1799 | } 1800 | ], 1801 | "description": "Provides functionality to handle HHVM/PHP environments", 1802 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1803 | "keywords": [ 1804 | "Xdebug", 1805 | "environment", 1806 | "hhvm" 1807 | ], 1808 | "support": { 1809 | "issues": "https://github.com/sebastianbergmann/environment/issues", 1810 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" 1811 | }, 1812 | "funding": [ 1813 | { 1814 | "url": "https://github.com/sebastianbergmann", 1815 | "type": "github" 1816 | } 1817 | ], 1818 | "time": "2020-09-28T05:52:38+00:00" 1819 | }, 1820 | { 1821 | "name": "sebastian/exporter", 1822 | "version": "4.0.3", 1823 | "source": { 1824 | "type": "git", 1825 | "url": "https://github.com/sebastianbergmann/exporter.git", 1826 | "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" 1827 | }, 1828 | "dist": { 1829 | "type": "zip", 1830 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", 1831 | "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", 1832 | "shasum": "" 1833 | }, 1834 | "require": { 1835 | "php": ">=7.3", 1836 | "sebastian/recursion-context": "^4.0" 1837 | }, 1838 | "require-dev": { 1839 | "ext-mbstring": "*", 1840 | "phpunit/phpunit": "^9.3" 1841 | }, 1842 | "type": "library", 1843 | "extra": { 1844 | "branch-alias": { 1845 | "dev-master": "4.0-dev" 1846 | } 1847 | }, 1848 | "autoload": { 1849 | "classmap": [ 1850 | "src/" 1851 | ] 1852 | }, 1853 | "notification-url": "https://packagist.org/downloads/", 1854 | "license": [ 1855 | "BSD-3-Clause" 1856 | ], 1857 | "authors": [ 1858 | { 1859 | "name": "Sebastian Bergmann", 1860 | "email": "sebastian@phpunit.de" 1861 | }, 1862 | { 1863 | "name": "Jeff Welch", 1864 | "email": "whatthejeff@gmail.com" 1865 | }, 1866 | { 1867 | "name": "Volker Dusch", 1868 | "email": "github@wallbash.com" 1869 | }, 1870 | { 1871 | "name": "Adam Harvey", 1872 | "email": "aharvey@php.net" 1873 | }, 1874 | { 1875 | "name": "Bernhard Schussek", 1876 | "email": "bschussek@gmail.com" 1877 | } 1878 | ], 1879 | "description": "Provides the functionality to export PHP variables for visualization", 1880 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1881 | "keywords": [ 1882 | "export", 1883 | "exporter" 1884 | ], 1885 | "support": { 1886 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 1887 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" 1888 | }, 1889 | "funding": [ 1890 | { 1891 | "url": "https://github.com/sebastianbergmann", 1892 | "type": "github" 1893 | } 1894 | ], 1895 | "time": "2020-09-28T05:24:23+00:00" 1896 | }, 1897 | { 1898 | "name": "sebastian/global-state", 1899 | "version": "5.0.3", 1900 | "source": { 1901 | "type": "git", 1902 | "url": "https://github.com/sebastianbergmann/global-state.git", 1903 | "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" 1904 | }, 1905 | "dist": { 1906 | "type": "zip", 1907 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", 1908 | "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", 1909 | "shasum": "" 1910 | }, 1911 | "require": { 1912 | "php": ">=7.3", 1913 | "sebastian/object-reflector": "^2.0", 1914 | "sebastian/recursion-context": "^4.0" 1915 | }, 1916 | "require-dev": { 1917 | "ext-dom": "*", 1918 | "phpunit/phpunit": "^9.3" 1919 | }, 1920 | "suggest": { 1921 | "ext-uopz": "*" 1922 | }, 1923 | "type": "library", 1924 | "extra": { 1925 | "branch-alias": { 1926 | "dev-master": "5.0-dev" 1927 | } 1928 | }, 1929 | "autoload": { 1930 | "classmap": [ 1931 | "src/" 1932 | ] 1933 | }, 1934 | "notification-url": "https://packagist.org/downloads/", 1935 | "license": [ 1936 | "BSD-3-Clause" 1937 | ], 1938 | "authors": [ 1939 | { 1940 | "name": "Sebastian Bergmann", 1941 | "email": "sebastian@phpunit.de" 1942 | } 1943 | ], 1944 | "description": "Snapshotting of global state", 1945 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1946 | "keywords": [ 1947 | "global state" 1948 | ], 1949 | "support": { 1950 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 1951 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" 1952 | }, 1953 | "funding": [ 1954 | { 1955 | "url": "https://github.com/sebastianbergmann", 1956 | "type": "github" 1957 | } 1958 | ], 1959 | "time": "2021-06-11T13:31:12+00:00" 1960 | }, 1961 | { 1962 | "name": "sebastian/lines-of-code", 1963 | "version": "1.0.3", 1964 | "source": { 1965 | "type": "git", 1966 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 1967 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" 1968 | }, 1969 | "dist": { 1970 | "type": "zip", 1971 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", 1972 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", 1973 | "shasum": "" 1974 | }, 1975 | "require": { 1976 | "nikic/php-parser": "^4.6", 1977 | "php": ">=7.3" 1978 | }, 1979 | "require-dev": { 1980 | "phpunit/phpunit": "^9.3" 1981 | }, 1982 | "type": "library", 1983 | "extra": { 1984 | "branch-alias": { 1985 | "dev-master": "1.0-dev" 1986 | } 1987 | }, 1988 | "autoload": { 1989 | "classmap": [ 1990 | "src/" 1991 | ] 1992 | }, 1993 | "notification-url": "https://packagist.org/downloads/", 1994 | "license": [ 1995 | "BSD-3-Clause" 1996 | ], 1997 | "authors": [ 1998 | { 1999 | "name": "Sebastian Bergmann", 2000 | "email": "sebastian@phpunit.de", 2001 | "role": "lead" 2002 | } 2003 | ], 2004 | "description": "Library for counting the lines of code in PHP source code", 2005 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 2006 | "support": { 2007 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", 2008 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" 2009 | }, 2010 | "funding": [ 2011 | { 2012 | "url": "https://github.com/sebastianbergmann", 2013 | "type": "github" 2014 | } 2015 | ], 2016 | "time": "2020-11-28T06:42:11+00:00" 2017 | }, 2018 | { 2019 | "name": "sebastian/object-enumerator", 2020 | "version": "4.0.4", 2021 | "source": { 2022 | "type": "git", 2023 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2024 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" 2025 | }, 2026 | "dist": { 2027 | "type": "zip", 2028 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", 2029 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", 2030 | "shasum": "" 2031 | }, 2032 | "require": { 2033 | "php": ">=7.3", 2034 | "sebastian/object-reflector": "^2.0", 2035 | "sebastian/recursion-context": "^4.0" 2036 | }, 2037 | "require-dev": { 2038 | "phpunit/phpunit": "^9.3" 2039 | }, 2040 | "type": "library", 2041 | "extra": { 2042 | "branch-alias": { 2043 | "dev-master": "4.0-dev" 2044 | } 2045 | }, 2046 | "autoload": { 2047 | "classmap": [ 2048 | "src/" 2049 | ] 2050 | }, 2051 | "notification-url": "https://packagist.org/downloads/", 2052 | "license": [ 2053 | "BSD-3-Clause" 2054 | ], 2055 | "authors": [ 2056 | { 2057 | "name": "Sebastian Bergmann", 2058 | "email": "sebastian@phpunit.de" 2059 | } 2060 | ], 2061 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2062 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2063 | "support": { 2064 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 2065 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" 2066 | }, 2067 | "funding": [ 2068 | { 2069 | "url": "https://github.com/sebastianbergmann", 2070 | "type": "github" 2071 | } 2072 | ], 2073 | "time": "2020-10-26T13:12:34+00:00" 2074 | }, 2075 | { 2076 | "name": "sebastian/object-reflector", 2077 | "version": "2.0.4", 2078 | "source": { 2079 | "type": "git", 2080 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 2081 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" 2082 | }, 2083 | "dist": { 2084 | "type": "zip", 2085 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 2086 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 2087 | "shasum": "" 2088 | }, 2089 | "require": { 2090 | "php": ">=7.3" 2091 | }, 2092 | "require-dev": { 2093 | "phpunit/phpunit": "^9.3" 2094 | }, 2095 | "type": "library", 2096 | "extra": { 2097 | "branch-alias": { 2098 | "dev-master": "2.0-dev" 2099 | } 2100 | }, 2101 | "autoload": { 2102 | "classmap": [ 2103 | "src/" 2104 | ] 2105 | }, 2106 | "notification-url": "https://packagist.org/downloads/", 2107 | "license": [ 2108 | "BSD-3-Clause" 2109 | ], 2110 | "authors": [ 2111 | { 2112 | "name": "Sebastian Bergmann", 2113 | "email": "sebastian@phpunit.de" 2114 | } 2115 | ], 2116 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 2117 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 2118 | "support": { 2119 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 2120 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" 2121 | }, 2122 | "funding": [ 2123 | { 2124 | "url": "https://github.com/sebastianbergmann", 2125 | "type": "github" 2126 | } 2127 | ], 2128 | "time": "2020-10-26T13:14:26+00:00" 2129 | }, 2130 | { 2131 | "name": "sebastian/recursion-context", 2132 | "version": "4.0.4", 2133 | "source": { 2134 | "type": "git", 2135 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2136 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" 2137 | }, 2138 | "dist": { 2139 | "type": "zip", 2140 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", 2141 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", 2142 | "shasum": "" 2143 | }, 2144 | "require": { 2145 | "php": ">=7.3" 2146 | }, 2147 | "require-dev": { 2148 | "phpunit/phpunit": "^9.3" 2149 | }, 2150 | "type": "library", 2151 | "extra": { 2152 | "branch-alias": { 2153 | "dev-master": "4.0-dev" 2154 | } 2155 | }, 2156 | "autoload": { 2157 | "classmap": [ 2158 | "src/" 2159 | ] 2160 | }, 2161 | "notification-url": "https://packagist.org/downloads/", 2162 | "license": [ 2163 | "BSD-3-Clause" 2164 | ], 2165 | "authors": [ 2166 | { 2167 | "name": "Sebastian Bergmann", 2168 | "email": "sebastian@phpunit.de" 2169 | }, 2170 | { 2171 | "name": "Jeff Welch", 2172 | "email": "whatthejeff@gmail.com" 2173 | }, 2174 | { 2175 | "name": "Adam Harvey", 2176 | "email": "aharvey@php.net" 2177 | } 2178 | ], 2179 | "description": "Provides functionality to recursively process PHP variables", 2180 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2181 | "support": { 2182 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 2183 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" 2184 | }, 2185 | "funding": [ 2186 | { 2187 | "url": "https://github.com/sebastianbergmann", 2188 | "type": "github" 2189 | } 2190 | ], 2191 | "time": "2020-10-26T13:17:30+00:00" 2192 | }, 2193 | { 2194 | "name": "sebastian/resource-operations", 2195 | "version": "3.0.3", 2196 | "source": { 2197 | "type": "git", 2198 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 2199 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" 2200 | }, 2201 | "dist": { 2202 | "type": "zip", 2203 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 2204 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 2205 | "shasum": "" 2206 | }, 2207 | "require": { 2208 | "php": ">=7.3" 2209 | }, 2210 | "require-dev": { 2211 | "phpunit/phpunit": "^9.0" 2212 | }, 2213 | "type": "library", 2214 | "extra": { 2215 | "branch-alias": { 2216 | "dev-master": "3.0-dev" 2217 | } 2218 | }, 2219 | "autoload": { 2220 | "classmap": [ 2221 | "src/" 2222 | ] 2223 | }, 2224 | "notification-url": "https://packagist.org/downloads/", 2225 | "license": [ 2226 | "BSD-3-Clause" 2227 | ], 2228 | "authors": [ 2229 | { 2230 | "name": "Sebastian Bergmann", 2231 | "email": "sebastian@phpunit.de" 2232 | } 2233 | ], 2234 | "description": "Provides a list of PHP built-in functions that operate on resources", 2235 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2236 | "support": { 2237 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues", 2238 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" 2239 | }, 2240 | "funding": [ 2241 | { 2242 | "url": "https://github.com/sebastianbergmann", 2243 | "type": "github" 2244 | } 2245 | ], 2246 | "time": "2020-09-28T06:45:17+00:00" 2247 | }, 2248 | { 2249 | "name": "sebastian/type", 2250 | "version": "2.3.4", 2251 | "source": { 2252 | "type": "git", 2253 | "url": "https://github.com/sebastianbergmann/type.git", 2254 | "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" 2255 | }, 2256 | "dist": { 2257 | "type": "zip", 2258 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", 2259 | "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", 2260 | "shasum": "" 2261 | }, 2262 | "require": { 2263 | "php": ">=7.3" 2264 | }, 2265 | "require-dev": { 2266 | "phpunit/phpunit": "^9.3" 2267 | }, 2268 | "type": "library", 2269 | "extra": { 2270 | "branch-alias": { 2271 | "dev-master": "2.3-dev" 2272 | } 2273 | }, 2274 | "autoload": { 2275 | "classmap": [ 2276 | "src/" 2277 | ] 2278 | }, 2279 | "notification-url": "https://packagist.org/downloads/", 2280 | "license": [ 2281 | "BSD-3-Clause" 2282 | ], 2283 | "authors": [ 2284 | { 2285 | "name": "Sebastian Bergmann", 2286 | "email": "sebastian@phpunit.de", 2287 | "role": "lead" 2288 | } 2289 | ], 2290 | "description": "Collection of value objects that represent the types of the PHP type system", 2291 | "homepage": "https://github.com/sebastianbergmann/type", 2292 | "support": { 2293 | "issues": "https://github.com/sebastianbergmann/type/issues", 2294 | "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" 2295 | }, 2296 | "funding": [ 2297 | { 2298 | "url": "https://github.com/sebastianbergmann", 2299 | "type": "github" 2300 | } 2301 | ], 2302 | "time": "2021-06-15T12:49:02+00:00" 2303 | }, 2304 | { 2305 | "name": "sebastian/version", 2306 | "version": "3.0.2", 2307 | "source": { 2308 | "type": "git", 2309 | "url": "https://github.com/sebastianbergmann/version.git", 2310 | "reference": "c6c1022351a901512170118436c764e473f6de8c" 2311 | }, 2312 | "dist": { 2313 | "type": "zip", 2314 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", 2315 | "reference": "c6c1022351a901512170118436c764e473f6de8c", 2316 | "shasum": "" 2317 | }, 2318 | "require": { 2319 | "php": ">=7.3" 2320 | }, 2321 | "type": "library", 2322 | "extra": { 2323 | "branch-alias": { 2324 | "dev-master": "3.0-dev" 2325 | } 2326 | }, 2327 | "autoload": { 2328 | "classmap": [ 2329 | "src/" 2330 | ] 2331 | }, 2332 | "notification-url": "https://packagist.org/downloads/", 2333 | "license": [ 2334 | "BSD-3-Clause" 2335 | ], 2336 | "authors": [ 2337 | { 2338 | "name": "Sebastian Bergmann", 2339 | "email": "sebastian@phpunit.de", 2340 | "role": "lead" 2341 | } 2342 | ], 2343 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2344 | "homepage": "https://github.com/sebastianbergmann/version", 2345 | "support": { 2346 | "issues": "https://github.com/sebastianbergmann/version/issues", 2347 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" 2348 | }, 2349 | "funding": [ 2350 | { 2351 | "url": "https://github.com/sebastianbergmann", 2352 | "type": "github" 2353 | } 2354 | ], 2355 | "time": "2020-09-28T06:39:44+00:00" 2356 | }, 2357 | { 2358 | "name": "symfony/polyfill-ctype", 2359 | "version": "v1.23.0", 2360 | "source": { 2361 | "type": "git", 2362 | "url": "https://github.com/symfony/polyfill-ctype.git", 2363 | "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" 2364 | }, 2365 | "dist": { 2366 | "type": "zip", 2367 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", 2368 | "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", 2369 | "shasum": "" 2370 | }, 2371 | "require": { 2372 | "php": ">=7.1" 2373 | }, 2374 | "suggest": { 2375 | "ext-ctype": "For best performance" 2376 | }, 2377 | "type": "library", 2378 | "extra": { 2379 | "branch-alias": { 2380 | "dev-main": "1.23-dev" 2381 | }, 2382 | "thanks": { 2383 | "name": "symfony/polyfill", 2384 | "url": "https://github.com/symfony/polyfill" 2385 | } 2386 | }, 2387 | "autoload": { 2388 | "psr-4": { 2389 | "Symfony\\Polyfill\\Ctype\\": "" 2390 | }, 2391 | "files": [ 2392 | "bootstrap.php" 2393 | ] 2394 | }, 2395 | "notification-url": "https://packagist.org/downloads/", 2396 | "license": [ 2397 | "MIT" 2398 | ], 2399 | "authors": [ 2400 | { 2401 | "name": "Gert de Pagter", 2402 | "email": "BackEndTea@gmail.com" 2403 | }, 2404 | { 2405 | "name": "Symfony Community", 2406 | "homepage": "https://symfony.com/contributors" 2407 | } 2408 | ], 2409 | "description": "Symfony polyfill for ctype functions", 2410 | "homepage": "https://symfony.com", 2411 | "keywords": [ 2412 | "compatibility", 2413 | "ctype", 2414 | "polyfill", 2415 | "portable" 2416 | ], 2417 | "support": { 2418 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" 2419 | }, 2420 | "funding": [ 2421 | { 2422 | "url": "https://symfony.com/sponsor", 2423 | "type": "custom" 2424 | }, 2425 | { 2426 | "url": "https://github.com/fabpot", 2427 | "type": "github" 2428 | }, 2429 | { 2430 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2431 | "type": "tidelift" 2432 | } 2433 | ], 2434 | "time": "2021-02-19T12:13:01+00:00" 2435 | }, 2436 | { 2437 | "name": "symfony/polyfill-mbstring", 2438 | "version": "v1.23.1", 2439 | "source": { 2440 | "type": "git", 2441 | "url": "https://github.com/symfony/polyfill-mbstring.git", 2442 | "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" 2443 | }, 2444 | "dist": { 2445 | "type": "zip", 2446 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", 2447 | "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", 2448 | "shasum": "" 2449 | }, 2450 | "require": { 2451 | "php": ">=7.1" 2452 | }, 2453 | "suggest": { 2454 | "ext-mbstring": "For best performance" 2455 | }, 2456 | "type": "library", 2457 | "extra": { 2458 | "branch-alias": { 2459 | "dev-main": "1.23-dev" 2460 | }, 2461 | "thanks": { 2462 | "name": "symfony/polyfill", 2463 | "url": "https://github.com/symfony/polyfill" 2464 | } 2465 | }, 2466 | "autoload": { 2467 | "psr-4": { 2468 | "Symfony\\Polyfill\\Mbstring\\": "" 2469 | }, 2470 | "files": [ 2471 | "bootstrap.php" 2472 | ] 2473 | }, 2474 | "notification-url": "https://packagist.org/downloads/", 2475 | "license": [ 2476 | "MIT" 2477 | ], 2478 | "authors": [ 2479 | { 2480 | "name": "Nicolas Grekas", 2481 | "email": "p@tchwork.com" 2482 | }, 2483 | { 2484 | "name": "Symfony Community", 2485 | "homepage": "https://symfony.com/contributors" 2486 | } 2487 | ], 2488 | "description": "Symfony polyfill for the Mbstring extension", 2489 | "homepage": "https://symfony.com", 2490 | "keywords": [ 2491 | "compatibility", 2492 | "mbstring", 2493 | "polyfill", 2494 | "portable", 2495 | "shim" 2496 | ], 2497 | "support": { 2498 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" 2499 | }, 2500 | "funding": [ 2501 | { 2502 | "url": "https://symfony.com/sponsor", 2503 | "type": "custom" 2504 | }, 2505 | { 2506 | "url": "https://github.com/fabpot", 2507 | "type": "github" 2508 | }, 2509 | { 2510 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2511 | "type": "tidelift" 2512 | } 2513 | ], 2514 | "time": "2021-05-27T12:26:48+00:00" 2515 | }, 2516 | { 2517 | "name": "symfony/polyfill-php80", 2518 | "version": "v1.23.1", 2519 | "source": { 2520 | "type": "git", 2521 | "url": "https://github.com/symfony/polyfill-php80.git", 2522 | "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" 2523 | }, 2524 | "dist": { 2525 | "type": "zip", 2526 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", 2527 | "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", 2528 | "shasum": "" 2529 | }, 2530 | "require": { 2531 | "php": ">=7.1" 2532 | }, 2533 | "type": "library", 2534 | "extra": { 2535 | "branch-alias": { 2536 | "dev-main": "1.23-dev" 2537 | }, 2538 | "thanks": { 2539 | "name": "symfony/polyfill", 2540 | "url": "https://github.com/symfony/polyfill" 2541 | } 2542 | }, 2543 | "autoload": { 2544 | "psr-4": { 2545 | "Symfony\\Polyfill\\Php80\\": "" 2546 | }, 2547 | "files": [ 2548 | "bootstrap.php" 2549 | ], 2550 | "classmap": [ 2551 | "Resources/stubs" 2552 | ] 2553 | }, 2554 | "notification-url": "https://packagist.org/downloads/", 2555 | "license": [ 2556 | "MIT" 2557 | ], 2558 | "authors": [ 2559 | { 2560 | "name": "Ion Bazan", 2561 | "email": "ion.bazan@gmail.com" 2562 | }, 2563 | { 2564 | "name": "Nicolas Grekas", 2565 | "email": "p@tchwork.com" 2566 | }, 2567 | { 2568 | "name": "Symfony Community", 2569 | "homepage": "https://symfony.com/contributors" 2570 | } 2571 | ], 2572 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 2573 | "homepage": "https://symfony.com", 2574 | "keywords": [ 2575 | "compatibility", 2576 | "polyfill", 2577 | "portable", 2578 | "shim" 2579 | ], 2580 | "support": { 2581 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" 2582 | }, 2583 | "funding": [ 2584 | { 2585 | "url": "https://symfony.com/sponsor", 2586 | "type": "custom" 2587 | }, 2588 | { 2589 | "url": "https://github.com/fabpot", 2590 | "type": "github" 2591 | }, 2592 | { 2593 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2594 | "type": "tidelift" 2595 | } 2596 | ], 2597 | "time": "2021-07-28T13:41:28+00:00" 2598 | }, 2599 | { 2600 | "name": "symfony/var-dumper", 2601 | "version": "v5.3.6", 2602 | "source": { 2603 | "type": "git", 2604 | "url": "https://github.com/symfony/var-dumper.git", 2605 | "reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0" 2606 | }, 2607 | "dist": { 2608 | "type": "zip", 2609 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0", 2610 | "reference": "3dd8ddd1e260e58ecc61bb78da3b6584b3bfcba0", 2611 | "shasum": "" 2612 | }, 2613 | "require": { 2614 | "php": ">=7.2.5", 2615 | "symfony/polyfill-mbstring": "~1.0", 2616 | "symfony/polyfill-php80": "^1.16" 2617 | }, 2618 | "conflict": { 2619 | "phpunit/phpunit": "<5.4.3", 2620 | "symfony/console": "<4.4" 2621 | }, 2622 | "require-dev": { 2623 | "ext-iconv": "*", 2624 | "symfony/console": "^4.4|^5.0", 2625 | "symfony/process": "^4.4|^5.0", 2626 | "twig/twig": "^2.13|^3.0.4" 2627 | }, 2628 | "suggest": { 2629 | "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", 2630 | "ext-intl": "To show region name in time zone dump", 2631 | "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" 2632 | }, 2633 | "bin": [ 2634 | "Resources/bin/var-dump-server" 2635 | ], 2636 | "type": "library", 2637 | "autoload": { 2638 | "files": [ 2639 | "Resources/functions/dump.php" 2640 | ], 2641 | "psr-4": { 2642 | "Symfony\\Component\\VarDumper\\": "" 2643 | }, 2644 | "exclude-from-classmap": [ 2645 | "/Tests/" 2646 | ] 2647 | }, 2648 | "notification-url": "https://packagist.org/downloads/", 2649 | "license": [ 2650 | "MIT" 2651 | ], 2652 | "authors": [ 2653 | { 2654 | "name": "Nicolas Grekas", 2655 | "email": "p@tchwork.com" 2656 | }, 2657 | { 2658 | "name": "Symfony Community", 2659 | "homepage": "https://symfony.com/contributors" 2660 | } 2661 | ], 2662 | "description": "Provides mechanisms for walking through any arbitrary PHP variable", 2663 | "homepage": "https://symfony.com", 2664 | "keywords": [ 2665 | "debug", 2666 | "dump" 2667 | ], 2668 | "support": { 2669 | "source": "https://github.com/symfony/var-dumper/tree/v5.3.6" 2670 | }, 2671 | "funding": [ 2672 | { 2673 | "url": "https://symfony.com/sponsor", 2674 | "type": "custom" 2675 | }, 2676 | { 2677 | "url": "https://github.com/fabpot", 2678 | "type": "github" 2679 | }, 2680 | { 2681 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2682 | "type": "tidelift" 2683 | } 2684 | ], 2685 | "time": "2021-07-27T01:56:02+00:00" 2686 | }, 2687 | { 2688 | "name": "theseer/tokenizer", 2689 | "version": "1.2.1", 2690 | "source": { 2691 | "type": "git", 2692 | "url": "https://github.com/theseer/tokenizer.git", 2693 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" 2694 | }, 2695 | "dist": { 2696 | "type": "zip", 2697 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", 2698 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", 2699 | "shasum": "" 2700 | }, 2701 | "require": { 2702 | "ext-dom": "*", 2703 | "ext-tokenizer": "*", 2704 | "ext-xmlwriter": "*", 2705 | "php": "^7.2 || ^8.0" 2706 | }, 2707 | "type": "library", 2708 | "autoload": { 2709 | "classmap": [ 2710 | "src/" 2711 | ] 2712 | }, 2713 | "notification-url": "https://packagist.org/downloads/", 2714 | "license": [ 2715 | "BSD-3-Clause" 2716 | ], 2717 | "authors": [ 2718 | { 2719 | "name": "Arne Blankerts", 2720 | "email": "arne@blankerts.de", 2721 | "role": "Developer" 2722 | } 2723 | ], 2724 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 2725 | "support": { 2726 | "issues": "https://github.com/theseer/tokenizer/issues", 2727 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1" 2728 | }, 2729 | "funding": [ 2730 | { 2731 | "url": "https://github.com/theseer", 2732 | "type": "github" 2733 | } 2734 | ], 2735 | "time": "2021-07-28T10:34:58+00:00" 2736 | }, 2737 | { 2738 | "name": "webmozart/assert", 2739 | "version": "1.10.0", 2740 | "source": { 2741 | "type": "git", 2742 | "url": "https://github.com/webmozarts/assert.git", 2743 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" 2744 | }, 2745 | "dist": { 2746 | "type": "zip", 2747 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", 2748 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", 2749 | "shasum": "" 2750 | }, 2751 | "require": { 2752 | "php": "^7.2 || ^8.0", 2753 | "symfony/polyfill-ctype": "^1.8" 2754 | }, 2755 | "conflict": { 2756 | "phpstan/phpstan": "<0.12.20", 2757 | "vimeo/psalm": "<4.6.1 || 4.6.2" 2758 | }, 2759 | "require-dev": { 2760 | "phpunit/phpunit": "^8.5.13" 2761 | }, 2762 | "type": "library", 2763 | "extra": { 2764 | "branch-alias": { 2765 | "dev-master": "1.10-dev" 2766 | } 2767 | }, 2768 | "autoload": { 2769 | "psr-4": { 2770 | "Webmozart\\Assert\\": "src/" 2771 | } 2772 | }, 2773 | "notification-url": "https://packagist.org/downloads/", 2774 | "license": [ 2775 | "MIT" 2776 | ], 2777 | "authors": [ 2778 | { 2779 | "name": "Bernhard Schussek", 2780 | "email": "bschussek@gmail.com" 2781 | } 2782 | ], 2783 | "description": "Assertions to validate method input/output with nice error messages.", 2784 | "keywords": [ 2785 | "assert", 2786 | "check", 2787 | "validate" 2788 | ], 2789 | "support": { 2790 | "issues": "https://github.com/webmozarts/assert/issues", 2791 | "source": "https://github.com/webmozarts/assert/tree/1.10.0" 2792 | }, 2793 | "time": "2021-03-09T10:59:23+00:00" 2794 | } 2795 | ], 2796 | "aliases": [], 2797 | "minimum-stability": "stable", 2798 | "stability-flags": [], 2799 | "prefer-stable": false, 2800 | "prefer-lowest": false, 2801 | "platform": { 2802 | "php": "^7.3 | ^8.0" 2803 | }, 2804 | "platform-dev": [], 2805 | "plugin-api-version": "2.1.0" 2806 | } 2807 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ./tests/ 7 | 8 | 9 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # PwnedPasswords 2 | A library to query Troy Hunt's Pwned Passwords service to see whether or not a password has been included in a public breach. 3 | 4 | # Requirements 5 | 6 | - PHP >= 7.2 7 | 8 | # Installation 9 | Installing PwnedPasswords is made easy via Composer. Just require the package using the command below, and you are ready to go. 10 | 11 | composer require mxrxdxn/pwned-passwords 12 | 13 | # Usage 14 | To use the library, you can do something along the lines of the following. 15 | ```php 16 | require_once('vendor/autoload.php'); 17 | 18 | $pp = new PwnedPasswords\PwnedPasswords; 19 | 20 | $password = '123456789'; 21 | 22 | $insecure = $pp->isPwned($password); //returns true or false 23 | ``` 24 | The `isInsecure` method will return true if the password has been found in the PwnedPasswords API, and false if not. 25 | 26 | If you want to build your own thresholds (Ex. display a warning if the password has been found more than once and an error if more than 5x) you can call the `isPwned` method like below. 27 | ```php 28 | $pp = new PwnedPasswords\PwnedPasswords; 29 | 30 | $password = '123456789'; 31 | 32 | $insecure = $pp->isPwned($password, true); 33 | 34 | if ($insecure) { 35 | echo 'Oh no — pwned!' . "\n"; 36 | echo sprintf('This password has been seen %d time%s before.', $insecure, ($insecure > 1 ? 's' : '')); 37 | } else { 38 | echo 'All good!'; 39 | } 40 | ``` 41 | 42 | # Issues 43 | Please feel free to use the Github issue tracker to post any issues you have with this library. 44 | -------------------------------------------------------------------------------- /src/PwnedPasswords/Exceptions/InvalidPasswordException.php: -------------------------------------------------------------------------------- 1 | getGuzzleClient(); 19 | 20 | $hashedPassword = strtoupper(sha1($password)); 21 | $chars = substr($hashedPassword, 0, 5); 22 | 23 | $response = $client->get(sprintf('/range/%s', $chars)); 24 | 25 | if ($response->getStatusCode() !== 200) { 26 | throw new InvalidResponseException(sprintf("Invalid status code returned from API request (%s), expected 200.", $response->getStatusCode())); 27 | } 28 | 29 | foreach (explode("\r\n", $response->getBody()->getContents()) as $line) { 30 | $result = explode(':', $line); 31 | $hash = $chars . $result[0]; 32 | $hits = intval($result[1]); 33 | 34 | if ($hash === $hashedPassword) { 35 | if ($getHits === true) { 36 | return $hits; 37 | } 38 | 39 | return true; 40 | } 41 | } 42 | 43 | if ($getHits === true) { 44 | return 0; 45 | } 46 | 47 | return false; 48 | } 49 | 50 | protected function getGuzzleClient() 51 | { 52 | return new \GuzzleHttp\Client([ 53 | 'base_uri' => $this->baseUrl 54 | ]); 55 | } 56 | } -------------------------------------------------------------------------------- /tests/PwnedPasswordsTest.php: -------------------------------------------------------------------------------- 1 | assertTrue($pwnedPasswords->isPwned("password")); 16 | 17 | // Test that a "random" password does not appear in the Pwned Passwords API 18 | // This password may be in the API (but very unlikely) 19 | $this->assertFalse($pwnedPasswords->isPwned("!!!PaSsWoRd " . mt_rand(100000000, 999999999))); 20 | } 21 | 22 | /** @test */ 23 | public function empty_passwords_throw_an_invalid_password_exception() 24 | { 25 | $this->expectException(InvalidPasswordException::class); 26 | 27 | $pwnedPasswords = new PwnedPasswords(); 28 | $pwnedPasswords->isPwned(''); 29 | } 30 | 31 | /** @test */ 32 | public function a_number_of_hits_per_password_can_be_retrieved() 33 | { 34 | // Init the PwnedPasswords class 35 | $pwnedPasswords = new PwnedPasswords(); 36 | 37 | // Test that a common "known" password appears correctly in the Pwned Passwords API 38 | $this->assertGreaterThan(0, $pwnedPasswords->isPwned("password", true)); 39 | 40 | // Test that a "random" password does not appear in the Pwned Passwords API 41 | // This password may be in the API (but very unlikely) 42 | $this->assertEquals(0, $pwnedPasswords->isPwned("!!!PaSsWoRd " . mt_rand(100000000, 999999999), true)); 43 | } 44 | } 45 | --------------------------------------------------------------------------------