├── .editorconfig ├── .gitignore ├── .php-cs-fixer.php ├── LICENCE.md ├── Makefile ├── README.md ├── composer.json ├── composer.lock ├── docker-compose.yml ├── docker ├── nginx │ ├── Dockerfile │ └── conf.d │ │ └── default.conf ├── php-cli │ └── Dockerfile └── php-fpm │ └── Dockerfile ├── phpunit.xml ├── psalm.xml ├── public └── index.php ├── src ├── App │ └── detectLang.php └── Framework │ └── .gitkeep ├── tests ├── App │ └── DetectLangTest.php └── Framework │ └── .gitkeep └── var └── .gitignore /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.php] 13 | tab_width = 4 14 | indent_size = 4 15 | 16 | [*.html] 17 | tab_width = 4 18 | indent_size = 4 19 | 20 | [*.xml] 21 | tab_width = 4 22 | indent_size = 4 23 | 24 | [*.json] 25 | tab_width = 4 26 | indent_size = 4 27 | 28 | [*.yml] 29 | tab_width = 4 30 | indent_size = 4 31 | 32 | [Makefile] 33 | indent_style = tab 34 | tab_width = 4 35 | indent_size = 4 36 | 37 | [*.md] 38 | trim_trailing_whitespace = false 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor/ 2 | -------------------------------------------------------------------------------- /.php-cs-fixer.php: -------------------------------------------------------------------------------- 1 | setCacheFile(__DIR__ . '/var/php_cs.cache') 8 | ->setFinder( 9 | PhpCsFixer\Finder::create() 10 | ->in([ 11 | __DIR__ . '/public', 12 | __DIR__ . '/src', 13 | __DIR__ . '/tests', 14 | ]) 15 | ->append([ 16 | __FILE__, 17 | ]) 18 | ) 19 | ->setRules([ 20 | '@PER' => true, 21 | '@PER:risky' => true, 22 | '@PHP81Migration' => true, 23 | '@PHP80Migration:risky' => true, 24 | '@PHPUnit84Migration:risky' => true, 25 | 26 | 'no_unused_imports' => true, 27 | 'ordered_imports' => ['imports_order' => ['class', 'function', 'const']], 28 | 29 | 'no_superfluous_phpdoc_tags' => ['remove_inheritdoc' => true], 30 | 31 | 'phpdoc_types_order' => ['null_adjustment' => 'always_last'], 32 | 33 | 'strict_comparison' => true, 34 | 'strict_param' => true, 35 | 36 | 'binary_operator_spaces' => true, 37 | 38 | 'multiline_whitespace_before_semicolons' => ['strategy' => 'no_multi_line'], 39 | 40 | 'no_superfluous_elseif' => true, 41 | 'no_useless_else' => true, 42 | 'no_useless_return' => true, 43 | 44 | 'php_unit_internal_class' => true, 45 | 'php_unit_construct' => true, 46 | 'php_unit_fqcn_annotation' => true, 47 | 'php_unit_set_up_tear_down_visibility' => true, 48 | 'php_unit_test_case_static_method_calls' => ['call_type' => 'self'], 49 | 50 | 'final_class' => true, 51 | 'final_public_method_for_abstract_class' => true, 52 | 'self_static_accessor' => true, 53 | 54 | 'static_lambda' => true, 55 | 56 | 'global_namespace_import' => true, 57 | ]); 58 | -------------------------------------------------------------------------------- /LICENCE.md: -------------------------------------------------------------------------------- 1 | # BSD 3-Clause License 2 | 3 | Copyright (c) 2021, DeworkerPro. All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of the copyright holder nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | init: docker-down-clear docker-pull docker-build-pull docker-up app-init 2 | down: docker-down-clear 3 | check: lint analyze test 4 | 5 | docker-up: 6 | docker-compose up -d 7 | 8 | docker-down-clear: 9 | docker-compose down -v --remove-orphans 10 | 11 | docker-pull: 12 | docker-compose pull 13 | 14 | docker-build-pull: 15 | docker-compose build --pull 16 | 17 | app-init: composer-install 18 | 19 | composer-install: 20 | docker-compose run --rm php-cli composer install 21 | 22 | composer-update: 23 | docker-compose run --rm php-cli composer update 24 | 25 | lint: 26 | docker-compose run --rm php-cli composer php-cs-fixer fix -- --dry-run --diff 27 | 28 | cs-fix: 29 | docker-compose run --rm php-cli composer php-cs-fixer fix 30 | 31 | analyze: 32 | docker-compose run --rm php-cli composer psalm -- --no-diff 33 | 34 | test: 35 | docker-compose run --rm php-cli composer test 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Demo PHP HTTP Framework 2 | 3 | Source code for https://deworker.pro/edu/series/http-framework 4 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deworkerpro/demo-php-http-framework", 3 | "description": "Source code for our workshop", 4 | "type": "project", 5 | "license": "BSD-3-Clause", 6 | "config": { 7 | "sort-packages": true 8 | }, 9 | "require": { 10 | "php": "^8.1", 11 | "laminas/laminas-diactoros": "^2.24", 12 | "laminas/laminas-httphandlerrunner": "^2.5", 13 | "psr/http-factory": "^1.0", 14 | "psr/http-message": "^1.0" 15 | }, 16 | "require-dev": { 17 | "friendsofphp/php-cs-fixer": "^3.8", 18 | "phpunit/phpunit": "^9.5", 19 | "psalm/plugin-phpunit": "^0.18.4", 20 | "vimeo/psalm": "^5.4" 21 | }, 22 | "autoload": { 23 | "files": [ 24 | "src/App/detectLang.php" 25 | ], 26 | "psr-4": { 27 | "App\\": "src/App/", 28 | "Framework\\": "src/Framework/" 29 | } 30 | }, 31 | "autoload-dev": { 32 | "psr-4": { 33 | "Test\\App\\": "tests/App/", 34 | "Test\\Framework\\": "tests/Framework/" 35 | } 36 | }, 37 | "scripts": { 38 | "php-cs-fixer": "php-cs-fixer --config=.php-cs-fixer.php --allow-risky=yes", 39 | "psalm": "psalm --config=psalm.xml", 40 | "test": "phpunit --colors=always" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /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": "6a682c0b3fa181c4218759a6f11fab91", 8 | "packages": [ 9 | { 10 | "name": "laminas/laminas-diactoros", 11 | "version": "2.24.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/laminas/laminas-diactoros.git", 15 | "reference": "6028af6c3b5ced4d063a680d2483cce67578b902" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6028af6c3b5ced4d063a680d2483cce67578b902", 20 | "reference": "6028af6c3b5ced4d063a680d2483cce67578b902", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "~8.0.0 || ~8.1.0 || ~8.2.0", 25 | "psr/http-factory": "^1.0", 26 | "psr/http-message": "^1.0" 27 | }, 28 | "conflict": { 29 | "zendframework/zend-diactoros": "*" 30 | }, 31 | "provide": { 32 | "psr/http-factory-implementation": "1.0", 33 | "psr/http-message-implementation": "1.0" 34 | }, 35 | "require-dev": { 36 | "ext-curl": "*", 37 | "ext-dom": "*", 38 | "ext-gd": "*", 39 | "ext-libxml": "*", 40 | "http-interop/http-factory-tests": "^0.9.0", 41 | "laminas/laminas-coding-standard": "^2.4.0", 42 | "php-http/psr7-integration-tests": "^1.2", 43 | "phpunit/phpunit": "^9.5.27", 44 | "psalm/plugin-phpunit": "^0.18.4", 45 | "vimeo/psalm": "^5.4" 46 | }, 47 | "type": "library", 48 | "extra": { 49 | "laminas": { 50 | "config-provider": "Laminas\\Diactoros\\ConfigProvider", 51 | "module": "Laminas\\Diactoros" 52 | } 53 | }, 54 | "autoload": { 55 | "files": [ 56 | "src/functions/create_uploaded_file.php", 57 | "src/functions/marshal_headers_from_sapi.php", 58 | "src/functions/marshal_method_from_sapi.php", 59 | "src/functions/marshal_protocol_version_from_sapi.php", 60 | "src/functions/marshal_uri_from_sapi.php", 61 | "src/functions/normalize_server.php", 62 | "src/functions/normalize_uploaded_files.php", 63 | "src/functions/parse_cookie_header.php", 64 | "src/functions/create_uploaded_file.legacy.php", 65 | "src/functions/marshal_headers_from_sapi.legacy.php", 66 | "src/functions/marshal_method_from_sapi.legacy.php", 67 | "src/functions/marshal_protocol_version_from_sapi.legacy.php", 68 | "src/functions/marshal_uri_from_sapi.legacy.php", 69 | "src/functions/normalize_server.legacy.php", 70 | "src/functions/normalize_uploaded_files.legacy.php", 71 | "src/functions/parse_cookie_header.legacy.php" 72 | ], 73 | "psr-4": { 74 | "Laminas\\Diactoros\\": "src/" 75 | } 76 | }, 77 | "notification-url": "https://packagist.org/downloads/", 78 | "license": [ 79 | "BSD-3-Clause" 80 | ], 81 | "description": "PSR HTTP Message implementations", 82 | "homepage": "https://laminas.dev", 83 | "keywords": [ 84 | "http", 85 | "laminas", 86 | "psr", 87 | "psr-17", 88 | "psr-7" 89 | ], 90 | "support": { 91 | "chat": "https://laminas.dev/chat", 92 | "docs": "https://docs.laminas.dev/laminas-diactoros/", 93 | "forum": "https://discourse.laminas.dev", 94 | "issues": "https://github.com/laminas/laminas-diactoros/issues", 95 | "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", 96 | "source": "https://github.com/laminas/laminas-diactoros" 97 | }, 98 | "funding": [ 99 | { 100 | "url": "https://funding.communitybridge.org/projects/laminas-project", 101 | "type": "community_bridge" 102 | } 103 | ], 104 | "time": "2022-12-20T12:22:40+00:00" 105 | }, 106 | { 107 | "name": "laminas/laminas-httphandlerrunner", 108 | "version": "2.5.0", 109 | "source": { 110 | "type": "git", 111 | "url": "https://github.com/laminas/laminas-httphandlerrunner.git", 112 | "reference": "7a47834aaad7852816d2ec4fdbb0492163b039ae" 113 | }, 114 | "dist": { 115 | "type": "zip", 116 | "url": "https://api.github.com/repos/laminas/laminas-httphandlerrunner/zipball/7a47834aaad7852816d2ec4fdbb0492163b039ae", 117 | "reference": "7a47834aaad7852816d2ec4fdbb0492163b039ae", 118 | "shasum": "" 119 | }, 120 | "require": { 121 | "php": "~8.0.0 || ~8.1.0 || ~8.2.0", 122 | "psr/http-message": "^1.0", 123 | "psr/http-message-implementation": "^1.0", 124 | "psr/http-server-handler": "^1.0" 125 | }, 126 | "require-dev": { 127 | "laminas/laminas-coding-standard": "~2.4.0", 128 | "laminas/laminas-diactoros": "^2.18", 129 | "phpunit/phpunit": "^9.5.26", 130 | "psalm/plugin-phpunit": "^0.18.0", 131 | "vimeo/psalm": "^5.0.0" 132 | }, 133 | "type": "library", 134 | "extra": { 135 | "laminas": { 136 | "config-provider": "Laminas\\HttpHandlerRunner\\ConfigProvider" 137 | } 138 | }, 139 | "autoload": { 140 | "psr-4": { 141 | "Laminas\\HttpHandlerRunner\\": "src/" 142 | } 143 | }, 144 | "notification-url": "https://packagist.org/downloads/", 145 | "license": [ 146 | "BSD-3-Clause" 147 | ], 148 | "description": "Execute PSR-15 RequestHandlerInterface instances and emit responses they generate.", 149 | "homepage": "https://laminas.dev", 150 | "keywords": [ 151 | "components", 152 | "laminas", 153 | "mezzio", 154 | "psr-15", 155 | "psr-7" 156 | ], 157 | "support": { 158 | "chat": "https://laminas.dev/chat", 159 | "docs": "https://docs.laminas.dev/laminas-httphandlerrunner/", 160 | "forum": "https://discourse.laminas.dev", 161 | "issues": "https://github.com/laminas/laminas-httphandlerrunner/issues", 162 | "rss": "https://github.com/laminas/laminas-httphandlerrunner/releases.atom", 163 | "source": "https://github.com/laminas/laminas-httphandlerrunner" 164 | }, 165 | "funding": [ 166 | { 167 | "url": "https://funding.communitybridge.org/projects/laminas-project", 168 | "type": "community_bridge" 169 | } 170 | ], 171 | "time": "2023-01-05T21:54:03+00:00" 172 | }, 173 | { 174 | "name": "psr/http-factory", 175 | "version": "1.0.1", 176 | "source": { 177 | "type": "git", 178 | "url": "https://github.com/php-fig/http-factory.git", 179 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" 180 | }, 181 | "dist": { 182 | "type": "zip", 183 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", 184 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", 185 | "shasum": "" 186 | }, 187 | "require": { 188 | "php": ">=7.0.0", 189 | "psr/http-message": "^1.0" 190 | }, 191 | "type": "library", 192 | "extra": { 193 | "branch-alias": { 194 | "dev-master": "1.0.x-dev" 195 | } 196 | }, 197 | "autoload": { 198 | "psr-4": { 199 | "Psr\\Http\\Message\\": "src/" 200 | } 201 | }, 202 | "notification-url": "https://packagist.org/downloads/", 203 | "license": [ 204 | "MIT" 205 | ], 206 | "authors": [ 207 | { 208 | "name": "PHP-FIG", 209 | "homepage": "http://www.php-fig.org/" 210 | } 211 | ], 212 | "description": "Common interfaces for PSR-7 HTTP message factories", 213 | "keywords": [ 214 | "factory", 215 | "http", 216 | "message", 217 | "psr", 218 | "psr-17", 219 | "psr-7", 220 | "request", 221 | "response" 222 | ], 223 | "support": { 224 | "source": "https://github.com/php-fig/http-factory/tree/master" 225 | }, 226 | "time": "2019-04-30T12:38:16+00:00" 227 | }, 228 | { 229 | "name": "psr/http-message", 230 | "version": "1.0.1", 231 | "source": { 232 | "type": "git", 233 | "url": "https://github.com/php-fig/http-message.git", 234 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 235 | }, 236 | "dist": { 237 | "type": "zip", 238 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 239 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 240 | "shasum": "" 241 | }, 242 | "require": { 243 | "php": ">=5.3.0" 244 | }, 245 | "type": "library", 246 | "extra": { 247 | "branch-alias": { 248 | "dev-master": "1.0.x-dev" 249 | } 250 | }, 251 | "autoload": { 252 | "psr-4": { 253 | "Psr\\Http\\Message\\": "src/" 254 | } 255 | }, 256 | "notification-url": "https://packagist.org/downloads/", 257 | "license": [ 258 | "MIT" 259 | ], 260 | "authors": [ 261 | { 262 | "name": "PHP-FIG", 263 | "homepage": "http://www.php-fig.org/" 264 | } 265 | ], 266 | "description": "Common interface for HTTP messages", 267 | "homepage": "https://github.com/php-fig/http-message", 268 | "keywords": [ 269 | "http", 270 | "http-message", 271 | "psr", 272 | "psr-7", 273 | "request", 274 | "response" 275 | ], 276 | "support": { 277 | "source": "https://github.com/php-fig/http-message/tree/master" 278 | }, 279 | "time": "2016-08-06T14:39:51+00:00" 280 | }, 281 | { 282 | "name": "psr/http-server-handler", 283 | "version": "1.0.1", 284 | "source": { 285 | "type": "git", 286 | "url": "https://github.com/php-fig/http-server-handler.git", 287 | "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7" 288 | }, 289 | "dist": { 290 | "type": "zip", 291 | "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7", 292 | "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7", 293 | "shasum": "" 294 | }, 295 | "require": { 296 | "php": ">=7.0", 297 | "psr/http-message": "^1.0" 298 | }, 299 | "type": "library", 300 | "extra": { 301 | "branch-alias": { 302 | "dev-master": "1.0.x-dev" 303 | } 304 | }, 305 | "autoload": { 306 | "psr-4": { 307 | "Psr\\Http\\Server\\": "src/" 308 | } 309 | }, 310 | "notification-url": "https://packagist.org/downloads/", 311 | "license": [ 312 | "MIT" 313 | ], 314 | "authors": [ 315 | { 316 | "name": "PHP-FIG", 317 | "homepage": "http://www.php-fig.org/" 318 | } 319 | ], 320 | "description": "Common interface for HTTP server-side request handler", 321 | "keywords": [ 322 | "handler", 323 | "http", 324 | "http-interop", 325 | "psr", 326 | "psr-15", 327 | "psr-7", 328 | "request", 329 | "response", 330 | "server" 331 | ], 332 | "support": { 333 | "issues": "https://github.com/php-fig/http-server-handler/issues", 334 | "source": "https://github.com/php-fig/http-server-handler/tree/master" 335 | }, 336 | "time": "2018-10-30T16:46:14+00:00" 337 | } 338 | ], 339 | "packages-dev": [ 340 | { 341 | "name": "amphp/amp", 342 | "version": "v2.6.2", 343 | "source": { 344 | "type": "git", 345 | "url": "https://github.com/amphp/amp.git", 346 | "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" 347 | }, 348 | "dist": { 349 | "type": "zip", 350 | "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", 351 | "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", 352 | "shasum": "" 353 | }, 354 | "require": { 355 | "php": ">=7.1" 356 | }, 357 | "require-dev": { 358 | "amphp/php-cs-fixer-config": "dev-master", 359 | "amphp/phpunit-util": "^1", 360 | "ext-json": "*", 361 | "jetbrains/phpstorm-stubs": "^2019.3", 362 | "phpunit/phpunit": "^7 | ^8 | ^9", 363 | "psalm/phar": "^3.11@dev", 364 | "react/promise": "^2" 365 | }, 366 | "type": "library", 367 | "extra": { 368 | "branch-alias": { 369 | "dev-master": "2.x-dev" 370 | } 371 | }, 372 | "autoload": { 373 | "files": [ 374 | "lib/functions.php", 375 | "lib/Internal/functions.php" 376 | ], 377 | "psr-4": { 378 | "Amp\\": "lib" 379 | } 380 | }, 381 | "notification-url": "https://packagist.org/downloads/", 382 | "license": [ 383 | "MIT" 384 | ], 385 | "authors": [ 386 | { 387 | "name": "Daniel Lowrey", 388 | "email": "rdlowrey@php.net" 389 | }, 390 | { 391 | "name": "Aaron Piotrowski", 392 | "email": "aaron@trowski.com" 393 | }, 394 | { 395 | "name": "Bob Weinand", 396 | "email": "bobwei9@hotmail.com" 397 | }, 398 | { 399 | "name": "Niklas Keller", 400 | "email": "me@kelunik.com" 401 | } 402 | ], 403 | "description": "A non-blocking concurrency framework for PHP applications.", 404 | "homepage": "https://amphp.org/amp", 405 | "keywords": [ 406 | "async", 407 | "asynchronous", 408 | "awaitable", 409 | "concurrency", 410 | "event", 411 | "event-loop", 412 | "future", 413 | "non-blocking", 414 | "promise" 415 | ], 416 | "support": { 417 | "irc": "irc://irc.freenode.org/amphp", 418 | "issues": "https://github.com/amphp/amp/issues", 419 | "source": "https://github.com/amphp/amp/tree/v2.6.2" 420 | }, 421 | "funding": [ 422 | { 423 | "url": "https://github.com/amphp", 424 | "type": "github" 425 | } 426 | ], 427 | "time": "2022-02-20T17:52:18+00:00" 428 | }, 429 | { 430 | "name": "amphp/byte-stream", 431 | "version": "v1.8.1", 432 | "source": { 433 | "type": "git", 434 | "url": "https://github.com/amphp/byte-stream.git", 435 | "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" 436 | }, 437 | "dist": { 438 | "type": "zip", 439 | "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", 440 | "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", 441 | "shasum": "" 442 | }, 443 | "require": { 444 | "amphp/amp": "^2", 445 | "php": ">=7.1" 446 | }, 447 | "require-dev": { 448 | "amphp/php-cs-fixer-config": "dev-master", 449 | "amphp/phpunit-util": "^1.4", 450 | "friendsofphp/php-cs-fixer": "^2.3", 451 | "jetbrains/phpstorm-stubs": "^2019.3", 452 | "phpunit/phpunit": "^6 || ^7 || ^8", 453 | "psalm/phar": "^3.11.4" 454 | }, 455 | "type": "library", 456 | "extra": { 457 | "branch-alias": { 458 | "dev-master": "1.x-dev" 459 | } 460 | }, 461 | "autoload": { 462 | "files": [ 463 | "lib/functions.php" 464 | ], 465 | "psr-4": { 466 | "Amp\\ByteStream\\": "lib" 467 | } 468 | }, 469 | "notification-url": "https://packagist.org/downloads/", 470 | "license": [ 471 | "MIT" 472 | ], 473 | "authors": [ 474 | { 475 | "name": "Aaron Piotrowski", 476 | "email": "aaron@trowski.com" 477 | }, 478 | { 479 | "name": "Niklas Keller", 480 | "email": "me@kelunik.com" 481 | } 482 | ], 483 | "description": "A stream abstraction to make working with non-blocking I/O simple.", 484 | "homepage": "http://amphp.org/byte-stream", 485 | "keywords": [ 486 | "amp", 487 | "amphp", 488 | "async", 489 | "io", 490 | "non-blocking", 491 | "stream" 492 | ], 493 | "support": { 494 | "irc": "irc://irc.freenode.org/amphp", 495 | "issues": "https://github.com/amphp/byte-stream/issues", 496 | "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" 497 | }, 498 | "funding": [ 499 | { 500 | "url": "https://github.com/amphp", 501 | "type": "github" 502 | } 503 | ], 504 | "time": "2021-03-30T17:13:30+00:00" 505 | }, 506 | { 507 | "name": "composer/package-versions-deprecated", 508 | "version": "1.11.99.5", 509 | "source": { 510 | "type": "git", 511 | "url": "https://github.com/composer/package-versions-deprecated.git", 512 | "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" 513 | }, 514 | "dist": { 515 | "type": "zip", 516 | "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", 517 | "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", 518 | "shasum": "" 519 | }, 520 | "require": { 521 | "composer-plugin-api": "^1.1.0 || ^2.0", 522 | "php": "^7 || ^8" 523 | }, 524 | "replace": { 525 | "ocramius/package-versions": "1.11.99" 526 | }, 527 | "require-dev": { 528 | "composer/composer": "^1.9.3 || ^2.0@dev", 529 | "ext-zip": "^1.13", 530 | "phpunit/phpunit": "^6.5 || ^7" 531 | }, 532 | "type": "composer-plugin", 533 | "extra": { 534 | "class": "PackageVersions\\Installer", 535 | "branch-alias": { 536 | "dev-master": "1.x-dev" 537 | } 538 | }, 539 | "autoload": { 540 | "psr-4": { 541 | "PackageVersions\\": "src/PackageVersions" 542 | } 543 | }, 544 | "notification-url": "https://packagist.org/downloads/", 545 | "license": [ 546 | "MIT" 547 | ], 548 | "authors": [ 549 | { 550 | "name": "Marco Pivetta", 551 | "email": "ocramius@gmail.com" 552 | }, 553 | { 554 | "name": "Jordi Boggiano", 555 | "email": "j.boggiano@seld.be" 556 | } 557 | ], 558 | "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", 559 | "support": { 560 | "issues": "https://github.com/composer/package-versions-deprecated/issues", 561 | "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" 562 | }, 563 | "funding": [ 564 | { 565 | "url": "https://packagist.com", 566 | "type": "custom" 567 | }, 568 | { 569 | "url": "https://github.com/composer", 570 | "type": "github" 571 | }, 572 | { 573 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 574 | "type": "tidelift" 575 | } 576 | ], 577 | "time": "2022-01-17T14:14:24+00:00" 578 | }, 579 | { 580 | "name": "composer/pcre", 581 | "version": "3.1.0", 582 | "source": { 583 | "type": "git", 584 | "url": "https://github.com/composer/pcre.git", 585 | "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" 586 | }, 587 | "dist": { 588 | "type": "zip", 589 | "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", 590 | "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", 591 | "shasum": "" 592 | }, 593 | "require": { 594 | "php": "^7.4 || ^8.0" 595 | }, 596 | "require-dev": { 597 | "phpstan/phpstan": "^1.3", 598 | "phpstan/phpstan-strict-rules": "^1.1", 599 | "symfony/phpunit-bridge": "^5" 600 | }, 601 | "type": "library", 602 | "extra": { 603 | "branch-alias": { 604 | "dev-main": "3.x-dev" 605 | } 606 | }, 607 | "autoload": { 608 | "psr-4": { 609 | "Composer\\Pcre\\": "src" 610 | } 611 | }, 612 | "notification-url": "https://packagist.org/downloads/", 613 | "license": [ 614 | "MIT" 615 | ], 616 | "authors": [ 617 | { 618 | "name": "Jordi Boggiano", 619 | "email": "j.boggiano@seld.be", 620 | "homepage": "http://seld.be" 621 | } 622 | ], 623 | "description": "PCRE wrapping library that offers type-safe preg_* replacements.", 624 | "keywords": [ 625 | "PCRE", 626 | "preg", 627 | "regex", 628 | "regular expression" 629 | ], 630 | "support": { 631 | "issues": "https://github.com/composer/pcre/issues", 632 | "source": "https://github.com/composer/pcre/tree/3.1.0" 633 | }, 634 | "funding": [ 635 | { 636 | "url": "https://packagist.com", 637 | "type": "custom" 638 | }, 639 | { 640 | "url": "https://github.com/composer", 641 | "type": "github" 642 | }, 643 | { 644 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 645 | "type": "tidelift" 646 | } 647 | ], 648 | "time": "2022-11-17T09:50:14+00:00" 649 | }, 650 | { 651 | "name": "composer/semver", 652 | "version": "3.3.2", 653 | "source": { 654 | "type": "git", 655 | "url": "https://github.com/composer/semver.git", 656 | "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" 657 | }, 658 | "dist": { 659 | "type": "zip", 660 | "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", 661 | "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", 662 | "shasum": "" 663 | }, 664 | "require": { 665 | "php": "^5.3.2 || ^7.0 || ^8.0" 666 | }, 667 | "require-dev": { 668 | "phpstan/phpstan": "^1.4", 669 | "symfony/phpunit-bridge": "^4.2 || ^5" 670 | }, 671 | "type": "library", 672 | "extra": { 673 | "branch-alias": { 674 | "dev-main": "3.x-dev" 675 | } 676 | }, 677 | "autoload": { 678 | "psr-4": { 679 | "Composer\\Semver\\": "src" 680 | } 681 | }, 682 | "notification-url": "https://packagist.org/downloads/", 683 | "license": [ 684 | "MIT" 685 | ], 686 | "authors": [ 687 | { 688 | "name": "Nils Adermann", 689 | "email": "naderman@naderman.de", 690 | "homepage": "http://www.naderman.de" 691 | }, 692 | { 693 | "name": "Jordi Boggiano", 694 | "email": "j.boggiano@seld.be", 695 | "homepage": "http://seld.be" 696 | }, 697 | { 698 | "name": "Rob Bast", 699 | "email": "rob.bast@gmail.com", 700 | "homepage": "http://robbast.nl" 701 | } 702 | ], 703 | "description": "Semver library that offers utilities, version constraint parsing and validation.", 704 | "keywords": [ 705 | "semantic", 706 | "semver", 707 | "validation", 708 | "versioning" 709 | ], 710 | "support": { 711 | "irc": "irc://irc.freenode.org/composer", 712 | "issues": "https://github.com/composer/semver/issues", 713 | "source": "https://github.com/composer/semver/tree/3.3.2" 714 | }, 715 | "funding": [ 716 | { 717 | "url": "https://packagist.com", 718 | "type": "custom" 719 | }, 720 | { 721 | "url": "https://github.com/composer", 722 | "type": "github" 723 | }, 724 | { 725 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 726 | "type": "tidelift" 727 | } 728 | ], 729 | "time": "2022-04-01T19:23:25+00:00" 730 | }, 731 | { 732 | "name": "composer/xdebug-handler", 733 | "version": "3.0.3", 734 | "source": { 735 | "type": "git", 736 | "url": "https://github.com/composer/xdebug-handler.git", 737 | "reference": "ced299686f41dce890debac69273b47ffe98a40c" 738 | }, 739 | "dist": { 740 | "type": "zip", 741 | "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", 742 | "reference": "ced299686f41dce890debac69273b47ffe98a40c", 743 | "shasum": "" 744 | }, 745 | "require": { 746 | "composer/pcre": "^1 || ^2 || ^3", 747 | "php": "^7.2.5 || ^8.0", 748 | "psr/log": "^1 || ^2 || ^3" 749 | }, 750 | "require-dev": { 751 | "phpstan/phpstan": "^1.0", 752 | "phpstan/phpstan-strict-rules": "^1.1", 753 | "symfony/phpunit-bridge": "^6.0" 754 | }, 755 | "type": "library", 756 | "autoload": { 757 | "psr-4": { 758 | "Composer\\XdebugHandler\\": "src" 759 | } 760 | }, 761 | "notification-url": "https://packagist.org/downloads/", 762 | "license": [ 763 | "MIT" 764 | ], 765 | "authors": [ 766 | { 767 | "name": "John Stevenson", 768 | "email": "john-stevenson@blueyonder.co.uk" 769 | } 770 | ], 771 | "description": "Restarts a process without Xdebug.", 772 | "keywords": [ 773 | "Xdebug", 774 | "performance" 775 | ], 776 | "support": { 777 | "irc": "irc://irc.freenode.org/composer", 778 | "issues": "https://github.com/composer/xdebug-handler/issues", 779 | "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" 780 | }, 781 | "funding": [ 782 | { 783 | "url": "https://packagist.com", 784 | "type": "custom" 785 | }, 786 | { 787 | "url": "https://github.com/composer", 788 | "type": "github" 789 | }, 790 | { 791 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 792 | "type": "tidelift" 793 | } 794 | ], 795 | "time": "2022-02-25T21:32:43+00:00" 796 | }, 797 | { 798 | "name": "dnoegel/php-xdg-base-dir", 799 | "version": "v0.1.1", 800 | "source": { 801 | "type": "git", 802 | "url": "https://github.com/dnoegel/php-xdg-base-dir.git", 803 | "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" 804 | }, 805 | "dist": { 806 | "type": "zip", 807 | "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", 808 | "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", 809 | "shasum": "" 810 | }, 811 | "require": { 812 | "php": ">=5.3.2" 813 | }, 814 | "require-dev": { 815 | "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" 816 | }, 817 | "type": "library", 818 | "autoload": { 819 | "psr-4": { 820 | "XdgBaseDir\\": "src/" 821 | } 822 | }, 823 | "notification-url": "https://packagist.org/downloads/", 824 | "license": [ 825 | "MIT" 826 | ], 827 | "description": "implementation of xdg base directory specification for php", 828 | "support": { 829 | "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", 830 | "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" 831 | }, 832 | "time": "2019-12-04T15:06:13+00:00" 833 | }, 834 | { 835 | "name": "doctrine/annotations", 836 | "version": "1.14.2", 837 | "source": { 838 | "type": "git", 839 | "url": "https://github.com/doctrine/annotations.git", 840 | "reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b" 841 | }, 842 | "dist": { 843 | "type": "zip", 844 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/ad785217c1e9555a7d6c6c8c9f406395a5e2882b", 845 | "reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b", 846 | "shasum": "" 847 | }, 848 | "require": { 849 | "doctrine/lexer": "^1 || ^2", 850 | "ext-tokenizer": "*", 851 | "php": "^7.1 || ^8.0", 852 | "psr/cache": "^1 || ^2 || ^3" 853 | }, 854 | "require-dev": { 855 | "doctrine/cache": "^1.11 || ^2.0", 856 | "doctrine/coding-standard": "^9 || ^10", 857 | "phpstan/phpstan": "~1.4.10 || ^1.8.0", 858 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", 859 | "symfony/cache": "^4.4 || ^5.4 || ^6", 860 | "vimeo/psalm": "^4.10" 861 | }, 862 | "suggest": { 863 | "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" 864 | }, 865 | "type": "library", 866 | "autoload": { 867 | "psr-4": { 868 | "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" 869 | } 870 | }, 871 | "notification-url": "https://packagist.org/downloads/", 872 | "license": [ 873 | "MIT" 874 | ], 875 | "authors": [ 876 | { 877 | "name": "Guilherme Blanco", 878 | "email": "guilhermeblanco@gmail.com" 879 | }, 880 | { 881 | "name": "Roman Borschel", 882 | "email": "roman@code-factory.org" 883 | }, 884 | { 885 | "name": "Benjamin Eberlei", 886 | "email": "kontakt@beberlei.de" 887 | }, 888 | { 889 | "name": "Jonathan Wage", 890 | "email": "jonwage@gmail.com" 891 | }, 892 | { 893 | "name": "Johannes Schmitt", 894 | "email": "schmittjoh@gmail.com" 895 | } 896 | ], 897 | "description": "Docblock Annotations Parser", 898 | "homepage": "https://www.doctrine-project.org/projects/annotations.html", 899 | "keywords": [ 900 | "annotations", 901 | "docblock", 902 | "parser" 903 | ], 904 | "support": { 905 | "issues": "https://github.com/doctrine/annotations/issues", 906 | "source": "https://github.com/doctrine/annotations/tree/1.14.2" 907 | }, 908 | "time": "2022-12-15T06:48:22+00:00" 909 | }, 910 | { 911 | "name": "doctrine/deprecations", 912 | "version": "v1.0.0", 913 | "source": { 914 | "type": "git", 915 | "url": "https://github.com/doctrine/deprecations.git", 916 | "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" 917 | }, 918 | "dist": { 919 | "type": "zip", 920 | "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", 921 | "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", 922 | "shasum": "" 923 | }, 924 | "require": { 925 | "php": "^7.1|^8.0" 926 | }, 927 | "require-dev": { 928 | "doctrine/coding-standard": "^9", 929 | "phpunit/phpunit": "^7.5|^8.5|^9.5", 930 | "psr/log": "^1|^2|^3" 931 | }, 932 | "suggest": { 933 | "psr/log": "Allows logging deprecations via PSR-3 logger implementation" 934 | }, 935 | "type": "library", 936 | "autoload": { 937 | "psr-4": { 938 | "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" 939 | } 940 | }, 941 | "notification-url": "https://packagist.org/downloads/", 942 | "license": [ 943 | "MIT" 944 | ], 945 | "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", 946 | "homepage": "https://www.doctrine-project.org/", 947 | "support": { 948 | "issues": "https://github.com/doctrine/deprecations/issues", 949 | "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" 950 | }, 951 | "time": "2022-05-02T15:47:09+00:00" 952 | }, 953 | { 954 | "name": "doctrine/instantiator", 955 | "version": "2.0.0", 956 | "source": { 957 | "type": "git", 958 | "url": "https://github.com/doctrine/instantiator.git", 959 | "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" 960 | }, 961 | "dist": { 962 | "type": "zip", 963 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", 964 | "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", 965 | "shasum": "" 966 | }, 967 | "require": { 968 | "php": "^8.1" 969 | }, 970 | "require-dev": { 971 | "doctrine/coding-standard": "^11", 972 | "ext-pdo": "*", 973 | "ext-phar": "*", 974 | "phpbench/phpbench": "^1.2", 975 | "phpstan/phpstan": "^1.9.4", 976 | "phpstan/phpstan-phpunit": "^1.3", 977 | "phpunit/phpunit": "^9.5.27", 978 | "vimeo/psalm": "^5.4" 979 | }, 980 | "type": "library", 981 | "autoload": { 982 | "psr-4": { 983 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 984 | } 985 | }, 986 | "notification-url": "https://packagist.org/downloads/", 987 | "license": [ 988 | "MIT" 989 | ], 990 | "authors": [ 991 | { 992 | "name": "Marco Pivetta", 993 | "email": "ocramius@gmail.com", 994 | "homepage": "https://ocramius.github.io/" 995 | } 996 | ], 997 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 998 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 999 | "keywords": [ 1000 | "constructor", 1001 | "instantiate" 1002 | ], 1003 | "support": { 1004 | "issues": "https://github.com/doctrine/instantiator/issues", 1005 | "source": "https://github.com/doctrine/instantiator/tree/2.0.0" 1006 | }, 1007 | "funding": [ 1008 | { 1009 | "url": "https://www.doctrine-project.org/sponsorship.html", 1010 | "type": "custom" 1011 | }, 1012 | { 1013 | "url": "https://www.patreon.com/phpdoctrine", 1014 | "type": "patreon" 1015 | }, 1016 | { 1017 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 1018 | "type": "tidelift" 1019 | } 1020 | ], 1021 | "time": "2022-12-30T00:23:10+00:00" 1022 | }, 1023 | { 1024 | "name": "doctrine/lexer", 1025 | "version": "2.1.0", 1026 | "source": { 1027 | "type": "git", 1028 | "url": "https://github.com/doctrine/lexer.git", 1029 | "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" 1030 | }, 1031 | "dist": { 1032 | "type": "zip", 1033 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", 1034 | "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", 1035 | "shasum": "" 1036 | }, 1037 | "require": { 1038 | "doctrine/deprecations": "^1.0", 1039 | "php": "^7.1 || ^8.0" 1040 | }, 1041 | "require-dev": { 1042 | "doctrine/coding-standard": "^9 || ^10", 1043 | "phpstan/phpstan": "^1.3", 1044 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", 1045 | "psalm/plugin-phpunit": "^0.18.3", 1046 | "vimeo/psalm": "^4.11 || ^5.0" 1047 | }, 1048 | "type": "library", 1049 | "autoload": { 1050 | "psr-4": { 1051 | "Doctrine\\Common\\Lexer\\": "src" 1052 | } 1053 | }, 1054 | "notification-url": "https://packagist.org/downloads/", 1055 | "license": [ 1056 | "MIT" 1057 | ], 1058 | "authors": [ 1059 | { 1060 | "name": "Guilherme Blanco", 1061 | "email": "guilhermeblanco@gmail.com" 1062 | }, 1063 | { 1064 | "name": "Roman Borschel", 1065 | "email": "roman@code-factory.org" 1066 | }, 1067 | { 1068 | "name": "Johannes Schmitt", 1069 | "email": "schmittjoh@gmail.com" 1070 | } 1071 | ], 1072 | "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", 1073 | "homepage": "https://www.doctrine-project.org/projects/lexer.html", 1074 | "keywords": [ 1075 | "annotations", 1076 | "docblock", 1077 | "lexer", 1078 | "parser", 1079 | "php" 1080 | ], 1081 | "support": { 1082 | "issues": "https://github.com/doctrine/lexer/issues", 1083 | "source": "https://github.com/doctrine/lexer/tree/2.1.0" 1084 | }, 1085 | "funding": [ 1086 | { 1087 | "url": "https://www.doctrine-project.org/sponsorship.html", 1088 | "type": "custom" 1089 | }, 1090 | { 1091 | "url": "https://www.patreon.com/phpdoctrine", 1092 | "type": "patreon" 1093 | }, 1094 | { 1095 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", 1096 | "type": "tidelift" 1097 | } 1098 | ], 1099 | "time": "2022-12-14T08:49:07+00:00" 1100 | }, 1101 | { 1102 | "name": "felixfbecker/advanced-json-rpc", 1103 | "version": "v3.2.1", 1104 | "source": { 1105 | "type": "git", 1106 | "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", 1107 | "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" 1108 | }, 1109 | "dist": { 1110 | "type": "zip", 1111 | "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", 1112 | "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", 1113 | "shasum": "" 1114 | }, 1115 | "require": { 1116 | "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", 1117 | "php": "^7.1 || ^8.0", 1118 | "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" 1119 | }, 1120 | "require-dev": { 1121 | "phpunit/phpunit": "^7.0 || ^8.0" 1122 | }, 1123 | "type": "library", 1124 | "autoload": { 1125 | "psr-4": { 1126 | "AdvancedJsonRpc\\": "lib/" 1127 | } 1128 | }, 1129 | "notification-url": "https://packagist.org/downloads/", 1130 | "license": [ 1131 | "ISC" 1132 | ], 1133 | "authors": [ 1134 | { 1135 | "name": "Felix Becker", 1136 | "email": "felix.b@outlook.com" 1137 | } 1138 | ], 1139 | "description": "A more advanced JSONRPC implementation", 1140 | "support": { 1141 | "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", 1142 | "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" 1143 | }, 1144 | "time": "2021-06-11T22:34:44+00:00" 1145 | }, 1146 | { 1147 | "name": "felixfbecker/language-server-protocol", 1148 | "version": "v1.5.2", 1149 | "source": { 1150 | "type": "git", 1151 | "url": "https://github.com/felixfbecker/php-language-server-protocol.git", 1152 | "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" 1153 | }, 1154 | "dist": { 1155 | "type": "zip", 1156 | "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", 1157 | "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", 1158 | "shasum": "" 1159 | }, 1160 | "require": { 1161 | "php": ">=7.1" 1162 | }, 1163 | "require-dev": { 1164 | "phpstan/phpstan": "*", 1165 | "squizlabs/php_codesniffer": "^3.1", 1166 | "vimeo/psalm": "^4.0" 1167 | }, 1168 | "type": "library", 1169 | "extra": { 1170 | "branch-alias": { 1171 | "dev-master": "1.x-dev" 1172 | } 1173 | }, 1174 | "autoload": { 1175 | "psr-4": { 1176 | "LanguageServerProtocol\\": "src/" 1177 | } 1178 | }, 1179 | "notification-url": "https://packagist.org/downloads/", 1180 | "license": [ 1181 | "ISC" 1182 | ], 1183 | "authors": [ 1184 | { 1185 | "name": "Felix Becker", 1186 | "email": "felix.b@outlook.com" 1187 | } 1188 | ], 1189 | "description": "PHP classes for the Language Server Protocol", 1190 | "keywords": [ 1191 | "language", 1192 | "microsoft", 1193 | "php", 1194 | "server" 1195 | ], 1196 | "support": { 1197 | "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", 1198 | "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" 1199 | }, 1200 | "time": "2022-03-02T22:36:06+00:00" 1201 | }, 1202 | { 1203 | "name": "fidry/cpu-core-counter", 1204 | "version": "0.4.1", 1205 | "source": { 1206 | "type": "git", 1207 | "url": "https://github.com/theofidry/cpu-core-counter.git", 1208 | "reference": "79261cc280aded96d098e1b0e0ba0c4881b432c2" 1209 | }, 1210 | "dist": { 1211 | "type": "zip", 1212 | "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/79261cc280aded96d098e1b0e0ba0c4881b432c2", 1213 | "reference": "79261cc280aded96d098e1b0e0ba0c4881b432c2", 1214 | "shasum": "" 1215 | }, 1216 | "require": { 1217 | "php": "^7.2 || ^8.0" 1218 | }, 1219 | "require-dev": { 1220 | "fidry/makefile": "^0.2.0", 1221 | "phpstan/extension-installer": "^1.2.0", 1222 | "phpstan/phpstan": "^1.9.2", 1223 | "phpstan/phpstan-deprecation-rules": "^1.0.0", 1224 | "phpstan/phpstan-phpunit": "^1.2.2", 1225 | "phpstan/phpstan-strict-rules": "^1.4.4", 1226 | "phpunit/phpunit": "^9.5.26 || ^8.5.31", 1227 | "theofidry/php-cs-fixer-config": "^1.0", 1228 | "webmozarts/strict-phpunit": "^7.5" 1229 | }, 1230 | "type": "library", 1231 | "autoload": { 1232 | "psr-4": { 1233 | "Fidry\\CpuCoreCounter\\": "src/" 1234 | } 1235 | }, 1236 | "notification-url": "https://packagist.org/downloads/", 1237 | "license": [ 1238 | "MIT" 1239 | ], 1240 | "authors": [ 1241 | { 1242 | "name": "Théo FIDRY", 1243 | "email": "theo.fidry@gmail.com" 1244 | } 1245 | ], 1246 | "description": "Tiny utility to get the number of CPU cores.", 1247 | "keywords": [ 1248 | "CPU", 1249 | "core" 1250 | ], 1251 | "support": { 1252 | "issues": "https://github.com/theofidry/cpu-core-counter/issues", 1253 | "source": "https://github.com/theofidry/cpu-core-counter/tree/0.4.1" 1254 | }, 1255 | "funding": [ 1256 | { 1257 | "url": "https://github.com/theofidry", 1258 | "type": "github" 1259 | } 1260 | ], 1261 | "time": "2022-12-16T22:01:02+00:00" 1262 | }, 1263 | { 1264 | "name": "friendsofphp/php-cs-fixer", 1265 | "version": "v3.13.2", 1266 | "source": { 1267 | "type": "git", 1268 | "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", 1269 | "reference": "3952f08a81bd3b1b15e11c3de0b6bf037faa8496" 1270 | }, 1271 | "dist": { 1272 | "type": "zip", 1273 | "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/3952f08a81bd3b1b15e11c3de0b6bf037faa8496", 1274 | "reference": "3952f08a81bd3b1b15e11c3de0b6bf037faa8496", 1275 | "shasum": "" 1276 | }, 1277 | "require": { 1278 | "composer/semver": "^3.2", 1279 | "composer/xdebug-handler": "^3.0.3", 1280 | "doctrine/annotations": "^1.13", 1281 | "ext-json": "*", 1282 | "ext-tokenizer": "*", 1283 | "php": "^7.4 || ^8.0", 1284 | "sebastian/diff": "^4.0", 1285 | "symfony/console": "^5.4 || ^6.0", 1286 | "symfony/event-dispatcher": "^5.4 || ^6.0", 1287 | "symfony/filesystem": "^5.4 || ^6.0", 1288 | "symfony/finder": "^5.4 || ^6.0", 1289 | "symfony/options-resolver": "^5.4 || ^6.0", 1290 | "symfony/polyfill-mbstring": "^1.23", 1291 | "symfony/polyfill-php80": "^1.25", 1292 | "symfony/polyfill-php81": "^1.25", 1293 | "symfony/process": "^5.4 || ^6.0", 1294 | "symfony/stopwatch": "^5.4 || ^6.0" 1295 | }, 1296 | "require-dev": { 1297 | "justinrainbow/json-schema": "^5.2", 1298 | "keradus/cli-executor": "^2.0", 1299 | "mikey179/vfsstream": "^1.6.10", 1300 | "php-coveralls/php-coveralls": "^2.5.2", 1301 | "php-cs-fixer/accessible-object": "^1.1", 1302 | "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", 1303 | "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", 1304 | "phpspec/prophecy": "^1.15", 1305 | "phpspec/prophecy-phpunit": "^2.0", 1306 | "phpunit/phpunit": "^9.5", 1307 | "phpunitgoodpractices/polyfill": "^1.6", 1308 | "phpunitgoodpractices/traits": "^1.9.2", 1309 | "symfony/phpunit-bridge": "^6.0", 1310 | "symfony/yaml": "^5.4 || ^6.0" 1311 | }, 1312 | "suggest": { 1313 | "ext-dom": "For handling output formats in XML", 1314 | "ext-mbstring": "For handling non-UTF8 characters." 1315 | }, 1316 | "bin": [ 1317 | "php-cs-fixer" 1318 | ], 1319 | "type": "application", 1320 | "autoload": { 1321 | "psr-4": { 1322 | "PhpCsFixer\\": "src/" 1323 | } 1324 | }, 1325 | "notification-url": "https://packagist.org/downloads/", 1326 | "license": [ 1327 | "MIT" 1328 | ], 1329 | "authors": [ 1330 | { 1331 | "name": "Fabien Potencier", 1332 | "email": "fabien@symfony.com" 1333 | }, 1334 | { 1335 | "name": "Dariusz Rumiński", 1336 | "email": "dariusz.ruminski@gmail.com" 1337 | } 1338 | ], 1339 | "description": "A tool to automatically fix PHP code style", 1340 | "support": { 1341 | "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", 1342 | "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.13.2" 1343 | }, 1344 | "funding": [ 1345 | { 1346 | "url": "https://github.com/keradus", 1347 | "type": "github" 1348 | } 1349 | ], 1350 | "time": "2023-01-02T23:53:50+00:00" 1351 | }, 1352 | { 1353 | "name": "myclabs/deep-copy", 1354 | "version": "1.11.0", 1355 | "source": { 1356 | "type": "git", 1357 | "url": "https://github.com/myclabs/DeepCopy.git", 1358 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" 1359 | }, 1360 | "dist": { 1361 | "type": "zip", 1362 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", 1363 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", 1364 | "shasum": "" 1365 | }, 1366 | "require": { 1367 | "php": "^7.1 || ^8.0" 1368 | }, 1369 | "conflict": { 1370 | "doctrine/collections": "<1.6.8", 1371 | "doctrine/common": "<2.13.3 || >=3,<3.2.2" 1372 | }, 1373 | "require-dev": { 1374 | "doctrine/collections": "^1.6.8", 1375 | "doctrine/common": "^2.13.3 || ^3.2.2", 1376 | "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" 1377 | }, 1378 | "type": "library", 1379 | "autoload": { 1380 | "files": [ 1381 | "src/DeepCopy/deep_copy.php" 1382 | ], 1383 | "psr-4": { 1384 | "DeepCopy\\": "src/DeepCopy/" 1385 | } 1386 | }, 1387 | "notification-url": "https://packagist.org/downloads/", 1388 | "license": [ 1389 | "MIT" 1390 | ], 1391 | "description": "Create deep copies (clones) of your objects", 1392 | "keywords": [ 1393 | "clone", 1394 | "copy", 1395 | "duplicate", 1396 | "object", 1397 | "object graph" 1398 | ], 1399 | "support": { 1400 | "issues": "https://github.com/myclabs/DeepCopy/issues", 1401 | "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" 1402 | }, 1403 | "funding": [ 1404 | { 1405 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 1406 | "type": "tidelift" 1407 | } 1408 | ], 1409 | "time": "2022-03-03T13:19:32+00:00" 1410 | }, 1411 | { 1412 | "name": "netresearch/jsonmapper", 1413 | "version": "v4.1.0", 1414 | "source": { 1415 | "type": "git", 1416 | "url": "https://github.com/cweiske/jsonmapper.git", 1417 | "reference": "cfa81ea1d35294d64adb9c68aa4cb9e92400e53f" 1418 | }, 1419 | "dist": { 1420 | "type": "zip", 1421 | "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/cfa81ea1d35294d64adb9c68aa4cb9e92400e53f", 1422 | "reference": "cfa81ea1d35294d64adb9c68aa4cb9e92400e53f", 1423 | "shasum": "" 1424 | }, 1425 | "require": { 1426 | "ext-json": "*", 1427 | "ext-pcre": "*", 1428 | "ext-reflection": "*", 1429 | "ext-spl": "*", 1430 | "php": ">=7.1" 1431 | }, 1432 | "require-dev": { 1433 | "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", 1434 | "squizlabs/php_codesniffer": "~3.5" 1435 | }, 1436 | "type": "library", 1437 | "autoload": { 1438 | "psr-0": { 1439 | "JsonMapper": "src/" 1440 | } 1441 | }, 1442 | "notification-url": "https://packagist.org/downloads/", 1443 | "license": [ 1444 | "OSL-3.0" 1445 | ], 1446 | "authors": [ 1447 | { 1448 | "name": "Christian Weiske", 1449 | "email": "cweiske@cweiske.de", 1450 | "homepage": "http://github.com/cweiske/jsonmapper/", 1451 | "role": "Developer" 1452 | } 1453 | ], 1454 | "description": "Map nested JSON structures onto PHP classes", 1455 | "support": { 1456 | "email": "cweiske@cweiske.de", 1457 | "issues": "https://github.com/cweiske/jsonmapper/issues", 1458 | "source": "https://github.com/cweiske/jsonmapper/tree/v4.1.0" 1459 | }, 1460 | "time": "2022-12-08T20:46:14+00:00" 1461 | }, 1462 | { 1463 | "name": "nikic/php-parser", 1464 | "version": "v4.15.3", 1465 | "source": { 1466 | "type": "git", 1467 | "url": "https://github.com/nikic/PHP-Parser.git", 1468 | "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" 1469 | }, 1470 | "dist": { 1471 | "type": "zip", 1472 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", 1473 | "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", 1474 | "shasum": "" 1475 | }, 1476 | "require": { 1477 | "ext-tokenizer": "*", 1478 | "php": ">=7.0" 1479 | }, 1480 | "require-dev": { 1481 | "ircmaxell/php-yacc": "^0.0.7", 1482 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 1483 | }, 1484 | "bin": [ 1485 | "bin/php-parse" 1486 | ], 1487 | "type": "library", 1488 | "extra": { 1489 | "branch-alias": { 1490 | "dev-master": "4.9-dev" 1491 | } 1492 | }, 1493 | "autoload": { 1494 | "psr-4": { 1495 | "PhpParser\\": "lib/PhpParser" 1496 | } 1497 | }, 1498 | "notification-url": "https://packagist.org/downloads/", 1499 | "license": [ 1500 | "BSD-3-Clause" 1501 | ], 1502 | "authors": [ 1503 | { 1504 | "name": "Nikita Popov" 1505 | } 1506 | ], 1507 | "description": "A PHP parser written in PHP", 1508 | "keywords": [ 1509 | "parser", 1510 | "php" 1511 | ], 1512 | "support": { 1513 | "issues": "https://github.com/nikic/PHP-Parser/issues", 1514 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" 1515 | }, 1516 | "time": "2023-01-16T22:05:37+00:00" 1517 | }, 1518 | { 1519 | "name": "phar-io/manifest", 1520 | "version": "2.0.3", 1521 | "source": { 1522 | "type": "git", 1523 | "url": "https://github.com/phar-io/manifest.git", 1524 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53" 1525 | }, 1526 | "dist": { 1527 | "type": "zip", 1528 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", 1529 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53", 1530 | "shasum": "" 1531 | }, 1532 | "require": { 1533 | "ext-dom": "*", 1534 | "ext-phar": "*", 1535 | "ext-xmlwriter": "*", 1536 | "phar-io/version": "^3.0.1", 1537 | "php": "^7.2 || ^8.0" 1538 | }, 1539 | "type": "library", 1540 | "extra": { 1541 | "branch-alias": { 1542 | "dev-master": "2.0.x-dev" 1543 | } 1544 | }, 1545 | "autoload": { 1546 | "classmap": [ 1547 | "src/" 1548 | ] 1549 | }, 1550 | "notification-url": "https://packagist.org/downloads/", 1551 | "license": [ 1552 | "BSD-3-Clause" 1553 | ], 1554 | "authors": [ 1555 | { 1556 | "name": "Arne Blankerts", 1557 | "email": "arne@blankerts.de", 1558 | "role": "Developer" 1559 | }, 1560 | { 1561 | "name": "Sebastian Heuer", 1562 | "email": "sebastian@phpeople.de", 1563 | "role": "Developer" 1564 | }, 1565 | { 1566 | "name": "Sebastian Bergmann", 1567 | "email": "sebastian@phpunit.de", 1568 | "role": "Developer" 1569 | } 1570 | ], 1571 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 1572 | "support": { 1573 | "issues": "https://github.com/phar-io/manifest/issues", 1574 | "source": "https://github.com/phar-io/manifest/tree/2.0.3" 1575 | }, 1576 | "time": "2021-07-20T11:28:43+00:00" 1577 | }, 1578 | { 1579 | "name": "phar-io/version", 1580 | "version": "3.2.1", 1581 | "source": { 1582 | "type": "git", 1583 | "url": "https://github.com/phar-io/version.git", 1584 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" 1585 | }, 1586 | "dist": { 1587 | "type": "zip", 1588 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 1589 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 1590 | "shasum": "" 1591 | }, 1592 | "require": { 1593 | "php": "^7.2 || ^8.0" 1594 | }, 1595 | "type": "library", 1596 | "autoload": { 1597 | "classmap": [ 1598 | "src/" 1599 | ] 1600 | }, 1601 | "notification-url": "https://packagist.org/downloads/", 1602 | "license": [ 1603 | "BSD-3-Clause" 1604 | ], 1605 | "authors": [ 1606 | { 1607 | "name": "Arne Blankerts", 1608 | "email": "arne@blankerts.de", 1609 | "role": "Developer" 1610 | }, 1611 | { 1612 | "name": "Sebastian Heuer", 1613 | "email": "sebastian@phpeople.de", 1614 | "role": "Developer" 1615 | }, 1616 | { 1617 | "name": "Sebastian Bergmann", 1618 | "email": "sebastian@phpunit.de", 1619 | "role": "Developer" 1620 | } 1621 | ], 1622 | "description": "Library for handling version information and constraints", 1623 | "support": { 1624 | "issues": "https://github.com/phar-io/version/issues", 1625 | "source": "https://github.com/phar-io/version/tree/3.2.1" 1626 | }, 1627 | "time": "2022-02-21T01:04:05+00:00" 1628 | }, 1629 | { 1630 | "name": "phpdocumentor/reflection-common", 1631 | "version": "2.2.0", 1632 | "source": { 1633 | "type": "git", 1634 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 1635 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" 1636 | }, 1637 | "dist": { 1638 | "type": "zip", 1639 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", 1640 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", 1641 | "shasum": "" 1642 | }, 1643 | "require": { 1644 | "php": "^7.2 || ^8.0" 1645 | }, 1646 | "type": "library", 1647 | "extra": { 1648 | "branch-alias": { 1649 | "dev-2.x": "2.x-dev" 1650 | } 1651 | }, 1652 | "autoload": { 1653 | "psr-4": { 1654 | "phpDocumentor\\Reflection\\": "src/" 1655 | } 1656 | }, 1657 | "notification-url": "https://packagist.org/downloads/", 1658 | "license": [ 1659 | "MIT" 1660 | ], 1661 | "authors": [ 1662 | { 1663 | "name": "Jaap van Otterdijk", 1664 | "email": "opensource@ijaap.nl" 1665 | } 1666 | ], 1667 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 1668 | "homepage": "http://www.phpdoc.org", 1669 | "keywords": [ 1670 | "FQSEN", 1671 | "phpDocumentor", 1672 | "phpdoc", 1673 | "reflection", 1674 | "static analysis" 1675 | ], 1676 | "support": { 1677 | "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", 1678 | "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" 1679 | }, 1680 | "time": "2020-06-27T09:03:43+00:00" 1681 | }, 1682 | { 1683 | "name": "phpdocumentor/reflection-docblock", 1684 | "version": "5.3.0", 1685 | "source": { 1686 | "type": "git", 1687 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 1688 | "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" 1689 | }, 1690 | "dist": { 1691 | "type": "zip", 1692 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", 1693 | "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", 1694 | "shasum": "" 1695 | }, 1696 | "require": { 1697 | "ext-filter": "*", 1698 | "php": "^7.2 || ^8.0", 1699 | "phpdocumentor/reflection-common": "^2.2", 1700 | "phpdocumentor/type-resolver": "^1.3", 1701 | "webmozart/assert": "^1.9.1" 1702 | }, 1703 | "require-dev": { 1704 | "mockery/mockery": "~1.3.2", 1705 | "psalm/phar": "^4.8" 1706 | }, 1707 | "type": "library", 1708 | "extra": { 1709 | "branch-alias": { 1710 | "dev-master": "5.x-dev" 1711 | } 1712 | }, 1713 | "autoload": { 1714 | "psr-4": { 1715 | "phpDocumentor\\Reflection\\": "src" 1716 | } 1717 | }, 1718 | "notification-url": "https://packagist.org/downloads/", 1719 | "license": [ 1720 | "MIT" 1721 | ], 1722 | "authors": [ 1723 | { 1724 | "name": "Mike van Riel", 1725 | "email": "me@mikevanriel.com" 1726 | }, 1727 | { 1728 | "name": "Jaap van Otterdijk", 1729 | "email": "account@ijaap.nl" 1730 | } 1731 | ], 1732 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 1733 | "support": { 1734 | "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", 1735 | "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" 1736 | }, 1737 | "time": "2021-10-19T17:43:47+00:00" 1738 | }, 1739 | { 1740 | "name": "phpdocumentor/type-resolver", 1741 | "version": "1.6.2", 1742 | "source": { 1743 | "type": "git", 1744 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 1745 | "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d" 1746 | }, 1747 | "dist": { 1748 | "type": "zip", 1749 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d", 1750 | "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d", 1751 | "shasum": "" 1752 | }, 1753 | "require": { 1754 | "php": "^7.4 || ^8.0", 1755 | "phpdocumentor/reflection-common": "^2.0" 1756 | }, 1757 | "require-dev": { 1758 | "ext-tokenizer": "*", 1759 | "phpstan/extension-installer": "^1.1", 1760 | "phpstan/phpstan": "^1.8", 1761 | "phpstan/phpstan-phpunit": "^1.1", 1762 | "phpunit/phpunit": "^9.5", 1763 | "rector/rector": "^0.13.9", 1764 | "vimeo/psalm": "^4.25" 1765 | }, 1766 | "type": "library", 1767 | "extra": { 1768 | "branch-alias": { 1769 | "dev-1.x": "1.x-dev" 1770 | } 1771 | }, 1772 | "autoload": { 1773 | "psr-4": { 1774 | "phpDocumentor\\Reflection\\": "src" 1775 | } 1776 | }, 1777 | "notification-url": "https://packagist.org/downloads/", 1778 | "license": [ 1779 | "MIT" 1780 | ], 1781 | "authors": [ 1782 | { 1783 | "name": "Mike van Riel", 1784 | "email": "me@mikevanriel.com" 1785 | } 1786 | ], 1787 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 1788 | "support": { 1789 | "issues": "https://github.com/phpDocumentor/TypeResolver/issues", 1790 | "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2" 1791 | }, 1792 | "time": "2022-10-14T12:47:21+00:00" 1793 | }, 1794 | { 1795 | "name": "phpunit/php-code-coverage", 1796 | "version": "9.2.24", 1797 | "source": { 1798 | "type": "git", 1799 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1800 | "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed" 1801 | }, 1802 | "dist": { 1803 | "type": "zip", 1804 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2cf940ebc6355a9d430462811b5aaa308b174bed", 1805 | "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed", 1806 | "shasum": "" 1807 | }, 1808 | "require": { 1809 | "ext-dom": "*", 1810 | "ext-libxml": "*", 1811 | "ext-xmlwriter": "*", 1812 | "nikic/php-parser": "^4.14", 1813 | "php": ">=7.3", 1814 | "phpunit/php-file-iterator": "^3.0.3", 1815 | "phpunit/php-text-template": "^2.0.2", 1816 | "sebastian/code-unit-reverse-lookup": "^2.0.2", 1817 | "sebastian/complexity": "^2.0", 1818 | "sebastian/environment": "^5.1.2", 1819 | "sebastian/lines-of-code": "^1.0.3", 1820 | "sebastian/version": "^3.0.1", 1821 | "theseer/tokenizer": "^1.2.0" 1822 | }, 1823 | "require-dev": { 1824 | "phpunit/phpunit": "^9.3" 1825 | }, 1826 | "suggest": { 1827 | "ext-pcov": "*", 1828 | "ext-xdebug": "*" 1829 | }, 1830 | "type": "library", 1831 | "extra": { 1832 | "branch-alias": { 1833 | "dev-master": "9.2-dev" 1834 | } 1835 | }, 1836 | "autoload": { 1837 | "classmap": [ 1838 | "src/" 1839 | ] 1840 | }, 1841 | "notification-url": "https://packagist.org/downloads/", 1842 | "license": [ 1843 | "BSD-3-Clause" 1844 | ], 1845 | "authors": [ 1846 | { 1847 | "name": "Sebastian Bergmann", 1848 | "email": "sebastian@phpunit.de", 1849 | "role": "lead" 1850 | } 1851 | ], 1852 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1853 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1854 | "keywords": [ 1855 | "coverage", 1856 | "testing", 1857 | "xunit" 1858 | ], 1859 | "support": { 1860 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 1861 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.24" 1862 | }, 1863 | "funding": [ 1864 | { 1865 | "url": "https://github.com/sebastianbergmann", 1866 | "type": "github" 1867 | } 1868 | ], 1869 | "time": "2023-01-26T08:26:55+00:00" 1870 | }, 1871 | { 1872 | "name": "phpunit/php-file-iterator", 1873 | "version": "3.0.6", 1874 | "source": { 1875 | "type": "git", 1876 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1877 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" 1878 | }, 1879 | "dist": { 1880 | "type": "zip", 1881 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 1882 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 1883 | "shasum": "" 1884 | }, 1885 | "require": { 1886 | "php": ">=7.3" 1887 | }, 1888 | "require-dev": { 1889 | "phpunit/phpunit": "^9.3" 1890 | }, 1891 | "type": "library", 1892 | "extra": { 1893 | "branch-alias": { 1894 | "dev-master": "3.0-dev" 1895 | } 1896 | }, 1897 | "autoload": { 1898 | "classmap": [ 1899 | "src/" 1900 | ] 1901 | }, 1902 | "notification-url": "https://packagist.org/downloads/", 1903 | "license": [ 1904 | "BSD-3-Clause" 1905 | ], 1906 | "authors": [ 1907 | { 1908 | "name": "Sebastian Bergmann", 1909 | "email": "sebastian@phpunit.de", 1910 | "role": "lead" 1911 | } 1912 | ], 1913 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1914 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1915 | "keywords": [ 1916 | "filesystem", 1917 | "iterator" 1918 | ], 1919 | "support": { 1920 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 1921 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" 1922 | }, 1923 | "funding": [ 1924 | { 1925 | "url": "https://github.com/sebastianbergmann", 1926 | "type": "github" 1927 | } 1928 | ], 1929 | "time": "2021-12-02T12:48:52+00:00" 1930 | }, 1931 | { 1932 | "name": "phpunit/php-invoker", 1933 | "version": "3.1.1", 1934 | "source": { 1935 | "type": "git", 1936 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 1937 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" 1938 | }, 1939 | "dist": { 1940 | "type": "zip", 1941 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 1942 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 1943 | "shasum": "" 1944 | }, 1945 | "require": { 1946 | "php": ">=7.3" 1947 | }, 1948 | "require-dev": { 1949 | "ext-pcntl": "*", 1950 | "phpunit/phpunit": "^9.3" 1951 | }, 1952 | "suggest": { 1953 | "ext-pcntl": "*" 1954 | }, 1955 | "type": "library", 1956 | "extra": { 1957 | "branch-alias": { 1958 | "dev-master": "3.1-dev" 1959 | } 1960 | }, 1961 | "autoload": { 1962 | "classmap": [ 1963 | "src/" 1964 | ] 1965 | }, 1966 | "notification-url": "https://packagist.org/downloads/", 1967 | "license": [ 1968 | "BSD-3-Clause" 1969 | ], 1970 | "authors": [ 1971 | { 1972 | "name": "Sebastian Bergmann", 1973 | "email": "sebastian@phpunit.de", 1974 | "role": "lead" 1975 | } 1976 | ], 1977 | "description": "Invoke callables with a timeout", 1978 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 1979 | "keywords": [ 1980 | "process" 1981 | ], 1982 | "support": { 1983 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues", 1984 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" 1985 | }, 1986 | "funding": [ 1987 | { 1988 | "url": "https://github.com/sebastianbergmann", 1989 | "type": "github" 1990 | } 1991 | ], 1992 | "time": "2020-09-28T05:58:55+00:00" 1993 | }, 1994 | { 1995 | "name": "phpunit/php-text-template", 1996 | "version": "2.0.4", 1997 | "source": { 1998 | "type": "git", 1999 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 2000 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" 2001 | }, 2002 | "dist": { 2003 | "type": "zip", 2004 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 2005 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 2006 | "shasum": "" 2007 | }, 2008 | "require": { 2009 | "php": ">=7.3" 2010 | }, 2011 | "require-dev": { 2012 | "phpunit/phpunit": "^9.3" 2013 | }, 2014 | "type": "library", 2015 | "extra": { 2016 | "branch-alias": { 2017 | "dev-master": "2.0-dev" 2018 | } 2019 | }, 2020 | "autoload": { 2021 | "classmap": [ 2022 | "src/" 2023 | ] 2024 | }, 2025 | "notification-url": "https://packagist.org/downloads/", 2026 | "license": [ 2027 | "BSD-3-Clause" 2028 | ], 2029 | "authors": [ 2030 | { 2031 | "name": "Sebastian Bergmann", 2032 | "email": "sebastian@phpunit.de", 2033 | "role": "lead" 2034 | } 2035 | ], 2036 | "description": "Simple template engine.", 2037 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 2038 | "keywords": [ 2039 | "template" 2040 | ], 2041 | "support": { 2042 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 2043 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" 2044 | }, 2045 | "funding": [ 2046 | { 2047 | "url": "https://github.com/sebastianbergmann", 2048 | "type": "github" 2049 | } 2050 | ], 2051 | "time": "2020-10-26T05:33:50+00:00" 2052 | }, 2053 | { 2054 | "name": "phpunit/php-timer", 2055 | "version": "5.0.3", 2056 | "source": { 2057 | "type": "git", 2058 | "url": "https://github.com/sebastianbergmann/php-timer.git", 2059 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" 2060 | }, 2061 | "dist": { 2062 | "type": "zip", 2063 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 2064 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 2065 | "shasum": "" 2066 | }, 2067 | "require": { 2068 | "php": ">=7.3" 2069 | }, 2070 | "require-dev": { 2071 | "phpunit/phpunit": "^9.3" 2072 | }, 2073 | "type": "library", 2074 | "extra": { 2075 | "branch-alias": { 2076 | "dev-master": "5.0-dev" 2077 | } 2078 | }, 2079 | "autoload": { 2080 | "classmap": [ 2081 | "src/" 2082 | ] 2083 | }, 2084 | "notification-url": "https://packagist.org/downloads/", 2085 | "license": [ 2086 | "BSD-3-Clause" 2087 | ], 2088 | "authors": [ 2089 | { 2090 | "name": "Sebastian Bergmann", 2091 | "email": "sebastian@phpunit.de", 2092 | "role": "lead" 2093 | } 2094 | ], 2095 | "description": "Utility class for timing", 2096 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 2097 | "keywords": [ 2098 | "timer" 2099 | ], 2100 | "support": { 2101 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 2102 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" 2103 | }, 2104 | "funding": [ 2105 | { 2106 | "url": "https://github.com/sebastianbergmann", 2107 | "type": "github" 2108 | } 2109 | ], 2110 | "time": "2020-10-26T13:16:10+00:00" 2111 | }, 2112 | { 2113 | "name": "phpunit/phpunit", 2114 | "version": "9.5.28", 2115 | "source": { 2116 | "type": "git", 2117 | "url": "https://github.com/sebastianbergmann/phpunit.git", 2118 | "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e" 2119 | }, 2120 | "dist": { 2121 | "type": "zip", 2122 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/954ca3113a03bf780d22f07bf055d883ee04b65e", 2123 | "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e", 2124 | "shasum": "" 2125 | }, 2126 | "require": { 2127 | "doctrine/instantiator": "^1.3.1 || ^2", 2128 | "ext-dom": "*", 2129 | "ext-json": "*", 2130 | "ext-libxml": "*", 2131 | "ext-mbstring": "*", 2132 | "ext-xml": "*", 2133 | "ext-xmlwriter": "*", 2134 | "myclabs/deep-copy": "^1.10.1", 2135 | "phar-io/manifest": "^2.0.3", 2136 | "phar-io/version": "^3.0.2", 2137 | "php": ">=7.3", 2138 | "phpunit/php-code-coverage": "^9.2.13", 2139 | "phpunit/php-file-iterator": "^3.0.5", 2140 | "phpunit/php-invoker": "^3.1.1", 2141 | "phpunit/php-text-template": "^2.0.3", 2142 | "phpunit/php-timer": "^5.0.2", 2143 | "sebastian/cli-parser": "^1.0.1", 2144 | "sebastian/code-unit": "^1.0.6", 2145 | "sebastian/comparator": "^4.0.8", 2146 | "sebastian/diff": "^4.0.3", 2147 | "sebastian/environment": "^5.1.3", 2148 | "sebastian/exporter": "^4.0.5", 2149 | "sebastian/global-state": "^5.0.1", 2150 | "sebastian/object-enumerator": "^4.0.3", 2151 | "sebastian/resource-operations": "^3.0.3", 2152 | "sebastian/type": "^3.2", 2153 | "sebastian/version": "^3.0.2" 2154 | }, 2155 | "suggest": { 2156 | "ext-soap": "*", 2157 | "ext-xdebug": "*" 2158 | }, 2159 | "bin": [ 2160 | "phpunit" 2161 | ], 2162 | "type": "library", 2163 | "extra": { 2164 | "branch-alias": { 2165 | "dev-master": "9.5-dev" 2166 | } 2167 | }, 2168 | "autoload": { 2169 | "files": [ 2170 | "src/Framework/Assert/Functions.php" 2171 | ], 2172 | "classmap": [ 2173 | "src/" 2174 | ] 2175 | }, 2176 | "notification-url": "https://packagist.org/downloads/", 2177 | "license": [ 2178 | "BSD-3-Clause" 2179 | ], 2180 | "authors": [ 2181 | { 2182 | "name": "Sebastian Bergmann", 2183 | "email": "sebastian@phpunit.de", 2184 | "role": "lead" 2185 | } 2186 | ], 2187 | "description": "The PHP Unit Testing framework.", 2188 | "homepage": "https://phpunit.de/", 2189 | "keywords": [ 2190 | "phpunit", 2191 | "testing", 2192 | "xunit" 2193 | ], 2194 | "support": { 2195 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 2196 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.28" 2197 | }, 2198 | "funding": [ 2199 | { 2200 | "url": "https://phpunit.de/sponsors.html", 2201 | "type": "custom" 2202 | }, 2203 | { 2204 | "url": "https://github.com/sebastianbergmann", 2205 | "type": "github" 2206 | }, 2207 | { 2208 | "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", 2209 | "type": "tidelift" 2210 | } 2211 | ], 2212 | "time": "2023-01-14T12:32:24+00:00" 2213 | }, 2214 | { 2215 | "name": "psalm/plugin-phpunit", 2216 | "version": "0.18.4", 2217 | "source": { 2218 | "type": "git", 2219 | "url": "https://github.com/psalm/psalm-plugin-phpunit.git", 2220 | "reference": "e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc" 2221 | }, 2222 | "dist": { 2223 | "type": "zip", 2224 | "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc", 2225 | "reference": "e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc", 2226 | "shasum": "" 2227 | }, 2228 | "require": { 2229 | "composer/package-versions-deprecated": "^1.10", 2230 | "composer/semver": "^1.4 || ^2.0 || ^3.0", 2231 | "ext-simplexml": "*", 2232 | "php": "^7.1 || ^8.0", 2233 | "vimeo/psalm": "dev-master || dev-4.x || ^4.7.1 || ^5@beta || ^5.0" 2234 | }, 2235 | "conflict": { 2236 | "phpunit/phpunit": "<7.5" 2237 | }, 2238 | "require-dev": { 2239 | "codeception/codeception": "^4.0.3", 2240 | "php": "^7.3 || ^8.0", 2241 | "phpunit/phpunit": "^7.5 || ^8.0 || ^9.0", 2242 | "squizlabs/php_codesniffer": "^3.3.1", 2243 | "weirdan/codeception-psalm-module": "^0.11.0", 2244 | "weirdan/prophecy-shim": "^1.0 || ^2.0" 2245 | }, 2246 | "type": "psalm-plugin", 2247 | "extra": { 2248 | "psalm": { 2249 | "pluginClass": "Psalm\\PhpUnitPlugin\\Plugin" 2250 | } 2251 | }, 2252 | "autoload": { 2253 | "psr-4": { 2254 | "Psalm\\PhpUnitPlugin\\": "src" 2255 | } 2256 | }, 2257 | "notification-url": "https://packagist.org/downloads/", 2258 | "license": [ 2259 | "MIT" 2260 | ], 2261 | "authors": [ 2262 | { 2263 | "name": "Matt Brown", 2264 | "email": "github@muglug.com" 2265 | } 2266 | ], 2267 | "description": "Psalm plugin for PHPUnit", 2268 | "support": { 2269 | "issues": "https://github.com/psalm/psalm-plugin-phpunit/issues", 2270 | "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.18.4" 2271 | }, 2272 | "time": "2022-12-03T07:47:07+00:00" 2273 | }, 2274 | { 2275 | "name": "psr/cache", 2276 | "version": "3.0.0", 2277 | "source": { 2278 | "type": "git", 2279 | "url": "https://github.com/php-fig/cache.git", 2280 | "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" 2281 | }, 2282 | "dist": { 2283 | "type": "zip", 2284 | "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", 2285 | "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", 2286 | "shasum": "" 2287 | }, 2288 | "require": { 2289 | "php": ">=8.0.0" 2290 | }, 2291 | "type": "library", 2292 | "extra": { 2293 | "branch-alias": { 2294 | "dev-master": "1.0.x-dev" 2295 | } 2296 | }, 2297 | "autoload": { 2298 | "psr-4": { 2299 | "Psr\\Cache\\": "src/" 2300 | } 2301 | }, 2302 | "notification-url": "https://packagist.org/downloads/", 2303 | "license": [ 2304 | "MIT" 2305 | ], 2306 | "authors": [ 2307 | { 2308 | "name": "PHP-FIG", 2309 | "homepage": "https://www.php-fig.org/" 2310 | } 2311 | ], 2312 | "description": "Common interface for caching libraries", 2313 | "keywords": [ 2314 | "cache", 2315 | "psr", 2316 | "psr-6" 2317 | ], 2318 | "support": { 2319 | "source": "https://github.com/php-fig/cache/tree/3.0.0" 2320 | }, 2321 | "time": "2021-02-03T23:26:27+00:00" 2322 | }, 2323 | { 2324 | "name": "psr/container", 2325 | "version": "2.0.2", 2326 | "source": { 2327 | "type": "git", 2328 | "url": "https://github.com/php-fig/container.git", 2329 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" 2330 | }, 2331 | "dist": { 2332 | "type": "zip", 2333 | "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", 2334 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", 2335 | "shasum": "" 2336 | }, 2337 | "require": { 2338 | "php": ">=7.4.0" 2339 | }, 2340 | "type": "library", 2341 | "extra": { 2342 | "branch-alias": { 2343 | "dev-master": "2.0.x-dev" 2344 | } 2345 | }, 2346 | "autoload": { 2347 | "psr-4": { 2348 | "Psr\\Container\\": "src/" 2349 | } 2350 | }, 2351 | "notification-url": "https://packagist.org/downloads/", 2352 | "license": [ 2353 | "MIT" 2354 | ], 2355 | "authors": [ 2356 | { 2357 | "name": "PHP-FIG", 2358 | "homepage": "https://www.php-fig.org/" 2359 | } 2360 | ], 2361 | "description": "Common Container Interface (PHP FIG PSR-11)", 2362 | "homepage": "https://github.com/php-fig/container", 2363 | "keywords": [ 2364 | "PSR-11", 2365 | "container", 2366 | "container-interface", 2367 | "container-interop", 2368 | "psr" 2369 | ], 2370 | "support": { 2371 | "issues": "https://github.com/php-fig/container/issues", 2372 | "source": "https://github.com/php-fig/container/tree/2.0.2" 2373 | }, 2374 | "time": "2021-11-05T16:47:00+00:00" 2375 | }, 2376 | { 2377 | "name": "psr/event-dispatcher", 2378 | "version": "1.0.0", 2379 | "source": { 2380 | "type": "git", 2381 | "url": "https://github.com/php-fig/event-dispatcher.git", 2382 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" 2383 | }, 2384 | "dist": { 2385 | "type": "zip", 2386 | "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", 2387 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", 2388 | "shasum": "" 2389 | }, 2390 | "require": { 2391 | "php": ">=7.2.0" 2392 | }, 2393 | "type": "library", 2394 | "extra": { 2395 | "branch-alias": { 2396 | "dev-master": "1.0.x-dev" 2397 | } 2398 | }, 2399 | "autoload": { 2400 | "psr-4": { 2401 | "Psr\\EventDispatcher\\": "src/" 2402 | } 2403 | }, 2404 | "notification-url": "https://packagist.org/downloads/", 2405 | "license": [ 2406 | "MIT" 2407 | ], 2408 | "authors": [ 2409 | { 2410 | "name": "PHP-FIG", 2411 | "homepage": "http://www.php-fig.org/" 2412 | } 2413 | ], 2414 | "description": "Standard interfaces for event handling.", 2415 | "keywords": [ 2416 | "events", 2417 | "psr", 2418 | "psr-14" 2419 | ], 2420 | "support": { 2421 | "issues": "https://github.com/php-fig/event-dispatcher/issues", 2422 | "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" 2423 | }, 2424 | "time": "2019-01-08T18:20:26+00:00" 2425 | }, 2426 | { 2427 | "name": "psr/log", 2428 | "version": "3.0.0", 2429 | "source": { 2430 | "type": "git", 2431 | "url": "https://github.com/php-fig/log.git", 2432 | "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" 2433 | }, 2434 | "dist": { 2435 | "type": "zip", 2436 | "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", 2437 | "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", 2438 | "shasum": "" 2439 | }, 2440 | "require": { 2441 | "php": ">=8.0.0" 2442 | }, 2443 | "type": "library", 2444 | "extra": { 2445 | "branch-alias": { 2446 | "dev-master": "3.x-dev" 2447 | } 2448 | }, 2449 | "autoload": { 2450 | "psr-4": { 2451 | "Psr\\Log\\": "src" 2452 | } 2453 | }, 2454 | "notification-url": "https://packagist.org/downloads/", 2455 | "license": [ 2456 | "MIT" 2457 | ], 2458 | "authors": [ 2459 | { 2460 | "name": "PHP-FIG", 2461 | "homepage": "https://www.php-fig.org/" 2462 | } 2463 | ], 2464 | "description": "Common interface for logging libraries", 2465 | "homepage": "https://github.com/php-fig/log", 2466 | "keywords": [ 2467 | "log", 2468 | "psr", 2469 | "psr-3" 2470 | ], 2471 | "support": { 2472 | "source": "https://github.com/php-fig/log/tree/3.0.0" 2473 | }, 2474 | "time": "2021-07-14T16:46:02+00:00" 2475 | }, 2476 | { 2477 | "name": "sebastian/cli-parser", 2478 | "version": "1.0.1", 2479 | "source": { 2480 | "type": "git", 2481 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 2482 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" 2483 | }, 2484 | "dist": { 2485 | "type": "zip", 2486 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", 2487 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", 2488 | "shasum": "" 2489 | }, 2490 | "require": { 2491 | "php": ">=7.3" 2492 | }, 2493 | "require-dev": { 2494 | "phpunit/phpunit": "^9.3" 2495 | }, 2496 | "type": "library", 2497 | "extra": { 2498 | "branch-alias": { 2499 | "dev-master": "1.0-dev" 2500 | } 2501 | }, 2502 | "autoload": { 2503 | "classmap": [ 2504 | "src/" 2505 | ] 2506 | }, 2507 | "notification-url": "https://packagist.org/downloads/", 2508 | "license": [ 2509 | "BSD-3-Clause" 2510 | ], 2511 | "authors": [ 2512 | { 2513 | "name": "Sebastian Bergmann", 2514 | "email": "sebastian@phpunit.de", 2515 | "role": "lead" 2516 | } 2517 | ], 2518 | "description": "Library for parsing CLI options", 2519 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 2520 | "support": { 2521 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues", 2522 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" 2523 | }, 2524 | "funding": [ 2525 | { 2526 | "url": "https://github.com/sebastianbergmann", 2527 | "type": "github" 2528 | } 2529 | ], 2530 | "time": "2020-09-28T06:08:49+00:00" 2531 | }, 2532 | { 2533 | "name": "sebastian/code-unit", 2534 | "version": "1.0.8", 2535 | "source": { 2536 | "type": "git", 2537 | "url": "https://github.com/sebastianbergmann/code-unit.git", 2538 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" 2539 | }, 2540 | "dist": { 2541 | "type": "zip", 2542 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", 2543 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", 2544 | "shasum": "" 2545 | }, 2546 | "require": { 2547 | "php": ">=7.3" 2548 | }, 2549 | "require-dev": { 2550 | "phpunit/phpunit": "^9.3" 2551 | }, 2552 | "type": "library", 2553 | "extra": { 2554 | "branch-alias": { 2555 | "dev-master": "1.0-dev" 2556 | } 2557 | }, 2558 | "autoload": { 2559 | "classmap": [ 2560 | "src/" 2561 | ] 2562 | }, 2563 | "notification-url": "https://packagist.org/downloads/", 2564 | "license": [ 2565 | "BSD-3-Clause" 2566 | ], 2567 | "authors": [ 2568 | { 2569 | "name": "Sebastian Bergmann", 2570 | "email": "sebastian@phpunit.de", 2571 | "role": "lead" 2572 | } 2573 | ], 2574 | "description": "Collection of value objects that represent the PHP code units", 2575 | "homepage": "https://github.com/sebastianbergmann/code-unit", 2576 | "support": { 2577 | "issues": "https://github.com/sebastianbergmann/code-unit/issues", 2578 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" 2579 | }, 2580 | "funding": [ 2581 | { 2582 | "url": "https://github.com/sebastianbergmann", 2583 | "type": "github" 2584 | } 2585 | ], 2586 | "time": "2020-10-26T13:08:54+00:00" 2587 | }, 2588 | { 2589 | "name": "sebastian/code-unit-reverse-lookup", 2590 | "version": "2.0.3", 2591 | "source": { 2592 | "type": "git", 2593 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 2594 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" 2595 | }, 2596 | "dist": { 2597 | "type": "zip", 2598 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 2599 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 2600 | "shasum": "" 2601 | }, 2602 | "require": { 2603 | "php": ">=7.3" 2604 | }, 2605 | "require-dev": { 2606 | "phpunit/phpunit": "^9.3" 2607 | }, 2608 | "type": "library", 2609 | "extra": { 2610 | "branch-alias": { 2611 | "dev-master": "2.0-dev" 2612 | } 2613 | }, 2614 | "autoload": { 2615 | "classmap": [ 2616 | "src/" 2617 | ] 2618 | }, 2619 | "notification-url": "https://packagist.org/downloads/", 2620 | "license": [ 2621 | "BSD-3-Clause" 2622 | ], 2623 | "authors": [ 2624 | { 2625 | "name": "Sebastian Bergmann", 2626 | "email": "sebastian@phpunit.de" 2627 | } 2628 | ], 2629 | "description": "Looks up which function or method a line of code belongs to", 2630 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 2631 | "support": { 2632 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 2633 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" 2634 | }, 2635 | "funding": [ 2636 | { 2637 | "url": "https://github.com/sebastianbergmann", 2638 | "type": "github" 2639 | } 2640 | ], 2641 | "time": "2020-09-28T05:30:19+00:00" 2642 | }, 2643 | { 2644 | "name": "sebastian/comparator", 2645 | "version": "4.0.8", 2646 | "source": { 2647 | "type": "git", 2648 | "url": "https://github.com/sebastianbergmann/comparator.git", 2649 | "reference": "fa0f136dd2334583309d32b62544682ee972b51a" 2650 | }, 2651 | "dist": { 2652 | "type": "zip", 2653 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", 2654 | "reference": "fa0f136dd2334583309d32b62544682ee972b51a", 2655 | "shasum": "" 2656 | }, 2657 | "require": { 2658 | "php": ">=7.3", 2659 | "sebastian/diff": "^4.0", 2660 | "sebastian/exporter": "^4.0" 2661 | }, 2662 | "require-dev": { 2663 | "phpunit/phpunit": "^9.3" 2664 | }, 2665 | "type": "library", 2666 | "extra": { 2667 | "branch-alias": { 2668 | "dev-master": "4.0-dev" 2669 | } 2670 | }, 2671 | "autoload": { 2672 | "classmap": [ 2673 | "src/" 2674 | ] 2675 | }, 2676 | "notification-url": "https://packagist.org/downloads/", 2677 | "license": [ 2678 | "BSD-3-Clause" 2679 | ], 2680 | "authors": [ 2681 | { 2682 | "name": "Sebastian Bergmann", 2683 | "email": "sebastian@phpunit.de" 2684 | }, 2685 | { 2686 | "name": "Jeff Welch", 2687 | "email": "whatthejeff@gmail.com" 2688 | }, 2689 | { 2690 | "name": "Volker Dusch", 2691 | "email": "github@wallbash.com" 2692 | }, 2693 | { 2694 | "name": "Bernhard Schussek", 2695 | "email": "bschussek@2bepublished.at" 2696 | } 2697 | ], 2698 | "description": "Provides the functionality to compare PHP values for equality", 2699 | "homepage": "https://github.com/sebastianbergmann/comparator", 2700 | "keywords": [ 2701 | "comparator", 2702 | "compare", 2703 | "equality" 2704 | ], 2705 | "support": { 2706 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 2707 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" 2708 | }, 2709 | "funding": [ 2710 | { 2711 | "url": "https://github.com/sebastianbergmann", 2712 | "type": "github" 2713 | } 2714 | ], 2715 | "time": "2022-09-14T12:41:17+00:00" 2716 | }, 2717 | { 2718 | "name": "sebastian/complexity", 2719 | "version": "2.0.2", 2720 | "source": { 2721 | "type": "git", 2722 | "url": "https://github.com/sebastianbergmann/complexity.git", 2723 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" 2724 | }, 2725 | "dist": { 2726 | "type": "zip", 2727 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", 2728 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", 2729 | "shasum": "" 2730 | }, 2731 | "require": { 2732 | "nikic/php-parser": "^4.7", 2733 | "php": ">=7.3" 2734 | }, 2735 | "require-dev": { 2736 | "phpunit/phpunit": "^9.3" 2737 | }, 2738 | "type": "library", 2739 | "extra": { 2740 | "branch-alias": { 2741 | "dev-master": "2.0-dev" 2742 | } 2743 | }, 2744 | "autoload": { 2745 | "classmap": [ 2746 | "src/" 2747 | ] 2748 | }, 2749 | "notification-url": "https://packagist.org/downloads/", 2750 | "license": [ 2751 | "BSD-3-Clause" 2752 | ], 2753 | "authors": [ 2754 | { 2755 | "name": "Sebastian Bergmann", 2756 | "email": "sebastian@phpunit.de", 2757 | "role": "lead" 2758 | } 2759 | ], 2760 | "description": "Library for calculating the complexity of PHP code units", 2761 | "homepage": "https://github.com/sebastianbergmann/complexity", 2762 | "support": { 2763 | "issues": "https://github.com/sebastianbergmann/complexity/issues", 2764 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" 2765 | }, 2766 | "funding": [ 2767 | { 2768 | "url": "https://github.com/sebastianbergmann", 2769 | "type": "github" 2770 | } 2771 | ], 2772 | "time": "2020-10-26T15:52:27+00:00" 2773 | }, 2774 | { 2775 | "name": "sebastian/diff", 2776 | "version": "4.0.4", 2777 | "source": { 2778 | "type": "git", 2779 | "url": "https://github.com/sebastianbergmann/diff.git", 2780 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" 2781 | }, 2782 | "dist": { 2783 | "type": "zip", 2784 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", 2785 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", 2786 | "shasum": "" 2787 | }, 2788 | "require": { 2789 | "php": ">=7.3" 2790 | }, 2791 | "require-dev": { 2792 | "phpunit/phpunit": "^9.3", 2793 | "symfony/process": "^4.2 || ^5" 2794 | }, 2795 | "type": "library", 2796 | "extra": { 2797 | "branch-alias": { 2798 | "dev-master": "4.0-dev" 2799 | } 2800 | }, 2801 | "autoload": { 2802 | "classmap": [ 2803 | "src/" 2804 | ] 2805 | }, 2806 | "notification-url": "https://packagist.org/downloads/", 2807 | "license": [ 2808 | "BSD-3-Clause" 2809 | ], 2810 | "authors": [ 2811 | { 2812 | "name": "Sebastian Bergmann", 2813 | "email": "sebastian@phpunit.de" 2814 | }, 2815 | { 2816 | "name": "Kore Nordmann", 2817 | "email": "mail@kore-nordmann.de" 2818 | } 2819 | ], 2820 | "description": "Diff implementation", 2821 | "homepage": "https://github.com/sebastianbergmann/diff", 2822 | "keywords": [ 2823 | "diff", 2824 | "udiff", 2825 | "unidiff", 2826 | "unified diff" 2827 | ], 2828 | "support": { 2829 | "issues": "https://github.com/sebastianbergmann/diff/issues", 2830 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" 2831 | }, 2832 | "funding": [ 2833 | { 2834 | "url": "https://github.com/sebastianbergmann", 2835 | "type": "github" 2836 | } 2837 | ], 2838 | "time": "2020-10-26T13:10:38+00:00" 2839 | }, 2840 | { 2841 | "name": "sebastian/environment", 2842 | "version": "5.1.4", 2843 | "source": { 2844 | "type": "git", 2845 | "url": "https://github.com/sebastianbergmann/environment.git", 2846 | "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" 2847 | }, 2848 | "dist": { 2849 | "type": "zip", 2850 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", 2851 | "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", 2852 | "shasum": "" 2853 | }, 2854 | "require": { 2855 | "php": ">=7.3" 2856 | }, 2857 | "require-dev": { 2858 | "phpunit/phpunit": "^9.3" 2859 | }, 2860 | "suggest": { 2861 | "ext-posix": "*" 2862 | }, 2863 | "type": "library", 2864 | "extra": { 2865 | "branch-alias": { 2866 | "dev-master": "5.1-dev" 2867 | } 2868 | }, 2869 | "autoload": { 2870 | "classmap": [ 2871 | "src/" 2872 | ] 2873 | }, 2874 | "notification-url": "https://packagist.org/downloads/", 2875 | "license": [ 2876 | "BSD-3-Clause" 2877 | ], 2878 | "authors": [ 2879 | { 2880 | "name": "Sebastian Bergmann", 2881 | "email": "sebastian@phpunit.de" 2882 | } 2883 | ], 2884 | "description": "Provides functionality to handle HHVM/PHP environments", 2885 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2886 | "keywords": [ 2887 | "Xdebug", 2888 | "environment", 2889 | "hhvm" 2890 | ], 2891 | "support": { 2892 | "issues": "https://github.com/sebastianbergmann/environment/issues", 2893 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" 2894 | }, 2895 | "funding": [ 2896 | { 2897 | "url": "https://github.com/sebastianbergmann", 2898 | "type": "github" 2899 | } 2900 | ], 2901 | "time": "2022-04-03T09:37:03+00:00" 2902 | }, 2903 | { 2904 | "name": "sebastian/exporter", 2905 | "version": "4.0.5", 2906 | "source": { 2907 | "type": "git", 2908 | "url": "https://github.com/sebastianbergmann/exporter.git", 2909 | "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" 2910 | }, 2911 | "dist": { 2912 | "type": "zip", 2913 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", 2914 | "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", 2915 | "shasum": "" 2916 | }, 2917 | "require": { 2918 | "php": ">=7.3", 2919 | "sebastian/recursion-context": "^4.0" 2920 | }, 2921 | "require-dev": { 2922 | "ext-mbstring": "*", 2923 | "phpunit/phpunit": "^9.3" 2924 | }, 2925 | "type": "library", 2926 | "extra": { 2927 | "branch-alias": { 2928 | "dev-master": "4.0-dev" 2929 | } 2930 | }, 2931 | "autoload": { 2932 | "classmap": [ 2933 | "src/" 2934 | ] 2935 | }, 2936 | "notification-url": "https://packagist.org/downloads/", 2937 | "license": [ 2938 | "BSD-3-Clause" 2939 | ], 2940 | "authors": [ 2941 | { 2942 | "name": "Sebastian Bergmann", 2943 | "email": "sebastian@phpunit.de" 2944 | }, 2945 | { 2946 | "name": "Jeff Welch", 2947 | "email": "whatthejeff@gmail.com" 2948 | }, 2949 | { 2950 | "name": "Volker Dusch", 2951 | "email": "github@wallbash.com" 2952 | }, 2953 | { 2954 | "name": "Adam Harvey", 2955 | "email": "aharvey@php.net" 2956 | }, 2957 | { 2958 | "name": "Bernhard Schussek", 2959 | "email": "bschussek@gmail.com" 2960 | } 2961 | ], 2962 | "description": "Provides the functionality to export PHP variables for visualization", 2963 | "homepage": "https://www.github.com/sebastianbergmann/exporter", 2964 | "keywords": [ 2965 | "export", 2966 | "exporter" 2967 | ], 2968 | "support": { 2969 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 2970 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" 2971 | }, 2972 | "funding": [ 2973 | { 2974 | "url": "https://github.com/sebastianbergmann", 2975 | "type": "github" 2976 | } 2977 | ], 2978 | "time": "2022-09-14T06:03:37+00:00" 2979 | }, 2980 | { 2981 | "name": "sebastian/global-state", 2982 | "version": "5.0.5", 2983 | "source": { 2984 | "type": "git", 2985 | "url": "https://github.com/sebastianbergmann/global-state.git", 2986 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" 2987 | }, 2988 | "dist": { 2989 | "type": "zip", 2990 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", 2991 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", 2992 | "shasum": "" 2993 | }, 2994 | "require": { 2995 | "php": ">=7.3", 2996 | "sebastian/object-reflector": "^2.0", 2997 | "sebastian/recursion-context": "^4.0" 2998 | }, 2999 | "require-dev": { 3000 | "ext-dom": "*", 3001 | "phpunit/phpunit": "^9.3" 3002 | }, 3003 | "suggest": { 3004 | "ext-uopz": "*" 3005 | }, 3006 | "type": "library", 3007 | "extra": { 3008 | "branch-alias": { 3009 | "dev-master": "5.0-dev" 3010 | } 3011 | }, 3012 | "autoload": { 3013 | "classmap": [ 3014 | "src/" 3015 | ] 3016 | }, 3017 | "notification-url": "https://packagist.org/downloads/", 3018 | "license": [ 3019 | "BSD-3-Clause" 3020 | ], 3021 | "authors": [ 3022 | { 3023 | "name": "Sebastian Bergmann", 3024 | "email": "sebastian@phpunit.de" 3025 | } 3026 | ], 3027 | "description": "Snapshotting of global state", 3028 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 3029 | "keywords": [ 3030 | "global state" 3031 | ], 3032 | "support": { 3033 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 3034 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" 3035 | }, 3036 | "funding": [ 3037 | { 3038 | "url": "https://github.com/sebastianbergmann", 3039 | "type": "github" 3040 | } 3041 | ], 3042 | "time": "2022-02-14T08:28:10+00:00" 3043 | }, 3044 | { 3045 | "name": "sebastian/lines-of-code", 3046 | "version": "1.0.3", 3047 | "source": { 3048 | "type": "git", 3049 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 3050 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" 3051 | }, 3052 | "dist": { 3053 | "type": "zip", 3054 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", 3055 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", 3056 | "shasum": "" 3057 | }, 3058 | "require": { 3059 | "nikic/php-parser": "^4.6", 3060 | "php": ">=7.3" 3061 | }, 3062 | "require-dev": { 3063 | "phpunit/phpunit": "^9.3" 3064 | }, 3065 | "type": "library", 3066 | "extra": { 3067 | "branch-alias": { 3068 | "dev-master": "1.0-dev" 3069 | } 3070 | }, 3071 | "autoload": { 3072 | "classmap": [ 3073 | "src/" 3074 | ] 3075 | }, 3076 | "notification-url": "https://packagist.org/downloads/", 3077 | "license": [ 3078 | "BSD-3-Clause" 3079 | ], 3080 | "authors": [ 3081 | { 3082 | "name": "Sebastian Bergmann", 3083 | "email": "sebastian@phpunit.de", 3084 | "role": "lead" 3085 | } 3086 | ], 3087 | "description": "Library for counting the lines of code in PHP source code", 3088 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 3089 | "support": { 3090 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", 3091 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" 3092 | }, 3093 | "funding": [ 3094 | { 3095 | "url": "https://github.com/sebastianbergmann", 3096 | "type": "github" 3097 | } 3098 | ], 3099 | "time": "2020-11-28T06:42:11+00:00" 3100 | }, 3101 | { 3102 | "name": "sebastian/object-enumerator", 3103 | "version": "4.0.4", 3104 | "source": { 3105 | "type": "git", 3106 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 3107 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" 3108 | }, 3109 | "dist": { 3110 | "type": "zip", 3111 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", 3112 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", 3113 | "shasum": "" 3114 | }, 3115 | "require": { 3116 | "php": ">=7.3", 3117 | "sebastian/object-reflector": "^2.0", 3118 | "sebastian/recursion-context": "^4.0" 3119 | }, 3120 | "require-dev": { 3121 | "phpunit/phpunit": "^9.3" 3122 | }, 3123 | "type": "library", 3124 | "extra": { 3125 | "branch-alias": { 3126 | "dev-master": "4.0-dev" 3127 | } 3128 | }, 3129 | "autoload": { 3130 | "classmap": [ 3131 | "src/" 3132 | ] 3133 | }, 3134 | "notification-url": "https://packagist.org/downloads/", 3135 | "license": [ 3136 | "BSD-3-Clause" 3137 | ], 3138 | "authors": [ 3139 | { 3140 | "name": "Sebastian Bergmann", 3141 | "email": "sebastian@phpunit.de" 3142 | } 3143 | ], 3144 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 3145 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 3146 | "support": { 3147 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 3148 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" 3149 | }, 3150 | "funding": [ 3151 | { 3152 | "url": "https://github.com/sebastianbergmann", 3153 | "type": "github" 3154 | } 3155 | ], 3156 | "time": "2020-10-26T13:12:34+00:00" 3157 | }, 3158 | { 3159 | "name": "sebastian/object-reflector", 3160 | "version": "2.0.4", 3161 | "source": { 3162 | "type": "git", 3163 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 3164 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" 3165 | }, 3166 | "dist": { 3167 | "type": "zip", 3168 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 3169 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 3170 | "shasum": "" 3171 | }, 3172 | "require": { 3173 | "php": ">=7.3" 3174 | }, 3175 | "require-dev": { 3176 | "phpunit/phpunit": "^9.3" 3177 | }, 3178 | "type": "library", 3179 | "extra": { 3180 | "branch-alias": { 3181 | "dev-master": "2.0-dev" 3182 | } 3183 | }, 3184 | "autoload": { 3185 | "classmap": [ 3186 | "src/" 3187 | ] 3188 | }, 3189 | "notification-url": "https://packagist.org/downloads/", 3190 | "license": [ 3191 | "BSD-3-Clause" 3192 | ], 3193 | "authors": [ 3194 | { 3195 | "name": "Sebastian Bergmann", 3196 | "email": "sebastian@phpunit.de" 3197 | } 3198 | ], 3199 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 3200 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 3201 | "support": { 3202 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 3203 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" 3204 | }, 3205 | "funding": [ 3206 | { 3207 | "url": "https://github.com/sebastianbergmann", 3208 | "type": "github" 3209 | } 3210 | ], 3211 | "time": "2020-10-26T13:14:26+00:00" 3212 | }, 3213 | { 3214 | "name": "sebastian/recursion-context", 3215 | "version": "4.0.4", 3216 | "source": { 3217 | "type": "git", 3218 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 3219 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" 3220 | }, 3221 | "dist": { 3222 | "type": "zip", 3223 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", 3224 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", 3225 | "shasum": "" 3226 | }, 3227 | "require": { 3228 | "php": ">=7.3" 3229 | }, 3230 | "require-dev": { 3231 | "phpunit/phpunit": "^9.3" 3232 | }, 3233 | "type": "library", 3234 | "extra": { 3235 | "branch-alias": { 3236 | "dev-master": "4.0-dev" 3237 | } 3238 | }, 3239 | "autoload": { 3240 | "classmap": [ 3241 | "src/" 3242 | ] 3243 | }, 3244 | "notification-url": "https://packagist.org/downloads/", 3245 | "license": [ 3246 | "BSD-3-Clause" 3247 | ], 3248 | "authors": [ 3249 | { 3250 | "name": "Sebastian Bergmann", 3251 | "email": "sebastian@phpunit.de" 3252 | }, 3253 | { 3254 | "name": "Jeff Welch", 3255 | "email": "whatthejeff@gmail.com" 3256 | }, 3257 | { 3258 | "name": "Adam Harvey", 3259 | "email": "aharvey@php.net" 3260 | } 3261 | ], 3262 | "description": "Provides functionality to recursively process PHP variables", 3263 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 3264 | "support": { 3265 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 3266 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" 3267 | }, 3268 | "funding": [ 3269 | { 3270 | "url": "https://github.com/sebastianbergmann", 3271 | "type": "github" 3272 | } 3273 | ], 3274 | "time": "2020-10-26T13:17:30+00:00" 3275 | }, 3276 | { 3277 | "name": "sebastian/resource-operations", 3278 | "version": "3.0.3", 3279 | "source": { 3280 | "type": "git", 3281 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 3282 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" 3283 | }, 3284 | "dist": { 3285 | "type": "zip", 3286 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 3287 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 3288 | "shasum": "" 3289 | }, 3290 | "require": { 3291 | "php": ">=7.3" 3292 | }, 3293 | "require-dev": { 3294 | "phpunit/phpunit": "^9.0" 3295 | }, 3296 | "type": "library", 3297 | "extra": { 3298 | "branch-alias": { 3299 | "dev-master": "3.0-dev" 3300 | } 3301 | }, 3302 | "autoload": { 3303 | "classmap": [ 3304 | "src/" 3305 | ] 3306 | }, 3307 | "notification-url": "https://packagist.org/downloads/", 3308 | "license": [ 3309 | "BSD-3-Clause" 3310 | ], 3311 | "authors": [ 3312 | { 3313 | "name": "Sebastian Bergmann", 3314 | "email": "sebastian@phpunit.de" 3315 | } 3316 | ], 3317 | "description": "Provides a list of PHP built-in functions that operate on resources", 3318 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 3319 | "support": { 3320 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues", 3321 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" 3322 | }, 3323 | "funding": [ 3324 | { 3325 | "url": "https://github.com/sebastianbergmann", 3326 | "type": "github" 3327 | } 3328 | ], 3329 | "time": "2020-09-28T06:45:17+00:00" 3330 | }, 3331 | { 3332 | "name": "sebastian/type", 3333 | "version": "3.2.0", 3334 | "source": { 3335 | "type": "git", 3336 | "url": "https://github.com/sebastianbergmann/type.git", 3337 | "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" 3338 | }, 3339 | "dist": { 3340 | "type": "zip", 3341 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", 3342 | "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", 3343 | "shasum": "" 3344 | }, 3345 | "require": { 3346 | "php": ">=7.3" 3347 | }, 3348 | "require-dev": { 3349 | "phpunit/phpunit": "^9.5" 3350 | }, 3351 | "type": "library", 3352 | "extra": { 3353 | "branch-alias": { 3354 | "dev-master": "3.2-dev" 3355 | } 3356 | }, 3357 | "autoload": { 3358 | "classmap": [ 3359 | "src/" 3360 | ] 3361 | }, 3362 | "notification-url": "https://packagist.org/downloads/", 3363 | "license": [ 3364 | "BSD-3-Clause" 3365 | ], 3366 | "authors": [ 3367 | { 3368 | "name": "Sebastian Bergmann", 3369 | "email": "sebastian@phpunit.de", 3370 | "role": "lead" 3371 | } 3372 | ], 3373 | "description": "Collection of value objects that represent the types of the PHP type system", 3374 | "homepage": "https://github.com/sebastianbergmann/type", 3375 | "support": { 3376 | "issues": "https://github.com/sebastianbergmann/type/issues", 3377 | "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" 3378 | }, 3379 | "funding": [ 3380 | { 3381 | "url": "https://github.com/sebastianbergmann", 3382 | "type": "github" 3383 | } 3384 | ], 3385 | "time": "2022-09-12T14:47:03+00:00" 3386 | }, 3387 | { 3388 | "name": "sebastian/version", 3389 | "version": "3.0.2", 3390 | "source": { 3391 | "type": "git", 3392 | "url": "https://github.com/sebastianbergmann/version.git", 3393 | "reference": "c6c1022351a901512170118436c764e473f6de8c" 3394 | }, 3395 | "dist": { 3396 | "type": "zip", 3397 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", 3398 | "reference": "c6c1022351a901512170118436c764e473f6de8c", 3399 | "shasum": "" 3400 | }, 3401 | "require": { 3402 | "php": ">=7.3" 3403 | }, 3404 | "type": "library", 3405 | "extra": { 3406 | "branch-alias": { 3407 | "dev-master": "3.0-dev" 3408 | } 3409 | }, 3410 | "autoload": { 3411 | "classmap": [ 3412 | "src/" 3413 | ] 3414 | }, 3415 | "notification-url": "https://packagist.org/downloads/", 3416 | "license": [ 3417 | "BSD-3-Clause" 3418 | ], 3419 | "authors": [ 3420 | { 3421 | "name": "Sebastian Bergmann", 3422 | "email": "sebastian@phpunit.de", 3423 | "role": "lead" 3424 | } 3425 | ], 3426 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 3427 | "homepage": "https://github.com/sebastianbergmann/version", 3428 | "support": { 3429 | "issues": "https://github.com/sebastianbergmann/version/issues", 3430 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" 3431 | }, 3432 | "funding": [ 3433 | { 3434 | "url": "https://github.com/sebastianbergmann", 3435 | "type": "github" 3436 | } 3437 | ], 3438 | "time": "2020-09-28T06:39:44+00:00" 3439 | }, 3440 | { 3441 | "name": "spatie/array-to-xml", 3442 | "version": "2.17.1", 3443 | "source": { 3444 | "type": "git", 3445 | "url": "https://github.com/spatie/array-to-xml.git", 3446 | "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46" 3447 | }, 3448 | "dist": { 3449 | "type": "zip", 3450 | "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/5cbec9c6ab17e320c58a259f0cebe88bde4a7c46", 3451 | "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46", 3452 | "shasum": "" 3453 | }, 3454 | "require": { 3455 | "ext-dom": "*", 3456 | "php": "^7.4|^8.0" 3457 | }, 3458 | "require-dev": { 3459 | "mockery/mockery": "^1.2", 3460 | "pestphp/pest": "^1.21", 3461 | "phpunit/phpunit": "^9.0", 3462 | "spatie/pest-plugin-snapshots": "^1.1" 3463 | }, 3464 | "type": "library", 3465 | "autoload": { 3466 | "psr-4": { 3467 | "Spatie\\ArrayToXml\\": "src" 3468 | } 3469 | }, 3470 | "notification-url": "https://packagist.org/downloads/", 3471 | "license": [ 3472 | "MIT" 3473 | ], 3474 | "authors": [ 3475 | { 3476 | "name": "Freek Van der Herten", 3477 | "email": "freek@spatie.be", 3478 | "homepage": "https://freek.dev", 3479 | "role": "Developer" 3480 | } 3481 | ], 3482 | "description": "Convert an array to xml", 3483 | "homepage": "https://github.com/spatie/array-to-xml", 3484 | "keywords": [ 3485 | "array", 3486 | "convert", 3487 | "xml" 3488 | ], 3489 | "support": { 3490 | "source": "https://github.com/spatie/array-to-xml/tree/2.17.1" 3491 | }, 3492 | "funding": [ 3493 | { 3494 | "url": "https://spatie.be/open-source/support-us", 3495 | "type": "custom" 3496 | }, 3497 | { 3498 | "url": "https://github.com/spatie", 3499 | "type": "github" 3500 | } 3501 | ], 3502 | "time": "2022-12-26T08:22:07+00:00" 3503 | }, 3504 | { 3505 | "name": "symfony/console", 3506 | "version": "v6.2.5", 3507 | "source": { 3508 | "type": "git", 3509 | "url": "https://github.com/symfony/console.git", 3510 | "reference": "3e294254f2191762c1d137aed4b94e966965e985" 3511 | }, 3512 | "dist": { 3513 | "type": "zip", 3514 | "url": "https://api.github.com/repos/symfony/console/zipball/3e294254f2191762c1d137aed4b94e966965e985", 3515 | "reference": "3e294254f2191762c1d137aed4b94e966965e985", 3516 | "shasum": "" 3517 | }, 3518 | "require": { 3519 | "php": ">=8.1", 3520 | "symfony/deprecation-contracts": "^2.1|^3", 3521 | "symfony/polyfill-mbstring": "~1.0", 3522 | "symfony/service-contracts": "^1.1|^2|^3", 3523 | "symfony/string": "^5.4|^6.0" 3524 | }, 3525 | "conflict": { 3526 | "symfony/dependency-injection": "<5.4", 3527 | "symfony/dotenv": "<5.4", 3528 | "symfony/event-dispatcher": "<5.4", 3529 | "symfony/lock": "<5.4", 3530 | "symfony/process": "<5.4" 3531 | }, 3532 | "provide": { 3533 | "psr/log-implementation": "1.0|2.0|3.0" 3534 | }, 3535 | "require-dev": { 3536 | "psr/log": "^1|^2|^3", 3537 | "symfony/config": "^5.4|^6.0", 3538 | "symfony/dependency-injection": "^5.4|^6.0", 3539 | "symfony/event-dispatcher": "^5.4|^6.0", 3540 | "symfony/lock": "^5.4|^6.0", 3541 | "symfony/process": "^5.4|^6.0", 3542 | "symfony/var-dumper": "^5.4|^6.0" 3543 | }, 3544 | "suggest": { 3545 | "psr/log": "For using the console logger", 3546 | "symfony/event-dispatcher": "", 3547 | "symfony/lock": "", 3548 | "symfony/process": "" 3549 | }, 3550 | "type": "library", 3551 | "autoload": { 3552 | "psr-4": { 3553 | "Symfony\\Component\\Console\\": "" 3554 | }, 3555 | "exclude-from-classmap": [ 3556 | "/Tests/" 3557 | ] 3558 | }, 3559 | "notification-url": "https://packagist.org/downloads/", 3560 | "license": [ 3561 | "MIT" 3562 | ], 3563 | "authors": [ 3564 | { 3565 | "name": "Fabien Potencier", 3566 | "email": "fabien@symfony.com" 3567 | }, 3568 | { 3569 | "name": "Symfony Community", 3570 | "homepage": "https://symfony.com/contributors" 3571 | } 3572 | ], 3573 | "description": "Eases the creation of beautiful and testable command line interfaces", 3574 | "homepage": "https://symfony.com", 3575 | "keywords": [ 3576 | "cli", 3577 | "command line", 3578 | "console", 3579 | "terminal" 3580 | ], 3581 | "support": { 3582 | "source": "https://github.com/symfony/console/tree/v6.2.5" 3583 | }, 3584 | "funding": [ 3585 | { 3586 | "url": "https://symfony.com/sponsor", 3587 | "type": "custom" 3588 | }, 3589 | { 3590 | "url": "https://github.com/fabpot", 3591 | "type": "github" 3592 | }, 3593 | { 3594 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3595 | "type": "tidelift" 3596 | } 3597 | ], 3598 | "time": "2023-01-01T08:38:09+00:00" 3599 | }, 3600 | { 3601 | "name": "symfony/deprecation-contracts", 3602 | "version": "v3.2.0", 3603 | "source": { 3604 | "type": "git", 3605 | "url": "https://github.com/symfony/deprecation-contracts.git", 3606 | "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" 3607 | }, 3608 | "dist": { 3609 | "type": "zip", 3610 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", 3611 | "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", 3612 | "shasum": "" 3613 | }, 3614 | "require": { 3615 | "php": ">=8.1" 3616 | }, 3617 | "type": "library", 3618 | "extra": { 3619 | "branch-alias": { 3620 | "dev-main": "3.3-dev" 3621 | }, 3622 | "thanks": { 3623 | "name": "symfony/contracts", 3624 | "url": "https://github.com/symfony/contracts" 3625 | } 3626 | }, 3627 | "autoload": { 3628 | "files": [ 3629 | "function.php" 3630 | ] 3631 | }, 3632 | "notification-url": "https://packagist.org/downloads/", 3633 | "license": [ 3634 | "MIT" 3635 | ], 3636 | "authors": [ 3637 | { 3638 | "name": "Nicolas Grekas", 3639 | "email": "p@tchwork.com" 3640 | }, 3641 | { 3642 | "name": "Symfony Community", 3643 | "homepage": "https://symfony.com/contributors" 3644 | } 3645 | ], 3646 | "description": "A generic function and convention to trigger deprecation notices", 3647 | "homepage": "https://symfony.com", 3648 | "support": { 3649 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" 3650 | }, 3651 | "funding": [ 3652 | { 3653 | "url": "https://symfony.com/sponsor", 3654 | "type": "custom" 3655 | }, 3656 | { 3657 | "url": "https://github.com/fabpot", 3658 | "type": "github" 3659 | }, 3660 | { 3661 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3662 | "type": "tidelift" 3663 | } 3664 | ], 3665 | "time": "2022-11-25T10:21:52+00:00" 3666 | }, 3667 | { 3668 | "name": "symfony/event-dispatcher", 3669 | "version": "v6.2.5", 3670 | "source": { 3671 | "type": "git", 3672 | "url": "https://github.com/symfony/event-dispatcher.git", 3673 | "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68" 3674 | }, 3675 | "dist": { 3676 | "type": "zip", 3677 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", 3678 | "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", 3679 | "shasum": "" 3680 | }, 3681 | "require": { 3682 | "php": ">=8.1", 3683 | "symfony/event-dispatcher-contracts": "^2|^3" 3684 | }, 3685 | "conflict": { 3686 | "symfony/dependency-injection": "<5.4" 3687 | }, 3688 | "provide": { 3689 | "psr/event-dispatcher-implementation": "1.0", 3690 | "symfony/event-dispatcher-implementation": "2.0|3.0" 3691 | }, 3692 | "require-dev": { 3693 | "psr/log": "^1|^2|^3", 3694 | "symfony/config": "^5.4|^6.0", 3695 | "symfony/dependency-injection": "^5.4|^6.0", 3696 | "symfony/error-handler": "^5.4|^6.0", 3697 | "symfony/expression-language": "^5.4|^6.0", 3698 | "symfony/http-foundation": "^5.4|^6.0", 3699 | "symfony/service-contracts": "^1.1|^2|^3", 3700 | "symfony/stopwatch": "^5.4|^6.0" 3701 | }, 3702 | "suggest": { 3703 | "symfony/dependency-injection": "", 3704 | "symfony/http-kernel": "" 3705 | }, 3706 | "type": "library", 3707 | "autoload": { 3708 | "psr-4": { 3709 | "Symfony\\Component\\EventDispatcher\\": "" 3710 | }, 3711 | "exclude-from-classmap": [ 3712 | "/Tests/" 3713 | ] 3714 | }, 3715 | "notification-url": "https://packagist.org/downloads/", 3716 | "license": [ 3717 | "MIT" 3718 | ], 3719 | "authors": [ 3720 | { 3721 | "name": "Fabien Potencier", 3722 | "email": "fabien@symfony.com" 3723 | }, 3724 | { 3725 | "name": "Symfony Community", 3726 | "homepage": "https://symfony.com/contributors" 3727 | } 3728 | ], 3729 | "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", 3730 | "homepage": "https://symfony.com", 3731 | "support": { 3732 | "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.5" 3733 | }, 3734 | "funding": [ 3735 | { 3736 | "url": "https://symfony.com/sponsor", 3737 | "type": "custom" 3738 | }, 3739 | { 3740 | "url": "https://github.com/fabpot", 3741 | "type": "github" 3742 | }, 3743 | { 3744 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3745 | "type": "tidelift" 3746 | } 3747 | ], 3748 | "time": "2023-01-01T08:38:09+00:00" 3749 | }, 3750 | { 3751 | "name": "symfony/event-dispatcher-contracts", 3752 | "version": "v3.2.0", 3753 | "source": { 3754 | "type": "git", 3755 | "url": "https://github.com/symfony/event-dispatcher-contracts.git", 3756 | "reference": "0782b0b52a737a05b4383d0df35a474303cabdae" 3757 | }, 3758 | "dist": { 3759 | "type": "zip", 3760 | "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae", 3761 | "reference": "0782b0b52a737a05b4383d0df35a474303cabdae", 3762 | "shasum": "" 3763 | }, 3764 | "require": { 3765 | "php": ">=8.1", 3766 | "psr/event-dispatcher": "^1" 3767 | }, 3768 | "suggest": { 3769 | "symfony/event-dispatcher-implementation": "" 3770 | }, 3771 | "type": "library", 3772 | "extra": { 3773 | "branch-alias": { 3774 | "dev-main": "3.3-dev" 3775 | }, 3776 | "thanks": { 3777 | "name": "symfony/contracts", 3778 | "url": "https://github.com/symfony/contracts" 3779 | } 3780 | }, 3781 | "autoload": { 3782 | "psr-4": { 3783 | "Symfony\\Contracts\\EventDispatcher\\": "" 3784 | } 3785 | }, 3786 | "notification-url": "https://packagist.org/downloads/", 3787 | "license": [ 3788 | "MIT" 3789 | ], 3790 | "authors": [ 3791 | { 3792 | "name": "Nicolas Grekas", 3793 | "email": "p@tchwork.com" 3794 | }, 3795 | { 3796 | "name": "Symfony Community", 3797 | "homepage": "https://symfony.com/contributors" 3798 | } 3799 | ], 3800 | "description": "Generic abstractions related to dispatching event", 3801 | "homepage": "https://symfony.com", 3802 | "keywords": [ 3803 | "abstractions", 3804 | "contracts", 3805 | "decoupling", 3806 | "interfaces", 3807 | "interoperability", 3808 | "standards" 3809 | ], 3810 | "support": { 3811 | "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0" 3812 | }, 3813 | "funding": [ 3814 | { 3815 | "url": "https://symfony.com/sponsor", 3816 | "type": "custom" 3817 | }, 3818 | { 3819 | "url": "https://github.com/fabpot", 3820 | "type": "github" 3821 | }, 3822 | { 3823 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3824 | "type": "tidelift" 3825 | } 3826 | ], 3827 | "time": "2022-11-25T10:21:52+00:00" 3828 | }, 3829 | { 3830 | "name": "symfony/filesystem", 3831 | "version": "v6.2.5", 3832 | "source": { 3833 | "type": "git", 3834 | "url": "https://github.com/symfony/filesystem.git", 3835 | "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593" 3836 | }, 3837 | "dist": { 3838 | "type": "zip", 3839 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/e59e8a4006afd7f5654786a83b4fcb8da98f4593", 3840 | "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593", 3841 | "shasum": "" 3842 | }, 3843 | "require": { 3844 | "php": ">=8.1", 3845 | "symfony/polyfill-ctype": "~1.8", 3846 | "symfony/polyfill-mbstring": "~1.8" 3847 | }, 3848 | "type": "library", 3849 | "autoload": { 3850 | "psr-4": { 3851 | "Symfony\\Component\\Filesystem\\": "" 3852 | }, 3853 | "exclude-from-classmap": [ 3854 | "/Tests/" 3855 | ] 3856 | }, 3857 | "notification-url": "https://packagist.org/downloads/", 3858 | "license": [ 3859 | "MIT" 3860 | ], 3861 | "authors": [ 3862 | { 3863 | "name": "Fabien Potencier", 3864 | "email": "fabien@symfony.com" 3865 | }, 3866 | { 3867 | "name": "Symfony Community", 3868 | "homepage": "https://symfony.com/contributors" 3869 | } 3870 | ], 3871 | "description": "Provides basic utilities for the filesystem", 3872 | "homepage": "https://symfony.com", 3873 | "support": { 3874 | "source": "https://github.com/symfony/filesystem/tree/v6.2.5" 3875 | }, 3876 | "funding": [ 3877 | { 3878 | "url": "https://symfony.com/sponsor", 3879 | "type": "custom" 3880 | }, 3881 | { 3882 | "url": "https://github.com/fabpot", 3883 | "type": "github" 3884 | }, 3885 | { 3886 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3887 | "type": "tidelift" 3888 | } 3889 | ], 3890 | "time": "2023-01-20T17:45:48+00:00" 3891 | }, 3892 | { 3893 | "name": "symfony/finder", 3894 | "version": "v6.2.5", 3895 | "source": { 3896 | "type": "git", 3897 | "url": "https://github.com/symfony/finder.git", 3898 | "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c" 3899 | }, 3900 | "dist": { 3901 | "type": "zip", 3902 | "url": "https://api.github.com/repos/symfony/finder/zipball/c90dc446976a612e3312a97a6ec0069ab0c2099c", 3903 | "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c", 3904 | "shasum": "" 3905 | }, 3906 | "require": { 3907 | "php": ">=8.1" 3908 | }, 3909 | "require-dev": { 3910 | "symfony/filesystem": "^6.0" 3911 | }, 3912 | "type": "library", 3913 | "autoload": { 3914 | "psr-4": { 3915 | "Symfony\\Component\\Finder\\": "" 3916 | }, 3917 | "exclude-from-classmap": [ 3918 | "/Tests/" 3919 | ] 3920 | }, 3921 | "notification-url": "https://packagist.org/downloads/", 3922 | "license": [ 3923 | "MIT" 3924 | ], 3925 | "authors": [ 3926 | { 3927 | "name": "Fabien Potencier", 3928 | "email": "fabien@symfony.com" 3929 | }, 3930 | { 3931 | "name": "Symfony Community", 3932 | "homepage": "https://symfony.com/contributors" 3933 | } 3934 | ], 3935 | "description": "Finds files and directories via an intuitive fluent interface", 3936 | "homepage": "https://symfony.com", 3937 | "support": { 3938 | "source": "https://github.com/symfony/finder/tree/v6.2.5" 3939 | }, 3940 | "funding": [ 3941 | { 3942 | "url": "https://symfony.com/sponsor", 3943 | "type": "custom" 3944 | }, 3945 | { 3946 | "url": "https://github.com/fabpot", 3947 | "type": "github" 3948 | }, 3949 | { 3950 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3951 | "type": "tidelift" 3952 | } 3953 | ], 3954 | "time": "2023-01-20T17:45:48+00:00" 3955 | }, 3956 | { 3957 | "name": "symfony/options-resolver", 3958 | "version": "v6.2.5", 3959 | "source": { 3960 | "type": "git", 3961 | "url": "https://github.com/symfony/options-resolver.git", 3962 | "reference": "e8324d44f5af99ec2ccec849934a242f64458f86" 3963 | }, 3964 | "dist": { 3965 | "type": "zip", 3966 | "url": "https://api.github.com/repos/symfony/options-resolver/zipball/e8324d44f5af99ec2ccec849934a242f64458f86", 3967 | "reference": "e8324d44f5af99ec2ccec849934a242f64458f86", 3968 | "shasum": "" 3969 | }, 3970 | "require": { 3971 | "php": ">=8.1", 3972 | "symfony/deprecation-contracts": "^2.1|^3" 3973 | }, 3974 | "type": "library", 3975 | "autoload": { 3976 | "psr-4": { 3977 | "Symfony\\Component\\OptionsResolver\\": "" 3978 | }, 3979 | "exclude-from-classmap": [ 3980 | "/Tests/" 3981 | ] 3982 | }, 3983 | "notification-url": "https://packagist.org/downloads/", 3984 | "license": [ 3985 | "MIT" 3986 | ], 3987 | "authors": [ 3988 | { 3989 | "name": "Fabien Potencier", 3990 | "email": "fabien@symfony.com" 3991 | }, 3992 | { 3993 | "name": "Symfony Community", 3994 | "homepage": "https://symfony.com/contributors" 3995 | } 3996 | ], 3997 | "description": "Provides an improved replacement for the array_replace PHP function", 3998 | "homepage": "https://symfony.com", 3999 | "keywords": [ 4000 | "config", 4001 | "configuration", 4002 | "options" 4003 | ], 4004 | "support": { 4005 | "source": "https://github.com/symfony/options-resolver/tree/v6.2.5" 4006 | }, 4007 | "funding": [ 4008 | { 4009 | "url": "https://symfony.com/sponsor", 4010 | "type": "custom" 4011 | }, 4012 | { 4013 | "url": "https://github.com/fabpot", 4014 | "type": "github" 4015 | }, 4016 | { 4017 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4018 | "type": "tidelift" 4019 | } 4020 | ], 4021 | "time": "2023-01-01T08:38:09+00:00" 4022 | }, 4023 | { 4024 | "name": "symfony/polyfill-ctype", 4025 | "version": "v1.27.0", 4026 | "source": { 4027 | "type": "git", 4028 | "url": "https://github.com/symfony/polyfill-ctype.git", 4029 | "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" 4030 | }, 4031 | "dist": { 4032 | "type": "zip", 4033 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", 4034 | "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", 4035 | "shasum": "" 4036 | }, 4037 | "require": { 4038 | "php": ">=7.1" 4039 | }, 4040 | "provide": { 4041 | "ext-ctype": "*" 4042 | }, 4043 | "suggest": { 4044 | "ext-ctype": "For best performance" 4045 | }, 4046 | "type": "library", 4047 | "extra": { 4048 | "branch-alias": { 4049 | "dev-main": "1.27-dev" 4050 | }, 4051 | "thanks": { 4052 | "name": "symfony/polyfill", 4053 | "url": "https://github.com/symfony/polyfill" 4054 | } 4055 | }, 4056 | "autoload": { 4057 | "files": [ 4058 | "bootstrap.php" 4059 | ], 4060 | "psr-4": { 4061 | "Symfony\\Polyfill\\Ctype\\": "" 4062 | } 4063 | }, 4064 | "notification-url": "https://packagist.org/downloads/", 4065 | "license": [ 4066 | "MIT" 4067 | ], 4068 | "authors": [ 4069 | { 4070 | "name": "Gert de Pagter", 4071 | "email": "BackEndTea@gmail.com" 4072 | }, 4073 | { 4074 | "name": "Symfony Community", 4075 | "homepage": "https://symfony.com/contributors" 4076 | } 4077 | ], 4078 | "description": "Symfony polyfill for ctype functions", 4079 | "homepage": "https://symfony.com", 4080 | "keywords": [ 4081 | "compatibility", 4082 | "ctype", 4083 | "polyfill", 4084 | "portable" 4085 | ], 4086 | "support": { 4087 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" 4088 | }, 4089 | "funding": [ 4090 | { 4091 | "url": "https://symfony.com/sponsor", 4092 | "type": "custom" 4093 | }, 4094 | { 4095 | "url": "https://github.com/fabpot", 4096 | "type": "github" 4097 | }, 4098 | { 4099 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4100 | "type": "tidelift" 4101 | } 4102 | ], 4103 | "time": "2022-11-03T14:55:06+00:00" 4104 | }, 4105 | { 4106 | "name": "symfony/polyfill-intl-grapheme", 4107 | "version": "v1.27.0", 4108 | "source": { 4109 | "type": "git", 4110 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 4111 | "reference": "511a08c03c1960e08a883f4cffcacd219b758354" 4112 | }, 4113 | "dist": { 4114 | "type": "zip", 4115 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", 4116 | "reference": "511a08c03c1960e08a883f4cffcacd219b758354", 4117 | "shasum": "" 4118 | }, 4119 | "require": { 4120 | "php": ">=7.1" 4121 | }, 4122 | "suggest": { 4123 | "ext-intl": "For best performance" 4124 | }, 4125 | "type": "library", 4126 | "extra": { 4127 | "branch-alias": { 4128 | "dev-main": "1.27-dev" 4129 | }, 4130 | "thanks": { 4131 | "name": "symfony/polyfill", 4132 | "url": "https://github.com/symfony/polyfill" 4133 | } 4134 | }, 4135 | "autoload": { 4136 | "files": [ 4137 | "bootstrap.php" 4138 | ], 4139 | "psr-4": { 4140 | "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 4141 | } 4142 | }, 4143 | "notification-url": "https://packagist.org/downloads/", 4144 | "license": [ 4145 | "MIT" 4146 | ], 4147 | "authors": [ 4148 | { 4149 | "name": "Nicolas Grekas", 4150 | "email": "p@tchwork.com" 4151 | }, 4152 | { 4153 | "name": "Symfony Community", 4154 | "homepage": "https://symfony.com/contributors" 4155 | } 4156 | ], 4157 | "description": "Symfony polyfill for intl's grapheme_* functions", 4158 | "homepage": "https://symfony.com", 4159 | "keywords": [ 4160 | "compatibility", 4161 | "grapheme", 4162 | "intl", 4163 | "polyfill", 4164 | "portable", 4165 | "shim" 4166 | ], 4167 | "support": { 4168 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" 4169 | }, 4170 | "funding": [ 4171 | { 4172 | "url": "https://symfony.com/sponsor", 4173 | "type": "custom" 4174 | }, 4175 | { 4176 | "url": "https://github.com/fabpot", 4177 | "type": "github" 4178 | }, 4179 | { 4180 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4181 | "type": "tidelift" 4182 | } 4183 | ], 4184 | "time": "2022-11-03T14:55:06+00:00" 4185 | }, 4186 | { 4187 | "name": "symfony/polyfill-intl-normalizer", 4188 | "version": "v1.27.0", 4189 | "source": { 4190 | "type": "git", 4191 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 4192 | "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" 4193 | }, 4194 | "dist": { 4195 | "type": "zip", 4196 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", 4197 | "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", 4198 | "shasum": "" 4199 | }, 4200 | "require": { 4201 | "php": ">=7.1" 4202 | }, 4203 | "suggest": { 4204 | "ext-intl": "For best performance" 4205 | }, 4206 | "type": "library", 4207 | "extra": { 4208 | "branch-alias": { 4209 | "dev-main": "1.27-dev" 4210 | }, 4211 | "thanks": { 4212 | "name": "symfony/polyfill", 4213 | "url": "https://github.com/symfony/polyfill" 4214 | } 4215 | }, 4216 | "autoload": { 4217 | "files": [ 4218 | "bootstrap.php" 4219 | ], 4220 | "psr-4": { 4221 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 4222 | }, 4223 | "classmap": [ 4224 | "Resources/stubs" 4225 | ] 4226 | }, 4227 | "notification-url": "https://packagist.org/downloads/", 4228 | "license": [ 4229 | "MIT" 4230 | ], 4231 | "authors": [ 4232 | { 4233 | "name": "Nicolas Grekas", 4234 | "email": "p@tchwork.com" 4235 | }, 4236 | { 4237 | "name": "Symfony Community", 4238 | "homepage": "https://symfony.com/contributors" 4239 | } 4240 | ], 4241 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 4242 | "homepage": "https://symfony.com", 4243 | "keywords": [ 4244 | "compatibility", 4245 | "intl", 4246 | "normalizer", 4247 | "polyfill", 4248 | "portable", 4249 | "shim" 4250 | ], 4251 | "support": { 4252 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" 4253 | }, 4254 | "funding": [ 4255 | { 4256 | "url": "https://symfony.com/sponsor", 4257 | "type": "custom" 4258 | }, 4259 | { 4260 | "url": "https://github.com/fabpot", 4261 | "type": "github" 4262 | }, 4263 | { 4264 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4265 | "type": "tidelift" 4266 | } 4267 | ], 4268 | "time": "2022-11-03T14:55:06+00:00" 4269 | }, 4270 | { 4271 | "name": "symfony/polyfill-mbstring", 4272 | "version": "v1.27.0", 4273 | "source": { 4274 | "type": "git", 4275 | "url": "https://github.com/symfony/polyfill-mbstring.git", 4276 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" 4277 | }, 4278 | "dist": { 4279 | "type": "zip", 4280 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", 4281 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", 4282 | "shasum": "" 4283 | }, 4284 | "require": { 4285 | "php": ">=7.1" 4286 | }, 4287 | "provide": { 4288 | "ext-mbstring": "*" 4289 | }, 4290 | "suggest": { 4291 | "ext-mbstring": "For best performance" 4292 | }, 4293 | "type": "library", 4294 | "extra": { 4295 | "branch-alias": { 4296 | "dev-main": "1.27-dev" 4297 | }, 4298 | "thanks": { 4299 | "name": "symfony/polyfill", 4300 | "url": "https://github.com/symfony/polyfill" 4301 | } 4302 | }, 4303 | "autoload": { 4304 | "files": [ 4305 | "bootstrap.php" 4306 | ], 4307 | "psr-4": { 4308 | "Symfony\\Polyfill\\Mbstring\\": "" 4309 | } 4310 | }, 4311 | "notification-url": "https://packagist.org/downloads/", 4312 | "license": [ 4313 | "MIT" 4314 | ], 4315 | "authors": [ 4316 | { 4317 | "name": "Nicolas Grekas", 4318 | "email": "p@tchwork.com" 4319 | }, 4320 | { 4321 | "name": "Symfony Community", 4322 | "homepage": "https://symfony.com/contributors" 4323 | } 4324 | ], 4325 | "description": "Symfony polyfill for the Mbstring extension", 4326 | "homepage": "https://symfony.com", 4327 | "keywords": [ 4328 | "compatibility", 4329 | "mbstring", 4330 | "polyfill", 4331 | "portable", 4332 | "shim" 4333 | ], 4334 | "support": { 4335 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" 4336 | }, 4337 | "funding": [ 4338 | { 4339 | "url": "https://symfony.com/sponsor", 4340 | "type": "custom" 4341 | }, 4342 | { 4343 | "url": "https://github.com/fabpot", 4344 | "type": "github" 4345 | }, 4346 | { 4347 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4348 | "type": "tidelift" 4349 | } 4350 | ], 4351 | "time": "2022-11-03T14:55:06+00:00" 4352 | }, 4353 | { 4354 | "name": "symfony/polyfill-php80", 4355 | "version": "v1.27.0", 4356 | "source": { 4357 | "type": "git", 4358 | "url": "https://github.com/symfony/polyfill-php80.git", 4359 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" 4360 | }, 4361 | "dist": { 4362 | "type": "zip", 4363 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", 4364 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", 4365 | "shasum": "" 4366 | }, 4367 | "require": { 4368 | "php": ">=7.1" 4369 | }, 4370 | "type": "library", 4371 | "extra": { 4372 | "branch-alias": { 4373 | "dev-main": "1.27-dev" 4374 | }, 4375 | "thanks": { 4376 | "name": "symfony/polyfill", 4377 | "url": "https://github.com/symfony/polyfill" 4378 | } 4379 | }, 4380 | "autoload": { 4381 | "files": [ 4382 | "bootstrap.php" 4383 | ], 4384 | "psr-4": { 4385 | "Symfony\\Polyfill\\Php80\\": "" 4386 | }, 4387 | "classmap": [ 4388 | "Resources/stubs" 4389 | ] 4390 | }, 4391 | "notification-url": "https://packagist.org/downloads/", 4392 | "license": [ 4393 | "MIT" 4394 | ], 4395 | "authors": [ 4396 | { 4397 | "name": "Ion Bazan", 4398 | "email": "ion.bazan@gmail.com" 4399 | }, 4400 | { 4401 | "name": "Nicolas Grekas", 4402 | "email": "p@tchwork.com" 4403 | }, 4404 | { 4405 | "name": "Symfony Community", 4406 | "homepage": "https://symfony.com/contributors" 4407 | } 4408 | ], 4409 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 4410 | "homepage": "https://symfony.com", 4411 | "keywords": [ 4412 | "compatibility", 4413 | "polyfill", 4414 | "portable", 4415 | "shim" 4416 | ], 4417 | "support": { 4418 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" 4419 | }, 4420 | "funding": [ 4421 | { 4422 | "url": "https://symfony.com/sponsor", 4423 | "type": "custom" 4424 | }, 4425 | { 4426 | "url": "https://github.com/fabpot", 4427 | "type": "github" 4428 | }, 4429 | { 4430 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4431 | "type": "tidelift" 4432 | } 4433 | ], 4434 | "time": "2022-11-03T14:55:06+00:00" 4435 | }, 4436 | { 4437 | "name": "symfony/polyfill-php81", 4438 | "version": "v1.27.0", 4439 | "source": { 4440 | "type": "git", 4441 | "url": "https://github.com/symfony/polyfill-php81.git", 4442 | "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" 4443 | }, 4444 | "dist": { 4445 | "type": "zip", 4446 | "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", 4447 | "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", 4448 | "shasum": "" 4449 | }, 4450 | "require": { 4451 | "php": ">=7.1" 4452 | }, 4453 | "type": "library", 4454 | "extra": { 4455 | "branch-alias": { 4456 | "dev-main": "1.27-dev" 4457 | }, 4458 | "thanks": { 4459 | "name": "symfony/polyfill", 4460 | "url": "https://github.com/symfony/polyfill" 4461 | } 4462 | }, 4463 | "autoload": { 4464 | "files": [ 4465 | "bootstrap.php" 4466 | ], 4467 | "psr-4": { 4468 | "Symfony\\Polyfill\\Php81\\": "" 4469 | }, 4470 | "classmap": [ 4471 | "Resources/stubs" 4472 | ] 4473 | }, 4474 | "notification-url": "https://packagist.org/downloads/", 4475 | "license": [ 4476 | "MIT" 4477 | ], 4478 | "authors": [ 4479 | { 4480 | "name": "Nicolas Grekas", 4481 | "email": "p@tchwork.com" 4482 | }, 4483 | { 4484 | "name": "Symfony Community", 4485 | "homepage": "https://symfony.com/contributors" 4486 | } 4487 | ], 4488 | "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", 4489 | "homepage": "https://symfony.com", 4490 | "keywords": [ 4491 | "compatibility", 4492 | "polyfill", 4493 | "portable", 4494 | "shim" 4495 | ], 4496 | "support": { 4497 | "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" 4498 | }, 4499 | "funding": [ 4500 | { 4501 | "url": "https://symfony.com/sponsor", 4502 | "type": "custom" 4503 | }, 4504 | { 4505 | "url": "https://github.com/fabpot", 4506 | "type": "github" 4507 | }, 4508 | { 4509 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4510 | "type": "tidelift" 4511 | } 4512 | ], 4513 | "time": "2022-11-03T14:55:06+00:00" 4514 | }, 4515 | { 4516 | "name": "symfony/process", 4517 | "version": "v6.2.5", 4518 | "source": { 4519 | "type": "git", 4520 | "url": "https://github.com/symfony/process.git", 4521 | "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7" 4522 | }, 4523 | "dist": { 4524 | "type": "zip", 4525 | "url": "https://api.github.com/repos/symfony/process/zipball/9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", 4526 | "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", 4527 | "shasum": "" 4528 | }, 4529 | "require": { 4530 | "php": ">=8.1" 4531 | }, 4532 | "type": "library", 4533 | "autoload": { 4534 | "psr-4": { 4535 | "Symfony\\Component\\Process\\": "" 4536 | }, 4537 | "exclude-from-classmap": [ 4538 | "/Tests/" 4539 | ] 4540 | }, 4541 | "notification-url": "https://packagist.org/downloads/", 4542 | "license": [ 4543 | "MIT" 4544 | ], 4545 | "authors": [ 4546 | { 4547 | "name": "Fabien Potencier", 4548 | "email": "fabien@symfony.com" 4549 | }, 4550 | { 4551 | "name": "Symfony Community", 4552 | "homepage": "https://symfony.com/contributors" 4553 | } 4554 | ], 4555 | "description": "Executes commands in sub-processes", 4556 | "homepage": "https://symfony.com", 4557 | "support": { 4558 | "source": "https://github.com/symfony/process/tree/v6.2.5" 4559 | }, 4560 | "funding": [ 4561 | { 4562 | "url": "https://symfony.com/sponsor", 4563 | "type": "custom" 4564 | }, 4565 | { 4566 | "url": "https://github.com/fabpot", 4567 | "type": "github" 4568 | }, 4569 | { 4570 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4571 | "type": "tidelift" 4572 | } 4573 | ], 4574 | "time": "2023-01-01T08:38:09+00:00" 4575 | }, 4576 | { 4577 | "name": "symfony/service-contracts", 4578 | "version": "v3.2.0", 4579 | "source": { 4580 | "type": "git", 4581 | "url": "https://github.com/symfony/service-contracts.git", 4582 | "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" 4583 | }, 4584 | "dist": { 4585 | "type": "zip", 4586 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", 4587 | "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", 4588 | "shasum": "" 4589 | }, 4590 | "require": { 4591 | "php": ">=8.1", 4592 | "psr/container": "^2.0" 4593 | }, 4594 | "conflict": { 4595 | "ext-psr": "<1.1|>=2" 4596 | }, 4597 | "suggest": { 4598 | "symfony/service-implementation": "" 4599 | }, 4600 | "type": "library", 4601 | "extra": { 4602 | "branch-alias": { 4603 | "dev-main": "3.3-dev" 4604 | }, 4605 | "thanks": { 4606 | "name": "symfony/contracts", 4607 | "url": "https://github.com/symfony/contracts" 4608 | } 4609 | }, 4610 | "autoload": { 4611 | "psr-4": { 4612 | "Symfony\\Contracts\\Service\\": "" 4613 | }, 4614 | "exclude-from-classmap": [ 4615 | "/Test/" 4616 | ] 4617 | }, 4618 | "notification-url": "https://packagist.org/downloads/", 4619 | "license": [ 4620 | "MIT" 4621 | ], 4622 | "authors": [ 4623 | { 4624 | "name": "Nicolas Grekas", 4625 | "email": "p@tchwork.com" 4626 | }, 4627 | { 4628 | "name": "Symfony Community", 4629 | "homepage": "https://symfony.com/contributors" 4630 | } 4631 | ], 4632 | "description": "Generic abstractions related to writing services", 4633 | "homepage": "https://symfony.com", 4634 | "keywords": [ 4635 | "abstractions", 4636 | "contracts", 4637 | "decoupling", 4638 | "interfaces", 4639 | "interoperability", 4640 | "standards" 4641 | ], 4642 | "support": { 4643 | "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" 4644 | }, 4645 | "funding": [ 4646 | { 4647 | "url": "https://symfony.com/sponsor", 4648 | "type": "custom" 4649 | }, 4650 | { 4651 | "url": "https://github.com/fabpot", 4652 | "type": "github" 4653 | }, 4654 | { 4655 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4656 | "type": "tidelift" 4657 | } 4658 | ], 4659 | "time": "2022-11-25T10:21:52+00:00" 4660 | }, 4661 | { 4662 | "name": "symfony/stopwatch", 4663 | "version": "v6.2.5", 4664 | "source": { 4665 | "type": "git", 4666 | "url": "https://github.com/symfony/stopwatch.git", 4667 | "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6" 4668 | }, 4669 | "dist": { 4670 | "type": "zip", 4671 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/00b6ac156aacffc53487c930e0ab14587a6607f6", 4672 | "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6", 4673 | "shasum": "" 4674 | }, 4675 | "require": { 4676 | "php": ">=8.1", 4677 | "symfony/service-contracts": "^1|^2|^3" 4678 | }, 4679 | "type": "library", 4680 | "autoload": { 4681 | "psr-4": { 4682 | "Symfony\\Component\\Stopwatch\\": "" 4683 | }, 4684 | "exclude-from-classmap": [ 4685 | "/Tests/" 4686 | ] 4687 | }, 4688 | "notification-url": "https://packagist.org/downloads/", 4689 | "license": [ 4690 | "MIT" 4691 | ], 4692 | "authors": [ 4693 | { 4694 | "name": "Fabien Potencier", 4695 | "email": "fabien@symfony.com" 4696 | }, 4697 | { 4698 | "name": "Symfony Community", 4699 | "homepage": "https://symfony.com/contributors" 4700 | } 4701 | ], 4702 | "description": "Provides a way to profile code", 4703 | "homepage": "https://symfony.com", 4704 | "support": { 4705 | "source": "https://github.com/symfony/stopwatch/tree/v6.2.5" 4706 | }, 4707 | "funding": [ 4708 | { 4709 | "url": "https://symfony.com/sponsor", 4710 | "type": "custom" 4711 | }, 4712 | { 4713 | "url": "https://github.com/fabpot", 4714 | "type": "github" 4715 | }, 4716 | { 4717 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4718 | "type": "tidelift" 4719 | } 4720 | ], 4721 | "time": "2023-01-01T08:36:55+00:00" 4722 | }, 4723 | { 4724 | "name": "symfony/string", 4725 | "version": "v6.2.5", 4726 | "source": { 4727 | "type": "git", 4728 | "url": "https://github.com/symfony/string.git", 4729 | "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0" 4730 | }, 4731 | "dist": { 4732 | "type": "zip", 4733 | "url": "https://api.github.com/repos/symfony/string/zipball/b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", 4734 | "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", 4735 | "shasum": "" 4736 | }, 4737 | "require": { 4738 | "php": ">=8.1", 4739 | "symfony/polyfill-ctype": "~1.8", 4740 | "symfony/polyfill-intl-grapheme": "~1.0", 4741 | "symfony/polyfill-intl-normalizer": "~1.0", 4742 | "symfony/polyfill-mbstring": "~1.0" 4743 | }, 4744 | "conflict": { 4745 | "symfony/translation-contracts": "<2.0" 4746 | }, 4747 | "require-dev": { 4748 | "symfony/error-handler": "^5.4|^6.0", 4749 | "symfony/http-client": "^5.4|^6.0", 4750 | "symfony/intl": "^6.2", 4751 | "symfony/translation-contracts": "^2.0|^3.0", 4752 | "symfony/var-exporter": "^5.4|^6.0" 4753 | }, 4754 | "type": "library", 4755 | "autoload": { 4756 | "files": [ 4757 | "Resources/functions.php" 4758 | ], 4759 | "psr-4": { 4760 | "Symfony\\Component\\String\\": "" 4761 | }, 4762 | "exclude-from-classmap": [ 4763 | "/Tests/" 4764 | ] 4765 | }, 4766 | "notification-url": "https://packagist.org/downloads/", 4767 | "license": [ 4768 | "MIT" 4769 | ], 4770 | "authors": [ 4771 | { 4772 | "name": "Nicolas Grekas", 4773 | "email": "p@tchwork.com" 4774 | }, 4775 | { 4776 | "name": "Symfony Community", 4777 | "homepage": "https://symfony.com/contributors" 4778 | } 4779 | ], 4780 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", 4781 | "homepage": "https://symfony.com", 4782 | "keywords": [ 4783 | "grapheme", 4784 | "i18n", 4785 | "string", 4786 | "unicode", 4787 | "utf-8", 4788 | "utf8" 4789 | ], 4790 | "support": { 4791 | "source": "https://github.com/symfony/string/tree/v6.2.5" 4792 | }, 4793 | "funding": [ 4794 | { 4795 | "url": "https://symfony.com/sponsor", 4796 | "type": "custom" 4797 | }, 4798 | { 4799 | "url": "https://github.com/fabpot", 4800 | "type": "github" 4801 | }, 4802 | { 4803 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4804 | "type": "tidelift" 4805 | } 4806 | ], 4807 | "time": "2023-01-01T08:38:09+00:00" 4808 | }, 4809 | { 4810 | "name": "theseer/tokenizer", 4811 | "version": "1.2.1", 4812 | "source": { 4813 | "type": "git", 4814 | "url": "https://github.com/theseer/tokenizer.git", 4815 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" 4816 | }, 4817 | "dist": { 4818 | "type": "zip", 4819 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", 4820 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", 4821 | "shasum": "" 4822 | }, 4823 | "require": { 4824 | "ext-dom": "*", 4825 | "ext-tokenizer": "*", 4826 | "ext-xmlwriter": "*", 4827 | "php": "^7.2 || ^8.0" 4828 | }, 4829 | "type": "library", 4830 | "autoload": { 4831 | "classmap": [ 4832 | "src/" 4833 | ] 4834 | }, 4835 | "notification-url": "https://packagist.org/downloads/", 4836 | "license": [ 4837 | "BSD-3-Clause" 4838 | ], 4839 | "authors": [ 4840 | { 4841 | "name": "Arne Blankerts", 4842 | "email": "arne@blankerts.de", 4843 | "role": "Developer" 4844 | } 4845 | ], 4846 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 4847 | "support": { 4848 | "issues": "https://github.com/theseer/tokenizer/issues", 4849 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1" 4850 | }, 4851 | "funding": [ 4852 | { 4853 | "url": "https://github.com/theseer", 4854 | "type": "github" 4855 | } 4856 | ], 4857 | "time": "2021-07-28T10:34:58+00:00" 4858 | }, 4859 | { 4860 | "name": "vimeo/psalm", 4861 | "version": "5.6.0", 4862 | "source": { 4863 | "type": "git", 4864 | "url": "https://github.com/vimeo/psalm.git", 4865 | "reference": "e784128902dfe01d489c4123d69918a9f3c1eac5" 4866 | }, 4867 | "dist": { 4868 | "type": "zip", 4869 | "url": "https://api.github.com/repos/vimeo/psalm/zipball/e784128902dfe01d489c4123d69918a9f3c1eac5", 4870 | "reference": "e784128902dfe01d489c4123d69918a9f3c1eac5", 4871 | "shasum": "" 4872 | }, 4873 | "require": { 4874 | "amphp/amp": "^2.4.2", 4875 | "amphp/byte-stream": "^1.5", 4876 | "composer/package-versions-deprecated": "^1.10.0", 4877 | "composer/semver": "^1.4 || ^2.0 || ^3.0", 4878 | "composer/xdebug-handler": "^2.0 || ^3.0", 4879 | "dnoegel/php-xdg-base-dir": "^0.1.1", 4880 | "ext-ctype": "*", 4881 | "ext-dom": "*", 4882 | "ext-json": "*", 4883 | "ext-libxml": "*", 4884 | "ext-mbstring": "*", 4885 | "ext-simplexml": "*", 4886 | "ext-tokenizer": "*", 4887 | "felixfbecker/advanced-json-rpc": "^3.1", 4888 | "felixfbecker/language-server-protocol": "^1.5.2", 4889 | "fidry/cpu-core-counter": "^0.4.0", 4890 | "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", 4891 | "nikic/php-parser": "^4.13", 4892 | "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0", 4893 | "sebastian/diff": "^4.0 || ^5.0", 4894 | "spatie/array-to-xml": "^2.17.0", 4895 | "symfony/console": "^4.1.6 || ^5.0 || ^6.0", 4896 | "symfony/filesystem": "^5.4 || ^6.0" 4897 | }, 4898 | "provide": { 4899 | "psalm/psalm": "self.version" 4900 | }, 4901 | "require-dev": { 4902 | "bamarni/composer-bin-plugin": "^1.4", 4903 | "brianium/paratest": "^6.0", 4904 | "ext-curl": "*", 4905 | "mockery/mockery": "^1.5", 4906 | "nunomaduro/mock-final-classes": "^1.1", 4907 | "php-parallel-lint/php-parallel-lint": "^1.2", 4908 | "phpstan/phpdoc-parser": "^1.6", 4909 | "phpunit/phpunit": "^9.5", 4910 | "psalm/plugin-mockery": "^1.1", 4911 | "psalm/plugin-phpunit": "^0.18", 4912 | "slevomat/coding-standard": "^8.4", 4913 | "squizlabs/php_codesniffer": "^3.6", 4914 | "symfony/process": "^4.4 || ^5.0 || ^6.0" 4915 | }, 4916 | "suggest": { 4917 | "ext-curl": "In order to send data to shepherd", 4918 | "ext-igbinary": "^2.0.5 is required, used to serialize caching data" 4919 | }, 4920 | "bin": [ 4921 | "psalm", 4922 | "psalm-language-server", 4923 | "psalm-plugin", 4924 | "psalm-refactor", 4925 | "psalter" 4926 | ], 4927 | "type": "library", 4928 | "extra": { 4929 | "branch-alias": { 4930 | "dev-master": "5.x-dev", 4931 | "dev-4.x": "4.x-dev", 4932 | "dev-3.x": "3.x-dev", 4933 | "dev-2.x": "2.x-dev", 4934 | "dev-1.x": "1.x-dev" 4935 | } 4936 | }, 4937 | "autoload": { 4938 | "psr-4": { 4939 | "Psalm\\": "src/Psalm/" 4940 | } 4941 | }, 4942 | "notification-url": "https://packagist.org/downloads/", 4943 | "license": [ 4944 | "MIT" 4945 | ], 4946 | "authors": [ 4947 | { 4948 | "name": "Matthew Brown" 4949 | } 4950 | ], 4951 | "description": "A static analysis tool for finding errors in PHP applications", 4952 | "keywords": [ 4953 | "code", 4954 | "inspection", 4955 | "php" 4956 | ], 4957 | "support": { 4958 | "issues": "https://github.com/vimeo/psalm/issues", 4959 | "source": "https://github.com/vimeo/psalm/tree/5.6.0" 4960 | }, 4961 | "time": "2023-01-23T20:32:47+00:00" 4962 | }, 4963 | { 4964 | "name": "webmozart/assert", 4965 | "version": "1.11.0", 4966 | "source": { 4967 | "type": "git", 4968 | "url": "https://github.com/webmozarts/assert.git", 4969 | "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" 4970 | }, 4971 | "dist": { 4972 | "type": "zip", 4973 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", 4974 | "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", 4975 | "shasum": "" 4976 | }, 4977 | "require": { 4978 | "ext-ctype": "*", 4979 | "php": "^7.2 || ^8.0" 4980 | }, 4981 | "conflict": { 4982 | "phpstan/phpstan": "<0.12.20", 4983 | "vimeo/psalm": "<4.6.1 || 4.6.2" 4984 | }, 4985 | "require-dev": { 4986 | "phpunit/phpunit": "^8.5.13" 4987 | }, 4988 | "type": "library", 4989 | "extra": { 4990 | "branch-alias": { 4991 | "dev-master": "1.10-dev" 4992 | } 4993 | }, 4994 | "autoload": { 4995 | "psr-4": { 4996 | "Webmozart\\Assert\\": "src/" 4997 | } 4998 | }, 4999 | "notification-url": "https://packagist.org/downloads/", 5000 | "license": [ 5001 | "MIT" 5002 | ], 5003 | "authors": [ 5004 | { 5005 | "name": "Bernhard Schussek", 5006 | "email": "bschussek@gmail.com" 5007 | } 5008 | ], 5009 | "description": "Assertions to validate method input/output with nice error messages.", 5010 | "keywords": [ 5011 | "assert", 5012 | "check", 5013 | "validate" 5014 | ], 5015 | "support": { 5016 | "issues": "https://github.com/webmozarts/assert/issues", 5017 | "source": "https://github.com/webmozarts/assert/tree/1.11.0" 5018 | }, 5019 | "time": "2022-06-03T18:03:27+00:00" 5020 | } 5021 | ], 5022 | "aliases": [], 5023 | "minimum-stability": "stable", 5024 | "stability-flags": [], 5025 | "prefer-stable": false, 5026 | "prefer-lowest": false, 5027 | "platform": { 5028 | "php": "^8.1" 5029 | }, 5030 | "platform-dev": [], 5031 | "plugin-api-version": "2.3.0" 5032 | } 5033 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | nginx: 4 | build: 5 | context: docker/nginx 6 | ports: 7 | - "80:80" 8 | volumes: 9 | - ./:/app 10 | depends_on: 11 | - php-fpm 12 | 13 | php-fpm: 14 | build: 15 | context: docker/php-fpm 16 | volumes: 17 | - ./:/app 18 | 19 | php-cli: 20 | build: 21 | context: docker/php-cli 22 | volumes: 23 | - ./:/app 24 | -------------------------------------------------------------------------------- /docker/nginx/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:1.21-alpine 2 | 3 | COPY ./conf.d /etc/nginx/conf.d 4 | 5 | WORKDIR /app 6 | -------------------------------------------------------------------------------- /docker/nginx/conf.d/default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | charset utf-8; 5 | index index.php; 6 | 7 | root /app/public; 8 | 9 | location / { 10 | try_files $uri /index.php?$args; 11 | } 12 | 13 | location ~ \.php$ { 14 | fastcgi_pass php-fpm:9000; 15 | fastcgi_index index.php; 16 | include fastcgi_params; 17 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 18 | fastcgi_param SCRIPT_NAME $fastcgi_script_name; 19 | fastcgi_param PATH_INFO $fastcgi_path_info; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /docker/php-cli/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:8.1-cli-alpine 2 | 3 | RUN mv $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini 4 | 5 | RUN addgroup -g 1000 app && adduser -u 1000 -G app -s /bin/sh -D app 6 | 7 | COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer 8 | 9 | WORKDIR /app 10 | 11 | USER app 12 | -------------------------------------------------------------------------------- /docker/php-fpm/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:8.1-fpm-alpine 2 | 3 | RUN mv $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini 4 | 5 | WORKDIR /app 6 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | 15 | tests 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /psalm.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | getQueryParams()['name'] ?? 'Guest'; 24 | 25 | if (!is_string($name)) { 26 | return new EmptyResponse(400); 27 | } 28 | 29 | $lang = detectLang($request, 'en'); 30 | 31 | return new TextResponse('Hello, ' . $name . '! Your lang is ' . $lang); 32 | } 33 | 34 | ### Grabbing 35 | 36 | $request = ServerRequestFactory::fromGlobals(); 37 | 38 | ### Preprocessing 39 | 40 | if (str_starts_with($request->getHeaderLine('Content-Type'), 'application/x-www-form-urlencoded')) { 41 | parse_str((string)$request->getBody(), $data); 42 | $request = $request->withParsedBody($data); 43 | } 44 | 45 | ### Running 46 | 47 | $response = home($request); 48 | 49 | ### Postprocessing 50 | 51 | $response = $response->withHeader('X-Frame-Options', 'DENY'); 52 | 53 | ### Sending 54 | 55 | $emitter = new SapiStreamEmitter(); 56 | $emitter->emit($response); 57 | -------------------------------------------------------------------------------- /src/App/detectLang.php: -------------------------------------------------------------------------------- 1 | getQueryParams()['lang']) && is_string($request->getQueryParams()['lang'])) { 12 | return (string)$request->getQueryParams()['lang']; 13 | } 14 | 15 | if (!empty($request->getCookieParams()['lang'])) { 16 | return (string)$request->getCookieParams()['lang']; 17 | } 18 | 19 | if ($request->hasHeader('Accept-Language')) { 20 | return substr($request->getHeaderLine('Accept-Language'), 0, 2); 21 | } 22 | 23 | return $default; 24 | } 25 | -------------------------------------------------------------------------------- /src/Framework/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deworkerpro/demo-php-http-framework/61719684a18aeb0e5fe6629d85c6cff0b832d323/src/Framework/.gitkeep -------------------------------------------------------------------------------- /tests/App/DetectLangTest.php: -------------------------------------------------------------------------------- 1 | createServerRequest('GET', '/'); 20 | 21 | $lang = detectLang($request, 'en'); 22 | 23 | self::assertEquals('en', $lang); 24 | } 25 | 26 | public function testQueryParam(): void 27 | { 28 | $request = (new ServerRequestFactory())->createServerRequest('GET', '/') 29 | ->withQueryParams(['lang' => 'de']) 30 | ->withCookieParams(['lang' => 'pt']) 31 | ->withHeader('Accept-Language', ['ru-ru', 'ru;q=0.8', 'en;q=0.4']); 32 | 33 | $lang = detectLang($request, 'en'); 34 | 35 | self::assertEquals('de', $lang); 36 | } 37 | 38 | public function testCookie(): void 39 | { 40 | $request = (new ServerRequestFactory())->createServerRequest('GET', '/') 41 | ->withCookieParams(['lang' => 'pt']) 42 | ->withHeader('Accept-Language', ['ru-ru', 'ru;q=0.8', 'en;q=0.4']); 43 | 44 | $lang = detectLang($request, 'en'); 45 | 46 | self::assertEquals('pt', $lang); 47 | } 48 | 49 | public function testHeader(): void 50 | { 51 | $request = (new ServerRequestFactory())->createServerRequest('GET', '/') 52 | ->withHeader('Accept-Language', ['ru-ru', 'ru;q=0.8', 'en;q=0.4']); 53 | 54 | $lang = detectLang($request, 'en'); 55 | 56 | self::assertEquals('ru', $lang); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /tests/Framework/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deworkerpro/demo-php-http-framework/61719684a18aeb0e5fe6629d85c6cff0b832d323/tests/Framework/.gitkeep -------------------------------------------------------------------------------- /var/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | --------------------------------------------------------------------------------