├── .gitignore ├── Dockerfile ├── README.md ├── app ├── Controllers │ └── WelcomeController.php ├── Models │ └── Model.php ├── helpers.php └── routes.php ├── composer.json ├── composer.lock ├── config.php ├── index.php ├── phpunit.xml ├── public └── css │ └── style.css ├── resources └── views │ ├── 404.view.php │ ├── index.view.php │ └── partials │ ├── footer.view.php │ └── header.view.php ├── src └── SimpleMVC │ ├── App.php │ ├── Database │ └── Connection.php │ ├── Exceptions │ ├── KeyNotFoundException.php │ └── MethodNotFoundException.php │ ├── Request.php │ ├── Router.php │ └── bootstrap.php └── tests └── Unit └── AppTest.php /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor/ 2 | 3 | .phpunit.result.cache -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.4.7-apache 2 | 3 | # Copy directories 4 | COPY app/ /var/www/html/app 5 | COPY core/ /var/www/html/core 6 | COPY public/ /var/www/html/public 7 | COPY resources/ /var/www/html/resources 8 | 9 | # Copy files 10 | COPY index.php /var/www/html/index.php 11 | COPY config.php /var/www/html/config.php 12 | COPY .gitignore /var/www/html/.gitignore 13 | COPY composer.json /var/www/html/composer.json 14 | COPY composer.lock /var/www/html/composer.lock 15 | COPY README.md /var/www/html/README.md 16 | 17 | # Expose ports 18 | EXPOSE 80 19 | 20 | #Run command 21 | CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] 22 | CMD ["composer", "install"] 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## * Abandoned project * 2 | 3 | ## Simple MVC framework (WIP) 4 | 5 | The most basic and simple PHP MVC framework 6 | 7 | **requirements** 8 | 9 | - PHP 7.4 or higher 10 | 11 | **getting started** 12 | 13 | clone the repo: 14 | 15 | ```bash 16 | git clone git@github.com:celyes/simple-mvc.git 17 | cd simple-mvc/ 18 | ``` 19 | 20 | start the server: 21 | 22 | ```php 23 | php -S localhost:8080 24 | ``` 25 | navigate to http://localhost:8080 26 | -------------------------------------------------------------------------------- /app/Controllers/WelcomeController.php: -------------------------------------------------------------------------------- 1 | 'controllers/index.php', 5 | 'about' => 'controllers/about.php' 6 | ]); 7 | */ 8 | 9 | $router->get('', 'WelcomeController@index'); 10 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "celyes/mvc", 3 | "description": "Simple MVC framework", 4 | "type": "project", 5 | "license": "MIT", 6 | "authors": [ 7 | { 8 | "name": "celyes", 9 | "email": "celyes02@gmail.com" 10 | } 11 | ], 12 | "minimum-stability": "dev", 13 | "require": { 14 | "php": ">=7.4" 15 | }, 16 | "autoload": { 17 | "psr-4": { 18 | "Celyes\\": "src/", 19 | "App\\": "app/" 20 | }, 21 | "files": [ 22 | "app/helpers.php" 23 | ] 24 | }, 25 | "require-dev": { 26 | "phpunit/phpunit": "^9" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /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": "1d015ed602c19b58260cf204d7e8c996", 8 | "packages": [], 9 | "packages-dev": [ 10 | { 11 | "name": "doctrine/instantiator", 12 | "version": "1.5.x-dev", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/doctrine/instantiator.git", 16 | "reference": "6410c4b8352cb64218641457cef64997e6b784fb" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/6410c4b8352cb64218641457cef64997e6b784fb", 21 | "reference": "6410c4b8352cb64218641457cef64997e6b784fb", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "php": "^7.1 || ^8.0" 26 | }, 27 | "require-dev": { 28 | "doctrine/coding-standard": "^8.0", 29 | "ext-pdo": "*", 30 | "ext-phar": "*", 31 | "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", 32 | "phpstan/phpstan": "^0.12", 33 | "phpstan/phpstan-phpunit": "^0.12", 34 | "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" 35 | }, 36 | "type": "library", 37 | "autoload": { 38 | "psr-4": { 39 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 40 | } 41 | }, 42 | "notification-url": "https://packagist.org/downloads/", 43 | "license": [ 44 | "MIT" 45 | ], 46 | "authors": [ 47 | { 48 | "name": "Marco Pivetta", 49 | "email": "ocramius@gmail.com", 50 | "homepage": "https://ocramius.github.io/" 51 | } 52 | ], 53 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 54 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 55 | "keywords": [ 56 | "constructor", 57 | "instantiate" 58 | ], 59 | "support": { 60 | "issues": "https://github.com/doctrine/instantiator/issues", 61 | "source": "https://github.com/doctrine/instantiator/tree/1.4.x" 62 | }, 63 | "funding": [ 64 | { 65 | "url": "https://www.doctrine-project.org/sponsorship.html", 66 | "type": "custom" 67 | }, 68 | { 69 | "url": "https://www.patreon.com/phpdoctrine", 70 | "type": "patreon" 71 | }, 72 | { 73 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 74 | "type": "tidelift" 75 | } 76 | ], 77 | "time": "2020-11-10T19:05:51+00:00" 78 | }, 79 | { 80 | "name": "myclabs/deep-copy", 81 | "version": "1.x-dev", 82 | "source": { 83 | "type": "git", 84 | "url": "https://github.com/myclabs/DeepCopy.git", 85 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" 86 | }, 87 | "dist": { 88 | "type": "zip", 89 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", 90 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", 91 | "shasum": "" 92 | }, 93 | "require": { 94 | "php": "^7.1 || ^8.0" 95 | }, 96 | "replace": { 97 | "myclabs/deep-copy": "self.version" 98 | }, 99 | "require-dev": { 100 | "doctrine/collections": "^1.0", 101 | "doctrine/common": "^2.6", 102 | "phpunit/phpunit": "^7.1" 103 | }, 104 | "default-branch": true, 105 | "type": "library", 106 | "autoload": { 107 | "psr-4": { 108 | "DeepCopy\\": "src/DeepCopy/" 109 | }, 110 | "files": [ 111 | "src/DeepCopy/deep_copy.php" 112 | ] 113 | }, 114 | "notification-url": "https://packagist.org/downloads/", 115 | "license": [ 116 | "MIT" 117 | ], 118 | "description": "Create deep copies (clones) of your objects", 119 | "keywords": [ 120 | "clone", 121 | "copy", 122 | "duplicate", 123 | "object", 124 | "object graph" 125 | ], 126 | "support": { 127 | "issues": "https://github.com/myclabs/DeepCopy/issues", 128 | "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" 129 | }, 130 | "funding": [ 131 | { 132 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 133 | "type": "tidelift" 134 | } 135 | ], 136 | "time": "2020-11-13T09:40:50+00:00" 137 | }, 138 | { 139 | "name": "nikic/php-parser", 140 | "version": "v4.10.4", 141 | "source": { 142 | "type": "git", 143 | "url": "https://github.com/nikic/PHP-Parser.git", 144 | "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" 145 | }, 146 | "dist": { 147 | "type": "zip", 148 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", 149 | "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", 150 | "shasum": "" 151 | }, 152 | "require": { 153 | "ext-tokenizer": "*", 154 | "php": ">=7.0" 155 | }, 156 | "require-dev": { 157 | "ircmaxell/php-yacc": "^0.0.7", 158 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 159 | }, 160 | "bin": [ 161 | "bin/php-parse" 162 | ], 163 | "type": "library", 164 | "extra": { 165 | "branch-alias": { 166 | "dev-master": "4.9-dev" 167 | } 168 | }, 169 | "autoload": { 170 | "psr-4": { 171 | "PhpParser\\": "lib/PhpParser" 172 | } 173 | }, 174 | "notification-url": "https://packagist.org/downloads/", 175 | "license": [ 176 | "BSD-3-Clause" 177 | ], 178 | "authors": [ 179 | { 180 | "name": "Nikita Popov" 181 | } 182 | ], 183 | "description": "A PHP parser written in PHP", 184 | "keywords": [ 185 | "parser", 186 | "php" 187 | ], 188 | "support": { 189 | "issues": "https://github.com/nikic/PHP-Parser/issues", 190 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" 191 | }, 192 | "time": "2020-12-20T10:01:03+00:00" 193 | }, 194 | { 195 | "name": "phar-io/manifest", 196 | "version": "dev-master", 197 | "source": { 198 | "type": "git", 199 | "url": "https://github.com/phar-io/manifest.git", 200 | "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" 201 | }, 202 | "dist": { 203 | "type": "zip", 204 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", 205 | "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", 206 | "shasum": "" 207 | }, 208 | "require": { 209 | "ext-dom": "*", 210 | "ext-phar": "*", 211 | "ext-xmlwriter": "*", 212 | "phar-io/version": "^3.0.1", 213 | "php": "^7.2 || ^8.0" 214 | }, 215 | "default-branch": true, 216 | "type": "library", 217 | "extra": { 218 | "branch-alias": { 219 | "dev-master": "2.0.x-dev" 220 | } 221 | }, 222 | "autoload": { 223 | "classmap": [ 224 | "src/" 225 | ] 226 | }, 227 | "notification-url": "https://packagist.org/downloads/", 228 | "license": [ 229 | "BSD-3-Clause" 230 | ], 231 | "authors": [ 232 | { 233 | "name": "Arne Blankerts", 234 | "email": "arne@blankerts.de", 235 | "role": "Developer" 236 | }, 237 | { 238 | "name": "Sebastian Heuer", 239 | "email": "sebastian@phpeople.de", 240 | "role": "Developer" 241 | }, 242 | { 243 | "name": "Sebastian Bergmann", 244 | "email": "sebastian@phpunit.de", 245 | "role": "Developer" 246 | } 247 | ], 248 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 249 | "support": { 250 | "issues": "https://github.com/phar-io/manifest/issues", 251 | "source": "https://github.com/phar-io/manifest/tree/2.0.1" 252 | }, 253 | "time": "2020-06-27T14:33:11+00:00" 254 | }, 255 | { 256 | "name": "phar-io/version", 257 | "version": "3.1.0", 258 | "source": { 259 | "type": "git", 260 | "url": "https://github.com/phar-io/version.git", 261 | "reference": "bae7c545bef187884426f042434e561ab1ddb182" 262 | }, 263 | "dist": { 264 | "type": "zip", 265 | "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", 266 | "reference": "bae7c545bef187884426f042434e561ab1ddb182", 267 | "shasum": "" 268 | }, 269 | "require": { 270 | "php": "^7.2 || ^8.0" 271 | }, 272 | "type": "library", 273 | "autoload": { 274 | "classmap": [ 275 | "src/" 276 | ] 277 | }, 278 | "notification-url": "https://packagist.org/downloads/", 279 | "license": [ 280 | "BSD-3-Clause" 281 | ], 282 | "authors": [ 283 | { 284 | "name": "Arne Blankerts", 285 | "email": "arne@blankerts.de", 286 | "role": "Developer" 287 | }, 288 | { 289 | "name": "Sebastian Heuer", 290 | "email": "sebastian@phpeople.de", 291 | "role": "Developer" 292 | }, 293 | { 294 | "name": "Sebastian Bergmann", 295 | "email": "sebastian@phpunit.de", 296 | "role": "Developer" 297 | } 298 | ], 299 | "description": "Library for handling version information and constraints", 300 | "support": { 301 | "issues": "https://github.com/phar-io/version/issues", 302 | "source": "https://github.com/phar-io/version/tree/3.1.0" 303 | }, 304 | "time": "2021-02-23T14:00:09+00:00" 305 | }, 306 | { 307 | "name": "phpdocumentor/reflection-common", 308 | "version": "dev-master", 309 | "source": { 310 | "type": "git", 311 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 312 | "reference": "cf8df60735d98fd18070b7cab0019ba0831e219c" 313 | }, 314 | "dist": { 315 | "type": "zip", 316 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/cf8df60735d98fd18070b7cab0019ba0831e219c", 317 | "reference": "cf8df60735d98fd18070b7cab0019ba0831e219c", 318 | "shasum": "" 319 | }, 320 | "require": { 321 | "php": ">=7.1" 322 | }, 323 | "default-branch": true, 324 | "type": "library", 325 | "extra": { 326 | "branch-alias": { 327 | "dev-master": "2.x-dev" 328 | } 329 | }, 330 | "autoload": { 331 | "psr-4": { 332 | "phpDocumentor\\Reflection\\": "src/" 333 | } 334 | }, 335 | "notification-url": "https://packagist.org/downloads/", 336 | "license": [ 337 | "MIT" 338 | ], 339 | "authors": [ 340 | { 341 | "name": "Jaap van Otterdijk", 342 | "email": "opensource@ijaap.nl" 343 | } 344 | ], 345 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 346 | "homepage": "http://www.phpdoc.org", 347 | "keywords": [ 348 | "FQSEN", 349 | "phpDocumentor", 350 | "phpdoc", 351 | "reflection", 352 | "static analysis" 353 | ], 354 | "support": { 355 | "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", 356 | "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master" 357 | }, 358 | "time": "2020-06-19T17:42:03+00:00" 359 | }, 360 | { 361 | "name": "phpdocumentor/reflection-docblock", 362 | "version": "dev-master", 363 | "source": { 364 | "type": "git", 365 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 366 | "reference": "f8d350d8514ff60b5993dd0121c62299480c989c" 367 | }, 368 | "dist": { 369 | "type": "zip", 370 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f8d350d8514ff60b5993dd0121c62299480c989c", 371 | "reference": "f8d350d8514ff60b5993dd0121c62299480c989c", 372 | "shasum": "" 373 | }, 374 | "require": { 375 | "ext-filter": "*", 376 | "php": "^7.2 || ^8.0", 377 | "phpdocumentor/reflection-common": "^2.2", 378 | "phpdocumentor/type-resolver": "^1.3", 379 | "webmozart/assert": "^1.9.1" 380 | }, 381 | "require-dev": { 382 | "mockery/mockery": "~1.3.2" 383 | }, 384 | "default-branch": true, 385 | "type": "library", 386 | "extra": { 387 | "branch-alias": { 388 | "dev-master": "5.x-dev" 389 | } 390 | }, 391 | "autoload": { 392 | "psr-4": { 393 | "phpDocumentor\\Reflection\\": "src" 394 | } 395 | }, 396 | "notification-url": "https://packagist.org/downloads/", 397 | "license": [ 398 | "MIT" 399 | ], 400 | "authors": [ 401 | { 402 | "name": "Mike van Riel", 403 | "email": "me@mikevanriel.com" 404 | }, 405 | { 406 | "name": "Jaap van Otterdijk", 407 | "email": "account@ijaap.nl" 408 | } 409 | ], 410 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 411 | "support": { 412 | "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", 413 | "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" 414 | }, 415 | "time": "2021-03-07T11:12:25+00:00" 416 | }, 417 | { 418 | "name": "phpdocumentor/type-resolver", 419 | "version": "1.x-dev", 420 | "source": { 421 | "type": "git", 422 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 423 | "reference": "6759f2268deb9f329812679e9dcb2d0083b2a30b" 424 | }, 425 | "dist": { 426 | "type": "zip", 427 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6759f2268deb9f329812679e9dcb2d0083b2a30b", 428 | "reference": "6759f2268deb9f329812679e9dcb2d0083b2a30b", 429 | "shasum": "" 430 | }, 431 | "require": { 432 | "php": "^7.2 || ^8.0", 433 | "phpdocumentor/reflection-common": "^2.0" 434 | }, 435 | "require-dev": { 436 | "ext-tokenizer": "*" 437 | }, 438 | "default-branch": true, 439 | "type": "library", 440 | "extra": { 441 | "branch-alias": { 442 | "dev-1.x": "1.x-dev" 443 | } 444 | }, 445 | "autoload": { 446 | "psr-4": { 447 | "phpDocumentor\\Reflection\\": "src" 448 | } 449 | }, 450 | "notification-url": "https://packagist.org/downloads/", 451 | "license": [ 452 | "MIT" 453 | ], 454 | "authors": [ 455 | { 456 | "name": "Mike van Riel", 457 | "email": "me@mikevanriel.com" 458 | } 459 | ], 460 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 461 | "support": { 462 | "issues": "https://github.com/phpDocumentor/TypeResolver/issues", 463 | "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.x" 464 | }, 465 | "time": "2021-02-02T21:09:27+00:00" 466 | }, 467 | { 468 | "name": "phpspec/prophecy", 469 | "version": "1.12.2", 470 | "source": { 471 | "type": "git", 472 | "url": "https://github.com/phpspec/prophecy.git", 473 | "reference": "245710e971a030f42e08f4912863805570f23d39" 474 | }, 475 | "dist": { 476 | "type": "zip", 477 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", 478 | "reference": "245710e971a030f42e08f4912863805570f23d39", 479 | "shasum": "" 480 | }, 481 | "require": { 482 | "doctrine/instantiator": "^1.2", 483 | "php": "^7.2 || ~8.0, <8.1", 484 | "phpdocumentor/reflection-docblock": "^5.2", 485 | "sebastian/comparator": "^3.0 || ^4.0", 486 | "sebastian/recursion-context": "^3.0 || ^4.0" 487 | }, 488 | "require-dev": { 489 | "phpspec/phpspec": "^6.0", 490 | "phpunit/phpunit": "^8.0 || ^9.0" 491 | }, 492 | "type": "library", 493 | "extra": { 494 | "branch-alias": { 495 | "dev-master": "1.11.x-dev" 496 | } 497 | }, 498 | "autoload": { 499 | "psr-4": { 500 | "Prophecy\\": "src/Prophecy" 501 | } 502 | }, 503 | "notification-url": "https://packagist.org/downloads/", 504 | "license": [ 505 | "MIT" 506 | ], 507 | "authors": [ 508 | { 509 | "name": "Konstantin Kudryashov", 510 | "email": "ever.zet@gmail.com", 511 | "homepage": "http://everzet.com" 512 | }, 513 | { 514 | "name": "Marcello Duarte", 515 | "email": "marcello.duarte@gmail.com" 516 | } 517 | ], 518 | "description": "Highly opinionated mocking framework for PHP 5.3+", 519 | "homepage": "https://github.com/phpspec/prophecy", 520 | "keywords": [ 521 | "Double", 522 | "Dummy", 523 | "fake", 524 | "mock", 525 | "spy", 526 | "stub" 527 | ], 528 | "support": { 529 | "issues": "https://github.com/phpspec/prophecy/issues", 530 | "source": "https://github.com/phpspec/prophecy/tree/1.12.2" 531 | }, 532 | "time": "2020-12-19T10:15:11+00:00" 533 | }, 534 | { 535 | "name": "phpunit/php-code-coverage", 536 | "version": "9.2.x-dev", 537 | "source": { 538 | "type": "git", 539 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 540 | "reference": "ad069801f3d0cdb7102e58afd5f9f32834ec7160" 541 | }, 542 | "dist": { 543 | "type": "zip", 544 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ad069801f3d0cdb7102e58afd5f9f32834ec7160", 545 | "reference": "ad069801f3d0cdb7102e58afd5f9f32834ec7160", 546 | "shasum": "" 547 | }, 548 | "require": { 549 | "ext-dom": "*", 550 | "ext-libxml": "*", 551 | "ext-xmlwriter": "*", 552 | "nikic/php-parser": "^4.10.2", 553 | "php": ">=7.3", 554 | "phpunit/php-file-iterator": "^3.0.3", 555 | "phpunit/php-text-template": "^2.0.2", 556 | "sebastian/code-unit-reverse-lookup": "^2.0.2", 557 | "sebastian/complexity": "^2.0", 558 | "sebastian/environment": "^5.1.2", 559 | "sebastian/lines-of-code": "^1.0.3", 560 | "sebastian/version": "^3.0.1", 561 | "theseer/tokenizer": "^1.2.0" 562 | }, 563 | "require-dev": { 564 | "phpunit/phpunit": "^9.3" 565 | }, 566 | "suggest": { 567 | "ext-pcov": "*", 568 | "ext-xdebug": "*" 569 | }, 570 | "type": "library", 571 | "extra": { 572 | "branch-alias": { 573 | "dev-master": "9.2-dev" 574 | } 575 | }, 576 | "autoload": { 577 | "classmap": [ 578 | "src/" 579 | ] 580 | }, 581 | "notification-url": "https://packagist.org/downloads/", 582 | "license": [ 583 | "BSD-3-Clause" 584 | ], 585 | "authors": [ 586 | { 587 | "name": "Sebastian Bergmann", 588 | "email": "sebastian@phpunit.de", 589 | "role": "lead" 590 | } 591 | ], 592 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 593 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 594 | "keywords": [ 595 | "coverage", 596 | "testing", 597 | "xunit" 598 | ], 599 | "support": { 600 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 601 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2" 602 | }, 603 | "funding": [ 604 | { 605 | "url": "https://github.com/sebastianbergmann", 606 | "type": "github" 607 | } 608 | ], 609 | "time": "2021-02-08T09:55:27+00:00" 610 | }, 611 | { 612 | "name": "phpunit/php-file-iterator", 613 | "version": "dev-master", 614 | "source": { 615 | "type": "git", 616 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 617 | "reference": "330949c62cbc3e44120990701c949e59a4f3e141" 618 | }, 619 | "dist": { 620 | "type": "zip", 621 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/330949c62cbc3e44120990701c949e59a4f3e141", 622 | "reference": "330949c62cbc3e44120990701c949e59a4f3e141", 623 | "shasum": "" 624 | }, 625 | "require": { 626 | "php": ">=7.3" 627 | }, 628 | "require-dev": { 629 | "phpunit/phpunit": "^9.3" 630 | }, 631 | "default-branch": true, 632 | "type": "library", 633 | "extra": { 634 | "branch-alias": { 635 | "dev-master": "3.0-dev" 636 | } 637 | }, 638 | "autoload": { 639 | "classmap": [ 640 | "src/" 641 | ] 642 | }, 643 | "notification-url": "https://packagist.org/downloads/", 644 | "license": [ 645 | "BSD-3-Clause" 646 | ], 647 | "authors": [ 648 | { 649 | "name": "Sebastian Bergmann", 650 | "email": "sebastian@phpunit.de", 651 | "role": "lead" 652 | } 653 | ], 654 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 655 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 656 | "keywords": [ 657 | "filesystem", 658 | "iterator" 659 | ], 660 | "support": { 661 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 662 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/master" 663 | }, 664 | "funding": [ 665 | { 666 | "url": "https://github.com/sebastianbergmann", 667 | "type": "github" 668 | } 669 | ], 670 | "time": "2021-03-10T06:29:10+00:00" 671 | }, 672 | { 673 | "name": "phpunit/php-invoker", 674 | "version": "dev-master", 675 | "source": { 676 | "type": "git", 677 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 678 | "reference": "fe3276f5cd81d19a8e8ef90a32855545f7aae7cb" 679 | }, 680 | "dist": { 681 | "type": "zip", 682 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/fe3276f5cd81d19a8e8ef90a32855545f7aae7cb", 683 | "reference": "fe3276f5cd81d19a8e8ef90a32855545f7aae7cb", 684 | "shasum": "" 685 | }, 686 | "require": { 687 | "php": ">=7.3" 688 | }, 689 | "require-dev": { 690 | "ext-pcntl": "*", 691 | "phpunit/phpunit": "^9.3" 692 | }, 693 | "suggest": { 694 | "ext-pcntl": "*" 695 | }, 696 | "default-branch": true, 697 | "type": "library", 698 | "extra": { 699 | "branch-alias": { 700 | "dev-master": "3.1-dev" 701 | } 702 | }, 703 | "autoload": { 704 | "classmap": [ 705 | "src/" 706 | ] 707 | }, 708 | "notification-url": "https://packagist.org/downloads/", 709 | "license": [ 710 | "BSD-3-Clause" 711 | ], 712 | "authors": [ 713 | { 714 | "name": "Sebastian Bergmann", 715 | "email": "sebastian@phpunit.de", 716 | "role": "lead" 717 | } 718 | ], 719 | "description": "Invoke callables with a timeout", 720 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 721 | "keywords": [ 722 | "process" 723 | ], 724 | "support": { 725 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues", 726 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/master" 727 | }, 728 | "funding": [ 729 | { 730 | "url": "https://github.com/sebastianbergmann", 731 | "type": "github" 732 | } 733 | ], 734 | "time": "2021-03-10T06:29:18+00:00" 735 | }, 736 | { 737 | "name": "phpunit/php-text-template", 738 | "version": "dev-master", 739 | "source": { 740 | "type": "git", 741 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 742 | "reference": "11d864dc75b7f73d1e03361bff717894587f3987" 743 | }, 744 | "dist": { 745 | "type": "zip", 746 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/11d864dc75b7f73d1e03361bff717894587f3987", 747 | "reference": "11d864dc75b7f73d1e03361bff717894587f3987", 748 | "shasum": "" 749 | }, 750 | "require": { 751 | "php": ">=7.3" 752 | }, 753 | "require-dev": { 754 | "phpunit/phpunit": "^9.3" 755 | }, 756 | "default-branch": true, 757 | "type": "library", 758 | "extra": { 759 | "branch-alias": { 760 | "dev-master": "2.0-dev" 761 | } 762 | }, 763 | "autoload": { 764 | "classmap": [ 765 | "src/" 766 | ] 767 | }, 768 | "notification-url": "https://packagist.org/downloads/", 769 | "license": [ 770 | "BSD-3-Clause" 771 | ], 772 | "authors": [ 773 | { 774 | "name": "Sebastian Bergmann", 775 | "email": "sebastian@phpunit.de", 776 | "role": "lead" 777 | } 778 | ], 779 | "description": "Simple template engine.", 780 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 781 | "keywords": [ 782 | "template" 783 | ], 784 | "support": { 785 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 786 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/master" 787 | }, 788 | "funding": [ 789 | { 790 | "url": "https://github.com/sebastianbergmann", 791 | "type": "github" 792 | } 793 | ], 794 | "time": "2021-03-10T06:29:48+00:00" 795 | }, 796 | { 797 | "name": "phpunit/php-timer", 798 | "version": "dev-master", 799 | "source": { 800 | "type": "git", 801 | "url": "https://github.com/sebastianbergmann/php-timer.git", 802 | "reference": "95242c4aa540e9b3655c7edbe8f76d55ac237b7b" 803 | }, 804 | "dist": { 805 | "type": "zip", 806 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/95242c4aa540e9b3655c7edbe8f76d55ac237b7b", 807 | "reference": "95242c4aa540e9b3655c7edbe8f76d55ac237b7b", 808 | "shasum": "" 809 | }, 810 | "require": { 811 | "php": ">=7.3" 812 | }, 813 | "require-dev": { 814 | "phpunit/phpunit": "^9.3" 815 | }, 816 | "default-branch": true, 817 | "type": "library", 818 | "extra": { 819 | "branch-alias": { 820 | "dev-master": "5.0-dev" 821 | } 822 | }, 823 | "autoload": { 824 | "classmap": [ 825 | "src/" 826 | ] 827 | }, 828 | "notification-url": "https://packagist.org/downloads/", 829 | "license": [ 830 | "BSD-3-Clause" 831 | ], 832 | "authors": [ 833 | { 834 | "name": "Sebastian Bergmann", 835 | "email": "sebastian@phpunit.de", 836 | "role": "lead" 837 | } 838 | ], 839 | "description": "Utility class for timing", 840 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 841 | "keywords": [ 842 | "timer" 843 | ], 844 | "support": { 845 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 846 | "source": "https://github.com/sebastianbergmann/php-timer/tree/master" 847 | }, 848 | "funding": [ 849 | { 850 | "url": "https://github.com/sebastianbergmann", 851 | "type": "github" 852 | } 853 | ], 854 | "time": "2021-03-10T06:29:26+00:00" 855 | }, 856 | { 857 | "name": "phpunit/phpunit", 858 | "version": "9.5.x-dev", 859 | "source": { 860 | "type": "git", 861 | "url": "https://github.com/sebastianbergmann/phpunit.git", 862 | "reference": "e0de526e804923edd6be19d823015ca656d9e43b" 863 | }, 864 | "dist": { 865 | "type": "zip", 866 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e0de526e804923edd6be19d823015ca656d9e43b", 867 | "reference": "e0de526e804923edd6be19d823015ca656d9e43b", 868 | "shasum": "" 869 | }, 870 | "require": { 871 | "doctrine/instantiator": "^1.3.1", 872 | "ext-dom": "*", 873 | "ext-json": "*", 874 | "ext-libxml": "*", 875 | "ext-mbstring": "*", 876 | "ext-xml": "*", 877 | "ext-xmlwriter": "*", 878 | "myclabs/deep-copy": "^1.10.1", 879 | "phar-io/manifest": "^2.0.1", 880 | "phar-io/version": "^3.0.2", 881 | "php": ">=7.3", 882 | "phpspec/prophecy": "^1.12.1", 883 | "phpunit/php-code-coverage": "^9.2.3", 884 | "phpunit/php-file-iterator": "^3.0.5", 885 | "phpunit/php-invoker": "^3.1.1", 886 | "phpunit/php-text-template": "^2.0.3", 887 | "phpunit/php-timer": "^5.0.2", 888 | "sebastian/cli-parser": "^1.0.1", 889 | "sebastian/code-unit": "^1.0.6", 890 | "sebastian/comparator": "^4.0.5", 891 | "sebastian/diff": "^4.0.3", 892 | "sebastian/environment": "^5.1.3", 893 | "sebastian/exporter": "^4.0.3", 894 | "sebastian/global-state": "^5.0.1", 895 | "sebastian/object-enumerator": "^4.0.3", 896 | "sebastian/resource-operations": "^3.0.3", 897 | "sebastian/type": "^2.3", 898 | "sebastian/version": "^3.0.2" 899 | }, 900 | "require-dev": { 901 | "ext-pdo": "*", 902 | "phpspec/prophecy-phpunit": "^2.0.1" 903 | }, 904 | "suggest": { 905 | "ext-soap": "*", 906 | "ext-xdebug": "*" 907 | }, 908 | "bin": [ 909 | "phpunit" 910 | ], 911 | "type": "library", 912 | "extra": { 913 | "branch-alias": { 914 | "dev-master": "9.5-dev" 915 | } 916 | }, 917 | "autoload": { 918 | "classmap": [ 919 | "src/" 920 | ], 921 | "files": [ 922 | "src/Framework/Assert/Functions.php" 923 | ] 924 | }, 925 | "notification-url": "https://packagist.org/downloads/", 926 | "license": [ 927 | "BSD-3-Clause" 928 | ], 929 | "authors": [ 930 | { 931 | "name": "Sebastian Bergmann", 932 | "email": "sebastian@phpunit.de", 933 | "role": "lead" 934 | } 935 | ], 936 | "description": "The PHP Unit Testing framework.", 937 | "homepage": "https://phpunit.de/", 938 | "keywords": [ 939 | "phpunit", 940 | "testing", 941 | "xunit" 942 | ], 943 | "support": { 944 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 945 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5" 946 | }, 947 | "funding": [ 948 | { 949 | "url": "https://phpunit.de/donate.html", 950 | "type": "custom" 951 | }, 952 | { 953 | "url": "https://github.com/sebastianbergmann", 954 | "type": "github" 955 | } 956 | ], 957 | "time": "2021-03-10T06:18:38+00:00" 958 | }, 959 | { 960 | "name": "sebastian/cli-parser", 961 | "version": "dev-master", 962 | "source": { 963 | "type": "git", 964 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 965 | "reference": "c8472024d13a267ba49f4c1e194a01cba5b094f5" 966 | }, 967 | "dist": { 968 | "type": "zip", 969 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c8472024d13a267ba49f4c1e194a01cba5b094f5", 970 | "reference": "c8472024d13a267ba49f4c1e194a01cba5b094f5", 971 | "shasum": "" 972 | }, 973 | "require": { 974 | "php": ">=7.3" 975 | }, 976 | "require-dev": { 977 | "phpunit/phpunit": "^9.3" 978 | }, 979 | "default-branch": true, 980 | "type": "library", 981 | "extra": { 982 | "branch-alias": { 983 | "dev-master": "1.0-dev" 984 | } 985 | }, 986 | "autoload": { 987 | "classmap": [ 988 | "src/" 989 | ] 990 | }, 991 | "notification-url": "https://packagist.org/downloads/", 992 | "license": [ 993 | "BSD-3-Clause" 994 | ], 995 | "authors": [ 996 | { 997 | "name": "Sebastian Bergmann", 998 | "email": "sebastian@phpunit.de", 999 | "role": "lead" 1000 | } 1001 | ], 1002 | "description": "Library for parsing CLI options", 1003 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 1004 | "support": { 1005 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues", 1006 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/master" 1007 | }, 1008 | "funding": [ 1009 | { 1010 | "url": "https://github.com/sebastianbergmann", 1011 | "type": "github" 1012 | } 1013 | ], 1014 | "time": "2021-03-10T06:30:16+00:00" 1015 | }, 1016 | { 1017 | "name": "sebastian/code-unit", 1018 | "version": "1.0.8", 1019 | "source": { 1020 | "type": "git", 1021 | "url": "https://github.com/sebastianbergmann/code-unit.git", 1022 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" 1023 | }, 1024 | "dist": { 1025 | "type": "zip", 1026 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", 1027 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", 1028 | "shasum": "" 1029 | }, 1030 | "require": { 1031 | "php": ">=7.3" 1032 | }, 1033 | "require-dev": { 1034 | "phpunit/phpunit": "^9.3" 1035 | }, 1036 | "type": "library", 1037 | "extra": { 1038 | "branch-alias": { 1039 | "dev-master": "1.0-dev" 1040 | } 1041 | }, 1042 | "autoload": { 1043 | "classmap": [ 1044 | "src/" 1045 | ] 1046 | }, 1047 | "notification-url": "https://packagist.org/downloads/", 1048 | "license": [ 1049 | "BSD-3-Clause" 1050 | ], 1051 | "authors": [ 1052 | { 1053 | "name": "Sebastian Bergmann", 1054 | "email": "sebastian@phpunit.de", 1055 | "role": "lead" 1056 | } 1057 | ], 1058 | "description": "Collection of value objects that represent the PHP code units", 1059 | "homepage": "https://github.com/sebastianbergmann/code-unit", 1060 | "support": { 1061 | "issues": "https://github.com/sebastianbergmann/code-unit/issues", 1062 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" 1063 | }, 1064 | "funding": [ 1065 | { 1066 | "url": "https://github.com/sebastianbergmann", 1067 | "type": "github" 1068 | } 1069 | ], 1070 | "time": "2020-10-26T13:08:54+00:00" 1071 | }, 1072 | { 1073 | "name": "sebastian/code-unit-reverse-lookup", 1074 | "version": "dev-master", 1075 | "source": { 1076 | "type": "git", 1077 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1078 | "reference": "84710fb3a027eb62978539705a0cd00713d474c8" 1079 | }, 1080 | "dist": { 1081 | "type": "zip", 1082 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/84710fb3a027eb62978539705a0cd00713d474c8", 1083 | "reference": "84710fb3a027eb62978539705a0cd00713d474c8", 1084 | "shasum": "" 1085 | }, 1086 | "require": { 1087 | "php": ">=7.3" 1088 | }, 1089 | "require-dev": { 1090 | "phpunit/phpunit": "^9.3" 1091 | }, 1092 | "default-branch": true, 1093 | "type": "library", 1094 | "extra": { 1095 | "branch-alias": { 1096 | "dev-master": "2.0-dev" 1097 | } 1098 | }, 1099 | "autoload": { 1100 | "classmap": [ 1101 | "src/" 1102 | ] 1103 | }, 1104 | "notification-url": "https://packagist.org/downloads/", 1105 | "license": [ 1106 | "BSD-3-Clause" 1107 | ], 1108 | "authors": [ 1109 | { 1110 | "name": "Sebastian Bergmann", 1111 | "email": "sebastian@phpunit.de" 1112 | } 1113 | ], 1114 | "description": "Looks up which function or method a line of code belongs to", 1115 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1116 | "support": { 1117 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 1118 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/master" 1119 | }, 1120 | "funding": [ 1121 | { 1122 | "url": "https://github.com/sebastianbergmann", 1123 | "type": "github" 1124 | } 1125 | ], 1126 | "time": "2021-03-10T06:28:05+00:00" 1127 | }, 1128 | { 1129 | "name": "sebastian/comparator", 1130 | "version": "dev-master", 1131 | "source": { 1132 | "type": "git", 1133 | "url": "https://github.com/sebastianbergmann/comparator.git", 1134 | "reference": "5dfac003e3be0ca24000cee2a2e19ba2f21aa8f8" 1135 | }, 1136 | "dist": { 1137 | "type": "zip", 1138 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5dfac003e3be0ca24000cee2a2e19ba2f21aa8f8", 1139 | "reference": "5dfac003e3be0ca24000cee2a2e19ba2f21aa8f8", 1140 | "shasum": "" 1141 | }, 1142 | "require": { 1143 | "php": ">=7.3", 1144 | "sebastian/diff": "^4.0", 1145 | "sebastian/exporter": "^4.0" 1146 | }, 1147 | "require-dev": { 1148 | "phpunit/phpunit": "^9.3" 1149 | }, 1150 | "default-branch": true, 1151 | "type": "library", 1152 | "extra": { 1153 | "branch-alias": { 1154 | "dev-master": "4.0-dev" 1155 | } 1156 | }, 1157 | "autoload": { 1158 | "classmap": [ 1159 | "src/" 1160 | ] 1161 | }, 1162 | "notification-url": "https://packagist.org/downloads/", 1163 | "license": [ 1164 | "BSD-3-Clause" 1165 | ], 1166 | "authors": [ 1167 | { 1168 | "name": "Sebastian Bergmann", 1169 | "email": "sebastian@phpunit.de" 1170 | }, 1171 | { 1172 | "name": "Jeff Welch", 1173 | "email": "whatthejeff@gmail.com" 1174 | }, 1175 | { 1176 | "name": "Volker Dusch", 1177 | "email": "github@wallbash.com" 1178 | }, 1179 | { 1180 | "name": "Bernhard Schussek", 1181 | "email": "bschussek@2bepublished.at" 1182 | } 1183 | ], 1184 | "description": "Provides the functionality to compare PHP values for equality", 1185 | "homepage": "https://github.com/sebastianbergmann/comparator", 1186 | "keywords": [ 1187 | "comparator", 1188 | "compare", 1189 | "equality" 1190 | ], 1191 | "support": { 1192 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 1193 | "source": "https://github.com/sebastianbergmann/comparator/tree/master" 1194 | }, 1195 | "funding": [ 1196 | { 1197 | "url": "https://github.com/sebastianbergmann", 1198 | "type": "github" 1199 | } 1200 | ], 1201 | "time": "2021-03-10T06:28:15+00:00" 1202 | }, 1203 | { 1204 | "name": "sebastian/complexity", 1205 | "version": "2.0.2", 1206 | "source": { 1207 | "type": "git", 1208 | "url": "https://github.com/sebastianbergmann/complexity.git", 1209 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" 1210 | }, 1211 | "dist": { 1212 | "type": "zip", 1213 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", 1214 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", 1215 | "shasum": "" 1216 | }, 1217 | "require": { 1218 | "nikic/php-parser": "^4.7", 1219 | "php": ">=7.3" 1220 | }, 1221 | "require-dev": { 1222 | "phpunit/phpunit": "^9.3" 1223 | }, 1224 | "type": "library", 1225 | "extra": { 1226 | "branch-alias": { 1227 | "dev-master": "2.0-dev" 1228 | } 1229 | }, 1230 | "autoload": { 1231 | "classmap": [ 1232 | "src/" 1233 | ] 1234 | }, 1235 | "notification-url": "https://packagist.org/downloads/", 1236 | "license": [ 1237 | "BSD-3-Clause" 1238 | ], 1239 | "authors": [ 1240 | { 1241 | "name": "Sebastian Bergmann", 1242 | "email": "sebastian@phpunit.de", 1243 | "role": "lead" 1244 | } 1245 | ], 1246 | "description": "Library for calculating the complexity of PHP code units", 1247 | "homepage": "https://github.com/sebastianbergmann/complexity", 1248 | "support": { 1249 | "issues": "https://github.com/sebastianbergmann/complexity/issues", 1250 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" 1251 | }, 1252 | "funding": [ 1253 | { 1254 | "url": "https://github.com/sebastianbergmann", 1255 | "type": "github" 1256 | } 1257 | ], 1258 | "time": "2020-10-26T15:52:27+00:00" 1259 | }, 1260 | { 1261 | "name": "sebastian/diff", 1262 | "version": "dev-master", 1263 | "source": { 1264 | "type": "git", 1265 | "url": "https://github.com/sebastianbergmann/diff.git", 1266 | "reference": "08ab1620f0f35c41e50d847433193da76d33151e" 1267 | }, 1268 | "dist": { 1269 | "type": "zip", 1270 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/08ab1620f0f35c41e50d847433193da76d33151e", 1271 | "reference": "08ab1620f0f35c41e50d847433193da76d33151e", 1272 | "shasum": "" 1273 | }, 1274 | "require": { 1275 | "php": ">=7.3" 1276 | }, 1277 | "require-dev": { 1278 | "phpunit/phpunit": "^9.3", 1279 | "symfony/process": "^4.2 || ^5" 1280 | }, 1281 | "default-branch": true, 1282 | "type": "library", 1283 | "extra": { 1284 | "branch-alias": { 1285 | "dev-master": "4.0-dev" 1286 | } 1287 | }, 1288 | "autoload": { 1289 | "classmap": [ 1290 | "src/" 1291 | ] 1292 | }, 1293 | "notification-url": "https://packagist.org/downloads/", 1294 | "license": [ 1295 | "BSD-3-Clause" 1296 | ], 1297 | "authors": [ 1298 | { 1299 | "name": "Sebastian Bergmann", 1300 | "email": "sebastian@phpunit.de" 1301 | }, 1302 | { 1303 | "name": "Kore Nordmann", 1304 | "email": "mail@kore-nordmann.de" 1305 | } 1306 | ], 1307 | "description": "Diff implementation", 1308 | "homepage": "https://github.com/sebastianbergmann/diff", 1309 | "keywords": [ 1310 | "diff", 1311 | "udiff", 1312 | "unidiff", 1313 | "unified diff" 1314 | ], 1315 | "support": { 1316 | "issues": "https://github.com/sebastianbergmann/diff/issues", 1317 | "source": "https://github.com/sebastianbergmann/diff/tree/master" 1318 | }, 1319 | "funding": [ 1320 | { 1321 | "url": "https://github.com/sebastianbergmann", 1322 | "type": "github" 1323 | } 1324 | ], 1325 | "time": "2021-03-10T06:28:23+00:00" 1326 | }, 1327 | { 1328 | "name": "sebastian/environment", 1329 | "version": "dev-master", 1330 | "source": { 1331 | "type": "git", 1332 | "url": "https://github.com/sebastianbergmann/environment.git", 1333 | "reference": "e34aa76b02666b7f12417f2000b6d4fbb9c2016c" 1334 | }, 1335 | "dist": { 1336 | "type": "zip", 1337 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/e34aa76b02666b7f12417f2000b6d4fbb9c2016c", 1338 | "reference": "e34aa76b02666b7f12417f2000b6d4fbb9c2016c", 1339 | "shasum": "" 1340 | }, 1341 | "require": { 1342 | "php": ">=7.3" 1343 | }, 1344 | "require-dev": { 1345 | "phpunit/phpunit": "^9.3" 1346 | }, 1347 | "suggest": { 1348 | "ext-posix": "*" 1349 | }, 1350 | "default-branch": true, 1351 | "type": "library", 1352 | "extra": { 1353 | "branch-alias": { 1354 | "dev-master": "5.1-dev" 1355 | } 1356 | }, 1357 | "autoload": { 1358 | "classmap": [ 1359 | "src/" 1360 | ] 1361 | }, 1362 | "notification-url": "https://packagist.org/downloads/", 1363 | "license": [ 1364 | "BSD-3-Clause" 1365 | ], 1366 | "authors": [ 1367 | { 1368 | "name": "Sebastian Bergmann", 1369 | "email": "sebastian@phpunit.de" 1370 | } 1371 | ], 1372 | "description": "Provides functionality to handle HHVM/PHP environments", 1373 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1374 | "keywords": [ 1375 | "Xdebug", 1376 | "environment", 1377 | "hhvm" 1378 | ], 1379 | "support": { 1380 | "issues": "https://github.com/sebastianbergmann/environment/issues", 1381 | "source": "https://github.com/sebastianbergmann/environment/tree/master" 1382 | }, 1383 | "funding": [ 1384 | { 1385 | "url": "https://github.com/sebastianbergmann", 1386 | "type": "github" 1387 | } 1388 | ], 1389 | "time": "2021-03-10T06:28:31+00:00" 1390 | }, 1391 | { 1392 | "name": "sebastian/exporter", 1393 | "version": "dev-master", 1394 | "source": { 1395 | "type": "git", 1396 | "url": "https://github.com/sebastianbergmann/exporter.git", 1397 | "reference": "889b30136f9f8a6c0c4d71954b772ac8b8d7feab" 1398 | }, 1399 | "dist": { 1400 | "type": "zip", 1401 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/889b30136f9f8a6c0c4d71954b772ac8b8d7feab", 1402 | "reference": "889b30136f9f8a6c0c4d71954b772ac8b8d7feab", 1403 | "shasum": "" 1404 | }, 1405 | "require": { 1406 | "php": ">=7.3", 1407 | "sebastian/recursion-context": "^4.0" 1408 | }, 1409 | "require-dev": { 1410 | "ext-mbstring": "*", 1411 | "phpunit/phpunit": "^9.3" 1412 | }, 1413 | "default-branch": true, 1414 | "type": "library", 1415 | "extra": { 1416 | "branch-alias": { 1417 | "dev-master": "4.0-dev" 1418 | } 1419 | }, 1420 | "autoload": { 1421 | "classmap": [ 1422 | "src/" 1423 | ] 1424 | }, 1425 | "notification-url": "https://packagist.org/downloads/", 1426 | "license": [ 1427 | "BSD-3-Clause" 1428 | ], 1429 | "authors": [ 1430 | { 1431 | "name": "Sebastian Bergmann", 1432 | "email": "sebastian@phpunit.de" 1433 | }, 1434 | { 1435 | "name": "Jeff Welch", 1436 | "email": "whatthejeff@gmail.com" 1437 | }, 1438 | { 1439 | "name": "Volker Dusch", 1440 | "email": "github@wallbash.com" 1441 | }, 1442 | { 1443 | "name": "Adam Harvey", 1444 | "email": "aharvey@php.net" 1445 | }, 1446 | { 1447 | "name": "Bernhard Schussek", 1448 | "email": "bschussek@gmail.com" 1449 | } 1450 | ], 1451 | "description": "Provides the functionality to export PHP variables for visualization", 1452 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1453 | "keywords": [ 1454 | "export", 1455 | "exporter" 1456 | ], 1457 | "support": { 1458 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 1459 | "source": "https://github.com/sebastianbergmann/exporter/tree/master" 1460 | }, 1461 | "funding": [ 1462 | { 1463 | "url": "https://github.com/sebastianbergmann", 1464 | "type": "github" 1465 | } 1466 | ], 1467 | "time": "2021-03-10T06:28:38+00:00" 1468 | }, 1469 | { 1470 | "name": "sebastian/global-state", 1471 | "version": "dev-master", 1472 | "source": { 1473 | "type": "git", 1474 | "url": "https://github.com/sebastianbergmann/global-state.git", 1475 | "reference": "8a1428d5351ea5dae3aa386d3b321499ac23adea" 1476 | }, 1477 | "dist": { 1478 | "type": "zip", 1479 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/8a1428d5351ea5dae3aa386d3b321499ac23adea", 1480 | "reference": "8a1428d5351ea5dae3aa386d3b321499ac23adea", 1481 | "shasum": "" 1482 | }, 1483 | "require": { 1484 | "php": ">=7.3", 1485 | "sebastian/object-reflector": "^2.0", 1486 | "sebastian/recursion-context": "^4.0" 1487 | }, 1488 | "require-dev": { 1489 | "ext-dom": "*", 1490 | "phpunit/phpunit": "^9.3" 1491 | }, 1492 | "suggest": { 1493 | "ext-uopz": "*" 1494 | }, 1495 | "default-branch": true, 1496 | "type": "library", 1497 | "extra": { 1498 | "branch-alias": { 1499 | "dev-master": "5.0-dev" 1500 | } 1501 | }, 1502 | "autoload": { 1503 | "classmap": [ 1504 | "src/" 1505 | ] 1506 | }, 1507 | "notification-url": "https://packagist.org/downloads/", 1508 | "license": [ 1509 | "BSD-3-Clause" 1510 | ], 1511 | "authors": [ 1512 | { 1513 | "name": "Sebastian Bergmann", 1514 | "email": "sebastian@phpunit.de" 1515 | } 1516 | ], 1517 | "description": "Snapshotting of global state", 1518 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1519 | "keywords": [ 1520 | "global state" 1521 | ], 1522 | "support": { 1523 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 1524 | "source": "https://github.com/sebastianbergmann/global-state/tree/master" 1525 | }, 1526 | "funding": [ 1527 | { 1528 | "url": "https://github.com/sebastianbergmann", 1529 | "type": "github" 1530 | } 1531 | ], 1532 | "time": "2021-03-10T06:28:46+00:00" 1533 | }, 1534 | { 1535 | "name": "sebastian/lines-of-code", 1536 | "version": "1.0.3", 1537 | "source": { 1538 | "type": "git", 1539 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 1540 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" 1541 | }, 1542 | "dist": { 1543 | "type": "zip", 1544 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", 1545 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", 1546 | "shasum": "" 1547 | }, 1548 | "require": { 1549 | "nikic/php-parser": "^4.6", 1550 | "php": ">=7.3" 1551 | }, 1552 | "require-dev": { 1553 | "phpunit/phpunit": "^9.3" 1554 | }, 1555 | "type": "library", 1556 | "extra": { 1557 | "branch-alias": { 1558 | "dev-master": "1.0-dev" 1559 | } 1560 | }, 1561 | "autoload": { 1562 | "classmap": [ 1563 | "src/" 1564 | ] 1565 | }, 1566 | "notification-url": "https://packagist.org/downloads/", 1567 | "license": [ 1568 | "BSD-3-Clause" 1569 | ], 1570 | "authors": [ 1571 | { 1572 | "name": "Sebastian Bergmann", 1573 | "email": "sebastian@phpunit.de", 1574 | "role": "lead" 1575 | } 1576 | ], 1577 | "description": "Library for counting the lines of code in PHP source code", 1578 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 1579 | "support": { 1580 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", 1581 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" 1582 | }, 1583 | "funding": [ 1584 | { 1585 | "url": "https://github.com/sebastianbergmann", 1586 | "type": "github" 1587 | } 1588 | ], 1589 | "time": "2020-11-28T06:42:11+00:00" 1590 | }, 1591 | { 1592 | "name": "sebastian/object-enumerator", 1593 | "version": "dev-master", 1594 | "source": { 1595 | "type": "git", 1596 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1597 | "reference": "b218fb1d63287edb7613b61122890f39e82ae8c2" 1598 | }, 1599 | "dist": { 1600 | "type": "zip", 1601 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/b218fb1d63287edb7613b61122890f39e82ae8c2", 1602 | "reference": "b218fb1d63287edb7613b61122890f39e82ae8c2", 1603 | "shasum": "" 1604 | }, 1605 | "require": { 1606 | "php": ">=7.3", 1607 | "sebastian/object-reflector": "^2.0", 1608 | "sebastian/recursion-context": "^4.0" 1609 | }, 1610 | "require-dev": { 1611 | "phpunit/phpunit": "^9.3" 1612 | }, 1613 | "default-branch": true, 1614 | "type": "library", 1615 | "extra": { 1616 | "branch-alias": { 1617 | "dev-master": "4.0-dev" 1618 | } 1619 | }, 1620 | "autoload": { 1621 | "classmap": [ 1622 | "src/" 1623 | ] 1624 | }, 1625 | "notification-url": "https://packagist.org/downloads/", 1626 | "license": [ 1627 | "BSD-3-Clause" 1628 | ], 1629 | "authors": [ 1630 | { 1631 | "name": "Sebastian Bergmann", 1632 | "email": "sebastian@phpunit.de" 1633 | } 1634 | ], 1635 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1636 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1637 | "support": { 1638 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 1639 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/master" 1640 | }, 1641 | "funding": [ 1642 | { 1643 | "url": "https://github.com/sebastianbergmann", 1644 | "type": "github" 1645 | } 1646 | ], 1647 | "time": "2021-03-10T06:28:54+00:00" 1648 | }, 1649 | { 1650 | "name": "sebastian/object-reflector", 1651 | "version": "dev-master", 1652 | "source": { 1653 | "type": "git", 1654 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1655 | "reference": "cbf30bc9ed44451f5301480f668cd4fcf6bb225a" 1656 | }, 1657 | "dist": { 1658 | "type": "zip", 1659 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/cbf30bc9ed44451f5301480f668cd4fcf6bb225a", 1660 | "reference": "cbf30bc9ed44451f5301480f668cd4fcf6bb225a", 1661 | "shasum": "" 1662 | }, 1663 | "require": { 1664 | "php": ">=7.3" 1665 | }, 1666 | "require-dev": { 1667 | "phpunit/phpunit": "^9.3" 1668 | }, 1669 | "default-branch": true, 1670 | "type": "library", 1671 | "extra": { 1672 | "branch-alias": { 1673 | "dev-master": "2.0-dev" 1674 | } 1675 | }, 1676 | "autoload": { 1677 | "classmap": [ 1678 | "src/" 1679 | ] 1680 | }, 1681 | "notification-url": "https://packagist.org/downloads/", 1682 | "license": [ 1683 | "BSD-3-Clause" 1684 | ], 1685 | "authors": [ 1686 | { 1687 | "name": "Sebastian Bergmann", 1688 | "email": "sebastian@phpunit.de" 1689 | } 1690 | ], 1691 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1692 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1693 | "support": { 1694 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 1695 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/master" 1696 | }, 1697 | "funding": [ 1698 | { 1699 | "url": "https://github.com/sebastianbergmann", 1700 | "type": "github" 1701 | } 1702 | ], 1703 | "time": "2021-03-10T06:29:02+00:00" 1704 | }, 1705 | { 1706 | "name": "sebastian/recursion-context", 1707 | "version": "dev-master", 1708 | "source": { 1709 | "type": "git", 1710 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1711 | "reference": "c3333538e25ec932d0cbdce77b6ac846757b809d" 1712 | }, 1713 | "dist": { 1714 | "type": "zip", 1715 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/c3333538e25ec932d0cbdce77b6ac846757b809d", 1716 | "reference": "c3333538e25ec932d0cbdce77b6ac846757b809d", 1717 | "shasum": "" 1718 | }, 1719 | "require": { 1720 | "php": ">=7.3" 1721 | }, 1722 | "require-dev": { 1723 | "phpunit/phpunit": "^9.3" 1724 | }, 1725 | "default-branch": true, 1726 | "type": "library", 1727 | "extra": { 1728 | "branch-alias": { 1729 | "dev-master": "4.0-dev" 1730 | } 1731 | }, 1732 | "autoload": { 1733 | "classmap": [ 1734 | "src/" 1735 | ] 1736 | }, 1737 | "notification-url": "https://packagist.org/downloads/", 1738 | "license": [ 1739 | "BSD-3-Clause" 1740 | ], 1741 | "authors": [ 1742 | { 1743 | "name": "Sebastian Bergmann", 1744 | "email": "sebastian@phpunit.de" 1745 | }, 1746 | { 1747 | "name": "Jeff Welch", 1748 | "email": "whatthejeff@gmail.com" 1749 | }, 1750 | { 1751 | "name": "Adam Harvey", 1752 | "email": "aharvey@php.net" 1753 | } 1754 | ], 1755 | "description": "Provides functionality to recursively process PHP variables", 1756 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1757 | "support": { 1758 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 1759 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/master" 1760 | }, 1761 | "funding": [ 1762 | { 1763 | "url": "https://github.com/sebastianbergmann", 1764 | "type": "github" 1765 | } 1766 | ], 1767 | "time": "2021-03-10T06:29:33+00:00" 1768 | }, 1769 | { 1770 | "name": "sebastian/resource-operations", 1771 | "version": "dev-master", 1772 | "source": { 1773 | "type": "git", 1774 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1775 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" 1776 | }, 1777 | "dist": { 1778 | "type": "zip", 1779 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 1780 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 1781 | "shasum": "" 1782 | }, 1783 | "require": { 1784 | "php": ">=7.3" 1785 | }, 1786 | "require-dev": { 1787 | "phpunit/phpunit": "^9.0" 1788 | }, 1789 | "default-branch": true, 1790 | "type": "library", 1791 | "extra": { 1792 | "branch-alias": { 1793 | "dev-master": "3.0-dev" 1794 | } 1795 | }, 1796 | "autoload": { 1797 | "classmap": [ 1798 | "src/" 1799 | ] 1800 | }, 1801 | "notification-url": "https://packagist.org/downloads/", 1802 | "license": [ 1803 | "BSD-3-Clause" 1804 | ], 1805 | "authors": [ 1806 | { 1807 | "name": "Sebastian Bergmann", 1808 | "email": "sebastian@phpunit.de" 1809 | } 1810 | ], 1811 | "description": "Provides a list of PHP built-in functions that operate on resources", 1812 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1813 | "support": { 1814 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues", 1815 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" 1816 | }, 1817 | "funding": [ 1818 | { 1819 | "url": "https://github.com/sebastianbergmann", 1820 | "type": "github" 1821 | } 1822 | ], 1823 | "time": "2020-09-28T06:45:17+00:00" 1824 | }, 1825 | { 1826 | "name": "sebastian/type", 1827 | "version": "dev-master", 1828 | "source": { 1829 | "type": "git", 1830 | "url": "https://github.com/sebastianbergmann/type.git", 1831 | "reference": "1bba184dccb563769fab9bd69c623c1a353dec98" 1832 | }, 1833 | "dist": { 1834 | "type": "zip", 1835 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/1bba184dccb563769fab9bd69c623c1a353dec98", 1836 | "reference": "1bba184dccb563769fab9bd69c623c1a353dec98", 1837 | "shasum": "" 1838 | }, 1839 | "require": { 1840 | "php": ">=7.3" 1841 | }, 1842 | "require-dev": { 1843 | "phpunit/phpunit": "^9.3" 1844 | }, 1845 | "default-branch": true, 1846 | "type": "library", 1847 | "extra": { 1848 | "branch-alias": { 1849 | "dev-master": "2.3-dev" 1850 | } 1851 | }, 1852 | "autoload": { 1853 | "classmap": [ 1854 | "src/" 1855 | ] 1856 | }, 1857 | "notification-url": "https://packagist.org/downloads/", 1858 | "license": [ 1859 | "BSD-3-Clause" 1860 | ], 1861 | "authors": [ 1862 | { 1863 | "name": "Sebastian Bergmann", 1864 | "email": "sebastian@phpunit.de", 1865 | "role": "lead" 1866 | } 1867 | ], 1868 | "description": "Collection of value objects that represent the types of the PHP type system", 1869 | "homepage": "https://github.com/sebastianbergmann/type", 1870 | "support": { 1871 | "issues": "https://github.com/sebastianbergmann/type/issues", 1872 | "source": "https://github.com/sebastianbergmann/type/tree/master" 1873 | }, 1874 | "funding": [ 1875 | { 1876 | "url": "https://github.com/sebastianbergmann", 1877 | "type": "github" 1878 | } 1879 | ], 1880 | "time": "2021-03-10T06:29:41+00:00" 1881 | }, 1882 | { 1883 | "name": "sebastian/version", 1884 | "version": "3.0.2", 1885 | "source": { 1886 | "type": "git", 1887 | "url": "https://github.com/sebastianbergmann/version.git", 1888 | "reference": "c6c1022351a901512170118436c764e473f6de8c" 1889 | }, 1890 | "dist": { 1891 | "type": "zip", 1892 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", 1893 | "reference": "c6c1022351a901512170118436c764e473f6de8c", 1894 | "shasum": "" 1895 | }, 1896 | "require": { 1897 | "php": ">=7.3" 1898 | }, 1899 | "type": "library", 1900 | "extra": { 1901 | "branch-alias": { 1902 | "dev-master": "3.0-dev" 1903 | } 1904 | }, 1905 | "autoload": { 1906 | "classmap": [ 1907 | "src/" 1908 | ] 1909 | }, 1910 | "notification-url": "https://packagist.org/downloads/", 1911 | "license": [ 1912 | "BSD-3-Clause" 1913 | ], 1914 | "authors": [ 1915 | { 1916 | "name": "Sebastian Bergmann", 1917 | "email": "sebastian@phpunit.de", 1918 | "role": "lead" 1919 | } 1920 | ], 1921 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1922 | "homepage": "https://github.com/sebastianbergmann/version", 1923 | "support": { 1924 | "issues": "https://github.com/sebastianbergmann/version/issues", 1925 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" 1926 | }, 1927 | "funding": [ 1928 | { 1929 | "url": "https://github.com/sebastianbergmann", 1930 | "type": "github" 1931 | } 1932 | ], 1933 | "time": "2020-09-28T06:39:44+00:00" 1934 | }, 1935 | { 1936 | "name": "symfony/polyfill-ctype", 1937 | "version": "dev-main", 1938 | "source": { 1939 | "type": "git", 1940 | "url": "https://github.com/symfony/polyfill-ctype.git", 1941 | "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" 1942 | }, 1943 | "dist": { 1944 | "type": "zip", 1945 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", 1946 | "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", 1947 | "shasum": "" 1948 | }, 1949 | "require": { 1950 | "php": ">=7.1" 1951 | }, 1952 | "suggest": { 1953 | "ext-ctype": "For best performance" 1954 | }, 1955 | "default-branch": true, 1956 | "type": "library", 1957 | "extra": { 1958 | "branch-alias": { 1959 | "dev-main": "1.22-dev" 1960 | }, 1961 | "thanks": { 1962 | "name": "symfony/polyfill", 1963 | "url": "https://github.com/symfony/polyfill" 1964 | } 1965 | }, 1966 | "autoload": { 1967 | "psr-4": { 1968 | "Symfony\\Polyfill\\Ctype\\": "" 1969 | }, 1970 | "files": [ 1971 | "bootstrap.php" 1972 | ] 1973 | }, 1974 | "notification-url": "https://packagist.org/downloads/", 1975 | "license": [ 1976 | "MIT" 1977 | ], 1978 | "authors": [ 1979 | { 1980 | "name": "Gert de Pagter", 1981 | "email": "BackEndTea@gmail.com" 1982 | }, 1983 | { 1984 | "name": "Symfony Community", 1985 | "homepage": "https://symfony.com/contributors" 1986 | } 1987 | ], 1988 | "description": "Symfony polyfill for ctype functions", 1989 | "homepage": "https://symfony.com", 1990 | "keywords": [ 1991 | "compatibility", 1992 | "ctype", 1993 | "polyfill", 1994 | "portable" 1995 | ], 1996 | "support": { 1997 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" 1998 | }, 1999 | "funding": [ 2000 | { 2001 | "url": "https://symfony.com/sponsor", 2002 | "type": "custom" 2003 | }, 2004 | { 2005 | "url": "https://github.com/fabpot", 2006 | "type": "github" 2007 | }, 2008 | { 2009 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2010 | "type": "tidelift" 2011 | } 2012 | ], 2013 | "time": "2021-01-07T16:49:33+00:00" 2014 | }, 2015 | { 2016 | "name": "theseer/tokenizer", 2017 | "version": "1.2.0", 2018 | "source": { 2019 | "type": "git", 2020 | "url": "https://github.com/theseer/tokenizer.git", 2021 | "reference": "75a63c33a8577608444246075ea0af0d052e452a" 2022 | }, 2023 | "dist": { 2024 | "type": "zip", 2025 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", 2026 | "reference": "75a63c33a8577608444246075ea0af0d052e452a", 2027 | "shasum": "" 2028 | }, 2029 | "require": { 2030 | "ext-dom": "*", 2031 | "ext-tokenizer": "*", 2032 | "ext-xmlwriter": "*", 2033 | "php": "^7.2 || ^8.0" 2034 | }, 2035 | "type": "library", 2036 | "autoload": { 2037 | "classmap": [ 2038 | "src/" 2039 | ] 2040 | }, 2041 | "notification-url": "https://packagist.org/downloads/", 2042 | "license": [ 2043 | "BSD-3-Clause" 2044 | ], 2045 | "authors": [ 2046 | { 2047 | "name": "Arne Blankerts", 2048 | "email": "arne@blankerts.de", 2049 | "role": "Developer" 2050 | } 2051 | ], 2052 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 2053 | "support": { 2054 | "issues": "https://github.com/theseer/tokenizer/issues", 2055 | "source": "https://github.com/theseer/tokenizer/tree/master" 2056 | }, 2057 | "funding": [ 2058 | { 2059 | "url": "https://github.com/theseer", 2060 | "type": "github" 2061 | } 2062 | ], 2063 | "time": "2020-07-12T23:59:07+00:00" 2064 | }, 2065 | { 2066 | "name": "webmozart/assert", 2067 | "version": "dev-master", 2068 | "source": { 2069 | "type": "git", 2070 | "url": "https://github.com/webmozarts/assert.git", 2071 | "reference": "f07851c5b43e4cb502c24068620e9af6cbdd953f" 2072 | }, 2073 | "dist": { 2074 | "type": "zip", 2075 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/f07851c5b43e4cb502c24068620e9af6cbdd953f", 2076 | "reference": "f07851c5b43e4cb502c24068620e9af6cbdd953f", 2077 | "shasum": "" 2078 | }, 2079 | "require": { 2080 | "php": "^7.2 || ^8.0", 2081 | "symfony/polyfill-ctype": "^1.8" 2082 | }, 2083 | "conflict": { 2084 | "phpstan/phpstan": "<0.12.20", 2085 | "vimeo/psalm": "<4.6.1 || 4.6.2" 2086 | }, 2087 | "require-dev": { 2088 | "phpunit/phpunit": "^8.5.13" 2089 | }, 2090 | "default-branch": true, 2091 | "type": "library", 2092 | "extra": { 2093 | "branch-alias": { 2094 | "dev-master": "1.10-dev" 2095 | } 2096 | }, 2097 | "autoload": { 2098 | "psr-4": { 2099 | "Webmozart\\Assert\\": "src/" 2100 | } 2101 | }, 2102 | "notification-url": "https://packagist.org/downloads/", 2103 | "license": [ 2104 | "MIT" 2105 | ], 2106 | "authors": [ 2107 | { 2108 | "name": "Bernhard Schussek", 2109 | "email": "bschussek@gmail.com" 2110 | } 2111 | ], 2112 | "description": "Assertions to validate method input/output with nice error messages.", 2113 | "keywords": [ 2114 | "assert", 2115 | "check", 2116 | "validate" 2117 | ], 2118 | "support": { 2119 | "issues": "https://github.com/webmozarts/assert/issues", 2120 | "source": "https://github.com/webmozarts/assert/tree/master" 2121 | }, 2122 | "time": "2021-03-11T07:08:13+00:00" 2123 | } 2124 | ], 2125 | "aliases": [], 2126 | "minimum-stability": "dev", 2127 | "stability-flags": [], 2128 | "prefer-stable": false, 2129 | "prefer-lowest": false, 2130 | "platform": [], 2131 | "platform-dev": [], 2132 | "plugin-api-version": "2.0.0" 2133 | } 2134 | -------------------------------------------------------------------------------- /config.php: -------------------------------------------------------------------------------- 1 | [ 10 | 'name' => '', // db name 11 | 'username' => '', // db user 12 | 'password' => '', // db password 13 | 'connection' => 'mysql:host=127.0.0.1', // PDO dsn 14 | 'options' => [ 15 | PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION // error mode 16 | ] 17 | ] 18 | ]; -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | direct(Request::uri(), Request::method()); 9 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | tests/ 6 | 7 | 8 | -------------------------------------------------------------------------------- /public/css/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color: #FFF; 3 | } 4 | h1 { 5 | color: #28a745; 6 | } 7 | -------------------------------------------------------------------------------- /resources/views/404.view.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 |

Error 404

6 |

Page not found

7 |
8 |
9 |
10 | -------------------------------------------------------------------------------- /resources/views/index.view.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 |

Welcome to home page

6 |

Add anything here... do whatever you can

7 |
8 |
9 |
10 | 11 | -------------------------------------------------------------------------------- /resources/views/partials/footer.view.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /resources/views/partials/header.view.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <?= $data['title'] ? $data['title'] : 'No title'; ?> 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/SimpleMVC/App.php: -------------------------------------------------------------------------------- 1 | registry array 37 | */ 38 | 39 | public static function get($key) 40 | { 41 | if(! array_key_exists($key, static::$registry)){ 42 | throw new KeyNotFoundException('No {$key} found in the registry'); 43 | } 44 | return static::$registry[$key]; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/SimpleMVC/Database/Connection.php: -------------------------------------------------------------------------------- 1 | getMessage()); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/SimpleMVC/Exceptions/KeyNotFoundException.php: -------------------------------------------------------------------------------- 1 | [], 20 | 'POST' => [] 21 | ]; 22 | 23 | /** 24 | * load - loads routes file 25 | * 26 | * @param resource $file [$file the routes file] 27 | * 28 | * @return resource returns a file that contains all the routes 29 | */ 30 | 31 | public static function load($file) 32 | { 33 | $router = new static; 34 | 35 | require $file; 36 | 37 | return $router; 38 | } 39 | 40 | /** 41 | * get - adds routes of type get to $this->routes GET array 42 | * 43 | * @param string $uri url path 44 | * @param string $controller the correspondent controller and method 45 | * 46 | * @return void 47 | */ 48 | 49 | public function get($uri, $controller) 50 | { 51 | $this->routes['GET'][$uri] = $controller; 52 | } 53 | 54 | /** 55 | * post - adds routes of type get to $this->routes POST array 56 | * 57 | * @param string $uri url path 58 | * @param string $controller the correspondent controller and method 59 | * 60 | * @return void 61 | */ 62 | 63 | public function post($uri, $controller) 64 | { 65 | $this->routes['POST'][$uri] = $controller; 66 | } 67 | 68 | /** 69 | * direct - 70 | * 71 | * @param string $uri the requested url path 72 | * @param string $requestType the request type 73 | * 74 | * @return method calls a method 75 | */ 76 | public function direct($uri, $requestType) 77 | { 78 | if (array_key_exists($uri, $this->routes[$requestType])) { 79 | return $this->callAction( 80 | ...explode('@', $this->routes[$requestType][$uri]) 81 | ); 82 | } 83 | http_response_code(404); 84 | return view('404'); 85 | } 86 | 87 | 88 | /** 89 | * callAction - calls the needed method in the targeted controller 90 | * 91 | * @param string $controller the controller to go to 92 | * @param string $method the method to call 93 | * 94 | * @return method calls the correspondent controller method 95 | */ 96 | 97 | protected function callAction($controller, $method) 98 | { 99 | $controller = App::get('controllers-path') . "{$controller}"; 100 | $controller = new $controller; 101 | 102 | if (!method_exists($controller, $method)) { 103 | http_response_code(404); 104 | return view('404'); 105 | } 106 | return $controller->$method(); 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/SimpleMVC/bootstrap.php: -------------------------------------------------------------------------------- 1 | assertEquals(App::get("key"), "value"); 19 | } 20 | /** 21 | * @test 22 | * test a value that does not exist in the dependency injection container 23 | */ 24 | public function testKeyNotFound() 25 | { 26 | $this->expectException(\Celyes\SimpleMVC\Exceptions\KeyNotFoundException::class); 27 | App::get("keyThatDoesNotExists", "ValueThatDoesNotExist"); 28 | } 29 | } 30 | --------------------------------------------------------------------------------