├── .gitignore ├── LICENSE ├── README.md ├── RKA ├── Session.php └── SessionMiddleware.php ├── composer.json ├── composer.lock ├── phpcs.xml ├── phpunit.xml └── tests ├── RKATest ├── SessionMiddlewareTest.php └── SessionTest.php └── bootstrap.php /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | /build 3 | /.phpunit.result.cache 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015,2022 Rob Allen (rob@akrabat.com) 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, 5 | are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, 8 | this list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * The name of Rob Allen may not be used to endorse or promote products derived 15 | from this software without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 18 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 21 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 24 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 26 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RKA Slim Session Middleware 2 | 3 | Middleware for [Slim Framework][1] that starts a session. Also provides a useful `Session` class. 4 | 5 | ## Installation 6 | 7 | composer require "akrabat/rka-slim-session-middleware" 8 | 9 | ## Usage 10 | 11 | Add middleware as usual: 12 | 13 | $app->add(new \RKA\SessionMiddleware(['name' => 'MySessionName'])); 14 | 15 | 16 | ### RKA\Session 17 | 18 | You can use `\RKA\Session` to access session variables. The main thing that this gives you is defaults and an OO interface: 19 | 20 | $app->get('/', function ($request, $response) { 21 | $session = new \RKA\Session(); 22 | 23 | // Get session variable: 24 | $foo = $session->get('foo', 'some-default'); 25 | $bar = $session->bar; 26 | 27 | // Set session variable: 28 | $session->foo = 'this'; 29 | $session->set('bar', 'that'); 30 | 31 | return $response; 32 | }); 33 | 34 | 35 | if you need to destroy the session, you can do: 36 | 37 | \RKA\Session::destroy(); 38 | 39 | 40 | [1]: https://www.slimframework.com/ 41 | -------------------------------------------------------------------------------- /RKA/Session.php: -------------------------------------------------------------------------------- 1 | set($key, $value); 71 | } 72 | 73 | public function __get($key) 74 | { 75 | return $this->get($key); 76 | } 77 | 78 | public function __isset($key): bool 79 | { 80 | return array_key_exists($key, $_SESSION); 81 | } 82 | 83 | public function __unset($key): void 84 | { 85 | $this->delete($key); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /RKA/SessionMiddleware.php: -------------------------------------------------------------------------------- 1 | 'RKA', 20 | 'lifetime' => 7200, 21 | 'path' => null, 22 | 'domain' => null, 23 | 'secure' => false, 24 | 'httponly' => true, 25 | 'cache_limiter' => 'nocache', 26 | ]; 27 | 28 | public function __construct($options = []) 29 | { 30 | $keys = array_keys($this->options); 31 | foreach ($keys as $key) { 32 | if (array_key_exists($key, $options)) { 33 | $this->options[$key] = $options[$key]; 34 | } 35 | } 36 | } 37 | 38 | /** 39 | * Invoke middleware for a Slim 3 application 40 | * 41 | * @param ServerRequestInterface $request PSR7 request object 42 | * @param ResponseInterface $response 43 | * @param callable $next 44 | * 45 | * @return ResponseInterface PSR7 response object 46 | */ 47 | public function __invoke(RequestInterface $request, ResponseInterface $response, callable $next): ResponseInterface 48 | { 49 | $this->start(); 50 | 51 | return $next($request, $response); 52 | } 53 | 54 | /** 55 | * process middleware for a Slim 4 application 56 | * 57 | * @param ServerRequestInterface $request PSR7 request object 58 | * @param RequestHandlerInterface $handler 59 | * 60 | * @return ResponseInterface PSR7 response object 61 | */ 62 | public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface 63 | { 64 | $this->start(); 65 | 66 | return $handler->handle($request); 67 | } 68 | 69 | public function start(): void 70 | { 71 | if (session_status() === PHP_SESSION_ACTIVE) { 72 | return; 73 | } 74 | 75 | $options = $this->options; 76 | $current = session_get_cookie_params(); 77 | 78 | $lifetime = (int)($options['lifetime'] ?: $current['lifetime']); 79 | $path = $options['path'] ?: $current['path']; 80 | $domain = $options['domain'] ?: $current['domain']; 81 | $secure = (bool)$options['secure']; 82 | $httponly = (bool)$options['httponly']; 83 | 84 | session_set_cookie_params($lifetime, $path, $domain, $secure, $httponly); 85 | session_name($options['name']); 86 | session_cache_limiter($options['cache_limiter']); 87 | session_start(); 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "akrabat/rka-slim-session-middleware", 3 | "description": "Simple session middleware for Slim Framework", 4 | "keywords": [ 5 | "slim", "session", "middleware" 6 | ], 7 | "homepage": "https://github.com/akrabat/rka-slim-session-middleware", 8 | "type": "library", 9 | "license": "BSD-3-Clause", 10 | "authors": [ 11 | { 12 | "name": "Rob Allen", 13 | "email": "rob@akrabat.com", 14 | "homepage": "https://akrabat.com" 15 | } 16 | ], 17 | "require": { 18 | "php": ">=7.4", 19 | "psr/http-server-middleware": "^1.0" 20 | }, 21 | "require-dev": { 22 | "phpunit/phpunit": "^9.6.8", 23 | "slim/psr7": "^1.6.1" 24 | }, 25 | "autoload": { 26 | "psr-4": { 27 | "RKA\\": "RKA" 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "9c138480a06a8741d26cfbfe1deb4af9", 8 | "packages": [ 9 | { 10 | "name": "psr/http-message", 11 | "version": "1.1", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/php-fig/http-message.git", 15 | "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", 20 | "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "^7.2 || ^8.0" 25 | }, 26 | "type": "library", 27 | "extra": { 28 | "branch-alias": { 29 | "dev-master": "1.1.x-dev" 30 | } 31 | }, 32 | "autoload": { 33 | "psr-4": { 34 | "Psr\\Http\\Message\\": "src/" 35 | } 36 | }, 37 | "notification-url": "https://packagist.org/downloads/", 38 | "license": [ 39 | "MIT" 40 | ], 41 | "authors": [ 42 | { 43 | "name": "PHP-FIG", 44 | "homepage": "http://www.php-fig.org/" 45 | } 46 | ], 47 | "description": "Common interface for HTTP messages", 48 | "homepage": "https://github.com/php-fig/http-message", 49 | "keywords": [ 50 | "http", 51 | "http-message", 52 | "psr", 53 | "psr-7", 54 | "request", 55 | "response" 56 | ], 57 | "support": { 58 | "source": "https://github.com/php-fig/http-message/tree/1.1" 59 | }, 60 | "time": "2023-04-04T09:50:52+00:00" 61 | }, 62 | { 63 | "name": "psr/http-server-handler", 64 | "version": "1.0.2", 65 | "source": { 66 | "type": "git", 67 | "url": "https://github.com/php-fig/http-server-handler.git", 68 | "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4" 69 | }, 70 | "dist": { 71 | "type": "zip", 72 | "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4", 73 | "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4", 74 | "shasum": "" 75 | }, 76 | "require": { 77 | "php": ">=7.0", 78 | "psr/http-message": "^1.0 || ^2.0" 79 | }, 80 | "type": "library", 81 | "extra": { 82 | "branch-alias": { 83 | "dev-master": "1.0.x-dev" 84 | } 85 | }, 86 | "autoload": { 87 | "psr-4": { 88 | "Psr\\Http\\Server\\": "src/" 89 | } 90 | }, 91 | "notification-url": "https://packagist.org/downloads/", 92 | "license": [ 93 | "MIT" 94 | ], 95 | "authors": [ 96 | { 97 | "name": "PHP-FIG", 98 | "homepage": "https://www.php-fig.org/" 99 | } 100 | ], 101 | "description": "Common interface for HTTP server-side request handler", 102 | "keywords": [ 103 | "handler", 104 | "http", 105 | "http-interop", 106 | "psr", 107 | "psr-15", 108 | "psr-7", 109 | "request", 110 | "response", 111 | "server" 112 | ], 113 | "support": { 114 | "source": "https://github.com/php-fig/http-server-handler/tree/1.0.2" 115 | }, 116 | "time": "2023-04-10T20:06:20+00:00" 117 | }, 118 | { 119 | "name": "psr/http-server-middleware", 120 | "version": "1.0.2", 121 | "source": { 122 | "type": "git", 123 | "url": "https://github.com/php-fig/http-server-middleware.git", 124 | "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829" 125 | }, 126 | "dist": { 127 | "type": "zip", 128 | "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/c1481f747daaa6a0782775cd6a8c26a1bf4a3829", 129 | "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829", 130 | "shasum": "" 131 | }, 132 | "require": { 133 | "php": ">=7.0", 134 | "psr/http-message": "^1.0 || ^2.0", 135 | "psr/http-server-handler": "^1.0" 136 | }, 137 | "type": "library", 138 | "extra": { 139 | "branch-alias": { 140 | "dev-master": "1.0.x-dev" 141 | } 142 | }, 143 | "autoload": { 144 | "psr-4": { 145 | "Psr\\Http\\Server\\": "src/" 146 | } 147 | }, 148 | "notification-url": "https://packagist.org/downloads/", 149 | "license": [ 150 | "MIT" 151 | ], 152 | "authors": [ 153 | { 154 | "name": "PHP-FIG", 155 | "homepage": "https://www.php-fig.org/" 156 | } 157 | ], 158 | "description": "Common interface for HTTP server-side middleware", 159 | "keywords": [ 160 | "http", 161 | "http-interop", 162 | "middleware", 163 | "psr", 164 | "psr-15", 165 | "psr-7", 166 | "request", 167 | "response" 168 | ], 169 | "support": { 170 | "issues": "https://github.com/php-fig/http-server-middleware/issues", 171 | "source": "https://github.com/php-fig/http-server-middleware/tree/1.0.2" 172 | }, 173 | "time": "2023-04-11T06:14:47+00:00" 174 | } 175 | ], 176 | "packages-dev": [ 177 | { 178 | "name": "doctrine/instantiator", 179 | "version": "2.0.0", 180 | "source": { 181 | "type": "git", 182 | "url": "https://github.com/doctrine/instantiator.git", 183 | "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" 184 | }, 185 | "dist": { 186 | "type": "zip", 187 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", 188 | "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", 189 | "shasum": "" 190 | }, 191 | "require": { 192 | "php": "^8.1" 193 | }, 194 | "require-dev": { 195 | "doctrine/coding-standard": "^11", 196 | "ext-pdo": "*", 197 | "ext-phar": "*", 198 | "phpbench/phpbench": "^1.2", 199 | "phpstan/phpstan": "^1.9.4", 200 | "phpstan/phpstan-phpunit": "^1.3", 201 | "phpunit/phpunit": "^9.5.27", 202 | "vimeo/psalm": "^5.4" 203 | }, 204 | "type": "library", 205 | "autoload": { 206 | "psr-4": { 207 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 208 | } 209 | }, 210 | "notification-url": "https://packagist.org/downloads/", 211 | "license": [ 212 | "MIT" 213 | ], 214 | "authors": [ 215 | { 216 | "name": "Marco Pivetta", 217 | "email": "ocramius@gmail.com", 218 | "homepage": "https://ocramius.github.io/" 219 | } 220 | ], 221 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 222 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 223 | "keywords": [ 224 | "constructor", 225 | "instantiate" 226 | ], 227 | "support": { 228 | "issues": "https://github.com/doctrine/instantiator/issues", 229 | "source": "https://github.com/doctrine/instantiator/tree/2.0.0" 230 | }, 231 | "funding": [ 232 | { 233 | "url": "https://www.doctrine-project.org/sponsorship.html", 234 | "type": "custom" 235 | }, 236 | { 237 | "url": "https://www.patreon.com/phpdoctrine", 238 | "type": "patreon" 239 | }, 240 | { 241 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 242 | "type": "tidelift" 243 | } 244 | ], 245 | "time": "2022-12-30T00:23:10+00:00" 246 | }, 247 | { 248 | "name": "fig/http-message-util", 249 | "version": "1.1.5", 250 | "source": { 251 | "type": "git", 252 | "url": "https://github.com/php-fig/http-message-util.git", 253 | "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765" 254 | }, 255 | "dist": { 256 | "type": "zip", 257 | "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765", 258 | "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765", 259 | "shasum": "" 260 | }, 261 | "require": { 262 | "php": "^5.3 || ^7.0 || ^8.0" 263 | }, 264 | "suggest": { 265 | "psr/http-message": "The package containing the PSR-7 interfaces" 266 | }, 267 | "type": "library", 268 | "extra": { 269 | "branch-alias": { 270 | "dev-master": "1.1.x-dev" 271 | } 272 | }, 273 | "autoload": { 274 | "psr-4": { 275 | "Fig\\Http\\Message\\": "src/" 276 | } 277 | }, 278 | "notification-url": "https://packagist.org/downloads/", 279 | "license": [ 280 | "MIT" 281 | ], 282 | "authors": [ 283 | { 284 | "name": "PHP-FIG", 285 | "homepage": "https://www.php-fig.org/" 286 | } 287 | ], 288 | "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", 289 | "keywords": [ 290 | "http", 291 | "http-message", 292 | "psr", 293 | "psr-7", 294 | "request", 295 | "response" 296 | ], 297 | "support": { 298 | "issues": "https://github.com/php-fig/http-message-util/issues", 299 | "source": "https://github.com/php-fig/http-message-util/tree/1.1.5" 300 | }, 301 | "time": "2020-11-24T22:02:12+00:00" 302 | }, 303 | { 304 | "name": "myclabs/deep-copy", 305 | "version": "1.11.1", 306 | "source": { 307 | "type": "git", 308 | "url": "https://github.com/myclabs/DeepCopy.git", 309 | "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" 310 | }, 311 | "dist": { 312 | "type": "zip", 313 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", 314 | "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", 315 | "shasum": "" 316 | }, 317 | "require": { 318 | "php": "^7.1 || ^8.0" 319 | }, 320 | "conflict": { 321 | "doctrine/collections": "<1.6.8", 322 | "doctrine/common": "<2.13.3 || >=3,<3.2.2" 323 | }, 324 | "require-dev": { 325 | "doctrine/collections": "^1.6.8", 326 | "doctrine/common": "^2.13.3 || ^3.2.2", 327 | "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" 328 | }, 329 | "type": "library", 330 | "autoload": { 331 | "files": [ 332 | "src/DeepCopy/deep_copy.php" 333 | ], 334 | "psr-4": { 335 | "DeepCopy\\": "src/DeepCopy/" 336 | } 337 | }, 338 | "notification-url": "https://packagist.org/downloads/", 339 | "license": [ 340 | "MIT" 341 | ], 342 | "description": "Create deep copies (clones) of your objects", 343 | "keywords": [ 344 | "clone", 345 | "copy", 346 | "duplicate", 347 | "object", 348 | "object graph" 349 | ], 350 | "support": { 351 | "issues": "https://github.com/myclabs/DeepCopy/issues", 352 | "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" 353 | }, 354 | "funding": [ 355 | { 356 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 357 | "type": "tidelift" 358 | } 359 | ], 360 | "time": "2023-03-08T13:26:56+00:00" 361 | }, 362 | { 363 | "name": "nikic/php-parser", 364 | "version": "v4.15.5", 365 | "source": { 366 | "type": "git", 367 | "url": "https://github.com/nikic/PHP-Parser.git", 368 | "reference": "11e2663a5bc9db5d714eedb4277ee300403b4a9e" 369 | }, 370 | "dist": { 371 | "type": "zip", 372 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/11e2663a5bc9db5d714eedb4277ee300403b4a9e", 373 | "reference": "11e2663a5bc9db5d714eedb4277ee300403b4a9e", 374 | "shasum": "" 375 | }, 376 | "require": { 377 | "ext-tokenizer": "*", 378 | "php": ">=7.0" 379 | }, 380 | "require-dev": { 381 | "ircmaxell/php-yacc": "^0.0.7", 382 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 383 | }, 384 | "bin": [ 385 | "bin/php-parse" 386 | ], 387 | "type": "library", 388 | "extra": { 389 | "branch-alias": { 390 | "dev-master": "4.9-dev" 391 | } 392 | }, 393 | "autoload": { 394 | "psr-4": { 395 | "PhpParser\\": "lib/PhpParser" 396 | } 397 | }, 398 | "notification-url": "https://packagist.org/downloads/", 399 | "license": [ 400 | "BSD-3-Clause" 401 | ], 402 | "authors": [ 403 | { 404 | "name": "Nikita Popov" 405 | } 406 | ], 407 | "description": "A PHP parser written in PHP", 408 | "keywords": [ 409 | "parser", 410 | "php" 411 | ], 412 | "support": { 413 | "issues": "https://github.com/nikic/PHP-Parser/issues", 414 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.5" 415 | }, 416 | "time": "2023-05-19T20:20:00+00:00" 417 | }, 418 | { 419 | "name": "phar-io/manifest", 420 | "version": "2.0.3", 421 | "source": { 422 | "type": "git", 423 | "url": "https://github.com/phar-io/manifest.git", 424 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53" 425 | }, 426 | "dist": { 427 | "type": "zip", 428 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", 429 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53", 430 | "shasum": "" 431 | }, 432 | "require": { 433 | "ext-dom": "*", 434 | "ext-phar": "*", 435 | "ext-xmlwriter": "*", 436 | "phar-io/version": "^3.0.1", 437 | "php": "^7.2 || ^8.0" 438 | }, 439 | "type": "library", 440 | "extra": { 441 | "branch-alias": { 442 | "dev-master": "2.0.x-dev" 443 | } 444 | }, 445 | "autoload": { 446 | "classmap": [ 447 | "src/" 448 | ] 449 | }, 450 | "notification-url": "https://packagist.org/downloads/", 451 | "license": [ 452 | "BSD-3-Clause" 453 | ], 454 | "authors": [ 455 | { 456 | "name": "Arne Blankerts", 457 | "email": "arne@blankerts.de", 458 | "role": "Developer" 459 | }, 460 | { 461 | "name": "Sebastian Heuer", 462 | "email": "sebastian@phpeople.de", 463 | "role": "Developer" 464 | }, 465 | { 466 | "name": "Sebastian Bergmann", 467 | "email": "sebastian@phpunit.de", 468 | "role": "Developer" 469 | } 470 | ], 471 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 472 | "support": { 473 | "issues": "https://github.com/phar-io/manifest/issues", 474 | "source": "https://github.com/phar-io/manifest/tree/2.0.3" 475 | }, 476 | "time": "2021-07-20T11:28:43+00:00" 477 | }, 478 | { 479 | "name": "phar-io/version", 480 | "version": "3.2.1", 481 | "source": { 482 | "type": "git", 483 | "url": "https://github.com/phar-io/version.git", 484 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" 485 | }, 486 | "dist": { 487 | "type": "zip", 488 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 489 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 490 | "shasum": "" 491 | }, 492 | "require": { 493 | "php": "^7.2 || ^8.0" 494 | }, 495 | "type": "library", 496 | "autoload": { 497 | "classmap": [ 498 | "src/" 499 | ] 500 | }, 501 | "notification-url": "https://packagist.org/downloads/", 502 | "license": [ 503 | "BSD-3-Clause" 504 | ], 505 | "authors": [ 506 | { 507 | "name": "Arne Blankerts", 508 | "email": "arne@blankerts.de", 509 | "role": "Developer" 510 | }, 511 | { 512 | "name": "Sebastian Heuer", 513 | "email": "sebastian@phpeople.de", 514 | "role": "Developer" 515 | }, 516 | { 517 | "name": "Sebastian Bergmann", 518 | "email": "sebastian@phpunit.de", 519 | "role": "Developer" 520 | } 521 | ], 522 | "description": "Library for handling version information and constraints", 523 | "support": { 524 | "issues": "https://github.com/phar-io/version/issues", 525 | "source": "https://github.com/phar-io/version/tree/3.2.1" 526 | }, 527 | "time": "2022-02-21T01:04:05+00:00" 528 | }, 529 | { 530 | "name": "phpunit/php-code-coverage", 531 | "version": "9.2.26", 532 | "source": { 533 | "type": "git", 534 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 535 | "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" 536 | }, 537 | "dist": { 538 | "type": "zip", 539 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", 540 | "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", 541 | "shasum": "" 542 | }, 543 | "require": { 544 | "ext-dom": "*", 545 | "ext-libxml": "*", 546 | "ext-xmlwriter": "*", 547 | "nikic/php-parser": "^4.15", 548 | "php": ">=7.3", 549 | "phpunit/php-file-iterator": "^3.0.3", 550 | "phpunit/php-text-template": "^2.0.2", 551 | "sebastian/code-unit-reverse-lookup": "^2.0.2", 552 | "sebastian/complexity": "^2.0", 553 | "sebastian/environment": "^5.1.2", 554 | "sebastian/lines-of-code": "^1.0.3", 555 | "sebastian/version": "^3.0.1", 556 | "theseer/tokenizer": "^1.2.0" 557 | }, 558 | "require-dev": { 559 | "phpunit/phpunit": "^9.3" 560 | }, 561 | "suggest": { 562 | "ext-pcov": "PHP extension that provides line coverage", 563 | "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" 564 | }, 565 | "type": "library", 566 | "extra": { 567 | "branch-alias": { 568 | "dev-master": "9.2-dev" 569 | } 570 | }, 571 | "autoload": { 572 | "classmap": [ 573 | "src/" 574 | ] 575 | }, 576 | "notification-url": "https://packagist.org/downloads/", 577 | "license": [ 578 | "BSD-3-Clause" 579 | ], 580 | "authors": [ 581 | { 582 | "name": "Sebastian Bergmann", 583 | "email": "sebastian@phpunit.de", 584 | "role": "lead" 585 | } 586 | ], 587 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 588 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 589 | "keywords": [ 590 | "coverage", 591 | "testing", 592 | "xunit" 593 | ], 594 | "support": { 595 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 596 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" 597 | }, 598 | "funding": [ 599 | { 600 | "url": "https://github.com/sebastianbergmann", 601 | "type": "github" 602 | } 603 | ], 604 | "time": "2023-03-06T12:58:08+00:00" 605 | }, 606 | { 607 | "name": "phpunit/php-file-iterator", 608 | "version": "3.0.6", 609 | "source": { 610 | "type": "git", 611 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 612 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" 613 | }, 614 | "dist": { 615 | "type": "zip", 616 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 617 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 618 | "shasum": "" 619 | }, 620 | "require": { 621 | "php": ">=7.3" 622 | }, 623 | "require-dev": { 624 | "phpunit/phpunit": "^9.3" 625 | }, 626 | "type": "library", 627 | "extra": { 628 | "branch-alias": { 629 | "dev-master": "3.0-dev" 630 | } 631 | }, 632 | "autoload": { 633 | "classmap": [ 634 | "src/" 635 | ] 636 | }, 637 | "notification-url": "https://packagist.org/downloads/", 638 | "license": [ 639 | "BSD-3-Clause" 640 | ], 641 | "authors": [ 642 | { 643 | "name": "Sebastian Bergmann", 644 | "email": "sebastian@phpunit.de", 645 | "role": "lead" 646 | } 647 | ], 648 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 649 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 650 | "keywords": [ 651 | "filesystem", 652 | "iterator" 653 | ], 654 | "support": { 655 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 656 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" 657 | }, 658 | "funding": [ 659 | { 660 | "url": "https://github.com/sebastianbergmann", 661 | "type": "github" 662 | } 663 | ], 664 | "time": "2021-12-02T12:48:52+00:00" 665 | }, 666 | { 667 | "name": "phpunit/php-invoker", 668 | "version": "3.1.1", 669 | "source": { 670 | "type": "git", 671 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 672 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" 673 | }, 674 | "dist": { 675 | "type": "zip", 676 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 677 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 678 | "shasum": "" 679 | }, 680 | "require": { 681 | "php": ">=7.3" 682 | }, 683 | "require-dev": { 684 | "ext-pcntl": "*", 685 | "phpunit/phpunit": "^9.3" 686 | }, 687 | "suggest": { 688 | "ext-pcntl": "*" 689 | }, 690 | "type": "library", 691 | "extra": { 692 | "branch-alias": { 693 | "dev-master": "3.1-dev" 694 | } 695 | }, 696 | "autoload": { 697 | "classmap": [ 698 | "src/" 699 | ] 700 | }, 701 | "notification-url": "https://packagist.org/downloads/", 702 | "license": [ 703 | "BSD-3-Clause" 704 | ], 705 | "authors": [ 706 | { 707 | "name": "Sebastian Bergmann", 708 | "email": "sebastian@phpunit.de", 709 | "role": "lead" 710 | } 711 | ], 712 | "description": "Invoke callables with a timeout", 713 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 714 | "keywords": [ 715 | "process" 716 | ], 717 | "support": { 718 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues", 719 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" 720 | }, 721 | "funding": [ 722 | { 723 | "url": "https://github.com/sebastianbergmann", 724 | "type": "github" 725 | } 726 | ], 727 | "time": "2020-09-28T05:58:55+00:00" 728 | }, 729 | { 730 | "name": "phpunit/php-text-template", 731 | "version": "2.0.4", 732 | "source": { 733 | "type": "git", 734 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 735 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" 736 | }, 737 | "dist": { 738 | "type": "zip", 739 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 740 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 741 | "shasum": "" 742 | }, 743 | "require": { 744 | "php": ">=7.3" 745 | }, 746 | "require-dev": { 747 | "phpunit/phpunit": "^9.3" 748 | }, 749 | "type": "library", 750 | "extra": { 751 | "branch-alias": { 752 | "dev-master": "2.0-dev" 753 | } 754 | }, 755 | "autoload": { 756 | "classmap": [ 757 | "src/" 758 | ] 759 | }, 760 | "notification-url": "https://packagist.org/downloads/", 761 | "license": [ 762 | "BSD-3-Clause" 763 | ], 764 | "authors": [ 765 | { 766 | "name": "Sebastian Bergmann", 767 | "email": "sebastian@phpunit.de", 768 | "role": "lead" 769 | } 770 | ], 771 | "description": "Simple template engine.", 772 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 773 | "keywords": [ 774 | "template" 775 | ], 776 | "support": { 777 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 778 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" 779 | }, 780 | "funding": [ 781 | { 782 | "url": "https://github.com/sebastianbergmann", 783 | "type": "github" 784 | } 785 | ], 786 | "time": "2020-10-26T05:33:50+00:00" 787 | }, 788 | { 789 | "name": "phpunit/php-timer", 790 | "version": "5.0.3", 791 | "source": { 792 | "type": "git", 793 | "url": "https://github.com/sebastianbergmann/php-timer.git", 794 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" 795 | }, 796 | "dist": { 797 | "type": "zip", 798 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 799 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 800 | "shasum": "" 801 | }, 802 | "require": { 803 | "php": ">=7.3" 804 | }, 805 | "require-dev": { 806 | "phpunit/phpunit": "^9.3" 807 | }, 808 | "type": "library", 809 | "extra": { 810 | "branch-alias": { 811 | "dev-master": "5.0-dev" 812 | } 813 | }, 814 | "autoload": { 815 | "classmap": [ 816 | "src/" 817 | ] 818 | }, 819 | "notification-url": "https://packagist.org/downloads/", 820 | "license": [ 821 | "BSD-3-Clause" 822 | ], 823 | "authors": [ 824 | { 825 | "name": "Sebastian Bergmann", 826 | "email": "sebastian@phpunit.de", 827 | "role": "lead" 828 | } 829 | ], 830 | "description": "Utility class for timing", 831 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 832 | "keywords": [ 833 | "timer" 834 | ], 835 | "support": { 836 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 837 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" 838 | }, 839 | "funding": [ 840 | { 841 | "url": "https://github.com/sebastianbergmann", 842 | "type": "github" 843 | } 844 | ], 845 | "time": "2020-10-26T13:16:10+00:00" 846 | }, 847 | { 848 | "name": "phpunit/phpunit", 849 | "version": "9.6.8", 850 | "source": { 851 | "type": "git", 852 | "url": "https://github.com/sebastianbergmann/phpunit.git", 853 | "reference": "17d621b3aff84d0c8b62539e269e87d8d5baa76e" 854 | }, 855 | "dist": { 856 | "type": "zip", 857 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/17d621b3aff84d0c8b62539e269e87d8d5baa76e", 858 | "reference": "17d621b3aff84d0c8b62539e269e87d8d5baa76e", 859 | "shasum": "" 860 | }, 861 | "require": { 862 | "doctrine/instantiator": "^1.3.1 || ^2", 863 | "ext-dom": "*", 864 | "ext-json": "*", 865 | "ext-libxml": "*", 866 | "ext-mbstring": "*", 867 | "ext-xml": "*", 868 | "ext-xmlwriter": "*", 869 | "myclabs/deep-copy": "^1.10.1", 870 | "phar-io/manifest": "^2.0.3", 871 | "phar-io/version": "^3.0.2", 872 | "php": ">=7.3", 873 | "phpunit/php-code-coverage": "^9.2.13", 874 | "phpunit/php-file-iterator": "^3.0.5", 875 | "phpunit/php-invoker": "^3.1.1", 876 | "phpunit/php-text-template": "^2.0.3", 877 | "phpunit/php-timer": "^5.0.2", 878 | "sebastian/cli-parser": "^1.0.1", 879 | "sebastian/code-unit": "^1.0.6", 880 | "sebastian/comparator": "^4.0.8", 881 | "sebastian/diff": "^4.0.3", 882 | "sebastian/environment": "^5.1.3", 883 | "sebastian/exporter": "^4.0.5", 884 | "sebastian/global-state": "^5.0.1", 885 | "sebastian/object-enumerator": "^4.0.3", 886 | "sebastian/resource-operations": "^3.0.3", 887 | "sebastian/type": "^3.2", 888 | "sebastian/version": "^3.0.2" 889 | }, 890 | "suggest": { 891 | "ext-soap": "To be able to generate mocks based on WSDL files", 892 | "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" 893 | }, 894 | "bin": [ 895 | "phpunit" 896 | ], 897 | "type": "library", 898 | "extra": { 899 | "branch-alias": { 900 | "dev-master": "9.6-dev" 901 | } 902 | }, 903 | "autoload": { 904 | "files": [ 905 | "src/Framework/Assert/Functions.php" 906 | ], 907 | "classmap": [ 908 | "src/" 909 | ] 910 | }, 911 | "notification-url": "https://packagist.org/downloads/", 912 | "license": [ 913 | "BSD-3-Clause" 914 | ], 915 | "authors": [ 916 | { 917 | "name": "Sebastian Bergmann", 918 | "email": "sebastian@phpunit.de", 919 | "role": "lead" 920 | } 921 | ], 922 | "description": "The PHP Unit Testing framework.", 923 | "homepage": "https://phpunit.de/", 924 | "keywords": [ 925 | "phpunit", 926 | "testing", 927 | "xunit" 928 | ], 929 | "support": { 930 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 931 | "security": "https://github.com/sebastianbergmann/phpunit/security/policy", 932 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.8" 933 | }, 934 | "funding": [ 935 | { 936 | "url": "https://phpunit.de/sponsors.html", 937 | "type": "custom" 938 | }, 939 | { 940 | "url": "https://github.com/sebastianbergmann", 941 | "type": "github" 942 | }, 943 | { 944 | "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", 945 | "type": "tidelift" 946 | } 947 | ], 948 | "time": "2023-05-11T05:14:45+00:00" 949 | }, 950 | { 951 | "name": "psr/http-factory", 952 | "version": "1.0.2", 953 | "source": { 954 | "type": "git", 955 | "url": "https://github.com/php-fig/http-factory.git", 956 | "reference": "e616d01114759c4c489f93b099585439f795fe35" 957 | }, 958 | "dist": { 959 | "type": "zip", 960 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", 961 | "reference": "e616d01114759c4c489f93b099585439f795fe35", 962 | "shasum": "" 963 | }, 964 | "require": { 965 | "php": ">=7.0.0", 966 | "psr/http-message": "^1.0 || ^2.0" 967 | }, 968 | "type": "library", 969 | "extra": { 970 | "branch-alias": { 971 | "dev-master": "1.0.x-dev" 972 | } 973 | }, 974 | "autoload": { 975 | "psr-4": { 976 | "Psr\\Http\\Message\\": "src/" 977 | } 978 | }, 979 | "notification-url": "https://packagist.org/downloads/", 980 | "license": [ 981 | "MIT" 982 | ], 983 | "authors": [ 984 | { 985 | "name": "PHP-FIG", 986 | "homepage": "https://www.php-fig.org/" 987 | } 988 | ], 989 | "description": "Common interfaces for PSR-7 HTTP message factories", 990 | "keywords": [ 991 | "factory", 992 | "http", 993 | "message", 994 | "psr", 995 | "psr-17", 996 | "psr-7", 997 | "request", 998 | "response" 999 | ], 1000 | "support": { 1001 | "source": "https://github.com/php-fig/http-factory/tree/1.0.2" 1002 | }, 1003 | "time": "2023-04-10T20:10:41+00:00" 1004 | }, 1005 | { 1006 | "name": "ralouphie/getallheaders", 1007 | "version": "3.0.3", 1008 | "source": { 1009 | "type": "git", 1010 | "url": "https://github.com/ralouphie/getallheaders.git", 1011 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 1012 | }, 1013 | "dist": { 1014 | "type": "zip", 1015 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 1016 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 1017 | "shasum": "" 1018 | }, 1019 | "require": { 1020 | "php": ">=5.6" 1021 | }, 1022 | "require-dev": { 1023 | "php-coveralls/php-coveralls": "^2.1", 1024 | "phpunit/phpunit": "^5 || ^6.5" 1025 | }, 1026 | "type": "library", 1027 | "autoload": { 1028 | "files": [ 1029 | "src/getallheaders.php" 1030 | ] 1031 | }, 1032 | "notification-url": "https://packagist.org/downloads/", 1033 | "license": [ 1034 | "MIT" 1035 | ], 1036 | "authors": [ 1037 | { 1038 | "name": "Ralph Khattar", 1039 | "email": "ralph.khattar@gmail.com" 1040 | } 1041 | ], 1042 | "description": "A polyfill for getallheaders.", 1043 | "support": { 1044 | "issues": "https://github.com/ralouphie/getallheaders/issues", 1045 | "source": "https://github.com/ralouphie/getallheaders/tree/develop" 1046 | }, 1047 | "time": "2019-03-08T08:55:37+00:00" 1048 | }, 1049 | { 1050 | "name": "sebastian/cli-parser", 1051 | "version": "1.0.1", 1052 | "source": { 1053 | "type": "git", 1054 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 1055 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" 1056 | }, 1057 | "dist": { 1058 | "type": "zip", 1059 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", 1060 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", 1061 | "shasum": "" 1062 | }, 1063 | "require": { 1064 | "php": ">=7.3" 1065 | }, 1066 | "require-dev": { 1067 | "phpunit/phpunit": "^9.3" 1068 | }, 1069 | "type": "library", 1070 | "extra": { 1071 | "branch-alias": { 1072 | "dev-master": "1.0-dev" 1073 | } 1074 | }, 1075 | "autoload": { 1076 | "classmap": [ 1077 | "src/" 1078 | ] 1079 | }, 1080 | "notification-url": "https://packagist.org/downloads/", 1081 | "license": [ 1082 | "BSD-3-Clause" 1083 | ], 1084 | "authors": [ 1085 | { 1086 | "name": "Sebastian Bergmann", 1087 | "email": "sebastian@phpunit.de", 1088 | "role": "lead" 1089 | } 1090 | ], 1091 | "description": "Library for parsing CLI options", 1092 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 1093 | "support": { 1094 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues", 1095 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" 1096 | }, 1097 | "funding": [ 1098 | { 1099 | "url": "https://github.com/sebastianbergmann", 1100 | "type": "github" 1101 | } 1102 | ], 1103 | "time": "2020-09-28T06:08:49+00:00" 1104 | }, 1105 | { 1106 | "name": "sebastian/code-unit", 1107 | "version": "1.0.8", 1108 | "source": { 1109 | "type": "git", 1110 | "url": "https://github.com/sebastianbergmann/code-unit.git", 1111 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" 1112 | }, 1113 | "dist": { 1114 | "type": "zip", 1115 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", 1116 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", 1117 | "shasum": "" 1118 | }, 1119 | "require": { 1120 | "php": ">=7.3" 1121 | }, 1122 | "require-dev": { 1123 | "phpunit/phpunit": "^9.3" 1124 | }, 1125 | "type": "library", 1126 | "extra": { 1127 | "branch-alias": { 1128 | "dev-master": "1.0-dev" 1129 | } 1130 | }, 1131 | "autoload": { 1132 | "classmap": [ 1133 | "src/" 1134 | ] 1135 | }, 1136 | "notification-url": "https://packagist.org/downloads/", 1137 | "license": [ 1138 | "BSD-3-Clause" 1139 | ], 1140 | "authors": [ 1141 | { 1142 | "name": "Sebastian Bergmann", 1143 | "email": "sebastian@phpunit.de", 1144 | "role": "lead" 1145 | } 1146 | ], 1147 | "description": "Collection of value objects that represent the PHP code units", 1148 | "homepage": "https://github.com/sebastianbergmann/code-unit", 1149 | "support": { 1150 | "issues": "https://github.com/sebastianbergmann/code-unit/issues", 1151 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" 1152 | }, 1153 | "funding": [ 1154 | { 1155 | "url": "https://github.com/sebastianbergmann", 1156 | "type": "github" 1157 | } 1158 | ], 1159 | "time": "2020-10-26T13:08:54+00:00" 1160 | }, 1161 | { 1162 | "name": "sebastian/code-unit-reverse-lookup", 1163 | "version": "2.0.3", 1164 | "source": { 1165 | "type": "git", 1166 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1167 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" 1168 | }, 1169 | "dist": { 1170 | "type": "zip", 1171 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 1172 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 1173 | "shasum": "" 1174 | }, 1175 | "require": { 1176 | "php": ">=7.3" 1177 | }, 1178 | "require-dev": { 1179 | "phpunit/phpunit": "^9.3" 1180 | }, 1181 | "type": "library", 1182 | "extra": { 1183 | "branch-alias": { 1184 | "dev-master": "2.0-dev" 1185 | } 1186 | }, 1187 | "autoload": { 1188 | "classmap": [ 1189 | "src/" 1190 | ] 1191 | }, 1192 | "notification-url": "https://packagist.org/downloads/", 1193 | "license": [ 1194 | "BSD-3-Clause" 1195 | ], 1196 | "authors": [ 1197 | { 1198 | "name": "Sebastian Bergmann", 1199 | "email": "sebastian@phpunit.de" 1200 | } 1201 | ], 1202 | "description": "Looks up which function or method a line of code belongs to", 1203 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1204 | "support": { 1205 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 1206 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" 1207 | }, 1208 | "funding": [ 1209 | { 1210 | "url": "https://github.com/sebastianbergmann", 1211 | "type": "github" 1212 | } 1213 | ], 1214 | "time": "2020-09-28T05:30:19+00:00" 1215 | }, 1216 | { 1217 | "name": "sebastian/comparator", 1218 | "version": "4.0.8", 1219 | "source": { 1220 | "type": "git", 1221 | "url": "https://github.com/sebastianbergmann/comparator.git", 1222 | "reference": "fa0f136dd2334583309d32b62544682ee972b51a" 1223 | }, 1224 | "dist": { 1225 | "type": "zip", 1226 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", 1227 | "reference": "fa0f136dd2334583309d32b62544682ee972b51a", 1228 | "shasum": "" 1229 | }, 1230 | "require": { 1231 | "php": ">=7.3", 1232 | "sebastian/diff": "^4.0", 1233 | "sebastian/exporter": "^4.0" 1234 | }, 1235 | "require-dev": { 1236 | "phpunit/phpunit": "^9.3" 1237 | }, 1238 | "type": "library", 1239 | "extra": { 1240 | "branch-alias": { 1241 | "dev-master": "4.0-dev" 1242 | } 1243 | }, 1244 | "autoload": { 1245 | "classmap": [ 1246 | "src/" 1247 | ] 1248 | }, 1249 | "notification-url": "https://packagist.org/downloads/", 1250 | "license": [ 1251 | "BSD-3-Clause" 1252 | ], 1253 | "authors": [ 1254 | { 1255 | "name": "Sebastian Bergmann", 1256 | "email": "sebastian@phpunit.de" 1257 | }, 1258 | { 1259 | "name": "Jeff Welch", 1260 | "email": "whatthejeff@gmail.com" 1261 | }, 1262 | { 1263 | "name": "Volker Dusch", 1264 | "email": "github@wallbash.com" 1265 | }, 1266 | { 1267 | "name": "Bernhard Schussek", 1268 | "email": "bschussek@2bepublished.at" 1269 | } 1270 | ], 1271 | "description": "Provides the functionality to compare PHP values for equality", 1272 | "homepage": "https://github.com/sebastianbergmann/comparator", 1273 | "keywords": [ 1274 | "comparator", 1275 | "compare", 1276 | "equality" 1277 | ], 1278 | "support": { 1279 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 1280 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" 1281 | }, 1282 | "funding": [ 1283 | { 1284 | "url": "https://github.com/sebastianbergmann", 1285 | "type": "github" 1286 | } 1287 | ], 1288 | "time": "2022-09-14T12:41:17+00:00" 1289 | }, 1290 | { 1291 | "name": "sebastian/complexity", 1292 | "version": "2.0.2", 1293 | "source": { 1294 | "type": "git", 1295 | "url": "https://github.com/sebastianbergmann/complexity.git", 1296 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" 1297 | }, 1298 | "dist": { 1299 | "type": "zip", 1300 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", 1301 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", 1302 | "shasum": "" 1303 | }, 1304 | "require": { 1305 | "nikic/php-parser": "^4.7", 1306 | "php": ">=7.3" 1307 | }, 1308 | "require-dev": { 1309 | "phpunit/phpunit": "^9.3" 1310 | }, 1311 | "type": "library", 1312 | "extra": { 1313 | "branch-alias": { 1314 | "dev-master": "2.0-dev" 1315 | } 1316 | }, 1317 | "autoload": { 1318 | "classmap": [ 1319 | "src/" 1320 | ] 1321 | }, 1322 | "notification-url": "https://packagist.org/downloads/", 1323 | "license": [ 1324 | "BSD-3-Clause" 1325 | ], 1326 | "authors": [ 1327 | { 1328 | "name": "Sebastian Bergmann", 1329 | "email": "sebastian@phpunit.de", 1330 | "role": "lead" 1331 | } 1332 | ], 1333 | "description": "Library for calculating the complexity of PHP code units", 1334 | "homepage": "https://github.com/sebastianbergmann/complexity", 1335 | "support": { 1336 | "issues": "https://github.com/sebastianbergmann/complexity/issues", 1337 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" 1338 | }, 1339 | "funding": [ 1340 | { 1341 | "url": "https://github.com/sebastianbergmann", 1342 | "type": "github" 1343 | } 1344 | ], 1345 | "time": "2020-10-26T15:52:27+00:00" 1346 | }, 1347 | { 1348 | "name": "sebastian/diff", 1349 | "version": "4.0.5", 1350 | "source": { 1351 | "type": "git", 1352 | "url": "https://github.com/sebastianbergmann/diff.git", 1353 | "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" 1354 | }, 1355 | "dist": { 1356 | "type": "zip", 1357 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", 1358 | "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", 1359 | "shasum": "" 1360 | }, 1361 | "require": { 1362 | "php": ">=7.3" 1363 | }, 1364 | "require-dev": { 1365 | "phpunit/phpunit": "^9.3", 1366 | "symfony/process": "^4.2 || ^5" 1367 | }, 1368 | "type": "library", 1369 | "extra": { 1370 | "branch-alias": { 1371 | "dev-master": "4.0-dev" 1372 | } 1373 | }, 1374 | "autoload": { 1375 | "classmap": [ 1376 | "src/" 1377 | ] 1378 | }, 1379 | "notification-url": "https://packagist.org/downloads/", 1380 | "license": [ 1381 | "BSD-3-Clause" 1382 | ], 1383 | "authors": [ 1384 | { 1385 | "name": "Sebastian Bergmann", 1386 | "email": "sebastian@phpunit.de" 1387 | }, 1388 | { 1389 | "name": "Kore Nordmann", 1390 | "email": "mail@kore-nordmann.de" 1391 | } 1392 | ], 1393 | "description": "Diff implementation", 1394 | "homepage": "https://github.com/sebastianbergmann/diff", 1395 | "keywords": [ 1396 | "diff", 1397 | "udiff", 1398 | "unidiff", 1399 | "unified diff" 1400 | ], 1401 | "support": { 1402 | "issues": "https://github.com/sebastianbergmann/diff/issues", 1403 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" 1404 | }, 1405 | "funding": [ 1406 | { 1407 | "url": "https://github.com/sebastianbergmann", 1408 | "type": "github" 1409 | } 1410 | ], 1411 | "time": "2023-05-07T05:35:17+00:00" 1412 | }, 1413 | { 1414 | "name": "sebastian/environment", 1415 | "version": "5.1.5", 1416 | "source": { 1417 | "type": "git", 1418 | "url": "https://github.com/sebastianbergmann/environment.git", 1419 | "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" 1420 | }, 1421 | "dist": { 1422 | "type": "zip", 1423 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", 1424 | "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", 1425 | "shasum": "" 1426 | }, 1427 | "require": { 1428 | "php": ">=7.3" 1429 | }, 1430 | "require-dev": { 1431 | "phpunit/phpunit": "^9.3" 1432 | }, 1433 | "suggest": { 1434 | "ext-posix": "*" 1435 | }, 1436 | "type": "library", 1437 | "extra": { 1438 | "branch-alias": { 1439 | "dev-master": "5.1-dev" 1440 | } 1441 | }, 1442 | "autoload": { 1443 | "classmap": [ 1444 | "src/" 1445 | ] 1446 | }, 1447 | "notification-url": "https://packagist.org/downloads/", 1448 | "license": [ 1449 | "BSD-3-Clause" 1450 | ], 1451 | "authors": [ 1452 | { 1453 | "name": "Sebastian Bergmann", 1454 | "email": "sebastian@phpunit.de" 1455 | } 1456 | ], 1457 | "description": "Provides functionality to handle HHVM/PHP environments", 1458 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1459 | "keywords": [ 1460 | "Xdebug", 1461 | "environment", 1462 | "hhvm" 1463 | ], 1464 | "support": { 1465 | "issues": "https://github.com/sebastianbergmann/environment/issues", 1466 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" 1467 | }, 1468 | "funding": [ 1469 | { 1470 | "url": "https://github.com/sebastianbergmann", 1471 | "type": "github" 1472 | } 1473 | ], 1474 | "time": "2023-02-03T06:03:51+00:00" 1475 | }, 1476 | { 1477 | "name": "sebastian/exporter", 1478 | "version": "4.0.5", 1479 | "source": { 1480 | "type": "git", 1481 | "url": "https://github.com/sebastianbergmann/exporter.git", 1482 | "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" 1483 | }, 1484 | "dist": { 1485 | "type": "zip", 1486 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", 1487 | "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", 1488 | "shasum": "" 1489 | }, 1490 | "require": { 1491 | "php": ">=7.3", 1492 | "sebastian/recursion-context": "^4.0" 1493 | }, 1494 | "require-dev": { 1495 | "ext-mbstring": "*", 1496 | "phpunit/phpunit": "^9.3" 1497 | }, 1498 | "type": "library", 1499 | "extra": { 1500 | "branch-alias": { 1501 | "dev-master": "4.0-dev" 1502 | } 1503 | }, 1504 | "autoload": { 1505 | "classmap": [ 1506 | "src/" 1507 | ] 1508 | }, 1509 | "notification-url": "https://packagist.org/downloads/", 1510 | "license": [ 1511 | "BSD-3-Clause" 1512 | ], 1513 | "authors": [ 1514 | { 1515 | "name": "Sebastian Bergmann", 1516 | "email": "sebastian@phpunit.de" 1517 | }, 1518 | { 1519 | "name": "Jeff Welch", 1520 | "email": "whatthejeff@gmail.com" 1521 | }, 1522 | { 1523 | "name": "Volker Dusch", 1524 | "email": "github@wallbash.com" 1525 | }, 1526 | { 1527 | "name": "Adam Harvey", 1528 | "email": "aharvey@php.net" 1529 | }, 1530 | { 1531 | "name": "Bernhard Schussek", 1532 | "email": "bschussek@gmail.com" 1533 | } 1534 | ], 1535 | "description": "Provides the functionality to export PHP variables for visualization", 1536 | "homepage": "https://www.github.com/sebastianbergmann/exporter", 1537 | "keywords": [ 1538 | "export", 1539 | "exporter" 1540 | ], 1541 | "support": { 1542 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 1543 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" 1544 | }, 1545 | "funding": [ 1546 | { 1547 | "url": "https://github.com/sebastianbergmann", 1548 | "type": "github" 1549 | } 1550 | ], 1551 | "time": "2022-09-14T06:03:37+00:00" 1552 | }, 1553 | { 1554 | "name": "sebastian/global-state", 1555 | "version": "5.0.5", 1556 | "source": { 1557 | "type": "git", 1558 | "url": "https://github.com/sebastianbergmann/global-state.git", 1559 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" 1560 | }, 1561 | "dist": { 1562 | "type": "zip", 1563 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", 1564 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", 1565 | "shasum": "" 1566 | }, 1567 | "require": { 1568 | "php": ">=7.3", 1569 | "sebastian/object-reflector": "^2.0", 1570 | "sebastian/recursion-context": "^4.0" 1571 | }, 1572 | "require-dev": { 1573 | "ext-dom": "*", 1574 | "phpunit/phpunit": "^9.3" 1575 | }, 1576 | "suggest": { 1577 | "ext-uopz": "*" 1578 | }, 1579 | "type": "library", 1580 | "extra": { 1581 | "branch-alias": { 1582 | "dev-master": "5.0-dev" 1583 | } 1584 | }, 1585 | "autoload": { 1586 | "classmap": [ 1587 | "src/" 1588 | ] 1589 | }, 1590 | "notification-url": "https://packagist.org/downloads/", 1591 | "license": [ 1592 | "BSD-3-Clause" 1593 | ], 1594 | "authors": [ 1595 | { 1596 | "name": "Sebastian Bergmann", 1597 | "email": "sebastian@phpunit.de" 1598 | } 1599 | ], 1600 | "description": "Snapshotting of global state", 1601 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1602 | "keywords": [ 1603 | "global state" 1604 | ], 1605 | "support": { 1606 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 1607 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" 1608 | }, 1609 | "funding": [ 1610 | { 1611 | "url": "https://github.com/sebastianbergmann", 1612 | "type": "github" 1613 | } 1614 | ], 1615 | "time": "2022-02-14T08:28:10+00:00" 1616 | }, 1617 | { 1618 | "name": "sebastian/lines-of-code", 1619 | "version": "1.0.3", 1620 | "source": { 1621 | "type": "git", 1622 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 1623 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" 1624 | }, 1625 | "dist": { 1626 | "type": "zip", 1627 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", 1628 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", 1629 | "shasum": "" 1630 | }, 1631 | "require": { 1632 | "nikic/php-parser": "^4.6", 1633 | "php": ">=7.3" 1634 | }, 1635 | "require-dev": { 1636 | "phpunit/phpunit": "^9.3" 1637 | }, 1638 | "type": "library", 1639 | "extra": { 1640 | "branch-alias": { 1641 | "dev-master": "1.0-dev" 1642 | } 1643 | }, 1644 | "autoload": { 1645 | "classmap": [ 1646 | "src/" 1647 | ] 1648 | }, 1649 | "notification-url": "https://packagist.org/downloads/", 1650 | "license": [ 1651 | "BSD-3-Clause" 1652 | ], 1653 | "authors": [ 1654 | { 1655 | "name": "Sebastian Bergmann", 1656 | "email": "sebastian@phpunit.de", 1657 | "role": "lead" 1658 | } 1659 | ], 1660 | "description": "Library for counting the lines of code in PHP source code", 1661 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 1662 | "support": { 1663 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", 1664 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" 1665 | }, 1666 | "funding": [ 1667 | { 1668 | "url": "https://github.com/sebastianbergmann", 1669 | "type": "github" 1670 | } 1671 | ], 1672 | "time": "2020-11-28T06:42:11+00:00" 1673 | }, 1674 | { 1675 | "name": "sebastian/object-enumerator", 1676 | "version": "4.0.4", 1677 | "source": { 1678 | "type": "git", 1679 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1680 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" 1681 | }, 1682 | "dist": { 1683 | "type": "zip", 1684 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", 1685 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", 1686 | "shasum": "" 1687 | }, 1688 | "require": { 1689 | "php": ">=7.3", 1690 | "sebastian/object-reflector": "^2.0", 1691 | "sebastian/recursion-context": "^4.0" 1692 | }, 1693 | "require-dev": { 1694 | "phpunit/phpunit": "^9.3" 1695 | }, 1696 | "type": "library", 1697 | "extra": { 1698 | "branch-alias": { 1699 | "dev-master": "4.0-dev" 1700 | } 1701 | }, 1702 | "autoload": { 1703 | "classmap": [ 1704 | "src/" 1705 | ] 1706 | }, 1707 | "notification-url": "https://packagist.org/downloads/", 1708 | "license": [ 1709 | "BSD-3-Clause" 1710 | ], 1711 | "authors": [ 1712 | { 1713 | "name": "Sebastian Bergmann", 1714 | "email": "sebastian@phpunit.de" 1715 | } 1716 | ], 1717 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1718 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1719 | "support": { 1720 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 1721 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" 1722 | }, 1723 | "funding": [ 1724 | { 1725 | "url": "https://github.com/sebastianbergmann", 1726 | "type": "github" 1727 | } 1728 | ], 1729 | "time": "2020-10-26T13:12:34+00:00" 1730 | }, 1731 | { 1732 | "name": "sebastian/object-reflector", 1733 | "version": "2.0.4", 1734 | "source": { 1735 | "type": "git", 1736 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1737 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" 1738 | }, 1739 | "dist": { 1740 | "type": "zip", 1741 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 1742 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 1743 | "shasum": "" 1744 | }, 1745 | "require": { 1746 | "php": ">=7.3" 1747 | }, 1748 | "require-dev": { 1749 | "phpunit/phpunit": "^9.3" 1750 | }, 1751 | "type": "library", 1752 | "extra": { 1753 | "branch-alias": { 1754 | "dev-master": "2.0-dev" 1755 | } 1756 | }, 1757 | "autoload": { 1758 | "classmap": [ 1759 | "src/" 1760 | ] 1761 | }, 1762 | "notification-url": "https://packagist.org/downloads/", 1763 | "license": [ 1764 | "BSD-3-Clause" 1765 | ], 1766 | "authors": [ 1767 | { 1768 | "name": "Sebastian Bergmann", 1769 | "email": "sebastian@phpunit.de" 1770 | } 1771 | ], 1772 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1773 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1774 | "support": { 1775 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 1776 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" 1777 | }, 1778 | "funding": [ 1779 | { 1780 | "url": "https://github.com/sebastianbergmann", 1781 | "type": "github" 1782 | } 1783 | ], 1784 | "time": "2020-10-26T13:14:26+00:00" 1785 | }, 1786 | { 1787 | "name": "sebastian/recursion-context", 1788 | "version": "4.0.5", 1789 | "source": { 1790 | "type": "git", 1791 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1792 | "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" 1793 | }, 1794 | "dist": { 1795 | "type": "zip", 1796 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", 1797 | "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", 1798 | "shasum": "" 1799 | }, 1800 | "require": { 1801 | "php": ">=7.3" 1802 | }, 1803 | "require-dev": { 1804 | "phpunit/phpunit": "^9.3" 1805 | }, 1806 | "type": "library", 1807 | "extra": { 1808 | "branch-alias": { 1809 | "dev-master": "4.0-dev" 1810 | } 1811 | }, 1812 | "autoload": { 1813 | "classmap": [ 1814 | "src/" 1815 | ] 1816 | }, 1817 | "notification-url": "https://packagist.org/downloads/", 1818 | "license": [ 1819 | "BSD-3-Clause" 1820 | ], 1821 | "authors": [ 1822 | { 1823 | "name": "Sebastian Bergmann", 1824 | "email": "sebastian@phpunit.de" 1825 | }, 1826 | { 1827 | "name": "Jeff Welch", 1828 | "email": "whatthejeff@gmail.com" 1829 | }, 1830 | { 1831 | "name": "Adam Harvey", 1832 | "email": "aharvey@php.net" 1833 | } 1834 | ], 1835 | "description": "Provides functionality to recursively process PHP variables", 1836 | "homepage": "https://github.com/sebastianbergmann/recursion-context", 1837 | "support": { 1838 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 1839 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" 1840 | }, 1841 | "funding": [ 1842 | { 1843 | "url": "https://github.com/sebastianbergmann", 1844 | "type": "github" 1845 | } 1846 | ], 1847 | "time": "2023-02-03T06:07:39+00:00" 1848 | }, 1849 | { 1850 | "name": "sebastian/resource-operations", 1851 | "version": "3.0.3", 1852 | "source": { 1853 | "type": "git", 1854 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1855 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" 1856 | }, 1857 | "dist": { 1858 | "type": "zip", 1859 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 1860 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 1861 | "shasum": "" 1862 | }, 1863 | "require": { 1864 | "php": ">=7.3" 1865 | }, 1866 | "require-dev": { 1867 | "phpunit/phpunit": "^9.0" 1868 | }, 1869 | "type": "library", 1870 | "extra": { 1871 | "branch-alias": { 1872 | "dev-master": "3.0-dev" 1873 | } 1874 | }, 1875 | "autoload": { 1876 | "classmap": [ 1877 | "src/" 1878 | ] 1879 | }, 1880 | "notification-url": "https://packagist.org/downloads/", 1881 | "license": [ 1882 | "BSD-3-Clause" 1883 | ], 1884 | "authors": [ 1885 | { 1886 | "name": "Sebastian Bergmann", 1887 | "email": "sebastian@phpunit.de" 1888 | } 1889 | ], 1890 | "description": "Provides a list of PHP built-in functions that operate on resources", 1891 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1892 | "support": { 1893 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues", 1894 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" 1895 | }, 1896 | "funding": [ 1897 | { 1898 | "url": "https://github.com/sebastianbergmann", 1899 | "type": "github" 1900 | } 1901 | ], 1902 | "time": "2020-09-28T06:45:17+00:00" 1903 | }, 1904 | { 1905 | "name": "sebastian/type", 1906 | "version": "3.2.1", 1907 | "source": { 1908 | "type": "git", 1909 | "url": "https://github.com/sebastianbergmann/type.git", 1910 | "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" 1911 | }, 1912 | "dist": { 1913 | "type": "zip", 1914 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", 1915 | "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", 1916 | "shasum": "" 1917 | }, 1918 | "require": { 1919 | "php": ">=7.3" 1920 | }, 1921 | "require-dev": { 1922 | "phpunit/phpunit": "^9.5" 1923 | }, 1924 | "type": "library", 1925 | "extra": { 1926 | "branch-alias": { 1927 | "dev-master": "3.2-dev" 1928 | } 1929 | }, 1930 | "autoload": { 1931 | "classmap": [ 1932 | "src/" 1933 | ] 1934 | }, 1935 | "notification-url": "https://packagist.org/downloads/", 1936 | "license": [ 1937 | "BSD-3-Clause" 1938 | ], 1939 | "authors": [ 1940 | { 1941 | "name": "Sebastian Bergmann", 1942 | "email": "sebastian@phpunit.de", 1943 | "role": "lead" 1944 | } 1945 | ], 1946 | "description": "Collection of value objects that represent the types of the PHP type system", 1947 | "homepage": "https://github.com/sebastianbergmann/type", 1948 | "support": { 1949 | "issues": "https://github.com/sebastianbergmann/type/issues", 1950 | "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" 1951 | }, 1952 | "funding": [ 1953 | { 1954 | "url": "https://github.com/sebastianbergmann", 1955 | "type": "github" 1956 | } 1957 | ], 1958 | "time": "2023-02-03T06:13:03+00:00" 1959 | }, 1960 | { 1961 | "name": "sebastian/version", 1962 | "version": "3.0.2", 1963 | "source": { 1964 | "type": "git", 1965 | "url": "https://github.com/sebastianbergmann/version.git", 1966 | "reference": "c6c1022351a901512170118436c764e473f6de8c" 1967 | }, 1968 | "dist": { 1969 | "type": "zip", 1970 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", 1971 | "reference": "c6c1022351a901512170118436c764e473f6de8c", 1972 | "shasum": "" 1973 | }, 1974 | "require": { 1975 | "php": ">=7.3" 1976 | }, 1977 | "type": "library", 1978 | "extra": { 1979 | "branch-alias": { 1980 | "dev-master": "3.0-dev" 1981 | } 1982 | }, 1983 | "autoload": { 1984 | "classmap": [ 1985 | "src/" 1986 | ] 1987 | }, 1988 | "notification-url": "https://packagist.org/downloads/", 1989 | "license": [ 1990 | "BSD-3-Clause" 1991 | ], 1992 | "authors": [ 1993 | { 1994 | "name": "Sebastian Bergmann", 1995 | "email": "sebastian@phpunit.de", 1996 | "role": "lead" 1997 | } 1998 | ], 1999 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2000 | "homepage": "https://github.com/sebastianbergmann/version", 2001 | "support": { 2002 | "issues": "https://github.com/sebastianbergmann/version/issues", 2003 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" 2004 | }, 2005 | "funding": [ 2006 | { 2007 | "url": "https://github.com/sebastianbergmann", 2008 | "type": "github" 2009 | } 2010 | ], 2011 | "time": "2020-09-28T06:39:44+00:00" 2012 | }, 2013 | { 2014 | "name": "slim/psr7", 2015 | "version": "1.6.1", 2016 | "source": { 2017 | "type": "git", 2018 | "url": "https://github.com/slimphp/Slim-Psr7.git", 2019 | "reference": "72d2b2bac94ab4575d369f605dbfafbe168d3163" 2020 | }, 2021 | "dist": { 2022 | "type": "zip", 2023 | "url": "https://api.github.com/repos/slimphp/Slim-Psr7/zipball/72d2b2bac94ab4575d369f605dbfafbe168d3163", 2024 | "reference": "72d2b2bac94ab4575d369f605dbfafbe168d3163", 2025 | "shasum": "" 2026 | }, 2027 | "require": { 2028 | "fig/http-message-util": "^1.1.5", 2029 | "php": "^7.4 || ^8.0", 2030 | "psr/http-factory": "^1.0", 2031 | "psr/http-message": "^1.0", 2032 | "ralouphie/getallheaders": "^3.0", 2033 | "symfony/polyfill-php80": "^1.26" 2034 | }, 2035 | "provide": { 2036 | "psr/http-factory-implementation": "1.0", 2037 | "psr/http-message-implementation": "1.0" 2038 | }, 2039 | "require-dev": { 2040 | "adriansuter/php-autoload-override": "^1.3", 2041 | "ext-json": "*", 2042 | "http-interop/http-factory-tests": "^0.9.0", 2043 | "php-http/psr7-integration-tests": "1.1", 2044 | "phpspec/prophecy": "^1.15", 2045 | "phpspec/prophecy-phpunit": "^2.0", 2046 | "phpstan/phpstan": "^1.8", 2047 | "phpunit/phpunit": "^9.5", 2048 | "squizlabs/php_codesniffer": "^3.7" 2049 | }, 2050 | "type": "library", 2051 | "autoload": { 2052 | "psr-4": { 2053 | "Slim\\Psr7\\": "src" 2054 | } 2055 | }, 2056 | "notification-url": "https://packagist.org/downloads/", 2057 | "license": [ 2058 | "MIT" 2059 | ], 2060 | "authors": [ 2061 | { 2062 | "name": "Josh Lockhart", 2063 | "email": "hello@joshlockhart.com", 2064 | "homepage": "http://joshlockhart.com" 2065 | }, 2066 | { 2067 | "name": "Andrew Smith", 2068 | "email": "a.smith@silentworks.co.uk", 2069 | "homepage": "http://silentworks.co.uk" 2070 | }, 2071 | { 2072 | "name": "Rob Allen", 2073 | "email": "rob@akrabat.com", 2074 | "homepage": "http://akrabat.com" 2075 | }, 2076 | { 2077 | "name": "Pierre Berube", 2078 | "email": "pierre@lgse.com", 2079 | "homepage": "http://www.lgse.com" 2080 | } 2081 | ], 2082 | "description": "Strict PSR-7 implementation", 2083 | "homepage": "https://www.slimframework.com", 2084 | "keywords": [ 2085 | "http", 2086 | "psr-7", 2087 | "psr7" 2088 | ], 2089 | "support": { 2090 | "issues": "https://github.com/slimphp/Slim-Psr7/issues", 2091 | "source": "https://github.com/slimphp/Slim-Psr7/tree/1.6.1" 2092 | }, 2093 | "time": "2023-04-17T16:02:20+00:00" 2094 | }, 2095 | { 2096 | "name": "symfony/polyfill-php80", 2097 | "version": "v1.27.0", 2098 | "source": { 2099 | "type": "git", 2100 | "url": "https://github.com/symfony/polyfill-php80.git", 2101 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" 2102 | }, 2103 | "dist": { 2104 | "type": "zip", 2105 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", 2106 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", 2107 | "shasum": "" 2108 | }, 2109 | "require": { 2110 | "php": ">=7.1" 2111 | }, 2112 | "type": "library", 2113 | "extra": { 2114 | "branch-alias": { 2115 | "dev-main": "1.27-dev" 2116 | }, 2117 | "thanks": { 2118 | "name": "symfony/polyfill", 2119 | "url": "https://github.com/symfony/polyfill" 2120 | } 2121 | }, 2122 | "autoload": { 2123 | "files": [ 2124 | "bootstrap.php" 2125 | ], 2126 | "psr-4": { 2127 | "Symfony\\Polyfill\\Php80\\": "" 2128 | }, 2129 | "classmap": [ 2130 | "Resources/stubs" 2131 | ] 2132 | }, 2133 | "notification-url": "https://packagist.org/downloads/", 2134 | "license": [ 2135 | "MIT" 2136 | ], 2137 | "authors": [ 2138 | { 2139 | "name": "Ion Bazan", 2140 | "email": "ion.bazan@gmail.com" 2141 | }, 2142 | { 2143 | "name": "Nicolas Grekas", 2144 | "email": "p@tchwork.com" 2145 | }, 2146 | { 2147 | "name": "Symfony Community", 2148 | "homepage": "https://symfony.com/contributors" 2149 | } 2150 | ], 2151 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 2152 | "homepage": "https://symfony.com", 2153 | "keywords": [ 2154 | "compatibility", 2155 | "polyfill", 2156 | "portable", 2157 | "shim" 2158 | ], 2159 | "support": { 2160 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" 2161 | }, 2162 | "funding": [ 2163 | { 2164 | "url": "https://symfony.com/sponsor", 2165 | "type": "custom" 2166 | }, 2167 | { 2168 | "url": "https://github.com/fabpot", 2169 | "type": "github" 2170 | }, 2171 | { 2172 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2173 | "type": "tidelift" 2174 | } 2175 | ], 2176 | "time": "2022-11-03T14:55:06+00:00" 2177 | }, 2178 | { 2179 | "name": "theseer/tokenizer", 2180 | "version": "1.2.1", 2181 | "source": { 2182 | "type": "git", 2183 | "url": "https://github.com/theseer/tokenizer.git", 2184 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" 2185 | }, 2186 | "dist": { 2187 | "type": "zip", 2188 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", 2189 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", 2190 | "shasum": "" 2191 | }, 2192 | "require": { 2193 | "ext-dom": "*", 2194 | "ext-tokenizer": "*", 2195 | "ext-xmlwriter": "*", 2196 | "php": "^7.2 || ^8.0" 2197 | }, 2198 | "type": "library", 2199 | "autoload": { 2200 | "classmap": [ 2201 | "src/" 2202 | ] 2203 | }, 2204 | "notification-url": "https://packagist.org/downloads/", 2205 | "license": [ 2206 | "BSD-3-Clause" 2207 | ], 2208 | "authors": [ 2209 | { 2210 | "name": "Arne Blankerts", 2211 | "email": "arne@blankerts.de", 2212 | "role": "Developer" 2213 | } 2214 | ], 2215 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 2216 | "support": { 2217 | "issues": "https://github.com/theseer/tokenizer/issues", 2218 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1" 2219 | }, 2220 | "funding": [ 2221 | { 2222 | "url": "https://github.com/theseer", 2223 | "type": "github" 2224 | } 2225 | ], 2226 | "time": "2021-07-28T10:34:58+00:00" 2227 | } 2228 | ], 2229 | "aliases": [], 2230 | "minimum-stability": "stable", 2231 | "stability-flags": [], 2232 | "prefer-stable": false, 2233 | "prefer-lowest": false, 2234 | "platform": { 2235 | "php": ">=7.4" 2236 | }, 2237 | "platform-dev": [], 2238 | "plugin-api-version": "2.3.0" 2239 | } 2240 | -------------------------------------------------------------------------------- /phpcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Coding standard 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | RKA 21 | tests 22 | 23 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | tests 8 | 9 | 10 | -------------------------------------------------------------------------------- /tests/RKATest/SessionMiddlewareTest.php: -------------------------------------------------------------------------------- 1 | assertEquals(PHP_SESSION_NONE, session_status()); 31 | $session->start(); 32 | 33 | $expected = [ 34 | 'lifetime' => 7200, 35 | 'path' => '/', 36 | 'domain' => '', 37 | 'secure' => false, 38 | 'httponly' => true, 39 | 'samesite' => '', 40 | ]; 41 | $this->assertEquals($expected, session_get_cookie_params()); 42 | 43 | $this->assertEquals(PHP_SESSION_ACTIVE, session_status()); 44 | $this->assertEquals('RKA', session_name()); 45 | } 46 | 47 | public function testOptions(): void 48 | { 49 | $session = new SessionMiddleware([ 50 | 'name' => 'Test', 51 | 'lifetime' => '3600', 52 | 'path' => '/test', 53 | 'domain' => 'example.com', 54 | 'secure' => true, 55 | 'httponly' => false, 56 | ]); 57 | 58 | $this->assertEquals(PHP_SESSION_NONE, session_status()); 59 | $session->start(); 60 | 61 | $expected = [ 62 | 'lifetime' => 3600, 63 | 'path' => '/test', 64 | 'domain' => 'example.com', 65 | 'secure' => true, 66 | 'httponly' => false, 67 | 'samesite' => '', 68 | ]; 69 | $this->assertEquals($expected, session_get_cookie_params()); 70 | 71 | $this->assertEquals(PHP_SESSION_ACTIVE, session_status()); 72 | $this->assertEquals('Test', session_name()); 73 | } 74 | 75 | public function testStartingSessionTwiceCausesNoWarning(): void 76 | { 77 | $session = new SessionMiddleware([]); 78 | 79 | $this->assertEquals(PHP_SESSION_NONE, session_status()); 80 | $session->start(); 81 | $this->assertEquals(PHP_SESSION_ACTIVE, session_status()); 82 | 83 | $session->start(); 84 | $this->assertEquals(PHP_SESSION_ACTIVE, session_status()); 85 | } 86 | 87 | public function testCallStartsSession(): void 88 | { 89 | $session = new SessionMiddleware([]); 90 | 91 | $env = Environment::mock(); 92 | $uri = (new UriFactory())->createUri('https://example.com:443/foo/bar?abc=123'); 93 | $headers = Headers::createFromGlobals($env); 94 | $cookies = []; 95 | $serverParams = $env; 96 | $body = (new StreamFactory())->createStream(); 97 | $uploadedFiles = UploadedFile::createFromGlobals($env); 98 | 99 | $request = new Request('GET', $uri, $headers, $cookies, $serverParams, $body, $uploadedFiles); 100 | $response = new Response(); 101 | $next = function ($request, $response) { 102 | return $response; 103 | }; 104 | 105 | $this->assertEquals(PHP_SESSION_NONE, session_status()); 106 | @$session($request, $response, $next); // silence cookie warning 107 | $this->assertEquals(PHP_SESSION_ACTIVE, session_status()); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /tests/RKATest/SessionTest.php: -------------------------------------------------------------------------------- 1 | '1', 13 | ]; 14 | } 15 | 16 | public function testGet() 17 | { 18 | $session = new Session; 19 | $a = $session->a; 20 | $b = $session->get('b', '2'); 21 | 22 | $this->assertEquals('1', $a); 23 | $this->assertEquals('2', $b); 24 | } 25 | 26 | public function testSet() 27 | { 28 | $session = new Session; 29 | 30 | $session->set('c', '3'); 31 | $this->assertEquals('3', $session->get('c')); 32 | 33 | $session->d = '4'; 34 | $this->assertEquals('4', $session->get('d')); 35 | } 36 | 37 | public function testDelete() 38 | { 39 | $session = new Session; 40 | 41 | $session->set('c', '3'); 42 | $this->assertEquals('3', $session->get('c')); 43 | 44 | $session->delete('c'); 45 | $this->assertNull($session->get('c')); 46 | } 47 | 48 | public function testClearAll() 49 | { 50 | $session = new Session; 51 | 52 | $this->assertEquals('1', $session->get('a')); 53 | 54 | $session->clearAll(); 55 | $this->assertNull($session->get('a')); 56 | } 57 | 58 | public function testIsset() 59 | { 60 | $session = new Session; 61 | $this->assertTrue(isset($session->a)); 62 | } 63 | 64 | public function testUnset() 65 | { 66 | $session = new Session; 67 | 68 | $session->set('c', '3'); 69 | $this->assertEquals('3', $session->get('c')); 70 | 71 | unset($session->c); 72 | $this->assertNull($session->get('c')); 73 | } 74 | 75 | public function testDestroy() 76 | { 77 | @session_start(); 78 | $this->assertEquals(PHP_SESSION_ACTIVE, session_status()); 79 | @Session::destroy(); // silence headers already sent warning 80 | $this->assertEquals(PHP_SESSION_NONE, session_status()); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 |