├── .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 |