From 038764653733a54b40572d8a112c2e35f5b48061 Mon Sep 17 00:00:00 2001 From: Nikolaos Dimopoulos Date: Mon, 29 Jul 2024 17:27:23 -0500 Subject: [PATCH 01/11] [#49] - fixtures for container --- .../_data/fixtures/Container/TestBadHint.php | 22 ++++++++ .../fixtures/Container/TestInterface.php | 18 +++++++ .../_data/fixtures/Container/TestProvider.php | 32 ++++++++++++ tests/_data/fixtures/Container/TestTyped.php | 24 +++++++++ .../fixtures/Container/TestUnionParameter.php | 24 +++++++++ .../TestWithConstructorDefaultParameters.php | 26 ++++++++++ .../TestWithDefaultConstructorParameters.php | 26 ++++++++++ .../fixtures/Container/TestWithInterface.php | 50 +++++++++++++++++++ .../TestWithInterfaceGrandParent.php | 18 +++++++ .../Container/TestWithInterfaceParent.php | 18 +++++++ .../TestWithOptionalConstructorArguments.php | 29 +++++++++++ tests/_data/fixtures/Container/functions.php | 19 +++++++ .../_data/fixtures/Container/includeFile.php | 1 + 13 files changed, 307 insertions(+) create mode 100644 tests/_data/fixtures/Container/TestBadHint.php create mode 100644 tests/_data/fixtures/Container/TestInterface.php create mode 100644 tests/_data/fixtures/Container/TestProvider.php create mode 100644 tests/_data/fixtures/Container/TestTyped.php create mode 100644 tests/_data/fixtures/Container/TestUnionParameter.php create mode 100644 tests/_data/fixtures/Container/TestWithConstructorDefaultParameters.php create mode 100644 tests/_data/fixtures/Container/TestWithDefaultConstructorParameters.php create mode 100644 tests/_data/fixtures/Container/TestWithInterface.php create mode 100644 tests/_data/fixtures/Container/TestWithInterfaceGrandParent.php create mode 100644 tests/_data/fixtures/Container/TestWithInterfaceParent.php create mode 100644 tests/_data/fixtures/Container/TestWithOptionalConstructorArguments.php create mode 100644 tests/_data/fixtures/Container/functions.php create mode 100644 tests/_data/fixtures/Container/includeFile.php diff --git a/tests/_data/fixtures/Container/TestBadHint.php b/tests/_data/fixtures/Container/TestBadHint.php new file mode 100644 index 000000000..c024c5b72 --- /dev/null +++ b/tests/_data/fixtures/Container/TestBadHint.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +namespace Phalcon\Tests\Fixtures\Container; + +class TestBadHint +{ + public function __construct( + public Nonesuch $one, + ) { + } +} diff --git a/tests/_data/fixtures/Container/TestInterface.php b/tests/_data/fixtures/Container/TestInterface.php new file mode 100644 index 000000000..4e016c2bc --- /dev/null +++ b/tests/_data/fixtures/Container/TestInterface.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +namespace Phalcon\Tests\Fixtures\Container; + +interface TestInterface +{ +} diff --git a/tests/_data/fixtures/Container/TestProvider.php b/tests/_data/fixtures/Container/TestProvider.php new file mode 100644 index 000000000..3292a129b --- /dev/null +++ b/tests/_data/fixtures/Container/TestProvider.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +namespace Phalcon\Tests\Fixtures\Container; + +use Phalcon\Container\Container; +use Phalcon\Container\Definitions\Definitions; +use Phalcon\Container\Interfaces\ProviderInterface; + +class TestProvider implements ProviderInterface +{ + public function provide(Definitions $definitions) : void + { + $definitions->{TestWithInterface::class}->argument(0, 'ten'); + $definitions->oneval = 'oneval'; + $definitions->lazyval = $definitions->call( + function (Container $container) { + return 'lazyval'; + } + ); + } +} diff --git a/tests/_data/fixtures/Container/TestTyped.php b/tests/_data/fixtures/Container/TestTyped.php new file mode 100644 index 000000000..bfe9d3df8 --- /dev/null +++ b/tests/_data/fixtures/Container/TestTyped.php @@ -0,0 +1,24 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +namespace Phalcon\Tests\Fixtures\Container; + +use stdClass; + +class TestTyped +{ + public function __construct( + public stdClass $one + ) { + } +} diff --git a/tests/_data/fixtures/Container/TestUnionParameter.php b/tests/_data/fixtures/Container/TestUnionParameter.php new file mode 100644 index 000000000..37d01f7d0 --- /dev/null +++ b/tests/_data/fixtures/Container/TestUnionParameter.php @@ -0,0 +1,24 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +namespace Phalcon\Tests\Fixtures\Container; + +use stdClass; + +class TestUnionParameter +{ + public function __construct( + public array|stdClass $one + ) { + } +} diff --git a/tests/_data/fixtures/Container/TestWithConstructorDefaultParameters.php b/tests/_data/fixtures/Container/TestWithConstructorDefaultParameters.php new file mode 100644 index 000000000..bd2a48a7e --- /dev/null +++ b/tests/_data/fixtures/Container/TestWithConstructorDefaultParameters.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +namespace Phalcon\Tests\Fixtures\Container; + +use stdClass; + +class TestWithConstructorDefaultParameters +{ + public function __construct( + public stdClass $one, + public string $two, + public string $three = 'three-default' + ) { + } +} diff --git a/tests/_data/fixtures/Container/TestWithDefaultConstructorParameters.php b/tests/_data/fixtures/Container/TestWithDefaultConstructorParameters.php new file mode 100644 index 000000000..754979243 --- /dev/null +++ b/tests/_data/fixtures/Container/TestWithDefaultConstructorParameters.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +namespace Phalcon\Tests\Fixtures\Container; + +use stdClass; + +class TestWithDefaultConstructorParameters +{ + public function __construct( + public stdClass $first, + public TestWithInterface $second, + public string $third = 'defaultValue' + ) { + } +} diff --git a/tests/_data/fixtures/Container/TestWithInterface.php b/tests/_data/fixtures/Container/TestWithInterface.php new file mode 100644 index 000000000..4cd0eedaf --- /dev/null +++ b/tests/_data/fixtures/Container/TestWithInterface.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +namespace Phalcon\Tests\Fixtures\Container; + +class TestWithInterface implements TestInterface +{ + /** + * @param string $one + * @param string $two + */ + public function __construct( + public string $one, + public string $two = 'two' + ) { + } + + /** + * @param string $suffix + * + * @return void + */ + public function append(string $suffix) : void + { + $this->one .= $suffix; + } + + /** + * @return string + */ + public function getValue() : string + { + return $this->two; + } + + public static function staticMethod(string $word) : string + { + return $word; + } +} diff --git a/tests/_data/fixtures/Container/TestWithInterfaceGrandParent.php b/tests/_data/fixtures/Container/TestWithInterfaceGrandParent.php new file mode 100644 index 000000000..6daabb76d --- /dev/null +++ b/tests/_data/fixtures/Container/TestWithInterfaceGrandParent.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +namespace Phalcon\Tests\Fixtures\Container; + +class TestWithInterfaceGrandParent extends TestWithInterfaceParent +{ +} diff --git a/tests/_data/fixtures/Container/TestWithInterfaceParent.php b/tests/_data/fixtures/Container/TestWithInterfaceParent.php new file mode 100644 index 000000000..af2e2f76a --- /dev/null +++ b/tests/_data/fixtures/Container/TestWithInterfaceParent.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +namespace Phalcon\Tests\Fixtures\Container; + +class TestWithInterfaceParent extends TestWithInterface +{ +} diff --git a/tests/_data/fixtures/Container/TestWithOptionalConstructorArguments.php b/tests/_data/fixtures/Container/TestWithOptionalConstructorArguments.php new file mode 100644 index 000000000..9616c8bd1 --- /dev/null +++ b/tests/_data/fixtures/Container/TestWithOptionalConstructorArguments.php @@ -0,0 +1,29 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +namespace Phalcon\Tests\Fixtures\Container; + +use stdClass; + +class TestWithOptionalConstructorArguments +{ + public array $three; + + public function __construct( + public string $one, + public ?string $two = null, + string ...$three + ) { + $this->three = $three; + } +} diff --git a/tests/_data/fixtures/Container/functions.php b/tests/_data/fixtures/Container/functions.php new file mode 100644 index 000000000..26d476b65 --- /dev/null +++ b/tests/_data/fixtures/Container/functions.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +namespace Phalcon\Tests\Fixtures\Container; + +function test(string $word) : string +{ + return $word; +} diff --git a/tests/_data/fixtures/Container/includeFile.php b/tests/_data/fixtures/Container/includeFile.php new file mode 100644 index 000000000..0800f1a72 --- /dev/null +++ b/tests/_data/fixtures/Container/includeFile.php @@ -0,0 +1 @@ + Date: Mon, 29 Jul 2024 18:07:29 -0500 Subject: [PATCH 02/11] [#49] - adding definitions --- .../Definitions/AbstractDefinition.php | 111 ++++ src/Container/Definitions/ClassDefinition.php | 554 ++++++++++++++++++ src/Container/Definitions/Definitions.php | 243 ++++++++ .../Definitions/InterfaceDefinition.php | 79 +++ 4 files changed, 987 insertions(+) create mode 100644 src/Container/Definitions/AbstractDefinition.php create mode 100644 src/Container/Definitions/ClassDefinition.php create mode 100644 src/Container/Definitions/Definitions.php create mode 100644 src/Container/Definitions/InterfaceDefinition.php diff --git a/src/Container/Definitions/AbstractDefinition.php b/src/Container/Definitions/AbstractDefinition.php new file mode 100644 index 000000000..d56912c36 --- /dev/null +++ b/src/Container/Definitions/AbstractDefinition.php @@ -0,0 +1,111 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Definitions; + +use Phalcon\Container\Container; +use Phalcon\Container\Exception\NotInstantiated; +use Phalcon\Container\Lazy\AbstractLazy; +use Throwable; + +abstract class AbstractDefinition extends AbstractLazy +{ + /** + * @var string|null + */ + protected ?string $class = null; + /** + * @var mixed|null + */ + protected mixed /* callable */ + $factory = null; + /** + * @var string + */ + protected string $id; + /** + * @var bool + */ + protected bool $isInstantiable = false; + + /** + * @param Container $container + * + * @return mixed + * @throws NotInstantiated + */ + public function __invoke(Container $container): mixed + { + return $this->new($container); + } + + /** + * @param callable $factory + * + * @return $this + */ + public function factory(callable $factory): static + { + $this->factory = $factory; + + return $this; + } + + /** + * @param Container $container + * + * @return bool + */ + public function isInstantiable(Container $container): bool + { + if ($this->factory !== null) { + return true; + } + + if ($this->class !== null) { + return $container->has($this->class); + } + + return $this->isInstantiable; + } + + /** + * @param Container $container + * + * @return object + * @throws NotInstantiated + */ + public function new(Container $container): object + { + try { + return $this->instantiate($container); + } catch (Throwable $ex) { + throw new NotInstantiated( + 'Could not instantiate ' . $this->id, + previous: $ex + ); + } + } + + /** + * @param Container $container + * + * @return object + */ + abstract protected function instantiate(Container $container): object; +} diff --git a/src/Container/Definitions/ClassDefinition.php b/src/Container/Definitions/ClassDefinition.php new file mode 100644 index 000000000..abd640186 --- /dev/null +++ b/src/Container/Definitions/ClassDefinition.php @@ -0,0 +1,554 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Definitions; + +use Phalcon\Container\Container; +use Phalcon\Container\Exception; +use Phalcon\Container\Exception\NotAllowed; +use Phalcon\Container\Exception\NotDefined; +use Phalcon\Container\Exception\NotFound; +use Phalcon\Container\Lazy\Get; +use ReflectionClass; +use ReflectionException; +use ReflectionNamedType; +use ReflectionParameter; +use ReflectionUnionType; + +use function array_key_exists; +use function array_pop; +use function class_exists; +use function end; +use function get_parent_class; +use function interface_exists; +use function is_array; + +class ClassDefinition extends AbstractDefinition +{ + /** + * @var array + */ + protected array $arguments = []; + + /** + * @var array + */ + protected array $collatedArguments; + + /** + * @var array + */ + protected array $extenders = []; + + /** + * @var ClassDefinition|null + */ + protected ?ClassDefinition $inherit = null; + + /** + * @var array + */ + protected array $parameterNames = []; + + /** + * @var array|ReflectionParameter[] + */ + protected array $parameters = []; + + /** + * @param string $id + * + * @throws NotFound + */ + public function __construct( + protected string $id + ) { + if (!class_exists($this->id)) { + throw new NotFound("Class '$this->id' not found."); + } + + $reflection = new ReflectionClass($this->id); + $this->isInstantiable = $reflection->isInstantiable(); + $constructor = $reflection->getConstructor(); + + if ($constructor === null) { + return; + } + + $this->parameters = $constructor->getParameters(); + + foreach ($this->parameters as $i => $parameter) { + $this->parameterNames[$parameter->getName()] = $i; + } + } + + /** + * @param int|string $parameter + * @param mixed $argument + * + * @return $this + */ + public function argument(int | string $parameter, mixed $argument): static + { + $position = $this->parameterNames[$parameter] ?? $parameter; + $this->arguments[$position] = $argument; + + return $this; + } + + /** + * @param array $arguments + * + * @return $this + */ + public function arguments(array $arguments): static + { + $this->arguments = []; + + foreach ($arguments as $parameter => $argument) { + $this->argument($parameter, $argument); + } + + return $this; + } + + /** + * @param string|null $class + * + * @return $this + * @throws NotFound + */ + public function class(?string $class): static + { + if ($class === $this->id) { + $class = null; + } + + if ($class === null || class_exists($class)) { + $this->class = $class; + + return $this; + } + + throw new NotFound("Class '$class' not found."); + } + + public function decorate(callable $callable): static + { + $this->extenders[] = [__FUNCTION__, $callable]; + + return $this; + } + + /** + * @param int|string $parameter + * + * @return mixed + */ + public function getArgument(int | string $parameter): mixed + { + $position = $this->parameterNames[$parameter] ?? $parameter; + + return $this->arguments[$position]; + } + + /** + * @param int|string $parameter + * + * @return bool + */ + public function hasArgument(int | string $parameter): bool + { + $position = $this->parameterNames[$parameter] ?? $parameter; + + return array_key_exists($position, $this->arguments); + } + + /** + * @param Definitions|null $definition + * + * @return $this + */ + public function inherit(?Definitions $definition): static + { + $parent = get_parent_class($this->id); + + if ($definition === null || $parent === false) { + $this->inherit = null; + return $this; + } + + $this->inherit = $definition->$parent; + + return $this; + } + + /** + * @param string $method + * @param mixed ...$arguments + * + * @return $this + */ + public function method(string $method, mixed ...$arguments): static + { + $this->extenders[] = [__FUNCTION__, [$method, $arguments]]; + + return $this; + } + + /** + * @param callable $callable + * + * @return $this + */ + public function modify(callable $callable): static + { + $this->extenders[] = [__FUNCTION__, $callable]; + + return $this; + } + + /** + * @param Container $container + * + * @return object + * @throws Exception\NotInstantiated + */ + public function new(Container $container): object + { + $object = parent::new($container); + + return $this->applyExtenders($container, $object); + } + + /** + * @param string $name + * @param mixed $value + * + * @return $this + */ + public function property(string $name, mixed $value): static + { + $this->extenders[] = [__FUNCTION__, [$name, $value]]; + + return $this; + } + + /** + * @param Container $container + * @param object $object + * @param array $extender + * + * @return object + */ + protected function applyExtender( + Container $container, + object $object, + array $extender + ): object { + [$type, $spec] = $extender; + + switch ($type) { + case 'decorate': + $object = $spec($container, $object); + break; + + case 'method': + [$method, $arguments] = $spec; + $object->$method(...$arguments); + break; + + case 'modify': + $spec($container, $object); + break; + + case 'property': + [$prop, $value] = $spec; + $object->$prop = $this->resolveArgument($container, $value); + break; + } + + return $object; + } + + /** + * @param Container $container + * @param object $object + * + * @return object|mixed + */ + protected function applyExtenders(Container $container, object $object): object + { + foreach ($this->extenders as $extender) { + $object = $this->applyExtender($container, $object, $extender); + } + + return $object; + } + + /** + * @param int $position + * @param ReflectionParameter $parameter + * + * @return NotDefined + */ + protected function argumentNotDefined( + int $position, + ReflectionParameter $parameter + ): NotDefined { + $name = $parameter->getName(); + $type = $parameter->getType(); + + if ($type instanceof ReflectionUnionType) { + return new NotDefined( + "Union typed argument $position (\${$name}) " + . "for class definition '{$this->id}' is not defined." + ); + } + + $hint = $type->getName(); + + if ( + $type->isBuiltin() + || class_exists($hint) + || interface_exists($hint) + ) { + return new NotDefined( + 'Required argument ' . $position + . ' ($' . $name . ') for class definition \'' + . $this->id . '\' is not defined.' + ); + } + + return new NotDefined( + 'Required argument ' . $position + . ' ($' . $name . ') for class definition \'' + . $this->id . '\' is typehinted as ' + . $hint . ', which does not exist.' + ); + } + + /** + * @param Container $container + * + * @return void + */ + protected function collateArguments(Container $container): void + { + $this->collatedArguments = []; + + $inherited = ($this->inherit === null) + ? [] + : $this->inherit->getCollatedArguments($container); + + foreach ($this->parameters as $position => $parameter) { + $this->collatePositionalArgument($position, $parameter) + || $this->collateTypedArgument($position, $parameter, $container) + || $this->collateInheritedArgument($position, $parameter, $inherited) + || $this->collateOptionalArgument($position, $parameter); + } + } + + /** + * @param int $position + * @param ReflectionParameter $parameter + * @param array $inherited + * + * @return bool + */ + protected function collateInheritedArgument( + int $position, + ReflectionParameter $parameter, + array $inherited + ): bool { + if (array_key_exists($position, $inherited)) { + $this->collatedArguments[$position] = $inherited[$position]; + return true; + } + + return false; + } + + /** + * @param int $position + * @param ReflectionParameter $parameter + * + * @return bool + * @throws ReflectionException + */ + protected function collateOptionalArgument( + int $position, + ReflectionParameter $parameter + ): bool { + if (!$parameter->isOptional()) { + return false; + } + + $value = $parameter->isVariadic() + ? [] + : $parameter->getDefaultValue(); + + $this->collatedArguments[$position] = $value; + + return true; + } + + /** + * @param int $position + * @param ReflectionParameter $parameter + * + * @return bool + */ + protected function collatePositionalArgument( + int $position, + ReflectionParameter $parameter + ): bool { + if (!array_key_exists($position, $this->arguments)) { + return false; + } + + $this->collatedArguments[$position] = $this->arguments[$position]; + + return true; + } + + /** + * @param int $position + * @param ReflectionParameter $parameter + * @param Container $container + * + * @return bool + */ + protected function collateTypedArgument( + int $position, + ReflectionParameter $parameter, + Container $container + ): bool { + $type = $parameter->getType(); + + if (!$type instanceof ReflectionNamedType) { + return false; + } + + $type = $type->getName(); + + // explicit + if (array_key_exists($type, $this->arguments)) { + $this->collatedArguments[$position] = $this->arguments[$type]; + return true; + } + + // implicit + if ($container->has($type)) { + $this->collatedArguments[$position] = new Get($type); + return true; + } + + return false; + } + + /** + * @param array $arguments + * + * @return void + * @throws NotAllowed + */ + protected function expandVariadic(array &$arguments): void + { + $lastParameter = end($this->parameters); + + if ($lastParameter === false) { + return; + } + + if (!$lastParameter->isVariadic()) { + return; + } + + $lastArgument = end($arguments); + + if (!is_array($lastArgument)) { + $type = gettype($lastArgument); + $position = $lastParameter->getPosition(); + $name = $lastParameter->getName(); + + throw new NotAllowed( + "Variadic argument {$position} (\${$name}) " + . "for class definition '{$this->id}' is defined as {$type}, " + . "but should be an array of variadic values." + ); + } + + $values = array_pop($arguments); + + foreach ($values as $value) { + $arguments[] = $value; + } + } + + /** + * @param Container $container + * + * @return array + */ + protected function getCollatedArguments(Container $container): array + { + if (!isset($this->collatedArguments)) { + $this->collateArguments($container); + } + + return $this->collatedArguments; + } + + /** + * @param Container $container + * + * @return object|mixed + * @throws NotAllowed + * @throws NotDefined + */ + protected function instantiate(Container $container): object + { + if ($this->factory !== null) { + $factory = $this->resolveArgument($container, $this->factory); + return $factory($container); + } + + if ($this->class !== null) { + return $container->new($this->class); + } + + $arguments = $this->getCollatedArguments($container); + + foreach ($this->parameters as $position => $parameter) { + if (!array_key_exists($position, $arguments)) { + throw $this->argumentNotDefined($position, $parameter); + } + + $arguments[$position] = $this->resolveArgument( + $container, + $arguments[$position] + ); + } + + $this->expandVariadic($arguments); + $class = $this->id; + + return new $class(...$arguments); + } +} diff --git a/src/Container/Definitions/Definitions.php b/src/Container/Definitions/Definitions.php new file mode 100644 index 000000000..034d7a637 --- /dev/null +++ b/src/Container/Definitions/Definitions.php @@ -0,0 +1,243 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Definitions; + +use Phalcon\Container\Exception\NotFound; +use Phalcon\Container\Lazy\AbstractLazy; +use Phalcon\Container\Lazy\ArrayValues; +use Phalcon\Container\Lazy\Call; +use Phalcon\Container\Lazy\CallableGet; +use Phalcon\Container\Lazy\CallableNew; +use Phalcon\Container\Lazy\CsEnv; +use Phalcon\Container\Lazy\Env; +use Phalcon\Container\Lazy\FunctionCall; +use Phalcon\Container\Lazy\Get; +use Phalcon\Container\Lazy\GetCall; +use Phalcon\Container\Lazy\IncludeFile; +use Phalcon\Container\Lazy\NewCall; +use Phalcon\Container\Lazy\NewInstance; +use Phalcon\Container\Lazy\RequireFile; +use Phalcon\Container\Lazy\StaticCall; +use stdClass; + +use function class_exists; +use function interface_exists; + +class Definitions extends stdClass +{ + /** + * @param string $id + * + * @return mixed + * @throws NotFound + */ + public function __get(string $id): mixed + { + $definition = $this->newDefinition($id); + + if ($definition === null) { + throw new NotFound("Value definition '$id' not found."); + } + + $this->$id = $definition; + + return $this->$id; + } + + /** + * @param array $values + * + * @return ArrayValues + */ + public function array(array $values = []): ArrayValues + { + return new ArrayValues($values); + } + + /** + * @param callable $callable + * + * @return Call + */ + public function call(callable $callable): Call + { + return new Call($callable); + } + + /** + * @param string|AbstractLazy $id + * + * @return CallableGet + */ + public function callableGet(string | AbstractLazy $id): CallableGet + { + return new CallableGet($id); + } + + /** + * @param string|AbstractLazy $id + * + * @return CallableNew + */ + public function callableNew(string | AbstractLazy $id): CallableNew + { + return new CallableNew($id); + } + + /** + * @param string $name + * @param string|null $type + * + * @return CsEnv + */ + public function csEnv(string $name, string $type = null): CsEnv + { + return new CsEnv($name, $type); + } + + /** + * @param string $name + * @param string|null $type + * + * @return Env + */ + public function env(string $name, string $type = null): Env + { + return new Env($name, $type); + } + + /** + * @param string $function + * @param array $arguments + * + * @return FunctionCall + */ + public function functionCall( + string $function, + array $arguments + ): FunctionCall { + return new FunctionCall($function, $arguments); + } + + /** + * @param string|AbstractLazy $id + * + * @return Get + */ + public function get(string | AbstractLazy $id): Get + { + return new Get($id); + } + + /** + * @param string|AbstractLazy $class + * @param string $method + * @param array $arguments + * + * @return GetCall + */ + public function getCall( + string | AbstractLazy $class, + string $method, + array $arguments = [] + ): GetCall { + return new GetCall($class, $method, $arguments); + } + + /** + * @param string|AbstractLazy $file + * + * @return IncludeFile + */ + public function include( + string | AbstractLazy $file + ): IncludeFile { + return new IncludeFile($file); + } + + /** + * @param string|AbstractLazy $id + * + * @return NewInstance + */ + public function new(string | AbstractLazy $id): NewInstance + { + return new NewInstance($id); + } + + /** + * @param string|AbstractLazy $class + * @param string $method + * @param array $arguments + * + * @return NewCall + */ + public function newCall( + string | AbstractLazy $class, + string $method, + array $arguments = [] + ): NewCall { + return new NewCall($class, $method, $arguments); + } + + /** + * @param string $type + * + * @return AbstractDefinition|null + * @throws NotFound + */ + public function newDefinition(string $type): ?AbstractDefinition + { + if (interface_exists($type)) { + return new InterfaceDefinition($type); + } + + if (class_exists($type)) { + return (new ClassDefinition($type))->inherit($this); + } + + return null; + } + + /** + * @param string|AbstractLazy $file + * + * @return RequireFile + */ + public function require( + string | AbstractLazy $file + ): RequireFile { + return new RequireFile($file); + } + + /** + * @param string|AbstractLazy $class + * @param string $method + * @param array $arguments + * + * @return StaticCall + */ + public function staticCall( + string | AbstractLazy $class, + string $method, + array $arguments + ): StaticCall { + return new StaticCall($class, $method, $arguments); + } +} diff --git a/src/Container/Definitions/InterfaceDefinition.php b/src/Container/Definitions/InterfaceDefinition.php new file mode 100644 index 000000000..a18681ba4 --- /dev/null +++ b/src/Container/Definitions/InterfaceDefinition.php @@ -0,0 +1,79 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Definitions; + +use Phalcon\Container\Container; +use Phalcon\Container\Exception\NotDefined; +use Phalcon\Container\Exception\NotFound; + +use function class_exists; +use function interface_exists; + +class InterfaceDefinition extends AbstractDefinition +{ + /** + * @param string $id + * + * @throws NotFound + */ + public function __construct(protected string $id) + { + if (!interface_exists($id)) { + throw new NotFound("Interface '{$id}' not found."); + } + } + + /** + * @param string $class + * + * @return $this + * @throws NotFound + */ + public function class(string $class): static + { + if (!class_exists($class)) { + throw new NotFound("Class '{$class}' not found."); + } + + $this->class = $class; + return $this; + } + + /** + * @param Container $container + * + * @return object|mixed + * @throws NotDefined + */ + protected function instantiate(Container $container): object + { + if ($this->factory !== null) { + $factory = $this->resolveArgument($container, $this->factory); + return $factory($container); + } + + if ($this->class !== null) { + return $container->new($this->class); + } + + throw new NotDefined( + "Class/factory for interface definition '{$this->id}' not set." + ); + } +} From 16de346ff35eeedda61712c6d6bb80f6c5cfa564 Mon Sep 17 00:00:00 2001 From: Nikolaos Dimopoulos Date: Mon, 29 Jul 2024 18:07:38 -0500 Subject: [PATCH 03/11] [#49] - adding exceptions --- src/Container/Exception/Exception.php | 25 +++++++++++++++++++++ src/Container/Exception/NotAllowed.php | 23 +++++++++++++++++++ src/Container/Exception/NotDefined.php | 23 +++++++++++++++++++ src/Container/Exception/NotFound.php | 25 +++++++++++++++++++++ src/Container/Exception/NotInstantiated.php | 23 +++++++++++++++++++ 5 files changed, 119 insertions(+) create mode 100644 src/Container/Exception/Exception.php create mode 100644 src/Container/Exception/NotAllowed.php create mode 100644 src/Container/Exception/NotDefined.php create mode 100644 src/Container/Exception/NotFound.php create mode 100644 src/Container/Exception/NotInstantiated.php diff --git a/src/Container/Exception/Exception.php b/src/Container/Exception/Exception.php new file mode 100644 index 000000000..ba6d5e191 --- /dev/null +++ b/src/Container/Exception/Exception.php @@ -0,0 +1,25 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Exception; + +use Psr\Container\ContainerExceptionInterface; + +abstract class Exception extends \Exception implements ContainerExceptionInterface +{ +} diff --git a/src/Container/Exception/NotAllowed.php b/src/Container/Exception/NotAllowed.php new file mode 100644 index 000000000..bd81b53bb --- /dev/null +++ b/src/Container/Exception/NotAllowed.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Exception; + +class NotAllowed extends Exception +{ +} diff --git a/src/Container/Exception/NotDefined.php b/src/Container/Exception/NotDefined.php new file mode 100644 index 000000000..5ea9f7019 --- /dev/null +++ b/src/Container/Exception/NotDefined.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Exception; + +class NotDefined extends Exception +{ +} diff --git a/src/Container/Exception/NotFound.php b/src/Container/Exception/NotFound.php new file mode 100644 index 000000000..761f5ab9d --- /dev/null +++ b/src/Container/Exception/NotFound.php @@ -0,0 +1,25 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Exception; + +use Psr\Container\NotFoundExceptionInterface; + +class NotFound extends Exception implements NotFoundExceptionInterface +{ +} diff --git a/src/Container/Exception/NotInstantiated.php b/src/Container/Exception/NotInstantiated.php new file mode 100644 index 000000000..ff2df578e --- /dev/null +++ b/src/Container/Exception/NotInstantiated.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Exception; + +class NotInstantiated extends Exception +{ +} From ec4fc88f4b90cbeea23c95ad30c3a986e039562e Mon Sep 17 00:00:00 2001 From: Nikolaos Dimopoulos Date: Mon, 29 Jul 2024 18:07:52 -0500 Subject: [PATCH 04/11] [#49] - interfaces --- .../Interfaces/ProviderInterface.php | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/Container/Interfaces/ProviderInterface.php diff --git a/src/Container/Interfaces/ProviderInterface.php b/src/Container/Interfaces/ProviderInterface.php new file mode 100644 index 000000000..a53856b34 --- /dev/null +++ b/src/Container/Interfaces/ProviderInterface.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Interfaces; + +use Phalcon\Container\Definitions\Definitions; + +interface ProviderInterface +{ + /** + * @param Definitions $definitions + * + * @return void + */ + public function provide(Definitions $definitions): void; +} From b2c2f6e598adb91e0432479f227be5095dff1b14 Mon Sep 17 00:00:00 2001 From: Nikolaos Dimopoulos Date: Mon, 29 Jul 2024 18:08:17 -0500 Subject: [PATCH 05/11] [#49] - adding traits --- src/Container/Traits/ArgumentsTrait.php | 61 +++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/Container/Traits/ArgumentsTrait.php diff --git a/src/Container/Traits/ArgumentsTrait.php b/src/Container/Traits/ArgumentsTrait.php new file mode 100644 index 000000000..0f3895c64 --- /dev/null +++ b/src/Container/Traits/ArgumentsTrait.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Traits; + +use Phalcon\Container\Container; +use Phalcon\Container\Lazy\AbstractLazy; + +trait ArgumentsTrait +{ + /** + * @param Container $container + * @param mixed $argument + * + * @return mixed + */ + public function resolveArgument( + Container $container, + mixed $argument + ): mixed { + if ($argument instanceof AbstractLazy) { + return $argument($container); + } + + return $argument; + } + + /** + * @param Container $container + * @param array $arguments + * + * @return array + */ + public function resolveArguments( + Container $container, + array $arguments + ): array { + $return = []; + + foreach ($arguments as $key => $value) { + $return[$key] = $this->resolveArgument($container, $value); + } + + return $return; + } +} From 03f5dad771d4a485b11f579869c674e5069aefe7 Mon Sep 17 00:00:00 2001 From: Nikolaos Dimopoulos Date: Mon, 29 Jul 2024 18:08:47 -0500 Subject: [PATCH 06/11] [#49] - lazy implementations for objects --- src/Container/Lazy/AbstractLazy.php | 34 ++++++ src/Container/Lazy/ArrayValues.php | 157 ++++++++++++++++++++++++++++ src/Container/Lazy/Call.php | 42 ++++++++ src/Container/Lazy/CallableGet.php | 46 ++++++++ src/Container/Lazy/CallableNew.php | 46 ++++++++ src/Container/Lazy/CsEnv.php | 58 ++++++++++ src/Container/Lazy/Env.php | 73 +++++++++++++ src/Container/Lazy/FunctionCall.php | 48 +++++++++ src/Container/Lazy/Get.php | 44 ++++++++ src/Container/Lazy/GetCall.php | 52 +++++++++ src/Container/Lazy/IncludeFile.php | 44 ++++++++ src/Container/Lazy/NewCall.php | 50 +++++++++ src/Container/Lazy/NewInstance.php | 44 ++++++++ src/Container/Lazy/RequireFile.php | 44 ++++++++ src/Container/Lazy/StaticCall.php | 51 +++++++++ 15 files changed, 833 insertions(+) create mode 100644 src/Container/Lazy/AbstractLazy.php create mode 100644 src/Container/Lazy/ArrayValues.php create mode 100644 src/Container/Lazy/Call.php create mode 100644 src/Container/Lazy/CallableGet.php create mode 100644 src/Container/Lazy/CallableNew.php create mode 100644 src/Container/Lazy/CsEnv.php create mode 100644 src/Container/Lazy/Env.php create mode 100644 src/Container/Lazy/FunctionCall.php create mode 100644 src/Container/Lazy/Get.php create mode 100644 src/Container/Lazy/GetCall.php create mode 100644 src/Container/Lazy/IncludeFile.php create mode 100644 src/Container/Lazy/NewCall.php create mode 100644 src/Container/Lazy/NewInstance.php create mode 100644 src/Container/Lazy/RequireFile.php create mode 100644 src/Container/Lazy/StaticCall.php diff --git a/src/Container/Lazy/AbstractLazy.php b/src/Container/Lazy/AbstractLazy.php new file mode 100644 index 000000000..2bd472421 --- /dev/null +++ b/src/Container/Lazy/AbstractLazy.php @@ -0,0 +1,34 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; +use Phalcon\Container\Traits\ArgumentsTrait; + +abstract class AbstractLazy +{ + use ArgumentsTrait; + + /** + * @param Container $container + * + * @return mixed + */ + abstract public function __invoke(Container $container): mixed; +} diff --git a/src/Container/Lazy/ArrayValues.php b/src/Container/Lazy/ArrayValues.php new file mode 100644 index 000000000..8d7ac9fee --- /dev/null +++ b/src/Container/Lazy/ArrayValues.php @@ -0,0 +1,157 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use ArrayAccess; +use ArrayIterator; +use Countable; +use IteratorAggregate; +use Phalcon\Container\Container; + +class ArrayValues extends AbstractLazy implements ArrayAccess, Countable, IteratorAggregate +{ + /** + * @param array $values + */ + public function __construct( + protected array $values = [] + ) { + } + + /** + * @param Container $container + * + * @return mixed + */ + public function __invoke(Container $container): mixed + { + return $this->resolveValues($container, $this->values); + } + + /** + * @return int + */ + public function count(): int + { + return count($this->values); + } + + /** + * @return ArrayIterator + */ + public function getIterator(): ArrayIterator + { + return new ArrayIterator($this->values); + } + + /** + * @param iterable $values + * + * @return void + */ + public function merge(iterable $values): void + { + foreach ($values as $key => $value) { + if (is_int($key)) { + $this->values[] = $value; + } else { + $this->values[$key] = $value; + } + } + } + + /** + * @param int|string $offset + */ + public function offsetExists(mixed $offset): bool + { + return array_key_exists($offset, $this->values); + } + + /** + * @param mixed $offset + * + * @return mixed + */ + public function offsetGet(mixed $offset): mixed + { + return $this->values[$offset]; + } + + /** + * @param mixed $offset + * @param mixed $value + * + * @return void + */ + public function offsetSet(mixed $offset, mixed $value): void + { + if ($offset === null) { + $this->values[] = $value; + } else { + $this->values[$offset] = $value; + } + } + + /** + * @param mixed $offset + * + * @return void + */ + public function offsetUnset(mixed $offset): void + { + unset($this->values[$offset]); + } + + /** + * @param Container $container + * @param mixed $value + * + * @return mixed + */ + protected function resolveValue(Container $container, mixed $value): mixed + { + if ($value instanceof AbstractLazy) { + return $value($container); + } + + if (is_array($value)) { + return $this->resolveValues($container, $value); + } + + return $value; + } + + /** + * @param Container $container + * @param array $values + * + * @return array + */ + protected function resolveValues(Container $container, array $values): array + { + $return = []; + + foreach ($values as $key => $value) { + $return[$key] = $this->resolveValue($container, $value); + } + + return $return; + } +} diff --git a/src/Container/Lazy/Call.php b/src/Container/Lazy/Call.php new file mode 100644 index 000000000..b6f9f8bf1 --- /dev/null +++ b/src/Container/Lazy/Call.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; + +class Call extends AbstractLazy +{ + /** + * @param mixed $callable + */ + public function __construct( + protected mixed /* callable */ $callable + ) { + } + + /** + * @param Container $container + * + * @return mixed + */ + public function __invoke(Container $container): mixed + { + return ($this->callable)($container); + } +} diff --git a/src/Container/Lazy/CallableGet.php b/src/Container/Lazy/CallableGet.php new file mode 100644 index 000000000..f49287aae --- /dev/null +++ b/src/Container/Lazy/CallableGet.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; + +class CallableGet extends AbstractLazy +{ + /** + * @param string|AbstractLazy $id + */ + public function __construct( + protected string | AbstractLazy $id + ) { + } + + /** + * @param Container $container + * + * @return mixed + */ + public function __invoke(Container $container): mixed + { + return function () use ($container) { + $id = $this->resolveArgument($container, $this->id); + + return $container->get($id); + }; + } +} diff --git a/src/Container/Lazy/CallableNew.php b/src/Container/Lazy/CallableNew.php new file mode 100644 index 000000000..c1ae36ba1 --- /dev/null +++ b/src/Container/Lazy/CallableNew.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; + +class CallableNew extends AbstractLazy +{ + /** + * @param string|AbstractLazy $id + */ + public function __construct( + protected string | AbstractLazy $id + ) { + } + + /** + * @param Container $container + * + * @return mixed + */ + public function __invoke(Container $container): mixed + { + return function () use ($container) { + $id = $this->resolveArgument($container, $this->id); + + return $container->new($id); + }; + } +} diff --git a/src/Container/Lazy/CsEnv.php b/src/Container/Lazy/CsEnv.php new file mode 100644 index 000000000..b86daa979 --- /dev/null +++ b/src/Container/Lazy/CsEnv.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; +use Phalcon\Container\Exception\NotDefined; + +class CsEnv extends Env +{ + /** + * @param string $varname + * @param string|null $vartype + */ + public function __construct( + protected string $varname, + protected ?string $vartype = null + ) { + } + + /** + * @param Container $container + * + * @return mixed + * @throws NotDefined + */ + public function __invoke(Container $container): mixed + { + $values = str_getcsv($this->getEnv()); + + if ($this->vartype !== null) { + $return = []; + foreach ($values as $key => $value) { + settype($value, $this->vartype); + $return[$key] = $value; + } + + $values = $return; + } + + return $values; + } +} diff --git a/src/Container/Lazy/Env.php b/src/Container/Lazy/Env.php new file mode 100644 index 000000000..26bd5fef1 --- /dev/null +++ b/src/Container/Lazy/Env.php @@ -0,0 +1,73 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; +use Phalcon\Container\Exception\NotDefined; + +use function array_key_exists; +use function getenv; +use function settype; + +class Env extends AbstractLazy +{ + /** + * @param string $varname + * @param string|null $vartype + */ + public function __construct( + protected string $varname, + protected ?string $vartype = null + ) { + } + + /** + * @param Container $container + * + * @return mixed + * @throws NotDefined + */ + public function __invoke(Container $container): mixed + { + $value = $this->getEnv(); + + if ($this->vartype !== null) { + settype($value, $this->vartype); + } + + return $value; + } + + /** + * @return string + * @throws NotDefined + */ + protected function getEnv(): string + { + $env = getenv(); + + if (!array_key_exists($this->varname, $env)) { + throw new NotDefined( + "Evironment variable '{$this->varname}' is not defined." + ); + } + + return $env[$this->varname]; + } +} diff --git a/src/Container/Lazy/FunctionCall.php b/src/Container/Lazy/FunctionCall.php new file mode 100644 index 000000000..6f36ed2f9 --- /dev/null +++ b/src/Container/Lazy/FunctionCall.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; + +use function call_user_func_array; + +class FunctionCall extends AbstractLazy +{ + /** + * @param string $function + * @param array $arguments + */ + public function __construct( + protected string $function, + protected array $arguments + ) { + } + + /** + * @param Container $container + * + * @return mixed + */ + public function __invoke(Container $container): mixed + { + $arguments = $this->resolveArguments($container, $this->arguments); + + return call_user_func_array($this->function, $arguments); + } +} diff --git a/src/Container/Lazy/Get.php b/src/Container/Lazy/Get.php new file mode 100644 index 000000000..9e70d5cb8 --- /dev/null +++ b/src/Container/Lazy/Get.php @@ -0,0 +1,44 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; + +class Get extends AbstractLazy +{ + /** + * @param string|AbstractLazy $id + */ + public function __construct( + protected string | AbstractLazy $id + ) { + } + + /** + * @param Container $container + * + * @return mixed + */ + public function __invoke(Container $container): mixed + { + $id = $this->resolveArgument($container, $this->id); + + return $container->get($id); + } +} diff --git a/src/Container/Lazy/GetCall.php b/src/Container/Lazy/GetCall.php new file mode 100644 index 000000000..1747046b5 --- /dev/null +++ b/src/Container/Lazy/GetCall.php @@ -0,0 +1,52 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; + +use function call_user_func_array; + +class GetCall extends AbstractLazy +{ + /** + * @param string|AbstractLazy $id + * @param string $method + * @param array $arguments + */ + public function __construct( + protected string | AbstractLazy $id, + protected string $method, + protected array $arguments + ) { + } + + /** + * @param Container $container + * + * @return mixed + */ + public function __invoke(Container $container): mixed + { + $id = $this->resolveArgument($container, $this->id); + $arguments = $this->resolveArguments($container, $this->arguments); + $service = $container->get($id); + + return call_user_func_array([$service, $this->method], $arguments); + } +} diff --git a/src/Container/Lazy/IncludeFile.php b/src/Container/Lazy/IncludeFile.php new file mode 100644 index 000000000..20d983d11 --- /dev/null +++ b/src/Container/Lazy/IncludeFile.php @@ -0,0 +1,44 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; + +class IncludeFile extends AbstractLazy +{ + /** + * @param string|AbstractLazy $file + */ + public function __construct( + protected string | AbstractLazy $file + ) { + } + + /** + * @param Container $container + * + * @return mixed + */ + public function __invoke(Container $container): mixed + { + $file = $this->resolveArgument($container, $this->file); + + return include $file; + } +} diff --git a/src/Container/Lazy/NewCall.php b/src/Container/Lazy/NewCall.php new file mode 100644 index 000000000..f9242c0bd --- /dev/null +++ b/src/Container/Lazy/NewCall.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; + +class NewCall extends AbstractLazy +{ + /** + * @param string|AbstractLazy $id + * @param string $method + * @param array $arguments + */ + public function __construct( + protected string | AbstractLazy $id, + protected string $method, + protected array $arguments + ) { + } + + /** + * @param Container $container + * + * @return mixed + */ + public function __invoke(Container $container): mixed + { + $id = $this->resolveArgument($container, $this->id); + $arguments = $this->resolveArguments($container, $this->arguments); + $service = $container->new($id); + + return call_user_func_array([$service, $this->method], $arguments); + } +} diff --git a/src/Container/Lazy/NewInstance.php b/src/Container/Lazy/NewInstance.php new file mode 100644 index 000000000..bdf96f610 --- /dev/null +++ b/src/Container/Lazy/NewInstance.php @@ -0,0 +1,44 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; + +class NewInstance extends AbstractLazy +{ + /** + * @param string|AbstractLazy $id + */ + public function __construct( + protected string | AbstractLazy $id + ) { + } + + /** + * @param Container $container + * + * @return mixed + */ + public function __invoke(Container $container): mixed + { + $id = $this->resolveArgument($container, $this->id); + + return $container->new($id); + } +} diff --git a/src/Container/Lazy/RequireFile.php b/src/Container/Lazy/RequireFile.php new file mode 100644 index 000000000..3bcf2bb3f --- /dev/null +++ b/src/Container/Lazy/RequireFile.php @@ -0,0 +1,44 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; + +class RequireFile extends AbstractLazy +{ + /** + * @param string|AbstractLazy $file + */ + public function __construct( + protected string | AbstractLazy $file + ) { + } + + /** + * @param Container $container + * + * @return mixed + */ + public function __invoke(Container $container): mixed + { + $arguments = $this->resolveArguments($container, [$this->file]); + + return require $arguments[0]; + } +} diff --git a/src/Container/Lazy/StaticCall.php b/src/Container/Lazy/StaticCall.php new file mode 100644 index 000000000..c0ff635fb --- /dev/null +++ b/src/Container/Lazy/StaticCall.php @@ -0,0 +1,51 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md + */ + +declare(strict_types=1); + +namespace Phalcon\Container\Lazy; + +use Phalcon\Container\Container; + +use function call_user_func_array; + +class StaticCall extends AbstractLazy +{ + /** + * @param AbstractLazy|string $class + * @param string $method + * @param array $arguments + */ + public function __construct( + protected AbstractLazy | string $class, + protected string $method, + protected array $arguments + ) { + } + + /** + * @param Container $container + * + * @return mixed + */ + public function __invoke(Container $container): mixed + { + $class = $this->resolveArgument($container, $this->class); + $arguments = $this->resolveArguments($container, $this->arguments); + + return call_user_func_array([$class, $this->method], $arguments); + } +} From 3debfb3993189f2e5228749e099f87e3e9191333 Mon Sep 17 00:00:00 2001 From: Nikolaos Dimopoulos Date: Mon, 29 Jul 2024 18:08:57 -0500 Subject: [PATCH 07/11] [#49] - adding main class --- src/Container/Container.php | 115 ++++++++++++++++++++------- src/Container/ContainerInterface.php | 38 --------- 2 files changed, 87 insertions(+), 66 deletions(-) delete mode 100644 src/Container/ContainerInterface.php diff --git a/src/Container/Container.php b/src/Container/Container.php index b5ae94521..a273c2bee 100644 --- a/src/Container/Container.php +++ b/src/Container/Container.php @@ -7,57 +7,116 @@ * * For the full copyright and license information, please view the LICENSE.txt * file that was distributed with this source code. + * + * Implementation of this file has been influenced by CapsulePHP + * + * @link https://github.com/capsulephp/di + * @license https://github.com/capsulephp/di/blob/3.x/LICENSE.md */ declare(strict_types=1); namespace Phalcon\Container; -use Phalcon\Di\DiInterface; +use Phalcon\Container\Definitions\AbstractDefinition; +use Phalcon\Container\Definitions\Definitions; +use Phalcon\Container\Interfaces\ProviderInterface; +use Phalcon\Container\Traits\ArgumentsTrait; +use Psr\Container\ContainerInterface; +use ReflectionClass; + +use function class_exists; +use function interface_exists; /** - * Wrapper for `Phalcon\Di\Di` - * - * A full lazy loading autoloader will be implemented + * Dependency injection container. */ class Container implements ContainerInterface { + use ArgumentsTrait; + /** - * @var DiInterface + * @var array */ - protected DiInterface $container; + protected array $has = []; /** - * Phalcon\Container constructor - * - * @param DiInterface $container + * @var array */ - public function __construct(DiInterface $container) - { - $this->container = $container; - } + protected array $registry = []; /** - * Return the service - * - * @param string $id - * - * @return mixed + * @param Definitions $definitions + * @param ProviderInterface[] $providers */ - public function get(string $id) + public function __construct( + protected Definitions $definitions, + iterable $providers = [] + ) { + foreach ($providers as $provider) { + $provider->provide($this->definitions); + } + + $this->registry[static::class] = $this; + } + + public function callableGet(string $id): callable { - return $this->container->getShared($id); + return function () use ($id) { + return $this->get($id); + }; + } + + public function callableNew(string $id): callable + { + return function () use ($id) { + return $this->new($id); + }; + } + + public function get(string $id): mixed + { + if (!isset($this->registry[$id])) { + $this->registry[$id] = $this->new($id); + } + + return $this->registry[$id]; } - /** - * Whether a service exists or not in the container - * - * @param string $id - * - * @return bool - */ public function has(string $id): bool { - return $this->container->has($id); + if (!isset($this->has[$id])) { + $this->has[$id] = $this->find($id); + } + + return $this->has[$id]; + } + + public function new(string $id): mixed + { + return $this->resolveArgument($this, $this->definitions->$id); + } + + protected function find(string $id): bool + { + if (!isset($this->definitions->$id)) { + return $this->findImplicit($id); + } + + if ($this->definitions->$id instanceof AbstractDefinition) { + return $this->definitions->$id->isInstantiable($this); + } + + return true; + } + + protected function findImplicit(string $id): bool + { + if (!class_exists($id) && !interface_exists($id)) { + return false; + } + + $reflection = new ReflectionClass($id); + return $reflection->isInstantiable(); } } diff --git a/src/Container/ContainerInterface.php b/src/Container/ContainerInterface.php deleted file mode 100644 index f49c737e4..000000000 --- a/src/Container/ContainerInterface.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE.txt - * file that was distributed with this source code. - */ - -declare(strict_types=1); - -namespace Phalcon\Container; - -/** - * PSR-11 Wrapper for `Phalcon\Di` - */ -interface ContainerInterface -{ - /** - * Return the service - * - * @param string $id - * - * @return mixed - */ - public function get(string $id); - - /** - * Whether a service exists or not in the container - * - * @param string $id - * - * @return bool - */ - public function has(string $id): bool; -} From d68e13fb8cd141474c48d9460b55aa4011f387d2 Mon Sep 17 00:00:00 2001 From: Nikolaos Dimopoulos Date: Mon, 29 Jul 2024 18:09:14 -0500 Subject: [PATCH 08/11] [#49] - adding tests --- tests/unit/Container/ContainerCest.php | 130 ++++ .../Definitions/AbstractDefinitionTest.php | 69 ++ .../Definitions/ClassDefinitionCest.php | 620 ++++++++++++++++++ .../Container/Definitions/DefinitionsCest.php | 375 +++++++++++ .../Definitions/InterfaceDefinitionCest.php | 115 ++++ .../unit/Container/Lazy/AbstractLazyTest.php | 46 ++ tests/unit/Container/Lazy/ArrayValuesCest.php | 142 ++++ tests/unit/Container/Lazy/CallCest.php | 37 ++ tests/unit/Container/Lazy/CallableGetCest.php | 42 ++ tests/unit/Container/Lazy/CallableNewCest.php | 42 ++ tests/unit/Container/Lazy/CsEnvCest.php | 37 ++ tests/unit/Container/Lazy/EnvCest.php | 74 +++ .../unit/Container/Lazy/FunctionCallCest.php | 37 ++ tests/unit/Container/Lazy/GetCallCest.php | 48 ++ tests/unit/Container/Lazy/GetTest.php | 55 ++ tests/unit/Container/Lazy/IncludeFileCest.php | 57 ++ tests/unit/Container/Lazy/NewCallCest.php | 45 ++ tests/unit/Container/Lazy/NewInstanceTest.php | 39 ++ tests/unit/Container/Lazy/RequireFileCest.php | 58 ++ tests/unit/Container/Lazy/StaticCallCest.php | 39 ++ 20 files changed, 2107 insertions(+) create mode 100644 tests/unit/Container/ContainerCest.php create mode 100644 tests/unit/Container/Definitions/AbstractDefinitionTest.php create mode 100644 tests/unit/Container/Definitions/ClassDefinitionCest.php create mode 100644 tests/unit/Container/Definitions/DefinitionsCest.php create mode 100644 tests/unit/Container/Definitions/InterfaceDefinitionCest.php create mode 100644 tests/unit/Container/Lazy/AbstractLazyTest.php create mode 100644 tests/unit/Container/Lazy/ArrayValuesCest.php create mode 100644 tests/unit/Container/Lazy/CallCest.php create mode 100644 tests/unit/Container/Lazy/CallableGetCest.php create mode 100644 tests/unit/Container/Lazy/CallableNewCest.php create mode 100644 tests/unit/Container/Lazy/CsEnvCest.php create mode 100644 tests/unit/Container/Lazy/EnvCest.php create mode 100644 tests/unit/Container/Lazy/FunctionCallCest.php create mode 100644 tests/unit/Container/Lazy/GetCallCest.php create mode 100644 tests/unit/Container/Lazy/GetTest.php create mode 100644 tests/unit/Container/Lazy/IncludeFileCest.php create mode 100644 tests/unit/Container/Lazy/NewCallCest.php create mode 100644 tests/unit/Container/Lazy/NewInstanceTest.php create mode 100644 tests/unit/Container/Lazy/RequireFileCest.php create mode 100644 tests/unit/Container/Lazy/StaticCallCest.php diff --git a/tests/unit/Container/ContainerCest.php b/tests/unit/Container/ContainerCest.php new file mode 100644 index 000000000..3c1d00e85 --- /dev/null +++ b/tests/unit/Container/ContainerCest.php @@ -0,0 +1,130 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container; + + +use Phalcon\Container\Container; +use Phalcon\Container\Definitions\Definitions; +use Phalcon\Tests\Fixtures\Container\TestProvider; +use Phalcon\Tests\Fixtures\Container\TestWithDefaultConstructorParameters; +use Phalcon\Tests\Fixtures\Container\TestWithInterface; +use stdClass; +use UnitTester; + +class ContainerCest +{ + protected $container; + + public function _before(): void + { + $this->container = new Container( + new Definitions(), + [ + new TestProvider(), + ] + ); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerContainerGet(UnitTester $I): void + { + $expected = $this->container->get(stdClass::class); + $actual = $this->container->get(stdClass::class); + $I->assertSame($expected, $actual); + + $expected = 'oneval'; + $actual = $this->container->get('oneval'); + $I->assertSame($expected, $actual); + + $expected = 'lazyval'; + $actual = $this->container->get('lazyval'); + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerContainerHas(UnitTester $I): void + { + // defined object + $actual = $this->container->has(TestWithInterface::class); + $I->assertTrue($actual); + + // defined value + $actual = $this->container->has('oneval'); + $I->assertTrue($actual); + + // not defined but exists + $actual = $this->container->has(TestWithDefaultConstructorParameters::class); + $I->assertTrue($actual); + + // not defined and does not exist + $actual = $this->container->has('NoSuchClass'); + $I->assertFalse($actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerContainerNew(UnitTester $I): void + { + $expected = $this->container->new(stdClass::class); + $actual = $this->container->new(stdClass::class); + $I->assertNotSame($expected, $actual); + + $expected = 'oneval'; + $actual = $this->container->new('oneval'); + $I->assertSame($expected, $actual); + + $expected = 'lazyval'; + $actual = $this->container->new('lazyval'); + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerContainerCallableGet(UnitTester $I): void + { + $callable = $this->container->callableGet(stdClass::class); + + $expected = $callable(stdClass::class); + $actual = $callable(stdClass::class); + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerContainerCallableNew(UnitTester $I): void + { + $callable = $this->container->callableNew(stdClass::class); + + $expected = $callable(stdClass::class); + $actual = $callable(stdClass::class); + $I->assertNotSame($expected, $actual); + } +} diff --git a/tests/unit/Container/Definitions/AbstractDefinitionTest.php b/tests/unit/Container/Definitions/AbstractDefinitionTest.php new file mode 100644 index 000000000..d610e1476 --- /dev/null +++ b/tests/unit/Container/Definitions/AbstractDefinitionTest.php @@ -0,0 +1,69 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Definitions; + +use Phalcon\Container\Container; +use Phalcon\Container\Definitions\AbstractDefinition; +use Phalcon\Container\Definitions\Definitions; +use Phalcon\Container\Exception\NotInstantiated; +use UnitTester; + +abstract class AbstractDefinitionTest +{ + protected Container $container; + + protected Definitions $definitions; + + public function _before(): void + { + $this->definitions = new Definitions(); + $this->container = new Container($this->definitions); + } + + /** + * @param AbstractDefinition $definition + * + * @return object + * @throws NotInstantiated + */ + protected function actual(AbstractDefinition $definition) + { + return $definition->new($this->container); + } + + /** + * @param UnitTester $I + * @param AbstractDefinition $definition + * @param array $expected + * + * @return void + */ + protected function assertNotInstantiable( + UnitTester $I, + AbstractDefinition $definition, + array $expected + ) { + try { + $this->actual($definition); + $I->assertFalse(true, "Should not have been instantiated."); + } catch (NotInstantiated $ex) { + while (!empty($expected)) { + $ex = $ex->getPrevious(); + [$expectedException, $expectedExceptionMessage] = array_shift($expected); + $I->assertInstanceOf($expectedException, $ex); + $I->assertSame($expectedExceptionMessage, $ex->getMessage()); + } + } + } +} diff --git a/tests/unit/Container/Definitions/ClassDefinitionCest.php b/tests/unit/Container/Definitions/ClassDefinitionCest.php new file mode 100644 index 000000000..e4cea7db9 --- /dev/null +++ b/tests/unit/Container/Definitions/ClassDefinitionCest.php @@ -0,0 +1,620 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Definitions; + +use Phalcon\Container\Container; +use Phalcon\Container\Definitions\ClassDefinition; +use Phalcon\Container\Exception\NotAllowed; +use Phalcon\Container\Exception\NotDefined; +use Phalcon\Container\Exception\NotFound; +use Phalcon\Container\Exception\NotInstantiated; +use Phalcon\Container\Lazy\Call; +use Phalcon\Tests\Fixtures\Container\TestBadHint; +use Phalcon\Tests\Fixtures\Container\TestTyped; +use Phalcon\Tests\Fixtures\Container\TestUnionParameter; +use Phalcon\Tests\Fixtures\Container\TestWithConstructorDefaultParameters; +use Phalcon\Tests\Fixtures\Container\TestWithDefaultConstructorParameters; +use Phalcon\Tests\Fixtures\Container\TestWithInterface; +use Phalcon\Tests\Fixtures\Container\TestWithInterfaceGrandParent; +use Phalcon\Tests\Fixtures\Container\TestWithInterfaceParent; +use Phalcon\Tests\Fixtures\Container\TestWithOptionalConstructorArguments; +use stdClass; +use UnitTester; + +class ClassDefinitionCest extends AbstractDefinitionTest +{ + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionNoConstructor(UnitTester $I): void + { + $definition = new ClassDefinition(stdClass::class); + + $expected = stdClass::class; + $actual = $this->actual($definition); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotFound + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionAlternativeClass(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithInterface::class); + $definition->class(stdClass::class); + + $actual = $definition->isInstantiable($this->container); + $I->assertTrue($actual); + + $expected = stdClass::class; + $actual = $this->actual($definition); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotFound + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionSameAsId(UnitTester $I): void + { + $definition = new ClassDefinition(stdClass::class); + $definition->class(stdClass::class); + + $expected = stdClass::class; + $actual = $this->actual($definition); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsClassDefinitionNoSuchClass(UnitTester $I): void + { + $I->expectThrowable( + new NotFound("Class 'NoSuchClass' not found."), + function () { + (new ClassDefinition('NoSuchClass')); + } + ); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsClassDefinitionNotFound(UnitTester $I): void + { + $I->expectThrowable( + new NotFound("Class 'NoSuchClass' not found."), + function () { + $definition = new ClassDefinition(TestWithInterface::class); + $definition->class('NoSuchClass'); + } + ); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsClassDefinitionArgument(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithInterface::class); + + $actual = $definition->hasArgument(0); + $I->assertFalse($actual); + + $definition->argument(0, 'ten'); + + $actual = $definition->hasArgument(0); + $I->assertTrue($actual); + + $expected = 'ten'; + $actual = $definition->getArgument(0); + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionLazy(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithInterface::class); + $definition->argument( + 0, + new Call( + function ($container) { + return 'lazy'; + } + ) + ); + + $expected = 'lazy'; + $actual = $this->actual($definition)->one; + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionNumbered(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithInterface::class); + $definition->argument(0, 'ten'); + + $expected = TestWithInterface::class; + $actual = $this->actual($definition); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionNamed(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithInterface::class); + $definition->argument('one', 'ten'); + + $expected = TestWithInterface::class; + $actual = $this->actual($definition); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionTyped(UnitTester $I): void + { + $definition = new ClassDefinition(TestTyped::class); + $definition->argument( + stdClass::class, + $this->definitions->new(stdClass::class) + ); + + $expected = TestTyped::class; + $actual = $this->actual($definition); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionLatestTakesPrecedence(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithInterface::class); + $definition->arguments( + [ + 0 => 'valbefore', + 'one' => 'valafter', + ] + ); + + $expected = 'valafter'; + $actual = $this->actual($definition)->one; + $I->assertSame($expected, $actual); + + $definition->arguments( + [ + 'one' => 'valbefore', + 0 => 'valafter', + ] + ); + + $expected = 'valafter'; + $actual = $this->actual($definition)->one; + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsClassDefinitionMissingRequired(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithInterface::class); + $this->assertNotInstantiable( + $I, + $definition, + [ + [ + NotDefined::class, + "Required argument 0 (\$one) for class definition '" . + TestWithInterface::class . + "' is not defined.", + ], + ] + ); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsClassDefinitionMissingRequiredNullable(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithDefaultConstructorParameters::class); + $this->assertNotInstantiable( + $I, + $definition, + [ + [ + NotInstantiated::class, + "Could not instantiate " . + TestWithInterface::class, + ], + [ + NotDefined::class, + "Required argument 0 (\$one) for class definition '" . + TestWithInterface::class . + "' is not defined.", + ], + ] + ); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsClassDefinitionMissingUnionType(UnitTester $I): void + { + $definition = new ClassDefinition(TestUnionParameter::class); + $this->assertNotInstantiable( + $I, + $definition, + [ + [ + NotDefined::class, + "Union typed argument 0 (\$one) for class definition '" . + TestUnionParameter::class . + "' is not defined.", + ], + ] + ); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsClassDefinitionTypeDoesNotExist(UnitTester $I): void + { + $definition = new ClassDefinition(TestBadHint::class); + $this->assertNotInstantiable( + $I, + $definition, + [ + [ + NotDefined::class, + "Required argument 0 (\$one) for class definition " . + "'Phalcon\Tests\Fixtures\Container\TestBadHint'" . + " is typehinted as " . + "Phalcon\Tests\Fixtures\Container\Nonesuch, " . + "which does not exist.", + ], + ] + ); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionUnionType(UnitTester $I): void + { + $definition = new ClassDefinition(TestUnionParameter::class); + + $expected = ['arrayval']; + $definition->argument(0, $expected); + + $actual = $this->actual($definition)->one; + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionNamedType(UnitTester $I): void + { + $definition = new ClassDefinition(TestTyped::class); + + $expected = TestTyped::class; + $actual = $this->actual($definition); + $I->assertInstanceOf($expected, $actual); + + $expected = $actual->one; + $actual = $this->actual($definition)->one; + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionNamedTypeWithDefault(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithConstructorDefaultParameters::class); + $definition->argument(1, 'twenty'); + + $expected = TestWithConstructorDefaultParameters::class; + $actual = $this->actual($definition); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionArgumentOptional(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithOptionalConstructorArguments::class); + + $definition->argument(0, 'ten'); + $definition->argument(2, ['twenty', 'thirty', 'forty']); + + $expected = TestWithOptionalConstructorArguments::class; + $actual = $this->actual($definition); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionArgumentVariadic(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithOptionalConstructorArguments::class); + + $expected = ['twenty', 'thirty', 'forty']; + $definition->arguments( + [ + 'ten', + 'fifteen', + $expected, + ] + ); + $actual = $this->actual($definition)->three; + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionArgumentVariadicOmitted(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithOptionalConstructorArguments::class); + $definition->arguments( + [ + 'ten', + 'fifteen', + ] + ); + + $expected = []; + $actual = $this->actual($definition)->three; + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionArgumentVariadicWrong(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithOptionalConstructorArguments::class); + $definition->arguments( + [ + 'ten', + 'fifteen', + 'not-an-array', + ] + ); + + $this->assertNotInstantiable( + $I, + $definition, + [ + [ + NotAllowed::class, + "Variadic argument 2 (\$three) for class definition '" . + TestWithOptionalConstructorArguments::class . + "' is defined as string, but should be an array " . + "of variadic values.", + ], + ] + ); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionFactory(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithInterface::class); + + $definition->factory( + function ($container) { + return new stdClass(); + } + ); + + $actual = $definition->isInstantiable($this->container); + $I->assertTrue($actual); + + $expected = stdClass::class; + $actual = $this->actual($definition); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionExtenders(UnitTester $I): void + { + $definition = new ClassDefinition(TestWithInterface::class); + $definition->arguments(['one']); + $definition->method('append', 'ten'); + $definition->modify( + function (Container $container, object $obj) { + $obj->append('twenty'); + } + ); + + $definition->decorate( + function (Container $container, object $obj) { + $obj->append('thirty'); + + return $obj; + } + ); + + $definition->property('newProperty', 'newValue'); + + $result = $this->actual($definition); + + $expected = 'onetentwentythirty'; + $actual = $result->one; + $I->assertSame($expected, $actual); + + $expected = 'newValue'; + $actual = $result->newProperty; + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionInherit(UnitTester $I): void + { + $definitions = $this->definitions; + + $definitions->{TestWithInterface::class} + ->argument('one', 'parent'); + + $definitions->{TestWithInterfaceParent::class} + ->inherit($definitions) + ->argument('two', 'child'); + + $object = $this->container->new(TestWithInterfaceParent::class); + + $expected = 'parent'; + $actual = $object->one; + $I->assertSame($expected, $actual); + + $expected = 'child'; + $actual = $object->two; + $I->assertSame($expected, $actual); + + $object = $this->container->new(TestWithInterfaceGrandParent::class); + + $expected = 'parent'; + $actual = $object->one; + $I->assertSame($expected, $actual); + + $expected = 'child'; + $actual = $object->two; + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + * @throws NotInstantiated + */ + public function containerDefinitionsClassDefinitionInheritDisabled(UnitTester $I): void + { + $this->definitions->{TestWithInterface::class} + ->argument('one', 'parent') + ; + + $this->definitions->{TestWithInterfaceParent::class} + ->inherit(null) + ->argument('two', 'child') + ; + + $definition = $this->definitions->{TestWithInterfaceParent::CLASS}; + + $this->assertNotInstantiable( + $I, + $definition, + [ + [ + NotDefined::CLASS, + "Required argument 0 (\$one) for class definition '" . + TestWithInterfaceParent::class . + "' is not defined.", + ], + ] + ); + } +} diff --git a/tests/unit/Container/Definitions/DefinitionsCest.php b/tests/unit/Container/Definitions/DefinitionsCest.php new file mode 100644 index 000000000..15dced0e3 --- /dev/null +++ b/tests/unit/Container/Definitions/DefinitionsCest.php @@ -0,0 +1,375 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Definitions; + +use Phalcon\Container\Definitions\ClassDefinition; +use Phalcon\Container\Definitions\Definitions; +use Phalcon\Container\Definitions\InterfaceDefinition; +use Phalcon\Container\Exception\NotFound; +use Phalcon\Container\Lazy\ArrayValues; +use Phalcon\Container\Lazy\Call; +use Phalcon\Container\Lazy\CallableGet; +use Phalcon\Container\Lazy\CallableNew; +use Phalcon\Container\Lazy\Env; +use Phalcon\Container\Lazy\FunctionCall; +use Phalcon\Container\Lazy\Get; +use Phalcon\Container\Lazy\GetCall; +use Phalcon\Container\Lazy\IncludeFile; +use Phalcon\Container\Lazy\NewCall; +use Phalcon\Container\Lazy\NewInstance; +use Phalcon\Container\Lazy\RequireFile; +use Phalcon\Container\Lazy\StaticCall; +use Phalcon\Tests\Fixtures\Container\TestInterface; +use Phalcon\Tests\Fixtures\Container\TestWithInterface; +use UnitTester; + +class DefinitionsCest +{ + protected Definitions $definitions; + + public function _before(): void + { + $this->definitions = new Definitions(); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsNamedEntries(UnitTester $I): void + { + $this->definitions->one = new ClassDefinition(TestWithInterface::class); + + $expected = ClassDefinition::class; + $actual = $this->definitions->one; + $I->assertInstanceOf($expected, $actual); + + $this->definitions->two = new ClassDefinition(TestWithInterface::class); + + $expected = ClassDefinition::class; + $actual = $this->definitions->two; + $I->assertInstanceOf($expected, $actual); + + $expected = $this->definitions->one; + $actual = $this->definitions->two; + $I->assertNotSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsAliasedEntries(UnitTester $I): void + { + $this->definitions->{'one.copy'} = $this->definitions->{TestWithInterface::class}; + + $expected = $this->definitions->{TestWithInterface::class}; + $actual = $this->definitions->{'one.copy'}; + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsClonedEntries(UnitTester $I): void + { + $this->definitions->{'one.copy'} = clone $this->definitions->{TestWithInterface::class}; + + $expected = $this->definitions->{TestWithInterface::class}; + $actual = $this->definitions->{'one.copy'}; + $I->assertNotSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsMagicObjects(UnitTester $I): void + { + // not defined, but exists + $actual = isset($this->definitions->{TestWithInterface::class}); + $I->assertFalse($actual); + + // define it + $expected = ClassDefinition::class; + $definition1 = $this->definitions->{TestWithInterface::class}; + $I->assertInstanceOf($expected, $definition1); + + // now it is defined + $actual = isset($this->definitions->{TestWithInterface::class}); + $I->assertTrue($actual); + + // make sure they are shared instances + $expected = ClassDefinition::class; + $definition2 = $this->definitions->{TestWithInterface::class}; + $I->assertInstanceOf($expected, $definition2); + + $I->assertSame($definition1, $definition2); + + // undefine it + unset($this->definitions->{TestWithInterface::class}); + + $actual = isset($this->def->{TestWithInterface::class}); + $I->assertFalse($actual); + + // does not exist + $I->expectThrowable( + new NotFound("Value definition 'NoSuchClass' not found."), + function () { + $this->definitions->NoSuchClass; + } + ); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsMagicValues(UnitTester $I): void + { + // not defined + $actual = isset($this->definitions->one); + $I->assertFalse($actual); + + $this->definitions->one = 'ten'; + + $actual = isset($this->definitions->one); + $I->assertTrue($actual); + + $expected = 'ten'; + $actual = $this->definitions->one; + $I->assertSame($expected, $actual); + + unset($this->definitions->one); + + $actual = isset($this->definitions->one); + $I->assertFalse($actual); + + $I->expectThrowable( + new NotFound("Value definition 'one' not found."), + function () { + $this->definitions->one; + } + ); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsMagicGetInterface(UnitTester $I): void + { + $expected = InterfaceDefinition::class; + $actual = $this->definitions->{TestInterface::class}; + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsCall(UnitTester $I): void + { + $expected = Call::class; + $actual = $this->definitions->call(function () { + return true; + }); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsCallableGet(UnitTester $I): void + { + $expected = CallableGet::class; + $actual = $this->definitions->callableGet(TestInterface::class); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsCallableNew(UnitTester $I): void + { + $expected = CallableNew::class; + $actual = $this->definitions->callableNew(TestInterface::class); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsCsEnv(UnitTester $I): void + { + $expected = Env::class; + $actual = $this->definitions->csEnv('TEST_ENV'); + $I->assertInstanceOf($expected, $actual); + + $expected = Env::class; + $actual = $this->definitions->csEnv('TEST_ENV', 'int'); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsEnv(UnitTester $I): void + { + $expected = Env::class; + $actual = $this->definitions->env('TEST_ENV'); + $I->assertInstanceOf($expected, $actual); + + $expected = Env::class; + $actual = $this->definitions->env('TEST_ENV', 'int'); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsArray(UnitTester $I): void + { + $expected = ArrayValues::class; + $actual = $this->definitions->array(['one']); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsFunctionCall(UnitTester $I): void + { + $expected = FunctionCall::class; + $actual = $this->definitions->functionCall( + 'Capsule\Di\fake', + ['one'] + ); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsGet(UnitTester $I): void + { + $expected = Get::class; + $actual = $this->definitions->get(TestInterface::class); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsGetCall(UnitTester $I): void + { + $expected = GetCall::class; + $actual = $this->definitions->getCall( + TestInterface::class, + 'getValue' + ); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsIncludeFile(UnitTester $I): void + { + $expected = IncludeFile::class; + $actual = $this->definitions->include('includeFile.php'); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsNew(UnitTester $I): void + { + $expected = NewInstance::class; + $actual = $this->definitions->new(TestInterface::class); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsNewCall(UnitTester $I): void + { + $expected = NewCall::class; + $actual = $this->definitions->newCall( + TestInterface::class, + 'getValue' + ); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsRequire(UnitTester $I): void + { + $expected = RequireFile::class; + $actual = $this->definitions->require('includeFile.php'); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsDefinitionsStaticCall(UnitTester $I): void + { + $expected = StaticCall::class; + $actual = $this->definitions->staticCall( + TestWithInterface::class, + 'staticFake', + ['bar'] + ); + $I->assertInstanceOf($expected, $actual); + } +} diff --git a/tests/unit/Container/Definitions/InterfaceDefinitionCest.php b/tests/unit/Container/Definitions/InterfaceDefinitionCest.php new file mode 100644 index 000000000..74c9cd515 --- /dev/null +++ b/tests/unit/Container/Definitions/InterfaceDefinitionCest.php @@ -0,0 +1,115 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Definitions; + +use Phalcon\Container\Container; +use Phalcon\Container\Definitions\InterfaceDefinition; +use Phalcon\Container\Exception\NotDefined; +use Phalcon\Container\Exception\NotFound; +use Phalcon\Tests\Fixtures\Container\TestInterface; +use Phalcon\Tests\Fixtures\Container\TestWithInterface; +use stdClass; +use UnitTester; + +class InterfaceDefinitionCest extends AbstractDefinitionTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsInterfaceDefinitionConstructorNotInterface(UnitTester $I) + { + $I->expectThrowable( + new NotFound( + "Interface '" . TestWithInterface::class . "' not found." + ), + function () { + new InterfaceDefinition(TestWithInterface::class); + } + ); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsInterfaceDefinitionClass(UnitTester $I) + { + $definition = new InterfaceDefinition(TestInterface::class); + $definition->class(stdClass::class); + + $expected = stdClass::class; + $actual = $this->actual($definition); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsInterfaceDefinitionFactory(UnitTester $I) + { + $definition = new InterfaceDefinition(TestInterface::class); + $definition->factory( + function (Container $container) { + return new stdClass(); + } + ); + + $expected = stdClass::class; + $actual = $this->actual($definition); + $I->assertInstanceOf($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsInterfaceDefinitionClassNotFound(UnitTester $I) + { + $I->expectThrowable( + new NotFound("Class 'NoSuchClass' not found."), + function () { + $definition = new InterfaceDefinition(TestInterface::class); + $definition->class('NoSuchClass'); + } + ); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerDefinitionsInterfaceDefinitionClassNotDefined(UnitTester $I) + { + $definition = new InterfaceDefinition(TestInterface::class); + $this->assertNotInstantiable( + $I, + $definition, + [ + [ + NotDefined::class, + "Class/factory for interface definition '" . + TestInterface::class . + "' not set.", + ], + ] + ); + } +} diff --git a/tests/unit/Container/Lazy/AbstractLazyTest.php b/tests/unit/Container/Lazy/AbstractLazyTest.php new file mode 100644 index 000000000..89102bfe0 --- /dev/null +++ b/tests/unit/Container/Lazy/AbstractLazyTest.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Phalcon\Container\Container; +use Phalcon\Container\Definitions\Definitions; +use Phalcon\Container\Lazy\AbstractLazy; + +abstract class AbstractLazyTest +{ + protected Container $container; + + public function _before() : void + { + $this->container = new Container($this->definitions()); + } + + /** + * @return Definitions + */ + protected function definitions(): Definitions + { + return new Definitions(); + } + + /** + * @param AbstractLazy $lazy + * + * @return mixed + */ + protected function actual(AbstractLazy $lazy) : mixed + { + return $lazy($this->container); + } +} diff --git a/tests/unit/Container/Lazy/ArrayValuesCest.php b/tests/unit/Container/Lazy/ArrayValuesCest.php new file mode 100644 index 000000000..5f5629d33 --- /dev/null +++ b/tests/unit/Container/Lazy/ArrayValuesCest.php @@ -0,0 +1,142 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Phalcon\Container\Lazy\ArrayValues; +use Phalcon\Container\Lazy\Env; +use UnitTester; + +class ArrayValuesCest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyArrayValues(UnitTester $I): void + { + $varname = 'TEST_VAR_ONE'; + $lazy = new ArrayValues( + [ + $varname => new Env($varname) + ] + ); + + $actual = isset($lazy['one']); + $I->assertFalse($actual); + + $lazy['one'] = 'two'; + + $actual = isset($lazy['one']); + $I->assertTrue($actual); + + $expected = 'two'; + $actual = $lazy['one']; + $I->assertSame($expected, $actual); + + unset($lazy['one']); + + $actual = isset($lazy['one']); + $I->assertFalse($actual); + + $lazy[] = 'three'; + + $expected = 2; + $I->assertCount($expected, $lazy); + + $I->assertSame('three', $lazy[0]); + + foreach ($lazy as $key => $value) { + if ($key === $varname) { + $I->assertInstanceOf(Env::CLASS, $value); + } + } + + $value = random_int(1, 100); + putenv("TEST_VAR_ONE={$value}"); + $expect = [$varname => $value, 0 => 'three']; + $actual = $this->actual($lazy); + $I->assertEquals($expect, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyArrayValuesRecursion(UnitTester $I): void + { + $lazy = new ArrayValues([ + 'one' => new Env('TEST_VAR_ONE', 'int'), + [ + 'two' => new Env('TEST_VAR_TWO', 'int'), + ], + 'three' => 'dib' + ]); + + $one = random_int(1, 100); + putenv("TEST_VAR_ONE={$one}"); + + $two = random_int(1, 100); + putenv("TEST_VAR_TWO={$two}"); + + $expect = [ + 'one' => $one, + [ + 'two' => $two, + ], + 'three' => 'dib', + ]; + + $actual = $lazy($this->container); + $I->assertSame($expect, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyArrayValuesMerge(UnitTester $I): void + { + $lazy = new ArrayValues( + [ + 'one', + 'two', + 'three' => 'ten', + ] + ); + + $lazy->merge( + [ + 'four', + 'five', + 'six' => 'twenty', + ] + ); + + $expect = [ + 'one', + 'two', + 'three' => 'ten', + 'four', + 'five', + 'six' => 'twenty', + ]; + + $actual = $lazy($this->container); + + $I->assertSame($expect, $actual); + } +} diff --git a/tests/unit/Container/Lazy/CallCest.php b/tests/unit/Container/Lazy/CallCest.php new file mode 100644 index 000000000..b6b65466d --- /dev/null +++ b/tests/unit/Container/Lazy/CallCest.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Phalcon\Container\Lazy\Call; +use UnitTester; + +class CallCest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyCall(UnitTester $I): void + { + $lazy = new Call( + function ($container) { + return true; + } + ); + + $actual = $this->actual($lazy); + $I->assertTrue($actual); + } +} diff --git a/tests/unit/Container/Lazy/CallableGetCest.php b/tests/unit/Container/Lazy/CallableGetCest.php new file mode 100644 index 000000000..1bab9490e --- /dev/null +++ b/tests/unit/Container/Lazy/CallableGetCest.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Closure; +use Phalcon\Container\Lazy\CallableGet; +use stdClass; +use UnitTester; + +class CallableGetCest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyCallableGet(UnitTester $I): void + { + $lazy = new CallableGet(stdClass::class); + $callable = $this->actual($lazy); + $I->assertInstanceOf(Closure::class, $callable); + + $get1 = $callable(); + $I->assertInstanceOf(stdClass::class, $get1); + + $get2 = $callable(); + $I->assertInstanceOf(stdClass::class, $get2); + + $I->assertSame($get1, $get2); + } +} diff --git a/tests/unit/Container/Lazy/CallableNewCest.php b/tests/unit/Container/Lazy/CallableNewCest.php new file mode 100644 index 000000000..958d0c2e2 --- /dev/null +++ b/tests/unit/Container/Lazy/CallableNewCest.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Closure; +use Phalcon\Container\Lazy\CallableNew; +use stdClass; +use UnitTester; + +class CallableNewCest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyCallableNew(UnitTester $I): void + { + $lazy = new CallableNew(stdClass::CLASS); + $callable = $this->actual($lazy); + $I->assertInstanceOf(Closure::CLASS, $callable); + + $new1 = $callable(); + $I->assertInstanceOf(stdClass::CLASS, $new1); + + $new2 = $callable(); + $I->assertInstanceOf(stdClass::CLASS, $new2); + + $I->assertNotSame($new1, $new2); + } +} diff --git a/tests/unit/Container/Lazy/CsEnvCest.php b/tests/unit/Container/Lazy/CsEnvCest.php new file mode 100644 index 000000000..4190b44bb --- /dev/null +++ b/tests/unit/Container/Lazy/CsEnvCest.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Phalcon\Container\Lazy\CsEnv; +use UnitTester; + +class CsEnvCest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyCsEnv(UnitTester $I): void + { + $varname = 'TEST_VAR'; + $lazy = new CsEnv($varname, 'int'); + + $expected = array_fill(0, 3, random_int(1, 100)); + putenv("TEST_VAR=" . implode(',', $expected)); + + $actual = $this->actual($lazy); + $I->assertEquals($expected, $actual); + } +} diff --git a/tests/unit/Container/Lazy/EnvCest.php b/tests/unit/Container/Lazy/EnvCest.php new file mode 100644 index 000000000..3d9469fdb --- /dev/null +++ b/tests/unit/Container/Lazy/EnvCest.php @@ -0,0 +1,74 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Phalcon\Container\Exception\NotDefined; +use Phalcon\Container\Lazy\Env; +use UnitTester; + +use function random_int; + +class EnvCest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyEnv(UnitTester $I): void + { + $varname = 'TEST_VAR'; + $lazy = new Env($varname); + $expected = random_int(1, 100); + putenv("TEST_VAR={$expected}"); + + $actual = $this->actual($lazy); + $I->assertEquals($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyEnvType(UnitTester $I): void + { + $varname = 'TEST_VAR'; + $lazy = new Env($varname, 'int'); + $expected = random_int(1, 100); + putenv("TEST_VAR={$expected}"); + + $actual = $this->actual($lazy); + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyEnvNoSuchService(UnitTester $I): void + { + $varname = 'TEST_VAR_' . random_int(1, 100); + $I->expectThrowable( + new NotDefined( + "Evironment variable '{$varname}' is not defined." + ), + function () use ($varname) { + $lazy = new Env($varname); + $this->actual($lazy); + } + ); + } +} diff --git a/tests/unit/Container/Lazy/FunctionCallCest.php b/tests/unit/Container/Lazy/FunctionCallCest.php new file mode 100644 index 000000000..5d3e49166 --- /dev/null +++ b/tests/unit/Container/Lazy/FunctionCallCest.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Phalcon\Container\Lazy\FunctionCall; +use UnitTester; + +class FunctionCallCest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyFunctionCall(UnitTester $I): void + { + require_once dataDir('fixtures/Container/functions.php'); + + $lazy = new FunctionCall( + 'Phalcon\Tests\Fixtures\Container\test', + ['ten'] + ); + $actual = $this->actual($lazy); + $I->assertSame('ten', $actual); + } +} diff --git a/tests/unit/Container/Lazy/GetCallCest.php b/tests/unit/Container/Lazy/GetCallCest.php new file mode 100644 index 000000000..19707065b --- /dev/null +++ b/tests/unit/Container/Lazy/GetCallCest.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Phalcon\Container\Definitions\Definitions; +use Phalcon\Container\Lazy\GetCall; +use Phalcon\Tests\Fixtures\Container\TestWithInterface; +use UnitTester; + +class GetCallCest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyGetCall(UnitTester $I): void + { + $lazy = new GetCall(TestWithInterface::class, 'getValue', []); + $actual = $this->actual($lazy); + + $expected = 'two'; + $actual = $this->actual($lazy); + $I->assertSame($expected, $actual); + } + + /** + * @return Definitions + */ + protected function definitions() : Definitions + { + $definitions = parent::definitions(); + $definitions->{TestWithInterface::class}->argument('one', 'ten'); + + return $definitions; + } +} diff --git a/tests/unit/Container/Lazy/GetTest.php b/tests/unit/Container/Lazy/GetTest.php new file mode 100644 index 000000000..88ba9a4d8 --- /dev/null +++ b/tests/unit/Container/Lazy/GetTest.php @@ -0,0 +1,55 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Phalcon\Container\Exception\NotFound; +use Phalcon\Container\Lazy\Get; +use stdClass; +use UnitTester; + +class GetTest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyGet(UnitTester $I): void + { + $lazy = new Get(stdClass::class); + $get1 = $this->actual($lazy); + $I->assertInstanceOf(stdClass::class, $get1); + + $get2 = $this->actual($lazy); + $I->assertInstanceOf(stdClass::class, $get2); + + $I->assertSame($get1, $get2); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyGetNoSuchClass(UnitTester $I): void + { + $I->expectThrowable( + new NotFound('NoSuchClass'), + function () { + $lazy = new Get('NoSuchClass'); + $this->actual($lazy); + } + ); + } +} diff --git a/tests/unit/Container/Lazy/IncludeFileCest.php b/tests/unit/Container/Lazy/IncludeFileCest.php new file mode 100644 index 000000000..e268b8776 --- /dev/null +++ b/tests/unit/Container/Lazy/IncludeFileCest.php @@ -0,0 +1,57 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Phalcon\Container\Lazy\Call; +use Phalcon\Container\Lazy\IncludeFile; +use UnitTester; + +use function dataDir; + +class IncludeFileCest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyIncludeFile(UnitTester $I): void + { + $lazy = new IncludeFile(dataDir('fixtures/Container/includeFile.php')); + + $expected = 'included'; + $actual = $this->actual($lazy); + $I->assertSame($expected, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyIncludeFileLazy(UnitTester $I): void + { + $lazy = new IncludeFile( + new Call( + function ($container) { + return dataDir('fixtures/Container/includeFile.php'); + } + ) + ); + + $expected = 'included'; + $actual = $this->actual($lazy); + $I->assertSame($expected, $actual); + } +} diff --git a/tests/unit/Container/Lazy/NewCallCest.php b/tests/unit/Container/Lazy/NewCallCest.php new file mode 100644 index 000000000..afda8d4f5 --- /dev/null +++ b/tests/unit/Container/Lazy/NewCallCest.php @@ -0,0 +1,45 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Phalcon\Container\Definitions\Definitions; +use Phalcon\Container\Lazy\NewCall; +use Phalcon\Tests\Fixtures\Container\TestWithInterface; +use UnitTester; + +class NewCallCest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyNewCall(UnitTester $I): void + { + $lazy = new NewCall(TestWithInterface::class, 'getValue', []); + $actual = $this->actual($lazy); + + $expected = 'two'; + $actual = $this->actual($lazy); + $I->assertSame($expected, $actual); + } + + protected function definitions() : Definitions + { + $definitions = parent::definitions(); + $definitions->{TestWithInterface::class}->argument('one', 'ten'); + + return $definitions; + } +} diff --git a/tests/unit/Container/Lazy/NewInstanceTest.php b/tests/unit/Container/Lazy/NewInstanceTest.php new file mode 100644 index 000000000..9e4077610 --- /dev/null +++ b/tests/unit/Container/Lazy/NewInstanceTest.php @@ -0,0 +1,39 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Capsule\Di\Exception; +use Phalcon\Container\Lazy\NewInstance; +use stdClass; +use UnitTester; + +class NewInstanceTest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyStaticCall(UnitTester $I): void + { + $lazy = new NewInstance(stdClass::CLASS); + $new1 = $this->actual($lazy); + $I->assertInstanceOf(stdClass::CLASS, $new1); + + $new2 = $this->actual($lazy); + $I->assertInstanceOf(stdClass::CLASS, $new2); + + $I->assertNotSame($new1, $new2); + } +} diff --git a/tests/unit/Container/Lazy/RequireFileCest.php b/tests/unit/Container/Lazy/RequireFileCest.php new file mode 100644 index 000000000..9c6a96084 --- /dev/null +++ b/tests/unit/Container/Lazy/RequireFileCest.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Phalcon\Container\Lazy\Call; +use Phalcon\Container\Lazy\RequireFile; + +use UnitTester; + +use function dataDir; + +class RequireFileCest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyRequireFile(UnitTester $I): void + { + $lazy = new RequireFile(dataDir('fixtures/Container/includeFile.php')); + + $expect = 'included'; + $actual = $this->actual($lazy); + $I->assertSame($expect, $actual); + } + + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyRequireFileLazy(UnitTester $I): void + { + $lazy = new RequireFile( + new Call( + function ($container) { + return dataDir('fixtures/Container/includeFile.php'); + } + ) + ); + + $expect = 'included'; + $actual = $this->actual($lazy); + $I->assertSame($expect, $actual); + } +} diff --git a/tests/unit/Container/Lazy/StaticCallCest.php b/tests/unit/Container/Lazy/StaticCallCest.php new file mode 100644 index 000000000..2bb639f66 --- /dev/null +++ b/tests/unit/Container/Lazy/StaticCallCest.php @@ -0,0 +1,39 @@ + + * + * For the full copyright and license information, please view the LICENSE.txt + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace Phalcon\Tests\Unit\Container\Lazy; + +use Phalcon\Container\Lazy\StaticCall; +use Phalcon\Tests\Fixtures\Container\TestWithInterface; +use UnitTester; + +class StaticCallCest extends AbstractLazyTest +{ + /** + * @param UnitTester $I + * + * @return void + */ + public function containerLazyStaticCall(UnitTester $I): void + { + $lazy = new StaticCall( + TestWithInterface::class, + 'staticMethod', + ['ten'] + ); + + $expected = 'ten'; + $actual = $this->actual($lazy); + $I->assertSame($expected, $actual); + } +} From ee0ef7bc4422fb2334acf80bce2ea557d998a7e5 Mon Sep 17 00:00:00 2001 From: Nikolaos Dimopoulos Date: Mon, 29 Jul 2024 18:17:10 -0500 Subject: [PATCH 09/11] [#49] - tidied up composer, added psr --- composer.json | 28 +- composer.lock | 6742 +++++++++++++++++++++---------------------------- 2 files changed, 2967 insertions(+), 3803 deletions(-) diff --git a/composer.json b/composer.json index b0b57a960..475770649 100644 --- a/composer.json +++ b/composer.json @@ -4,35 +4,45 @@ "keywords": [ "php", "framework", + "psr-3", + "psr-4", "psr-7", - "psr-15", - "psr-17" + "psr-11", + "psr-12", + "psr-16" ], "license": "MIT", "require": { "php": ">=8.1 <9.0", "ext-apcu": "*", - "ext-igbinary": "*", - "ext-json": "*", "ext-fileinfo": "*", + "ext-json": "*", "ext-mbstring": "*", "ext-pdo": "*", - "ext-redis": "*", "ext-xml": "*", "payload-interop/payload-interop": "^1.0", "phalcon/traits": "^2.0", - "phpbench/phpbench": "^1.2" + "psr/cache": "^3.0", + "psr/container": "^2.0", + "psr/log": "^3.0" }, "suggest": { + "ext-apcu": "to use Cache\\Adapter\\Apcu, Storage\\Adapter\\Apcu", "ext-gd": "to use Image\\Adapter\\Gd", + "ext-igbinary": "to use Storage\\Serializer\\Igbinary", "ext-imagick": "to use Image\\Adapter\\Imagick", - "ext-memcached": "to use Cache\\Adapter\\Libmemcached, Storage\\Adapter\\Libmemcached", + "ext-memcached": "to use Cache\\Adapter\\Libmemcached, Session\\Adapter\\Libmemcached, Storage\\Adapter\\Libmemcached", "ext-openssl": "to use Encryption\\Crypt", + "ext-redis": "to use Cache\\Adapter\\Redis, Session\\Adapter\\Redis, Storage\\Adapter\\Redis", "ext-yaml": "to use Config\\Adapter\\Yaml" }, "autoload": { "psr-4": { - "Phalcon\\": "src/", + "Phalcon\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { "Phalcon\\Tests\\Benchmarks\\": "tests/benchmarks/", "Phalcon\\Tests\\Cli\\": "tests/cli/", "Phalcon\\Tests\\Database\\": "tests/database/", @@ -63,9 +73,9 @@ "codeception/module-redis": "^3.0", "friendsofphp/php-cs-fixer": "^3.13", "pds/skeleton": "^1.0", + "phpbench/phpbench": "^1.2", "phpstan/phpstan": "^1.10", "squizlabs/php_codesniffer": "^3.7", - "vimeo/psalm": "^5.4", "vlucas/phpdotenv": "^5.5" }, "scripts": { diff --git a/composer.lock b/composer.lock index 7781a2c19..c4c80ba4e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,161 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "32a84d449d696ebd9686926c1ffdc4fa", + "content-hash": "2317a1200d8ba741a59b561ab79ce847", "packages": [ - { - "name": "doctrine/annotations", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^2 || ^3", - "ext-tokenizer": "*", - "php": "^7.2 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^2.0", - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^5.4 || ^6", - "vimeo/psalm": "^4.10" - }, - "suggest": { - "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/2.0.1" - }, - "time": "2023-02-02T22:02:53+00:00" - }, - { - "name": "doctrine/lexer", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.21" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.1" - }, - "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%2Flexer", - "type": "tidelift" - } - ], - "time": "2024-02-05T11:56:58+00:00" - }, { "name": "payload-interop/payload-interop", "version": "1.0.0", @@ -259,37 +106,31 @@ "time": "2023-05-01T14:08:11+00:00" }, { - "name": "phpbench/container", - "version": "2.2.2", + "name": "psr/cache", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/phpbench/container.git", - "reference": "a59b929e00b87b532ca6d0edd8eca0967655af33" + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpbench/container/zipball/a59b929e00b87b532ca6d0edd8eca0967655af33", - "reference": "a59b929e00b87b532ca6d0edd8eca0967655af33", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { - "psr/container": "^1.0|^2.0", - "symfony/options-resolver": "^4.2 || ^5.0 || ^6.0 || ^7.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16", - "phpstan/phpstan": "^0.12.52", - "phpunit/phpunit": "^8" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "PhpBench\\DependencyInjection\\": "lib/" + "Psr\\Cache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -298,49 +139,47 @@ ], "authors": [ { - "name": "Daniel Leech", - "email": "daniel@dantleech.com" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Simple, configurable, service container.", + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], "support": { - "issues": "https://github.com/phpbench/container/issues", - "source": "https://github.com/phpbench/container/tree/2.2.2" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2023-10-30T13:38:26+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { - "name": "phpbench/dom", - "version": "0.3.3", + "name": "psr/container", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/phpbench/dom.git", - "reference": "786a96db538d0def931f5b19225233ec42ec7a72" + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpbench/dom/zipball/786a96db538d0def931f5b19225233ec42ec7a72", - "reference": "786a96db538d0def931f5b19225233ec42ec7a72", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { - "ext-dom": "*", - "php": "^7.3||^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.14", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.0||^9.0" + "php": ">=7.4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "PhpBench\\Dom\\": "lib/" + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -349,128 +188,37 @@ ], "authors": [ { - "name": "Daniel Leech", - "email": "daniel@dantleech.com" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "DOM wrapper to simplify working with the PHP DOM implementation", + "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/phpbench/dom/issues", - "source": "https://github.com/phpbench/dom/tree/0.3.3" + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2023-03-06T23:46:57+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { - "name": "phpbench/phpbench", - "version": "1.3.1", + "name": "psr/log", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/phpbench/phpbench.git", - "reference": "a3e1ef08d9d7736d43a7fbd444893d6a073c0ca0" + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpbench/phpbench/zipball/a3e1ef08d9d7736d43a7fbd444893d6a073c0ca0", - "reference": "a3e1ef08d9d7736d43a7fbd444893d6a073c0ca0", - "shasum": "" - }, - "require": { - "doctrine/annotations": "^2.0", - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "ext-tokenizer": "*", - "php": "^8.1", - "phpbench/container": "^2.2", - "phpbench/dom": "~0.3.3", - "psr/log": "^1.1 || ^2.0 || ^3.0", - "seld/jsonlint": "^1.1", - "symfony/console": "^6.1 || ^7.0", - "symfony/filesystem": "^6.1 || ^7.0", - "symfony/finder": "^6.1 || ^7.0", - "symfony/options-resolver": "^6.1 || ^7.0", - "symfony/process": "^6.1 || ^7.0", - "webmozart/glob": "^4.6" - }, - "require-dev": { - "dantleech/invoke": "^2.0", - "ergebnis/composer-normalize": "^2.39", - "friendsofphp/php-cs-fixer": "^3.0", - "jangregor/phpstan-prophecy": "^1.0", - "phpspec/prophecy": "dev-master", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^10.4", - "rector/rector": "^0.18.11 || ^1.0.0", - "symfony/error-handler": "^6.1 || ^7.0", - "symfony/var-dumper": "^6.1 || ^7.0" - }, - "suggest": { - "ext-xdebug": "For Xdebug profiling extension." - }, - "bin": [ - "bin/phpbench" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "files": [ - "lib/Report/Func/functions.php" - ], - "psr-4": { - "PhpBench\\": "lib/", - "PhpBench\\Extensions\\XDebug\\": "extensions/xdebug/lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Leech", - "email": "daniel@dantleech.com" - } - ], - "description": "PHP Benchmarking Framework", - "keywords": [ - "benchmarking", - "optimization", - "performance", - "profiling", - "testing" - ], - "support": { - "issues": "https://github.com/phpbench/phpbench/issues", - "source": "https://github.com/phpbench/phpbench/tree/1.3.1" - }, - "funding": [ - { - "url": "https://github.com/dantleech", - "type": "github" - } - ], - "time": "2024-06-30T11:04:37+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { @@ -479,12 +227,12 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Cache\\": "src/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -497,43 +245,54 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interface for caching libraries", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ - "cache", + "log", "psr", - "psr-6" + "psr-3" ], "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.0" }, - "time": "2021-02-03T23:26:27+00:00" - }, + "time": "2021-07-14T16:46:02+00:00" + } + ], + "packages-dev": [ { - "name": "psr/container", - "version": "2.0.2", + "name": "behat/gherkin", + "version": "v4.9.0", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + "url": "https://github.com/Behat/Gherkin.git", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/0bc8d1e30e96183e4f36db9dc79caead300beff4", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4", "shasum": "" }, "require": { - "php": ">=7.4.0" + "php": "~7.2|~8.0" + }, + "require-dev": { + "cucumber/cucumber": "dev-gherkin-22.0.0", + "phpunit/phpunit": "~8|~9", + "symfony/yaml": "~3|~4|~5" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "4.x-dev" } }, "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" + "psr-0": { + "Behat\\Gherkin": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -542,51 +301,53 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Gherkin DSL parser for PHP", + "homepage": "http://behat.org/", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" ], "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" + "issues": "https://github.com/Behat/Gherkin/issues", + "source": "https://github.com/Behat/Gherkin/tree/v4.9.0" }, - "time": "2021-11-05T16:47:00+00:00" + "time": "2021-10-12T13:05:09+00:00" }, { - "name": "psr/log", - "version": "3.0.0", + "name": "clue/ndjson-react", + "version": "v1.3.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "url": "https://github.com/clue/reactphp-ndjson.git", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": ">=5.3", + "react/stream": "^1.2" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", + "react/event-loop": "^1.2" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\Log\\": "src" + "Clue\\React\\NDJson\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -595,637 +356,118 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Christian Lück", + "email": "christian@clue.engineering" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", + "homepage": "https://github.com/clue/reactphp-ndjson", "keywords": [ - "log", - "psr", - "psr-3" + "NDJSON", + "json", + "jsonlines", + "newline", + "reactphp", + "streaming" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "issues": "https://github.com/clue/reactphp-ndjson/issues", + "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" }, - "time": "2021-07-14T16:46:02+00:00" + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-12-23T10:58:28+00:00" }, { - "name": "seld/jsonlint", - "version": "1.11.0", + "name": "codeception/codeception", + "version": "5.1.2", "source": { "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2" + "url": "https://github.com/Codeception/Codeception.git", + "reference": "3b2d7d1a88e7e1d9dc0acb6d3c8f0acda0a37374" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/1748aaf847fc731cfad7725aec413ee46f0cc3a2", - "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/3b2d7d1a88e7e1d9dc0acb6d3c8f0acda0a37374", + "reference": "3b2d7d1a88e7e1d9dc0acb6d3c8f0acda0a37374", "shasum": "" }, "require": { - "php": "^5.3 || ^7.0 || ^8.0" + "behat/gherkin": "^4.6.2", + "codeception/lib-asserts": "^2.0", + "codeception/stub": "^4.1", + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "phpunit/php-code-coverage": "^9.2 || ^10.0 || ^11.0", + "phpunit/php-text-template": "^2.0 || ^3.0 || ^4.0", + "phpunit/php-timer": "^5.0.3 || ^6.0 || ^7.0", + "phpunit/phpunit": "^9.5.20 || ^10.0 || ^11.0", + "psy/psysh": "^0.11.2 || ^0.12", + "sebastian/comparator": "^4.0.5 || ^5.0 || ^6.0", + "sebastian/diff": "^4.0.3 || ^5.0 || ^6.0", + "symfony/console": ">=4.4.24 <8.0", + "symfony/css-selector": ">=4.4.24 <8.0", + "symfony/event-dispatcher": ">=4.4.24 <8.0", + "symfony/finder": ">=4.4.24 <8.0", + "symfony/var-dumper": ">=4.4.24 <8.0", + "symfony/yaml": ">=4.4.24 <8.0" }, - "require-dev": { - "phpstan/phpstan": "^1.11", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" - }, - "bin": [ - "bin/jsonlint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "JSON Linter", - "keywords": [ - "json", - "linter", - "parser", - "validator" - ], - "support": { - "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.11.0" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", - "type": "tidelift" - } - ], - "time": "2024-07-11T14:55:45+00:00" - }, - { - "name": "symfony/console", - "version": "v6.4.10", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "504974cbe43d05f83b201d6498c206f16fc0cdbc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/504974cbe43d05f83b201d6498c206f16fc0cdbc", - "reference": "504974cbe43d05f83b201d6498c206f16fc0cdbc", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.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|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" - }, - "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.4.10" - }, - "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": "2024-07-26T12:30:32+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-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.5.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": "2024-04-18T09:32:20+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v6.4.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "b51ef8059159330b74a4d52f68e671033c0fe463" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b51ef8059159330b74a4d52f68e671033c0fe463", - "reference": "b51ef8059159330b74a4d52f68e671033c0fe463", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "require-dev": { - "symfony/process": "^5.4|^6.4|^7.0" - }, - "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.4.9" - }, - "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": "2024-06-28T09:49:33+00:00" - }, - { - "name": "symfony/finder", - "version": "v6.4.10", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "af29198d87112bebdd397bd7735fbd115997824c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/af29198d87112bebdd397bd7735fbd115997824c", - "reference": "af29198d87112bebdd397bd7735fbd115997824c", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/filesystem": "^6.0|^7.0" - }, - "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.4.10" - }, - "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": "2024-07-24T07:06:38+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "v6.4.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "22ab9e9101ab18de37839074f8a1197f55590c1b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/22ab9e9101ab18de37839074f8a1197f55590c1b", - "reference": "22ab9e9101ab18de37839074f8a1197f55590c1b", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^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.4.8" - }, - "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": "2024-05-31T14:49:08+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.30.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "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.30.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": "2024-05-31T15:07:36+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.30.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a" + "conflict": { + "codeception/lib-innerbrowser": "<3.1.3", + "codeception/module-filesystem": "<3.0", + "codeception/module-phpbrowser": "<2.5" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a", - "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a", - "shasum": "" + "replace": { + "codeception/phpunit-wrapper": "*" }, - "require": { - "php": ">=7.1" + "require-dev": { + "codeception/lib-innerbrowser": "*@dev", + "codeception/lib-web": "^1.0", + "codeception/module-asserts": "*@dev", + "codeception/module-cli": "*@dev", + "codeception/module-db": "*@dev", + "codeception/module-filesystem": "*@dev", + "codeception/module-phpbrowser": "*@dev", + "codeception/util-universalframework": "*@dev", + "ext-simplexml": "*", + "jetbrains/phpstorm-attributes": "^1.0", + "symfony/dotenv": ">=4.4.24 <8.0", + "symfony/process": ">=4.4.24 <8.0", + "vlucas/phpdotenv": "^5.1" }, "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "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.30.0" + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "ext-simplexml": "For loading params from XML files", + "stecman/symfony-console-completion": "For BASH autocompletion", + "symfony/dotenv": "For loading params from .env files", + "symfony/phpunit-bridge": "For phpunit-bridge support", + "vlucas/phpdotenv": "For loading params from .env files" }, - "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" - } + "bin": [ + "codecept" ], - "time": "2024-05-31T15:07:36+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.30.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb", - "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { "files": [ - "bootstrap.php" + "functions.php" ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + "Codeception\\": "src/Codeception", + "Codeception\\Extension\\": "ext" }, "classmap": [ - "Resources/stubs" + "src/PHPUnit/TestCase.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1234,80 +476,56 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Michael Bodnarchuk", + "email": "davert.ua@gmail.com", + "homepage": "https://codeception.com" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", + "description": "BDD-style testing framework", + "homepage": "https://codeception.com/", "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" + "BDD", + "TDD", + "acceptance testing", + "functional testing", + "unit testing" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0" + "issues": "https://github.com/Codeception/Codeception/issues", + "source": "https://github.com/Codeception/Codeception/tree/5.1.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" + "url": "https://opencollective.com/codeception", + "type": "open_collective" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-03-07T07:19:42+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.30.0", + "name": "codeception/lib-asserts", + "version": "2.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" + "url": "https://github.com/Codeception/lib-asserts.git", + "reference": "b8c7dff552249e560879c682ba44a4b963af91bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/b8c7dff552249e560879c682ba44a4b963af91bc", + "reference": "b8c7dff552249e560879c682ba44a4b963af91bc", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" + "codeception/phpunit-wrapper": "^7.7.1 | ^8.0.3 | ^9.0", + "ext-dom": "*", + "php": "^7.4 | ^8.0" }, "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1315,66 +533,52 @@ ], "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.30.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" }, { - "url": "https://github.com/fabpot", - "type": "github" + "name": "Gintautas Miselis" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "name": "Gustavo Nieves", + "homepage": "https://medium.com/@ganieves" } ], - "time": "2024-06-19T12:30:46+00:00" + "description": "Assertion methods used by Codeception core and Asserts module", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/lib-asserts/issues", + "source": "https://github.com/Codeception/lib-asserts/tree/2.1.0" + }, + "time": "2023-02-10T18:36:23+00:00" }, { - "name": "symfony/process", - "version": "v6.4.8", + "name": "codeception/module-apc", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5" + "url": "https://github.com/Codeception/module-apc.git", + "reference": "abe29ab930cdff0b9b7680f9656cf8b9bd6cb471" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5", - "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5", + "url": "https://api.github.com/repos/Codeception/module-apc/zipball/abe29ab930cdff0b9b7680f9656cf8b9bd6cb471", + "reference": "abe29ab930cdff0b9b7680f9656cf8b9bd6cb471", "shasum": "" }, "require": { - "php": ">=8.1" + "codeception/codeception": "^5.0", + "ext-apcu": "*", + "php": "^8.0" }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1383,73 +587,50 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Serghei Iakovlev" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Gintautas Miselis" } ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", + "description": "APC module for Codeception", + "homepage": "https://codeception.com/", + "keywords": [ + "apc", + "codeception" + ], "support": { - "source": "https://github.com/symfony/process/tree/v6.4.8" + "issues": "https://github.com/Codeception/module-apc/issues", + "source": "https://github.com/Codeception/module-apc/tree/3.0.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": "2024-05-31T14:49:08+00:00" + "time": "2022-05-26T04:55:52+00:00" }, { - "name": "symfony/service-contracts", - "version": "v3.5.0", + "name": "codeception/module-asserts", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "url": "https://github.com/Codeception/module-asserts.git", + "reference": "1b6b150b30586c3614e7e5761b31834ed7968603" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/1b6b150b30586c3614e7e5761b31834ed7968603", + "reference": "1b6b150b30586c3614e7e5761b31834ed7968603", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" + "codeception/codeception": "*@dev", + "codeception/lib-asserts": "^2.0", + "php": "^8.0" }, "conflict": { - "ext-psr": "<1.1|>=2" + "codeception/codeception": "<5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1458,84 +639,55 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Michael Bodnarchuk" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Gintautas Miselis" + }, + { + "name": "Gustavo Nieves", + "homepage": "https://medium.com/@ganieves" } ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", + "description": "Codeception module containing various assertions", + "homepage": "https://codeception.com/", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "assertions", + "asserts", + "codeception" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "issues": "https://github.com/Codeception/module-asserts/issues", + "source": "https://github.com/Codeception/module-asserts/tree/3.0.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": "2024-04-18T09:32:20+00:00" + "time": "2022-02-16T19:48:08+00:00" }, { - "name": "symfony/string", - "version": "v6.4.10", + "name": "codeception/module-cli", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "ccf9b30251719567bfd46494138327522b9a9446" + "url": "https://github.com/Codeception/module-cli.git", + "reference": "a3a101fae4049fa2f810107f7bd5db3b3266ce63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ccf9b30251719567bfd46494138327522b9a9446", - "reference": "ccf9b30251719567bfd46494138327522b9a9446", + "url": "https://api.github.com/repos/Codeception/module-cli/zipball/a3a101fae4049fa2f810107f7bd5db3b3266ce63", + "reference": "a3a101fae4049fa2f810107f7bd5db3b3266ce63", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "codeception/codeception": "*@dev", + "codeception/module-asserts": "*", + "php": "^7.4 || ^8.0" }, "conflict": { - "symfony/translation-contracts": "<2.5" - }, - "require-dev": { - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/intl": "^6.2|^7.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "codeception/codeception": "<4.0" }, "type": "library", "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1544,74 +696,52 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Michael Bodnarchuk" } ], - "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", + "description": "Codeception module for testing basic shell commands and shell output", + "homepage": "https://codeception.com/", "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" + "codeception" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.10" + "issues": "https://github.com/Codeception/module-cli/issues", + "source": "https://github.com/Codeception/module-cli/tree/2.0.1" }, - "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": "2024-07-22T10:21:14+00:00" + "time": "2023-01-13T18:41:03+00:00" }, { - "name": "webmozart/glob", - "version": "4.7.0", + "name": "codeception/module-db", + "version": "3.1.4", "source": { "type": "git", - "url": "https://github.com/webmozarts/glob.git", - "reference": "8a2842112d6916e61e0e15e316465b611f3abc17" + "url": "https://github.com/Codeception/module-db.git", + "reference": "06be16dcf4dda46eaef9454f1361d62bcb971c36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/glob/zipball/8a2842112d6916e61e0e15e316465b611f3abc17", - "reference": "8a2842112d6916e61e0e15e316465b611f3abc17", + "url": "https://api.github.com/repos/Codeception/module-db/zipball/06be16dcf4dda46eaef9454f1361d62bcb971c36", + "reference": "06be16dcf4dda46eaef9454f1361d62bcb971c36", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0.0" + "codeception/codeception": "*@dev", + "ext-json": "*", + "ext-mbstring": "*", + "ext-pdo": "*", + "php": "^8.0" + }, + "conflict": { + "codeception/codeception": "<5.0" }, "require-dev": { - "phpunit/phpunit": "^9.5", - "symfony/filesystem": "^5.3" + "squizlabs/php_codesniffer": "*" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.1-dev" - } - }, "autoload": { - "psr-4": { - "Webmozart\\Glob\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1619,59 +749,52 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Michael Bodnarchuk" + }, + { + "name": "Gintautas Miselis" } ], - "description": "A PHP implementation of Ant's glob.", + "description": "DB module for Codeception", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception", + "database-testing", + "db-testing" + ], "support": { - "issues": "https://github.com/webmozarts/glob/issues", - "source": "https://github.com/webmozarts/glob/tree/4.7.0" + "issues": "https://github.com/Codeception/module-db/issues", + "source": "https://github.com/Codeception/module-db/tree/3.1.4" }, - "time": "2024-03-07T20:33:40+00:00" - } - ], - "packages-dev": [ + "time": "2024-05-16T20:12:18+00:00" + }, { - "name": "amphp/amp", - "version": "v2.6.4", + "name": "codeception/module-filesystem", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/amphp/amp.git", - "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" + "url": "https://github.com/Codeception/module-filesystem.git", + "reference": "0fd78cf941cb72dc2a650c6132c5999c26ad4f9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", - "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "url": "https://api.github.com/repos/Codeception/module-filesystem/zipball/0fd78cf941cb72dc2a650c6132c5999c26ad4f9a", + "reference": "0fd78cf941cb72dc2a650c6132c5999c26ad4f9a", "shasum": "" }, "require": { - "php": ">=7.1" + "codeception/codeception": "*@dev", + "php": "^8.0", + "symfony/finder": "^4.4 || ^5.4 || ^6.0 || ^7.0" }, - "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", - "react/promise": "^2", - "vimeo/psalm": "^3.12" + "conflict": { + "codeception/codeception": "<5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, "autoload": { - "files": [ - "lib/functions.php", - "lib/Internal/functions.php" - ], - "psr-4": { - "Amp\\": "lib" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1679,82 +802,51 @@ ], "authors": [ { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" + "name": "Michael Bodnarchuk" }, { - "name": "Niklas Keller", - "email": "me@kelunik.com" + "name": "Gintautas Miselis" } ], - "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "https://amphp.org/amp", + "description": "Codeception module for testing local filesystem", + "homepage": "https://codeception.com/", "keywords": [ - "async", - "asynchronous", - "awaitable", - "concurrency", - "event", - "event-loop", - "future", - "non-blocking", - "promise" + "codeception", + "filesystem" ], "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.4" + "issues": "https://github.com/Codeception/module-filesystem/issues", + "source": "https://github.com/Codeception/module-filesystem/tree/3.0.1" }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-03-21T18:52:26+00:00" + "time": "2023-12-08T19:23:28+00:00" }, { - "name": "amphp/byte-stream", - "version": "v1.8.2", + "name": "codeception/module-memcache", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/amphp/byte-stream.git", - "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" + "url": "https://github.com/Codeception/module-memcache.git", + "reference": "9d1149997a4f6dbf713ec2529992536f6b8e28b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", - "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", + "url": "https://api.github.com/repos/Codeception/module-memcache/zipball/9d1149997a4f6dbf713ec2529992536f6b8e28b5", + "reference": "9d1149997a4f6dbf713ec2529992536f6b8e28b5", "shasum": "" }, "require": { - "amphp/amp": "^2", - "php": ">=7.1" + "codeception/codeception": "^5.0", + "php": "^8.0" }, "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" + "ext-memcache": "*", + "ext-memcached": "*" }, "type": "library", "autoload": { - "files": [ - "lib/functions.php" - ], - "psr-4": { - "Amp\\ByteStream\\": "lib" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1762,71 +854,49 @@ ], "authors": [ { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" + "name": "Michael Bodnarchuk" } ], - "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "https://amphp.org/byte-stream", + "description": "Memcache module for Codeception", + "homepage": "https://codeception.com/", "keywords": [ - "amp", - "amphp", - "async", - "io", - "non-blocking", - "stream" + "codeception", + "memcache" ], "support": { - "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v1.8.2" + "issues": "https://github.com/Codeception/module-memcache/issues", + "source": "https://github.com/Codeception/module-memcache/tree/3.0.0" }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-04-13T18:00:56+00:00" + "time": "2022-05-27T05:48:49+00:00" }, { - "name": "behat/gherkin", - "version": "v4.9.0", + "name": "codeception/module-redis", + "version": "3.2.0", "source": { "type": "git", - "url": "https://github.com/Behat/Gherkin.git", - "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4" + "url": "https://github.com/Codeception/module-redis.git", + "reference": "2ebfca5cb70e054b7ad82a6c3a129010ed037a03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/0bc8d1e30e96183e4f36db9dc79caead300beff4", - "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4", + "url": "https://api.github.com/repos/Codeception/module-redis/zipball/2ebfca5cb70e054b7ad82a6c3a129010ed037a03", + "reference": "2ebfca5cb70e054b7ad82a6c3a129010ed037a03", "shasum": "" }, "require": { - "php": "~7.2|~8.0" + "codeception/codeception": "^5.0", + "php": "^8.0", + "predis/predis": "^1.1 | ^2.0", + "sebastian/comparator": "^4.0 | ^5.0 | ^6.0" }, "require-dev": { - "cucumber/cucumber": "dev-gherkin-22.0.0", - "phpunit/phpunit": "~8|~9", - "symfony/yaml": "~3|~4|~5" - }, - "suggest": { - "symfony/yaml": "If you want to parse features, represented in YAML files" + "codeception/stub": "^4.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, "autoload": { - "psr-0": { - "Behat\\Gherkin": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1834,174 +904,105 @@ ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Michael Bodnarchuk" + }, + { + "name": "Dmitriy Maltsev" } ], - "description": "Gherkin DSL parser for PHP", - "homepage": "http://behat.org/", + "description": "Redis module for Codeception", + "homepage": "https://codeception.com/", "keywords": [ - "BDD", - "Behat", - "Cucumber", - "DSL", - "gherkin", - "parser" + "codeception", + "redis" ], "support": { - "issues": "https://github.com/Behat/Gherkin/issues", - "source": "https://github.com/Behat/Gherkin/tree/v4.9.0" + "issues": "https://github.com/Codeception/module-redis/issues", + "source": "https://github.com/Codeception/module-redis/tree/3.2.0" }, - "time": "2021-10-12T13:05:09+00:00" + "time": "2024-07-28T11:46:00+00:00" }, { - "name": "clue/ndjson-react", - "version": "v1.3.0", + "name": "codeception/stub", + "version": "4.1.3", "source": { "type": "git", - "url": "https://github.com/clue/reactphp-ndjson.git", - "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" + "url": "https://github.com/Codeception/Stub.git", + "reference": "4fcad2c165f365377486dc3fd8703b07f1f2fcae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", - "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/4fcad2c165f365377486dc3fd8703b07f1f2fcae", + "reference": "4fcad2c165f365377486dc3fd8703b07f1f2fcae", "shasum": "" }, "require": { - "php": ">=5.3", - "react/stream": "^1.2" + "php": "^7.4 | ^8.0", + "phpunit/phpunit": "^8.4 | ^9.0 | ^10.0 | ^11" + }, + "conflict": { + "codeception/codeception": "<5.0.6" }, "require-dev": { - "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", - "react/event-loop": "^1.2" + "consolidation/robo": "^3.0" }, "type": "library", "autoload": { "psr-4": { - "Clue\\React\\NDJson\\": "src/" + "Codeception\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering" - } - ], - "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", - "homepage": "https://github.com/clue/reactphp-ndjson", - "keywords": [ - "NDJSON", - "json", - "jsonlines", - "newline", - "reactphp", - "streaming" - ], + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", "support": { - "issues": "https://github.com/clue/reactphp-ndjson/issues", - "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" + "issues": "https://github.com/Codeception/Stub/issues", + "source": "https://github.com/Codeception/Stub/tree/4.1.3" }, - "funding": [ - { - "url": "https://clue.engineering/support", - "type": "custom" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-12-23T10:58:28+00:00" + "time": "2024-02-02T19:21:00+00:00" }, { - "name": "codeception/codeception", - "version": "5.1.2", + "name": "composer/pcre", + "version": "3.2.0", "source": { "type": "git", - "url": "https://github.com/Codeception/Codeception.git", - "reference": "3b2d7d1a88e7e1d9dc0acb6d3c8f0acda0a37374" + "url": "https://github.com/composer/pcre.git", + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/3b2d7d1a88e7e1d9dc0acb6d3c8f0acda0a37374", - "reference": "3b2d7d1a88e7e1d9dc0acb6d3c8f0acda0a37374", + "url": "https://api.github.com/repos/composer/pcre/zipball/ea4ab6f9580a4fd221e0418f2c357cdd39102a90", + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90", "shasum": "" }, "require": { - "behat/gherkin": "^4.6.2", - "codeception/lib-asserts": "^2.0", - "codeception/stub": "^4.1", - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "php": "^8.0", - "phpunit/php-code-coverage": "^9.2 || ^10.0 || ^11.0", - "phpunit/php-text-template": "^2.0 || ^3.0 || ^4.0", - "phpunit/php-timer": "^5.0.3 || ^6.0 || ^7.0", - "phpunit/phpunit": "^9.5.20 || ^10.0 || ^11.0", - "psy/psysh": "^0.11.2 || ^0.12", - "sebastian/comparator": "^4.0.5 || ^5.0 || ^6.0", - "sebastian/diff": "^4.0.3 || ^5.0 || ^6.0", - "symfony/console": ">=4.4.24 <8.0", - "symfony/css-selector": ">=4.4.24 <8.0", - "symfony/event-dispatcher": ">=4.4.24 <8.0", - "symfony/finder": ">=4.4.24 <8.0", - "symfony/var-dumper": ">=4.4.24 <8.0", - "symfony/yaml": ">=4.4.24 <8.0" + "php": "^7.4 || ^8.0" }, "conflict": { - "codeception/lib-innerbrowser": "<3.1.3", - "codeception/module-filesystem": "<3.0", - "codeception/module-phpbrowser": "<2.5" - }, - "replace": { - "codeception/phpunit-wrapper": "*" + "phpstan/phpstan": "<1.11.8" }, "require-dev": { - "codeception/lib-innerbrowser": "*@dev", - "codeception/lib-web": "^1.0", - "codeception/module-asserts": "*@dev", - "codeception/module-cli": "*@dev", - "codeception/module-db": "*@dev", - "codeception/module-filesystem": "*@dev", - "codeception/module-phpbrowser": "*@dev", - "codeception/util-universalframework": "*@dev", - "ext-simplexml": "*", - "jetbrains/phpstorm-attributes": "^1.0", - "symfony/dotenv": ">=4.4.24 <8.0", - "symfony/process": ">=4.4.24 <8.0", - "vlucas/phpdotenv": "^5.1" - }, - "suggest": { - "codeception/specify": "BDD-style code blocks", - "codeception/verify": "BDD-style assertions", - "ext-simplexml": "For loading params from XML files", - "stecman/symfony-console-completion": "For BASH autocompletion", - "symfony/dotenv": "For loading params from .env files", - "symfony/phpunit-bridge": "For phpunit-bridge support", - "vlucas/phpdotenv": "For loading params from .env files" + "phpstan/phpstan": "^1.11.8", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8 || ^9" }, - "bin": [ - "codecept" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, "autoload": { - "files": [ - "functions.php" - ], "psr-4": { - "Codeception\\": "src/Codeception", - "Codeception\\Extension\\": "ext" - }, - "classmap": [ - "src/PHPUnit/TestCase.php" - ] + "Composer\\Pcre\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2009,56 +1010,69 @@ ], "authors": [ { - "name": "Michael Bodnarchuk", - "email": "davert.ua@gmail.com", - "homepage": "https://codeception.com" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "BDD-style testing framework", - "homepage": "https://codeception.com/", + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", "keywords": [ - "BDD", - "TDD", - "acceptance testing", - "functional testing", - "unit testing" + "PCRE", + "preg", + "regex", + "regular expression" ], "support": { - "issues": "https://github.com/Codeception/Codeception/issues", - "source": "https://github.com/Codeception/Codeception/tree/5.1.2" + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.2.0" }, "funding": [ { - "url": "https://opencollective.com/codeception", - "type": "open_collective" + "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": "2024-03-07T07:19:42+00:00" + "time": "2024-07-25T09:36:02+00:00" }, { - "name": "codeception/lib-asserts", - "version": "2.1.0", + "name": "composer/semver", + "version": "3.4.2", "source": { "type": "git", - "url": "https://github.com/Codeception/lib-asserts.git", - "reference": "b8c7dff552249e560879c682ba44a4b963af91bc" + "url": "https://github.com/composer/semver.git", + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/b8c7dff552249e560879c682ba44a4b963af91bc", - "reference": "b8c7dff552249e560879c682ba44a4b963af91bc", + "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", "shasum": "" }, "require": { - "codeception/phpunit-wrapper": "^7.7.1 | ^8.0.3 | ^9.0", - "ext-dom": "*", - "php": "^7.4 | ^8.0" + "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": { - "classmap": [ - "src/" - ] + "psr-4": { + "Composer\\Semver\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2066,53 +1080,78 @@ ], "authors": [ { - "name": "Michael Bodnarchuk", - "email": "davert@mail.ua", - "homepage": "http://codegyre.com" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" }, { - "name": "Gintautas Miselis" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" }, { - "name": "Gustavo Nieves", - "homepage": "https://medium.com/@ganieves" + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "Assertion methods used by Codeception core and Asserts module", - "homepage": "https://codeception.com/", + "description": "Semver library that offers utilities, version constraint parsing and validation.", "keywords": [ - "codeception" + "semantic", + "semver", + "validation", + "versioning" ], "support": { - "issues": "https://github.com/Codeception/lib-asserts/issues", - "source": "https://github.com/Codeception/lib-asserts/tree/2.1.0" + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.2" }, - "time": "2023-02-10T18:36:23+00:00" + "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": "2024-07-12T11:35:52+00:00" }, { - "name": "codeception/module-apc", - "version": "3.0.0", + "name": "composer/xdebug-handler", + "version": "3.0.5", "source": { "type": "git", - "url": "https://github.com/Codeception/module-apc.git", - "reference": "abe29ab930cdff0b9b7680f9656cf8b9bd6cb471" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-apc/zipball/abe29ab930cdff0b9b7680f9656cf8b9bd6cb471", - "reference": "abe29ab930cdff0b9b7680f9656cf8b9bd6cb471", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { - "codeception/codeception": "^5.0", - "ext-apcu": "*", - "php": "^8.0" + "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", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2120,51 +1159,72 @@ ], "authors": [ { - "name": "Serghei Iakovlev" - }, - { - "name": "Gintautas Miselis" + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "APC module for Codeception", - "homepage": "https://codeception.com/", + "description": "Restarts a process without Xdebug.", "keywords": [ - "apc", - "codeception" + "Xdebug", + "performance" ], "support": { - "issues": "https://github.com/Codeception/module-apc/issues", - "source": "https://github.com/Codeception/module-apc/tree/3.0.0" + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, - "time": "2022-05-26T04:55:52+00:00" + "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": "2024-05-06T16:37:16+00:00" }, { - "name": "codeception/module-asserts", - "version": "3.0.0", + "name": "doctrine/annotations", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/Codeception/module-asserts.git", - "reference": "1b6b150b30586c3614e7e5761b31834ed7968603" + "url": "https://github.com/doctrine/annotations.git", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/1b6b150b30586c3614e7e5761b31834ed7968603", - "reference": "1b6b150b30586c3614e7e5761b31834ed7968603", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", "shasum": "" }, "require": { - "codeception/codeception": "*@dev", - "codeception/lib-asserts": "^2.0", - "php": "^8.0" + "doctrine/lexer": "^2 || ^3", + "ext-tokenizer": "*", + "php": "^7.2 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" }, - "conflict": { - "codeception/codeception": "<5.0" + "require-dev": { + "doctrine/cache": "^2.0", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^5.4 || ^6", + "vimeo/psalm": "^4.10" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2172,56 +1232,68 @@ ], "authors": [ { - "name": "Michael Bodnarchuk" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" }, { - "name": "Gintautas Miselis" + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" }, { - "name": "Gustavo Nieves", - "homepage": "https://medium.com/@ganieves" + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Codeception module containing various assertions", - "homepage": "https://codeception.com/", + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", "keywords": [ - "assertions", - "asserts", - "codeception" + "annotations", + "docblock", + "parser" ], "support": { - "issues": "https://github.com/Codeception/module-asserts/issues", - "source": "https://github.com/Codeception/module-asserts/tree/3.0.0" + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/2.0.1" }, - "time": "2022-02-16T19:48:08+00:00" + "time": "2023-02-02T22:02:53+00:00" }, { - "name": "codeception/module-cli", - "version": "2.0.1", + "name": "doctrine/lexer", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/Codeception/module-cli.git", - "reference": "a3a101fae4049fa2f810107f7bd5db3b3266ce63" + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-cli/zipball/a3a101fae4049fa2f810107f7bd5db3b3266ce63", - "reference": "a3a101fae4049fa2f810107f7bd5db3b3266ce63", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { - "codeception/codeception": "*@dev", - "codeception/module-asserts": "*", - "php": "^7.4 || ^8.0" + "php": "^8.1" }, - "conflict": { - "codeception/codeception": "<4.0" + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2229,52 +1301,72 @@ ], "authors": [ { - "name": "Michael Bodnarchuk" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Codeception module for testing basic shell commands and shell output", - "homepage": "https://codeception.com/", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", "keywords": [ - "codeception" + "annotations", + "docblock", + "lexer", + "parser", + "php" ], "support": { - "issues": "https://github.com/Codeception/module-cli/issues", - "source": "https://github.com/Codeception/module-cli/tree/2.0.1" + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, - "time": "2023-01-13T18:41:03+00:00" + "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%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" }, { - "name": "codeception/module-db", - "version": "3.1.4", + "name": "evenement/evenement", + "version": "v3.0.2", "source": { "type": "git", - "url": "https://github.com/Codeception/module-db.git", - "reference": "06be16dcf4dda46eaef9454f1361d62bcb971c36" + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-db/zipball/06be16dcf4dda46eaef9454f1361d62bcb971c36", - "reference": "06be16dcf4dda46eaef9454f1361d62bcb971c36", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", "shasum": "" }, "require": { - "codeception/codeception": "*@dev", - "ext-json": "*", - "ext-mbstring": "*", - "ext-pdo": "*", - "php": "^8.0" - }, - "conflict": { - "codeception/codeception": "<5.0" + "php": ">=7.0" }, "require-dev": { - "squizlabs/php_codesniffer": "*" + "phpunit/phpunit": "^9 || ^6" }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Evenement\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2282,52 +1374,54 @@ ], "authors": [ { - "name": "Michael Bodnarchuk" - }, - { - "name": "Gintautas Miselis" + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" } ], - "description": "DB module for Codeception", - "homepage": "https://codeception.com/", + "description": "Événement is a very simple event dispatching library for PHP", "keywords": [ - "codeception", - "database-testing", - "db-testing" + "event-dispatcher", + "event-emitter" ], "support": { - "issues": "https://github.com/Codeception/module-db/issues", - "source": "https://github.com/Codeception/module-db/tree/3.1.4" + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/v3.0.2" }, - "time": "2024-05-16T20:12:18+00:00" + "time": "2023-08-08T05:53:35+00:00" }, { - "name": "codeception/module-filesystem", - "version": "3.0.1", + "name": "fidry/cpu-core-counter", + "version": "1.1.0", "source": { "type": "git", - "url": "https://github.com/Codeception/module-filesystem.git", - "reference": "0fd78cf941cb72dc2a650c6132c5999c26ad4f9a" + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-filesystem/zipball/0fd78cf941cb72dc2a650c6132c5999c26ad4f9a", - "reference": "0fd78cf941cb72dc2a650c6132c5999c26ad4f9a", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", "shasum": "" }, "require": { - "codeception/codeception": "*@dev", - "php": "^8.0", - "symfony/finder": "^4.4 || ^5.4 || ^6.0 || ^7.0" + "php": "^7.2 || ^8.0" }, - "conflict": { - "codeception/codeception": "<5.0" + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "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": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2335,50 +1429,95 @@ ], "authors": [ { - "name": "Michael Bodnarchuk" - }, - { - "name": "Gintautas Miselis" + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" } ], - "description": "Codeception module for testing local filesystem", - "homepage": "https://codeception.com/", + "description": "Tiny utility to get the number of CPU cores.", "keywords": [ - "codeception", - "filesystem" + "CPU", + "core" ], "support": { - "issues": "https://github.com/Codeception/module-filesystem/issues", - "source": "https://github.com/Codeception/module-filesystem/tree/3.0.1" + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" }, - "time": "2023-12-08T19:23:28+00:00" + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2024-02-07T09:43:46+00:00" }, { - "name": "codeception/module-memcache", - "version": "3.0.0", + "name": "friendsofphp/php-cs-fixer", + "version": "v3.60.0", "source": { "type": "git", - "url": "https://github.com/Codeception/module-memcache.git", - "reference": "9d1149997a4f6dbf713ec2529992536f6b8e28b5" + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "e595e4e070d17c5d42ed8c4206f630fcc5f401a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-memcache/zipball/9d1149997a4f6dbf713ec2529992536f6b8e28b5", - "reference": "9d1149997a4f6dbf713ec2529992536f6b8e28b5", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/e595e4e070d17c5d42ed8c4206f630fcc5f401a4", + "reference": "e595e4e070d17c5d42ed8c4206f630fcc5f401a4", "shasum": "" }, "require": { - "codeception/codeception": "^5.0", - "php": "^8.0" + "clue/ndjson-react": "^1.0", + "composer/semver": "^3.4", + "composer/xdebug-handler": "^3.0.3", + "ext-filter": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "fidry/cpu-core-counter": "^1.0", + "php": "^7.4 || ^8.0", + "react/child-process": "^0.6.5", + "react/event-loop": "^1.0", + "react/promise": "^2.0 || ^3.0", + "react/socket": "^1.0", + "react/stream": "^1.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.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.3", + "infection/infection": "^0.29.5", + "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.5", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5", + "phpunit/phpunit": "^9.6.19 || ^10.5.21 || ^11.2", + "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, - "require-dev": { - "ext-memcache": "*", - "ext-memcached": "*" + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." }, - "type": "library", + "bin": [ + "php-cs-fixer" + ], + "type": "application", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "exclude-from-classmap": [ + "src/Fixer/Internal/*" ] }, "notification-url": "https://packagist.org/downloads/", @@ -2387,49 +1526,59 @@ ], "authors": [ { - "name": "Michael Bodnarchuk" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" } ], - "description": "Memcache module for Codeception", - "homepage": "https://codeception.com/", + "description": "A tool to automatically fix PHP code style", "keywords": [ - "codeception", - "memcache" + "Static code analysis", + "fixer", + "standards", + "static analysis" ], "support": { - "issues": "https://github.com/Codeception/module-memcache/issues", - "source": "https://github.com/Codeception/module-memcache/tree/3.0.0" + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.60.0" }, - "time": "2022-05-27T05:48:49+00:00" + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2024-07-25T09:26:51+00:00" }, { - "name": "codeception/module-redis", - "version": "3.2.0", + "name": "graham-campbell/result-type", + "version": "v1.1.3", "source": { "type": "git", - "url": "https://github.com/Codeception/module-redis.git", - "reference": "2ebfca5cb70e054b7ad82a6c3a129010ed037a03" + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-redis/zipball/2ebfca5cb70e054b7ad82a6c3a129010ed037a03", - "reference": "2ebfca5cb70e054b7ad82a6c3a129010ed037a03", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", "shasum": "" }, "require": { - "codeception/codeception": "^5.0", - "php": "^8.0", - "predis/predis": "^1.1 | ^2.0", - "sebastian/comparator": "^4.0 | ^5.0 | ^6.0" + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3" }, "require-dev": { - "codeception/stub": "^4.0" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2437,391 +1586,389 @@ ], "authors": [ { - "name": "Michael Bodnarchuk" - }, - { - "name": "Dmitriy Maltsev" + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], - "description": "Redis module for Codeception", - "homepage": "https://codeception.com/", + "description": "An Implementation Of The Result Type", "keywords": [ - "codeception", - "redis" + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" ], "support": { - "issues": "https://github.com/Codeception/module-redis/issues", - "source": "https://github.com/Codeception/module-redis/tree/3.2.0" + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" }, - "time": "2024-07-28T11:46:00+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:45:45+00:00" }, { - "name": "codeception/stub", - "version": "4.1.3", + "name": "myclabs/deep-copy", + "version": "1.12.0", "source": { "type": "git", - "url": "https://github.com/Codeception/Stub.git", - "reference": "4fcad2c165f365377486dc3fd8703b07f1f2fcae" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Stub/zipball/4fcad2c165f365377486dc3fd8703b07f1f2fcae", - "reference": "4fcad2c165f365377486dc3fd8703b07f1f2fcae", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", "shasum": "" }, "require": { - "php": "^7.4 | ^8.0", - "phpunit/phpunit": "^8.4 | ^9.0 | ^10.0 | ^11" + "php": "^7.1 || ^8.0" }, "conflict": { - "codeception/codeception": "<5.0.6" + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { - "consolidation/robo": "^3.0" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], "psr-4": { - "Codeception\\": "src/" + "DeepCopy\\": "src/DeepCopy/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], "support": { - "issues": "https://github.com/Codeception/Stub/issues", - "source": "https://github.com/Codeception/Stub/tree/4.1.3" + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" }, - "time": "2024-02-02T19:21:00+00:00" + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2024-06-12T14:39:25+00:00" }, { - "name": "composer/pcre", - "version": "3.1.4", + "name": "nikic/php-parser", + "version": "v5.1.0", "source": { "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "04229f163664973f68f38f6f73d917799168ef24" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24", - "reference": "04229f163664973f68f38f6f73d917799168ef24", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" }, "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" }, + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { - "dev-main": "3.x-dev" + "dev-master": "5.0-dev" } }, "autoload": { "psr-4": { - "Composer\\Pcre\\": "src" + "PhpParser\\": "lib/PhpParser" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Nikita Popov" } ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "description": "A PHP parser written in PHP", "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" + "parser", + "php" ], "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.4" + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.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": "2024-07-01T20:03:41+00:00" + }, + { + "name": "pds/skeleton", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-pds/skeleton.git", + "reference": "95e476e5d629eadacbd721c5a9553e537514a231" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-pds/skeleton/zipball/95e476e5d629eadacbd721c5a9553e537514a231", + "reference": "95e476e5d629eadacbd721c5a9553e537514a231", + "shasum": "" + }, + "bin": [ + "bin/pds-skeleton" + ], + "type": "standard", + "autoload": { + "psr-4": { + "Pds\\Skeleton\\": "src/" } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "CC-BY-SA-4.0" ], - "time": "2024-05-27T13:40:54+00:00" + "description": "Standard for PHP package skeletons.", + "homepage": "https://github.com/php-pds/skeleton", + "support": { + "issues": "https://github.com/php-pds/skeleton/issues", + "source": "https://github.com/php-pds/skeleton/tree/1.x" + }, + "time": "2017-01-25T23:30:41+00:00" }, { - "name": "composer/semver", - "version": "3.4.2", + "name": "phar-io/manifest", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.2" + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, "funding": [ { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", + "url": "https://github.com/theseer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-07-12T11:35:52+00:00" + "time": "2024-03-03T12:33:53+00:00" }, { - "name": "composer/xdebug-handler", - "version": "3.0.5", + "name": "phar-io/version", + "version": "3.2.1", "source": { "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "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", - "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "url": "https://github.com/composer", - "type": "github" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-05-06T16:37:16+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/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" ], - "description": "implementation of xdg base directory specification for php", + "description": "Library for handling version information and constraints", "support": { - "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", - "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2019-12-04T15:06:13+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { - "name": "doctrine/deprecations", - "version": "1.1.3", + "name": "phpbench/container", + "version": "2.2.2", "source": { "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "url": "https://github.com/phpbench/container.git", + "reference": "a59b929e00b87b532ca6d0edd8eca0967655af33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/phpbench/container/zipball/a59b929e00b87b532ca6d0edd8eca0967655af33", + "reference": "a59b929e00b87b532ca6d0edd8eca0967655af33", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "psr/container": "^1.0|^2.0", + "symfony/options-resolver": "^4.2 || ^5.0 || ^6.0 || ^7.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" + "friendsofphp/php-cs-fixer": "^2.16", + "phpstan/phpstan": "^0.12.52", + "phpunit/phpunit": "^8" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "PhpBench\\DependencyInjection\\": "lib/" } }, "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/", + "authors": [ + { + "name": "Daniel Leech", + "email": "daniel@dantleech.com" + } + ], + "description": "Simple, configurable, service container.", "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "issues": "https://github.com/phpbench/container/issues", + "source": "https://github.com/phpbench/container/tree/2.2.2" }, - "time": "2024-01-30T19:34:25+00:00" + "time": "2023-10-30T13:38:26+00:00" }, { - "name": "evenement/evenement", - "version": "v3.0.2", + "name": "phpbench/dom", + "version": "0.3.3", "source": { "type": "git", - "url": "https://github.com/igorw/evenement.git", - "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" + "url": "https://github.com/phpbench/dom.git", + "reference": "786a96db538d0def931f5b19225233ec42ec7a72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", - "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", + "url": "https://api.github.com/repos/phpbench/dom/zipball/786a96db538d0def931f5b19225233ec42ec7a72", + "reference": "786a96db538d0def931f5b19225233ec42ec7a72", "shasum": "" }, "require": { - "php": ">=7.0" + "ext-dom": "*", + "php": "^7.3||^8.0" }, "require-dev": { - "phpunit/phpunit": "^9 || ^6" + "friendsofphp/php-cs-fixer": "^3.14", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.0||^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { "psr-4": { - "Evenement\\": "src/" + "PhpBench\\Dom\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2830,494 +1977,541 @@ ], "authors": [ { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" + "name": "Daniel Leech", + "email": "daniel@dantleech.com" } ], - "description": "Événement is a very simple event dispatching library for PHP", - "keywords": [ - "event-dispatcher", - "event-emitter" - ], + "description": "DOM wrapper to simplify working with the PHP DOM implementation", "support": { - "issues": "https://github.com/igorw/evenement/issues", - "source": "https://github.com/igorw/evenement/tree/v3.0.2" + "issues": "https://github.com/phpbench/dom/issues", + "source": "https://github.com/phpbench/dom/tree/0.3.3" }, - "time": "2023-08-08T05:53:35+00:00" + "time": "2023-03-06T23:46:57+00:00" }, { - "name": "felixfbecker/advanced-json-rpc", - "version": "v3.2.1", + "name": "phpbench/phpbench", + "version": "1.3.1", "source": { "type": "git", - "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" + "url": "https://github.com/phpbench/phpbench.git", + "reference": "a3e1ef08d9d7736d43a7fbd444893d6a073c0ca0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "url": "https://api.github.com/repos/phpbench/phpbench/zipball/a3e1ef08d9d7736d43a7fbd444893d6a073c0ca0", + "reference": "a3e1ef08d9d7736d43a7fbd444893d6a073c0ca0", "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" + "doctrine/annotations": "^2.0", + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "ext-tokenizer": "*", + "php": "^8.1", + "phpbench/container": "^2.2", + "phpbench/dom": "~0.3.3", + "psr/log": "^1.1 || ^2.0 || ^3.0", + "seld/jsonlint": "^1.1", + "symfony/console": "^6.1 || ^7.0", + "symfony/filesystem": "^6.1 || ^7.0", + "symfony/finder": "^6.1 || ^7.0", + "symfony/options-resolver": "^6.1 || ^7.0", + "symfony/process": "^6.1 || ^7.0", + "webmozart/glob": "^4.6" }, "require-dev": { - "phpunit/phpunit": "^7.0 || ^8.0" + "dantleech/invoke": "^2.0", + "ergebnis/composer-normalize": "^2.39", + "friendsofphp/php-cs-fixer": "^3.0", + "jangregor/phpstan-prophecy": "^1.0", + "phpspec/prophecy": "dev-master", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^10.4", + "rector/rector": "^0.18.11 || ^1.0.0", + "symfony/error-handler": "^6.1 || ^7.0", + "symfony/var-dumper": "^6.1 || ^7.0" + }, + "suggest": { + "ext-xdebug": "For Xdebug profiling extension." }, + "bin": [ + "bin/phpbench" + ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, "autoload": { + "files": [ + "lib/Report/Func/functions.php" + ], "psr-4": { - "AdvancedJsonRpc\\": "lib/" + "PhpBench\\": "lib/", + "PhpBench\\Extensions\\XDebug\\": "extensions/xdebug/lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "ISC" + "MIT" ], "authors": [ { - "name": "Felix Becker", - "email": "felix.b@outlook.com" + "name": "Daniel Leech", + "email": "daniel@dantleech.com" } ], - "description": "A more advanced JSONRPC implementation", + "description": "PHP Benchmarking Framework", + "keywords": [ + "benchmarking", + "optimization", + "performance", + "profiling", + "testing" + ], "support": { - "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", - "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" + "issues": "https://github.com/phpbench/phpbench/issues", + "source": "https://github.com/phpbench/phpbench/tree/1.3.1" }, - "time": "2021-06-11T22:34:44+00:00" + "funding": [ + { + "url": "https://github.com/dantleech", + "type": "github" + } + ], + "time": "2024-06-30T11:04:37+00:00" }, { - "name": "felixfbecker/language-server-protocol", - "version": "v1.5.2", + "name": "phpoption/phpoption", + "version": "1.9.3", "source": { "type": "git", - "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "*", - "squizlabs/php_codesniffer": "^3.1", - "vimeo/psalm": "^4.0" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "1.9-dev" } }, "autoload": { "psr-4": { - "LanguageServerProtocol\\": "src/" + "PhpOption\\": "src/PhpOption/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "ISC" + "Apache-2.0" ], "authors": [ { - "name": "Felix Becker", - "email": "felix.b@outlook.com" + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], - "description": "PHP classes for the Language Server Protocol", + "description": "Option Type for PHP", "keywords": [ "language", - "microsoft", + "option", "php", - "server" + "type" ], "support": { - "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" }, - "time": "2022-03-02T22:36:06+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:41:07+00:00" }, { - "name": "fidry/cpu-core-counter", - "version": "1.1.0", + "name": "phpstan/phpstan", + "version": "1.11.8", "source": { "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" + "url": "https://github.com/phpstan/phpstan.git", + "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec", + "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.2|^8.0" }, - "require-dev": { - "fidry/makefile": "^0.2.0", - "fidry/php-cs-fixer-config": "^1.1.2", - "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": "^8.5.31 || ^9.5.26", - "webmozarts/strict-phpunit": "^7.5" + "conflict": { + "phpstan/phpstan-shim": "*" }, + "bin": [ + "phpstan", + "phpstan.phar" + ], "type": "library", "autoload": { - "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" - } + "files": [ + "bootstrap.php" + ] }, "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.", + "description": "PHPStan - PHP Static Analysis Tool", "keywords": [ - "CPU", - "core" + "dev", + "static analysis" ], "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, "funding": [ { - "url": "https://github.com/theofidry", + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", "type": "github" } ], - "time": "2024-02-07T09:43:46+00:00" + "time": "2024-07-24T07:01:22+00:00" }, { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.60.0", + "name": "phpunit/php-code-coverage", + "version": "10.1.15", "source": { "type": "git", - "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "e595e4e070d17c5d42ed8c4206f630fcc5f401a4" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/e595e4e070d17c5d42ed8c4206f630fcc5f401a4", - "reference": "e595e4e070d17c5d42ed8c4206f630fcc5f401a4", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae", + "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae", "shasum": "" }, "require": { - "clue/ndjson-react": "^1.0", - "composer/semver": "^3.4", - "composer/xdebug-handler": "^3.0.3", - "ext-filter": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "fidry/cpu-core-counter": "^1.0", - "php": "^7.4 || ^8.0", - "react/child-process": "^0.6.5", - "react/event-loop": "^1.0", - "react/promise": "^2.0 || ^3.0", - "react/socket": "^1.0", - "react/stream": "^1.0", - "sebastian/diff": "^4.0 || ^5.0 || ^6.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" + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "facile-it/paraunit": "^1.3 || ^2.3", - "infection/infection": "^0.29.5", - "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.5", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5", - "phpunit/phpunit": "^9.6.19 || ^10.5.21 || ^11.2", - "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "phpunit/phpunit": "^10.1" }, "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." + "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-main": "10.1-dev" + } }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", "autoload": { - "psr-4": { - "PhpCsFixer\\": "src/" - }, - "exclude-from-classmap": [ - "src/Fixer/Internal/*" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A tool to automatically fix PHP code style", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "Static code analysis", - "fixer", - "standards", - "static analysis" + "coverage", + "testing", + "xunit" ], "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.60.0" + "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/10.1.15" }, "funding": [ { - "url": "https://github.com/keradus", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2024-07-25T09:26:51+00:00" + "time": "2024-06-29T08:25:15+00:00" }, { - "name": "graham-campbell/result-type", - "version": "v1.1.3", + "name": "phpunit/php-file-iterator", + "version": "4.1.0", "source": { "type": "git", - "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\ResultType\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "An Implementation Of The Result Type", + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Result Type", - "Result-Type", - "result" + "filesystem", + "iterator" ], "support": { - "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, "funding": [ { - "url": "https://github.com/GrahamCampbell", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", - "type": "tidelift" } ], - "time": "2024-07-20T21:45:45+00:00" + "time": "2023-08-31T06:24:48+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.12.0", + "name": "phpunit/php-invoker", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" + "php": ">=8.1" }, "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "Create deep copies (clones) of your objects", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "process" ], "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2024-06-12T14:39:25+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { - "name": "netresearch/jsonmapper", - "version": "v4.4.1", + "name": "phpunit/php-text-template", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/132c75c7dd83e45353ebb9c6c9f591952995bbf0", - "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=7.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", - "squizlabs/php_codesniffer": "~3.5" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "psr-0": { - "JsonMapper": "src/" + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "OSL-3.0" + "BSD-3-Clause" ], "authors": [ { - "name": "Christian Weiske", - "email": "cweiske@cweiske.de", - "homepage": "http://github.com/cweiske/jsonmapper/", - "role": "Developer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Map nested JSON structures onto PHP classes", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], "support": { - "email": "cweiske@cweiske.de", - "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, - "time": "2024-01-31T06:18:54+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.19.1", + "name": "phpunit/php-timer", + "version": "6.0.0", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.1" + "php": ">=8.1" }, "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^10.0" }, - "bin": [ - "bin/php-parse" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-main": "6.0-dev" } }, "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3325,84 +2519,86 @@ ], "authors": [ { - "name": "Nikita Popov" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A PHP parser written in PHP", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "parser", - "php" + "timer" ], "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" - }, - "time": "2024-03-17T08:10:35+00:00" - }, - { - "name": "pds/skeleton", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-pds/skeleton.git", - "reference": "95e476e5d629eadacbd721c5a9553e537514a231" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-pds/skeleton/zipball/95e476e5d629eadacbd721c5a9553e537514a231", - "reference": "95e476e5d629eadacbd721c5a9553e537514a231", - "shasum": "" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, - "bin": [ - "bin/pds-skeleton" - ], - "type": "standard", - "autoload": { - "psr-4": { - "Pds\\Skeleton\\": "src/" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "CC-BY-SA-4.0" ], - "description": "Standard for PHP package skeletons.", - "homepage": "https://github.com/php-pds/skeleton", - "support": { - "issues": "https://github.com/php-pds/skeleton/issues", - "source": "https://github.com/php-pds/skeleton/tree/1.x" - }, - "time": "2017-01-25T23:30:41+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { - "name": "phar-io/manifest", - "version": "2.0.4", + "name": "phpunit/phpunit", + "version": "10.5.28", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "ff7fb85cdf88131b83e721fb2a327b664dbed275" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ff7fb85cdf88131b83e721fb2a327b664dbed275", + "reference": "ff7fb85cdf88131b83e721fb2a327b664dbed275", "shasum": "" }, "require": { "ext-dom": "*", + "ext-json": "*", "ext-libxml": "*", - "ext-phar": "*", + "ext-mbstring": "*", + "ext-xml": "*", "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "myclabs/deep-copy": "^1.12.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.15", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.1", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.2", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.0", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" }, + "bin": [ + "phpunit" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "10.5-dev" } }, "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], "classmap": [ "src/" ] @@ -3412,112 +2608,127 @@ "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" + "role": "lead" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.28" }, "funding": [ { - "url": "https://github.com/theseer", + "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": "2024-03-03T12:33:53+00:00" + "time": "2024-07-18T14:54:16+00:00" }, { - "name": "phar-io/version", - "version": "3.2.1", + "name": "predis/predis", + "version": "v2.2.2", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + "url": "https://github.com/predis/predis.git", + "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "url": "https://api.github.com/repos/predis/predis/zipball/b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", + "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.3", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^8.0 || ~9.4.4" + }, + "suggest": { + "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" + }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Predis\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "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" + "name": "Till Krüss", + "homepage": "https://till.im", + "role": "Maintainer" } ], - "description": "Library for handling version information and constraints", + "description": "A flexible and feature-complete Redis client for PHP.", + "homepage": "http://github.com/predis/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" + "issues": "https://github.com/predis/predis/issues", + "source": "https://github.com/predis/predis/tree/v2.2.2" }, - "time": "2022-02-21T01:04:05+00:00" + "funding": [ + { + "url": "https://github.com/sponsors/tillkruss", + "type": "github" + } + ], + "time": "2023-09-13T16:42:03+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "name": "psr/event-dispatcher", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=7.2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-2.x": "2.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src/" + "Psr\\EventDispatcher\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3526,66 +2737,74 @@ ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "Standard interfaces for event handling.", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" + "events", + "psr", + "psr-14" ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" }, - "time": "2020-06-27T09:03:43+00:00" + "time": "2019-01-08T18:20:26+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "5.4.1", + "name": "psy/psysh", + "version": "v0.12.4", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c" + "url": "https://github.com/bobthecow/psysh.git", + "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", - "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", + "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.1", - "ext-filter": "*", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.7", - "webmozart/assert": "^1.9.1" + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { - "mockery/mockery": "~1.3.5", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-webmozart-assert": "^1.2", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^5.13" + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, + "bin": [ + "bin/psysh" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "5.x-dev" + "dev-main": "0.12.x-dev" + }, + "bamarni-bin": { + "bin-links": false, + "forward-command": false } }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "Psy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3594,60 +2813,50 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1" + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" }, - "time": "2024-05-21T05:55:05+00:00" + "time": "2024-06-10T01:18:23+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "1.8.2", + "name": "react/cache", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "153ae662783729388a584b4361f2545e4d841e3c" + "url": "https://github.com/reactphp/cache.git", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", - "reference": "153ae662783729388a584b4361f2545e4d841e3c", + "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.3 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" }, "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" + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" }, "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "React\\Cache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3656,471 +2865,515 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/cache/issues", + "source": "https://github.com/reactphp/cache/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "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.8.2" - }, - "time": "2024-02-23T11:10:43+00:00" + "time": "2022-11-30T15:59:55+00:00" }, { - "name": "phpoption/phpoption", - "version": "1.9.3", + "name": "react/child-process", + "version": "v0.6.5", "source": { "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" + "url": "https://github.com/reactphp/child-process.git", + "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", + "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0" + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/event-loop": "^1.2", + "react/stream": "^1.2" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", + "react/socket": "^1.8", + "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" }, "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "1.9-dev" - } - }, "autoload": { "psr-4": { - "PhpOption\\": "src/PhpOption/" + "React\\ChildProcess\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "MIT" ], "authors": [ { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" }, { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Option Type for PHP", + "description": "Event-driven library for executing child processes with ReactPHP.", "keywords": [ - "language", - "option", - "php", - "type" + "event-driven", + "process", + "reactphp" ], "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" + "issues": "https://github.com/reactphp/child-process/issues", + "source": "https://github.com/reactphp/child-process/tree/v0.6.5" }, "funding": [ { - "url": "https://github.com/GrahamCampbell", + "url": "https://github.com/WyriHaximus", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" + "url": "https://github.com/clue", + "type": "github" } ], - "time": "2024-07-20T21:41:07+00:00" + "time": "2022-09-16T13:41:56+00:00" }, { - "name": "phpstan/phpdoc-parser", - "version": "1.29.1", + "name": "react/dns", + "version": "v1.13.0", "source": { "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4" + "url": "https://github.com/reactphp/dns.git", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4", - "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4", + "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.7 || ^1.2.1" }, "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" + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3 || ^2", + "react/promise-timer": "^1.11" }, "type": "library", "autoload": { "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] + "React\\Dns\\": "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.29.1" - }, - "time": "2024-05-31T08:52:43+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "1.11.8", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec", - "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } ], - "description": "PHPStan - PHP Static Analysis Tool", + "description": "Async DNS resolver for ReactPHP", "keywords": [ - "dev", - "static analysis" + "async", + "dns", + "dns-resolver", + "reactphp" ], "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", - "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" + "issues": "https://github.com/reactphp/dns/issues", + "source": "https://github.com/reactphp/dns/tree/v1.13.0" }, "funding": [ { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2024-07-24T07:01:22+00:00" + "time": "2024-06-13T14:18:03+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "10.1.15", + "name": "react/event-loop", + "version": "v1.5.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae" + "url": "https://github.com/reactphp/event-loop.git", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae", - "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-text-template": "^3.0", - "sebastian/code-unit-reverse-lookup": "^3.0", - "sebastian/complexity": "^3.0", - "sebastian/environment": "^6.0", - "sebastian/lines-of-code": "^2.0", - "sebastian/version": "^4.0", - "theseer/tokenizer": "^1.2.0" + "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^10.1" + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" }, "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "10.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "React\\EventLoop\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", "keywords": [ - "coverage", - "testing", - "xunit" + "asynchronous", + "event-loop" ], "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/10.1.15" + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2024-06-29T08:25:15+00:00" + "time": "2023-11-13T13:48:05+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "4.1.0", + "name": "react/promise", + "version": "v3.2.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + "url": "https://github.com/reactphp/promise.git", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.1.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "description": "A lightweight implementation of CommonJS Promises/A for PHP", "keywords": [ - "filesystem", - "iterator" + "promise", + "promises" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.2.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2023-08-31T06:24:48+00:00" + "time": "2024-05-24T10:39:05+00:00" }, { - "name": "phpunit/php-invoker", - "version": "4.0.0", + "name": "react/socket", + "version": "v1.16.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + "url": "https://github.com/reactphp/socket.git", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", "shasum": "" }, "require": { - "php": ">=8.1" + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.13", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" }, "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" - }, - "suggest": { - "ext-pcntl": "*" + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3.3 || ^2", + "react/promise-stream": "^1.4", + "react/promise-timer": "^1.11" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "React\\Socket\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", "keywords": [ - "process" + "Connection", + "Socket", + "async", + "reactphp", + "stream" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + "issues": "https://github.com/reactphp/socket/issues", + "source": "https://github.com/reactphp/socket/tree/v1.16.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2023-02-03T06:56:09+00:00" + "time": "2024-07-26T10:38:09+00:00" }, { - "name": "phpunit/php-text-template", - "version": "3.0.1", + "name": "react/stream", + "version": "v1.4.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + "url": "https://github.com/reactphp/stream.git", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", "shasum": "" }, "require": { - "php": ">=8.1" + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "React\\Stream\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", "keywords": [ - "template" + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.4.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2023-08-31T14:07:24+00:00" + "time": "2024-06-11T12:45:25+00:00" }, { - "name": "phpunit/php-timer", - "version": "6.0.0", + "name": "sebastian/cli-parser", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { @@ -4132,7 +3385,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -4151,14 +3404,12 @@ "role": "lead" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" }, "funding": [ { @@ -4166,66 +3417,35 @@ "type": "github" } ], - "time": "2023-02-03T06:57:52+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { - "name": "phpunit/phpunit", - "version": "10.5.28", + "name": "sebastian/code-unit", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "ff7fb85cdf88131b83e721fb2a327b664dbed275" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ff7fb85cdf88131b83e721fb2a327b664dbed275", - "reference": "ff7fb85cdf88131b83e721fb2a327b664dbed275", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.15", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-invoker": "^4.0.0", - "phpunit/php-text-template": "^3.0.1", - "phpunit/php-timer": "^6.0.0", - "sebastian/cli-parser": "^2.0.1", - "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.1", - "sebastian/diff": "^5.1.1", - "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.2", - "sebastian/global-state": "^6.0.2", - "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.0", - "sebastian/type": "^4.0.0", - "sebastian/version": "^4.0.1" + "php": ">=8.1" }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" + "require-dev": { + "phpunit/phpunit": "^10.0" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { "branch-alias": { - "dev-main": "10.5-dev" + "dev-main": "2.0-dev" } }, "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], "classmap": [ "src/" ] @@ -4241,766 +3461,663 @@ "role": "lead" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.28" + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "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": "2024-07-18T14:54:16+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { - "name": "predis/predis", - "version": "v2.2.2", + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/predis/predis.git", - "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", - "reference": "b1d3255ed9ad4d7254f9f9bba386c99f4bb983d1", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=8.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.3", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^8.0 || ~9.4.4" - }, - "suggest": { - "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "psr-4": { - "Predis\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Till Krüss", - "homepage": "https://till.im", - "role": "Maintainer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "A flexible and feature-complete Redis client for PHP.", - "homepage": "http://github.com/predis/predis", - "keywords": [ - "nosql", - "predis", - "redis" - ], + "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/predis/predis/issues", - "source": "https://github.com/predis/predis/tree/v2.2.2" + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { - "url": "https://github.com/sponsors/tillkruss", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2023-09-13T16:42:03+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { - "name": "psr/event-dispatcher", - "version": "1.0.0", + "name": "sebastian/comparator", + "version": "5.0.1", "source": { "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372", "shasum": "" }, "require": { - "php": ">=7.2.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "5.0-dev" } }, "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "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": "Standard interfaces for event handling.", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ - "events", - "psr", - "psr-14" + "comparator", + "compare", + "equality" ], "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" }, - "time": "2019-01-08T18:20:26+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-14T13:18:12+00:00" }, { - "name": "psy/psysh", - "version": "v0.12.4", + "name": "sebastian/complexity", + "version": "3.2.0", "source": { "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { - "ext-json": "*", - "ext-tokenizer": "*", - "nikic/php-parser": "^5.0 || ^4.0", - "php": "^8.0 || ^7.4", - "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" - }, - "conflict": { - "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." - }, - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.12.x-dev" - }, - "bamarni-bin": { - "bin-links": false, - "forward-command": false + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2-dev" } }, "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Psy\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", "support": { - "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, - "time": "2024-06-10T01:18:23+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:37:17+00:00" }, { - "name": "react/cache", - "version": "v1.2.0", + "name": "sebastian/diff", + "version": "5.1.1", "source": { "type": "git", - "url": "https://github.com/reactphp/cache.git", - "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", - "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "php": ">=5.3.0", - "react/promise": "^3.0 || ^2.0 || ^1.1" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, "type": "library", - "autoload": { - "psr-4": { - "React\\Cache\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "Async, Promise-based cache interface for ReactPHP", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "cache", - "caching", - "promise", - "reactphp" + "diff", + "udiff", + "unidiff", + "unified diff" ], "support": { - "issues": "https://github.com/reactphp/cache/issues", - "source": "https://github.com/reactphp/cache/tree/v1.2.0" + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2022-11-30T15:59:55+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { - "name": "react/child-process", - "version": "v0.6.5", + "name": "sebastian/environment", + "version": "6.1.0", "source": { "type": "git", - "url": "https://github.com/reactphp/child-process.git", - "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/child-process/zipball/e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", - "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.0", - "react/event-loop": "^1.2", - "react/stream": "^1.2" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", - "react/socket": "^1.8", - "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", - "autoload": { - "psr-4": { - "React\\ChildProcess\\": "src" + "extra": { + "branch-alias": { + "dev-main": "6.1-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Event-driven library for executing child processes with ReactPHP.", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ - "event-driven", - "process", - "reactphp" + "Xdebug", + "environment", + "hhvm" ], "support": { - "issues": "https://github.com/reactphp/child-process/issues", - "source": "https://github.com/reactphp/child-process/tree/v0.6.5" + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2022-09-16T13:41:56+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { - "name": "react/dns", - "version": "v1.13.0", + "name": "sebastian/exporter", + "version": "5.1.2", "source": { "type": "git", - "url": "https://github.com/reactphp/dns.git", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", "shasum": "" }, "require": { - "php": ">=5.3.0", - "react/cache": "^1.0 || ^0.6 || ^0.5", - "react/event-loop": "^1.2", - "react/promise": "^3.2 || ^2.7 || ^1.2.1" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/async": "^4.3 || ^3 || ^2", - "react/promise-timer": "^1.11" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "psr-4": { - "React\\Dns\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" + "name": "Volker Dusch", + "email": "github@wallbash.com" }, { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Async DNS resolver for ReactPHP", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ - "async", - "dns", - "dns-resolver", - "reactphp" + "export", + "exporter" ], "support": { - "issues": "https://github.com/reactphp/dns/issues", - "source": "https://github.com/reactphp/dns/tree/v1.13.0" + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2024-06-13T14:18:03+00:00" + "time": "2024-03-02T07:17:12+00:00" }, { - "name": "react/event-loop", - "version": "v1.5.0", + "name": "sebastian/global-state", + "version": "6.0.2", "source": { "type": "git", - "url": "https://github.com/reactphp/event-loop.git", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" - }, - "suggest": { - "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + "ext-dom": "*", + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "psr-4": { - "React\\EventLoop\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ - "asynchronous", - "event-loop" + "global state" ], "support": { - "issues": "https://github.com/reactphp/event-loop/issues", - "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2023-11-13T13:48:05+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { - "name": "react/promise", - "version": "v3.2.0", + "name": "sebastian/lines-of-code", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63" + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { - "php": ">=7.1.0" + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" }, "require-dev": { - "phpstan/phpstan": "1.10.39 || 1.4.10", - "phpunit/phpunit": "^9.6 || ^7.5" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", - "keywords": [ - "promise", - "promises" - ], + "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/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v3.2.0" + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2024-05-24T10:39:05+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { - "name": "react/socket", - "version": "v1.16.0", + "name": "sebastian/object-enumerator", + "version": "5.0.0", "source": { "type": "git", - "url": "https://github.com/reactphp/socket.git", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.0", - "react/dns": "^1.13", - "react/event-loop": "^1.2", - "react/promise": "^3.2 || ^2.6 || ^1.2.1", - "react/stream": "^1.4" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/async": "^4.3 || ^3.3 || ^2", - "react/promise-stream": "^1.4", - "react/promise-timer": "^1.11" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "psr-4": { - "React\\Socket\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", - "keywords": [ - "Connection", - "Socket", - "async", - "reactphp", - "stream" - ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { - "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.16.0" + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2024-07-26T10:38:09+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { - "name": "react/stream", - "version": "v1.4.0", + "name": "sebastian/object-reflector", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/reactphp/stream.git", - "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", - "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.8", - "react/event-loop": "^1.2" + "php": ">=8.1" }, "require-dev": { - "clue/stream-filter": "~1.2", - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + "phpunit/phpunit": "^10.0" }, "type": "library", - "autoload": { - "psr-4": { - "React\\Stream\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", - "keywords": [ - "event-driven", - "io", - "non-blocking", - "pipe", - "reactphp", - "readable", - "stream", - "writable" - ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { - "issues": "https://github.com/reactphp/stream/issues", - "source": "https://github.com/reactphp/stream/tree/v1.4.0" + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2024-06-11T12:45:25+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { - "name": "sebastian/cli-parser", - "version": "2.0.1", + "name": "sebastian/recursion-context", + "version": "5.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { @@ -5012,7 +4129,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -5027,16 +4144,22 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" }, "funding": [ { @@ -5044,20 +4167,20 @@ "type": "github" } ], - "time": "2024-03-02T07:12:49+00:00" + "time": "2023-02-03T07:05:40+00:00" }, { - "name": "sebastian/code-unit", - "version": "2.0.0", + "name": "sebastian/type", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { @@ -5069,7 +4192,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -5088,11 +4211,11 @@ "role": "lead" } ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", + "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/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -5100,32 +4223,29 @@ "type": "github" } ], - "time": "2023-02-03T06:58:43+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", + "name": "sebastian/version", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { "php": ">=8.1" }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -5140,14 +4260,15 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "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/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { @@ -5155,789 +4276,925 @@ "type": "github" } ], - "time": "2023-02-03T06:59:15+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { - "name": "sebastian/comparator", - "version": "5.0.1", + "name": "seld/jsonlint", + "version": "1.11.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372" + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/1748aaf847fc731cfad7725aec413ee46f0cc3a2", + "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" + "php": "^5.3 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^10.3" + "phpstan/phpstan": "^1.11", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" }, + "bin": [ + "bin/jsonlint" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "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" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", + "description": "JSON Linter", "keywords": [ - "comparator", - "compare", - "equality" + "json", + "linter", + "parser", + "validator" ], "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" + "issues": "https://github.com/Seldaek/jsonlint/issues", + "source": "https://github.com/Seldaek/jsonlint/tree/1.11.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/Seldaek", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "type": "tidelift" } ], - "time": "2023-08-14T13:18:12+00:00" + "time": "2024-07-11T14:55:45+00:00" }, { - "name": "sebastian/complexity", - "version": "3.2.0", + "name": "squizlabs/php_codesniffer", + "version": "3.10.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017", + "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, + "bin": [ + "bin/phpcbf", + "bin/phpcs" + ], "type": "library", "extra": { "branch-alias": { - "dev-main": "3.2-dev" + "dev-master": "3.x-dev" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Greg Sherwood", + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards", + "static analysis" + ], "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" } ], - "time": "2023-12-21T08:37:17+00:00" + "time": "2024-07-21T23:26:44+00:00" }, { - "name": "sebastian/diff", - "version": "5.1.1", + "name": "symfony/console", + "version": "v6.4.10", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + "url": "https://github.com/symfony/console.git", + "reference": "504974cbe43d05f83b201d6498c206f16fc0cdbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "url": "https://api.github.com/repos/symfony/console/zipball/504974cbe43d05f83b201d6498c206f16fc0cdbc", + "reference": "504974cbe43d05f83b201d6498c206f16fc0cdbc", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0|^7.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": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" + "cli", + "command-line", + "console", + "terminal" ], "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + "source": "https://github.com/symfony/console/tree/v6.4.10" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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": "2024-03-02T07:15:17+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { - "name": "sebastian/environment", - "version": "6.1.0", + "name": "symfony/css-selector", + "version": "v6.4.8", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + "url": "https://github.com/symfony/css-selector.git", + "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/4b61b02fe15db48e3687ce1c45ea385d1780fe08", + "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08", "shasum": "" }, "require": { "php": ">=8.1" }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "suggest": { - "ext-posix": "*" - }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + "source": "https://github.com/symfony/css-selector/tree/v6.4.8" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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": "2024-03-23T08:47:14+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { - "name": "sebastian/exporter", - "version": "5.1.2", + "name": "symfony/deprecation-contracts", + "version": "v3.5.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "classmap": [ - "src/" + "files": [ + "function.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "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": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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": "2024-03-02T07:17:12+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { - "name": "sebastian/global-state", - "version": "6.0.2", + "name": "symfony/event-dispatcher", + "version": "v6.4.8", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8d7507f02b06e06815e56bb39aa0128e3806208b", + "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b", "shasum": "" }, "require": { "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^10.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Snapshotting of global state", - "homepage": "https://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], + "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": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.8" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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": "2024-03-02T07:19:19+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { - "name": "sebastian/lines-of-code", - "version": "2.0.2", + "name": "symfony/event-dispatcher-contracts", + "version": "v3.5.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" + "php": ">=8.1", + "psr/event-dispatcher": "^1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-12-21T08:38:20+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "5.0.0", + "name": "symfony/filesystem", + "version": "v6.4.9", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + "url": "https://github.com/symfony/filesystem.git", + "reference": "b51ef8059159330b74a4d52f68e671033c0fe463" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b51ef8059159330b74a4d52f68e671033c0fe463", + "reference": "b51ef8059159330b74a4d52f68e671033c0fe463", "shasum": "" }, "require": { "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "symfony/process": "^5.4|^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + "source": "https://github.com/symfony/filesystem/tree/v6.4.9" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-02-03T07:08:32+00:00" + "time": "2024-06-28T09:49:33+00:00" }, { - "name": "sebastian/object-reflector", - "version": "3.0.0", + "name": "symfony/finder", + "version": "v6.4.10", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + "url": "https://github.com/symfony/finder.git", + "reference": "af29198d87112bebdd397bd7735fbd115997824c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "url": "https://api.github.com/repos/symfony/finder/zipball/af29198d87112bebdd397bd7735fbd115997824c", + "reference": "af29198d87112bebdd397bd7735fbd115997824c", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + "source": "https://github.com/symfony/finder/tree/v6.4.10" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-02-03T07:06:18+00:00" + "time": "2024-07-24T07:06:38+00:00" }, { - "name": "sebastian/recursion-context", - "version": "5.0.0", + "name": "symfony/options-resolver", + "version": "v6.4.8", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "url": "https://github.com/symfony/options-resolver.git", + "reference": "22ab9e9101ab18de37839074f8a1197f55590c1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/22ab9e9101ab18de37839074f8a1197f55590c1b", + "reference": "22ab9e9101ab18de37839074f8a1197f55590c1b", "shasum": "" }, "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + "source": "https://github.com/symfony/options-resolver/tree/v6.4.8" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-02-03T07:05:40+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { - "name": "sebastian/type", - "version": "4.0.0", + "name": "symfony/polyfill-ctype", + "version": "v1.30.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "0424dff1c58f028c451efff2045f5d92410bd540" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", + "reference": "0424dff1c58f028c451efff2045f5d92410bd540", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^10.0" + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "4.0-dev" + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-02-03T07:10:45+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { - "name": "sebastian/version", - "version": "4.0.1", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.30.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a", + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "4.0-dev" + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "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-02-07T11:34:05+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { - "name": "spatie/array-to-xml", - "version": "3.3.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.30.0", "source": { "type": "git", - "url": "https://github.com/spatie/array-to-xml.git", - "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f56b220fe2db1ade4c88098d83413ebdfc3bf876", - "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb", + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb", "shasum": "" }, "require": { - "ext-dom": "*", - "php": "^8.0" + "php": ">=7.1" }, - "require-dev": { - "mockery/mockery": "^1.2", - "pestphp/pest": "^1.21", - "spatie/pest-plugin-snapshots": "^1.1" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.x-dev" + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Spatie\\ArrayToXml\\": "src" - } + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5945,138 +5202,156 @@ ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://freek.dev", - "role": "Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Convert an array to xml", - "homepage": "https://github.com/spatie/array-to-xml", + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", "keywords": [ - "array", - "convert", - "xml" + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" ], "support": { - "source": "https://github.com/spatie/array-to-xml/tree/3.3.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0" }, "funding": [ { - "url": "https://spatie.be/open-source/support-us", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/spatie", + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2024-05-01T10:20:27+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { - "name": "squizlabs/php_codesniffer", - "version": "3.10.2", + "name": "symfony/polyfill-mbstring", + "version": "v1.30.0", "source": { "type": "git", - "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017", - "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", "shasum": "" }, "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" + "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" }, - "bin": [ - "bin/phpcbf", - "bin/phpcs" - ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-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": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Greg Sherwood", - "role": "Former lead" - }, - { - "name": "Juliette Reinders Folmer", - "role": "Current lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Contributors", - "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", "keywords": [ - "phpcs", - "standards", - "static analysis" + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", - "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", - "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", - "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" }, "funding": [ { - "url": "https://github.com/PHPCSStandards", - "type": "github" + "url": "https://symfony.com/sponsor", + "type": "custom" }, { - "url": "https://github.com/jrfnl", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://opencollective.com/php_codesniffer", - "type": "open_collective" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2024-07-21T23:26:44+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { - "name": "symfony/css-selector", - "version": "v6.4.8", + "name": "symfony/polyfill-php80", + "version": "v1.30.0", "source": { "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/4b61b02fe15db48e3687ce1c45ea385d1780fe08", - "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.1" }, "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\CssSelector\\": "" + "Symfony\\Polyfill\\Php80\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -6085,22 +5360,28 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" }, { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Converts CSS selectors to XPath expressions", + "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/css-selector/tree/v6.4.8" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" }, "funding": [ { @@ -6116,51 +5397,41 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v6.4.8", + "name": "symfony/polyfill-php81", + "version": "v1.30.0", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8d7507f02b06e06815e56bb39aa0128e3806208b", - "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/3fb075789fb91f9ad9af537c4012d523085bd5af", + "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/service-contracts": "<2.5" - }, - "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|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "php": ">=7.1" }, "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" + "Symfony\\Polyfill\\Php81\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -6169,18 +5440,24 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.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", + "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/event-dispatcher/tree/v6.4.8" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.30.0" }, "funding": [ { @@ -6196,40 +5473,33 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", + "name": "symfony/process", + "version": "v6.4.8", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + "url": "https://github.com/symfony/process.git", + "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5", + "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5", "shasum": "" }, - "require": { - "php": ">=8.1", - "psr/event-dispatcher": "^1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, + "require": { + "php": ">=8.1" + }, + "type": "library", "autoload": { "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6237,26 +5507,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to dispatching event", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/process/tree/v6.4.8" }, "funding": [ { @@ -6272,41 +5534,46 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.30.0", + "name": "symfony/service-contracts", + "version": "v3.5.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "type": "library", "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Contracts\\Service\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Test/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -6314,10 +5581,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -6327,16 +5590,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" }, "funding": [ { @@ -6352,41 +5617,33 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.30.0", + "name": "symfony/stopwatch", + "version": "v6.4.8", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af" + "url": "https://github.com/symfony/stopwatch.git", + "reference": "63e069eb616049632cde9674c46957819454b8aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/3fb075789fb91f9ad9af537c4012d523085bd5af", - "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/63e069eb616049632cde9674c46957819454b8aa", + "reference": "63e069eb616049632cde9674c46957819454b8aa", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1", + "symfony/service-contracts": "^2.5|^3" }, "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" + "Symfony\\Component\\Stopwatch\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -6395,24 +5652,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Provides a way to profile code", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.30.0" + "source": "https://github.com/symfony/stopwatch/tree/v6.4.8" }, "funding": [ { @@ -6428,30 +5679,46 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { - "name": "symfony/stopwatch", - "version": "v6.4.8", + "name": "symfony/string", + "version": "v6.4.10", "source": { "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "63e069eb616049632cde9674c46957819454b8aa" + "url": "https://github.com/symfony/string.git", + "reference": "ccf9b30251719567bfd46494138327522b9a9446" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/63e069eb616049632cde9674c46957819454b8aa", - "reference": "63e069eb616049632cde9674c46957819454b8aa", + "url": "https://api.github.com/repos/symfony/string/zipball/ccf9b30251719567bfd46494138327522b9a9446", + "reference": "ccf9b30251719567bfd46494138327522b9a9446", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/service-contracts": "^2.5|^3" + "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.5" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" + "Symfony\\Component\\String\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -6463,18 +5730,26 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides a way to profile code", + "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/stopwatch/tree/v6.4.8" + "source": "https://github.com/symfony/string/tree/v6.4.10" }, "funding": [ { @@ -6490,7 +5765,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-22T10:21:14+00:00" }, { "name": "symfony/var-dumper", @@ -6699,116 +5974,6 @@ ], "time": "2024-03-03T12:36:25+00:00" }, - { - "name": "vimeo/psalm", - "version": "5.25.0", - "source": { - "type": "git", - "url": "https://github.com/vimeo/psalm.git", - "reference": "01a8eb06b9e9cc6cfb6a320bf9fb14331919d505" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/01a8eb06b9e9cc6cfb6a320bf9fb14331919d505", - "reference": "01a8eb06b9e9cc6cfb6a320bf9fb14331919d505", - "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 || ^1.0.0", - "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 || ^6.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": "2024-06-16T15:08:35+00:00" - }, { "name": "vlucas/phpdotenv", "version": "v5.6.1", @@ -6894,39 +6059,35 @@ "time": "2024-07-20T21:52:34+00:00" }, { - "name": "webmozart/assert", - "version": "1.11.0", + "name": "webmozart/glob", + "version": "4.7.0", "source": { "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "url": "https://github.com/webmozarts/glob.git", + "reference": "8a2842112d6916e61e0e15e316465b611f3abc17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/webmozarts/glob/zipball/8a2842112d6916e61e0e15e316465b611f3abc17", + "reference": "8a2842112d6916e61e0e15e316465b611f3abc17", "shasum": "" }, "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" + "php": "^7.3 || ^8.0.0" }, "require-dev": { - "phpunit/phpunit": "^8.5.13" + "phpunit/phpunit": "^9.5", + "symfony/filesystem": "^5.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10-dev" + "dev-master": "4.1-dev" } }, "autoload": { "psr-4": { - "Webmozart\\Assert\\": "src/" + "Webmozart\\Glob\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6939,17 +6100,12 @@ "email": "bschussek@gmail.com" } ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], + "description": "A PHP implementation of Ant's glob.", "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "issues": "https://github.com/webmozarts/glob/issues", + "source": "https://github.com/webmozarts/glob/tree/4.7.0" }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2024-03-07T20:33:40+00:00" } ], "aliases": [], @@ -6960,17 +6116,15 @@ "platform": { "php": ">=8.1 <9.0", "ext-apcu": "*", - "ext-igbinary": "*", - "ext-json": "*", "ext-fileinfo": "*", + "ext-json": "*", "ext-mbstring": "*", "ext-pdo": "*", - "ext-redis": "*", "ext-xml": "*" }, "platform-dev": { "ext-gettext": "*", "ext-yaml": "*" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" } From 70ba8f2d6f1c2e12f761faf5b59dc61cce8dc63d Mon Sep 17 00:00:00 2001 From: Nikolaos Dimopoulos Date: Mon, 29 Jul 2024 19:27:32 -0500 Subject: [PATCH 10/11] [#49] - phpcs --- tests/output/.phpunit.cache/test-results | 1 + tests/unit/Container/ContainerCest.php | 1 - tests/unit/Container/Lazy/AbstractLazyTest.php | 4 ++-- tests/unit/Container/Lazy/GetCallCest.php | 2 +- tests/unit/Container/Lazy/NewCallCest.php | 2 +- tests/unit/Container/Lazy/RequireFileCest.php | 1 - 6 files changed, 5 insertions(+), 6 deletions(-) create mode 100644 tests/output/.phpunit.cache/test-results diff --git a/tests/output/.phpunit.cache/test-results b/tests/output/.phpunit.cache/test-results new file mode 100644 index 000000000..c8317170b --- /dev/null +++ b/tests/output/.phpunit.cache/test-results @@ -0,0 +1 @@ +{"version":1,"defects":{"Phalcon\\Tests\\Unit\\Translate\\Adapter\\Csv\\ArrayAccessTest::testTranslateAdapterCsvWithArrayAccess":8,"Phalcon\\Tests\\Unit\\Translate\\Adapter\\Csv\\ConstructTest::testTranslateAdapterCsvConstruct":8,"Phalcon\\Tests\\Unit\\Translate\\Adapter\\Csv\\ConstructTest::testTranslateAdapterCsvErrorLoadingFile":8},"times":{"Phalcon\\Tests\\Unit\\Translate\\Adapter\\Csv\\ArrayAccessTest::testTranslateAdapterCsvWithArrayAccess":0.002,"Phalcon\\Tests\\Unit\\Translate\\Adapter\\Csv\\ConstructTest::testTranslateAdapterCsvConstruct":0.002,"Phalcon\\Tests\\Unit\\Translate\\Adapter\\Csv\\ConstructTest::testTranslateAdapterCsvContentParamExist":0.002,"Phalcon\\Tests\\Unit\\Translate\\Adapter\\Csv\\ConstructTest::testTranslateAdapterCsvErrorLoadingFile":0.007}} \ No newline at end of file diff --git a/tests/unit/Container/ContainerCest.php b/tests/unit/Container/ContainerCest.php index 3c1d00e85..dcd1042cd 100644 --- a/tests/unit/Container/ContainerCest.php +++ b/tests/unit/Container/ContainerCest.php @@ -13,7 +13,6 @@ namespace Phalcon\Tests\Unit\Container; - use Phalcon\Container\Container; use Phalcon\Container\Definitions\Definitions; use Phalcon\Tests\Fixtures\Container\TestProvider; diff --git a/tests/unit/Container/Lazy/AbstractLazyTest.php b/tests/unit/Container/Lazy/AbstractLazyTest.php index 89102bfe0..9ae32366f 100644 --- a/tests/unit/Container/Lazy/AbstractLazyTest.php +++ b/tests/unit/Container/Lazy/AbstractLazyTest.php @@ -21,7 +21,7 @@ abstract class AbstractLazyTest { protected Container $container; - public function _before() : void + public function _before(): void { $this->container = new Container($this->definitions()); } @@ -39,7 +39,7 @@ protected function definitions(): Definitions * * @return mixed */ - protected function actual(AbstractLazy $lazy) : mixed + protected function actual(AbstractLazy $lazy): mixed { return $lazy($this->container); } diff --git a/tests/unit/Container/Lazy/GetCallCest.php b/tests/unit/Container/Lazy/GetCallCest.php index 19707065b..e3e59cf19 100644 --- a/tests/unit/Container/Lazy/GetCallCest.php +++ b/tests/unit/Container/Lazy/GetCallCest.php @@ -38,7 +38,7 @@ public function containerLazyGetCall(UnitTester $I): void /** * @return Definitions */ - protected function definitions() : Definitions + protected function definitions(): Definitions { $definitions = parent::definitions(); $definitions->{TestWithInterface::class}->argument('one', 'ten'); diff --git a/tests/unit/Container/Lazy/NewCallCest.php b/tests/unit/Container/Lazy/NewCallCest.php index afda8d4f5..4b170e507 100644 --- a/tests/unit/Container/Lazy/NewCallCest.php +++ b/tests/unit/Container/Lazy/NewCallCest.php @@ -35,7 +35,7 @@ public function containerLazyNewCall(UnitTester $I): void $I->assertSame($expected, $actual); } - protected function definitions() : Definitions + protected function definitions(): Definitions { $definitions = parent::definitions(); $definitions->{TestWithInterface::class}->argument('one', 'ten'); diff --git a/tests/unit/Container/Lazy/RequireFileCest.php b/tests/unit/Container/Lazy/RequireFileCest.php index 9c6a96084..aa79ce56c 100644 --- a/tests/unit/Container/Lazy/RequireFileCest.php +++ b/tests/unit/Container/Lazy/RequireFileCest.php @@ -15,7 +15,6 @@ use Phalcon\Container\Lazy\Call; use Phalcon\Container\Lazy\RequireFile; - use UnitTester; use function dataDir; From 9a2b4e0765cf72c1af6320e5c7ea5681a51d034b Mon Sep 17 00:00:00 2001 From: Nikolaos Dimopoulos Date: Mon, 29 Jul 2024 20:08:15 -0500 Subject: [PATCH 11/11] [#49] - correcting test --- .../Container/Definitions/DefinitionsCest.php | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/tests/unit/Container/Definitions/DefinitionsCest.php b/tests/unit/Container/Definitions/DefinitionsCest.php index 15dced0e3..529739c05 100644 --- a/tests/unit/Container/Definitions/DefinitionsCest.php +++ b/tests/unit/Container/Definitions/DefinitionsCest.php @@ -34,6 +34,8 @@ use Phalcon\Tests\Fixtures\Container\TestWithInterface; use UnitTester; +use function uniqid; + class DefinitionsCest { protected Definitions $definitions; @@ -144,28 +146,30 @@ function () { */ public function containerDefinitionsDefinitionsMagicValues(UnitTester $I): void { + $name = uniqid('val'); + // not defined - $actual = isset($this->definitions->one); + $actual = isset($this->definitions->$name); $I->assertFalse($actual); - $this->definitions->one = 'ten'; + $this->definitions->$name = 'ten'; - $actual = isset($this->definitions->one); + $actual = isset($this->definitions->$name); $I->assertTrue($actual); $expected = 'ten'; - $actual = $this->definitions->one; + $actual = $this->definitions->$name; $I->assertSame($expected, $actual); - unset($this->definitions->one); + unset($this->definitions->$name); - $actual = isset($this->definitions->one); + $actual = isset($this->definitions->$name); $I->assertFalse($actual); $I->expectThrowable( - new NotFound("Value definition 'one' not found."), - function () { - $this->definitions->one; + new NotFound("Value definition '$name' not found."), + function () use ($name) { + $this->definitions->$name; } ); }