├── src ├── helpers.php └── Dot.php ├── composer.json ├── LICENSE.md └── composer.lock /src/helpers.php: -------------------------------------------------------------------------------- 1 | 7 | * @link https://github.com/adbario/php-dot-notation 8 | * @license https://github.com/adbario/php-dot-notation/blob/3.x/LICENSE.md (MIT License) 9 | */ 10 | 11 | use Adbar\Dot; 12 | 13 | if (! function_exists('dot')) { 14 | /** 15 | * Create a new Dot object with the given items 16 | * 17 | * @param mixed $items 18 | * @param bool $parse 19 | * @param non-empty-string $delimiter 20 | * @return \Adbar\Dot 21 | */ 22 | function dot($items, $parse = false, $delimiter = ".") 23 | { 24 | return new Dot($items, $parse, $delimiter); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adbario/php-dot-notation", 3 | "description": "PHP dot notation access to arrays", 4 | "keywords": ["dotnotation", "arrayaccess"], 5 | "homepage": "https://github.com/adbario/php-dot-notation", 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "Riku Särkinen", 10 | "email": "riku@adbar.io" 11 | } 12 | ], 13 | "require": { 14 | "php": "^7.4 || ^8.0", 15 | "ext-json": "*" 16 | }, 17 | "require-dev": { 18 | "phpunit/phpunit": "^9.5", 19 | "squizlabs/php_codesniffer": "^3.7", 20 | "phpstan/phpstan": "^1.8" 21 | }, 22 | "autoload": { 23 | "files": [ 24 | "src/helpers.php" 25 | ], 26 | "psr-4": { 27 | "Adbar\\": "src" 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # The MIT License (MIT) 2 | 3 | Copyright (c) 2016-2022 Riku Särkinen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/Dot.php: -------------------------------------------------------------------------------- 1 | 7 | * @link https://github.com/adbario/php-dot-notation 8 | * @license https://github.com/adbario/php-dot-notation/blob/3.x/LICENSE.md (MIT License) 9 | */ 10 | 11 | namespace Adbar; 12 | 13 | use Countable; 14 | use ArrayAccess; 15 | use ArrayIterator; 16 | use JsonSerializable; 17 | use IteratorAggregate; 18 | use Traversable; 19 | 20 | /** 21 | * Dot 22 | * 23 | * This class provides a dot notation access and helper functions for 24 | * working with arrays of data. Inspired by Laravel Collection. 25 | * 26 | * @template TKey of array-key 27 | * @template TValue mixed 28 | * 29 | * @implements \ArrayAccess 30 | * @implements \IteratorAggregate 31 | */ 32 | class Dot implements ArrayAccess, Countable, IteratorAggregate, JsonSerializable 33 | { 34 | /** 35 | * The stored items 36 | * 37 | * @var array 38 | */ 39 | protected $items = []; 40 | 41 | /** 42 | * The character to use as a delimiter, defaults to dot (.) 43 | * 44 | * @var non-empty-string 45 | */ 46 | protected $delimiter = "."; 47 | 48 | /** 49 | * Create a new Dot instance 50 | * 51 | * @param mixed $items 52 | * @param bool $parse 53 | * @param non-empty-string $delimiter 54 | * @return void 55 | */ 56 | public function __construct($items = [], $parse = false, $delimiter = ".") 57 | { 58 | $items = $this->getArrayItems($items); 59 | 60 | $this->delimiter = $delimiter ?: "."; 61 | 62 | if ($parse) { 63 | $this->set($items); 64 | } else { 65 | $this->items = $items; 66 | } 67 | } 68 | 69 | /** 70 | * Set a given key / value pair or pairs 71 | * if the key doesn't exist already 72 | * 73 | * @param array|int|string $keys 74 | * @param mixed $value 75 | * @return $this 76 | */ 77 | public function add($keys, $value = null) 78 | { 79 | if (is_array($keys)) { 80 | foreach ($keys as $key => $value) { 81 | $this->add($key, $value); 82 | } 83 | } elseif ($this->get($keys) === null) { 84 | $this->set($keys, $value); 85 | } 86 | 87 | return $this; 88 | } 89 | 90 | /** 91 | * Return all the stored items 92 | * 93 | * @return array 94 | */ 95 | public function all() 96 | { 97 | return $this->items; 98 | } 99 | 100 | /** 101 | * Delete the contents of a given key or keys 102 | * 103 | * @param array|int|string|null $keys 104 | * @return $this 105 | */ 106 | public function clear($keys = null) 107 | { 108 | if ($keys === null) { 109 | $this->items = []; 110 | 111 | return $this; 112 | } 113 | 114 | $keys = (array) $keys; 115 | 116 | foreach ($keys as $key) { 117 | $this->set($key, []); 118 | } 119 | 120 | return $this; 121 | } 122 | 123 | /** 124 | * Delete the given key or keys 125 | * 126 | * @param array|array|int|string $keys 127 | * @return $this 128 | */ 129 | public function delete($keys) 130 | { 131 | $keys = (array) $keys; 132 | 133 | foreach ($keys as $key) { 134 | if ($this->exists($this->items, $key)) { 135 | unset($this->items[$key]); 136 | 137 | continue; 138 | } 139 | 140 | $items = &$this->items; 141 | $segments = explode($this->delimiter, $key); 142 | $lastSegment = array_pop($segments); 143 | 144 | foreach ($segments as $segment) { 145 | if (!isset($items[$segment]) || !is_array($items[$segment])) { 146 | continue 2; 147 | } 148 | 149 | $items = &$items[$segment]; 150 | } 151 | 152 | unset($items[$lastSegment]); 153 | } 154 | 155 | return $this; 156 | } 157 | 158 | /** 159 | * Checks if the given key exists in the provided array. 160 | * 161 | * @param array $array Array to validate 162 | * @param int|string $key The key to look for 163 | * @return bool 164 | */ 165 | protected function exists($array, $key) 166 | { 167 | return array_key_exists($key, $array); 168 | } 169 | 170 | /** 171 | * Flatten an array with the given character as a key delimiter 172 | * 173 | * @param string $delimiter 174 | * @param mixed $items 175 | * @param string $prepend 176 | * @return array 177 | */ 178 | public function flatten($delimiter = '.', $items = null, $prepend = '') 179 | { 180 | $flatten = []; 181 | 182 | if ($items === null) { 183 | $items = $this->items; 184 | } 185 | 186 | foreach ($items as $key => $value) { 187 | if (is_array($value) && !empty($value)) { 188 | $flatten[] = $this->flatten($delimiter, $value, $prepend . $key . $delimiter); 189 | } else { 190 | $flatten[] = [$prepend . $key => $value]; 191 | } 192 | } 193 | 194 | return array_merge(...$flatten); 195 | } 196 | 197 | /** 198 | * Return the value of a given key 199 | * 200 | * @param int|string|null $key 201 | * @param mixed $default 202 | * @return mixed 203 | */ 204 | public function get($key = null, $default = null) 205 | { 206 | if ($key === null) { 207 | return $this->items; 208 | } 209 | 210 | if ($this->exists($this->items, $key)) { 211 | return $this->items[$key]; 212 | } 213 | 214 | if (!is_string($key) || strpos($key, $this->delimiter) === false) { 215 | return $default; 216 | } 217 | 218 | $items = $this->items; 219 | 220 | foreach (explode($this->delimiter, $key) as $segment) { 221 | if (!is_array($items) || !$this->exists($items, $segment)) { 222 | return $default; 223 | } 224 | 225 | $items = &$items[$segment]; 226 | } 227 | 228 | return $items; 229 | } 230 | 231 | /** 232 | * Return the given items as an array 233 | * 234 | * @param array|self|object|string $items 235 | * @return array 236 | */ 237 | protected function getArrayItems($items) 238 | { 239 | if (is_array($items)) { 240 | return $items; 241 | } 242 | 243 | if ($items instanceof self) { 244 | return $items->all(); 245 | } 246 | 247 | return (array) $items; 248 | } 249 | 250 | /** 251 | * Check if a given key or keys exists 252 | * 253 | * @param array|int|string $keys 254 | * @return bool 255 | */ 256 | public function has($keys) 257 | { 258 | $keys = (array) $keys; 259 | 260 | if (!$this->items || $keys === []) { 261 | return false; 262 | } 263 | 264 | foreach ($keys as $key) { 265 | $items = $this->items; 266 | 267 | if ($this->exists($items, $key)) { 268 | continue; 269 | } 270 | 271 | foreach (explode($this->delimiter, $key) as $segment) { 272 | if (!is_array($items) || !$this->exists($items, $segment)) { 273 | return false; 274 | } 275 | 276 | $items = $items[$segment]; 277 | } 278 | } 279 | 280 | return true; 281 | } 282 | 283 | /** 284 | * Check if a given key or keys are empty 285 | * 286 | * @param array|int|string|null $keys 287 | * @return bool 288 | */ 289 | public function isEmpty($keys = null) 290 | { 291 | if ($keys === null) { 292 | return empty($this->items); 293 | } 294 | 295 | $keys = (array) $keys; 296 | 297 | foreach ($keys as $key) { 298 | if (!empty($this->get($key))) { 299 | return false; 300 | } 301 | } 302 | 303 | return true; 304 | } 305 | 306 | /** 307 | * Merge a given array or a Dot object with the given key 308 | * or with the whole Dot object 309 | * 310 | * @param array|self|string $key 311 | * @param array|self $value 312 | * @return $this 313 | */ 314 | public function merge($key, $value = []) 315 | { 316 | if (is_array($key)) { 317 | $this->items = array_merge($this->items, $key); 318 | } elseif (is_string($key)) { 319 | $items = (array) $this->get($key); 320 | $value = array_merge($items, $this->getArrayItems($value)); 321 | 322 | $this->set($key, $value); 323 | } elseif ($key instanceof self) { 324 | $this->items = array_merge($this->items, $key->all()); 325 | } 326 | 327 | return $this; 328 | } 329 | 330 | /** 331 | * Recursively merge a given array or a Dot object with the given key 332 | * or with the whole Dot object. 333 | * 334 | * Duplicate keys are converted to arrays. 335 | * 336 | * @param array|self|string $key 337 | * @param array|self $value 338 | * @return $this 339 | */ 340 | public function mergeRecursive($key, $value = []) 341 | { 342 | if (is_array($key)) { 343 | $this->items = array_merge_recursive($this->items, $key); 344 | } elseif (is_string($key)) { 345 | $items = (array) $this->get($key); 346 | $value = array_merge_recursive($items, $this->getArrayItems($value)); 347 | 348 | $this->set($key, $value); 349 | } elseif ($key instanceof self) { 350 | $this->items = array_merge_recursive($this->items, $key->all()); 351 | } 352 | 353 | return $this; 354 | } 355 | 356 | /** 357 | * Recursively merge a given array or a Dot object with the given key 358 | * or with the whole Dot object. 359 | * 360 | * Instead of converting duplicate keys to arrays, the value from 361 | * given array will replace the value in Dot object. 362 | * 363 | * @param array|self|string $key 364 | * @param array|self $value 365 | * @return $this 366 | */ 367 | public function mergeRecursiveDistinct($key, $value = []) 368 | { 369 | if (is_array($key)) { 370 | $this->items = $this->arrayMergeRecursiveDistinct($this->items, $key); 371 | } elseif (is_string($key)) { 372 | $items = (array) $this->get($key); 373 | $value = $this->arrayMergeRecursiveDistinct($items, $this->getArrayItems($value)); 374 | 375 | $this->set($key, $value); 376 | } elseif ($key instanceof self) { 377 | $this->items = $this->arrayMergeRecursiveDistinct($this->items, $key->all()); 378 | } 379 | 380 | return $this; 381 | } 382 | 383 | /** 384 | * Merges two arrays recursively. In contrast to array_merge_recursive, 385 | * duplicate keys are not converted to arrays but rather overwrite the 386 | * value in the first array with the duplicate value in the second array. 387 | * 388 | * @param array|array> $array1 Initial array to merge 389 | * @param array|array> $array2 Array to recursively merge 390 | * @return array|array> 391 | */ 392 | protected function arrayMergeRecursiveDistinct(array $array1, array $array2) 393 | { 394 | $merged = &$array1; 395 | 396 | foreach ($array2 as $key => $value) { 397 | if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) { 398 | $merged[$key] = $this->arrayMergeRecursiveDistinct($merged[$key], $value); 399 | } else { 400 | $merged[$key] = $value; 401 | } 402 | } 403 | 404 | return $merged; 405 | } 406 | 407 | /** 408 | * Return the value of a given key and 409 | * delete the key 410 | * 411 | * @param int|string|null $key 412 | * @param mixed $default 413 | * @return mixed 414 | */ 415 | public function pull($key = null, $default = null) 416 | { 417 | if ($key === null) { 418 | $value = $this->all(); 419 | $this->clear(); 420 | 421 | return $value; 422 | } 423 | 424 | $value = $this->get($key, $default); 425 | $this->delete($key); 426 | 427 | return $value; 428 | } 429 | 430 | /** 431 | * Push a given value to the end of the array 432 | * in a given key 433 | * 434 | * @param mixed $key 435 | * @param mixed $value 436 | * @return $this 437 | */ 438 | public function push($key, $value = null) 439 | { 440 | if ($value === null) { 441 | $this->items[] = $key; 442 | 443 | return $this; 444 | } 445 | 446 | $items = $this->get($key); 447 | 448 | if (is_array($items) || $items === null) { 449 | $items[] = $value; 450 | $this->set($key, $items); 451 | } 452 | 453 | return $this; 454 | } 455 | 456 | /** 457 | * Replace all values or values within the given key 458 | * with an array or Dot object 459 | * 460 | * @param array|self|string $key 461 | * @param array|self $value 462 | * @return $this 463 | */ 464 | public function replace($key, $value = []) 465 | { 466 | if (is_array($key)) { 467 | $this->items = array_replace($this->items, $key); 468 | } elseif (is_string($key)) { 469 | $items = (array) $this->get($key); 470 | $value = array_replace($items, $this->getArrayItems($value)); 471 | 472 | $this->set($key, $value); 473 | } elseif ($key instanceof self) { 474 | $this->items = array_replace($this->items, $key->all()); 475 | } 476 | 477 | return $this; 478 | } 479 | 480 | /** 481 | * Set a given key / value pair or pairs 482 | * 483 | * @param array|int|string $keys 484 | * @param mixed $value 485 | * @return $this 486 | */ 487 | public function set($keys, $value = null) 488 | { 489 | if (is_array($keys)) { 490 | foreach ($keys as $key => $value) { 491 | $this->set($key, $value); 492 | } 493 | 494 | return $this; 495 | } 496 | 497 | $items = &$this->items; 498 | 499 | if (is_string($keys)) { 500 | foreach (explode($this->delimiter, $keys) as $key) { 501 | if (!isset($items[$key]) || !is_array($items[$key])) { 502 | $items[$key] = []; 503 | } 504 | 505 | $items = &$items[$key]; 506 | } 507 | } 508 | 509 | $items = $value; 510 | 511 | return $this; 512 | } 513 | 514 | /** 515 | * Replace all items with a given array 516 | * 517 | * @param mixed $items 518 | * @return $this 519 | */ 520 | public function setArray($items) 521 | { 522 | $this->items = $this->getArrayItems($items); 523 | 524 | return $this; 525 | } 526 | 527 | /** 528 | * Replace all items with a given array as a reference 529 | * 530 | * @param array $items 531 | * @return $this 532 | */ 533 | public function setReference(array &$items) 534 | { 535 | $this->items = &$items; 536 | 537 | return $this; 538 | } 539 | 540 | /** 541 | * Return the value of a given key or all the values as JSON 542 | * 543 | * @param mixed $key 544 | * @param int $options 545 | * @return string|false 546 | */ 547 | public function toJson($key = null, $options = 0) 548 | { 549 | if (is_string($key)) { 550 | return json_encode($this->get($key), $options); 551 | } 552 | 553 | $options = $key === null ? 0 : $key; 554 | 555 | return json_encode($this->items, $options); 556 | } 557 | 558 | /** 559 | * Output or return a parsable string representation of the 560 | * given array when exported by var_export() 561 | * 562 | * @param array $items 563 | * @return object 564 | */ 565 | public static function __set_state(array $items): object 566 | { 567 | return (object) $items; 568 | } 569 | 570 | /* 571 | * -------------------------------------------------------------- 572 | * ArrayAccess interface 573 | * -------------------------------------------------------------- 574 | */ 575 | 576 | /** 577 | * Check if a given key exists 578 | * 579 | * @param int|string $key 580 | * @return bool 581 | */ 582 | public function offsetExists($key): bool 583 | { 584 | return $this->has($key); 585 | } 586 | 587 | /** 588 | * Return the value of a given key 589 | * 590 | * @param int|string $key 591 | * @return mixed 592 | */ 593 | #[\ReturnTypeWillChange] 594 | public function offsetGet($key) 595 | { 596 | return $this->get($key); 597 | } 598 | 599 | /** 600 | * Set a given value to the given key 601 | * 602 | * @param int|string|null $key 603 | * @param mixed $value 604 | */ 605 | public function offsetSet($key, $value): void 606 | { 607 | if ($key === null) { 608 | $this->items[] = $value; 609 | 610 | return; 611 | } 612 | 613 | $this->set($key, $value); 614 | } 615 | 616 | /** 617 | * Delete the given key 618 | * 619 | * @param int|string $key 620 | * @return void 621 | */ 622 | public function offsetUnset($key): void 623 | { 624 | $this->delete($key); 625 | } 626 | 627 | /* 628 | * -------------------------------------------------------------- 629 | * Countable interface 630 | * -------------------------------------------------------------- 631 | */ 632 | 633 | /** 634 | * Return the number of items in a given key 635 | * 636 | * @param int|string|null $key 637 | * @return int 638 | */ 639 | public function count($key = null): int 640 | { 641 | return count($this->get($key)); 642 | } 643 | 644 | /* 645 | * -------------------------------------------------------------- 646 | * IteratorAggregate interface 647 | * -------------------------------------------------------------- 648 | */ 649 | 650 | /** 651 | * Get an iterator for the stored items 652 | * 653 | * @return \ArrayIterator 654 | */ 655 | public function getIterator(): Traversable 656 | { 657 | return new ArrayIterator($this->items); 658 | } 659 | 660 | /* 661 | * -------------------------------------------------------------- 662 | * JsonSerializable interface 663 | * -------------------------------------------------------------- 664 | */ 665 | 666 | /** 667 | * Return items for JSON serialization 668 | * 669 | * @return array 670 | */ 671 | public function jsonSerialize(): array 672 | { 673 | return $this->items; 674 | } 675 | } 676 | -------------------------------------------------------------------------------- /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": "49b6aa4324b1a770eab448556f44e4ba", 8 | "packages": [], 9 | "packages-dev": [ 10 | { 11 | "name": "doctrine/instantiator", 12 | "version": "1.4.1", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/doctrine/instantiator.git", 16 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", 21 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "php": "^7.1 || ^8.0" 26 | }, 27 | "require-dev": { 28 | "doctrine/coding-standard": "^9", 29 | "ext-pdo": "*", 30 | "ext-phar": "*", 31 | "phpbench/phpbench": "^0.16 || ^1", 32 | "phpstan/phpstan": "^1.4", 33 | "phpstan/phpstan-phpunit": "^1", 34 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", 35 | "vimeo/psalm": "^4.22" 36 | }, 37 | "type": "library", 38 | "autoload": { 39 | "psr-4": { 40 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 41 | } 42 | }, 43 | "notification-url": "https://packagist.org/downloads/", 44 | "license": [ 45 | "MIT" 46 | ], 47 | "authors": [ 48 | { 49 | "name": "Marco Pivetta", 50 | "email": "ocramius@gmail.com", 51 | "homepage": "https://ocramius.github.io/" 52 | } 53 | ], 54 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 55 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 56 | "keywords": [ 57 | "constructor", 58 | "instantiate" 59 | ], 60 | "support": { 61 | "issues": "https://github.com/doctrine/instantiator/issues", 62 | "source": "https://github.com/doctrine/instantiator/tree/1.4.1" 63 | }, 64 | "funding": [ 65 | { 66 | "url": "https://www.doctrine-project.org/sponsorship.html", 67 | "type": "custom" 68 | }, 69 | { 70 | "url": "https://www.patreon.com/phpdoctrine", 71 | "type": "patreon" 72 | }, 73 | { 74 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 75 | "type": "tidelift" 76 | } 77 | ], 78 | "time": "2022-03-03T08:28:38+00:00" 79 | }, 80 | { 81 | "name": "myclabs/deep-copy", 82 | "version": "1.11.0", 83 | "source": { 84 | "type": "git", 85 | "url": "https://github.com/myclabs/DeepCopy.git", 86 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" 87 | }, 88 | "dist": { 89 | "type": "zip", 90 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", 91 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", 92 | "shasum": "" 93 | }, 94 | "require": { 95 | "php": "^7.1 || ^8.0" 96 | }, 97 | "conflict": { 98 | "doctrine/collections": "<1.6.8", 99 | "doctrine/common": "<2.13.3 || >=3,<3.2.2" 100 | }, 101 | "require-dev": { 102 | "doctrine/collections": "^1.6.8", 103 | "doctrine/common": "^2.13.3 || ^3.2.2", 104 | "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" 105 | }, 106 | "type": "library", 107 | "autoload": { 108 | "files": [ 109 | "src/DeepCopy/deep_copy.php" 110 | ], 111 | "psr-4": { 112 | "DeepCopy\\": "src/DeepCopy/" 113 | } 114 | }, 115 | "notification-url": "https://packagist.org/downloads/", 116 | "license": [ 117 | "MIT" 118 | ], 119 | "description": "Create deep copies (clones) of your objects", 120 | "keywords": [ 121 | "clone", 122 | "copy", 123 | "duplicate", 124 | "object", 125 | "object graph" 126 | ], 127 | "support": { 128 | "issues": "https://github.com/myclabs/DeepCopy/issues", 129 | "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" 130 | }, 131 | "funding": [ 132 | { 133 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 134 | "type": "tidelift" 135 | } 136 | ], 137 | "time": "2022-03-03T13:19:32+00:00" 138 | }, 139 | { 140 | "name": "nikic/php-parser", 141 | "version": "v4.13.2", 142 | "source": { 143 | "type": "git", 144 | "url": "https://github.com/nikic/PHP-Parser.git", 145 | "reference": "210577fe3cf7badcc5814d99455df46564f3c077" 146 | }, 147 | "dist": { 148 | "type": "zip", 149 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", 150 | "reference": "210577fe3cf7badcc5814d99455df46564f3c077", 151 | "shasum": "" 152 | }, 153 | "require": { 154 | "ext-tokenizer": "*", 155 | "php": ">=7.0" 156 | }, 157 | "require-dev": { 158 | "ircmaxell/php-yacc": "^0.0.7", 159 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 160 | }, 161 | "bin": [ 162 | "bin/php-parse" 163 | ], 164 | "type": "library", 165 | "extra": { 166 | "branch-alias": { 167 | "dev-master": "4.9-dev" 168 | } 169 | }, 170 | "autoload": { 171 | "psr-4": { 172 | "PhpParser\\": "lib/PhpParser" 173 | } 174 | }, 175 | "notification-url": "https://packagist.org/downloads/", 176 | "license": [ 177 | "BSD-3-Clause" 178 | ], 179 | "authors": [ 180 | { 181 | "name": "Nikita Popov" 182 | } 183 | ], 184 | "description": "A PHP parser written in PHP", 185 | "keywords": [ 186 | "parser", 187 | "php" 188 | ], 189 | "support": { 190 | "issues": "https://github.com/nikic/PHP-Parser/issues", 191 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" 192 | }, 193 | "time": "2021-11-30T19:35:32+00:00" 194 | }, 195 | { 196 | "name": "phar-io/manifest", 197 | "version": "2.0.3", 198 | "source": { 199 | "type": "git", 200 | "url": "https://github.com/phar-io/manifest.git", 201 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53" 202 | }, 203 | "dist": { 204 | "type": "zip", 205 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", 206 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53", 207 | "shasum": "" 208 | }, 209 | "require": { 210 | "ext-dom": "*", 211 | "ext-phar": "*", 212 | "ext-xmlwriter": "*", 213 | "phar-io/version": "^3.0.1", 214 | "php": "^7.2 || ^8.0" 215 | }, 216 | "type": "library", 217 | "extra": { 218 | "branch-alias": { 219 | "dev-master": "2.0.x-dev" 220 | } 221 | }, 222 | "autoload": { 223 | "classmap": [ 224 | "src/" 225 | ] 226 | }, 227 | "notification-url": "https://packagist.org/downloads/", 228 | "license": [ 229 | "BSD-3-Clause" 230 | ], 231 | "authors": [ 232 | { 233 | "name": "Arne Blankerts", 234 | "email": "arne@blankerts.de", 235 | "role": "Developer" 236 | }, 237 | { 238 | "name": "Sebastian Heuer", 239 | "email": "sebastian@phpeople.de", 240 | "role": "Developer" 241 | }, 242 | { 243 | "name": "Sebastian Bergmann", 244 | "email": "sebastian@phpunit.de", 245 | "role": "Developer" 246 | } 247 | ], 248 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 249 | "support": { 250 | "issues": "https://github.com/phar-io/manifest/issues", 251 | "source": "https://github.com/phar-io/manifest/tree/2.0.3" 252 | }, 253 | "time": "2021-07-20T11:28:43+00:00" 254 | }, 255 | { 256 | "name": "phar-io/version", 257 | "version": "3.2.1", 258 | "source": { 259 | "type": "git", 260 | "url": "https://github.com/phar-io/version.git", 261 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" 262 | }, 263 | "dist": { 264 | "type": "zip", 265 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 266 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 267 | "shasum": "" 268 | }, 269 | "require": { 270 | "php": "^7.2 || ^8.0" 271 | }, 272 | "type": "library", 273 | "autoload": { 274 | "classmap": [ 275 | "src/" 276 | ] 277 | }, 278 | "notification-url": "https://packagist.org/downloads/", 279 | "license": [ 280 | "BSD-3-Clause" 281 | ], 282 | "authors": [ 283 | { 284 | "name": "Arne Blankerts", 285 | "email": "arne@blankerts.de", 286 | "role": "Developer" 287 | }, 288 | { 289 | "name": "Sebastian Heuer", 290 | "email": "sebastian@phpeople.de", 291 | "role": "Developer" 292 | }, 293 | { 294 | "name": "Sebastian Bergmann", 295 | "email": "sebastian@phpunit.de", 296 | "role": "Developer" 297 | } 298 | ], 299 | "description": "Library for handling version information and constraints", 300 | "support": { 301 | "issues": "https://github.com/phar-io/version/issues", 302 | "source": "https://github.com/phar-io/version/tree/3.2.1" 303 | }, 304 | "time": "2022-02-21T01:04:05+00:00" 305 | }, 306 | { 307 | "name": "phpstan/phpstan", 308 | "version": "1.10.2", 309 | "source": { 310 | "type": "git", 311 | "url": "https://github.com/phpstan/phpstan.git", 312 | "reference": "a2ffec7db373d8da4973d1d62add872db5cd22dd" 313 | }, 314 | "dist": { 315 | "type": "zip", 316 | "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a2ffec7db373d8da4973d1d62add872db5cd22dd", 317 | "reference": "a2ffec7db373d8da4973d1d62add872db5cd22dd", 318 | "shasum": "" 319 | }, 320 | "require": { 321 | "php": "^7.2|^8.0" 322 | }, 323 | "conflict": { 324 | "phpstan/phpstan-shim": "*" 325 | }, 326 | "bin": [ 327 | "phpstan", 328 | "phpstan.phar" 329 | ], 330 | "type": "library", 331 | "autoload": { 332 | "files": [ 333 | "bootstrap.php" 334 | ] 335 | }, 336 | "notification-url": "https://packagist.org/downloads/", 337 | "license": [ 338 | "MIT" 339 | ], 340 | "description": "PHPStan - PHP Static Analysis Tool", 341 | "keywords": [ 342 | "dev", 343 | "static analysis" 344 | ], 345 | "support": { 346 | "issues": "https://github.com/phpstan/phpstan/issues", 347 | "source": "https://github.com/phpstan/phpstan/tree/1.10.2" 348 | }, 349 | "funding": [ 350 | { 351 | "url": "https://github.com/ondrejmirtes", 352 | "type": "github" 353 | }, 354 | { 355 | "url": "https://github.com/phpstan", 356 | "type": "github" 357 | }, 358 | { 359 | "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", 360 | "type": "tidelift" 361 | } 362 | ], 363 | "time": "2023-02-23T14:36:46+00:00" 364 | }, 365 | { 366 | "name": "phpunit/php-code-coverage", 367 | "version": "9.2.15", 368 | "source": { 369 | "type": "git", 370 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 371 | "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" 372 | }, 373 | "dist": { 374 | "type": "zip", 375 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", 376 | "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", 377 | "shasum": "" 378 | }, 379 | "require": { 380 | "ext-dom": "*", 381 | "ext-libxml": "*", 382 | "ext-xmlwriter": "*", 383 | "nikic/php-parser": "^4.13.0", 384 | "php": ">=7.3", 385 | "phpunit/php-file-iterator": "^3.0.3", 386 | "phpunit/php-text-template": "^2.0.2", 387 | "sebastian/code-unit-reverse-lookup": "^2.0.2", 388 | "sebastian/complexity": "^2.0", 389 | "sebastian/environment": "^5.1.2", 390 | "sebastian/lines-of-code": "^1.0.3", 391 | "sebastian/version": "^3.0.1", 392 | "theseer/tokenizer": "^1.2.0" 393 | }, 394 | "require-dev": { 395 | "phpunit/phpunit": "^9.3" 396 | }, 397 | "suggest": { 398 | "ext-pcov": "*", 399 | "ext-xdebug": "*" 400 | }, 401 | "type": "library", 402 | "extra": { 403 | "branch-alias": { 404 | "dev-master": "9.2-dev" 405 | } 406 | }, 407 | "autoload": { 408 | "classmap": [ 409 | "src/" 410 | ] 411 | }, 412 | "notification-url": "https://packagist.org/downloads/", 413 | "license": [ 414 | "BSD-3-Clause" 415 | ], 416 | "authors": [ 417 | { 418 | "name": "Sebastian Bergmann", 419 | "email": "sebastian@phpunit.de", 420 | "role": "lead" 421 | } 422 | ], 423 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 424 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 425 | "keywords": [ 426 | "coverage", 427 | "testing", 428 | "xunit" 429 | ], 430 | "support": { 431 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 432 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" 433 | }, 434 | "funding": [ 435 | { 436 | "url": "https://github.com/sebastianbergmann", 437 | "type": "github" 438 | } 439 | ], 440 | "time": "2022-03-07T09:28:20+00:00" 441 | }, 442 | { 443 | "name": "phpunit/php-file-iterator", 444 | "version": "3.0.6", 445 | "source": { 446 | "type": "git", 447 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 448 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" 449 | }, 450 | "dist": { 451 | "type": "zip", 452 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 453 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 454 | "shasum": "" 455 | }, 456 | "require": { 457 | "php": ">=7.3" 458 | }, 459 | "require-dev": { 460 | "phpunit/phpunit": "^9.3" 461 | }, 462 | "type": "library", 463 | "extra": { 464 | "branch-alias": { 465 | "dev-master": "3.0-dev" 466 | } 467 | }, 468 | "autoload": { 469 | "classmap": [ 470 | "src/" 471 | ] 472 | }, 473 | "notification-url": "https://packagist.org/downloads/", 474 | "license": [ 475 | "BSD-3-Clause" 476 | ], 477 | "authors": [ 478 | { 479 | "name": "Sebastian Bergmann", 480 | "email": "sebastian@phpunit.de", 481 | "role": "lead" 482 | } 483 | ], 484 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 485 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 486 | "keywords": [ 487 | "filesystem", 488 | "iterator" 489 | ], 490 | "support": { 491 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 492 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" 493 | }, 494 | "funding": [ 495 | { 496 | "url": "https://github.com/sebastianbergmann", 497 | "type": "github" 498 | } 499 | ], 500 | "time": "2021-12-02T12:48:52+00:00" 501 | }, 502 | { 503 | "name": "phpunit/php-invoker", 504 | "version": "3.1.1", 505 | "source": { 506 | "type": "git", 507 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 508 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" 509 | }, 510 | "dist": { 511 | "type": "zip", 512 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 513 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 514 | "shasum": "" 515 | }, 516 | "require": { 517 | "php": ">=7.3" 518 | }, 519 | "require-dev": { 520 | "ext-pcntl": "*", 521 | "phpunit/phpunit": "^9.3" 522 | }, 523 | "suggest": { 524 | "ext-pcntl": "*" 525 | }, 526 | "type": "library", 527 | "extra": { 528 | "branch-alias": { 529 | "dev-master": "3.1-dev" 530 | } 531 | }, 532 | "autoload": { 533 | "classmap": [ 534 | "src/" 535 | ] 536 | }, 537 | "notification-url": "https://packagist.org/downloads/", 538 | "license": [ 539 | "BSD-3-Clause" 540 | ], 541 | "authors": [ 542 | { 543 | "name": "Sebastian Bergmann", 544 | "email": "sebastian@phpunit.de", 545 | "role": "lead" 546 | } 547 | ], 548 | "description": "Invoke callables with a timeout", 549 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 550 | "keywords": [ 551 | "process" 552 | ], 553 | "support": { 554 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues", 555 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" 556 | }, 557 | "funding": [ 558 | { 559 | "url": "https://github.com/sebastianbergmann", 560 | "type": "github" 561 | } 562 | ], 563 | "time": "2020-09-28T05:58:55+00:00" 564 | }, 565 | { 566 | "name": "phpunit/php-text-template", 567 | "version": "2.0.4", 568 | "source": { 569 | "type": "git", 570 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 571 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" 572 | }, 573 | "dist": { 574 | "type": "zip", 575 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 576 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 577 | "shasum": "" 578 | }, 579 | "require": { 580 | "php": ">=7.3" 581 | }, 582 | "require-dev": { 583 | "phpunit/phpunit": "^9.3" 584 | }, 585 | "type": "library", 586 | "extra": { 587 | "branch-alias": { 588 | "dev-master": "2.0-dev" 589 | } 590 | }, 591 | "autoload": { 592 | "classmap": [ 593 | "src/" 594 | ] 595 | }, 596 | "notification-url": "https://packagist.org/downloads/", 597 | "license": [ 598 | "BSD-3-Clause" 599 | ], 600 | "authors": [ 601 | { 602 | "name": "Sebastian Bergmann", 603 | "email": "sebastian@phpunit.de", 604 | "role": "lead" 605 | } 606 | ], 607 | "description": "Simple template engine.", 608 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 609 | "keywords": [ 610 | "template" 611 | ], 612 | "support": { 613 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 614 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" 615 | }, 616 | "funding": [ 617 | { 618 | "url": "https://github.com/sebastianbergmann", 619 | "type": "github" 620 | } 621 | ], 622 | "time": "2020-10-26T05:33:50+00:00" 623 | }, 624 | { 625 | "name": "phpunit/php-timer", 626 | "version": "5.0.3", 627 | "source": { 628 | "type": "git", 629 | "url": "https://github.com/sebastianbergmann/php-timer.git", 630 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" 631 | }, 632 | "dist": { 633 | "type": "zip", 634 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 635 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 636 | "shasum": "" 637 | }, 638 | "require": { 639 | "php": ">=7.3" 640 | }, 641 | "require-dev": { 642 | "phpunit/phpunit": "^9.3" 643 | }, 644 | "type": "library", 645 | "extra": { 646 | "branch-alias": { 647 | "dev-master": "5.0-dev" 648 | } 649 | }, 650 | "autoload": { 651 | "classmap": [ 652 | "src/" 653 | ] 654 | }, 655 | "notification-url": "https://packagist.org/downloads/", 656 | "license": [ 657 | "BSD-3-Clause" 658 | ], 659 | "authors": [ 660 | { 661 | "name": "Sebastian Bergmann", 662 | "email": "sebastian@phpunit.de", 663 | "role": "lead" 664 | } 665 | ], 666 | "description": "Utility class for timing", 667 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 668 | "keywords": [ 669 | "timer" 670 | ], 671 | "support": { 672 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 673 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" 674 | }, 675 | "funding": [ 676 | { 677 | "url": "https://github.com/sebastianbergmann", 678 | "type": "github" 679 | } 680 | ], 681 | "time": "2020-10-26T13:16:10+00:00" 682 | }, 683 | { 684 | "name": "phpunit/phpunit", 685 | "version": "9.5.23", 686 | "source": { 687 | "type": "git", 688 | "url": "https://github.com/sebastianbergmann/phpunit.git", 689 | "reference": "888556852e7e9bbeeedb9656afe46118765ade34" 690 | }, 691 | "dist": { 692 | "type": "zip", 693 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/888556852e7e9bbeeedb9656afe46118765ade34", 694 | "reference": "888556852e7e9bbeeedb9656afe46118765ade34", 695 | "shasum": "" 696 | }, 697 | "require": { 698 | "doctrine/instantiator": "^1.3.1", 699 | "ext-dom": "*", 700 | "ext-json": "*", 701 | "ext-libxml": "*", 702 | "ext-mbstring": "*", 703 | "ext-xml": "*", 704 | "ext-xmlwriter": "*", 705 | "myclabs/deep-copy": "^1.10.1", 706 | "phar-io/manifest": "^2.0.3", 707 | "phar-io/version": "^3.0.2", 708 | "php": ">=7.3", 709 | "phpunit/php-code-coverage": "^9.2.13", 710 | "phpunit/php-file-iterator": "^3.0.5", 711 | "phpunit/php-invoker": "^3.1.1", 712 | "phpunit/php-text-template": "^2.0.3", 713 | "phpunit/php-timer": "^5.0.2", 714 | "sebastian/cli-parser": "^1.0.1", 715 | "sebastian/code-unit": "^1.0.6", 716 | "sebastian/comparator": "^4.0.5", 717 | "sebastian/diff": "^4.0.3", 718 | "sebastian/environment": "^5.1.3", 719 | "sebastian/exporter": "^4.0.3", 720 | "sebastian/global-state": "^5.0.1", 721 | "sebastian/object-enumerator": "^4.0.3", 722 | "sebastian/resource-operations": "^3.0.3", 723 | "sebastian/type": "^3.0", 724 | "sebastian/version": "^3.0.2" 725 | }, 726 | "suggest": { 727 | "ext-soap": "*", 728 | "ext-xdebug": "*" 729 | }, 730 | "bin": [ 731 | "phpunit" 732 | ], 733 | "type": "library", 734 | "extra": { 735 | "branch-alias": { 736 | "dev-master": "9.5-dev" 737 | } 738 | }, 739 | "autoload": { 740 | "files": [ 741 | "src/Framework/Assert/Functions.php" 742 | ], 743 | "classmap": [ 744 | "src/" 745 | ] 746 | }, 747 | "notification-url": "https://packagist.org/downloads/", 748 | "license": [ 749 | "BSD-3-Clause" 750 | ], 751 | "authors": [ 752 | { 753 | "name": "Sebastian Bergmann", 754 | "email": "sebastian@phpunit.de", 755 | "role": "lead" 756 | } 757 | ], 758 | "description": "The PHP Unit Testing framework.", 759 | "homepage": "https://phpunit.de/", 760 | "keywords": [ 761 | "phpunit", 762 | "testing", 763 | "xunit" 764 | ], 765 | "support": { 766 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 767 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.23" 768 | }, 769 | "funding": [ 770 | { 771 | "url": "https://phpunit.de/sponsors.html", 772 | "type": "custom" 773 | }, 774 | { 775 | "url": "https://github.com/sebastianbergmann", 776 | "type": "github" 777 | } 778 | ], 779 | "time": "2022-08-22T14:01:36+00:00" 780 | }, 781 | { 782 | "name": "sebastian/cli-parser", 783 | "version": "1.0.1", 784 | "source": { 785 | "type": "git", 786 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 787 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" 788 | }, 789 | "dist": { 790 | "type": "zip", 791 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", 792 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", 793 | "shasum": "" 794 | }, 795 | "require": { 796 | "php": ">=7.3" 797 | }, 798 | "require-dev": { 799 | "phpunit/phpunit": "^9.3" 800 | }, 801 | "type": "library", 802 | "extra": { 803 | "branch-alias": { 804 | "dev-master": "1.0-dev" 805 | } 806 | }, 807 | "autoload": { 808 | "classmap": [ 809 | "src/" 810 | ] 811 | }, 812 | "notification-url": "https://packagist.org/downloads/", 813 | "license": [ 814 | "BSD-3-Clause" 815 | ], 816 | "authors": [ 817 | { 818 | "name": "Sebastian Bergmann", 819 | "email": "sebastian@phpunit.de", 820 | "role": "lead" 821 | } 822 | ], 823 | "description": "Library for parsing CLI options", 824 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 825 | "support": { 826 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues", 827 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" 828 | }, 829 | "funding": [ 830 | { 831 | "url": "https://github.com/sebastianbergmann", 832 | "type": "github" 833 | } 834 | ], 835 | "time": "2020-09-28T06:08:49+00:00" 836 | }, 837 | { 838 | "name": "sebastian/code-unit", 839 | "version": "1.0.8", 840 | "source": { 841 | "type": "git", 842 | "url": "https://github.com/sebastianbergmann/code-unit.git", 843 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" 844 | }, 845 | "dist": { 846 | "type": "zip", 847 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", 848 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", 849 | "shasum": "" 850 | }, 851 | "require": { 852 | "php": ">=7.3" 853 | }, 854 | "require-dev": { 855 | "phpunit/phpunit": "^9.3" 856 | }, 857 | "type": "library", 858 | "extra": { 859 | "branch-alias": { 860 | "dev-master": "1.0-dev" 861 | } 862 | }, 863 | "autoload": { 864 | "classmap": [ 865 | "src/" 866 | ] 867 | }, 868 | "notification-url": "https://packagist.org/downloads/", 869 | "license": [ 870 | "BSD-3-Clause" 871 | ], 872 | "authors": [ 873 | { 874 | "name": "Sebastian Bergmann", 875 | "email": "sebastian@phpunit.de", 876 | "role": "lead" 877 | } 878 | ], 879 | "description": "Collection of value objects that represent the PHP code units", 880 | "homepage": "https://github.com/sebastianbergmann/code-unit", 881 | "support": { 882 | "issues": "https://github.com/sebastianbergmann/code-unit/issues", 883 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" 884 | }, 885 | "funding": [ 886 | { 887 | "url": "https://github.com/sebastianbergmann", 888 | "type": "github" 889 | } 890 | ], 891 | "time": "2020-10-26T13:08:54+00:00" 892 | }, 893 | { 894 | "name": "sebastian/code-unit-reverse-lookup", 895 | "version": "2.0.3", 896 | "source": { 897 | "type": "git", 898 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 899 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" 900 | }, 901 | "dist": { 902 | "type": "zip", 903 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 904 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 905 | "shasum": "" 906 | }, 907 | "require": { 908 | "php": ">=7.3" 909 | }, 910 | "require-dev": { 911 | "phpunit/phpunit": "^9.3" 912 | }, 913 | "type": "library", 914 | "extra": { 915 | "branch-alias": { 916 | "dev-master": "2.0-dev" 917 | } 918 | }, 919 | "autoload": { 920 | "classmap": [ 921 | "src/" 922 | ] 923 | }, 924 | "notification-url": "https://packagist.org/downloads/", 925 | "license": [ 926 | "BSD-3-Clause" 927 | ], 928 | "authors": [ 929 | { 930 | "name": "Sebastian Bergmann", 931 | "email": "sebastian@phpunit.de" 932 | } 933 | ], 934 | "description": "Looks up which function or method a line of code belongs to", 935 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 936 | "support": { 937 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 938 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" 939 | }, 940 | "funding": [ 941 | { 942 | "url": "https://github.com/sebastianbergmann", 943 | "type": "github" 944 | } 945 | ], 946 | "time": "2020-09-28T05:30:19+00:00" 947 | }, 948 | { 949 | "name": "sebastian/comparator", 950 | "version": "4.0.6", 951 | "source": { 952 | "type": "git", 953 | "url": "https://github.com/sebastianbergmann/comparator.git", 954 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382" 955 | }, 956 | "dist": { 957 | "type": "zip", 958 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", 959 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382", 960 | "shasum": "" 961 | }, 962 | "require": { 963 | "php": ">=7.3", 964 | "sebastian/diff": "^4.0", 965 | "sebastian/exporter": "^4.0" 966 | }, 967 | "require-dev": { 968 | "phpunit/phpunit": "^9.3" 969 | }, 970 | "type": "library", 971 | "extra": { 972 | "branch-alias": { 973 | "dev-master": "4.0-dev" 974 | } 975 | }, 976 | "autoload": { 977 | "classmap": [ 978 | "src/" 979 | ] 980 | }, 981 | "notification-url": "https://packagist.org/downloads/", 982 | "license": [ 983 | "BSD-3-Clause" 984 | ], 985 | "authors": [ 986 | { 987 | "name": "Sebastian Bergmann", 988 | "email": "sebastian@phpunit.de" 989 | }, 990 | { 991 | "name": "Jeff Welch", 992 | "email": "whatthejeff@gmail.com" 993 | }, 994 | { 995 | "name": "Volker Dusch", 996 | "email": "github@wallbash.com" 997 | }, 998 | { 999 | "name": "Bernhard Schussek", 1000 | "email": "bschussek@2bepublished.at" 1001 | } 1002 | ], 1003 | "description": "Provides the functionality to compare PHP values for equality", 1004 | "homepage": "https://github.com/sebastianbergmann/comparator", 1005 | "keywords": [ 1006 | "comparator", 1007 | "compare", 1008 | "equality" 1009 | ], 1010 | "support": { 1011 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 1012 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" 1013 | }, 1014 | "funding": [ 1015 | { 1016 | "url": "https://github.com/sebastianbergmann", 1017 | "type": "github" 1018 | } 1019 | ], 1020 | "time": "2020-10-26T15:49:45+00:00" 1021 | }, 1022 | { 1023 | "name": "sebastian/complexity", 1024 | "version": "2.0.2", 1025 | "source": { 1026 | "type": "git", 1027 | "url": "https://github.com/sebastianbergmann/complexity.git", 1028 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" 1029 | }, 1030 | "dist": { 1031 | "type": "zip", 1032 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", 1033 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", 1034 | "shasum": "" 1035 | }, 1036 | "require": { 1037 | "nikic/php-parser": "^4.7", 1038 | "php": ">=7.3" 1039 | }, 1040 | "require-dev": { 1041 | "phpunit/phpunit": "^9.3" 1042 | }, 1043 | "type": "library", 1044 | "extra": { 1045 | "branch-alias": { 1046 | "dev-master": "2.0-dev" 1047 | } 1048 | }, 1049 | "autoload": { 1050 | "classmap": [ 1051 | "src/" 1052 | ] 1053 | }, 1054 | "notification-url": "https://packagist.org/downloads/", 1055 | "license": [ 1056 | "BSD-3-Clause" 1057 | ], 1058 | "authors": [ 1059 | { 1060 | "name": "Sebastian Bergmann", 1061 | "email": "sebastian@phpunit.de", 1062 | "role": "lead" 1063 | } 1064 | ], 1065 | "description": "Library for calculating the complexity of PHP code units", 1066 | "homepage": "https://github.com/sebastianbergmann/complexity", 1067 | "support": { 1068 | "issues": "https://github.com/sebastianbergmann/complexity/issues", 1069 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" 1070 | }, 1071 | "funding": [ 1072 | { 1073 | "url": "https://github.com/sebastianbergmann", 1074 | "type": "github" 1075 | } 1076 | ], 1077 | "time": "2020-10-26T15:52:27+00:00" 1078 | }, 1079 | { 1080 | "name": "sebastian/diff", 1081 | "version": "4.0.4", 1082 | "source": { 1083 | "type": "git", 1084 | "url": "https://github.com/sebastianbergmann/diff.git", 1085 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" 1086 | }, 1087 | "dist": { 1088 | "type": "zip", 1089 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1090 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1091 | "shasum": "" 1092 | }, 1093 | "require": { 1094 | "php": ">=7.3" 1095 | }, 1096 | "require-dev": { 1097 | "phpunit/phpunit": "^9.3", 1098 | "symfony/process": "^4.2 || ^5" 1099 | }, 1100 | "type": "library", 1101 | "extra": { 1102 | "branch-alias": { 1103 | "dev-master": "4.0-dev" 1104 | } 1105 | }, 1106 | "autoload": { 1107 | "classmap": [ 1108 | "src/" 1109 | ] 1110 | }, 1111 | "notification-url": "https://packagist.org/downloads/", 1112 | "license": [ 1113 | "BSD-3-Clause" 1114 | ], 1115 | "authors": [ 1116 | { 1117 | "name": "Sebastian Bergmann", 1118 | "email": "sebastian@phpunit.de" 1119 | }, 1120 | { 1121 | "name": "Kore Nordmann", 1122 | "email": "mail@kore-nordmann.de" 1123 | } 1124 | ], 1125 | "description": "Diff implementation", 1126 | "homepage": "https://github.com/sebastianbergmann/diff", 1127 | "keywords": [ 1128 | "diff", 1129 | "udiff", 1130 | "unidiff", 1131 | "unified diff" 1132 | ], 1133 | "support": { 1134 | "issues": "https://github.com/sebastianbergmann/diff/issues", 1135 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" 1136 | }, 1137 | "funding": [ 1138 | { 1139 | "url": "https://github.com/sebastianbergmann", 1140 | "type": "github" 1141 | } 1142 | ], 1143 | "time": "2020-10-26T13:10:38+00:00" 1144 | }, 1145 | { 1146 | "name": "sebastian/environment", 1147 | "version": "5.1.3", 1148 | "source": { 1149 | "type": "git", 1150 | "url": "https://github.com/sebastianbergmann/environment.git", 1151 | "reference": "388b6ced16caa751030f6a69e588299fa09200ac" 1152 | }, 1153 | "dist": { 1154 | "type": "zip", 1155 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", 1156 | "reference": "388b6ced16caa751030f6a69e588299fa09200ac", 1157 | "shasum": "" 1158 | }, 1159 | "require": { 1160 | "php": ">=7.3" 1161 | }, 1162 | "require-dev": { 1163 | "phpunit/phpunit": "^9.3" 1164 | }, 1165 | "suggest": { 1166 | "ext-posix": "*" 1167 | }, 1168 | "type": "library", 1169 | "extra": { 1170 | "branch-alias": { 1171 | "dev-master": "5.1-dev" 1172 | } 1173 | }, 1174 | "autoload": { 1175 | "classmap": [ 1176 | "src/" 1177 | ] 1178 | }, 1179 | "notification-url": "https://packagist.org/downloads/", 1180 | "license": [ 1181 | "BSD-3-Clause" 1182 | ], 1183 | "authors": [ 1184 | { 1185 | "name": "Sebastian Bergmann", 1186 | "email": "sebastian@phpunit.de" 1187 | } 1188 | ], 1189 | "description": "Provides functionality to handle HHVM/PHP environments", 1190 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1191 | "keywords": [ 1192 | "Xdebug", 1193 | "environment", 1194 | "hhvm" 1195 | ], 1196 | "support": { 1197 | "issues": "https://github.com/sebastianbergmann/environment/issues", 1198 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" 1199 | }, 1200 | "funding": [ 1201 | { 1202 | "url": "https://github.com/sebastianbergmann", 1203 | "type": "github" 1204 | } 1205 | ], 1206 | "time": "2020-09-28T05:52:38+00:00" 1207 | }, 1208 | { 1209 | "name": "sebastian/exporter", 1210 | "version": "4.0.4", 1211 | "source": { 1212 | "type": "git", 1213 | "url": "https://github.com/sebastianbergmann/exporter.git", 1214 | "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" 1215 | }, 1216 | "dist": { 1217 | "type": "zip", 1218 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", 1219 | "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", 1220 | "shasum": "" 1221 | }, 1222 | "require": { 1223 | "php": ">=7.3", 1224 | "sebastian/recursion-context": "^4.0" 1225 | }, 1226 | "require-dev": { 1227 | "ext-mbstring": "*", 1228 | "phpunit/phpunit": "^9.3" 1229 | }, 1230 | "type": "library", 1231 | "extra": { 1232 | "branch-alias": { 1233 | "dev-master": "4.0-dev" 1234 | } 1235 | }, 1236 | "autoload": { 1237 | "classmap": [ 1238 | "src/" 1239 | ] 1240 | }, 1241 | "notification-url": "https://packagist.org/downloads/", 1242 | "license": [ 1243 | "BSD-3-Clause" 1244 | ], 1245 | "authors": [ 1246 | { 1247 | "name": "Sebastian Bergmann", 1248 | "email": "sebastian@phpunit.de" 1249 | }, 1250 | { 1251 | "name": "Jeff Welch", 1252 | "email": "whatthejeff@gmail.com" 1253 | }, 1254 | { 1255 | "name": "Volker Dusch", 1256 | "email": "github@wallbash.com" 1257 | }, 1258 | { 1259 | "name": "Adam Harvey", 1260 | "email": "aharvey@php.net" 1261 | }, 1262 | { 1263 | "name": "Bernhard Schussek", 1264 | "email": "bschussek@gmail.com" 1265 | } 1266 | ], 1267 | "description": "Provides the functionality to export PHP variables for visualization", 1268 | "homepage": "https://www.github.com/sebastianbergmann/exporter", 1269 | "keywords": [ 1270 | "export", 1271 | "exporter" 1272 | ], 1273 | "support": { 1274 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 1275 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" 1276 | }, 1277 | "funding": [ 1278 | { 1279 | "url": "https://github.com/sebastianbergmann", 1280 | "type": "github" 1281 | } 1282 | ], 1283 | "time": "2021-11-11T14:18:36+00:00" 1284 | }, 1285 | { 1286 | "name": "sebastian/global-state", 1287 | "version": "5.0.5", 1288 | "source": { 1289 | "type": "git", 1290 | "url": "https://github.com/sebastianbergmann/global-state.git", 1291 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" 1292 | }, 1293 | "dist": { 1294 | "type": "zip", 1295 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", 1296 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", 1297 | "shasum": "" 1298 | }, 1299 | "require": { 1300 | "php": ">=7.3", 1301 | "sebastian/object-reflector": "^2.0", 1302 | "sebastian/recursion-context": "^4.0" 1303 | }, 1304 | "require-dev": { 1305 | "ext-dom": "*", 1306 | "phpunit/phpunit": "^9.3" 1307 | }, 1308 | "suggest": { 1309 | "ext-uopz": "*" 1310 | }, 1311 | "type": "library", 1312 | "extra": { 1313 | "branch-alias": { 1314 | "dev-master": "5.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 | } 1331 | ], 1332 | "description": "Snapshotting of global state", 1333 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1334 | "keywords": [ 1335 | "global state" 1336 | ], 1337 | "support": { 1338 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 1339 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" 1340 | }, 1341 | "funding": [ 1342 | { 1343 | "url": "https://github.com/sebastianbergmann", 1344 | "type": "github" 1345 | } 1346 | ], 1347 | "time": "2022-02-14T08:28:10+00:00" 1348 | }, 1349 | { 1350 | "name": "sebastian/lines-of-code", 1351 | "version": "1.0.3", 1352 | "source": { 1353 | "type": "git", 1354 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 1355 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" 1356 | }, 1357 | "dist": { 1358 | "type": "zip", 1359 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", 1360 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", 1361 | "shasum": "" 1362 | }, 1363 | "require": { 1364 | "nikic/php-parser": "^4.6", 1365 | "php": ">=7.3" 1366 | }, 1367 | "require-dev": { 1368 | "phpunit/phpunit": "^9.3" 1369 | }, 1370 | "type": "library", 1371 | "extra": { 1372 | "branch-alias": { 1373 | "dev-master": "1.0-dev" 1374 | } 1375 | }, 1376 | "autoload": { 1377 | "classmap": [ 1378 | "src/" 1379 | ] 1380 | }, 1381 | "notification-url": "https://packagist.org/downloads/", 1382 | "license": [ 1383 | "BSD-3-Clause" 1384 | ], 1385 | "authors": [ 1386 | { 1387 | "name": "Sebastian Bergmann", 1388 | "email": "sebastian@phpunit.de", 1389 | "role": "lead" 1390 | } 1391 | ], 1392 | "description": "Library for counting the lines of code in PHP source code", 1393 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 1394 | "support": { 1395 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", 1396 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" 1397 | }, 1398 | "funding": [ 1399 | { 1400 | "url": "https://github.com/sebastianbergmann", 1401 | "type": "github" 1402 | } 1403 | ], 1404 | "time": "2020-11-28T06:42:11+00:00" 1405 | }, 1406 | { 1407 | "name": "sebastian/object-enumerator", 1408 | "version": "4.0.4", 1409 | "source": { 1410 | "type": "git", 1411 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1412 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" 1413 | }, 1414 | "dist": { 1415 | "type": "zip", 1416 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", 1417 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", 1418 | "shasum": "" 1419 | }, 1420 | "require": { 1421 | "php": ">=7.3", 1422 | "sebastian/object-reflector": "^2.0", 1423 | "sebastian/recursion-context": "^4.0" 1424 | }, 1425 | "require-dev": { 1426 | "phpunit/phpunit": "^9.3" 1427 | }, 1428 | "type": "library", 1429 | "extra": { 1430 | "branch-alias": { 1431 | "dev-master": "4.0-dev" 1432 | } 1433 | }, 1434 | "autoload": { 1435 | "classmap": [ 1436 | "src/" 1437 | ] 1438 | }, 1439 | "notification-url": "https://packagist.org/downloads/", 1440 | "license": [ 1441 | "BSD-3-Clause" 1442 | ], 1443 | "authors": [ 1444 | { 1445 | "name": "Sebastian Bergmann", 1446 | "email": "sebastian@phpunit.de" 1447 | } 1448 | ], 1449 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1450 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1451 | "support": { 1452 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 1453 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" 1454 | }, 1455 | "funding": [ 1456 | { 1457 | "url": "https://github.com/sebastianbergmann", 1458 | "type": "github" 1459 | } 1460 | ], 1461 | "time": "2020-10-26T13:12:34+00:00" 1462 | }, 1463 | { 1464 | "name": "sebastian/object-reflector", 1465 | "version": "2.0.4", 1466 | "source": { 1467 | "type": "git", 1468 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1469 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" 1470 | }, 1471 | "dist": { 1472 | "type": "zip", 1473 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 1474 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 1475 | "shasum": "" 1476 | }, 1477 | "require": { 1478 | "php": ">=7.3" 1479 | }, 1480 | "require-dev": { 1481 | "phpunit/phpunit": "^9.3" 1482 | }, 1483 | "type": "library", 1484 | "extra": { 1485 | "branch-alias": { 1486 | "dev-master": "2.0-dev" 1487 | } 1488 | }, 1489 | "autoload": { 1490 | "classmap": [ 1491 | "src/" 1492 | ] 1493 | }, 1494 | "notification-url": "https://packagist.org/downloads/", 1495 | "license": [ 1496 | "BSD-3-Clause" 1497 | ], 1498 | "authors": [ 1499 | { 1500 | "name": "Sebastian Bergmann", 1501 | "email": "sebastian@phpunit.de" 1502 | } 1503 | ], 1504 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1505 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1506 | "support": { 1507 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 1508 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" 1509 | }, 1510 | "funding": [ 1511 | { 1512 | "url": "https://github.com/sebastianbergmann", 1513 | "type": "github" 1514 | } 1515 | ], 1516 | "time": "2020-10-26T13:14:26+00:00" 1517 | }, 1518 | { 1519 | "name": "sebastian/recursion-context", 1520 | "version": "4.0.4", 1521 | "source": { 1522 | "type": "git", 1523 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1524 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" 1525 | }, 1526 | "dist": { 1527 | "type": "zip", 1528 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", 1529 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", 1530 | "shasum": "" 1531 | }, 1532 | "require": { 1533 | "php": ">=7.3" 1534 | }, 1535 | "require-dev": { 1536 | "phpunit/phpunit": "^9.3" 1537 | }, 1538 | "type": "library", 1539 | "extra": { 1540 | "branch-alias": { 1541 | "dev-master": "4.0-dev" 1542 | } 1543 | }, 1544 | "autoload": { 1545 | "classmap": [ 1546 | "src/" 1547 | ] 1548 | }, 1549 | "notification-url": "https://packagist.org/downloads/", 1550 | "license": [ 1551 | "BSD-3-Clause" 1552 | ], 1553 | "authors": [ 1554 | { 1555 | "name": "Sebastian Bergmann", 1556 | "email": "sebastian@phpunit.de" 1557 | }, 1558 | { 1559 | "name": "Jeff Welch", 1560 | "email": "whatthejeff@gmail.com" 1561 | }, 1562 | { 1563 | "name": "Adam Harvey", 1564 | "email": "aharvey@php.net" 1565 | } 1566 | ], 1567 | "description": "Provides functionality to recursively process PHP variables", 1568 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1569 | "support": { 1570 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 1571 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" 1572 | }, 1573 | "funding": [ 1574 | { 1575 | "url": "https://github.com/sebastianbergmann", 1576 | "type": "github" 1577 | } 1578 | ], 1579 | "time": "2020-10-26T13:17:30+00:00" 1580 | }, 1581 | { 1582 | "name": "sebastian/resource-operations", 1583 | "version": "3.0.3", 1584 | "source": { 1585 | "type": "git", 1586 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1587 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" 1588 | }, 1589 | "dist": { 1590 | "type": "zip", 1591 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 1592 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 1593 | "shasum": "" 1594 | }, 1595 | "require": { 1596 | "php": ">=7.3" 1597 | }, 1598 | "require-dev": { 1599 | "phpunit/phpunit": "^9.0" 1600 | }, 1601 | "type": "library", 1602 | "extra": { 1603 | "branch-alias": { 1604 | "dev-master": "3.0-dev" 1605 | } 1606 | }, 1607 | "autoload": { 1608 | "classmap": [ 1609 | "src/" 1610 | ] 1611 | }, 1612 | "notification-url": "https://packagist.org/downloads/", 1613 | "license": [ 1614 | "BSD-3-Clause" 1615 | ], 1616 | "authors": [ 1617 | { 1618 | "name": "Sebastian Bergmann", 1619 | "email": "sebastian@phpunit.de" 1620 | } 1621 | ], 1622 | "description": "Provides a list of PHP built-in functions that operate on resources", 1623 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1624 | "support": { 1625 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues", 1626 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" 1627 | }, 1628 | "funding": [ 1629 | { 1630 | "url": "https://github.com/sebastianbergmann", 1631 | "type": "github" 1632 | } 1633 | ], 1634 | "time": "2020-09-28T06:45:17+00:00" 1635 | }, 1636 | { 1637 | "name": "sebastian/type", 1638 | "version": "3.0.0", 1639 | "source": { 1640 | "type": "git", 1641 | "url": "https://github.com/sebastianbergmann/type.git", 1642 | "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" 1643 | }, 1644 | "dist": { 1645 | "type": "zip", 1646 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", 1647 | "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", 1648 | "shasum": "" 1649 | }, 1650 | "require": { 1651 | "php": ">=7.3" 1652 | }, 1653 | "require-dev": { 1654 | "phpunit/phpunit": "^9.5" 1655 | }, 1656 | "type": "library", 1657 | "extra": { 1658 | "branch-alias": { 1659 | "dev-master": "3.0-dev" 1660 | } 1661 | }, 1662 | "autoload": { 1663 | "classmap": [ 1664 | "src/" 1665 | ] 1666 | }, 1667 | "notification-url": "https://packagist.org/downloads/", 1668 | "license": [ 1669 | "BSD-3-Clause" 1670 | ], 1671 | "authors": [ 1672 | { 1673 | "name": "Sebastian Bergmann", 1674 | "email": "sebastian@phpunit.de", 1675 | "role": "lead" 1676 | } 1677 | ], 1678 | "description": "Collection of value objects that represent the types of the PHP type system", 1679 | "homepage": "https://github.com/sebastianbergmann/type", 1680 | "support": { 1681 | "issues": "https://github.com/sebastianbergmann/type/issues", 1682 | "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" 1683 | }, 1684 | "funding": [ 1685 | { 1686 | "url": "https://github.com/sebastianbergmann", 1687 | "type": "github" 1688 | } 1689 | ], 1690 | "time": "2022-03-15T09:54:48+00:00" 1691 | }, 1692 | { 1693 | "name": "sebastian/version", 1694 | "version": "3.0.2", 1695 | "source": { 1696 | "type": "git", 1697 | "url": "https://github.com/sebastianbergmann/version.git", 1698 | "reference": "c6c1022351a901512170118436c764e473f6de8c" 1699 | }, 1700 | "dist": { 1701 | "type": "zip", 1702 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", 1703 | "reference": "c6c1022351a901512170118436c764e473f6de8c", 1704 | "shasum": "" 1705 | }, 1706 | "require": { 1707 | "php": ">=7.3" 1708 | }, 1709 | "type": "library", 1710 | "extra": { 1711 | "branch-alias": { 1712 | "dev-master": "3.0-dev" 1713 | } 1714 | }, 1715 | "autoload": { 1716 | "classmap": [ 1717 | "src/" 1718 | ] 1719 | }, 1720 | "notification-url": "https://packagist.org/downloads/", 1721 | "license": [ 1722 | "BSD-3-Clause" 1723 | ], 1724 | "authors": [ 1725 | { 1726 | "name": "Sebastian Bergmann", 1727 | "email": "sebastian@phpunit.de", 1728 | "role": "lead" 1729 | } 1730 | ], 1731 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1732 | "homepage": "https://github.com/sebastianbergmann/version", 1733 | "support": { 1734 | "issues": "https://github.com/sebastianbergmann/version/issues", 1735 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" 1736 | }, 1737 | "funding": [ 1738 | { 1739 | "url": "https://github.com/sebastianbergmann", 1740 | "type": "github" 1741 | } 1742 | ], 1743 | "time": "2020-09-28T06:39:44+00:00" 1744 | }, 1745 | { 1746 | "name": "squizlabs/php_codesniffer", 1747 | "version": "3.7.2", 1748 | "source": { 1749 | "type": "git", 1750 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", 1751 | "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" 1752 | }, 1753 | "dist": { 1754 | "type": "zip", 1755 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", 1756 | "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", 1757 | "shasum": "" 1758 | }, 1759 | "require": { 1760 | "ext-simplexml": "*", 1761 | "ext-tokenizer": "*", 1762 | "ext-xmlwriter": "*", 1763 | "php": ">=5.4.0" 1764 | }, 1765 | "require-dev": { 1766 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" 1767 | }, 1768 | "bin": [ 1769 | "bin/phpcs", 1770 | "bin/phpcbf" 1771 | ], 1772 | "type": "library", 1773 | "extra": { 1774 | "branch-alias": { 1775 | "dev-master": "3.x-dev" 1776 | } 1777 | }, 1778 | "notification-url": "https://packagist.org/downloads/", 1779 | "license": [ 1780 | "BSD-3-Clause" 1781 | ], 1782 | "authors": [ 1783 | { 1784 | "name": "Greg Sherwood", 1785 | "role": "lead" 1786 | } 1787 | ], 1788 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 1789 | "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", 1790 | "keywords": [ 1791 | "phpcs", 1792 | "standards", 1793 | "static analysis" 1794 | ], 1795 | "support": { 1796 | "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", 1797 | "source": "https://github.com/squizlabs/PHP_CodeSniffer", 1798 | "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" 1799 | }, 1800 | "time": "2023-02-22T23:07:41+00:00" 1801 | }, 1802 | { 1803 | "name": "theseer/tokenizer", 1804 | "version": "1.2.1", 1805 | "source": { 1806 | "type": "git", 1807 | "url": "https://github.com/theseer/tokenizer.git", 1808 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" 1809 | }, 1810 | "dist": { 1811 | "type": "zip", 1812 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", 1813 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", 1814 | "shasum": "" 1815 | }, 1816 | "require": { 1817 | "ext-dom": "*", 1818 | "ext-tokenizer": "*", 1819 | "ext-xmlwriter": "*", 1820 | "php": "^7.2 || ^8.0" 1821 | }, 1822 | "type": "library", 1823 | "autoload": { 1824 | "classmap": [ 1825 | "src/" 1826 | ] 1827 | }, 1828 | "notification-url": "https://packagist.org/downloads/", 1829 | "license": [ 1830 | "BSD-3-Clause" 1831 | ], 1832 | "authors": [ 1833 | { 1834 | "name": "Arne Blankerts", 1835 | "email": "arne@blankerts.de", 1836 | "role": "Developer" 1837 | } 1838 | ], 1839 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 1840 | "support": { 1841 | "issues": "https://github.com/theseer/tokenizer/issues", 1842 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1" 1843 | }, 1844 | "funding": [ 1845 | { 1846 | "url": "https://github.com/theseer", 1847 | "type": "github" 1848 | } 1849 | ], 1850 | "time": "2021-07-28T10:34:58+00:00" 1851 | } 1852 | ], 1853 | "aliases": [], 1854 | "minimum-stability": "stable", 1855 | "stability-flags": [], 1856 | "prefer-stable": false, 1857 | "prefer-lowest": false, 1858 | "platform": { 1859 | "php": "^7.4 || ^8.0", 1860 | "ext-json": "*" 1861 | }, 1862 | "platform-dev": [], 1863 | "plugin-api-version": "2.3.0" 1864 | } 1865 | --------------------------------------------------------------------------------