Yanz Mini Shell
[_]
[-]
[X]
[
HomeShell 1
] [
HomeShell 2
] [
Upload
] [
Command Shell
] [
Scripting
] [
About
]
[ Directory ] =>
/
home
admin
web
uyoxpress.com
public_html
Action
[*]
New File
[*]
New Folder
Sensitive File
[*]
/etc/passwd
[*]
/etc/shadow
[*]
/etc/resolv.conf
[
Delete
] [
Edit
] [
Rename
] [
Back
]
tree/LICENSE.md 0000644 00000002103 15007532571 0007110 0 ustar 00 # The MIT License (MIT) Copyright (c) 2013-2023 Nicolò Martini Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the _Software_), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED **AS IS**, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. tree/composer.json 0000644 00000002424 15007532571 0010234 0 ustar 00 { "name": "nicmart/tree", "description": "A basic but flexible php tree data structure and a fluent tree builder implementation.", "license": "MIT", "type": "library", "keywords": [], "authors": [ { "name": "Nicolò Martini", "email": "nicmartnic@gmail.com" }, { "name": "Andreas Möller", "email": "am@localheinz.com" } ], "require": { "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "require-dev": { "ergebnis/composer-normalize": "^2.31.0", "ergebnis/license": "^2.4.0", "ergebnis/php-cs-fixer-config": "^6.13.0", "fakerphp/faker": "^1.23.0", "infection/infection": "~0.26.19", "phpunit/phpunit": "^9.6.14", "psalm/plugin-phpunit": "~0.18.4", "vimeo/psalm": "^5.16.0" }, "autoload": { "psr-4": { "Tree\\": "src/" } }, "autoload-dev": { "psr-4": { "Tree\\Test\\": "test/" } }, "config": { "allow-plugins": { "ergebnis/composer-normalize": true, "infection/extension-installer": true }, "platform": { "php": "8.0.25" }, "sort-packages": true } } tree/CHANGELOG.md 0000644 00000022035 15007532571 0007323 0 ustar 00 # Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased For a full diff see [`0.8.0...master`][0.8.0...master]. ## [`0.8.0`][0.8.0] For a full diff see [0.7.2...0.8.0`][0.7.2...0.8.0]. ### Added - Added support for PHP 8.3 ([#236]), by [@localheinz] ## [`0.7.2`][0.7.2] For a full diff see [0.7.1...0.7.2`][0.7.1...0.7.2]. ### Fixed - Started throwing a `LogicException` when attempting to get a `Node` from an empty `NodeBuilder` ([#209]), by [@localheinz] ## [`0.7.1`][0.7.1] For a full diff see [0.7.0...0.7.1`][0.7.0...0.7.1]. ### Changed - Made use of variadic parameters in `NodeBuilderInterface::leafs()` and `NodeBuilder::leafs()` ([#168]), by [@localheinz] ## [`0.7.0`][0.7.0] For a full diff see [0.6.0...0.7.0`][0.6.0...0.7.0]. ### Changed - Changed return type declaration of `NodeInterface::root()` from `self` to `static` ([#149]), by [@localheinz] - Added a missing return type declaration to `NodeInterface::getSize()` ([#150]), by [@localheinz] - Added parameter type declarations ([#151]), by [@localheinz] - Added property type declarations ([#152]), by [@localheinz] ### Fixed - Returned empty array from `Node::getNeigbors()` when node is root ([#153]), by [@localheinz] - Returned array with node only from `Node::getNeigborsAndSelf()` when node is root ([#154]), by [@localheinz] ## [`0.6.0`][0.6.0] For a full diff see [0.5.0...0.6.0`][0.5.0...0.6.0]. ### Changed - Added return type declarations ([#113]), by [@localheinz] - Added `getSize()` to `NodeInterface` ([#147]), by [@localheinz] - Added `root()` to `NodeInterface` ([#148]), by [@localheinz] ## [`0.5.0`][0.5.0] For a full diff see [`0.4.0...0.5.0`][0.4.0...0.5.0]. ### Added - Added support for PHP 8.2 ([#135]), by [@localheinz] ### Changed - Dropped support for PHP 7.2 ([#136]), by [@localheinz] - Dropped support for PHP 7.3 ([#137]), by [@localheinz] - Dropped support for PHP 7.4 ([#138]), by [@localheinz] ## [`0.4.0`][0.4.0] For a full diff see [`0.3.1...0.4.0`][0.3.1...0.4.0]. ### Added - Added support for PHP 8.1 ([#105]), by [@localheinz] ### Changed - Dropped support for PHP 7.1 ([#106]), by [@localheinz] ## [`0.3.1`][0.3.1] For a full diff see [`0.3.0...0.3.1`][0.3.0...0.3.1]. ### Added - Added support for PHP 8.0 ([#79]), by [@pascalbaljet] ### Changed - Dropped support for PHP 5.4 ([#55]), by [@localheinz] - Dropped support for PHP 5.5 ([#57]), by [@localheinz] - Dropped support for PHP 5.6 ([#58]), by [@localheinz] - Dropped support for PHP 7.0 ([#59]), by [@localheinz] ## [`0.3.0`][0.3.0] For a full diff see [`0.2.7...0.3.0`][0.2.7...0.3.0]. ### Added - Added support for PHP 7.1 ([#47]), by [@localheinz] - Added support for PHP 7.2 ([#48]), by [@localheinz] - Added support for PHP 7.3 ([#49]), by [@localheinz] - Added support for PHP 7.4 ([#50]), by [@localheinz] ### Changed - Dropped support for HHVM ([#35]), by [@localheinz] - Moved constructor from `NodeTrait` to `Node` ([#30]), by [@asalazar-pley] ## [`0.2.7`][0.2.7] For a full diff see [`0.2.6...0.2.7`][0.2.6...0.2.7]. ### Added - Added pre-order and post-order visitors ([#24]), by [@localheinz] ## [`0.2.6`][0.2.6] For a full diff see [`0.2.5...0.2.6`][0.2.5...0.2.6]. ### Added - Added a `getSize()` method to `Node` ([#17]), by [@Djuki] ## [`0.2.5`][0.2.5] For a full diff see [`0.2.4...0.2.5`][0.2.4...0.2.5]. ### Added - Added `getDepth()` and `getHeight()` methods to `Node` ([#9]), by [@nicmart] ## [`0.2.4`][0.2.4] For a full diff see [`0.2.3...0.2.4`][0.2.3...0.2.4]. ### Added - New accessor methods ([#6]), by [@mdwheele] ## [`0.2.3`][0.2.3] For a full diff see [`0.2.2...0.2.3`][0.2.2...0.2.3]. ### Changed - `Node::getAncestors()` now does not return the current node ([#4]), by [@nicmart], ## [`0.2.2`][0.2.2] For a full diff see [`0.2.1...0.2.2`][0.2.1...0.2.2]. ### Fixed - Fixed a bug in the builder ([#3]), by [@nicmart] ## [`0.2.1`][0.2.1] For a full diff see [`0.2.0...0.2.1`][0.2.0...0.2.1]. ### Added - Added `root()` and `isRoot()` to `Node` ## [`0.2.0`][0.2.0] For a full diff see [`0.1.2...0.2.0`][0.1.2...0.2.0]. ### Changed - Dropped support for PHP 5.3 - Extracted `NodeTrait` from `Node` ## [`0.1.2`][0.1.2] For a full diff see [`0.1.1...0.1.2`][0.1.1...0.1.2]. ### Added - Added `YieldVisitor`, to get the yield of the tree ## [`0.1.1`][0.1.1] For a full diff see [`fcfd14e...v0.1.1`][fcfd14e...0.1.1]. ### Added - Parent and neighbors methods, by [@jdeniau] [0.1.1]: https://github.com/nicmart/Tree/releases/tag/v0.1.0 [0.1.2]: https://github.com/nicmart/Tree/releases/tag/v0.1.2 [0.2.0]: https://github.com/nicmart/Tree/releases/tag/v0.2.0 [0.2.1]: https://github.com/nicmart/Tree/releases/tag/v0.2.1 [0.2.2]: https://github.com/nicmart/Tree/releases/tag/v0.2.2 [0.2.3]: https://github.com/nicmart/Tree/releases/tag/v0.2.3 [0.2.4]: https://github.com/nicmart/Tree/releases/tag/v0.2.4 [0.2.5]: https://github.com/nicmart/Tree/releases/tag/v0.2.5 [0.2.6]: https://github.com/nicmart/Tree/releases/tag/v0.2.6 [0.2.7]: https://github.com/nicmart/Tree/releases/tag/v0.2.7 [0.3.0]: https://github.com/nicmart/Tree/releases/tag/0.3.0 [0.3.1]: https://github.com/nicmart/Tree/releases/tag/0.3.1 [0.4.0]: https://github.com/nicmart/Tree/releases/tag/0.4.0 [0.5.0]: https://github.com/nicmart/Tree/releases/tag/0.5.0 [0.6.0]: https://github.com/nicmart/Tree/releases/tag/0.6.0 [0.7.0]: https://github.com/nicmart/Tree/releases/tag/0.7.0 [0.7.1]: https://github.com/nicmart/Tree/releases/tag/0.7.1 [0.7.2]: https://github.com/nicmart/Tree/releases/tag/0.7.2 [0.8.0]: https://github.com/nicmart/Tree/releases/tag/0.8.0 [fcfd14e...0.1.1]: https://github.com/nicmart/Tree/compare/fcfd14e...v0.1.1 [0.1.1...0.1.2]: https://github.com/nicmart/Tree/compare/v0.1.1...v0.1.2 [0.1.2...0.2.0]: https://github.com/nicmart/Tree/compare/v0.1.2...v0.2.0 [0.2.0...0.2.1]: https://github.com/nicmart/Tree/compare/v0.2.0...v0.2.1 [0.2.1...0.2.2]: https://github.com/nicmart/Tree/compare/v0.2.1...v0.2.2 [0.2.2...0.2.3]: https://github.com/nicmart/Tree/compare/v0.2.2...v0.2.3 [0.2.3...0.2.4]: https://github.com/nicmart/Tree/compare/v0.2.3...v0.2.4 [0.2.4...0.2.5]: https://github.com/nicmart/Tree/compare/v0.2.4...v0.2.5 [0.2.5...0.2.6]: https://github.com/nicmart/Tree/compare/v0.2.5...v0.2.6 [0.2.6...0.2.7]: https://github.com/nicmart/Tree/compare/v0.2.6...v0.2.7 [0.2.7...0.3.0]: https://github.com/nicmart/Tree/compare/v0.2.7...0.3.0 [0.3.0...0.3.1]: https://github.com/nicmart/Tree/compare/0.3.0...0.3.1 [0.3.1...0.4.0]: https://github.com/nicmart/Tree/compare/0.3.1...0.4.0 [0.4.0...0.5.0]: https://github.com/nicmart/Tree/compare/0.4.0...0.5.0 [0.5.0...0.6.0]: https://github.com/nicmart/Tree/compare/0.5.0...0.6.0 [0.6.0...0.7.0]: https://github.com/nicmart/Tree/compare/0.6.0...0.7.0 [0.7.0...0.7.1]: https://github.com/nicmart/Tree/compare/0.7.0...0.7.1 [0.7.1...0.7.2]: https://github.com/nicmart/Tree/compare/0.7.1...0.7.2 [0.7.2...0.8.0]: https://github.com/nicmart/Tree/compare/0.7.2...0.8.0 [0.8.0...master]: https://github.com/nicmart/Tree/compare/0.8.0...master [#3]: https://github.com/nicmart/Tree/issues/3 [#4]: https://github.com/nicmart/Tree/issues/4 [#6]: https://github.com/nicmart/Tree/pull/6 [#9]: https://github.com/nicmart/Tree/issues/9 [#17]: https://github.com/nicmart/Tree/pull/17 [#24]: https://github.com/nicmart/Tree/pull/24 [#30]: https://github.com/nicmart/Tree/pull/30 [#35]: https://github.com/nicmart/Tree/pull/35 [#47]: https://github.com/nicmart/Tree/pull/47 [#48]: https://github.com/nicmart/Tree/pull/48 [#49]: https://github.com/nicmart/Tree/pull/49 [#50]: https://github.com/nicmart/Tree/pull/50 [#55]: https://github.com/nicmart/Tree/pull/55 [#57]: https://github.com/nicmart/Tree/pull/57 [#58]: https://github.com/nicmart/Tree/pull/58 [#59]: https://github.com/nicmart/Tree/pull/59 [#79]: https://github.com/nicmart/Tree/pull/79 [#105]: https://github.com/nicmart/Tree/pull/105 [#106]: https://github.com/nicmart/Tree/pull/106 [#113]: https://github.com/nicmart/Tree/pull/113 [#125]: https://github.com/nicmart/Tree/pull/125 [#136]: https://github.com/nicmart/Tree/pull/136 [#137]: https://github.com/nicmart/Tree/pull/137 [#138]: https://github.com/nicmart/Tree/pull/138 [#147]: https://github.com/nicmart/Tree/pull/147 [#148]: https://github.com/nicmart/Tree/pull/148 [#149]: https://github.com/nicmart/Tree/pull/149 [#150]: https://github.com/nicmart/Tree/pull/150 [#151]: https://github.com/nicmart/Tree/pull/151 [#152]: https://github.com/nicmart/Tree/pull/152 [#153]: https://github.com/nicmart/Tree/pull/153 [#154]: https://github.com/nicmart/Tree/pull/154 [#168]: https://github.com/nicmart/Tree/pull/168 [#209]: https://github.com/nicmart/Tree/pull/209 [#236]: https://github.com/nicmart/Tree/pull/236 [@asalazar-pley]: https://github.com/asalazar-pley [@Djuki]: https://github.com/Djuki [@jdeniau]: https://github.com/jdeniau [@localheinz]: https://github.com/localheinz [@mdwheele]: https://github.com/mdwheele [@nicmart]: https://github.com/nicmart [@pascalbaljet]: https://github.com/pascalbaljet tree/test/Util/Helper.php 0000644 00000001354 15007532571 0011337 0 ustar 00 <?php declare(strict_types=1); /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Test\Util; use Faker\Factory; use Faker\Generator; trait Helper { final protected static function faker(string $locale = 'en_US'): Generator { /** * @var array<string, Generator> */ static $fakers = []; if (!\array_key_exists($locale, $fakers)) { $faker = Factory::create($locale); $faker->seed(9001); $fakers[$locale] = $faker; } return $fakers[$locale]; } } tree/test/Unit/phpunit.xml 0000644 00000001421 15007532571 0011615 0 ustar 00 <?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../vendor/phpunit/phpunit/phpunit.xsd" backupGlobals="false" backupStaticAttributes="false" bootstrap="../../vendor/autoload.php" cacheResultFile="../../.build/phpunit/unit.cache" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" > <coverage> <include> <directory>../../src/</directory> </include> </coverage> <testsuites> <testsuite name="Unit Tests"> <directory>.</directory> </testsuite> </testsuites> </phpunit> tree/test/Unit/Node/NodeTest.php 0000644 00000022104 15007532571 0012530 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Test\Unit\Node; use PHPUnit\Framework; use Tree\Node\Node; use Tree\Node\NodeInterface; use Tree\Test; use Tree\Visitor\Visitor; /** * @internal * * @covers \Tree\Node\Node */ final class NodeTest extends Framework\TestCase { use Test\Util\Helper; public function testDefaults(): void { $node = new Node(); self::assertSame([], $node->getChildren()); self::assertNull($node->getValue()); } public function testConstructorSetsValue(): void { $value = self::faker()->sentence(); $node = new Node($value); self::assertSame($value, $node->getValue()); } public function testConstructorSetsChildren(): void { $children = [ new Node(), new Node(), new Node(), ]; $node = new Node( null, $children, ); self::assertSame($children, $node->getChildren()); $parents = \array_map(static function (NodeInterface $child): ?NodeInterface { return $child->getParent(); }, $children); $expected = \array_fill(0, \count($children), $node); self::assertSame($expected, $parents); } public function testSetValue(): void { $node = new Node(); $node->setValue('string value'); self::assertSame('string value', $node->getValue()); $node->setValue($object = new \stdClass()); $object->foo = 'bar'; self::assertSame($object, $node->getValue()); } public function testAddAndGetChildren(): void { $root = new Node(); $root ->addChild($child1 = new Node('child1')) ->addChild($child2 = new Node('child2')) ->addChild($child3 = new Node('child3')); self::assertSame([$child1, $child2, $child3], $root->getChildren()); } public function testAddChildSetParent(): void { $root = new Node(); $root ->addChild($child1 = new Node('child1')) ->addChild($child2 = new Node('child2')); self::assertSame($root, $child1->getParent()); self::assertSame($root, $child2->getParent()); } public function testSetAndGetParent(): void { $root = new Node(); $child = new Node('foo'); $child->setParent($root); self::assertSame($root, $child->getParent()); } public function testSetChildren(): void { $children = [new Node('child1'), new Node('child2'), new Node('child3')]; $root = new Node(); $root->setChildren($children); self::assertSame($children, $root->getChildren()); } public function testSetChildrenSetParentsReferences(): void { $root = new Node(); $root ->addChild($child1 = new Node('child1')) ->addChild($child2 = new Node('child2')); self::assertSame($root, $child1->getParent()); self::assertSame($root, $child2->getParent()); } public function testRemoveChild(): void { $root = new Node(); $root ->addChild($child1 = new Node('child1')) ->addChild($child2 = new Node('child2')) ->addChild($child3 = new Node('child3')) ->removeChild($child2); self::assertSame([$child1, $child3], $root->getChildren()); } public function testRemoveChildRemoveParentReference(): void { $root = new Node(); $root ->addChild($child1 = new Node('child1')) ->removeChild($child1); self::assertNull($child1->getParent()); } public function testRemoveAllChildrenRemoveParentReferences(): void { $root = new Node(); $root ->addChild($child1 = new Node('child1')) ->removeAllChildren(); self::assertNull($child1->getParent()); } public function testRemoveAllChildren(): void { $root = new Node(); $root ->addChild($child1 = new Node('child1')) ->addChild($child2 = new Node('child2')) ->addChild($child3 = new Node('child3')) ->removeAllChildren(); self::assertEmpty($root->getChildren()); } public function testGetAncestors(): void { $root = new Node('r'); $root->addChild($a = new Node('a')); $a->addChild($b = new Node('b')); $b->addChild($c = new Node('c')); self::assertSame([$root, $a, $b], $c->getAncestors()); } public function testGetAncestorsAndSelf(): void { $root = new Node('r'); $root->addChild($a = new Node('a')); $a->addChild($b = new Node('b')); self::assertSame([$root, $a, $b], $b->getAncestorsAndSelf()); } public function testGetNeighborsReturnsEmptyArrayWhenNodeDoesNotHaveParent(): void { $node = new Node(self::faker()->sentence()); self::assertSame([], $node->getNeighbors()); } public function testGetNeighbors(): void { $root = new Node('r'); $root ->addChild($a = new Node('a')) ->addChild($b = new Node('b')) ->addChild($c = new Node('c')); self::assertSame([$b, $c], $a->getNeighbors()); } public function testGetNeighborsAndSelfReturnsArrayWithNodeWhenNodeDoesNotHaveParent(): void { $node = new Node(self::faker()->sentence()); $expected = [ $node, ]; self::assertSame($expected, $node->getNeighborsAndSelf()); } public function testGetNeighborsAndSelf(): void { $root = new Node('r'); $root ->addChild($a = new Node('a')) ->addChild($b = new Node('b')) ->addChild($c = new Node('c')); self::assertSame([$a, $b, $c], $a->getNeighborsAndSelf()); } public function testIsLeaf(): void { $root = new Node(); self::assertTrue($root->isLeaf()); $root->addChild(new Node('child')); self::assertFalse($root->isLeaf()); } public function testRoot(): void { $root = (new Node('root')) ->addChild( (new Node('child'))->addChild($grandchild = new Node('grandchild')), ); self::assertSame($root, $grandchild->root()); } public function testIsRoot(): void { $root = new Node('root'); $root->addChild($child = new Node('child')); self::assertTrue($root->isRoot()); self::assertFalse($child->isRoot()); } public function testIsChild(): void { $root = new Node('root'); $root->addChild($child = new Node('child')); self::assertTrue($child->isChild()); self::assertFalse($root->isChild()); } public function testGetDepth(): void { $root = new Node(); $root ->addChild($child1 = new Node('child1')) ->addChild($child2 = new Node('child2')) ->addChild($child3 = new Node('child3')); $child3 ->addChild($child4 = new Node('a')) ->addChild(new Node('b')); self::assertSame(1, $child1->getDepth()); self::assertSame(0, $root->getDepth()); self::assertSame(2, $child4->getDepth()); } public function testGetHeight(): void { $root = new Node(); $root ->addChild($child1 = new Node('child1')) ->addChild($child2 = new Node('child2')) ->addChild($child3 = new Node('child3')); $child3 ->addChild(new Node('a')) ->addChild(new Node('b')); self::assertSame(0, $child1->getHeight()); self::assertSame(2, $root->getHeight()); self::assertSame(1, $child3->getHeight()); } public function testGetSize(): void { $root = new Node(); $root ->addChild($child1 = new Node('child1')) ->addChild($child2 = new Node('child2')) ->addChild($child3 = new Node('child3')); $child3 ->addChild(new Node('a')) ->addChild($child4 = new Node('b')); $child4->addChild($child5 = new Node('c')); $child5 ->addChild(new Node('d')) ->addChild(new Node('f')); self::assertSame(9, $root->getSize()); self::assertSame(3, $child5->getSize()); self::assertSame(4, $child4->getSize()); self::assertSame(6, $child3->getSize()); self::assertSame(1, $child2->getSize()); } public function testAcceptLetsVisitorVisitNode(): void { $node = new Node(); $value = self::faker()->sentence(); $visitor = $this->createMock(Visitor::class); $visitor ->expects(self::once()) ->method('visit') ->with(self::identicalTo($node)) ->willReturn($value); $accepted = $node->accept($visitor); self::assertSame($value, $accepted); } } tree/test/Unit/Builder/NodeBuilderTest.php 0000644 00000007656 15007532571 0014557 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Test\Unit\Builder; use PHPUnit\Framework; use Tree\Builder\NodeBuilder; use Tree\Node\Node; /** * @internal * * @covers \Tree\Builder\NodeBuilder */ final class NodeBuilderTest extends Framework\TestCase { public function testConstructorCreatesEmptyNodeIfNoSpecified(): void { $builder = new NodeBuilder(); self::assertNull($builder->getNode()->getValue()); } public function testConstructor(): void { $builder = new NodeBuilder($node = new Node('node')); self::assertSame($node, $builder->getNode()); } public function testSetNodeAndGetNode(): void { $builder = new NodeBuilder(); $builder->setNode($node1 = new Node('node1')); self::assertSame($node1, $builder->getNode()); $builder->setNode($node2 = new Node('node2')); self::assertSame($node2, $builder->getNode()); } public function testGetNodeThrowsLogicExceptionWhenNodeBuilderDoesNotManageAnyNodes(): void { $builder = new NodeBuilder(); $builder->end(); $this->expectException(\LogicException::class); $this->expectExceptionMessage('The node builder currently does not manage any nodes.'); $builder->getNode(); } public function testLeaf(): void { $builder = new NodeBuilder(); $builder->leaf('a')->leaf('b'); $children = $builder->getNode()->getChildren(); self::assertSame('a', $children[0]->getValue()); self::assertSame('b', $children[1]->getValue()); } public function testLeafs(): void { $builder = new NodeBuilder(); $builder->leafs('a', 'b'); $children = $builder->getNode()->getChildren(); self::assertSame('a', $children[0]->getValue()); self::assertSame('b', $children[1]->getValue()); } public function testTreeAddNewNodeAsChildOfTheParentNode(): void { $builder = new NodeBuilder(); $builder ->value('root') ->tree('a') ->tree('b')->end() ->leaf('c') ->end(); $node = $builder->getNode(); self::assertSame(['a'], $this->childrenValues($node->getChildren())); $subtree = $node->getChildren()[0]; self::assertSame(['b', 'c'], $this->childrenValues($subtree->getChildren())); } public function testTree(): void { $builder = new NodeBuilder(); $builder->tree('a')->tree('b'); self::assertSame('b', $builder->getNode()->getValue()); } public function testEnd(): void { $builder = new NodeBuilder(); $builder ->value('root') ->tree('a') ->tree('b') ->tree('c') ->end(); self::assertSame('b', $builder->getNode()->getValue()); $builder->end(); self::assertSame('a', $builder->getNode()->getValue()); $builder->end(); self::assertSame('root', $builder->getNode()->getValue()); } public function testValue(): void { $builder = new NodeBuilder(); $builder->value('foo')->value('bar'); self::assertSame('bar', $builder->getNode()->getValue()); } public function testNodeInstanceByValue(): void { $builder = new NodeBuilder(); $node = $builder->nodeInstanceByValue('baz'); self::assertSame('baz', $node->getValue()); self::assertInstanceOf('Tree\Node\Node', $node); } /** * @param array[Node] $children * * @return array */ private function childrenValues(array $children) { return \array_map(static function (Node $node) { return $node->getValue(); }, $children); } } tree/test/Unit/Visitor/PostOrderVisitorTest.php 0000644 00000005104 15007532571 0015717 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Test\Unit\Visitor; use PHPUnit\Framework; use Tree\Node\Node; use Tree\Visitor\PostOrderVisitor; /** * @internal * * @covers \Tree\Visitor\PostOrderVisitor */ final class PostOrderVisitorTest extends Framework\TestCase { /** * root. */ public function testWalkTreeWithOneNode(): void { $root = new Node('root'); $visitor = new PostOrderVisitor(); $expected = [ $root, ]; self::assertSame($expected, $visitor->visit($root)); } /** * root * | * a. */ public function testWalkTreeWithTwoNodes(): void { $root = new Node('root'); $a = new Node('a'); $root->addChild($a); $visitor = new PostOrderVisitor(); $expected = [ $a, $root, ]; self::assertSame($expected, $visitor->visit($root)); } /** * root * /|\ * a b c * /| | * d e f. */ public function testWalkTreeWithMoreNodes(): void { $root = new Node('root'); $a = new Node('a'); $b = new Node('b'); $c = new Node('c'); $d = new Node('d'); $e = new Node('e'); $f = new Node('f'); $root->addChild($a); $root->addChild($b); $root->addChild($c); $a->addChild($d); $a->addChild($e); $b->addChild($f); $visitor = new PostOrderVisitor(); $expected = [ $d, $e, $a, $f, $b, $c, $root, ]; self::assertSame($expected, $visitor->visit($root)); } /** * root * /|\ * a b c * /| | * d e f. */ public function testWalkSubTree(): void { $root = new Node('root'); $a = new Node('a'); $b = new Node('b'); $c = new Node('c'); $d = new Node('d'); $e = new Node('e'); $f = new Node('f'); $root->addChild($a); $root->addChild($b); $root->addChild($c); $a->addChild($d); $a->addChild($e); $b->addChild($f); $visitor = new PostOrderVisitor(); $expected = [ $d, $e, $a, ]; self::assertSame($expected, $visitor->visit($a)); } } tree/test/Unit/Visitor/YieldVisitorTest.php 0000644 00000002432 15007532571 0015045 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Test\Unit\Visitor; use PHPUnit\Framework; use Tree\Node\Node; use Tree\Visitor\YieldVisitor; /** * @internal * * @covers \Tree\Visitor\YieldVisitor */ final class YieldVisitorTest extends Framework\TestCase { /** * root * / \ * A B * / \ * C D * | * E. */ public function testGetYield(): void { $root = new Node('root'); $root ->addChild($a = new Node('A')) ->addChild($b = new Node('B')); $a ->addChild($c = new Node('C')) ->addChild($d = new Node('D', [$e = new Node('E')])); $visitor = new YieldVisitor(); $yield = $root->accept($visitor); self::assertSame([$c, $e, $b], $yield); } public function testTheYieldOfALeafNodeIsTheNodeItself(): void { $node = new Node('node'); $visitor = new YieldVisitor(); self::assertSame([$node], $node->accept($visitor)); } } tree/test/Unit/Visitor/PreOrderVisitorTest.php 0000644 00000005075 15007532571 0015527 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Test\Unit\Visitor; use PHPUnit\Framework; use Tree\Node\Node; use Tree\Visitor\PreOrderVisitor; /** * @internal * * @covers \Tree\Visitor\PreOrderVisitor */ final class PreOrderVisitorTest extends Framework\TestCase { /** * root. */ public function testWalkTreeWithOneNode(): void { $root = new Node('root'); $visitor = new PreOrderVisitor(); $expected = [ $root, ]; self::assertSame($expected, $visitor->visit($root)); } /** * root * | * a. */ public function testWalkTreeWithTwoNodes(): void { $root = new Node('root'); $a = new Node('a'); $root->addChild($a); $visitor = new PreOrderVisitor(); $expected = [ $root, $a, ]; self::assertSame($expected, $visitor->visit($root)); } /** * root * /|\ * a b c * /| | * d e f. */ public function testWalkTreeWithMoreNodes(): void { $root = new Node('root'); $a = new Node('a'); $b = new Node('b'); $c = new Node('c'); $d = new Node('d'); $e = new Node('e'); $f = new Node('f'); $root->addChild($a); $root->addChild($b); $root->addChild($c); $a->addChild($d); $a->addChild($e); $b->addChild($f); $visitor = new PreOrderVisitor(); $expected = [ $root, $a, $d, $e, $b, $f, $c, ]; self::assertSame($expected, $visitor->visit($root)); } /** * root * /|\ * a b c * /| | * d e f. */ public function testWalkSubTree(): void { $root = new Node('root'); $a = new Node('a'); $b = new Node('b'); $c = new Node('c'); $d = new Node('d'); $e = new Node('e'); $f = new Node('f'); $root->addChild($a); $root->addChild($b); $root->addChild($c); $a->addChild($d); $a->addChild($e); $b->addChild($f); $visitor = new PreOrderVisitor(); $expected = [ $a, $d, $e, ]; self::assertSame($expected, $visitor->visit($a)); } } tree/README.md 0000644 00000013540 15007532571 0006772 0 ustar 00 # Tree [](https://github.com/nicmart/Tree/actions) [](https://github.com/nicmart/Tree/actions) [](https://codecov.io/gh/nicmart/tree) [](https://shepherd.dev/github/nicmart/tree) [](https://packagist.org/packages/nicmart/tree) [](https://packagist.org/packages/nicmart/tree) [](https://packagist.org/packages/nicmart/tree) In Tree you can find a basic but flexible tree data structure for php together with and an handful Builder class, that enables you to build tree in a fluent way. ## The tree data structure The `Tree\Node\NodeInterface` interface abstracts the concept of a tree node. In `Tree` a Node has essentially two things: a set of children (that implements the same `NodeInterface` interface) and a value. On the other hand, the `Tree\Node\Node` gives a straight implementation for that interface. ### Creating a node ```php use Tree\Node\Node; $node = new Node('foo'); ``` ### Getting and setting the value of a node Each node has a value property, that can be any php value. ```php $node->setValue('my value'); echo $node->getValue(); //Prints 'my value' ``` ### Adding one or more children ```php $child1 = new Node('child1'); $child2 = new Node('child2'); $node ->addChild($child1) ->addChild($child2); ``` ### Removing a child ```php $node->removeChild($child1); ``` ### Getting the array of all children ```php $children = $node->getChildren(); ``` ### Overwriting the children set ```php $node->setChildren([new Node('foo'), new Node('bar')]); ``` ### Removing all children ```php $node->removeAllChildren(); ``` ### Getting if the node is a leaf or not A leaf is a node with no children. ```php $node->isLeaf(); ``` ### Getting if the node is a child or not A child is a node that has a parent. ```php $node->isChild(); ``` ### Getting the parent of a node Reference to the parent node is automatically managed by child-modifiers methods ```php $root->addChild($node = new Node('child')); $node->getParent(); // Returns $root ``` ### Getting the ancestors of a node ```php $root = (new Node('root')) ->addChild($child = new Node('child')) ->addChild($grandChild = new Node('grandchild')) ; $grandchild->getAncestors(); // Returns [$root, $child] ``` #### Related Methods - `getAncestorsAndSelf` retrieves ancestors of a node with the current node included. ### Getting the root of a node ```php $root = $node->root(); ``` ### Getting the neighbors of a node ```php $root = (new Node('root')) ->addChild($child1 = new Node('child1')) ->addChild($child2 = new Node('child2')) ->addChild($child3 = new Node('child3')) ; $child2->getNeighbors(); // Returns [$child1, $child3] ``` #### Related Methods - `getNeighborsAndSelf` retrieves neighbors of current node and the node itself. ### Getting the number of nodes in the tree ```php $node->getSize(); ``` ### Getting the depth of a node ```php $node->getDepth(); ``` ### Getting the height of a node ```php $node->getHeight(); ``` ## The Builder The builder provides a convenient way to build trees. It is provided by the ```Builder``` class, but you can implement your own builder making an implementation of the ```BuilderInterface```class. ### Example Let's see how to build the following tree, where the nodes label are represents nodes values: ``` A / \ B C /|\ D E F /| G H ``` And here is the code: ```php $builder = new Tree\Builder\NodeBuilder; $builder ->value('A') ->leaf('B') ->tree('C') ->tree('D') ->leaf('G') ->leaf('H') ->end() ->leaf('E') ->leaf('F') ->end() ; $nodeA = $builder->getNode(); ``` The example should be self-explanatory, but here you are a brief description of the methods used above. ### Builder::value($value) Set the value of the current node to ```$value``` ### Builder::leaf($value) Add to the current node a new child whose value is ```$value```. ### Builder::tree($value) Add to the current node a new child whose value is ```$value```, and set the new node as the builder current node. ### Builder::end() Returns to the context the builder was before the call to ```tree```method, i.e. make the builder go one level up. ### Builder::getNode() Returns the current node. ## Traversing a tree ### Yield You can obtain the yield of a tree (i.e. the list of leaves in a pre-order traversal) using the YieldVisitor. For example, if `$node` is the tree built above, then ```php use Tree\Visitor\YieldVisitor; $visitor = new YieldVisitor; $yield = $node->accept($visitor); // $yield will contain nodes B, G, H, E, F ``` ### Pre-order Traversal You can walk a tree in pre-order: ```php use Tree\Visitor\PreOrderVisitor; $visitor = new PreOrderVisitor; $yield = $node->accept($visitor); // $yield will contain nodes A, B, C, D, G, H, E, F ``` ### Post-order Traversal You can walk a tree in post-order: ```php use Tree\Visitor\PostOrderVisitor; $visitor = new PostOrderVisitor; $yield = $node->accept($visitor); // $yield will contain nodes B, G, H, D, E, F, C, A ``` ## Install Run ``` $ composer require nicmart/tree ``` # Tests ``` phpunit ``` ## Changelog Please have a look at [`CHANGELOG.md`](CHANGELOG.md). ## Contributing Please have a look at [`CONTRIBUTING.md`](.github/CONTRIBUTING.md). ## License This package is licensed using the MIT License. Please have a look at [`LICENSE.md`](LICENSE.md). tree/composer.lock 0000644 00000666400 15007532571 0010225 0 ustar 00 { "_readme": [ "This file locks the dependencies of your project to a known state", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], "content-hash": "6e4df3c40c0756cdf2b541c65a227970", "packages": [], "packages-dev": [ { "name": "amphp/amp", "version": "v2.6.2", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "amphp/php-cs-fixer-config": "dev-master", "amphp/phpunit-util": "^1", "ext-json": "*", "jetbrains/phpstorm-stubs": "^2019.3", "phpunit/phpunit": "^7 | ^8 | ^9", "psalm/phar": "^3.11@dev", "react/promise": "^2" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.x-dev" } }, "autoload": { "files": [ "lib/functions.php", "lib/Internal/functions.php" ], "psr-4": { "Amp\\": "lib" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Daniel Lowrey", "email": "rdlowrey@php.net" }, { "name": "Aaron Piotrowski", "email": "aaron@trowski.com" }, { "name": "Bob Weinand", "email": "bobwei9@hotmail.com" }, { "name": "Niklas Keller", "email": "me@kelunik.com" } ], "description": "A non-blocking concurrency framework for PHP applications.", "homepage": "https://amphp.org/amp", "keywords": [ "async", "asynchronous", "awaitable", "concurrency", "event", "event-loop", "future", "non-blocking", "promise" ], "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", "source": "https://github.com/amphp/amp/tree/v2.6.2" }, "funding": [ { "url": "https://github.com/amphp", "type": "github" } ], "time": "2022-02-20T17:52:18+00:00" }, { "name": "amphp/byte-stream", "version": "v1.8.1", "source": { "type": "git", "url": "https://github.com/amphp/byte-stream.git", "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", "shasum": "" }, "require": { "amphp/amp": "^2", "php": ">=7.1" }, "require-dev": { "amphp/php-cs-fixer-config": "dev-master", "amphp/phpunit-util": "^1.4", "friendsofphp/php-cs-fixer": "^2.3", "jetbrains/phpstorm-stubs": "^2019.3", "phpunit/phpunit": "^6 || ^7 || ^8", "psalm/phar": "^3.11.4" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.x-dev" } }, "autoload": { "files": [ "lib/functions.php" ], "psr-4": { "Amp\\ByteStream\\": "lib" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Aaron Piotrowski", "email": "aaron@trowski.com" }, { "name": "Niklas Keller", "email": "me@kelunik.com" } ], "description": "A stream abstraction to make working with non-blocking I/O simple.", "homepage": "http://amphp.org/byte-stream", "keywords": [ "amp", "amphp", "async", "io", "non-blocking", "stream" ], "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/byte-stream/issues", "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" }, "funding": [ { "url": "https://github.com/amphp", "type": "github" } ], "time": "2021-03-30T17:13:30+00:00" }, { "name": "colinodell/json5", "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/colinodell/json5.git", "reference": "15b063f8cb5e6deb15f0cd39123264ec0d19c710" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/colinodell/json5/zipball/15b063f8cb5e6deb15f0cd39123264ec0d19c710", "reference": "15b063f8cb5e6deb15f0cd39123264ec0d19c710", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", "php": "^7.1.3|^8.0" }, "conflict": { "scrutinizer/ocular": "1.7.*" }, "require-dev": { "mikehaertl/php-shellcommand": "^1.2.5", "phpstan/phpstan": "^1.4", "scrutinizer/ocular": "^1.6", "squizlabs/php_codesniffer": "^2.3 || ^3.0", "symfony/finder": "^4.4|^5.4|^6.0", "symfony/phpunit-bridge": "^5.4|^6.0" }, "bin": [ "bin/json5" ], "type": "library", "extra": { "branch-alias": { "dev-main": "3.0-dev" } }, "autoload": { "files": [ "src/global.php" ], "psr-4": { "ColinODell\\Json5\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Colin O'Dell", "email": "colinodell@gmail.com", "homepage": "https://www.colinodell.com", "role": "Developer" } ], "description": "UTF-8 compatible JSON5 parser for PHP", "homepage": "https://github.com/colinodell/json5", "keywords": [ "JSON5", "json", "json5_decode", "json_decode" ], "support": { "issues": "https://github.com/colinodell/json5/issues", "source": "https://github.com/colinodell/json5/tree/v2.3.0" }, "funding": [ { "url": "https://www.colinodell.com/sponsor", "type": "custom" }, { "url": "https://www.paypal.me/colinpodell/10.00", "type": "custom" }, { "url": "https://github.com/colinodell", "type": "github" }, { "url": "https://www.patreon.com/colinodell", "type": "patreon" } ], "time": "2022-12-27T16:44:40+00:00" }, { "name": "composer/package-versions-deprecated", "version": "1.11.99.5", "source": { "type": "git", "url": "https://github.com/composer/package-versions-deprecated.git", "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", "shasum": "" }, "require": { "composer-plugin-api": "^1.1.0 || ^2.0", "php": "^7 || ^8" }, "replace": { "ocramius/package-versions": "1.11.99" }, "require-dev": { "composer/composer": "^1.9.3 || ^2.0@dev", "ext-zip": "^1.13", "phpunit/phpunit": "^6.5 || ^7" }, "type": "composer-plugin", "extra": { "class": "PackageVersions\\Installer", "branch-alias": { "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { "PackageVersions\\": "src/PackageVersions" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Marco Pivetta", "email": "ocramius@gmail.com" }, { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be" } ], "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", "support": { "issues": "https://github.com/composer/package-versions-deprecated/issues", "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" }, "funding": [ { "url": "https://packagist.com", "type": "custom" }, { "url": "https://github.com/composer", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/composer/composer", "type": "tidelift" } ], "time": "2022-01-17T14:14:24+00:00" }, { "name": "composer/pcre", "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^1.3", "phpstan/phpstan-strict-rules": "^1.1", "symfony/phpunit-bridge": "^5" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" } }, "autoload": { "psr-4": { "Composer\\Pcre\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", "homepage": "http://seld.be" } ], "description": "PCRE wrapping library that offers type-safe preg_* replacements.", "keywords": [ "PCRE", "preg", "regex", "regular expression" ], "support": { "issues": "https://github.com/composer/pcre/issues", "source": "https://github.com/composer/pcre/tree/3.1.1" }, "funding": [ { "url": "https://packagist.com", "type": "custom" }, { "url": "https://github.com/composer", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/composer/composer", "type": "tidelift" } ], "time": "2023-10-11T07:11:09+00:00" }, { "name": "composer/semver", "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^1.4", "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" } }, "autoload": { "psr-4": { "Composer\\Semver\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nils Adermann", "email": "naderman@naderman.de", "homepage": "http://www.naderman.de" }, { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", "homepage": "http://seld.be" }, { "name": "Rob Bast", "email": "rob.bast@gmail.com", "homepage": "http://robbast.nl" } ], "description": "Semver library that offers utilities, version constraint parsing and validation.", "keywords": [ "semantic", "semver", "validation", "versioning" ], "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", "source": "https://github.com/composer/semver/tree/3.4.0" }, "funding": [ { "url": "https://packagist.com", "type": "custom" }, { "url": "https://github.com/composer", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/composer/composer", "type": "tidelift" } ], "time": "2023-08-31T09:50:34+00:00" }, { "name": "composer/xdebug-handler", "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", "reference": "ced299686f41dce890debac69273b47ffe98a40c" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", "reference": "ced299686f41dce890debac69273b47ffe98a40c", "shasum": "" }, "require": { "composer/pcre": "^1 || ^2 || ^3", "php": "^7.2.5 || ^8.0", "psr/log": "^1 || ^2 || ^3" }, "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", "symfony/phpunit-bridge": "^6.0" }, "type": "library", "autoload": { "psr-4": { "Composer\\XdebugHandler\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "John Stevenson", "email": "john-stevenson@blueyonder.co.uk" } ], "description": "Restarts a process without Xdebug.", "keywords": [ "Xdebug", "performance" ], "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" }, "funding": [ { "url": "https://packagist.com", "type": "custom" }, { "url": "https://github.com/composer", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/composer/composer", "type": "tidelift" } ], "time": "2022-02-25T21:32:43+00:00" }, { "name": "dnoegel/php-xdg-base-dir", "version": "v0.1.1", "source": { "type": "git", "url": "https://github.com/dnoegel/php-xdg-base-dir.git", "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", "shasum": "" }, "require": { "php": ">=5.3.2" }, "require-dev": { "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" }, "type": "library", "autoload": { "psr-4": { "XdgBaseDir\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "implementation of xdg base directory specification for php", "support": { "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" }, "time": "2019-12-04T15:06:13+00:00" }, { "name": "doctrine/deprecations", "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^9", "phpstan/phpstan": "1.4.10 || 1.10.15", "phpstan/phpstan-phpunit": "^1.0", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "psalm/plugin-phpunit": "0.18.4", "psr/log": "^1 || ^2 || ^3", "vimeo/psalm": "4.30.0 || 5.12.0" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, "type": "library", "autoload": { "psr-4": { "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", "source": "https://github.com/doctrine/deprecations/tree/1.1.2" }, "time": "2023-09-27T20:04:15+00:00" }, { "name": "doctrine/instantiator", "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^0.16 || ^1", "phpstan/phpstan": "^1.4", "phpstan/phpstan-phpunit": "^1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", "type": "custom" }, { "url": "https://www.patreon.com/phpdoctrine", "type": "patreon" }, { "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", "type": "tidelift" } ], "time": "2022-12-30T00:15:36+00:00" }, { "name": "ergebnis/composer-normalize", "version": "2.31.0", "source": { "type": "git", "url": "https://github.com/ergebnis/composer-normalize.git", "reference": "da1d18bcc2ca02111359c2c76fd938a907ba0a16" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/da1d18bcc2ca02111359c2c76fd938a907ba0a16", "reference": "da1d18bcc2ca02111359c2c76fd938a907ba0a16", "shasum": "" }, "require": { "composer-plugin-api": "^2.0.0", "ergebnis/json": "^1.0.1", "ergebnis/json-normalizer": "^4.1.0", "ergebnis/json-printer": "^3.3.0", "ext-json": "*", "justinrainbow/json-schema": "^5.2.12", "localheinz/diff": "^1.1.1", "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "require-dev": { "composer/composer": "^2.5.5", "ergebnis/license": "^2.1.0", "ergebnis/php-cs-fixer-config": "^5.5.2", "fakerphp/faker": "^1.21.0", "infection/infection": "~0.26.19", "phpunit/phpunit": "^9.6.7", "psalm/plugin-phpunit": "~0.18.4", "rector/rector": "~0.15.25", "symfony/filesystem": "^6.0.13", "vimeo/psalm": "^5.9.0" }, "type": "composer-plugin", "extra": { "class": "Ergebnis\\Composer\\Normalize\\NormalizePlugin", "composer-normalize": { "indent-size": 2, "indent-style": "space" }, "plugin-optional": true }, "autoload": { "psr-4": { "Ergebnis\\Composer\\Normalize\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Andreas Möller", "email": "am@localheinz.com" } ], "description": "Provides a composer plugin for normalizing composer.json.", "homepage": "https://github.com/ergebnis/composer-normalize", "keywords": [ "composer", "normalize", "normalizer", "plugin" ], "support": { "issues": "https://github.com/ergebnis/composer-normalize/issues", "security": "https://github.com/ergebnis/composer-normalize/blob/main/.github/SECURITY.md", "source": "https://github.com/ergebnis/composer-normalize" }, "time": "2023-05-02T14:10:33+00:00" }, { "name": "ergebnis/json", "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/ergebnis/json.git", "reference": "d66ea30060856d0729a4aa319a02752519ca63a0" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/ergebnis/json/zipball/d66ea30060856d0729a4aa319a02752519ca63a0", "reference": "d66ea30060856d0729a4aa319a02752519ca63a0", "shasum": "" }, "require": { "php": "^8.0" }, "require-dev": { "ergebnis/composer-normalize": "^2.29.0", "ergebnis/data-provider": "^1.2.0", "ergebnis/license": "^2.1.0", "ergebnis/php-cs-fixer-config": "^5.0.0", "ergebnis/phpstan-rules": "^1.0.0", "fakerphp/faker": "^1.20.0", "infection/infection": "~0.26.16", "phpunit/phpunit": "^9.5.27", "psalm/plugin-phpunit": "~0.18.4", "vimeo/psalm": "^5.1.0" }, "type": "library", "extra": { "composer-normalize": { "indent-size": 2, "indent-style": "space" } }, "autoload": { "psr-4": { "Ergebnis\\Json\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Andreas Möller", "email": "am@localheinz.com" } ], "description": "Provides a Json value object for representing a valid JSON string.", "homepage": "https://github.com/ergebnis/json", "keywords": [ "json" ], "support": { "issues": "https://github.com/ergebnis/json/issues", "source": "https://github.com/ergebnis/json" }, "time": "2022-12-10T22:38:50+00:00" }, { "name": "ergebnis/json-normalizer", "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/ergebnis/json-normalizer.git", "reference": "e38f8b27f908686b200e3bd68e1b7bdfb5d53061" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/e38f8b27f908686b200e3bd68e1b7bdfb5d53061", "reference": "e38f8b27f908686b200e3bd68e1b7bdfb5d53061", "shasum": "" }, "require": { "ergebnis/json": "^1.0.1", "ergebnis/json-pointer": "^3.2.0", "ergebnis/json-printer": "^3.3.0", "ergebnis/json-schema-validator": "^4.0.0", "ext-json": "*", "justinrainbow/json-schema": "^5.2.12", "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "require-dev": { "composer/semver": "^3.2.1", "ergebnis/data-provider": "^1.3.0", "ergebnis/license": "^2.1.0", "ergebnis/php-cs-fixer-config": "^5.5.2", "fakerphp/faker": "^1.21.0", "infection/infection": "~0.26.19", "phpunit/phpunit": "^9.6.7", "psalm/plugin-phpunit": "~0.18.4", "rector/rector": "~0.15.25", "symfony/filesystem": "^6.0.19", "symfony/finder": "^6.0.19", "vimeo/psalm": "^5.9.0" }, "suggest": { "composer/semver": "If you want to use ComposerJsonNormalizer or VersionConstraintNormalizer" }, "type": "library", "autoload": { "psr-4": { "Ergebnis\\Json\\Normalizer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Andreas Möller", "email": "am@localheinz.com" } ], "description": "Provides generic and vendor-specific normalizers for normalizing JSON documents.", "homepage": "https://github.com/ergebnis/json-normalizer", "keywords": [ "json", "normalizer" ], "support": { "issues": "https://github.com/ergebnis/json-normalizer/issues", "source": "https://github.com/ergebnis/json-normalizer" }, "time": "2023-05-02T11:08:03+00:00" }, { "name": "ergebnis/json-pointer", "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/ergebnis/json-pointer.git", "reference": "861516ff5afa1aa8905fdf3361315909523a1bf8" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/861516ff5afa1aa8905fdf3361315909523a1bf8", "reference": "861516ff5afa1aa8905fdf3361315909523a1bf8", "shasum": "" }, "require": { "php": "^8.0" }, "require-dev": { "ergebnis/composer-normalize": "^2.28.3", "ergebnis/data-provider": "^1.2.0", "ergebnis/license": "^2.1.0", "ergebnis/php-cs-fixer-config": "^5.0.0", "fakerphp/faker": "^1.20.0", "infection/infection": "~0.26.16", "phpunit/phpunit": "^9.5.26", "psalm/plugin-phpunit": "~0.18.3", "vimeo/psalm": "^4.30" }, "type": "library", "extra": { "composer-normalize": { "indent-size": 2, "indent-style": "space" } }, "autoload": { "psr-4": { "Ergebnis\\Json\\Pointer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Andreas Möller", "email": "am@localheinz.com" } ], "description": "Provides JSON pointer as a value object.", "homepage": "https://github.com/ergebnis/json-pointer", "keywords": [ "RFC6901", "json", "pointer" ], "support": { "issues": "https://github.com/ergebnis/json-pointer/issues", "source": "https://github.com/ergebnis/json-pointer" }, "time": "2022-11-28T17:03:31+00:00" }, { "name": "ergebnis/json-printer", "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/ergebnis/json-printer.git", "reference": "18920367473b099633f644f0ca6dc8794345148f" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/18920367473b099633f644f0ca6dc8794345148f", "reference": "18920367473b099633f644f0ca6dc8794345148f", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", "php": "^8.0" }, "require-dev": { "ergebnis/license": "^2.0.0", "ergebnis/php-cs-fixer-config": "^4.11.0", "fakerphp/faker": "^1.20.0", "infection/infection": "~0.26.6", "phpunit/phpunit": "^9.5.26", "psalm/plugin-phpunit": "~0.18.3", "vimeo/psalm": "^4.30.0" }, "type": "library", "autoload": { "psr-4": { "Ergebnis\\Json\\Printer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Andreas Möller", "email": "am@localheinz.com" } ], "description": "Provides a JSON printer, allowing for flexible indentation.", "homepage": "https://github.com/ergebnis/json-printer", "keywords": [ "formatter", "json", "printer" ], "support": { "issues": "https://github.com/ergebnis/json-printer/issues", "source": "https://github.com/ergebnis/json-printer" }, "time": "2022-11-28T10:27:43+00:00" }, { "name": "ergebnis/json-schema-validator", "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/ergebnis/json-schema-validator.git", "reference": "a6166272ac5691a9bc791f185841e5f92a6d4723" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/a6166272ac5691a9bc791f185841e5f92a6d4723", "reference": "a6166272ac5691a9bc791f185841e5f92a6d4723", "shasum": "" }, "require": { "ergebnis/json": "^1.0.0", "ergebnis/json-pointer": "^3.2.0", "ext-json": "*", "justinrainbow/json-schema": "^5.2.12", "php": "^8.0" }, "require-dev": { "ergebnis/composer-normalize": "^2.21.0", "ergebnis/data-provider": "^1.2.0", "ergebnis/license": "^2.1.0", "ergebnis/php-cs-fixer-config": "~5.0.0", "fakerphp/faker": "^1.20.0", "infection/infection": "~0.26.16", "phpunit/phpunit": "~9.5.27", "psalm/plugin-phpunit": "~0.18.4", "vimeo/psalm": "^5.1.0" }, "type": "library", "extra": { "composer-normalize": { "indent-size": 2, "indent-style": "space" } }, "autoload": { "psr-4": { "Ergebnis\\Json\\SchemaValidator\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Andreas Möller", "email": "am@localheinz.com" } ], "description": "Provides a JSON schema validator, building on top of justinrainbow/json-schema.", "homepage": "https://github.com/ergebnis/json-schema-validator", "keywords": [ "json", "schema", "validator" ], "support": { "issues": "https://github.com/ergebnis/json-schema-validator/issues", "source": "https://github.com/ergebnis/json-schema-validator" }, "time": "2022-12-10T14:50:15+00:00" }, { "name": "ergebnis/license", "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/ergebnis/license.git", "reference": "629cbbdaa4980e2cf770b9be9ffb5c1b0ceb5160" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/ergebnis/license/zipball/629cbbdaa4980e2cf770b9be9ffb5c1b0ceb5160", "reference": "629cbbdaa4980e2cf770b9be9ffb5c1b0ceb5160", "shasum": "" }, "require": { "ext-filter": "*", "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "require-dev": { "ergebnis/composer-normalize": "^2.28.3", "ergebnis/data-provider": "^1.2.0", "ergebnis/php-cs-fixer-config": "^6.13.0", "fakerphp/faker": "^1.23.0", "infection/infection": "~0.26.6", "phpunit/phpunit": "^9.6.13", "psalm/plugin-phpunit": "~0.18.4", "rector/rector": "~0.18.11", "symfony/filesystem": "^5.0.0 || ^6.0.0", "vimeo/psalm": "^5.16.0" }, "type": "library", "autoload": { "psr-4": { "Ergebnis\\License\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Andreas Möller", "email": "am@localheinz.com", "homepage": "https://localheinz.com" } ], "description": "Provides an abstraction of an open-source license.", "homepage": "https://github.com/ergebnis/license", "keywords": [ "license" ], "support": { "issues": "https://github.com/ergebnis/license/issues", "security": "https://github.com/ergebnis/license/blob/main/.github/SECURITY.md", "source": "https://github.com/ergebnis/license" }, "time": "2023-11-30T13:28:53+00:00" }, { "name": "ergebnis/php-cs-fixer-config", "version": "6.13.0", "source": { "type": "git", "url": "https://github.com/ergebnis/php-cs-fixer-config.git", "reference": "4fb31c5e812b063ae783c354460558b95b887e95" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/ergebnis/php-cs-fixer-config/zipball/4fb31c5e812b063ae783c354460558b95b887e95", "reference": "4fb31c5e812b063ae783c354460558b95b887e95", "shasum": "" }, "require": { "erickskrauch/php-cs-fixer-custom-fixers": "~1.2.1", "ext-filter": "*", "friendsofphp/php-cs-fixer": "~3.40.0", "kubawerlos/php-cs-fixer-custom-fixers": "~3.17.0", "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "require-dev": { "ergebnis/composer-normalize": "^2.28.3", "ergebnis/data-provider": "^1.2.0", "ergebnis/license": "^2.0.0", "ergebnis/rector-rules": "~0.3.0", "fakerphp/faker": "^1.23.0", "infection/infection": "~0.26.6", "phpunit/phpunit": "^9.6.13", "psalm/plugin-phpunit": "~0.18.4", "rector/rector": "~0.18.11", "symfony/filesystem": "^5.0.0 || ^6.0.0", "symfony/process": "^5.0.0 || ^6.0.0", "vimeo/psalm": "^5.16.0" }, "type": "library", "extra": { "composer-normalize": { "indent-size": 2, "indent-style": "space" } }, "autoload": { "psr-4": { "Ergebnis\\PhpCsFixer\\Config\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Andreas Möller", "email": "am@localheinz.com", "homepage": "https://localheinz.com" } ], "description": "Provides a configuration factory and rule set factories for friendsofphp/php-cs-fixer.", "homepage": "https://github.com/ergebnis/php-cs-fixer-config", "support": { "issues": "https://github.com/ergebnis/php-cs-fixer-config/issues", "security": "https://github.com/ergebnis/php-cs-fixer-config/blob/main/.github/SECURITY.md", "source": "https://github.com/ergebnis/php-cs-fixer-config" }, "time": "2023-11-30T09:24:19+00:00" }, { "name": "erickskrauch/php-cs-fixer-custom-fixers", "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/erickskrauch/php-cs-fixer-custom-fixers.git", "reference": "6b0e22fd12fb3110f74e34aa6988468a220609bf" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/erickskrauch/php-cs-fixer-custom-fixers/zipball/6b0e22fd12fb3110f74e34aa6988468a220609bf", "reference": "6b0e22fd12fb3110f74e34aa6988468a220609bf", "shasum": "" }, "require": { "friendsofphp/php-cs-fixer": "^3", "php": "^7.4 || ^8.0" }, "require-dev": { "ely/php-code-style": "^1", "ergebnis/composer-normalize": "^2.28", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", "phpspec/prophecy": "^1.15", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", "phpunitgoodpractices/polyfill": "^1.5", "phpunitgoodpractices/traits": "^1.9.1", "symfony/phpunit-bridge": "^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { "ErickSkrauch\\PhpCsFixer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "ErickSkrauch", "email": "erickskrauch@ely.by" } ], "description": "A set of custom fixers for PHP-CS-Fixer", "homepage": "https://github.com/erickskrauch/php-cs-fixer-custom-fixers", "keywords": [ "Code style", "php-cs-fixer" ], "support": { "issues": "https://github.com/erickskrauch/php-cs-fixer-custom-fixers/issues", "source": "https://github.com/erickskrauch/php-cs-fixer-custom-fixers/tree/1.2.1" }, "time": "2023-11-16T16:27:33+00:00" }, { "name": "fakerphp/faker", "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", "shasum": "" }, "require": { "php": "^7.4 || ^8.0", "psr/container": "^1.0 || ^2.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" }, "conflict": { "fzaninotto/faker": "*" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.4.1", "doctrine/persistence": "^1.3 || ^2.0", "ext-intl": "*", "phpunit/phpunit": "^9.5.26", "symfony/phpunit-bridge": "^5.4.16" }, "suggest": { "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", "ext-curl": "Required by Faker\\Provider\\Image to download images.", "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", "ext-mbstring": "Required for multibyte Unicode string functionality." }, "type": "library", "extra": { "branch-alias": { "dev-main": "v1.21-dev" } }, "autoload": { "psr-4": { "Faker\\": "src/Faker/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "François Zaninotto" } ], "description": "Faker is a PHP library that generates fake data for you.", "keywords": [ "data", "faker", "fixtures" ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0" }, "time": "2023-06-12T08:44:38+00:00" }, { "name": "felixfbecker/advanced-json-rpc", "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", "shasum": "" }, "require": { "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", "php": "^7.1 || ^8.0", "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" }, "require-dev": { "phpunit/phpunit": "^7.0 || ^8.0" }, "type": "library", "autoload": { "psr-4": { "AdvancedJsonRpc\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "ISC" ], "authors": [ { "name": "Felix Becker", "email": "felix.b@outlook.com" } ], "description": "A more advanced JSONRPC implementation", "support": { "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" }, "time": "2021-06-11T22:34:44+00:00" }, { "name": "felixfbecker/language-server-protocol", "version": "v1.5.2", "source": { "type": "git", "url": "https://github.com/felixfbecker/php-language-server-protocol.git", "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "phpstan/phpstan": "*", "squizlabs/php_codesniffer": "^3.1", "vimeo/psalm": "^4.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { "LanguageServerProtocol\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "ISC" ], "authors": [ { "name": "Felix Becker", "email": "felix.b@outlook.com" } ], "description": "PHP classes for the Language Server Protocol", "keywords": [ "language", "microsoft", "php", "server" ], "support": { "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" }, "time": "2022-03-02T22:36:06+00:00" }, { "name": "fidry/cpu-core-counter", "version": "0.4.1", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", "reference": "79261cc280aded96d098e1b0e0ba0c4881b432c2" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/79261cc280aded96d098e1b0e0ba0c4881b432c2", "reference": "79261cc280aded96d098e1b0e0ba0c4881b432c2", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { "fidry/makefile": "^0.2.0", "phpstan/extension-installer": "^1.2.0", "phpstan/phpstan": "^1.9.2", "phpstan/phpstan-deprecation-rules": "^1.0.0", "phpstan/phpstan-phpunit": "^1.2.2", "phpstan/phpstan-strict-rules": "^1.4.4", "phpunit/phpunit": "^9.5.26 || ^8.5.31", "theofidry/php-cs-fixer-config": "^1.0", "webmozarts/strict-phpunit": "^7.5" }, "type": "library", "autoload": { "psr-4": { "Fidry\\CpuCoreCounter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Théo FIDRY", "email": "theo.fidry@gmail.com" } ], "description": "Tiny utility to get the number of CPU cores.", "keywords": [ "CPU", "core" ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", "source": "https://github.com/theofidry/cpu-core-counter/tree/0.4.1" }, "funding": [ { "url": "https://github.com/theofidry", "type": "github" } ], "time": "2022-12-16T22:01:02+00:00" }, { "name": "friendsofphp/php-cs-fixer", "version": "v3.40.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", "reference": "27d2b3265b5d550ec411b4319967ae7cfddfb2e0" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/27d2b3265b5d550ec411b4319967ae7cfddfb2e0", "reference": "27d2b3265b5d550ec411b4319967ae7cfddfb2e0", "shasum": "" }, "require": { "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.3", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", "sebastian/diff": "^4.0 || ^5.0", "symfony/console": "^5.4 || ^6.0 || ^7.0", "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", "symfony/finder": "^5.4 || ^6.0 || ^7.0", "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", "symfony/polyfill-mbstring": "^1.28", "symfony/polyfill-php80": "^1.28", "symfony/polyfill-php81": "^1.28", "symfony/process": "^5.4 || ^6.0 || ^7.0", "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { "facile-it/paraunit": "^1.3 || ^2.0", "justinrainbow/json-schema": "^5.2", "keradus/cli-executor": "^2.1", "mikey179/vfsstream": "^1.6.11", "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4", "phpspec/prophecy": "^1.17", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.6", "symfony/phpunit-bridge": "^6.3.8 || ^7.0", "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, "suggest": { "ext-dom": "For handling output formats in XML", "ext-mbstring": "For handling non-UTF8 characters." }, "bin": [ "php-cs-fixer" ], "type": "application", "autoload": { "psr-4": { "PhpCsFixer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Dariusz Rumiński", "email": "dariusz.ruminski@gmail.com" } ], "description": "A tool to automatically fix PHP code style", "keywords": [ "Static code analysis", "fixer", "standards", "static analysis" ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.40.0" }, "funding": [ { "url": "https://github.com/keradus", "type": "github" } ], "time": "2023-11-26T09:25:53+00:00" }, { "name": "infection/abstract-testframework-adapter", "version": "0.5.0", "source": { "type": "git", "url": "https://github.com/infection/abstract-testframework-adapter.git", "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/infection/abstract-testframework-adapter/zipball/18925e20d15d1a5995bb85c9dc09e8751e1e069b", "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, "require-dev": { "ergebnis/composer-normalize": "^2.8", "friendsofphp/php-cs-fixer": "^2.17", "phpunit/phpunit": "^9.5" }, "type": "library", "autoload": { "psr-4": { "Infection\\AbstractTestFramework\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Maks Rafalko", "email": "maks.rafalko@gmail.com" } ], "description": "Abstract Test Framework Adapter for Infection", "support": { "issues": "https://github.com/infection/abstract-testframework-adapter/issues", "source": "https://github.com/infection/abstract-testframework-adapter/tree/0.5.0" }, "funding": [ { "url": "https://github.com/infection", "type": "github" }, { "url": "https://opencollective.com/infection", "type": "open_collective" } ], "time": "2021-08-17T18:49:12+00:00" }, { "name": "infection/extension-installer", "version": "0.1.2", "source": { "type": "git", "url": "https://github.com/infection/extension-installer.git", "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/infection/extension-installer/zipball/9b351d2910b9a23ab4815542e93d541e0ca0cdcf", "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf", "shasum": "" }, "require": { "composer-plugin-api": "^1.1 || ^2.0" }, "require-dev": { "composer/composer": "^1.9 || ^2.0", "friendsofphp/php-cs-fixer": "^2.18, <2.19", "infection/infection": "^0.15.2", "php-coveralls/php-coveralls": "^2.4", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^0.12.10", "phpstan/phpstan-phpunit": "^0.12.6", "phpstan/phpstan-strict-rules": "^0.12.2", "phpstan/phpstan-webmozart-assert": "^0.12.2", "phpunit/phpunit": "^9.5", "vimeo/psalm": "^4.8" }, "type": "composer-plugin", "extra": { "class": "Infection\\ExtensionInstaller\\Plugin" }, "autoload": { "psr-4": { "Infection\\ExtensionInstaller\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Maks Rafalko", "email": "maks.rafalko@gmail.com" } ], "description": "Infection Extension Installer", "support": { "issues": "https://github.com/infection/extension-installer/issues", "source": "https://github.com/infection/extension-installer/tree/0.1.2" }, "funding": [ { "url": "https://github.com/infection", "type": "github" }, { "url": "https://opencollective.com/infection", "type": "open_collective" } ], "time": "2021-10-20T22:08:34+00:00" }, { "name": "infection/include-interceptor", "version": "0.2.5", "source": { "type": "git", "url": "https://github.com/infection/include-interceptor.git", "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/infection/include-interceptor/zipball/0cc76d95a79d9832d74e74492b0a30139904bdf7", "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7", "shasum": "" }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.16", "infection/infection": "^0.15.0", "phan/phan": "^2.4 || ^3", "php-coveralls/php-coveralls": "^2.2", "phpstan/phpstan": "^0.12.8", "phpunit/phpunit": "^8.5", "vimeo/psalm": "^3.8" }, "type": "library", "autoload": { "psr-4": { "Infection\\StreamWrapper\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Maks Rafalko", "email": "maks.rafalko@gmail.com" } ], "description": "Stream Wrapper: Include Interceptor. Allows to replace included (autoloaded) file with another one.", "support": { "issues": "https://github.com/infection/include-interceptor/issues", "source": "https://github.com/infection/include-interceptor/tree/0.2.5" }, "funding": [ { "url": "https://github.com/infection", "type": "github" }, { "url": "https://opencollective.com/infection", "type": "open_collective" } ], "time": "2021-08-09T10:03:57+00:00" }, { "name": "infection/infection", "version": "0.26.19", "source": { "type": "git", "url": "https://github.com/infection/infection.git", "reference": "bd7351c88f3a797ea8977e68fe6a3f4d4c5f457f" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/infection/infection/zipball/bd7351c88f3a797ea8977e68fe6a3f4d4c5f457f", "reference": "bd7351c88f3a797ea8977e68fe6a3f4d4c5f457f", "shasum": "" }, "require": { "colinodell/json5": "^2.2", "composer-runtime-api": "^2.0", "composer/xdebug-handler": "^2.0 || ^3.0", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "fidry/cpu-core-counter": "^0.4.0", "infection/abstract-testframework-adapter": "^0.5.0", "infection/extension-installer": "^0.1.0", "infection/include-interceptor": "^0.2.5", "justinrainbow/json-schema": "^5.2.10", "nikic/php-parser": "^4.15.1", "ondram/ci-detector": "^4.1.0", "php": "^8.0", "sanmai/later": "^0.1.1", "sanmai/pipeline": "^5.1 || ^6", "sebastian/diff": "^3.0.2 || ^4.0 || ^5.0", "symfony/console": "^5.4 || ^6.0", "symfony/filesystem": "^5.4 || ^6.0", "symfony/finder": "^5.4 || ^6.0", "symfony/process": "^5.4 || ^6.0", "thecodingmachine/safe": "^2.1.2", "webmozart/assert": "^1.11" }, "conflict": { "dg/bypass-finals": "<1.4.1", "phpunit/php-code-coverage": ">9,<9.1.4 || >9.2.17,<9.2.21" }, "require-dev": { "brianium/paratest": "^6.3", "ext-simplexml": "*", "fidry/makefile": "^0.2.0", "helmich/phpunit-json-assert": "^3.0", "phpspec/prophecy-phpunit": "^2.0", "phpstan/extension-installer": "^1.1.0", "phpstan/phpstan": "^1.3.0", "phpstan/phpstan-phpunit": "^1.0.0", "phpstan/phpstan-strict-rules": "^1.1.0", "phpstan/phpstan-webmozart-assert": "^1.0.2", "phpunit/phpunit": "^9.5.5", "symfony/phpunit-bridge": "^5.4 || ^6.0", "symfony/yaml": "^5.4 || ^6.0", "thecodingmachine/phpstan-safe-rule": "^1.2.0" }, "bin": [ "bin/infection" ], "type": "library", "autoload": { "psr-4": { "Infection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Maks Rafalko", "email": "maks.rafalko@gmail.com", "homepage": "https://twitter.com/maks_rafalko" }, { "name": "Oleg Zhulnev", "homepage": "https://github.com/sidz" }, { "name": "Gert de Pagter", "homepage": "https://github.com/BackEndTea" }, { "name": "Théo FIDRY", "email": "theo.fidry@gmail.com", "homepage": "https://twitter.com/tfidry" }, { "name": "Alexey Kopytko", "email": "alexey@kopytko.com", "homepage": "https://www.alexeykopytko.com" }, { "name": "Andreas Möller", "email": "am@localheinz.com", "homepage": "https://localheinz.com" } ], "description": "Infection is a Mutation Testing framework for PHP. The mutation adequacy score can be used to measure the effectiveness of a test set in terms of its ability to detect faults.", "keywords": [ "coverage", "mutant", "mutation framework", "mutation testing", "testing", "unit testing" ], "support": { "issues": "https://github.com/infection/infection/issues", "source": "https://github.com/infection/infection/tree/0.26.19" }, "funding": [ { "url": "https://github.com/infection", "type": "github" }, { "url": "https://opencollective.com/infection", "type": "open_collective" } ], "time": "2023-02-05T21:47:26+00:00" }, { "name": "justinrainbow/json-schema", "version": "5.2.12", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", "json-schema/json-schema-test-suite": "1.2.0", "phpunit/phpunit": "^4.8.35" }, "bin": [ "bin/validate-json" ], "type": "library", "extra": { "branch-alias": { "dev-master": "5.0.x-dev" } }, "autoload": { "psr-4": { "JsonSchema\\": "src/JsonSchema/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Bruno Prieto Reis", "email": "bruno.p.reis@gmail.com" }, { "name": "Justin Rainbow", "email": "justin.rainbow@gmail.com" }, { "name": "Igor Wiedler", "email": "igor@wiedler.ch" }, { "name": "Robert Schönthal", "email": "seroscho@googlemail.com" } ], "description": "A library to validate a json schema.", "homepage": "https://github.com/justinrainbow/json-schema", "keywords": [ "json", "schema" ], "support": { "issues": "https://github.com/justinrainbow/json-schema/issues", "source": "https://github.com/justinrainbow/json-schema/tree/5.2.12" }, "time": "2022-04-13T08:02:27+00:00" }, { "name": "kubawerlos/php-cs-fixer-custom-fixers", "version": "v3.17.0", "source": { "type": "git", "url": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers.git", "reference": "bbfb4ff20d148ed9531b1cfc9c9a861faba72b9a" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/kubawerlos/php-cs-fixer-custom-fixers/zipball/bbfb4ff20d148ed9531b1cfc9c9a861faba72b9a", "reference": "bbfb4ff20d148ed9531b1cfc9c9a861faba72b9a", "shasum": "" }, "require": { "ext-filter": "*", "ext-tokenizer": "*", "friendsofphp/php-cs-fixer": "^3.22", "php": "^7.4 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.6.4 || ^10.0.14" }, "type": "library", "autoload": { "psr-4": { "PhpCsFixerCustomFixers\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Kuba Werłos", "email": "werlos@gmail.com" } ], "description": "A set of custom fixers for PHP CS Fixer", "support": { "issues": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/issues", "source": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/tree/v3.17.0" }, "time": "2023-11-19T12:08:42+00:00" }, { "name": "localheinz/diff", "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/localheinz/diff.git", "reference": "851bb20ea8358c86f677f5f111c4ab031b1c764c" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/localheinz/diff/zipball/851bb20ea8358c86f677f5f111c4ab031b1c764c", "reference": "851bb20ea8358c86f677f5f111c4ab031b1c764c", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^7.5 || ^8.0", "symfony/process": "^4.2 || ^5" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Kore Nordmann", "email": "mail@kore-nordmann.de" } ], "description": "Fork of sebastian/diff for use with ergebnis/composer-normalize", "homepage": "https://github.com/localheinz/diff", "keywords": [ "diff", "udiff", "unidiff", "unified diff" ], "support": { "source": "https://github.com/localheinz/diff/tree/main" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-07-06T04:49:32+00:00" }, { "name": "myclabs/deep-copy", "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "conflict": { "doctrine/collections": "<1.6.8", "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { "files": [ "src/DeepCopy/deep_copy.php" ], "psr-4": { "DeepCopy\\": "src/DeepCopy/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Create deep copies (clones) of your objects", "keywords": [ "clone", "copy", "duplicate", "object", "object graph" ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", "type": "tidelift" } ], "time": "2023-03-08T13:26:56+00:00" }, { "name": "netresearch/jsonmapper", "version": "v4.2.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", "reference": "f60565f8c0566a31acf06884cdaa591867ecc956" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956", "reference": "f60565f8c0566a31acf06884cdaa591867ecc956", "shasum": "" }, "require": { "ext-json": "*", "ext-pcre": "*", "ext-reflection": "*", "ext-spl": "*", "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", "squizlabs/php_codesniffer": "~3.5" }, "type": "library", "autoload": { "psr-0": { "JsonMapper": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "OSL-3.0" ], "authors": [ { "name": "Christian Weiske", "email": "cweiske@cweiske.de", "homepage": "http://github.com/cweiske/jsonmapper/", "role": "Developer" } ], "description": "Map nested JSON structures onto PHP classes", "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0" }, "time": "2023-04-09T17:37:40+00:00" }, { "name": "nikic/php-parser", "version": "v4.17.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", "shasum": "" }, "require": { "ext-tokenizer": "*", "php": ">=7.0" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" ], "type": "library", "extra": { "branch-alias": { "dev-master": "4.9-dev" } }, "autoload": { "psr-4": { "PhpParser\\": "lib/PhpParser" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Nikita Popov" } ], "description": "A PHP parser written in PHP", "keywords": [ "parser", "php" ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" }, "time": "2023-08-13T19:53:39+00:00" }, { "name": "ondram/ci-detector", "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/OndraM/ci-detector.git", "reference": "8a4b664e916df82ff26a44709942dfd593fa6f30" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/8a4b664e916df82ff26a44709942dfd593fa6f30", "reference": "8a4b664e916df82ff26a44709942dfd593fa6f30", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { "ergebnis/composer-normalize": "^2.2", "lmc/coding-standard": "^1.3 || ^2.1", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0.5", "phpstan/phpstan": "^0.12.58", "phpstan/phpstan-phpunit": "^0.12.16", "phpunit/phpunit": "^7.1 || ^8.0 || ^9.0" }, "type": "library", "autoload": { "psr-4": { "OndraM\\CiDetector\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Ondřej Machulda", "email": "ondrej.machulda@gmail.com" } ], "description": "Detect continuous integration environment and provide unified access to properties of current build", "keywords": [ "CircleCI", "Codeship", "Wercker", "adapter", "appveyor", "aws", "aws codebuild", "azure", "azure devops", "azure pipelines", "bamboo", "bitbucket", "buddy", "ci-info", "codebuild", "continuous integration", "continuousphp", "devops", "drone", "github", "gitlab", "interface", "jenkins", "pipelines", "sourcehut", "teamcity", "travis" ], "support": { "issues": "https://github.com/OndraM/ci-detector/issues", "source": "https://github.com/OndraM/ci-detector/tree/4.1.0" }, "time": "2021-04-14T09:16:52+00:00" }, { "name": "phar-io/manifest", "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" }, { "name": "Sebastian Heuer", "email": "sebastian@phpeople.de", "role": "Developer" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "Developer" } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", "source": "https://github.com/phar-io/manifest/tree/2.0.3" }, "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" }, { "name": "Sebastian Heuer", "email": "sebastian@phpeople.de", "role": "Developer" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "Developer" } ], "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", "source": "https://github.com/phar-io/version/tree/3.2.1" }, "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { "dev-2.x": "2.x-dev" } }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Jaap van Otterdijk", "email": "opensource@ijaap.nl" } ], "description": "Common reflection classes used by phpdocumentor to reflect the code structure", "homepage": "http://www.phpdoc.org", "keywords": [ "FQSEN", "phpDocumentor", "phpdoc", "reflection", "static analysis" ], "support": { "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" }, "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { "ext-filter": "*", "php": "^7.2 || ^8.0", "phpdocumentor/reflection-common": "^2.2", "phpdocumentor/type-resolver": "^1.3", "webmozart/assert": "^1.9.1" }, "require-dev": { "mockery/mockery": "~1.3.2", "psalm/phar": "^4.8" }, "type": "library", "extra": { "branch-alias": { "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Mike van Riel", "email": "me@mikevanriel.com" }, { "name": "Jaap van Otterdijk", "email": "account@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" }, "time": "2021-10-19T17:43:47+00:00" }, { "name": "phpdocumentor/type-resolver", "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.0", "phpstan/phpdoc-parser": "^1.13" }, "require-dev": { "ext-tokenizer": "*", "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.1", "phpunit/phpunit": "^9.5", "rector/rector": "^0.13.9", "vimeo/psalm": "^4.25" }, "type": "library", "extra": { "branch-alias": { "dev-1.x": "1.x-dev" } }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Mike van Riel", "email": "me@mikevanriel.com" } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" }, "time": "2023-08-12T11:01:26+00:00" }, { "name": "phpstan/phpdoc-parser", "version": "1.24.3", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", "reference": "12f01d214f1c73b9c91fdb3b1c415e4c70652083" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/12f01d214f1c73b9c91fdb3b1c415e4c70652083", "reference": "12f01d214f1c73b9c91fdb3b1c415e4c70652083", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { "doctrine/annotations": "^2.0", "nikic/php-parser": "^4.15", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.5", "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.0", "phpunit/phpunit": "^9.5", "symfony/process": "^5.2" }, "type": "library", "autoload": { "psr-4": { "PHPStan\\PhpDocParser\\": [ "src/" ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.3" }, "time": "2023-11-18T20:15:32+00:00" }, { "name": "phpunit/php-code-coverage", "version": "9.2.29", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", "sebastian/code-unit-reverse-lookup": "^2.0.2", "sebastian/complexity": "^2.0", "sebastian/environment": "^5.1.2", "sebastian/lines-of-code": "^1.0.3", "sebastian/version": "^3.0.1", "theseer/tokenizer": "^1.2.0" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { "dev-master": "9.2-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ "coverage", "testing", "xunit" ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.29" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2023-09-19T04:57:46+00:00" }, { "name": "phpunit/php-file-iterator", "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ "filesystem", "iterator" ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2021-12-02T12:48:52+00:00" }, { "name": "phpunit/php-invoker", "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { "ext-pcntl": "*", "phpunit/phpunit": "^9.3" }, "suggest": { "ext-pcntl": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.1-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Invoke callables with a timeout", "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ "process" ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-09-28T05:58:55+00:00" }, { "name": "phpunit/php-text-template", "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Simple template engine.", "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ "template" ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-10-26T05:33:50+00:00" }, { "name": "phpunit/php-timer", "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "5.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Utility class for timing", "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ "timer" ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-10-26T13:16:10+00:00" }, { "name": "phpunit/phpunit", "version": "9.6.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", "reference": "43653e6ad7adc22e7b667dd561bf8fcb74c10cf0" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/43653e6ad7adc22e7b667dd561bf8fcb74c10cf0", "reference": "43653e6ad7adc22e7b667dd561bf8fcb74c10cf0", "shasum": "" }, "require": { "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.10.1", "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", "phpunit/php-code-coverage": "^9.2.28", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files", "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" ], "type": "library", "extra": { "branch-alias": { "dev-master": "9.6-dev" } }, "autoload": { "files": [ "src/Framework/Assert/Functions.php" ], "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "The PHP Unit Testing framework.", "homepage": "https://phpunit.de/", "keywords": [ "phpunit", "testing", "xunit" ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.14" }, "funding": [ { "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { "url": "https://github.com/sebastianbergmann", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", "type": "tidelift" } ], "time": "2023-12-01T06:10:48+00:00" }, { "name": "psalm/plugin-phpunit", "version": "0.18.4", "source": { "type": "git", "url": "https://github.com/psalm/psalm-plugin-phpunit.git", "reference": "e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc", "reference": "e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc", "shasum": "" }, "require": { "composer/package-versions-deprecated": "^1.10", "composer/semver": "^1.4 || ^2.0 || ^3.0", "ext-simplexml": "*", "php": "^7.1 || ^8.0", "vimeo/psalm": "dev-master || dev-4.x || ^4.7.1 || ^5@beta || ^5.0" }, "conflict": { "phpunit/phpunit": "<7.5" }, "require-dev": { "codeception/codeception": "^4.0.3", "php": "^7.3 || ^8.0", "phpunit/phpunit": "^7.5 || ^8.0 || ^9.0", "squizlabs/php_codesniffer": "^3.3.1", "weirdan/codeception-psalm-module": "^0.11.0", "weirdan/prophecy-shim": "^1.0 || ^2.0" }, "type": "psalm-plugin", "extra": { "psalm": { "pluginClass": "Psalm\\PhpUnitPlugin\\Plugin" } }, "autoload": { "psr-4": { "Psalm\\PhpUnitPlugin\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Matt Brown", "email": "github@muglug.com" } ], "description": "Psalm plugin for PHPUnit", "support": { "issues": "https://github.com/psalm/psalm-plugin-phpunit/issues", "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.18.4" }, "time": "2022-12-03T07:47:07+00:00" }, { "name": "psr/container", "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "PHP-FIG", "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", "homepage": "https://github.com/php-fig/container", "keywords": [ "PSR-11", "container", "container-interface", "container-interop", "psr" ], "support": { "issues": "https://github.com/php-fig/container/issues", "source": "https://github.com/php-fig/container/tree/2.0.2" }, "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/event-dispatcher.git", "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", "shasum": "" }, "require": { "php": ">=7.2.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { "Psr\\EventDispatcher\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "PHP-FIG", "homepage": "http://www.php-fig.org/" } ], "description": "Standard interfaces for event handling.", "keywords": [ "events", "psr", "psr-14" ], "support": { "issues": "https://github.com/php-fig/event-dispatcher/issues", "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" }, "time": "2019-01-08T18:20:26+00:00" }, { "name": "psr/log", "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "PHP-FIG", "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for logging libraries", "homepage": "https://github.com/php-fig/log", "keywords": [ "log", "psr", "psr-3" ], "support": { "source": "https://github.com/php-fig/log/tree/3.0.0" }, "time": "2021-07-14T16:46:02+00:00" }, { "name": "sanmai/later", "version": "0.1.2", "source": { "type": "git", "url": "https://github.com/sanmai/later.git", "reference": "9b659fecef2030193fd02402955bc39629d5606f" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sanmai/later/zipball/9b659fecef2030193fd02402955bc39629d5606f", "reference": "9b659fecef2030193fd02402955bc39629d5606f", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.13", "infection/infection": ">=0.10.5", "phan/phan": ">=2", "php-coveralls/php-coveralls": "^2.0", "phpstan/phpstan": ">=0.10", "phpunit/phpunit": ">=7.4", "vimeo/psalm": ">=2" }, "type": "library", "autoload": { "files": [ "src/functions.php" ], "psr-4": { "Later\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], "authors": [ { "name": "Alexey Kopytko", "email": "alexey@kopytko.com" } ], "description": "Later: deferred wrapper object", "support": { "issues": "https://github.com/sanmai/later/issues", "source": "https://github.com/sanmai/later/tree/0.1.2" }, "funding": [ { "url": "https://github.com/sanmai", "type": "github" } ], "time": "2021-01-02T10:26:44+00:00" }, { "name": "sanmai/pipeline", "version": "v6.3", "source": { "type": "git", "url": "https://github.com/sanmai/pipeline.git", "reference": "929b115ca58d62b6b2574702df1ebde4562c7c43" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sanmai/pipeline/zipball/929b115ca58d62b6b2574702df1ebde4562c7c43", "reference": "929b115ca58d62b6b2574702df1ebde4562c7c43", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { "ergebnis/composer-normalize": "^2.8", "friendsofphp/php-cs-fixer": "^3", "infection/infection": ">=0.10.5", "league/pipeline": "^1.0 || ^0.3", "phan/phan": ">=1.1", "php-coveralls/php-coveralls": "^2.4.1", "phpstan/phpstan": ">=0.10", "phpunit/phpunit": "^7.4 || ^8.1 || ^9.4", "vimeo/psalm": ">=2" }, "type": "library", "extra": { "branch-alias": { "dev-main": "v6.x-dev" } }, "autoload": { "files": [ "src/functions.php" ], "psr-4": { "Pipeline\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], "authors": [ { "name": "Alexey Kopytko", "email": "alexey@kopytko.com" } ], "description": "General-purpose collections pipeline", "support": { "issues": "https://github.com/sanmai/pipeline/issues", "source": "https://github.com/sanmai/pipeline/tree/v6.3" }, "funding": [ { "url": "https://github.com/sanmai", "type": "github" } ], "time": "2022-11-30T06:07:06+00:00" }, { "name": "sebastian/cli-parser", "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library for parsing CLI options", "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-09-28T06:08:49+00:00" }, { "name": "sebastian/code-unit", "version": "1.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Collection of value objects that represent the PHP code units", "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-10-26T13:08:54+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-09-28T05:30:19+00:00" }, { "name": "sebastian/comparator", "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { "php": ">=7.3", "sebastian/diff": "^4.0", "sebastian/exporter": "^4.0" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "4.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" } ], "description": "Provides the functionality to compare PHP values for equality", "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", "shasum": "" }, "require": { "nikic/php-parser": "^4.7", "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library for calculating the complexity of PHP code units", "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-10-26T15:52:27+00:00" }, { "name": "sebastian/diff", "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.3", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { "dev-master": "4.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Kore Nordmann", "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ "diff", "udiff", "unidiff", "unified diff" ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2023-05-07T05:35:17+00:00" }, { "name": "sebastian/environment", "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "suggest": { "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "5.1-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides functionality to handle HHVM/PHP environments", "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", "hhvm" ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { "php": ">=7.3", "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "4.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Adam Harvey", "email": "aharvey@php.net" }, { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", "version": "5.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", "reference": "bde739e7565280bda77be70044ac1047bc007e34" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", "reference": "bde739e7565280bda77be70044ac1047bc007e34", "shasum": "" }, "require": { "php": ">=7.3", "sebastian/object-reflector": "^2.0", "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-dom": "*", "phpunit/phpunit": "^9.3" }, "suggest": { "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "5.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Snapshotting of global state", "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2023-08-02T09:26:13+00:00" }, { "name": "sebastian/lines-of-code", "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", "shasum": "" }, "require": { "nikic/php-parser": "^4.6", "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library for counting the lines of code in PHP source code", "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-28T06:42:11+00:00" }, { "name": "sebastian/object-enumerator", "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", "shasum": "" }, "require": { "php": ">=7.3", "sebastian/object-reflector": "^2.0", "sebastian/recursion-context": "^4.0" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "4.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-10-26T13:12:34+00:00" }, { "name": "sebastian/object-reflector", "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-10-26T13:14:26+00:00" }, { "name": "sebastian/recursion-context", "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "4.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Adam Harvey", "email": "aharvey@php.net" } ], "description": "Provides functionality to recursively process PHP variables", "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { "issues": "https://github.com/sebastianbergmann/resource-operations/issues", "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-09-28T06:45:17+00:00" }, { "name": "sebastian/type", "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.2-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { "php": ">=7.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-09-28T06:39:44+00:00" }, { "name": "spatie/array-to-xml", "version": "3.2.2", "source": { "type": "git", "url": "https://github.com/spatie/array-to-xml.git", "reference": "96be97e664c87613121d073ea39af4c74e57a7f8" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/96be97e664c87613121d073ea39af4c74e57a7f8", "reference": "96be97e664c87613121d073ea39af4c74e57a7f8", "shasum": "" }, "require": { "ext-dom": "*", "php": "^8.0" }, "require-dev": { "mockery/mockery": "^1.2", "pestphp/pest": "^1.21", "spatie/pest-plugin-snapshots": "^1.1" }, "type": "library", "autoload": { "psr-4": { "Spatie\\ArrayToXml\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Freek Van der Herten", "email": "freek@spatie.be", "homepage": "https://freek.dev", "role": "Developer" } ], "description": "Convert an array to xml", "homepage": "https://github.com/spatie/array-to-xml", "keywords": [ "array", "convert", "xml" ], "support": { "source": "https://github.com/spatie/array-to-xml/tree/3.2.2" }, "funding": [ { "url": "https://spatie.be/open-source/support-us", "type": "custom" }, { "url": "https://github.com/spatie", "type": "github" } ], "time": "2023-11-14T14:08:51+00:00" }, { "name": "symfony/console", "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/console.git", "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed", "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed", "shasum": "" }, "require": { "php": ">=8.0.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^1.1|^2|^3", "symfony/string": "^5.4|^6.0" }, "conflict": { "symfony/dependency-injection": "<5.4", "symfony/dotenv": "<5.4", "symfony/event-dispatcher": "<5.4", "symfony/lock": "<5.4", "symfony/process": "<5.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", "symfony/config": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/event-dispatcher": "^5.4|^6.0", "symfony/lock": "^5.4|^6.0", "symfony/process": "^5.4|^6.0", "symfony/var-dumper": "^5.4|^6.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", "symfony/lock": "", "symfony/process": "" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Console\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", "keywords": [ "cli", "command line", "console", "terminal" ], "support": { "source": "https://github.com/symfony/console/tree/v6.0.19" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/deprecation-contracts", "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", "shasum": "" }, "require": { "php": ">=8.0.2" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", "url": "https://github.com/symfony/contracts" } }, "autoload": { "files": [ "function.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/event-dispatcher", "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", "shasum": "" }, "require": { "php": ">=8.0.2", "symfony/event-dispatcher-contracts": "^2|^3" }, "conflict": { "symfony/dependency-injection": "<5.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", "symfony/config": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/error-handler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3", "symfony/stopwatch": "^5.4|^6.0" }, "suggest": { "symfony/dependency-injection": "", "symfony/http-kernel": "" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.19" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/event-dispatcher-contracts", "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", "shasum": "" }, "require": { "php": ">=8.0.2", "psr/event-dispatcher": "^1" }, "suggest": { "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { "Symfony\\Contracts\\EventDispatcher\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Generic abstractions related to dispatching event", "homepage": "https://symfony.com", "keywords": [ "abstractions", "contracts", "decoupling", "interfaces", "interoperability", "standards" ], "support": { "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.2" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/filesystem", "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/filesystem/zipball/3d49eec03fda1f0fc19b7349fbbe55ebc1004214", "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214", "shasum": "" }, "require": { "php": ">=8.0.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Filesystem\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { "source": "https://github.com/symfony/filesystem/tree/v6.0.19" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-01-20T17:44:14+00:00" }, { "name": "symfony/finder", "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/finder/zipball/5cc9cac6586fc0c28cd173780ca696e419fefa11", "reference": "5cc9cac6586fc0c28cd173780ca696e419fefa11", "shasum": "" }, "require": { "php": ">=8.0.2" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Finder\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { "source": "https://github.com/symfony/finder/tree/v6.0.19" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-01-20T17:44:14+00:00" }, { "name": "symfony/options-resolver", "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/options-resolver/zipball/6a180d1c45e0d9797470ca9eb46215692de00fa3", "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3", "shasum": "" }, "require": { "php": ">=8.0.2", "symfony/deprecation-contracts": "^2.1|^3" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\OptionsResolver\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Provides an improved replacement for the array_replace PHP function", "homepage": "https://symfony.com", "keywords": [ "config", "configuration", "options" ], "support": { "source": "https://github.com/symfony/options-resolver/tree/v6.0.19" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/polyfill-ctype", "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "shasum": "" }, "require": { "php": ">=7.1" }, "provide": { "ext-ctype": "*" }, "suggest": { "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "autoload": { "files": [ "bootstrap.php" ], "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Gert de Pagter", "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "ctype", "polyfill", "portable" ], "support": { "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-grapheme", "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", "reference": "875e90aeea2777b6f135677f618529449334a612" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", "reference": "875e90aeea2777b6f135677f618529449334a612", "shasum": "" }, "require": { "php": ">=7.1" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "autoload": { "files": [ "bootstrap.php" ], "psr-4": { "Symfony\\Polyfill\\Intl\\Grapheme\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "grapheme", "intl", "polyfill", "portable", "shim" ], "support": { "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-normalizer", "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", "shasum": "" }, "require": { "php": ">=7.1" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "autoload": { "files": [ "bootstrap.php" ], "psr-4": { "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, "classmap": [ "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "intl", "normalizer", "polyfill", "portable", "shim" ], "support": { "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-mbstring", "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", "reference": "42292d99c55abe617799667f454222c54c60e229" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", "reference": "42292d99c55abe617799667f454222c54c60e229", "shasum": "" }, "require": { "php": ">=7.1" }, "provide": { "ext-mbstring": "*" }, "suggest": { "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "autoload": { "files": [ "bootstrap.php" ], "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", "mbstring", "polyfill", "portable", "shim" ], "support": { "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-07-28T09:04:16+00:00" }, { "name": "symfony/polyfill-php80", "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "shasum": "" }, "require": { "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "autoload": { "files": [ "bootstrap.php" ], "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, "classmap": [ "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Ion Bazan", "email": "ion.bazan@gmail.com" }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "polyfill", "portable", "shim" ], "support": { "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-php81", "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", "shasum": "" }, "require": { "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "autoload": { "files": [ "bootstrap.php" ], "psr-4": { "Symfony\\Polyfill\\Php81\\": "" }, "classmap": [ "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "polyfill", "portable", "shim" ], "support": { "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/process", "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/process.git", "reference": "2114fd60f26a296cc403a7939ab91478475a33d4" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4", "reference": "2114fd60f26a296cc403a7939ab91478475a33d4", "shasum": "" }, "require": { "php": ">=8.0.2" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Process\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { "source": "https://github.com/symfony/process/tree/v6.0.19" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/service-contracts", "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66", "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66", "shasum": "" }, "require": { "php": ">=8.0.2", "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" }, "suggest": { "symfony/service-implementation": "" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", "keywords": [ "abstractions", "contracts", "decoupling", "interfaces", "interoperability", "standards" ], "support": { "source": "https://github.com/symfony/service-contracts/tree/v3.0.2" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2022-05-30T19:17:58+00:00" }, { "name": "symfony/stopwatch", "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", "reference": "011e781839dd1d2eb8119f65ac516a530f60226d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/stopwatch/zipball/011e781839dd1d2eb8119f65ac516a530f60226d", "reference": "011e781839dd1d2eb8119f65ac516a530f60226d", "shasum": "" }, "require": { "php": ">=8.0.2", "symfony/service-contracts": "^1|^2|^3" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Stopwatch\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { "source": "https://github.com/symfony/stopwatch/tree/v6.0.19" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/string", "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/string.git", "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a", "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a", "shasum": "" }, "require": { "php": ">=8.0.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { "symfony/translation-contracts": "<2.0" }, "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", "symfony/translation-contracts": "^2.0|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { "files": [ "Resources/functions.php" ], "psr-4": { "Symfony\\Component\\String\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", "homepage": "https://symfony.com", "keywords": [ "grapheme", "i18n", "string", "unicode", "utf-8", "utf8" ], "support": { "source": "https://github.com/symfony/string/tree/v6.0.19" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2023-01-01T08:36:10+00:00" }, { "name": "thecodingmachine/safe", "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/thecodingmachine/safe.git", "reference": "e788f3d09dcd36f806350aedb77eac348fafadd3" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/e788f3d09dcd36f806350aedb77eac348fafadd3", "reference": "e788f3d09dcd36f806350aedb77eac348fafadd3", "shasum": "" }, "require": { "php": "^8.0" }, "require-dev": { "phpstan/phpstan": "^1.5", "phpunit/phpunit": "^9.5", "squizlabs/php_codesniffer": "^3.2", "thecodingmachine/phpstan-strict-rules": "^1.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.2.x-dev" } }, "autoload": { "files": [ "deprecated/apc.php", "deprecated/array.php", "deprecated/datetime.php", "deprecated/libevent.php", "deprecated/misc.php", "deprecated/password.php", "deprecated/mssql.php", "deprecated/stats.php", "deprecated/strings.php", "lib/special_cases.php", "deprecated/mysqli.php", "generated/apache.php", "generated/apcu.php", "generated/array.php", "generated/bzip2.php", "generated/calendar.php", "generated/classobj.php", "generated/com.php", "generated/cubrid.php", "generated/curl.php", "generated/datetime.php", "generated/dir.php", "generated/eio.php", "generated/errorfunc.php", "generated/exec.php", "generated/fileinfo.php", "generated/filesystem.php", "generated/filter.php", "generated/fpm.php", "generated/ftp.php", "generated/funchand.php", "generated/gettext.php", "generated/gmp.php", "generated/gnupg.php", "generated/hash.php", "generated/ibase.php", "generated/ibmDb2.php", "generated/iconv.php", "generated/image.php", "generated/imap.php", "generated/info.php", "generated/inotify.php", "generated/json.php", "generated/ldap.php", "generated/libxml.php", "generated/lzf.php", "generated/mailparse.php", "generated/mbstring.php", "generated/misc.php", "generated/mysql.php", "generated/network.php", "generated/oci8.php", "generated/opcache.php", "generated/openssl.php", "generated/outcontrol.php", "generated/pcntl.php", "generated/pcre.php", "generated/pgsql.php", "generated/posix.php", "generated/ps.php", "generated/pspell.php", "generated/readline.php", "generated/rpminfo.php", "generated/rrd.php", "generated/sem.php", "generated/session.php", "generated/shmop.php", "generated/sockets.php", "generated/sodium.php", "generated/solr.php", "generated/spl.php", "generated/sqlsrv.php", "generated/ssdeep.php", "generated/ssh2.php", "generated/stream.php", "generated/strings.php", "generated/swoole.php", "generated/uodbc.php", "generated/uopz.php", "generated/url.php", "generated/var.php", "generated/xdiff.php", "generated/xml.php", "generated/xmlrpc.php", "generated/yaml.php", "generated/yaz.php", "generated/zip.php", "generated/zlib.php" ], "classmap": [ "lib/DateTime.php", "lib/DateTimeImmutable.php", "lib/Exceptions/", "deprecated/Exceptions/", "generated/Exceptions/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "PHP core functions that throw exceptions instead of returning FALSE on error", "support": { "issues": "https://github.com/thecodingmachine/safe/issues", "source": "https://github.com/thecodingmachine/safe/tree/v2.4.0" }, "time": "2022-10-07T14:02:17+00:00" }, { "name": "theseer/tokenizer", "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", "source": "https://github.com/theseer/tokenizer/tree/1.2.2" }, "funding": [ { "url": "https://github.com/theseer", "type": "github" } ], "time": "2023-11-20T00:12:19+00:00" }, { "name": "vimeo/psalm", "version": "5.16.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", "reference": "2897ba636551a8cb61601cc26f6ccfbba6c36591" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/vimeo/psalm/zipball/2897ba636551a8cb61601cc26f6ccfbba6c36591", "reference": "2897ba636551a8cb61601cc26f6ccfbba6c36591", "shasum": "" }, "require": { "amphp/amp": "^2.4.2", "amphp/byte-stream": "^1.5", "composer-runtime-api": "^2", "composer/semver": "^1.4 || ^2.0 || ^3.0", "composer/xdebug-handler": "^2.0 || ^3.0", "dnoegel/php-xdg-base-dir": "^0.1.1", "ext-ctype": "*", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-simplexml": "*", "ext-tokenizer": "*", "felixfbecker/advanced-json-rpc": "^3.1", "felixfbecker/language-server-protocol": "^1.5.2", "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1", "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", "nikic/php-parser": "^4.16", "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", "sebastian/diff": "^4.0 || ^5.0", "spatie/array-to-xml": "^2.17.0 || ^3.0", "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0", "symfony/filesystem": "^5.4 || ^6.0 || ^7.0" }, "conflict": { "nikic/php-parser": "4.17.0" }, "provide": { "psalm/psalm": "self.version" }, "require-dev": { "amphp/phpunit-util": "^2.0", "bamarni/composer-bin-plugin": "^1.4", "brianium/paratest": "^6.9", "ext-curl": "*", "mockery/mockery": "^1.5", "nunomaduro/mock-final-classes": "^1.1", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/phpdoc-parser": "^1.6", "phpunit/phpunit": "^9.6", "psalm/plugin-mockery": "^1.1", "psalm/plugin-phpunit": "^0.18", "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.6", "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0" }, "suggest": { "ext-curl": "In order to send data to shepherd", "ext-igbinary": "^2.0.5 is required, used to serialize caching data" }, "bin": [ "psalm", "psalm-language-server", "psalm-plugin", "psalm-refactor", "psalter" ], "type": "project", "extra": { "branch-alias": { "dev-master": "5.x-dev", "dev-4.x": "4.x-dev", "dev-3.x": "3.x-dev", "dev-2.x": "2.x-dev", "dev-1.x": "1.x-dev" } }, "autoload": { "psr-4": { "Psalm\\": "src/Psalm/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Matthew Brown" } ], "description": "A static analysis tool for finding errors in PHP applications", "keywords": [ "code", "inspection", "php", "static analysis" ], "support": { "docs": "https://psalm.dev/docs", "issues": "https://github.com/vimeo/psalm/issues", "source": "https://github.com/vimeo/psalm" }, "time": "2023-11-22T20:38:47+00:00" }, { "name": "webmozart/assert", "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { "ext-ctype": "*", "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { "phpunit/phpunit": "^8.5.13" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.10-dev" } }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" } ], "description": "Assertions to validate method input/output with nice error messages.", "keywords": [ "assert", "check", "validate" ], "support": { "issues": "https://github.com/webmozarts/assert/issues", "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" }, "platform-dev": [], "platform-overrides": { "php": "8.0.25" }, "plugin-api-version": "2.6.0" } tree/src/Node/NodeTrait.php 0000644 00000010350 15007532571 0011565 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Node; use Tree\Visitor\Visitor; trait NodeTrait { private mixed $value = null; private ?NodeInterface $parent = null; /** * @var array<int, NodeInterface> */ private array $children = []; public function setValue(mixed $value): static { $this->value = $value; return $this; } public function getValue(): mixed { return $this->value; } public function addChild(NodeInterface $child): static { $child->setParent($this); $this->children[] = $child; return $this; } public function removeChild(NodeInterface $child): static { foreach ($this->children as $key => $myChild) { if ($child === $myChild) { unset($this->children[$key]); } } $this->children = \array_values($this->children); $child->setParent(null); return $this; } public function removeAllChildren(): static { $this->setChildren([]); return $this; } public function getChildren(): array { return $this->children; } public function setChildren(array $children): static { foreach ($this->getChildren() as $child) { $child->setParent(null); } $this->children = []; foreach ($children as $child) { $this->addChild($child); } return $this; } public function setParent(?NodeInterface $parent = null): void { $this->parent = $parent; } public function getParent(): ?static { return $this->parent; } public function getAncestors(): array { $parents = []; $node = $this; while (($parent = $node->getParent()) instanceof NodeInterface) { \array_unshift($parents, $parent); $node = $parent; } return $parents; } public function getAncestorsAndSelf(): array { return \array_merge($this->getAncestors(), [$this]); } public function getNeighbors(): array { if (null === $this->parent) { return []; } $neighbors = $this->parent->getChildren(); $that = $this; return \array_values(\array_filter($neighbors, static function (NodeInterface $node) use ($that): bool { return $node !== $that; })); } public function getNeighborsAndSelf(): array { if (null === $this->parent) { return [ $this, ]; } return $this->parent->getChildren(); } public function isRoot(): bool { return null === $this->parent; } public function isChild(): bool { return null !== $this->parent; } public function isLeaf(): bool { return [] === $this->children; } public function root(): static { $node = $this; while (($parent = $node->getParent()) instanceof NodeInterface) { $node = $parent; } return $node; } /** * Return the distance from the current node to the root. * * Warning, can be expensive, since each descendant is visited */ public function getDepth(): int { if ($this->isRoot()) { return 0; } return $this->getParent()->getDepth() + 1; } /** * Return the height of the tree whose root is this node. */ public function getHeight(): int { if ($this->isLeaf()) { return 0; } $heights = []; foreach ($this->getChildren() as $child) { $heights[] = $child->getHeight(); } return \max($heights) + 1; } public function getSize(): int { $size = 1; foreach ($this->getChildren() as $child) { $size += $child->getSize(); } return $size; } public function accept(Visitor $visitor): mixed { return $visitor->visit($this); } } tree/src/Node/NodeInterface.php 0000644 00000005676 15007532571 0012421 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Node; use Tree\Visitor\Visitor; /** * Interface for tree nodes. * * @author Nicolò Martini <nicmartnic@gmail.com> */ interface NodeInterface { /** * Set the value of the current node. */ public function setValue(mixed $value): static; /** * Get the current node value. */ public function getValue(): mixed; /** * Add a child. * * @return mixed */ public function addChild(self $child): static; /** * Remove a node from children. */ public function removeChild(self $child): static; /** * Remove all children. */ public function removeAllChildren(): static; /** * Return the array of children. * * @return array<int, NodeInterface> */ public function getChildren(): array; /** * Replace the children set with the given one. * * @param array<int, NodeInterface> $children * * @return mixed */ public function setChildren(array $children): static; /** * Set the parent node. */ public function setParent(?self $parent = null): void; /** * Return the parent node. */ public function getParent(): ?static; /** * Retrieves all ancestors of node excluding current node. */ public function getAncestors(): array; /** * Retrieves all ancestors of node as well as the node itself. * * @return array<int, Node> */ public function getAncestorsAndSelf(): array; /** * Retrieves all neighboring nodes, excluding the current node. */ public function getNeighbors(): array; /** * Returns all neighboring nodes, including the current node. * * @return array<int, NodeInterface> */ public function getNeighborsAndSelf(): array; /** * Return true if the node is the root, false otherwise. */ public function isRoot(): bool; /** * Return true if the node is a child, false otherwise. */ public function isChild(): bool; /** * Return true if the node has no children, false otherwise. */ public function isLeaf(): bool; /** * Find the root of the node. */ public function root(): static; /** * Return the distance from the current node to the root. */ public function getDepth(): int; /** * Return the height of the tree whose root is this node. */ public function getHeight(): int; /** * Return the number of nodes in a tree. */ public function getSize(): int; /** * Accept method for the visitor pattern (see http://en.wikipedia.org/wiki/Visitor_pattern). */ public function accept(Visitor $visitor): mixed; } tree/src/Node/Node.php 0000644 00000001161 15007532571 0010561 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Node; class Node implements NodeInterface { use NodeTrait; /** * @param array<int, NodeInterface> $children */ public function __construct( mixed $value = null, array $children = [], ) { $this->setValue($value); if ([] === $children) { return; } $this->setChildren($children); } } tree/src/Builder/NodeBuilder.php 0000644 00000004447 15007532571 0012603 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Builder; use Tree\Node\Node; use Tree\Node\NodeInterface; /** * Main implementation of the NodeBuilderInterface. */ class NodeBuilder implements NodeBuilderInterface { /** * @var array<int, NodeInterface> */ private array $nodeStack = []; public function __construct(?NodeInterface $node = null) { $this->setNode($node ?: $this->nodeInstanceByValue()); } public function setNode(NodeInterface $node): static { $this ->emptyStack() ->pushNode($node); return $this; } public function getNode(): NodeInterface { $count = \count($this->nodeStack); if (0 === $count) { throw new \LogicException('The node builder currently does not manage any nodes.'); } return $this->nodeStack[$count - 1]; } public function leaf(mixed $value = null): static { $this->getNode()->addChild( $this->nodeInstanceByValue($value), ); return $this; } public function leafs(mixed ...$values): static { foreach ($values as $value) { $this->leaf($value); } return $this; } public function tree(mixed $value = null): static { $node = $this->nodeInstanceByValue($value); $this->getNode()->addChild($node); $this->pushNode($node); return $this; } public function end(): ?static { $this->popNode(); return $this; } public function nodeInstanceByValue(mixed $value = null): NodeInterface { return new Node($value); } public function value(mixed $value): static { $this->getNode()->setValue($value); return $this; } private function emptyStack(): static { $this->nodeStack = []; return $this; } private function pushNode(NodeInterface $node): static { $this->nodeStack[] = $node; return $this; } private function popNode(): void { \array_pop($this->nodeStack); } } tree/src/Builder/NodeBuilderInterface.php 0000644 00000002750 15007532571 0014417 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Builder; use Tree\Node\NodeInterface; /** * Interface that allows a fluent tree building. * * @author Nicolò Martini <nicmartnic@gmail.com> */ interface NodeBuilderInterface { /** * Set the node the builder will manage. */ public function setNode(NodeInterface $node): static; /** * Get the node the builder manages. * * @throws \LogicException */ public function getNode(): NodeInterface; /** * Set the value of the underlaying node. */ public function value(mixed $value): static; /** * Add a leaf to the node. */ public function leaf(mixed $value = null): static; /** * Add several leafs to the node. */ public function leafs(mixed ...$values): static; /** * Add a child to the node enter in its scope. */ public function tree(mixed $value = null): static; /** * Goes up to the parent node context. */ public function end(): ?static; /** * Return a node instance set with the given value. Implementation can follow their own logic * in choosing the NodeInterface implmentation taking into account the value. */ public function nodeInstanceByValue(mixed $value = null): NodeInterface; } tree/src/Visitor/YieldVisitor.php 0000644 00000001272 15007532571 0013077 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Visitor; use Tree\Node\NodeInterface; class YieldVisitor implements Visitor { /** * @return array<int, NodeInterface> */ public function visit(NodeInterface $node): mixed { if ($node->isLeaf()) { return [$node]; } $yield = []; foreach ($node->getChildren() as $child) { $yield = \array_merge($yield, $child->accept($this)); } return $yield; } } tree/src/Visitor/PostOrderVisitor.php 0000644 00000001310 15007532571 0013743 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Visitor; use Tree\Node\NodeInterface; class PostOrderVisitor implements Visitor { /** * @return array<int, NodeInterface> $node */ public function visit(NodeInterface $node): mixed { $nodes = []; foreach ($node->getChildren() as $child) { $nodes = \array_merge( $nodes, $child->accept($this), ); } $nodes[] = $node; return $nodes; } } tree/src/Visitor/Visitor.php 0000644 00000000720 15007532571 0012105 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Visitor; use Tree\Node\NodeInterface; /** * Visitor interface for Nodes. * * @author Nicolò Martini <nicmartnic@gmail.com> */ interface Visitor { public function visit(NodeInterface $node): mixed; } tree/src/Visitor/PreOrderVisitor.php 0000644 00000001310 15007532571 0013544 0 ustar 00 <?php /** * Copyright (c) 2013-2023 Nicolò Martini * * For the full copyright and license information, please view * the LICENSE.md file that was distributed with this source code. * * @see https://github.com/nicmart/Tree */ namespace Tree\Visitor; use Tree\Node\NodeInterface; class PreOrderVisitor implements Visitor { /** * @return array<int, NodeInterface> $node */ public function visit(NodeInterface $node): array { $nodes = [ $node, ]; foreach ($node->getChildren() as $child) { $nodes = \array_merge( $nodes, $child->accept($this), ); } return $nodes; } }
Free Space : Byte