diff --git a/composer.json b/composer.json index 5b9ff24c..4845bc64 100644 --- a/composer.json +++ b/composer.json @@ -34,7 +34,7 @@ }, "autoload": { "psr-4": { - "Ray\\Compiler\\": ["src", "src-deprecated"] + "Ray\\Compiler\\": ["src"] } }, "autoload-dev": { diff --git a/docs/exmaple/DevInjectorContext.php b/docs/exmaple/DevInjectorContext.php index af162046..2d31dd29 100644 --- a/docs/exmaple/DevInjectorContext.php +++ b/docs/exmaple/DevInjectorContext.php @@ -5,8 +5,6 @@ use Doctrine\Common\Cache\ApcuCache; use Doctrine\Common\Cache\CacheProvider; use Ray\Compiler\AbstractInjectorContext; -use Ray\Compiler\DiCompileModule; -use Ray\Compiler\FakeCarModule; use Ray\Di\AbstractModule; use Ray\Di\NullCache; diff --git a/src/AopCode.php b/src-deprecated/AopCode.php similarity index 98% rename from src/AopCode.php rename to src-deprecated/AopCode.php index e88c9e1e..e774426e 100644 --- a/src/AopCode.php +++ b/src-deprecated/AopCode.php @@ -12,11 +12,11 @@ use Ray\Di\Dependency; use Ray\Di\Name; use Ray\Di\NewInstance; - use function array_merge; use function array_splice; use function is_array; +/** @deprecated Use CompileInjector instead */ final class AopCode { /** @var PrivateProperty */ diff --git a/src/Code.php b/src-deprecated/Code.php similarity index 94% rename from src/Code.php rename to src-deprecated/Code.php index 99ec8b8d..c2f974c8 100644 --- a/src/Code.php +++ b/src-deprecated/Code.php @@ -7,6 +7,7 @@ use PhpParser\Node; use PhpParser\PrettyPrinter\Standard; +/** @deprecated Use CompileInjector instead */ final class Code { /** @var bool */ diff --git a/src/DependencyCode.php b/src-deprecated/DependencyCode.php similarity index 98% rename from src/DependencyCode.php rename to src-deprecated/DependencyCode.php index 24452b3f..52c2f8d8 100644 --- a/src/DependencyCode.php +++ b/src-deprecated/DependencyCode.php @@ -21,10 +21,10 @@ use Ray\Di\SetContextInterface; use Ray\Di\SetterMethod; use Ray\Di\SetterMethods; - use function get_class; use function is_a; +/** @deprecated This is subcomponent of deprecated DiCompiler */ final class DependencyCode implements SetContextInterface { /** @var BuilderFactory */ @@ -150,7 +150,6 @@ private function getProviderCode(DependencyProvider $provider): Code $isSingleton = $prop($provider, 'isSingleton'); $node[] = $this->getIsSingletonCode($isSingleton); $node[] = new Stmt\Return_(new MethodCall(new Expr\Variable('instance'), 'get')); - /** @psalm-trace $node */ $codeNode = $this->factory->namespace('Ray\Di\Compiler')->addStmts($node)->getNode(); $qualifier = $this->qualifier; $this->qualifier = null; diff --git a/src/DependencySaver.php b/src-deprecated/DependencySaver.php similarity index 94% rename from src/DependencySaver.php rename to src-deprecated/DependencySaver.php index 50acfeb7..7369242f 100644 --- a/src/DependencySaver.php +++ b/src-deprecated/DependencySaver.php @@ -6,17 +6,18 @@ use LogicException; use ReflectionClass; - use function file_exists; use function is_dir; use function mkdir; use function serialize; use function sprintf; use function str_replace; - use const PHP_EOL; -/** @psalm-import-type ScriptDir from CompileInjector */ +/** + * @deprecated use CompileInjector instead + * @psalm-import-type ScriptDir from CompileInjector + */ final class DependencySaver { /** @var ScriptDir */ diff --git a/src/FactoryCode.php b/src-deprecated/FactoryCode.php similarity index 98% rename from src/FactoryCode.php rename to src-deprecated/FactoryCode.php index 42de5f11..834a8081 100644 --- a/src/FactoryCode.php +++ b/src-deprecated/FactoryCode.php @@ -14,6 +14,9 @@ use Ray\Di\Name; use Ray\Di\SetterMethod; +/** + * @deprecated Use CompileInjector instead + */ final class FactoryCode { /** @var Container */ diff --git a/src/FunctionCode.php b/src-deprecated/FunctionCode.php similarity index 98% rename from src/FunctionCode.php rename to src-deprecated/FunctionCode.php index 5fa7a9a4..37faff7f 100644 --- a/src/FunctionCode.php +++ b/src-deprecated/FunctionCode.php @@ -18,10 +18,10 @@ use ReflectionClass; use ReflectionMethod; use ReflectionParameter; - use function assert; use function is_bool; +/** @deprecated Use CompilerInjector instead */ final class FunctionCode { /** @var Container */ diff --git a/src/GraphDumper.php b/src-deprecated/GraphDumper.php similarity index 93% rename from src/GraphDumper.php rename to src-deprecated/GraphDumper.php index ea98c5b4..242b9410 100644 --- a/src/GraphDumper.php +++ b/src-deprecated/GraphDumper.php @@ -7,7 +7,6 @@ use Koriym\Printo\Printo; use Ray\Di\Container; use Ray\Di\Name; - use function assert; use function class_exists; use function explode; @@ -16,10 +15,12 @@ use function interface_exists; use function mkdir; use function str_replace; - use const LOCK_EX; -/** @psalm-import-type ScriptDir from CompileInjector */ +/** + * @psalm-import-type ScriptDir from CompileInjector + * @deprecated No longer supported. There is no alternative available. + */ final class GraphDumper { /** @var Container */ diff --git a/src/IpQualifier.php b/src-deprecated/IpQualifier.php similarity index 96% rename from src/IpQualifier.php rename to src-deprecated/IpQualifier.php index 39606a7a..74591063 100644 --- a/src/IpQualifier.php +++ b/src-deprecated/IpQualifier.php @@ -5,9 +5,9 @@ namespace Ray\Compiler; use ReflectionParameter; - use function serialize; +/** @deprecated */ final class IpQualifier { /** @var ReflectionParameter */ diff --git a/src/NodeFactory.php b/src-deprecated/NodeFactory.php similarity index 99% rename from src/NodeFactory.php rename to src-deprecated/NodeFactory.php index 9d7cd2ce..ab9ad686 100644 --- a/src/NodeFactory.php +++ b/src-deprecated/NodeFactory.php @@ -15,11 +15,11 @@ use Ray\Di\InjectorInterface; use Ray\Di\SetterMethod; use ReflectionClass; - use function assert; use function is_bool; use function is_string; +/** @deprecated */ final class NodeFactory { /** @var InjectorInterface|null */ diff --git a/src/Normalizer.php b/src-deprecated/Normalizer.php similarity index 98% rename from src/Normalizer.php rename to src-deprecated/Normalizer.php index a463c2e2..e370d943 100644 --- a/src/Normalizer.php +++ b/src-deprecated/Normalizer.php @@ -10,7 +10,6 @@ use PhpParser\Node\Scalar; use Ray\Compiler\Exception\InvalidInstance; use Ray\Di\InjectorInterface; - use function is_array; use function is_bool; use function is_float; @@ -20,6 +19,7 @@ use function serialize; /** + * @deprecated This is subcomponent of * Value to code(Node) converter */ final class Normalizer diff --git a/src/OnDemandCompiler.php b/src-deprecated/OnDemandCompiler.php similarity index 95% rename from src/OnDemandCompiler.php rename to src-deprecated/OnDemandCompiler.php index f31dcdd9..0718a24f 100644 --- a/src/OnDemandCompiler.php +++ b/src-deprecated/OnDemandCompiler.php @@ -12,7 +12,6 @@ use Ray\Di\Bind; use Ray\Di\Dependency; use Ray\Di\Exception\NotFound; - use function assert; use function error_reporting; use function explode; @@ -20,12 +19,12 @@ use function file_get_contents; use function is_bool; use function unserialize; - use const E_NOTICE; /** * @psalm-import-type ScriptDir from CompileInjector * @psalm-type Pointcuts = list + * @deprecated */ final class OnDemandCompiler { @@ -70,7 +69,7 @@ public function __invoke(string $dependencyIndex): void ($this->compiler)($containerObject, $this->scriptDir); $dependency = $containerArray[$dependencyIndex]; - /** @var Pointcuts $pointCuts */ + /** @var Pointcut $pointCuts */ $pointCuts = $this->loadPointcuts(); $isWeaverable = $dependency instanceof Dependency && ! empty($pointCuts); if ($isWeaverable) { @@ -81,7 +80,7 @@ public function __invoke(string $dependencyIndex): void (new DependencySaver($this->scriptDir))($dependencyIndex, $code); } - /** @return Pointcuts */ + /** @return Pointcut */ private function loadPointcuts(): array { $pointcutsPath = $this->scriptDir . ScriptInjector::AOP; @@ -92,7 +91,7 @@ private function loadPointcuts(): array $serialized = file_get_contents($pointcutsPath); assert(! is_bool($serialized)); $er = error_reporting(error_reporting() ^ E_NOTICE); - /** @var Pointcuts $pointcuts */ + /** @var Pointcut $pointcuts */ $pointcuts = unserialize($serialized, ['allowed_classes' => true]); error_reporting($er); diff --git a/src/PrivateProperty.php b/src-deprecated/PrivateProperty.php similarity index 96% rename from src/PrivateProperty.php rename to src-deprecated/PrivateProperty.php index 5b0ee44a..b9fd7d66 100644 --- a/src/PrivateProperty.php +++ b/src-deprecated/PrivateProperty.php @@ -7,6 +7,7 @@ use ReflectionProperty; use Throwable; +/** @deprecated */ final class PrivateProperty { /** diff --git a/src/ScriptInjector.php b/src-deprecated/ScriptInjector.php similarity index 99% rename from src/ScriptInjector.php rename to src-deprecated/ScriptInjector.php index a251cf1f..43ca19ee 100644 --- a/src/ScriptInjector.php +++ b/src-deprecated/ScriptInjector.php @@ -15,7 +15,6 @@ use Ray\Di\NullModule; use Ray\Di\ProviderSetModule; use ReflectionParameter; - use function assert; use function count; use function error_log; @@ -35,13 +34,13 @@ use function str_replace; use function unlink; use function unserialize; - use const DIRECTORY_SEPARATOR; use const E_NOTICE; /** * @psalm-import-type ScriptDir from CompileInjector * @psalm-import-type Ip from CompileInjector + * @deprecated Use CompileInjector instead */ final class ScriptInjector implements ScriptInjectorInterface { diff --git a/src/ScriptInjectorModule.php b/src-deprecated/ScriptInjectorModule.php similarity index 88% rename from src/ScriptInjectorModule.php rename to src-deprecated/ScriptInjectorModule.php index adc1ae9a..ac11d18f 100644 --- a/src/ScriptInjectorModule.php +++ b/src-deprecated/ScriptInjectorModule.php @@ -7,7 +7,10 @@ use Ray\Di\AbstractModule; use Ray\Di\InjectorInterface; -/** @psalm-import-type ScriptDir from CompileInjector */ +/** + * @psalm-import-type ScriptDir from CompileInjector + * @deprecated + */ class ScriptInjectorModule extends AbstractModule { /** @var ScriptDir */ diff --git a/src/AirInjector.php b/src/AirInjector.php index 3aa3de49..396d2311 100644 --- a/src/AirInjector.php +++ b/src/AirInjector.php @@ -20,6 +20,11 @@ /** * @psalm-import-type ScriptDir from CompileInjector * @psalm-import-type Ip from CompileInjector + * @psalm-import-type Singleton from CompileInjector + * @psalm-import-type Prottype from CompileInjector + * @psalm-import-type InjectionPoint from CompileInjector + * @psalm-import-type Injector from CompileInjector + * @psalm-type Injector = callable(): InjectorInterface */ final class AirInjector implements InjectorInterface { @@ -69,12 +74,13 @@ public function __wakeup() */ public function getInstance($interface, $name = Name::ANY) { + static $injectionPoint; + static $injector; static $prototype; static $singleton; - static $injector; - static $injectionPoint; if ($prototype === null) { + /** @var InjectionPoint $injectionPoint */ // @phpstan-ignore-next-line $injectionPoint = function (): InjectionPoint { if ($this->ip[0] === '') { throw new InjectionPointUnbound(); @@ -89,30 +95,33 @@ public function getInstance($interface, $name = Name::ANY) ); }; + /** @var Injector $injector */ + // @phpstan-ignore-next-line $injector = function (): self { return $this; }; - $prototype = + /** @var Prottype $prototype */ + $prototype = // @phpstan-ignore-line /** - * @param array{0: string, 1: string, 2: string} $ip + * @param Ip $ip * * @return mixed */ function (string $dependencyIndex, array $ip = ['', '', '']) { - // @phpstan-ignore-line $this->ip = $ip; // @phpstan-ignore-line return require $this->getInstanceFile($dependencyIndex); }; - $singleton = + + /** @var Singleton $singleton */ + $singleton = // @phpstan-ignore-line /** - * @param array{0: string, 1: string, 2: string} $ip + * @param Ip $ip * * @return mixed */ function (string $dependencyIndex, $ip = ['', '', '']) { - // @phpstan-ignore-line if (isset($this->singletons[$dependencyIndex])) { return $this->singletons[$dependencyIndex]; } diff --git a/src/CompileInjector.php b/src/CompileInjector.php index 6a105464..c6cb368e 100644 --- a/src/CompileInjector.php +++ b/src/CompileInjector.php @@ -235,6 +235,7 @@ public function compile(): void $module = (new InstallBuiltinModule())(($this->lazyModule)()); (new FilePutContents())(sprintf('%s/_bindings.log', $this->scriptDir), (string) $module); (new Bind($module->getContainer(), ''))->annotatedWith(ScriptDir::class)->toInstance($this->scriptDir); - (new DiCompiler($module, $this->scriptDir))->compileContainer(); + (new Bind($module->getContainer(), InjectorInterface::class))->toInstance(new AirInjector($this->scriptDir)); + (new Compiler())->compile($module, $this->scriptDir); } } diff --git a/src/InjectionPoint.php b/src/InjectionPoint.php index 456a1182..9319805a 100644 --- a/src/InjectionPoint.php +++ b/src/InjectionPoint.php @@ -7,18 +7,13 @@ use Ray\Aop\ReflectionClass; use Ray\Aop\ReflectionMethod; use Ray\Di\Annotation\ScriptDir; +use Ray\Di\Di\Qualifier; use Ray\Di\InjectionPointInterface; +use Ray\ServiceLocator\ServiceLocator; use ReflectionParameter; -use RuntimeException; use function assert; use function class_exists; -use function file_exists; -use function file_get_contents; -use function is_bool; -use function sprintf; -use function str_replace; -use function unserialize; /** @psalm-import-type ScriptDir from CompileInjector */ final class InjectionPoint implements InjectionPointInterface @@ -88,31 +83,17 @@ public function getQualifiers(): array */ public function getQualifier() { - $class = $this->parameter->getDeclaringClass(); - assert($class instanceof \ReflectionClass); - - $qualifierFile = sprintf( - ScriptInjector::QUALIFIER, - $this->scriptDir, - str_replace('\\', '_', $class->name), - $this->parameter->getDeclaringFunction()->name, - $this->parameter->name - ); - // @codeCoverageIgnoreStart - if (! file_exists($qualifierFile)) { - return null; + $reader = ServiceLocator::getReader(); + $annotations = $reader->getMethodAnnotations($this->getMethod()); + foreach ($annotations as $annotation) { + $maybeQualifers = $reader->getClassAnnotations(new \ReflectionClass($annotation)); + foreach ($maybeQualifers as $maybeQualifer) { + if ($maybeQualifer instanceof Qualifier) { + return $annotation; + } + } } - // @codeCoverageIgnoreEnd - - $qualifierString = file_get_contents($qualifierFile); - if (is_bool($qualifierString)) { - throw new RuntimeException(); // @codeCoverageIgnore - } - - /** @var ?object $qualifier */ - $qualifier = unserialize($qualifierString, ['allowed_classes' => true]); - - return $qualifier; + return null; } } diff --git a/src/LazyModule.php b/src/LazyModule.php new file mode 100644 index 00000000..d81e8234 --- /dev/null +++ b/src/LazyModule.php @@ -0,0 +1,26 @@ +callable = $callable; + } + + public function __invoke(): AbstractModule + { + return ($this->callable)(); + } + }; + } +} diff --git a/tests/NormalizerTest.php b/test-deprecated/NormalizerTest.php similarity index 94% rename from tests/NormalizerTest.php rename to test-deprecated/NormalizerTest.php index 2ec1bf6f..51635368 100644 --- a/tests/NormalizerTest.php +++ b/test-deprecated/NormalizerTest.php @@ -2,13 +2,13 @@ declare(strict_types=1); -namespace Ray\Compiler; +namespace Ray\test; use LogicException; use PhpParser\Node\Scalar\String_; use PHPUnit\Framework\TestCase; use Ray\Compiler\Exception\InvalidInstance; - +use Ray\Compiler\Normalizer; use function fopen; class NormalizerTest extends TestCase diff --git a/tests/PrivatePropertyTest.php b/test-deprecated/PrivatePropertyTest.php similarity index 90% rename from tests/PrivatePropertyTest.php rename to test-deprecated/PrivatePropertyTest.php index 5ae97d2f..85cf1b79 100644 --- a/tests/PrivatePropertyTest.php +++ b/test-deprecated/PrivatePropertyTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Ray\Compiler; +namespace Ray\test-deprecated; use PHPUnit\Framework\TestCase; use stdClass; diff --git a/tests/AssistedTest.php b/tests/AssistedTest.php index 4165d63e..1fc2115f 100644 --- a/tests/AssistedTest.php +++ b/tests/AssistedTest.php @@ -5,6 +5,7 @@ namespace Ray\Compiler; use PHPUnit\Framework\TestCase; +use Ray\Di\AbstractModule; use Ray\Di\Exception\MethodInvocationNotAvailable; use Ray\Di\FakeAbstractDb; use Ray\Di\FakeAssistedConsumer; @@ -25,9 +26,12 @@ class AssistedTest extends TestCase protected function setUp(): void { - $this->injector = new ScriptInjector(__DIR__ . '/tmp', static function () { - return new FakeToBindModule(); - }); + $this->injector = new CompileInjector( + __DIR__ . '/tmp', + LazyModule::getInstance(function() { + return new FakeToBindModule(); + }) + ); } public function testAssisted(): void diff --git a/tests/CompileInjectorTest.php b/tests/CompileInjectorTest.php index 48e26f95..66b77efd 100644 --- a/tests/CompileInjectorTest.php +++ b/tests/CompileInjectorTest.php @@ -86,14 +86,4 @@ public function testUnboundCompileLogFile(): void $this->expectException(Unbound::class); $this->injector->getInstance(FakeCar2::class); } - - /** @depends testUnboundCompileLogFile */ - public function testCompileFailureLog(): void - { - $logFile = __DIR__ . '/tmp/_compile.log'; - $this->assertFileExists(__DIR__ . '/tmp/compiled'); - $this->assertFileExists($logFile); - $log = (string) file_get_contents($logFile); - $this->assertStringContainsString('Error', $log); - } } diff --git a/tests/ContextBindingTest.php b/tests/ContextBindingTest.php index 87d40471..5b9ac3a5 100644 --- a/tests/ContextBindingTest.php +++ b/tests/ContextBindingTest.php @@ -8,30 +8,32 @@ final class ContextBindingTest extends TestCase { + private $injector; + public function setUp(): void { deleteFiles(__DIR__ . '/tmp'); + $this->injector = new CompileInjector( + __DIR__ . '/tmp', + LazyModule::getInstance(static function () { + return new FakeDependContextualRobotModule(''); + }) + ); + } /** @requires PHP >= 7.4 */ public function testContextBindingWhenContextIsEmptyAndPropertyHasType(): void { - $injector = new ScriptInjector(__DIR__ . '/tmp', static function () { - return new FakeDependContextualRobotModule(''); - }); - $instance = $injector->getInstance(FakeRobotInterface::class); + $instance = $this->injector->getInstance(FakeRobotInterface::class); $this->assertInstanceOf(FakeRobotInterface::class, $instance); } /** @requires PHP >= 7.4 */ public function testContextBindingWhenContextIsEmpty(): void { - $injector = new ScriptInjector(__DIR__ . '/tmp', static function () { - return new FakeContextualModule(''); - }); - - $instance = $injector->getInstance(FakeRobotInterface::class); + $instance = $this->injector->getInstance(FakeRobotInterface::class); $this->assertInstanceOf(FakeRobotInterface::class, $instance); } } diff --git a/tests/Fake/Assisted/FakeToBindModule.php b/tests/Fake/Assisted/FakeToBindModule.php index 2244dc66..039f3109 100644 --- a/tests/Fake/Assisted/FakeToBindModule.php +++ b/tests/Fake/Assisted/FakeToBindModule.php @@ -9,5 +9,6 @@ class FakeToBindModule extends AbstractModule protected function configure() { $this->bind(FakeRobotInterface::class)->to(FakeRobot::class); + $this->bind(FakeAssistedConsumer::class); } } diff --git a/tests/Fake/FakeLoggerInject.php b/tests/Fake/FakeLoggerInject.php index 42a29699..321bb103 100644 --- a/tests/Fake/FakeLoggerInject.php +++ b/tests/Fake/FakeLoggerInject.php @@ -4,6 +4,7 @@ namespace Ray\Compiler; +use Attribute; use Doctrine\Common\Annotations\Annotation\Enum; use Ray\Di\Di\InjectInterface; use Ray\Di\Di\Qualifier; @@ -13,6 +14,8 @@ * @Target("METHOD") * @Qualifier */ +#[Attribute(Attribute::TARGET_METHOD)] +#[Qualifier] final class FakeLoggerInject implements InjectInterface { /** @Enum({"MEMORY", "FILE", "DB"}) */ diff --git a/tests/ScriptInjectorNullObjectTest.php b/tests/ScriptInjectorNullObjectTest.php index 6fa44c85..40aa5498 100644 --- a/tests/ScriptInjectorNullObjectTest.php +++ b/tests/ScriptInjectorNullObjectTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Ray\Compiler; +namespace Ray\test-deprecated; use PHPUnit\Framework\TestCase; diff --git a/tests/ScriptInjectorTest.php b/tests/ScriptInjectorTest.php index bf74a641..5c38ac99 100644 --- a/tests/ScriptInjectorTest.php +++ b/tests/ScriptInjectorTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Ray\Compiler; +namespace Ray\test; use PHPUnit\Framework\TestCase; use Ray\Aop\WeavedInterface; diff --git a/vendor-bin/tools/composer.lock b/vendor-bin/tools/composer.lock index c2532d56..f9dc1209 100644 --- a/vendor-bin/tools/composer.lock +++ b/vendor-bin/tools/composer.lock @@ -1927,16 +1927,16 @@ }, { "name": "symfony/dependency-injection", - "version": "v7.1.8", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "e4d13f0f394f4d02a041ff76acd31c5a20a5f70b" + "reference": "900d2eac6e33aef743bdc10dd8c75d012215fd08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e4d13f0f394f4d02a041ff76acd31c5a20a5f70b", - "reference": "e4d13f0f394f4d02a041ff76acd31c5a20a5f70b", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/900d2eac6e33aef743bdc10dd8c75d012215fd08", + "reference": "900d2eac6e33aef743bdc10dd8c75d012215fd08", "shasum": "" }, "require": { @@ -1987,7 +1987,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.1.8" + "source": "https://github.com/symfony/dependency-injection/tree/v7.1.9" }, "funding": [ { @@ -2003,20 +2003,20 @@ "type": "tidelift" } ], - "time": "2024-11-09T09:16:45+00:00" + "time": "2024-11-25T15:44:54+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -2054,7 +2054,7 @@ "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" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -2070,7 +2070,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/filesystem", @@ -2458,16 +2458,16 @@ }, { "name": "symfony/service-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -2521,7 +2521,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -2537,7 +2537,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/string",