diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a7ecd7f..1b3ddad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,7 @@ jobs: strategy: fail-fast: false matrix: - php: ["8.2", "8.3"] + php: ["8.4", "8.5"] steps: - uses: actions/checkout@v2 - name: Setup PHP with pecl and extensions @@ -33,7 +33,7 @@ jobs: strategy: fail-fast: false matrix: - php: ["8.2", "8.3"] + php: ["8.4", "8.5"] steps: - uses: actions/checkout@v2 - name: Setup PHP with pecl and extensions @@ -56,7 +56,7 @@ jobs: strategy: fail-fast: false matrix: - php: ["8.2", "8.3"] + php: ["8.4", "8.5"] steps: - uses: actions/checkout@v2 - name: Setup PHP with pecl and extensions diff --git a/README.md b/README.md index e2deac9..600a49b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # SIS-ext-core -SIS adapter (core application) designed for creating groups and updating user data based on SIS records. + +SIS adapter (core application/backend) designed for creating groups and updating user data based on SIS records. diff --git a/app/commands/DoctrineFixtures.php b/app/commands/DoctrineFixtures.php index 8dd0df2..1f4851a 100644 --- a/app/commands/DoctrineFixtures.php +++ b/app/commands/DoctrineFixtures.php @@ -3,6 +3,8 @@ namespace App\Console; use Doctrine\DBAL; +use Doctrine\DBAL\Platforms\AbstractMySQLPlatform; +use Doctrine\DBAL\Platforms\SQLitePlatform; use Nette\Utils\Finder; use Nette\Utils\FileInfo; use Symfony\Component\Console\Attribute\AsCommand; @@ -50,7 +52,7 @@ public function __construct( /** * Register the 'db:fill' command in the framework */ - protected function configure() + protected function configure(): void { $this->addOption( 'test', @@ -101,50 +103,44 @@ protected function execute(InputInterface $input, OutputInterface $output): int */ protected function clearDatabase() { - $platform = $this->dbConnection->getDatabasePlatform()->getName(); + $platform = $this->dbConnection->getDatabasePlatform(); - if ($platform === 'mysql') { + if ($platform instanceof AbstractMySQLPlatform) { $this->dbConnection->executeQuery("SET FOREIGN_KEY_CHECKS = 0"); - } else { - if ($platform === 'sqlite') { - $this->dbConnection->executeQuery("PRAGMA foreign_keys = OFF"); - } + } elseif ($platform instanceof SQLitePlatform) { + $this->dbConnection->executeQuery("PRAGMA foreign_keys = OFF"); } - foreach ($this->dbConnection->getSchemaManager()->listTables() as $table) { + + foreach ($this->dbConnection->createSchemaManager()->introspectTables() as $table) { $tableName = $table->getName(); if ($tableName === "doctrine_migrations") { // do not clear migrations table... it is crucial continue; } - if ($platform === 'mysql') { + if ($platform instanceof AbstractMySQLPlatform) { if (!str_starts_with($tableName, '``')) { $tableName = '`' . $tableName . '`'; } - } else { - if ($platform === 'sqlite') { - if (!str_starts_with($tableName, '``')) { - $tableName = '"' . $tableName . '"'; - } + } elseif ($platform instanceof SQLitePlatform) { + if (!str_starts_with($tableName, '``')) { + $tableName = '"' . $tableName . '"'; } } - if ($platform === "mysql") { + + if ($platform instanceof AbstractMySQLPlatform) { $this->dbConnection->executeQuery(sprintf("TRUNCATE %s", $tableName)); - } else { - if ($platform === "sqlite") { - $this->dbConnection->executeQuery(sprintf("DELETE FROM %s", $tableName)); - } + } elseif ($platform instanceof SQLitePlatform) { + $this->dbConnection->executeQuery(sprintf("DELETE FROM %s", $tableName)); } } - if ($platform === 'pdo_mysql') { + if ($platform instanceof AbstractMySQLPlatform) { $this->dbConnection->executeQuery("SET FOREIGN_KEY_CHECKS = 1"); - } else { - if ($platform === 'sqlite') { - $this->dbConnection->executeQuery("PRAGMA foreign_keys = ON"); - } + } elseif ($platform instanceof SQLitePlatform) { + $this->dbConnection->executeQuery("PRAGMA foreign_keys = ON"); } } } diff --git a/app/commands/Recodex/AddAdmin.php b/app/commands/Recodex/AddAdmin.php index 297097d..2f1f63b 100644 --- a/app/commands/Recodex/AddAdmin.php +++ b/app/commands/Recodex/AddAdmin.php @@ -41,7 +41,7 @@ public function __construct(RecodexApiHelper $recodexApi, Users $users) /** * Register the command. */ - protected function configure() + protected function configure(): void { $this->addArgument('groupId', InputArgument::REQUIRED, 'ID of the group to which the admin will be added.'); $this->addArgument('adminId', InputArgument::REQUIRED, 'ID of the admin to be added.'); diff --git a/app/commands/Recodex/AddAttribute.php b/app/commands/Recodex/AddAttribute.php index a94e911..7cb71b8 100644 --- a/app/commands/Recodex/AddAttribute.php +++ b/app/commands/Recodex/AddAttribute.php @@ -33,7 +33,7 @@ public function __construct(RecodexApiHelper $recodexApi) /** * Register the command. */ - protected function configure() + protected function configure(): void { $this->addArgument('groupId', InputArgument::REQUIRED, 'ID of the group to which the attribute will be added.'); $this->addArgument('key', InputArgument::REQUIRED, 'The key of the attribute being added.'); diff --git a/app/commands/Recodex/AddStudent.php b/app/commands/Recodex/AddStudent.php index 163e566..3989e11 100644 --- a/app/commands/Recodex/AddStudent.php +++ b/app/commands/Recodex/AddStudent.php @@ -41,7 +41,7 @@ public function __construct(RecodexApiHelper $recodexApi, Users $users) /** * Register the command. */ - protected function configure() + protected function configure(): void { $this->addArgument('groupId', InputArgument::REQUIRED, 'ID of the group to which the student will be added.'); $this->addArgument('studentId', InputArgument::REQUIRED, 'ID of the student to be added.'); diff --git a/app/commands/Recodex/CreateGroup.php b/app/commands/Recodex/CreateGroup.php index 59fe0d1..bcda6c8 100644 --- a/app/commands/Recodex/CreateGroup.php +++ b/app/commands/Recodex/CreateGroup.php @@ -49,7 +49,7 @@ public function __construct(RecodexApiHelper $recodexApi, SisScheduleEvents $sis /** * Register the command. */ - protected function configure() + protected function configure(): void { $this->addArgument('eventId', InputArgument::REQUIRED, 'The SIS ID of the event associated with the group.'); $this->addArgument('parentId', InputArgument::REQUIRED, 'ReCodEx ID of the the parent group.'); diff --git a/app/commands/Recodex/Groups.php b/app/commands/Recodex/Groups.php index 63dff53..807ffd6 100644 --- a/app/commands/Recodex/Groups.php +++ b/app/commands/Recodex/Groups.php @@ -51,7 +51,7 @@ public function __construct(RecodexApiHelper $recodexApi, Users $users, SisSched /** * Register the command. */ - protected function configure() + protected function configure(): void { $this->addArgument('ukco', InputArgument::REQUIRED, 'SIS ID of the user whose groups are being loaded.'); } diff --git a/app/commands/Recodex/RemoveAdmin.php b/app/commands/Recodex/RemoveAdmin.php index 7d018ef..3cf6760 100644 --- a/app/commands/Recodex/RemoveAdmin.php +++ b/app/commands/Recodex/RemoveAdmin.php @@ -41,7 +41,7 @@ public function __construct(RecodexApiHelper $recodexApi, Users $users) /** * Register the command. */ - protected function configure() + protected function configure(): void { $this->addArgument( 'groupId', diff --git a/app/commands/Recodex/RemoveAttribute.php b/app/commands/Recodex/RemoveAttribute.php index a2a4ae4..614a898 100644 --- a/app/commands/Recodex/RemoveAttribute.php +++ b/app/commands/Recodex/RemoveAttribute.php @@ -33,7 +33,7 @@ public function __construct(RecodexApiHelper $recodexApi) /** * Register the command. */ - protected function configure() + protected function configure(): void { $this->addArgument( 'groupId', diff --git a/app/commands/Recodex/RemoveStudent.php b/app/commands/Recodex/RemoveStudent.php index d389a06..33dc34b 100644 --- a/app/commands/Recodex/RemoveStudent.php +++ b/app/commands/Recodex/RemoveStudent.php @@ -41,7 +41,7 @@ public function __construct(RecodexApiHelper $recodexApi, Users $users) /** * Register the command. */ - protected function configure() + protected function configure(): void { $this->addArgument( 'groupId', diff --git a/app/commands/SisGetCourse.php b/app/commands/SisGetCourse.php index b65f6c8..558f136 100644 --- a/app/commands/SisGetCourse.php +++ b/app/commands/SisGetCourse.php @@ -74,7 +74,7 @@ public function __construct( /** * Register the command. */ - protected function configure() + protected function configure(): void { $this->addArgument('ukco', InputArgument::REQUIRED, 'SIS ID of the user whose courses are being loaded.'); $this->addOption( diff --git a/app/commands/SisGetUser.php b/app/commands/SisGetUser.php index 3fdf98d..8b31117 100644 --- a/app/commands/SisGetUser.php +++ b/app/commands/SisGetUser.php @@ -34,7 +34,7 @@ public function __construct(SisHelper $sis) /** * Register the command. */ - protected function configure() + protected function configure(): void { $this->addArgument('ukco', InputArgument::REQUIRED, 'SIS ID of the user.'); } diff --git a/app/config/config.local.neon.example b/app/config/config.local.neon.example index b7ed013..c1d33ba 100644 --- a/app/config/config.local.neon.example +++ b/app/config/config.local.neon.example @@ -23,8 +23,10 @@ parameters: # The most important part - a database system connection nettrine.dbal: - connection: - host: "localhost" - user: "recodex-sis-ext" - password: "someSecretPasswordYouNeedToSetYourself" - dbname: "recodex-sis-ext" + connections: + default: + charset: utf8mb4 + host: "localhost" + user: "recodex-sis-ext" + password: "someSecretPasswordYouNeedToSetYourself" + dbname: "recodex-sis-ext" diff --git a/app/config/config.neon b/app/config/config.neon index 6b8df07..c7633a1 100644 --- a/app/config/config.neon +++ b/app/config/config.neon @@ -18,7 +18,6 @@ parameters: audience: "%webapp.address%" expiration: 86400 # of regular auth tokens (seconds) usedAlgorithm: HS256 - verificationKey: "sis-ext-123" recodex: # just a placeholder, this needs to be overridden in local config apiBase: null @@ -81,14 +80,8 @@ acl: extensions: console: Contributte\Console\DI\ConsoleExtension(%consoleMode%) - nettrine.annotations: Nettrine\Annotations\DI\AnnotationsExtension - nettrine.cache: Nettrine\Cache\DI\CacheExtension nettrine.dbal: Nettrine\DBAL\DI\DbalExtension - nettrine.dbal.console: Nettrine\DBAL\DI\DbalConsoleExtension nettrine.orm: Nettrine\ORM\DI\OrmExtension - nettrine.orm.cache: Nettrine\ORM\DI\OrmCacheExtension - nettrine.orm.console: Nettrine\ORM\DI\OrmConsoleExtension(%consoleMode%) - nettrine.orm.annotations: Nettrine\ORM\DI\OrmAnnotationsExtension nettrine.migrations: Nettrine\Migrations\DI\MigrationsExtension nettrine.extensions.atlantic18: Nettrine\Extensions\Atlantic18\DI\Atlantic18BehaviorExtension fixtures: Zenify\DoctrineFixtures\DI\FixturesExtension @@ -146,39 +139,32 @@ nettrine.dbal: debug: panel: false sourcePaths: [%appDir%] - connection: - driver: pdo_mysql - host: localhost - dbname: 'recodex-sis-ext' - user: 'root' - password: '' - charset: utf8mb4 - types: - bit: Doctrine\DBAL\Types\BooleanType - datetime: DoctrineExtensions\DBAL\Types\UTCDateTimeType - uuid: Ramsey\Uuid\Doctrine\UuidType - defaultTableOptions: - charset: utf8mb4 - collate: utf8mb4_unicode_ci + types: + bit: Doctrine\DBAL\Types\BooleanType + datetime: DoctrineExtensions\DBAL\Types\UTCDateTimeType + uuid: Ramsey\Uuid\Doctrine\UuidType + connections: + default: + driver: pdo_mysql + host: localhost + # charset: utf8mb4 + defaultTableOptions: + charset: utf8mb4 + collate: utf8mb4_unicode_ci nettrine.orm: - configuration: - autoGenerateProxyClasses: true - customStringFunctions: - coalesce_sub: DoctrineExtensions\Query\Functions\CoalesceSubselectsFunction - type: DoctrineExtensions\Query\Functions\TypeFunction - -nettrine.orm.annotations: - mapping: - App\Model\Entity: %appDir%/model/entity - -nettrine.annotations: - ignore: - - LoggedIn - - POST - - GET - - PUT - - DELETE + managers: + default: + connection: default + mapping: + App: + directories: [%appDir%/model/entity] + namespace: App\Model\Entity + autoGenerateProxyClasses: true + lazyNativeObjects: true + customStringFunctions: + coalesce_sub: DoctrineExtensions\Query\Functions\CoalesceSubselectsFunction + type: DoctrineExtensions\Query\Functions\TypeFunction nettrine.extensions.atlantic18: softDeleteable: true @@ -186,8 +172,9 @@ nettrine.extensions.atlantic18: nettrine.migrations: table: doctrine_migrations # database table for applied migrations column: version # database column for applied migrations - directory: %appDir%/../migrations # directory, where all migrations are stored - namespace: Migrations # namespace of migration classes + directories: + Migrations: %appDir%/../migrations # directory, where all migrations are stored + # namespace: Migrations # namespace of migration classes fixtures: locale: "en_US" diff --git a/app/exceptions/BadRequestException.php b/app/exceptions/BadRequestException.php index 5732db0..f47c528 100644 --- a/app/exceptions/BadRequestException.php +++ b/app/exceptions/BadRequestException.php @@ -23,7 +23,7 @@ public function __construct( string $msg = 'one or more parameters are missing', string $frontendErrorCode = FrontendErrorMappings::E400_000__BAD_REQUEST, $frontendErrorParams = null, - Exception $previous = null + ?Exception $previous = null ) { parent::__construct( "Bad Request - $msg", diff --git a/app/helpers/Emails/EmailHelper/EmailHelper.php b/app/helpers/Emails/EmailHelper/EmailHelper.php index 8671199..4d58a85 100644 --- a/app/helpers/Emails/EmailHelper/EmailHelper.php +++ b/app/helpers/Emails/EmailHelper/EmailHelper.php @@ -93,13 +93,13 @@ public function sendFromDefault(array $to, string $locale, string $subject, stri * @param Exception $lastMailerException Exception thrown from the sender (if any). Its message is logged as well. * @throws Exception */ - private function archiveMailCopy(Message $message, Exception $lastMailerException = null) + private function archiveMailCopy(Message $message, ?Exception $lastMailerException = null) { if (!file_exists($this->archivingDir)) { mkdir($this->archivingDir, 0775, true); // make sure logging directory exists } - // Logging is not that important, all following opertions fail silently. + // Logging is not that important, all following operations fail silently. if (file_exists($this->archivingDir) && is_writeable($this->archivingDir)) { $data = [ '----- BEGIN MAIL -----', diff --git a/app/helpers/ZenifyFixtures/Alice/CustomNativeLoader.php b/app/helpers/ZenifyFixtures/Alice/CustomNativeLoader.php index 6911788..70c3f41 100644 --- a/app/helpers/ZenifyFixtures/Alice/CustomNativeLoader.php +++ b/app/helpers/ZenifyFixtures/Alice/CustomNativeLoader.php @@ -20,7 +20,7 @@ class CustomNativeLoader extends NativeLoader * @param FakerGenerator|null $fakerGenerator * @param ChainableParserInterface[] $parsers */ - public function __construct(FakerGenerator $fakerGenerator = null, array $parsers) + public function __construct(?FakerGenerator $fakerGenerator = null, array $parsers = []) { $this->parsers = $parsers; // this needs to be first parent::__construct($fakerGenerator); diff --git a/app/model/entity/SisAffiliation.php b/app/model/entity/SisAffiliation.php index f7d9d69..4cdd9e4 100644 --- a/app/model/entity/SisAffiliation.php +++ b/app/model/entity/SisAffiliation.php @@ -4,29 +4,20 @@ use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity - * @ORM\Table(uniqueConstraints={@ORM\UniqueConstraint(columns={"user_id", "event_id"})}) - * Holding affiliations between users and scheduling events (student/teacher/guarantor). - * This is merely a cache for SIS data. - */ +#[ORM\Table] +#[ORM\UniqueConstraint(columns: ['user_id', 'event_id'])] +#[ORM\Entity] class SisAffiliation { - /** - * @ORM\Id - * @ORM\Column(type="integer") - * @ORM\GeneratedValue(strategy="AUTO") - */ + #[ORM\Id] + #[ORM\Column(type: 'integer')] + #[ORM\GeneratedValue(strategy: 'AUTO')] protected $id; - /** - * @ORM\ManyToOne(targetEntity="User") - */ + #[ORM\ManyToOne(targetEntity: User::class)] protected $user; - /** - * @ORM\ManyToOne(targetEntity="SisScheduleEvent", inversedBy="affiliations") - */ + #[ORM\ManyToOne(targetEntity: SisScheduleEvent::class, inversedBy: 'affiliations')] protected $event; public const TYPE_STUDENT = 'student'; @@ -34,9 +25,9 @@ class SisAffiliation public const TYPE_GUARANTOR = 'guarantor'; /** - * @ORM\Column(type="string") * One of TYPE_* values (student, teacher...) */ + #[ORM\Column(type: 'string')] protected $type; public function __construct( diff --git a/app/model/entity/SisCourse.php b/app/model/entity/SisCourse.php index 8b7a372..b8c5405 100644 --- a/app/model/entity/SisCourse.php +++ b/app/model/entity/SisCourse.php @@ -7,58 +7,52 @@ use DateTime; use JsonSerializable; -/** - * @ORM\Entity - * Record holding information about one course from SIS. - * This is merely a cache for SIS data. - */ +#[ORM\Entity] class SisCourse implements JsonSerializable { use CreatableEntity; use UpdatableEntity; /** - * @ORM\Id - * @ORM\Column(type="uuid", unique=true) - * @ORM\GeneratedValue(strategy="CUSTOM") - * @ORM\CustomIdGenerator(class=\Ramsey\Uuid\Doctrine\UuidGenerator::class) * @var \Ramsey\Uuid\UuidInterface */ + #[ORM\Id] + #[ORM\Column(type: 'uuid', unique: true)] + #[ORM\GeneratedValue(strategy: 'CUSTOM')] + #[ORM\CustomIdGenerator(class: \Ramsey\Uuid\Doctrine\UuidGenerator::class)] protected $id; /** - * @ORM\Column(type="string", unique=true) * Identification (code) of the course in SIS. */ + #[ORM\Column(type: 'string', unique: true)] protected $code; /** - * @ORM\Column(type="string") * Name of the course in Czech. */ + #[ORM\Column(type: 'string')] protected $captionCs; /** - * @ORM\Column(type="string") * Name of the course in English. */ + #[ORM\Column(type: 'string')] protected $captionEn; /** - * @ORM\Column(type="text") * Annotation of the course in Czech. */ + #[ORM\Column(type: 'text')] protected $annotationCs = ''; /** - * @ORM\Column(type="text") * Annotation of the course in English. */ + #[ORM\Column(type: 'text')] protected $annotationEn = ''; - /** - * @ORM\OneToMany(targetEntity="SisScheduleEvent", mappedBy="course") - */ + #[ORM\OneToMany(targetEntity: SisScheduleEvent::class, mappedBy: 'course')] protected $events; diff --git a/app/model/entity/SisScheduleEvent.php b/app/model/entity/SisScheduleEvent.php index 9122ae8..f526678 100644 --- a/app/model/entity/SisScheduleEvent.php +++ b/app/model/entity/SisScheduleEvent.php @@ -7,40 +7,31 @@ use DateTime; use JsonSerializable; -/** - * @ORM\Entity - * A record representing one scheduling event (ticket) from SIS. One event corresponds to one part of a course - * (usually a lecture or labs) visited by a group of students. This event usually corresponds to one group in ReCodEx. - * This is merely a cache for SIS data. - */ +#[ORM\Entity] class SisScheduleEvent implements JsonSerializable { use CreatableEntity; use UpdatableEntity; /** - * @ORM\Id - * @ORM\Column(type="uuid", unique=true) - * @ORM\GeneratedValue(strategy="CUSTOM") - * @ORM\CustomIdGenerator(class=\Ramsey\Uuid\Doctrine\UuidGenerator::class) * @var \Ramsey\Uuid\UuidInterface */ + #[ORM\Id] + #[ORM\Column(type: 'uuid', unique: true)] + #[ORM\GeneratedValue(strategy: 'CUSTOM')] + #[ORM\CustomIdGenerator(class: \Ramsey\Uuid\Doctrine\UuidGenerator::class)] protected $id; /** - * @ORM\Column(type="string", unique=true) * Code of the scheduling event (ticket) denoted in SIS as 'GL'. */ + #[ORM\Column(type: 'string', unique: true)] protected $sisId; - /** - * @ORM\ManyToOne(targetEntity="SisTerm") - */ + #[ORM\ManyToOne(targetEntity: SisTerm::class)] protected $term; - /** - * @ORM\ManyToOne(targetEntity="SisCourse", inversedBy="events") - */ + #[ORM\ManyToOne(targetEntity: SisCourse::class, inversedBy: 'events')] protected $course; public const TYPE_LECTURE = 'lecture'; @@ -48,50 +39,48 @@ class SisScheduleEvent implements JsonSerializable public const TYPE_UNKNOWN = '?'; /** - * @ORM\Column(type="string") * One of TYPE_* values (lecture, labs, ...) */ + #[ORM\Column(type: 'string')] protected $type; /** - * @ORM\Column(type="integer", nullable=true) * Day of the week (0=Sunday, 1=Monday...6=Saturday) */ + #[ORM\Column(type: 'integer', nullable: true)] protected $dayOfWeek; /** - * @ORM\Column(type="integer", nullable=true) * When the lecture starts (logical weeks of the semester). */ + #[ORM\Column(type: 'integer', nullable: true)] protected $firstWeek; /** - * @ORM\Column(type="integer", nullable=true) * Time of the day when the event starts as minutes from midnight. */ + #[ORM\Column(type: 'integer', nullable: true)] protected $time; /** - * @ORM\Column(type="integer", nullable=true) * Length of the event in minutes. */ + #[ORM\Column(type: 'integer', nullable: true)] protected $length; /** - * @ORM\Column(type="string", nullable=true) * Where the event is located. */ + #[ORM\Column(type: 'string', nullable: true)] protected $room; /** - * @ORM\Column(type="boolean") * If true, the event takes place once every two weeks (false = regular weekly scheduling). */ + #[ORM\Column(type: 'boolean')] protected $fortnight = false; - /** - * @ORM\OneToMany(targetEntity="SisAffiliation", mappedBy="event") - */ + #[ORM\OneToMany(targetEntity: SisAffiliation::class, mappedBy: 'event')] protected $affiliations; public function __construct( diff --git a/app/model/entity/SisTerm.php b/app/model/entity/SisTerm.php index 14f2ef5..0ad3a95 100644 --- a/app/model/entity/SisTerm.php +++ b/app/model/entity/SisTerm.php @@ -8,75 +8,67 @@ use JsonSerializable; use InvalidArgumentException; -/** - * @ORM\Entity - * A record representing one semester with all important dates, especially the ranges from-until - * it is advertised to students/teachers. This needs to be set by admin to correctly handle SIS operations. - */ +#[ORM\Entity] class SisTerm implements JsonSerializable { use CreatableEntity; use UpdatableEntity; /** - * @ORM\Id - * @ORM\Column(type="uuid", unique=true) - * @ORM\GeneratedValue(strategy="CUSTOM") - * @ORM\CustomIdGenerator(class=\Ramsey\Uuid\Doctrine\UuidGenerator::class) * @var \Ramsey\Uuid\UuidInterface */ + #[ORM\Id] + #[ORM\Column(type: 'uuid', unique: true)] + #[ORM\GeneratedValue(strategy: 'CUSTOM')] + #[ORM\CustomIdGenerator(class: \Ramsey\Uuid\Doctrine\UuidGenerator::class)] protected $id; /** - * @ORM\Column(type="integer") * Calendar year in which the academic year begins. */ + #[ORM\Column(type: 'integer')] protected $year; /** - * @ORM\Column(type="integer") * 1 = winter term, 2 = summer term */ + #[ORM\Column(type: 'integer')] protected $term; - /** - * @ORM\Column(type="datetime", nullable=true) - */ + #[ORM\Column(type: 'datetime', nullable: true)] protected $beginning = null; - /** - * @ORM\Column(type="datetime", nullable=true) - */ + #[ORM\Column(type: 'datetime', nullable: true)] protected $end = null; /** - * @ORM\Column(type="datetime") * From when the term should be advertised to students (students can enroll groups). */ + #[ORM\Column(type: 'datetime')] protected $studentsFrom; /** - * @ORM\Column(type="datetime") * Until when the term should be advertised to students (students can enroll groups). */ + #[ORM\Column(type: 'datetime')] protected $studentsUntil; /** - * @ORM\Column(type="datetime") * From when the term should be advertised to teachers (teachers can create groups). */ + #[ORM\Column(type: 'datetime')] protected $teachersFrom; /** - * @ORM\Column(type="datetime") * Until when the term should be advertised to teachers (teachers can create groups). */ + #[ORM\Column(type: 'datetime')] protected $teachersUntil; /** - * @ORM\Column(type="datetime", nullable=true) * After this date, semi-automated group archiving will be suggested. */ + #[ORM\Column(type: 'datetime', nullable: true)] protected $archiveAfter = null; public function __construct( diff --git a/app/model/entity/SisUser.php b/app/model/entity/SisUser.php index 1d21711..42668f1 100644 --- a/app/model/entity/SisUser.php +++ b/app/model/entity/SisUser.php @@ -6,61 +6,44 @@ use DateTime; use JsonSerializable; -/** - * @ORM\Entity - * This is a cache for user-related data from SIS. - */ +#[ORM\Entity] class SisUser implements JsonSerializable { use CreatableEntity; use UpdatableEntity; /** - * @ORM\Id - * @ORM\Column(type="string", unique=true) * Also known as UKCO. */ + #[ORM\Id] + #[ORM\Column(type: 'string', unique: true)] protected $id; /** - * @ORM\Column(type="string", unique=true, nullable=true) * Alphanumerical login generated from name (which is used as alternative login to SIS). */ + #[ORM\Column(type: 'string', unique: true, nullable: true)] protected $login = null; - /** - * @ORM\Column(type="string") - */ + #[ORM\Column(type: 'string')] protected $titlesBeforeName; - /** - * @ORM\Column(type="string") - */ + #[ORM\Column(type: 'string')] protected $firstName; - /** - * @ORM\Column(type="string") - */ + #[ORM\Column(type: 'string')] protected $lastName; - /** - * @ORM\Column(type="string") - */ + #[ORM\Column(type: 'string')] protected $titlesAfterName; - /** - * @ORM\Column(type="string") - */ + #[ORM\Column(type: 'string')] protected $email; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] protected $student = false; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: 'boolean')] protected $teacher = false; public function __construct( diff --git a/app/model/entity/User.php b/app/model/entity/User.php index 130595d..51d8746 100644 --- a/app/model/entity/User.php +++ b/app/model/entity/User.php @@ -8,104 +8,89 @@ use JsonSerializable; use InvalidArgumentException; -/** - * @ORM\Entity - * This holds a copy of user-related data from ReCodEx. - */ +#[ORM\Entity] class User implements JsonSerializable { use CreatableEntity; use UpdatableEntity; /** - * @ORM\Id - * @ORM\Column(type="uuid", unique=true) * A copy of ID from ReCodEx */ + #[ORM\Id] + #[ORM\Column(type: 'uuid', unique: true)] protected $id; /** - * @ORM\Column(type="uuid") * ID of ReCodEx instance where the user belongs to. */ + #[ORM\Column(type: 'uuid')] protected $instanceId; /** - * @ORM\Column(type="string", unique=true, nullable=true) * Also known as UKCO. */ + #[ORM\Column(type: 'string', unique: true, nullable: true)] protected $sisId = null; /** - * @ORM\Column(type="string", unique=true, nullable=true) * Alphanumerical login generated from name (which is used as alternative login to SIS). */ + #[ORM\Column(type: 'string', unique: true, nullable: true)] protected $sisLogin = null; - /** - * @ORM\Column(type="string") - */ + #[ORM\Column(type: 'string')] protected $titlesBeforeName; - /** - * @ORM\Column(type="string") - */ + #[ORM\Column(type: 'string')] protected $firstName; - /** - * @ORM\Column(type="string") - */ + #[ORM\Column(type: 'string')] protected $lastName; - /** - * @ORM\Column(type="string") - */ + #[ORM\Column(type: 'string')] protected $titlesAfterName; - /** - * @ORM\Column(type="string") - */ + #[ORM\Column(type: 'string')] protected $email; - /** - * @ORM\Column(type="string") - */ + #[ORM\Column(type: 'string')] protected $role; /** - * @ORM\Column(type="string", length=32) * Copied from UserSettings */ + #[ORM\Column(type: 'string', length: 32)] protected $defaultLanguage; /** - * @ORM\Column(type="datetime", nullable=true) * This is not a copy of ReCodEx field, it is used to manage validity of SIS-ext tokens. */ + #[ORM\Column(type: 'datetime', nullable: true)] protected $tokenValidityThreshold; /** - * @ORM\Column(type="datetime", nullable=true) * When the user data (corresponding SisUser entity) were last loaded from SIS. - * This needs to be kept here as well since no SisUser entity may have been loaded (yet). - */ + This needs to be kept here as well since no SisUser entity may have been loaded (yet). + */ + #[ORM\Column(type: 'datetime', nullable: true)] protected $sisUserLoaded = null; /** - * @ORM\Column(type="datetime", nullable=true) * When the SIS events were loaded for the last time (events, affiliations...). - * This needs to be kept here since the events and courses may be shared and (also) - * no affiliations may have been loaded the last time. - */ + This needs to be kept here since the events and courses may be shared and (also) + no affiliations may have been loaded the last time. + */ + #[ORM\Column(type: 'datetime', nullable: true)] protected $sisEventsLoaded = null; /** - * @ORM\Column(type="text", length=1024, nullable=true) * Prefix of the ReCodEx authentication token used to perform operations on ReCodEx API. - * The suffix is stored in our token used to authenticate against this API as a payload. - * The division of the token in two parts makes it more difficult to get the whole token and breach the security. - * This column SHOULD NEVER be sent over to the client side (or anywhere else). - */ + The suffix is stored in our token used to authenticate against this API as a payload. + The division of the token in two parts makes it more difficult to get the whole token and breach the security. + This column SHOULD NEVER be sent over to the client side (or anywhere else). + */ + #[ORM\Column(type: 'text', length: 1024, nullable: true)] protected $recodexToken = null; public function __construct( diff --git a/app/model/entity/UserChangelog.php b/app/model/entity/UserChangelog.php index b82ff86..5a291f9 100644 --- a/app/model/entity/UserChangelog.php +++ b/app/model/entity/UserChangelog.php @@ -6,30 +6,23 @@ use JsonSerializable; use DateTime; -/** - * @ORM\Entity - * Records about changes made when synchronizing user data. - */ +#[ORM\Entity] class UserChangelog implements JsonSerializable { use CreatableEntity; - /** - * @ORM\Id - * @ORM\Column(type="integer") - * @ORM\GeneratedValue(strategy="AUTO") - */ + #[ORM\Id] + #[ORM\Column(type: 'integer')] + #[ORM\GeneratedValue(strategy: 'AUTO')] protected $id; - /** - * @ORM\ManyToOne(targetEntity="User") - */ + #[ORM\ManyToOne(targetEntity: User::class)] protected $user; /** - * @ORM\Column(type="text", length=65535) * JSON encoded diff (log of changes). */ + #[ORM\Column(type: 'text', length: 65535)] protected $diff = null; diff --git a/app/model/entity/base/CreateableEntity.php b/app/model/entity/base/CreateableEntity.php index c0d4d72..8ff5883 100644 --- a/app/model/entity/base/CreateableEntity.php +++ b/app/model/entity/base/CreateableEntity.php @@ -7,11 +7,8 @@ trait CreatableEntity { - /** - * @ORM\Column(type="datetime") - * @var DateTime - */ - protected $createdAt; + #[ORM\Column(type: 'datetime')] + protected DateTime $createdAt; public function getCreatedAt(): DateTime { diff --git a/app/model/entity/base/DeletableEntity.php b/app/model/entity/base/DeletableEntity.php index 01a4827..2b239f3 100644 --- a/app/model/entity/base/DeletableEntity.php +++ b/app/model/entity/base/DeletableEntity.php @@ -8,11 +8,8 @@ // @phpstan-ignore trait.unused trait DeletableEntity { - /** - * @ORM\Column(type="datetime", nullable=true) - * @var DateTime - */ - protected $deletedAt = null; + #[ORM\Column(type: 'datetime', nullable: true)] + protected ?DateTime $deletedAt = null; public function getDeletedAt(): ?DateTime { diff --git a/app/model/entity/base/UpdateableEntity.php b/app/model/entity/base/UpdateableEntity.php index a2cef65..0f54bd6 100644 --- a/app/model/entity/base/UpdateableEntity.php +++ b/app/model/entity/base/UpdateableEntity.php @@ -7,11 +7,8 @@ trait UpdatableEntity { - /** - * @ORM\Column(type="datetime") - * @var DateTime - */ - protected $updatedAt; + #[ORM\Column(type: 'datetime')] + protected DateTime $updatedAt; public function getUpdatedAt(): DateTime { diff --git a/app/model/helpers/CustomCoalesceFunction.php b/app/model/helpers/CustomCoalesceFunction.php index ff30835..e7f859a 100644 --- a/app/model/helpers/CustomCoalesceFunction.php +++ b/app/model/helpers/CustomCoalesceFunction.php @@ -2,14 +2,16 @@ namespace DoctrineExtensions\Query\Functions; -use Doctrine\ORM\Query\Lexer; +use Doctrine\ORM\Query\TokenType; use Doctrine\ORM\Query\AST\Functions\FunctionNode; +use Doctrine\ORM\Query\SqlWalker; +use Doctrine\ORM\Query\Parser; /** - * "COALESCE_SUB" "(" "(" Subselect ")" {"," "(" Subselect ")" }* ")" + * "COALESCE_SUB" "(" "(" sub-select ")" {"," "(" sub-select ")" }* ")" * * This is actually a workaround since regular COALESCE statement does not - * support nested selects in DQL. This one expects only subselects. + * support nested selects in DQL. This one expects only sub-selects. * * Final SQL uses the same COALESCE function as the COALESCE statement in DQL. */ @@ -20,7 +22,7 @@ class CoalesceSubselectsFunction extends FunctionNode /** * @override */ - public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) + public function getSql(SqlWalker $sqlWalker): string { $platform = $sqlWalker->getConnection()->getDatabasePlatform(); @@ -36,23 +38,23 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) /** * @override */ - public function parse(\Doctrine\ORM\Query\Parser $parser) + public function parse(Parser $parser): void { - $parser->match(Lexer::T_IDENTIFIER); - $parser->match(Lexer::T_OPEN_PARENTHESIS); + $parser->match(TokenType::T_IDENTIFIER); + $parser->match(TokenType::T_OPEN_PARENTHESIS); - $parser->match(Lexer::T_OPEN_PARENTHESIS); + $parser->match(TokenType::T_OPEN_PARENTHESIS); $this->subselectExpressions[] = $parser->Subselect(); - $parser->match(Lexer::T_CLOSE_PARENTHESIS); + $parser->match(TokenType::T_CLOSE_PARENTHESIS); - while ($parser->getLexer()->isNextToken(Lexer::T_COMMA)) { - $parser->match(Lexer::T_COMMA); + while ($parser->getLexer()->isNextToken(TokenType::T_COMMA)) { + $parser->match(TokenType::T_COMMA); - $parser->match(Lexer::T_OPEN_PARENTHESIS); + $parser->match(TokenType::T_OPEN_PARENTHESIS); $this->subselectExpressions[] = $parser->Subselect(); - $parser->match(Lexer::T_CLOSE_PARENTHESIS); + $parser->match(TokenType::T_CLOSE_PARENTHESIS); } - $parser->match(Lexer::T_CLOSE_PARENTHESIS); + $parser->match(TokenType::T_CLOSE_PARENTHESIS); } } diff --git a/app/model/helpers/DqlTypeFunction.php b/app/model/helpers/DqlTypeFunction.php index 64b3bca..c14f173 100644 --- a/app/model/helpers/DqlTypeFunction.php +++ b/app/model/helpers/DqlTypeFunction.php @@ -3,7 +3,7 @@ namespace DoctrineExtensions\Query\Functions; use Doctrine\ORM\Query\AST\Functions\FunctionNode; -use Doctrine\ORM\Query\Lexer; +use Doctrine\ORM\Query\TokenType; use Doctrine\ORM\Query\Parser; use Doctrine\ORM\Query\QueryException; use Doctrine\ORM\Query\SqlWalker; @@ -13,7 +13,7 @@ * queries. * * Assuming the same "Person" entity from Doctrine's documentation on - * Inheritence Mapping, which has a discriminator field named "discr": + * Inheritance Mapping, which has a discriminator field named "discr": * * Using the TYPE() function, DQL will interpret this: * @@ -45,10 +45,10 @@ class TypeFunction extends FunctionNode * @param SqlWalker $sqlWalker * @return string */ - public function getSql(SqlWalker $sqlWalker) + public function getSql(SqlWalker $sqlWalker): string { $qComp = $sqlWalker->getQueryComponent($this->dqlAlias); - /** @var \Doctrine\ORM\Mapping\ClassMetadataInfo $class */ + /** @var \Doctrine\ORM\Mapping\ClassMetadata $class */ $class = $qComp['metadata']; $tableAlias = $sqlWalker->getSQLTableAlias($class->getTableName(), $this->dqlAlias); @@ -64,13 +64,13 @@ public function getSql(SqlWalker $sqlWalker) /** * @param Parser $parser */ - public function parse(Parser $parser) + public function parse(Parser $parser): void { - $parser->match(Lexer::T_IDENTIFIER); - $parser->match(Lexer::T_OPEN_PARENTHESIS); + $parser->match(TokenType::T_IDENTIFIER); + $parser->match(TokenType::T_OPEN_PARENTHESIS); $this->dqlAlias = $parser->IdentificationVariable(); - $parser->match(Lexer::T_CLOSE_PARENTHESIS); + $parser->match(TokenType::T_CLOSE_PARENTHESIS); } } diff --git a/app/model/helpers/OrderByCollationInjectionMysqlWalker.php b/app/model/helpers/OrderByCollationInjectionMysqlWalker.php index f36cd97..3adc1d4 100644 --- a/app/model/helpers/OrderByCollationInjectionMysqlWalker.php +++ b/app/model/helpers/OrderByCollationInjectionMysqlWalker.php @@ -13,10 +13,10 @@ class OrderByCollationInjectionMysqlWalker extends SqlWalker /** * Name of the hint, which holds the actual collation. */ - public const HINT_COLLATION = 'orderByCollationInjectionMysqlWalker.collation'; - public const HINT_COLLATION_FORBIDDEN_COLUMNS = 'orderByCollationInjectionMysqlWalker.forbiddenCols'; + private const HINT_COLLATION = 'orderByCollationInjectionMysqlWalker.collation'; + private const HINT_COLLATION_FORBIDDEN_COLUMNS = 'orderByCollationInjectionMysqlWalker.forbiddenCols'; - private function isForbidden($orderByItemTokens) + private function isForbidden(array $orderByItemTokens) { $forbiddenColumns = $this->getQuery()->getHint(self::HINT_COLLATION_FORBIDDEN_COLUMNS); if ( @@ -33,14 +33,14 @@ private function isForbidden($orderByItemTokens) return false; } - public function walkOrderByItem($orderByItem) + public function walkOrderByItem($orderByItem): string { $sql = parent::walkOrderByItem($orderByItem); $collation = $this->getQuery()->getHint(self::HINT_COLLATION); $tokens = explode(' ', $sql); if ($collation && count($tokens) > 1 && !$this->isForbidden($tokens)) { - // 'colname ASC|DESC' => 'colname COLLATE colation ASC|DESC' + // 'col-name ASC|DESC' => 'col-name COLLATE collation ASC|DESC' $direction = array_pop($tokens); array_push($tokens, 'COLLATE', $collation, $direction); } diff --git a/app/model/helpers/UTCDateTimeType.php b/app/model/helpers/UTCDateTimeType.php index 3ce3901..bbf812f 100644 --- a/app/model/helpers/UTCDateTimeType.php +++ b/app/model/helpers/UTCDateTimeType.php @@ -5,6 +5,9 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\DateTimeType; +use DateTime; +use DateTimeImmutable; +use DateTimeZone; /** * Special type for storing and loading UTC datetime structures from database. @@ -16,35 +19,38 @@ class UTCDateTimeType extends DateTimeType private static function getUtc() { - return self::$utc ? self::$utc : self::$utc = new \DateTimeZone('UTC'); + return self::$utc ? self::$utc : self::$utc = new DateTimeZone('UTC'); } - public function convertToDatabaseValue($value, AbstractPlatform $platform) + public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string { - if ($value instanceof \DateTime) { + if ($value instanceof DateTimeImmutable) { + $value = DateTime::createFromImmutable($value); + } + if ($value instanceof DateTime) { $value->setTimezone(self::getUtc()); } return parent::convertToDatabaseValue($value, $platform); } - public function convertToPHPValue($value, AbstractPlatform $platform) + public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?DateTime { - if (null === $value || $value instanceof \DateTime) { + if (null === $value || $value instanceof DateTime) { return $value; } - $converted = \DateTime::createFromFormat( + $converted = DateTime::createFromFormat( $platform->getDateTimeFormatString(), $value, self::getUtc() ); if (!$converted) { - throw ConversionException::conversionFailedFormat( - $value, - $this->getName(), - $platform->getDateTimeFormatString() + $value = strlen($value) > 32 ? substr($value, 0, 20) . '...' : $value; + throw new ConversionException( + 'Could not convert database value "' . $value . '" to Doctrine Type datetime. Expected format: ' + . $platform->getDateTimeFormatString(), ); } diff --git a/app/model/repository/base/BaseSoftDeleteRepository.php b/app/model/repository/base/BaseSoftDeleteRepository.php deleted file mode 100644 index 82d8990..0000000 --- a/app/model/repository/base/BaseSoftDeleteRepository.php +++ /dev/null @@ -1,146 +0,0 @@ - - */ -class BaseSoftDeleteRepository extends BaseRepository -{ - protected $softDeleteColumn; - - public function __construct(EntityManagerInterface $em, $entityType, $softDeleteColumn = "deletedAt") - { - parent::__construct($em, $entityType); - $this->softDeleteColumn = $softDeleteColumn; - } - - /** - * @param mixed $id - * @return T|null - */ - public function get($id) - { - return $this->findOneBy(['id' => $id]); - } - - public function getTotalCount(): int - { - return $this->repository->count( - [ - $this->softDeleteColumn => null - ] - ); - } - - /** - * @return T[] - */ - public function findAll(): array - { - return $this->repository->findBy( - [ - $this->softDeleteColumn => null - ] - ); - } - - /** - * @return T[] - */ - public function findAllAndIReallyMeanAllOkay(): array - { - return $this->repository->findAll(); - } - - /** - * @param array $criteria - * @param array|null $orderBy - * @param null $limit - * @param null $offset - * @return T[] - */ - public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null): array - { - return $this->repository->findBy( - array_merge( - $criteria, - [ - $this->softDeleteColumn => null - ] - ), - $orderBy, - $limit, - $offset - ); - } - - /** - * @param array $criteria - * @return T|null - */ - public function findOneBy(array $criteria) - { - return $this->repository->findOneBy( - array_merge( - $criteria, - [ - $this->softDeleteColumn => null - ] - ) - ); - } - - /** - * @param array $params - * @return T|null - */ - public function findOneByEvenIfDeleted(array $params) - { - return $this->repository->findOneBy($params); - } - - /** - * @param mixed $id - * @return T - * @throws NotFoundException - */ - public function findOrThrow($id) - { - $entity = $this->findOneBy(['id' => $id]); - if (!$entity) { - throw new NotFoundException("Cannot find '$id'"); - } - return $entity; - } - - /** - * @param Criteria $params - * @return AbstractLazyCollection - */ - public function matching(Criteria $params): AbstractLazyCollection - { - $params->andWhere(Criteria::expr()->isNull($this->softDeleteColumn)); - return $this->repository->matching($params); - } - - /** - * @param string $alias - * @param string|null $indexBy - * @return QueryBuilder - */ - public function createQueryBuilder(string $alias, string $indexBy = null): QueryBuilder - { - $qb = $this->repository->createQueryBuilder($alias, $indexBy); - $softDeleteColumn = $alias ? "$alias.$this->softDeleteColumn" : $this->softDeleteColumn; - $qb->andWhere($qb->expr()->isNull($softDeleteColumn)); - return $qb; - } -} diff --git a/composer.json b/composer.json index b795385..f0da508 100644 --- a/composer.json +++ b/composer.json @@ -22,27 +22,25 @@ }, "config": { "platform": { - "php": "8.2.0" + "php": "8.5" } }, "require": { - "php": ">=8.2", - "contributte/console": "^0.10.0", + "php": ">=8.4", + "contributte/console": "^0.11", "ext-yaml": ">=2.0", "ext-json": ">=1.7", "ext-zip": ">=1.15", - "firebase/php-jwt": "^6.11", + "firebase/php-jwt": "^7.0", "guzzlehttp/guzzle": "^7.10", - "latte/latte": "^3.0", + "latte/latte": "^3.1", "league/commonmark": "^2.3", - "limenet/git-version": "v0.1.6", "nelmio/alice": "^3.14", "nette/application": "^3.1", "nette/bootstrap": "^3.1", "nette/caching": "^3.1", "nette/database": "^3.1", "nette/di": "^3.0", - "nette/finder": "^3.0", "nette/forms": "^3.1", "nette/http": "^3.1", "nette/mail": "^4.0", @@ -51,12 +49,12 @@ "nette/safe-stream": "^3.0", "nette/security": "^3.1", "nette/utils": "^4.0", - "nettrine/dbal": "^0.9.0", - "nettrine/extensions-atlantic18": "^0.6.0", - "nettrine/orm": "^0.9.0", - "nettrine/migrations": "^0.9.0", - "ramsey/uuid-doctrine": "^2.0", - "tracy/tracy": "^2.8" + "nettrine/dbal": "^0.10", + "nettrine/extensions-atlantic18": "^0.7", + "nettrine/orm": "^0.10", + "nettrine/migrations": "^0.10", + "ramsey/uuid-doctrine": "^2.1", + "tracy/tracy": "^2.11" }, "require-dev": { "mockery/mockery": "@stable", @@ -64,7 +62,8 @@ "nette/tester": "^2.4", "phpstan/phpstan": "^2.1", "phpstan/phpstan-nette": "^2.0", - "symfony/process": "^7.1" + "symfony/process": "^8.1", + "rector/rector": "^2.5" }, "minimum-stability": "dev", "prefer-stable": true diff --git a/composer.lock b/composer.lock index ddb3839..92c27a2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,27 +4,26 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a296a0413c1f7c833396390b249c5bce", + "content-hash": "0358f3b657a434557f62a5c5db7ea310", "packages": [ { "name": "brick/math", - "version": "0.14.0", + "version": "0.18.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2" + "reference": "82944324d1c1bdb2c2618e89978d4e2ad78d69ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2", - "reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2", + "url": "https://api.github.com/repos/brick/math/zipball/82944324d1c1bdb2c2618e89978d4e2ad78d69ad", + "reference": "82944324d1c1bdb2c2618e89978d4e2ad78d69ad", "shasum": "" }, "require": { "php": "^8.2" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.2", "phpstan/phpstan": "2.1.22", "phpunit/phpunit": "^11.5" }, @@ -56,7 +55,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.14.0" + "source": "https://github.com/brick/math/tree/0.18.0" }, "funding": [ { @@ -64,39 +63,39 @@ "type": "github" } ], - "time": "2025-08-29T12:40:03+00:00" + "time": "2026-06-14T18:21:03+00:00" }, { "name": "contributte/console", - "version": "v0.10.1", + "version": "v0.11.0", "source": { "type": "git", "url": "https://github.com/contributte/console.git", - "reference": "dc2b84fb8dd795ea9988f396311aeed435aed495" + "reference": "70dd8a6661756158473b4fafc16ddb7130079dbe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/contributte/console/zipball/dc2b84fb8dd795ea9988f396311aeed435aed495", - "reference": "dc2b84fb8dd795ea9988f396311aeed435aed495", + "url": "https://api.github.com/repos/contributte/console/zipball/70dd8a6661756158473b4fafc16ddb7130079dbe", + "reference": "70dd8a6661756158473b4fafc16ddb7130079dbe", "shasum": "" }, "require": { "nette/di": "^3.1.8", - "php": ">=8.1", - "symfony/console": "^6.4.2 || ^7.0.2" + "php": ">=8.2", + "symfony/console": "^7.2.0 || ^8.0.0" }, "require-dev": { - "contributte/phpstan": "^0.1", - "contributte/qa": "^0.4", - "contributte/tester": "^0.4", - "mockery/mockery": "^1.6.7", + "contributte/phpstan": "^0.2.0", + "contributte/qa": "^0.4.0", + "contributte/tester": "^0.4.0", + "mockery/mockery": "^1.6.12", "nette/http": "^3.2.3", - "symfony/event-dispatcher": "^6.4.2 || ^7.0.2" + "symfony/event-dispatcher": "^7.2.0 || ^8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.11.x-dev" + "dev-master": "0.12.x-dev" } }, "autoload": { @@ -123,7 +122,7 @@ ], "support": { "issues": "https://github.com/contributte/console/issues", - "source": "https://github.com/contributte/console/tree/v0.10.1" + "source": "https://github.com/contributte/console/tree/v0.11.0" }, "funding": [ { @@ -135,7 +134,7 @@ "type": "github" } ], - "time": "2024-01-04T20:10:58+00:00" + "time": "2026-01-07T08:24:33+00:00" }, { "name": "dflydev/dot-access-data", @@ -212,189 +211,18 @@ }, "time": "2024-07-08T12:26:09+00:00" }, - { - "name": "doctrine/annotations", - "version": "1.14.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/253dca476f70808a5aeed3a47cc2cc88c5cab915", - "reference": "253dca476f70808a5aeed3a47cc2cc88c5cab915", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1 || ^2", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "~1.4.10 || ^1.10.28", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7", - "vimeo/psalm": "^4.30 || ^5.14" - }, - "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/1.14.4" - }, - "abandoned": true, - "time": "2024-09-05T10:15:52+00:00" - }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "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": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "abandoned": true, - "time": "2022-05-20T20:07:39+00:00" - }, { "name": "doctrine/collections", - "version": "2.4.0", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "9acfeea2e8666536edff3d77c531261c63680160" + "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/9acfeea2e8666536edff3d77c531261c63680160", - "reference": "9acfeea2e8666536edff3d77c531261c63680160", + "url": "https://api.github.com/repos/doctrine/collections/zipball/7713da39d8e237f28411d6a616a3dce5e20d5de2", + "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2", "shasum": "" }, "require": { @@ -451,7 +279,7 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/2.4.0" + "source": "https://github.com/doctrine/collections/tree/2.6.0" }, "funding": [ { @@ -467,143 +295,44 @@ "type": "tidelift" } ], - "time": "2025-10-25T09:18:13+00:00" - }, - { - "name": "doctrine/common", - "version": "3.5.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/d9ea4a54ca2586db781f0265d36bea731ac66ec5", - "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5", - "shasum": "" - }, - "require": { - "doctrine/persistence": "^2.0 || ^3.0 || ^4.0", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0 || ^10.0", - "doctrine/collections": "^1", - "phpstan/phpstan": "^1.4.1", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", - "squizlabs/php_codesniffer": "^3.0", - "symfony/phpunit-bridge": "^6.1", - "vimeo/psalm": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "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": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", - "homepage": "https://www.doctrine-project.org/projects/common.html", - "keywords": [ - "common", - "doctrine", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.5.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcommon", - "type": "tidelift" - } - ], - "time": "2025-01-01T22:12:03+00:00" + "time": "2026-01-15T10:01:58+00:00" }, { "name": "doctrine/dbal", - "version": "3.10.3", + "version": "4.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "65edaca19a752730f290ec2fb89d593cb40afb43" + "reference": "61e730f1658814821a85f2402c945f3883407dec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/65edaca19a752730f290ec2fb89d593cb40afb43", - "reference": "65edaca19a752730f290ec2fb89d593cb40afb43", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/61e730f1658814821a85f2402c945f3883407dec", + "reference": "61e730f1658814821a85f2402c945f3883407dec", "shasum": "" }, "require": { - "composer-runtime-api": "^2", - "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", + "doctrine/deprecations": "^1.1.5", + "php": "^8.2", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, - "conflict": { - "doctrine/cache": "< 1.11" - }, "require-dev": { - "doctrine/cache": "^1.11|^2.0", "doctrine/coding-standard": "14.0.0", "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.1", + "jetbrains/phpstorm-stubs": "2023.2", "phpstan/phpstan": "2.1.30", + "phpstan/phpstan-phpunit": "2.0.7", "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "9.6.29", - "slevomat/coding-standard": "8.24.0", - "squizlabs/php_codesniffer": "4.0.0", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/console": "^4.4|^5.4|^6.0|^7.0" + "phpunit/phpunit": "11.5.50", + "slevomat/coding-standard": "8.27.1", + "squizlabs/php_codesniffer": "4.0.1", + "symfony/cache": "^6.3.8|^7.0|^8.0", + "symfony/console": "^5.4|^6.3|^7.0|^8.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." }, - "bin": [ - "bin/doctrine-dbal" - ], "type": "library", "autoload": { "psr-4": { @@ -656,7 +385,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.10.3" + "source": "https://github.com/doctrine/dbal/tree/4.4.3" }, "funding": [ { @@ -672,33 +401,33 @@ "type": "tidelift" } ], - "time": "2025-10-09T09:05:12+00:00" + "time": "2026-03-20T08:52:12+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.5", + "version": "1.1.6", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "conflict": { - "phpunit/phpunit": "<=7.5 || >=13" + "phpunit/phpunit": "<=7.5 || >=14" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^13", - "phpstan/phpstan": "1.4.10 || 2.1.11", + "doctrine/coding-standard": "^9 || ^12 || ^14", + "phpstan/phpstan": "1.4.10 || 2.1.30", "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", "psr/log": "^1 || ^2 || ^3" }, "suggest": { @@ -718,22 +447,22 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + "source": "https://github.com/doctrine/deprecations/tree/1.1.6" }, - "time": "2025-04-07T20:06:18+00:00" + "time": "2026-02-07T07:09:04+00:00" }, { "name": "doctrine/event-manager", - "version": "2.0.1", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" + "reference": "dda33921b198841ca8dbad2eaa5d4d34769d18cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", - "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/dda33921b198841ca8dbad2eaa5d4d34769d18cf", + "reference": "dda33921b198841ca8dbad2eaa5d4d34769d18cf", "shasum": "" }, "require": { @@ -743,10 +472,10 @@ "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.24" + "doctrine/coding-standard": "^14", + "phpdocumentor/guides-cli": "^1.4", + "phpstan/phpstan": "^2.1.32", + "phpunit/phpunit": "^10.5.58" }, "type": "library", "autoload": { @@ -795,7 +524,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/2.0.1" + "source": "https://github.com/doctrine/event-manager/tree/2.1.1" }, "funding": [ { @@ -811,7 +540,7 @@ "type": "tidelift" } ], - "time": "2024-05-22T20:47:39+00:00" + "time": "2026-01-29T07:11:08+00:00" }, { "name": "doctrine/inflector", @@ -905,30 +634,29 @@ }, { "name": "doctrine/instantiator", - "version": "2.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + "reference": "23da848e1a2308728fe5fdddabf4be17ff9720c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/23da848e1a2308728fe5fdddabf4be17ff9720c7", + "reference": "23da848e1a2308728fe5fdddabf4be17ff9720c7", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^8.4" }, "require-dev": { - "doctrine/coding-standard": "^11", + "doctrine/coding-standard": "^14", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5.58" }, "type": "library", "autoload": { @@ -955,7 +683,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + "source": "https://github.com/doctrine/instantiator/tree/2.1.0" }, "funding": [ { @@ -971,32 +699,31 @@ "type": "tidelift" } ], - "time": "2022-12-30T00:23:10+00:00" + "time": "2026-01-05T06:47:08+00:00" }, { "name": "doctrine/lexer", - "version": "2.1.1", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", - "reference": "861c870e8b75f7c8f69c146c7f89cc1c0f1b49b6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.21" + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { @@ -1033,7 +760,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.1" + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { @@ -1049,20 +776,20 @@ "type": "tidelift" } ], - "time": "2024-02-05T11:35:39+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "doctrine/migrations", - "version": "3.9.4", + "version": "3.9.7", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "1b88fcb812f2cd6e77c83d16db60e3cf1e35c66c" + "reference": "96cb2a89b56c9efb0bac38e606dc0b0f13e650ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/1b88fcb812f2cd6e77c83d16db60e3cf1e35c66c", - "reference": "1b88fcb812f2cd6e77c83d16db60e3cf1e35c66c", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/96cb2a89b56c9efb0bac38e606dc0b0f13e650ec", + "reference": "96cb2a89b56c9efb0bac38e606dc0b0f13e650ec", "shasum": "" }, "require": { @@ -1072,15 +799,15 @@ "doctrine/event-manager": "^1.2 || ^2.0", "php": "^8.1", "psr/log": "^1.1.3 || ^2 || ^3", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", - "symfony/var-exporter": "^6.2 || ^7.0" + "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/var-exporter": "^6.2 || ^7.0 || ^8.0" }, "conflict": { "doctrine/orm": "<2.12 || >=4" }, "require-dev": { - "doctrine/coding-standard": "^13", + "doctrine/coding-standard": "^14", "doctrine/orm": "^2.13 || ^3", "doctrine/persistence": "^2 || ^3 || ^4", "doctrine/sql-formatter": "^1.0", @@ -1092,9 +819,9 @@ "phpstan/phpstan-strict-rules": "^2", "phpstan/phpstan-symfony": "^2", "phpunit/phpunit": "^10.3 || ^11.0 || ^12.0", - "symfony/cache": "^5.4 || ^6.0 || ^7.0", - "symfony/process": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "symfony/cache": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "suggest": { "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", @@ -1136,7 +863,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.9.4" + "source": "https://github.com/doctrine/migrations/tree/3.9.7" }, "funding": [ { @@ -1152,65 +879,52 @@ "type": "tidelift" } ], - "time": "2025-08-19T06:41:07+00:00" + "time": "2026-04-23T19:33:20+00:00" }, { "name": "doctrine/orm", - "version": "2.20.7", + "version": "3.6.7", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "59938cae57c88b386cb79c81685426c83d27a120" + "reference": "bc217c0e19c3a9eadfa67697143b87c9ba01272c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/59938cae57c88b386cb79c81685426c83d27a120", - "reference": "59938cae57c88b386cb79c81685426c83d27a120", + "url": "https://api.github.com/repos/doctrine/orm/zipball/bc217c0e19c3a9eadfa67697143b87c9ba01272c", + "reference": "bc217c0e19c3a9eadfa67697143b87c9ba01272c", "shasum": "" }, "require": { "composer-runtime-api": "^2", - "doctrine/cache": "^1.12.1 || ^2.1.1", - "doctrine/collections": "^1.5 || ^2.1", - "doctrine/common": "^3.0.3", - "doctrine/dbal": "^2.13.1 || ^3.2", + "doctrine/collections": "^2.2", + "doctrine/dbal": "^3.8.2 || ^4", "doctrine/deprecations": "^0.5.3 || ^1", "doctrine/event-manager": "^1.2 || ^2", "doctrine/inflector": "^1.4 || ^2.0", "doctrine/instantiator": "^1.3 || ^2", - "doctrine/lexer": "^2 || ^3", - "doctrine/persistence": "^2.4 || ^3", + "doctrine/lexer": "^3", + "doctrine/persistence": "^3.3.1 || ^4", "ext-ctype": "*", - "php": "^7.1 || ^8.0", + "php": "^8.1", "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^4.2 || ^5.0 || ^6.0 || ^7.0", - "symfony/polyfill-php72": "^1.23", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "doctrine/annotations": "<1.13 || >= 3.0" + "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/var-exporter": "^6.3.9 || ^7.0 || ^8.0" }, "require-dev": { - "doctrine/annotations": "^1.13 || ^2", - "doctrine/coding-standard": "^9.0.2 || ^14.0", - "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/extension-installer": "~1.1.0 || ^1.4", - "phpstan/phpstan": "~1.4.10 || 2.1.22", - "phpstan/phpstan-deprecation-rules": "^1 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", + "doctrine/coding-standard": "^14.0", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "2.1.23", + "phpstan/phpstan-deprecation-rules": "^2", + "phpunit/phpunit": "^10.5.0 || ^11.5", "psr/log": "^1 || ^2 || ^3", - "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7.0", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2 || ^7.0", - "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + "symfony/cache": "^5.4 || ^6.2 || ^7.0 || ^8.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", - "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0", - "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0" }, - "bin": [ - "bin/doctrine" - ], "type": "library", "autoload": { "psr-4": { @@ -1251,45 +965,43 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.20.7" + "source": "https://github.com/doctrine/orm/tree/3.6.7" }, - "time": "2025-10-27T21:19:59+00:00" + "time": "2026-05-25T16:45:47+00:00" }, { "name": "doctrine/persistence", - "version": "3.4.3", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "d59e6ef7caffe6a30f4b6f9e9079a75f52c64ae0" + "reference": "49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/d59e6ef7caffe6a30f4b6f9e9079a75f52c64ae0", - "reference": "d59e6ef7caffe6a30f4b6f9e9079a75f52c64ae0", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b", + "reference": "49ab73e0d3e2ac8d1f5ecda3dd8acd5503781e8b", "shasum": "" }, "require": { + "doctrine/deprecations": "^1", "doctrine/event-manager": "^1 || ^2", - "php": "^7.2 || ^8.0", + "php": "^8.1", "psr/cache": "^1.0 || ^2.0 || ^3.0" }, - "conflict": { - "doctrine/common": "<2.10" - }, "require-dev": { - "doctrine/coding-standard": "^12 || ^14", - "doctrine/common": "^3.0", - "phpstan/phpstan": "^1 || 2.1.30", - "phpstan/phpstan-phpunit": "^1 || ^2", - "phpstan/phpstan-strict-rules": "^1 || ^2", - "phpunit/phpunit": "^8.5.38 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" + "doctrine/coding-standard": "^14", + "phpstan/phpstan": "2.1.30", + "phpstan/phpstan-phpunit": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.58 || ^12", + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/finder": "^4.4 || ^5.4 || ^6.0 || ^7.0 || ^8.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Persistence\\": "src/Persistence" + "Doctrine\\Persistence\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1333,7 +1045,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.4.3" + "source": "https://github.com/doctrine/persistence/tree/4.2.0" }, "funding": [ { @@ -1349,7 +1061,7 @@ "type": "tidelift" } ], - "time": "2025-10-21T15:21:39+00:00" + "time": "2026-04-26T12:12:52+00:00" }, { "name": "fakerphp/faker", @@ -1416,16 +1128,16 @@ }, { "name": "firebase/php-jwt", - "version": "v6.11.1", + "version": "v7.1.0", "source": { "type": "git", - "url": "https://github.com/firebase/php-jwt.git", - "reference": "d1e91ecf8c598d073d0995afa8cd5c75c6e19e66" + "url": "https://github.com/googleapis/php-jwt.git", + "reference": "b374a5d1a4f1f67fadc2165cdb284645945e2fc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/d1e91ecf8c598d073d0995afa8cd5c75c6e19e66", - "reference": "d1e91ecf8c598d073d0995afa8cd5c75c6e19e66", + "url": "https://api.github.com/repos/googleapis/php-jwt/zipball/b374a5d1a4f1f67fadc2165cdb284645945e2fc0", + "reference": "b374a5d1a4f1f67fadc2165cdb284645945e2fc0", "shasum": "" }, "require": { @@ -1433,6 +1145,8 @@ }, "require-dev": { "guzzlehttp/guzzle": "^7.4", + "phpfastcache/phpfastcache": "^9.2", + "phpseclib/phpseclib": "~3.0", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", "psr/cache": "^2.0||^3.0", @@ -1441,7 +1155,8 @@ }, "suggest": { "ext-sodium": "Support EdDSA (Ed25519) signatures", - "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" + "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present", + "phpseclib/phpseclib": "Support PS256 (RSASSA-PSS) signatures" }, "type": "library", "autoload": { @@ -1466,29 +1181,29 @@ } ], "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", - "homepage": "https://github.com/firebase/php-jwt", + "homepage": "https://github.com/googleapis/php-jwt", "keywords": [ "jwt", "php" ], "support": { - "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.11.1" + "issues": "https://github.com/googleapis/php-jwt/issues", + "source": "https://github.com/googleapis/php-jwt/tree/v7.1.0" }, - "time": "2025-04-09T20:32:01+00:00" + "time": "2026-06-11T17:54:14+00:00" }, { "name": "gedmo/doctrine-extensions", - "version": "v3.21.0", + "version": "v3.22.0", "source": { "type": "git", "url": "https://github.com/doctrine-extensions/DoctrineExtensions.git", - "reference": "eb53dfcb2b592327b76ac5226fbb003d32aea37e" + "reference": "e4350ee2daa7f34aa5806f2e1ea11fa4b5800e57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/eb53dfcb2b592327b76ac5226fbb003d32aea37e", - "reference": "eb53dfcb2b592327b76ac5226fbb003d32aea37e", + "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/e4350ee2daa7f34aa5806f2e1ea11fa4b5800e57", + "reference": "e4350ee2daa7f34aa5806f2e1ea11fa4b5800e57", "shasum": "" }, "require": { @@ -1499,8 +1214,8 @@ "php": "^7.4 || ^8.0", "psr/cache": "^1 || ^2 || ^3", "psr/clock": "^1", - "symfony/cache": "^5.4 || ^6.0 || ^7.0", - "symfony/string": "^5.4 || ^6.0 || ^7.0" + "symfony/cache": "^5.4 || ^6.4 || ^7.3 || ^8.0", + "symfony/string": "^5.4 || ^6.4 || ^7.3 || ^8.0" }, "conflict": { "behat/transliterator": "<1.2 || >=2.0", @@ -1516,21 +1231,21 @@ "doctrine/cache": "^1.11 || ^2.0", "doctrine/common": "^2.13 || ^3.0", "doctrine/dbal": "^3.7 || ^4.0", - "doctrine/doctrine-bundle": "^2.3", + "doctrine/doctrine-bundle": "^2.3 || ^3.0", "doctrine/mongodb-odm": "^2.3", "doctrine/orm": "^2.20 || ^3.3", - "friendsofphp/php-cs-fixer": "^3.70", + "friendsofphp/php-cs-fixer": "^3.89", "nesbot/carbon": "^2.71 || ^3.0", - "phpstan/phpstan": "^2.1.1", + "phpstan/phpstan": "^2.1.31", "phpstan/phpstan-doctrine": "^2.0.1", "phpstan/phpstan-phpunit": "^2.0.3", "phpunit/phpunit": "^9.6", - "rector/rector": "^2.0.6", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/doctrine-bridge": "^5.4 || ^6.0 || ^7.0", - "symfony/phpunit-bridge": "^6.4 || ^7.0", - "symfony/uid": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "rector/rector": "^2.2.6", + "symfony/console": "^5.4 || ^6.4 || ^7.3 || ^8.0", + "symfony/doctrine-bridge": "^5.4 || ^6.4 || ^7.3 || ^8.0", + "symfony/phpunit-bridge": "^6.4 || ^7.3 || ^8.0", + "symfony/uid": "^5.4 || ^6.4 || ^7.3 || ^8.0", + "symfony/yaml": "^5.4 || ^6.4 || ^7.3 || ^8.0" }, "suggest": { "doctrine/mongodb-odm": "to use the extensions with the MongoDB ODM", @@ -1587,7 +1302,7 @@ "support": { "docs": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/main/doc", "issues": "https://github.com/doctrine-extensions/DoctrineExtensions/issues", - "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.21.0" + "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.22.0" }, "funding": [ { @@ -1607,29 +1322,30 @@ "type": "github" } ], - "time": "2025-09-22T17:04:34+00:00" + "time": "2025-12-13T19:37:35+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.10.0", + "version": "7.14.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" + "reference": "fa88c57803501ad0770f5cddb1e60525d49da9a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", - "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fa88c57803501ad0770f5cddb1e60525d49da9a1", + "reference": "fa88c57803501ad0770f5cddb1e60525d49da9a1", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^2.3", - "guzzlehttp/psr7": "^2.8", + "guzzlehttp/promises": "^2.5.1", + "guzzlehttp/psr7": "^2.12.5", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" }, "provide": { "psr/http-client-implementation": "1.0" @@ -1637,9 +1353,10 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "guzzle/client-integration-tests": "3.0.2", + "guzzle/client-integration-tests": "3.0.3", + "guzzlehttp/test-server": "^0.6", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "phpunit/phpunit": "^8.5.52 || ^9.6.34", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -1717,7 +1434,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.10.0" + "source": "https://github.com/guzzle/guzzle/tree/7.14.2" }, "funding": [ { @@ -1733,28 +1450,29 @@ "type": "tidelift" } ], - "time": "2025-08-23T22:36:01+00:00" + "time": "2026-07-14T18:15:01+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.3.0", + "version": "2.5.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "481557b130ef3790cf82b713667b43030dc9c957" + "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", - "reference": "481557b130ef3790cf82b713667b43030dc9c957", + "url": "https://api.github.com/repos/guzzle/promises/zipball/9ad1e4fc607446a055b95870c7f668e93b5cff29", + "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0" + "php": "^7.2.5 || ^8.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.44 || ^9.6.25" + "phpunit/phpunit": "^8.5.52 || ^9.6.34" }, "type": "library", "extra": { @@ -1800,7 +1518,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.3.0" + "source": "https://github.com/guzzle/promises/tree/2.5.1" }, "funding": [ { @@ -1816,27 +1534,29 @@ "type": "tidelift" } ], - "time": "2025-08-22T14:34:08+00:00" + "time": "2026-07-08T15:48:39+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.8.0", + "version": "2.12.5", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "21dc724a0583619cd1652f673303492272778051" + "reference": "9365d578a9fd1552ad6ca9c3cb530708526feb09" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", - "reference": "21dc724a0583619cd1652f673303492272778051", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9365d578a9fd1552ad6ca9c3cb530708526feb09", + "reference": "9365d578a9fd1552ad6ca9c3cb530708526feb09", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.1 || ^2.0", - "ralouphie/getallheaders": "^3.0" + "ralouphie/getallheaders": "^3.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" }, "provide": { "psr/http-factory-implementation": "1.0", @@ -1844,8 +1564,9 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.44 || ^9.6.25" + "http-interop/http-factory-tests": "1.1.0", + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1916,7 +1637,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.8.0" + "source": "https://github.com/guzzle/psr7/tree/2.12.5" }, "funding": [ { @@ -1932,26 +1653,26 @@ "type": "tidelift" } ], - "time": "2025-08-23T21:21:41+00:00" + "time": "2026-07-13T01:27:20+00:00" }, { "name": "latte/latte", - "version": "v3.0.24", + "version": "v3.1.4", "source": { "type": "git", "url": "https://github.com/nette/latte.git", - "reference": "2ec95b542197d82a4837ba5949bd823d0ca7d170" + "reference": "14dea9fc32c0d1cf5e9a1bd59556ae8be023c2a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/latte/zipball/2ec95b542197d82a4837ba5949bd823d0ca7d170", - "reference": "2ec95b542197d82a4837ba5949bd823d0ca7d170", + "url": "https://api.github.com/repos/nette/latte/zipball/14dea9fc32c0d1cf5e9a1bd59556ae8be023c2a6", + "reference": "14dea9fc32c0d1cf5e9a1bd59556ae8be023c2a6", "shasum": "" }, "require": { "ext-json": "*", "ext-tokenizer": "*", - "php": "8.0 - 8.5" + "php": "8.2 - 8.5" }, "conflict": { "nette/application": "<3.1.7", @@ -1959,9 +1680,11 @@ }, "require-dev": { "nette/php-generator": "^4.0", - "nette/tester": "^2.5", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", "nette/utils": "^4.0", - "phpstan/phpstan-nette": "^2.0@stable", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", "tracy/tracy": "^2.10" }, "suggest": { @@ -1978,7 +1701,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -2019,22 +1742,22 @@ ], "support": { "issues": "https://github.com/nette/latte/issues", - "source": "https://github.com/nette/latte/tree/v3.0.24" + "source": "https://github.com/nette/latte/tree/v3.1.4" }, - "time": "2025-10-31T00:53:04+00:00" + "time": "2026-04-23T06:30:25+00:00" }, { "name": "league/commonmark", - "version": "2.7.1", + "version": "2.8.3", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "10732241927d3971d28e7ea7b5712721fa2296ca" + "reference": "1902f60f984235023acbe03db6ad614a37b3c3e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/10732241927d3971d28e7ea7b5712721fa2296ca", - "reference": "10732241927d3971d28e7ea7b5712721fa2296ca", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/1902f60f984235023acbe03db6ad614a37b3c3e7", + "reference": "1902f60f984235023acbe03db6ad614a37b3c3e7", "shasum": "" }, "require": { @@ -2056,12 +1779,12 @@ "github/gfm": "0.29.0", "michelf/php-markdown": "^1.4 || ^2.0", "nyholm/psr7": "^1.5", - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "phpstan/phpstan": "^2.0.0", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0 || ^12.0.0 || ^13.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 | ^7.0", - "symfony/process": "^5.4 | ^6.0 | ^7.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", + "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", "unleashedtech/php-coding-standard": "^3.1.1", "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" }, @@ -2071,7 +1794,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.8-dev" + "dev-main": "2.9-dev" } }, "autoload": { @@ -2128,7 +1851,7 @@ "type": "tidelift" } ], - "time": "2025-07-20T12:47:49+00:00" + "time": "2026-07-12T15:29:16+00:00" }, { "name": "league/config", @@ -2213,588 +1936,17 @@ "time": "2022-12-11T20:36:23+00:00" }, { - "name": "league/uri", - "version": "5.3.0", + "name": "myclabs/deep-copy", + "version": "1.13.4", "source": { "type": "git", - "url": "https://github.com/thephpleague/uri.git", - "reference": "f2bceb755f1108758cf4cf925e4cd7699ce686aa" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/f2bceb755f1108758cf4cf925e4cd7699ce686aa", - "reference": "f2bceb755f1108758cf4cf925e4cd7699ce686aa", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "ext-intl": "*", - "ext-mbstring": "*", - "league/uri-components": "^1.8", - "league/uri-hostname-parser": "^1.1", - "league/uri-interfaces": "^1.0", - "league/uri-manipulations": "^1.5", - "league/uri-parser": "^1.4", - "league/uri-schemes": "^1.2", - "php": ">=7.0.13", - "psr/http-message": "^1.0" - }, - "type": "metapackage", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "URI manipulation library", - "homepage": "http://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "middleware", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "uri", - "url", - "ws" - ], - "support": { - "forum": "https://groups.google.com/forum/#!forum/thephpleague", - "issues": "https://github.com/thephpleague/uri/issues", - "source": "https://github.com/thephpleague/uri/tree/master" - }, - "time": "2018-03-14T17:19:39+00:00" - }, - { - "name": "league/uri-components", - "version": "1.8.2", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-components.git", - "reference": "d0412fd730a54a8284009664188cf239070eae64" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/d0412fd730a54a8284009664188cf239070eae64", - "reference": "d0412fd730a54a8284009664188cf239070eae64", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-fileinfo": "*", - "ext-intl": "*", - "league/uri-hostname-parser": "^1.1.0", - "php": ">=7.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.3", - "phpstan/phpstan": "^0.9.2", - "phpstan/phpstan-phpunit": "^0.9.4", - "phpstan/phpstan-strict-rules": "^0.9.0", - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "League\\Uri\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "URI components manipulation library", - "homepage": "http://uri.thephpleague.com", - "keywords": [ - "authority", - "components", - "fragment", - "host", - "path", - "port", - "query", - "rfc3986", - "scheme", - "uri", - "url", - "userinfo" - ], - "support": { - "issues": "https://github.com/thephpleague/uri-components/issues", - "source": "https://github.com/thephpleague/uri-components/tree/master" - }, - "time": "2018-10-24T11:31:02+00:00" - }, - { - "name": "league/uri-hostname-parser", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-hostname-parser.git", - "reference": "a3ef2f862640bfd79dd3fc28f23c98be09152603" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-hostname-parser/zipball/a3ef2f862640bfd79dd3fc28f23c98be09152603", - "reference": "a3ef2f862640bfd79dd3fc28f23c98be09152603", - "shasum": "" - }, - "require": { - "ext-intl": "*", - "php": ">=7.0", - "psr/simple-cache": "^1.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.7", - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^6.3" - }, - "suggest": { - "ext-curl": "To use the bundle cURL HTTP client", - "psr/simple-cache-implementation": "To enable using other cache providers" - }, - "bin": [ - "bin/update-psl-icann-section" - ], - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "League\\Uri\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jeremy Kendall", - "homepage": "http://about.me/jeremykendall", - "role": "Developer" - }, - { - "name": "Ignace Nyamagana Butera", - "homepage": "http://nyamsprod.com", - "role": "Developer" - }, - { - "name": "Contributors", - "homepage": "https://github.com/phpleague/uri-hostname-parser/graphs/contributors" - } - ], - "description": "ICANN base hostname parsing implemented in PHP.", - "homepage": "https://github.com/thephphleague/uri-hostname-parser", - "keywords": [ - "Public Suffix List", - "domain parsing", - "icann" - ], - "support": { - "issues": "https://github.com/thephphleague/uri-hostname-parser/issues", - "source": "https://github.com/thephphleague/uri-hostname-parser" - }, - "abandoned": "jeremykendall/php-domain-parser", - "time": "2021-03-06T11:52:47+00:00" - }, - { - "name": "league/uri-interfaces", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "081760c53a4ce76c9935a755a21353610f5495f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/081760c53a4ce76c9935a755a21353610f5495f6", - "reference": "081760c53a4ce76c9935a755a21353610f5495f6", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "Common interface for URI representation", - "homepage": "http://github.com/thephpleague/uri-interfaces", - "keywords": [ - "rfc3986", - "rfc3987", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/thephpleague/uri-interfaces/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/master" - }, - "time": "2018-11-05T14:00:06+00:00" - }, - { - "name": "league/uri-manipulations", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-manipulations.git", - "reference": "ae8d49a3203ccf7a1e39aaf7fae9f08bfbc454a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-manipulations/zipball/ae8d49a3203ccf7a1e39aaf7fae9f08bfbc454a2", - "reference": "ae8d49a3203ccf7a1e39aaf7fae9f08bfbc454a2", - "shasum": "" - }, - "require": { - "ext-intl": "*", - "league/uri-components": "^1.8.0", - "league/uri-interfaces": "^1.0", - "php": ">=7.0", - "psr/http-message": "^1.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "guzzlehttp/psr7": "^1.2", - "league/uri-schemes": "^1.2", - "phpstan/phpstan": "^0.9.2", - "phpstan/phpstan-phpunit": "^0.9.4", - "phpstan/phpstan-strict-rules": "^0.9.0", - "phpunit/phpunit": "^6.0", - "zendframework/zend-diactoros": "1.4.0" - }, - "suggest": { - "league/uri-schemes": "Allow manipulating URI objects" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "League\\Uri\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "URI manipulation library", - "homepage": "http://url.thephpleague.com", - "keywords": [ - "formatter", - "manipulation", - "manipulations", - "middlewares", - "modifiers", - "psr-7", - "references", - "rfc3986", - "rfc3987", - "uri", - "url" - ], - "support": { - "forum": "https://groups.google.com/forum/#!forum/thephpleague", - "issues": "https://github.com/thephpleague/uri/issues", - "source": "https://github.com/thephpleague/uri-manipulations/tree/master" - }, - "abandoned": "league/uri-components", - "time": "2018-03-14T16:44:57+00:00" - }, - { - "name": "league/uri-parser", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-parser.git", - "reference": "671548427e4c932352d9b9279fdfa345bf63fa00" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-parser/zipball/671548427e4c932352d9b9279fdfa345bf63fa00", - "reference": "671548427e4c932352d9b9279fdfa345bf63fa00", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "phpstan/phpstan": "^0.9.2", - "phpstan/phpstan-phpunit": "^0.9.4", - "phpstan/phpstan-strict-rules": "^0.9.0", - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-intl": "Allow parsing RFC3987 compliant hosts", - "league/uri-schemes": "Allow validating and normalizing URI parsing results" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "League\\Uri\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "userland URI parser RFC 3986 compliant", - "homepage": "https://github.com/thephpleague/uri-parser", - "keywords": [ - "parse_url", - "parser", - "rfc3986", - "rfc3987", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/thephpleague/uri-parser/issues", - "source": "https://github.com/thephpleague/uri-parser/tree/master" - }, - "abandoned": "league/uri-interfaces", - "time": "2018-11-22T07:55:51+00:00" - }, - { - "name": "league/uri-schemes", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-schemes.git", - "reference": "f821a444785724bcc9bc244b1173b9d6ca4d71e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-schemes/zipball/f821a444785724bcc9bc244b1173b9d6ca4d71e6", - "reference": "f821a444785724bcc9bc244b1173b9d6ca4d71e6", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "league/uri-interfaces": "^1.1", - "league/uri-parser": "^1.4.0", - "php": ">=7.0.13", - "psr/http-message": "^1.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "phpstan/phpstan": "^0.9.2", - "phpstan/phpstan-phpunit": "^0.9.4", - "phpstan/phpstan-strict-rules": "^0.9.0", - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-intl": "Allow parsing RFC3987 compliant hosts", - "league/uri-manipulations": "Needed to easily manipulate URI objects" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "League\\Uri\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "URI manipulation library", - "homepage": "http://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file", - "ftp", - "http", - "https", - "parse_url", - "psr-7", - "rfc3986", - "uri", - "url", - "ws", - "wss" - ], - "support": { - "forum": "https://groups.google.com/forum/#!forum/thephpleague", - "issues": "https://github.com/thephpleague/uri/issues", - "source": "https://github.com/thephpleague/uri-schemes/tree/master" - }, - "abandoned": "league/uri", - "time": "2018-11-26T08:09:30+00:00" - }, - { - "name": "limenet/git-version", - "version": "v0.1.6", - "source": { - "type": "git", - "url": "https://github.com/limenet/git-version.git", - "reference": "168408e1d58da52ace00e9036cc7068c65cf6020" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/limenet/git-version/zipball/168408e1d58da52ace00e9036cc7068c65cf6020", - "reference": "168408e1d58da52ace00e9036cc7068c65cf6020", - "shasum": "" - }, - "require": { - "league/uri": "^5.0", - "spatie/regex": "^1.1" - }, - "require-dev": { - "composer/semver": "^1.4", - "illuminate/support": "5.5.* || 5.6.* || 5.7.*", - "moontoast/math": "^1.1", - "orchestra/testbench": "^3.5", - "php": "^7.1", - "phpunit/phpunit": "^6.1 || ^7.0", - "ramsey/uuid": "^3.6" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "GitVersion": "limenet\\GitVersion\\Laravel\\Facade" - }, - "providers": [ - "limenet\\GitVersion\\Laravel\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "limenet\\": "src/limenet/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Linus Metzler", - "email": "linus.metzler@gmail.com" - } - ], - "description": "PHP library to generate a version string based on a Git repository.", - "support": { - "issues": "https://github.com/limenet/git-version/issues", - "source": "https://github.com/limenet/git-version/tree/master" - }, - "abandoned": true, - "time": "2018-11-01T09:47:34+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.13.4", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { @@ -2845,41 +1997,40 @@ }, { "name": "nelmio/alice", - "version": "3.14.2", + "version": "3.17.0", "source": { "type": "git", "url": "https://github.com/nelmio/alice.git", - "reference": "f353866956ac4760514e24e8d51902d261d50489" + "reference": "eb4db8bc50b0a5a9177aadd9eef4a930b6eaee95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/alice/zipball/f353866956ac4760514e24e8d51902d261d50489", - "reference": "f353866956ac4760514e24e8d51902d261d50489", + "url": "https://api.github.com/repos/nelmio/alice/zipball/eb4db8bc50b0a5a9177aadd9eef4a930b6eaee95", + "reference": "eb4db8bc50b0a5a9177aadd9eef4a930b6eaee95", "shasum": "" }, "require": { "fakerphp/faker": "^1.10", "myclabs/deep-copy": "^1.10", - "php": "^8.1", - "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "php": "^8.2", + "sebastian/comparator": "^6.0 || ^7.0 || ^8.0", "symfony/polyfill-php84": "^1.31", - "symfony/property-access": "^6.4 || ^7.0", - "symfony/yaml": "^6.0 || ^7.0" + "symfony/property-access": "^7.4 || ^8.0", + "symfony/yaml": "^7.4 || ^8.0" }, "conflict": { - "symfony/framework-bundle": "<6.4.0" + "symfony/framework-bundle": "<7.4.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.1", "phpspec/prophecy": "^1.6", "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.3", - "symfony/config": "^6.4 || ^7.0", - "symfony/dependency-injection": "^6.4 || ^7.0", - "symfony/finder": "^6.4 || ^7.0", - "symfony/http-kernel": "^6.4 || ^7.0", - "symfony/phpunit-bridge": "^6.4 || ^7.0", - "symfony/var-dumper": "^6.4 || ^7.0" + "phpunit/phpunit": "^11 || ^12.5 || ^13", + "symfony/config": "^7.4 || ^8.0", + "symfony/dependency-injection": "^7.4 || ^8.0", + "symfony/finder": "^7.4 || ^8.0", + "symfony/http-kernel": "^7.4 || ^8.0", + "symfony/var-dumper": "^7.4 || ^8.0" }, "suggest": { "theofidry/alice-data-fixtures": "Wrapper for Alice to provide a persistence layer." @@ -2929,7 +2080,7 @@ ], "support": { "issues": "https://github.com/nelmio/alice/issues", - "source": "https://github.com/nelmio/alice/tree/3.14.2" + "source": "https://github.com/nelmio/alice/tree/3.17.0" }, "funding": [ { @@ -2937,48 +2088,51 @@ "type": "github" } ], - "time": "2025-02-26T09:01:07+00:00" + "time": "2026-02-24T16:58:28+00:00" }, { "name": "nette/application", - "version": "v3.2.7", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/nette/application.git", - "reference": "262f16bc2adab6f489a715efd854f1e2c909c702" + "reference": "104484c317fdb1b29baf77617ca040b97685e9bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/application/zipball/262f16bc2adab6f489a715efd854f1e2c909c702", - "reference": "262f16bc2adab6f489a715efd854f1e2c909c702", + "url": "https://api.github.com/repos/nette/application/zipball/104484c317fdb1b29baf77617ca040b97685e9bb", + "reference": "104484c317fdb1b29baf77617ca040b97685e9bb", "shasum": "" }, "require": { - "nette/component-model": "^3.1", - "nette/http": "^3.3.2", - "nette/routing": "^3.1", - "nette/utils": "^4.0", - "php": "8.1 - 8.4" + "nette/component-model": "^3.2 || ^4.0", + "nette/http": "^3.4", + "nette/routing": "^3.1.1", + "nette/utils": "^4.1", + "php": "8.3 - 8.5" }, "conflict": { - "latte/latte": "<2.7.1 || >=3.0.0 <3.0.18 || >=3.2", + "latte/latte": "<3.1.4 || >=3.2", "nette/caching": "<3.2", "nette/di": "<3.2", "nette/forms": "<3.2", "nette/schema": "<1.3", - "tracy/tracy": "<2.9" + "tracy/tracy": "<2.12" }, "require-dev": { "jetbrains/phpstorm-attributes": "^1.2", - "latte/latte": "^2.10.2 || ^3.0.18", + "latte/latte": "^3.1.4", "mockery/mockery": "^1.6@stable", + "nette/caching": "^3.2", "nette/di": "^3.2", "nette/forms": "^3.2", + "nette/phpstan-rules": "^1.0", "nette/robot-loader": "^4.0", "nette/security": "^3.2", - "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^2.0@stable", - "tracy/tracy": "^2.9" + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.2@stable", + "tracy/tracy": "^2.12" }, "suggest": { "latte/latte": "Allows using Latte in templates", @@ -2987,7 +2141,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3030,46 +2184,52 @@ ], "support": { "issues": "https://github.com/nette/application/issues", - "source": "https://github.com/nette/application/tree/v3.2.7" + "source": "https://github.com/nette/application/tree/v3.3.0" }, - "time": "2025-07-17T22:41:57+00:00" + "time": "2026-06-29T19:05:48+00:00" }, { "name": "nette/bootstrap", - "version": "v3.2.7", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/nette/bootstrap.git", - "reference": "10fdb1cb05497da39396f2ce1785cea67c8aa439" + "reference": "3c8cbf8383b6df153bfb848a3c311ce42261a336" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/bootstrap/zipball/10fdb1cb05497da39396f2ce1785cea67c8aa439", - "reference": "10fdb1cb05497da39396f2ce1785cea67c8aa439", + "url": "https://api.github.com/repos/nette/bootstrap/zipball/3c8cbf8383b6df153bfb848a3c311ce42261a336", + "reference": "3c8cbf8383b6df153bfb848a3c311ce42261a336", "shasum": "" }, "require": { - "nette/di": "^3.1", - "nette/utils": "^3.2.1 || ^4.0", - "php": "8.0 - 8.5" + "nette/di": "^3.2", + "nette/utils": "^4.1", + "php": "8.3 - 8.5" }, "conflict": { + "nette/caching": "<3.3", + "nette/mail": "<4.1.2", "tracy/tracy": "<2.6" }, "require-dev": { - "latte/latte": "^2.8 || ^3.0", - "nette/application": "^3.1", - "nette/caching": "^3.0", - "nette/database": "^3.0", - "nette/forms": "^3.0", - "nette/http": "^3.0", - "nette/mail": "^3.0 || ^4.0", - "nette/robot-loader": "^3.0 || ^4.0", + "latte/latte": "^3.0", + "nette/application": "^3.2", + "nette/assets": "^1.0", + "nette/caching": "^3.3", + "nette/database": "^3.2", + "nette/forms": "^3.2", + "nette/http": "^3.2", + "nette/mail": "^4.1", + "nette/neon": "^3.4", + "nette/phpstan-rules": "^1.0", + "nette/robot-loader": "^4.0", "nette/safe-stream": "^2.2", - "nette/security": "^3.0", - "nette/tester": "^2.4", - "phpstan/phpstan-nette": "^2.0@stable", - "tracy/tracy": "^2.9" + "nette/security": "^3.2", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.2@stable", + "tracy/tracy": "^2.12" }, "suggest": { "nette/robot-loader": "to use Configurator::createRobotLoader()", @@ -3078,7 +2238,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3114,22 +2274,22 @@ ], "support": { "issues": "https://github.com/nette/bootstrap/issues", - "source": "https://github.com/nette/bootstrap/tree/v3.2.7" + "source": "https://github.com/nette/bootstrap/tree/v3.3.0" }, - "time": "2025-08-01T02:02:03+00:00" + "time": "2026-06-21T22:20:56+00:00" }, { "name": "nette/caching", - "version": "v3.4.0", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/nette/caching.git", - "reference": "a1c13221b350d0db0a2bd4a77c1e7b65e0aa065d" + "reference": "31f4bc6b366e6896998bd4538b26fa88a627bf2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/a1c13221b350d0db0a2bd4a77c1e7b65e0aa065d", - "reference": "a1c13221b350d0db0a2bd4a77c1e7b65e0aa065d", + "url": "https://api.github.com/repos/nette/caching/zipball/31f4bc6b366e6896998bd4538b26fa88a627bf2b", + "reference": "31f4bc6b366e6896998bd4538b26fa88a627bf2b", "shasum": "" }, "require": { @@ -3142,8 +2302,10 @@ "require-dev": { "latte/latte": "^3.0.12", "nette/di": "^3.1 || ^4.0", - "nette/tester": "^2.4", - "phpstan/phpstan-nette": "^2.0@stable", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.40@stable", "psr/simple-cache": "^2.0 || ^3.0", "tracy/tracy": "^2.9" }, @@ -3191,37 +2353,39 @@ ], "support": { "issues": "https://github.com/nette/caching/issues", - "source": "https://github.com/nette/caching/tree/v3.4.0" + "source": "https://github.com/nette/caching/tree/v3.4.2" }, - "time": "2025-08-06T23:05:08+00:00" + "time": "2026-05-12T01:08:42+00:00" }, { "name": "nette/component-model", - "version": "v3.1.2", + "version": "v4.0.1", "source": { "type": "git", "url": "https://github.com/nette/component-model.git", - "reference": "f8debd4867117e969478a7142047c7c3c389d085" + "reference": "b4e82e1a3a7ca6f66ce766704aa2e148de277276" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/component-model/zipball/f8debd4867117e969478a7142047c7c3c389d085", - "reference": "f8debd4867117e969478a7142047c7c3c389d085", + "url": "https://api.github.com/repos/nette/component-model/zipball/b4e82e1a3a7ca6f66ce766704aa2e148de277276", + "reference": "b4e82e1a3a7ca6f66ce766704aa2e148de277276", "shasum": "" }, "require": { - "nette/utils": "^4.0", - "php": "8.1 - 8.5" + "nette/utils": "^4.1", + "php": "8.3 - 8.5" }, "require-dev": { - "nette/tester": "^2.5", - "phpstan/phpstan-nette": "^2.0@stable", - "tracy/tracy": "^2.9" + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", + "tracy/tracy": "^2.12" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -3256,22 +2420,22 @@ ], "support": { "issues": "https://github.com/nette/component-model/issues", - "source": "https://github.com/nette/component-model/tree/v3.1.2" + "source": "https://github.com/nette/component-model/tree/v4.0.1" }, - "time": "2025-08-06T22:45:03+00:00" + "time": "2026-06-21T23:31:36+00:00" }, { "name": "nette/database", - "version": "v3.2.8", + "version": "v3.2.9", "source": { "type": "git", "url": "https://github.com/nette/database.git", - "reference": "1a84d3e61aa33461a3d6415235b25a7cd8b3f442" + "reference": "6fe51398fcfc7719f64b7063f99886b438527755" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/database/zipball/1a84d3e61aa33461a3d6415235b25a7cd8b3f442", - "reference": "1a84d3e61aa33461a3d6415235b25a7cd8b3f442", + "url": "https://api.github.com/repos/nette/database/zipball/6fe51398fcfc7719f64b7063f99886b438527755", + "reference": "6fe51398fcfc7719f64b7063f99886b438527755", "shasum": "" }, "require": { @@ -3284,8 +2448,10 @@ "jetbrains/phpstorm-attributes": "^1.2", "mockery/mockery": "^1.6@stable", "nette/di": "^3.1", - "nette/tester": "^2.5", - "phpstan/phpstan-nette": "^2.0@stable", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", "tracy/tracy": "^2.9" }, "type": "library", @@ -3334,28 +2500,28 @@ ], "support": { "issues": "https://github.com/nette/database/issues", - "source": "https://github.com/nette/database/tree/v3.2.8" + "source": "https://github.com/nette/database/tree/v3.2.9" }, - "time": "2025-10-30T22:06:23+00:00" + "time": "2026-04-22T05:48:11+00:00" }, { "name": "nette/di", - "version": "v3.2.5", + "version": "v3.2.6", "source": { "type": "git", "url": "https://github.com/nette/di.git", - "reference": "5708c328ce7658a73c96b14dd6da7b8b27bf220f" + "reference": "481ca2553e792daffa7fcf0ed43f705d80603fa4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/di/zipball/5708c328ce7658a73c96b14dd6da7b8b27bf220f", - "reference": "5708c328ce7658a73c96b14dd6da7b8b27bf220f", + "url": "https://api.github.com/repos/nette/di/zipball/481ca2553e792daffa7fcf0ed43f705d80603fa4", + "reference": "481ca2553e792daffa7fcf0ed43f705d80603fa4", "shasum": "" }, "require": { "ext-ctype": "*", "ext-tokenizer": "*", - "nette/neon": "^3.3", + "nette/neon": "^3.4", "nette/php-generator": "^4.1.6", "nette/robot-loader": "^4.0", "nette/schema": "^1.2.5", @@ -3363,8 +2529,10 @@ "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^2.0@stable", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", "tracy/tracy": "^2.9" }, "type": "library", @@ -3410,93 +2578,42 @@ ], "support": { "issues": "https://github.com/nette/di/issues", - "source": "https://github.com/nette/di/tree/v3.2.5" - }, - "time": "2025-08-14T22:59:46+00:00" - }, - { - "name": "nette/finder", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "027395c638637de95c8e9fad49a7c51249404ed2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/027395c638637de95c8e9fad49a7c51249404ed2", - "reference": "027395c638637de95c8e9fad49a7c51249404ed2", - "shasum": "" - }, - "require": { - "nette/utils": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🔍 Nette Finder: find files and directories with an intuitive API.", - "homepage": "https://nette.org", - "keywords": [ - "filesystem", - "glob", - "iterator", - "nette" - ], - "support": { - "issues": "https://github.com/nette/finder/issues", - "source": "https://github.com/nette/finder/tree/v3.0.0" + "source": "https://github.com/nette/di/tree/v3.2.6" }, - "time": "2022-12-14T17:05:54+00:00" + "time": "2026-05-06T02:17:57+00:00" }, { "name": "nette/forms", - "version": "v3.2.7", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/nette/forms.git", - "reference": "cedc41fe0eff7568f8875d6e4347e95bc4f0cf7a" + "reference": "90aac9e6a55a71a76aaead65bca1129acb41ec84" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/forms/zipball/cedc41fe0eff7568f8875d6e4347e95bc4f0cf7a", - "reference": "cedc41fe0eff7568f8875d6e4347e95bc4f0cf7a", + "url": "https://api.github.com/repos/nette/forms/zipball/90aac9e6a55a71a76aaead65bca1129acb41ec84", + "reference": "90aac9e6a55a71a76aaead65bca1129acb41ec84", "shasum": "" }, "require": { - "nette/component-model": "^3.1", - "nette/http": "^3.3", - "nette/utils": "^4.0.4", - "php": "8.1 - 8.4" + "nette/component-model": "^3.2 || ^4.0", + "nette/http": "^3.4", + "nette/utils": "^4.1", + "php": "8.3 - 8.5" }, "conflict": { - "latte/latte": ">=3.0.0 <3.0.12 || >=3.2" + "latte/latte": "<3.1.4 || >=3.2" }, "require-dev": { - "latte/latte": "^2.10.2 || ^3.0.12", - "nette/application": "^3.0", - "nette/di": "^3.0", - "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^2.0@stable", - "tracy/tracy": "^2.9" + "latte/latte": "^3.1.4", + "nette/application": "^3.2", + "nette/di": "^3.2", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", + "tracy/tracy": "^2.12" }, "suggest": { "ext-intl": "to use date/time controls" @@ -3504,7 +2621,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3543,38 +2660,40 @@ ], "support": { "issues": "https://github.com/nette/forms/issues", - "source": "https://github.com/nette/forms/tree/v3.2.7" + "source": "https://github.com/nette/forms/tree/v3.3.0" }, - "time": "2025-07-17T22:54:05+00:00" + "time": "2026-06-28T12:32:44+00:00" }, { "name": "nette/http", - "version": "v3.3.3", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/nette/http.git", - "reference": "c557f21c8cedd621dbfd7990752b1d55ef353f1d" + "reference": "de5988d8802e76d9bda85fe5a871d29c794684f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/http/zipball/c557f21c8cedd621dbfd7990752b1d55ef353f1d", - "reference": "c557f21c8cedd621dbfd7990752b1d55ef353f1d", + "url": "https://api.github.com/repos/nette/http/zipball/de5988d8802e76d9bda85fe5a871d29c794684f4", + "reference": "de5988d8802e76d9bda85fe5a871d29c794684f4", "shasum": "" }, "require": { - "nette/utils": "^4.0.4", - "php": "8.1 - 8.5" + "nette/utils": "^4.1", + "php": "8.3 - 8.5" }, "conflict": { "nette/di": "<3.0.3", "nette/schema": "<1.2" }, "require-dev": { - "nette/di": "^3.0", - "nette/security": "^3.0", - "nette/tester": "^2.4", - "phpstan/phpstan-nette": "^2.0@stable", - "tracy/tracy": "^2.8" + "nette/di": "^3.2", + "nette/phpstan-rules": "^1.0", + "nette/security": "^3.2", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.2@stable", + "tracy/tracy": "^2.12" }, "suggest": { "ext-fileinfo": "to detect MIME type of uploaded files by Nette\\Http\\FileUpload", @@ -3585,7 +2704,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3627,43 +2746,46 @@ ], "support": { "issues": "https://github.com/nette/http/issues", - "source": "https://github.com/nette/http/tree/v3.3.3" + "source": "https://github.com/nette/http/tree/v3.4.0" }, - "time": "2025-10-30T22:32:24+00:00" + "time": "2026-06-13T01:04:19+00:00" }, { "name": "nette/mail", - "version": "v4.0.4", + "version": "v4.1.2", "source": { "type": "git", "url": "https://github.com/nette/mail.git", - "reference": "5f16f76ed14a32f34580811d1a07ac357352bbc4" + "reference": "c4ffac25187b1212fb9014341ecf96ed2fd8c4fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/mail/zipball/5f16f76ed14a32f34580811d1a07ac357352bbc4", - "reference": "5f16f76ed14a32f34580811d1a07ac357352bbc4", + "url": "https://api.github.com/repos/nette/mail/zipball/c4ffac25187b1212fb9014341ecf96ed2fd8c4fc", + "reference": "c4ffac25187b1212fb9014341ecf96ed2fd8c4fc", "shasum": "" }, "require": { "ext-iconv": "*", - "nette/utils": "^4.0", - "php": "8.0 - 8.5" + "nette/utils": "^4.1", + "php": "8.2 - 8.5" }, "require-dev": { "nette/di": "^3.1 || ^4.0", - "nette/tester": "^2.4", - "phpstan/phpstan-nette": "^2.0@stable", - "tracy/tracy": "^2.8" + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.40@stable", + "tracy/tracy": "^2.11" }, "suggest": { + "ext-dom": "to use Nette\\Mail\\CssInliner", "ext-fileinfo": "to detect type of attached files", "ext-openssl": "to use Nette\\Mail\\DkimSigner" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -3701,22 +2823,22 @@ ], "support": { "issues": "https://github.com/nette/mail/issues", - "source": "https://github.com/nette/mail/tree/v4.0.4" + "source": "https://github.com/nette/mail/tree/v4.1.2" }, - "time": "2025-08-01T02:09:42+00:00" + "time": "2026-05-19T18:23:42+00:00" }, { "name": "nette/neon", - "version": "v3.4.5", + "version": "v3.4.8", "source": { "type": "git", "url": "https://github.com/nette/neon.git", - "reference": "0b14d95a19c4ca0666339170d3a7fcf83a32fd6b" + "reference": "9009f99ce1396b366a88ca16c90177148352b7d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/neon/zipball/0b14d95a19c4ca0666339170d3a7fcf83a32fd6b", - "reference": "0b14d95a19c4ca0666339170d3a7fcf83a32fd6b", + "url": "https://api.github.com/repos/nette/neon/zipball/9009f99ce1396b366a88ca16c90177148352b7d3", + "reference": "9009f99ce1396b366a88ca16c90177148352b7d3", "shasum": "" }, "require": { @@ -3772,22 +2894,22 @@ ], "support": { "issues": "https://github.com/nette/neon/issues", - "source": "https://github.com/nette/neon/tree/v3.4.5" + "source": "https://github.com/nette/neon/tree/v3.4.8" }, - "time": "2025-10-30T22:42:06+00:00" + "time": "2026-05-11T21:34:00+00:00" }, { "name": "nette/php-generator", - "version": "v4.2.0", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/nette/php-generator.git", - "reference": "4707546a1f11badd72f5d82af4f8a6bc64bd56ac" + "reference": "0d7060926f5c3e8c488b9b9ced42d857f12a34b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/php-generator/zipball/4707546a1f11badd72f5d82af4f8a6bc64bd56ac", - "reference": "4707546a1f11badd72f5d82af4f8a6bc64bd56ac", + "url": "https://api.github.com/repos/nette/php-generator/zipball/0d7060926f5c3e8c488b9b9ced42d857f12a34b5", + "reference": "0d7060926f5c3e8c488b9b9ced42d857f12a34b5", "shasum": "" }, "require": { @@ -3796,9 +2918,11 @@ }, "require-dev": { "jetbrains/phpstorm-attributes": "^1.2", - "nette/tester": "^2.4", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", "nikic/php-parser": "^5.0", - "phpstan/phpstan-nette": "^2.0@stable", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.40@stable", "tracy/tracy": "^2.8" }, "suggest": { @@ -3844,22 +2968,22 @@ ], "support": { "issues": "https://github.com/nette/php-generator/issues", - "source": "https://github.com/nette/php-generator/tree/v4.2.0" + "source": "https://github.com/nette/php-generator/tree/v4.2.2" }, - "time": "2025-08-06T18:24:31+00:00" + "time": "2026-02-26T00:58:33+00:00" }, { "name": "nette/robot-loader", - "version": "v4.1.0", + "version": "v4.1.2", "source": { "type": "git", "url": "https://github.com/nette/robot-loader.git", - "reference": "805fb81376c24755d50bdb8bc69ca4db3def71d1" + "reference": "ad3f4be7a9cd8a95ccc7596a1c4982a3b103d91e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/robot-loader/zipball/805fb81376c24755d50bdb8bc69ca4db3def71d1", - "reference": "805fb81376c24755d50bdb8bc69ca4db3def71d1", + "url": "https://api.github.com/repos/nette/robot-loader/zipball/ad3f4be7a9cd8a95ccc7596a1c4982a3b103d91e", + "reference": "ad3f4be7a9cd8a95ccc7596a1c4982a3b103d91e", "shasum": "" }, "require": { @@ -3868,8 +2992,10 @@ "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.4", - "phpstan/phpstan-nette": "^2.0@stable", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.39@stable", "tracy/tracy": "^2.9" }, "type": "library", @@ -3913,22 +3039,22 @@ ], "support": { "issues": "https://github.com/nette/robot-loader/issues", - "source": "https://github.com/nette/robot-loader/tree/v4.1.0" + "source": "https://github.com/nette/robot-loader/tree/v4.1.2" }, - "time": "2025-08-06T18:34:21+00:00" + "time": "2026-02-23T04:18:24+00:00" }, { "name": "nette/routing", - "version": "v3.1.2", + "version": "v3.1.3", "source": { "type": "git", "url": "https://github.com/nette/routing.git", - "reference": "14c466f3383add0d4f78a82074d3c9841f8edf47" + "reference": "92c0f7f89bdc5f93adec24b2ed7bb0c10e2550a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/routing/zipball/14c466f3383add0d4f78a82074d3c9841f8edf47", - "reference": "14c466f3383add0d4f78a82074d3c9841f8edf47", + "url": "https://api.github.com/repos/nette/routing/zipball/92c0f7f89bdc5f93adec24b2ed7bb0c10e2550a6", + "reference": "92c0f7f89bdc5f93adec24b2ed7bb0c10e2550a6", "shasum": "" }, "require": { @@ -3937,8 +3063,10 @@ "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.5", - "phpstan/phpstan-nette": "^2.0@stable", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.39@stable", "tracy/tracy": "^2.9" }, "type": "library", @@ -3978,30 +3106,32 @@ ], "support": { "issues": "https://github.com/nette/routing/issues", - "source": "https://github.com/nette/routing/tree/v3.1.2" + "source": "https://github.com/nette/routing/tree/v3.1.3" }, - "time": "2025-10-31T00:55:27+00:00" + "time": "2026-02-23T04:05:29+00:00" }, { "name": "nette/safe-stream", - "version": "v3.0.3", + "version": "v3.0.4", "source": { "type": "git", "url": "https://github.com/nette/safe-stream.git", - "reference": "1c26efc4f09117d4ac6b8e56c97c8b61d1f5427a" + "reference": "f37cf82709f78550e752c599169289b9b73fdca1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/safe-stream/zipball/1c26efc4f09117d4ac6b8e56c97c8b61d1f5427a", - "reference": "1c26efc4f09117d4ac6b8e56c97c8b61d1f5427a", + "url": "https://api.github.com/repos/nette/safe-stream/zipball/f37cf82709f78550e752c599169289b9b73fdca1", + "reference": "f37cf82709f78550e752c599169289b9b73fdca1", "shasum": "" }, "require": { "php": "8.0 - 8.5" }, "require-dev": { + "nette/phpstan-rules": "^1.0", "nette/tester": "^2.4", - "phpstan/phpstan-nette": "^2.0@stable", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", "tracy/tracy": "^2.8" }, "type": "library", @@ -4046,22 +3176,22 @@ ], "support": { "issues": "https://github.com/nette/safe-stream/issues", - "source": "https://github.com/nette/safe-stream/tree/v3.0.3" + "source": "https://github.com/nette/safe-stream/tree/v3.0.4" }, - "time": "2025-08-01T02:24:13+00:00" + "time": "2026-02-23T03:33:58+00:00" }, { "name": "nette/schema", - "version": "v1.3.3", + "version": "v1.3.5", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004" + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004", - "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004", + "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", "shasum": "" }, "require": { @@ -4069,8 +3199,10 @@ "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^2.0@stable", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.39@stable", "tracy/tracy": "^2.8" }, "type": "library", @@ -4111,22 +3243,22 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.3" + "source": "https://github.com/nette/schema/tree/v1.3.5" }, - "time": "2025-10-30T22:57:59+00:00" + "time": "2026-02-23T03:47:12+00:00" }, { "name": "nette/security", - "version": "v3.2.2", + "version": "v3.2.5", "source": { "type": "git", "url": "https://github.com/nette/security.git", - "reference": "beca6757457281ebc9428743bec7960809f40d49" + "reference": "50ce3c4b8edd27cb134237cac3af514a84331524" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/security/zipball/beca6757457281ebc9428743bec7960809f40d49", - "reference": "beca6757457281ebc9428743bec7960809f40d49", + "url": "https://api.github.com/repos/nette/security/zipball/50ce3c4b8edd27cb134237cac3af514a84331524", + "reference": "50ce3c4b8edd27cb134237cac3af514a84331524", "shasum": "" }, "require": { @@ -4141,8 +3273,10 @@ "mockery/mockery": "^1.6@stable", "nette/di": "^3.1", "nette/http": "^3.2", - "nette/tester": "^2.5", - "phpstan/phpstan-nette": "^2.0@stable", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", "tracy/tracy": "^2.9" }, "type": "library", @@ -4185,26 +3319,26 @@ ], "support": { "issues": "https://github.com/nette/security/issues", - "source": "https://github.com/nette/security/tree/v3.2.2" + "source": "https://github.com/nette/security/tree/v3.2.5" }, - "time": "2025-08-01T02:15:08+00:00" + "time": "2026-06-15T05:40:46+00:00" }, { "name": "nette/utils", - "version": "v4.0.8", + "version": "v4.1.4", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede" + "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/c930ca4e3cf4f17dcfb03037703679d2396d2ede", - "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede", + "url": "https://api.github.com/repos/nette/utils/zipball/7da6c396d7ebe142bc857c20479d5e70a5e1aac7", + "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7", "shasum": "" }, "require": { - "php": "8.0 - 8.5" + "php": "8.2 - 8.5" }, "conflict": { "nette/finder": "<3", @@ -4212,8 +3346,10 @@ }, "require-dev": { "jetbrains/phpstorm-attributes": "^1.2", + "nette/phpstan-rules": "^1.0", "nette/tester": "^2.5", - "phpstan/phpstan-nette": "^2.0@stable", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", "tracy/tracy": "^2.9" }, "suggest": { @@ -4227,7 +3363,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -4274,191 +3410,46 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.8" - }, - "time": "2025-08-06T21:43:34+00:00" - }, - { - "name": "nettrine/annotations", - "version": "v0.8.1", - "source": { - "type": "git", - "url": "https://github.com/contributte/doctrine-annotations.git", - "reference": "d284d9108f335ca2c9a9ee2ec16bebfbaabf0b35" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/contributte/doctrine-annotations/zipball/d284d9108f335ca2c9a9ee2ec16bebfbaabf0b35", - "reference": "d284d9108f335ca2c9a9ee2ec16bebfbaabf0b35", - "shasum": "" - }, - "require": { - "doctrine/annotations": "^1.6.1", - "nette/di": "^3.1.2", - "nettrine/cache": "^0.4.0 || ^0.5.0", - "php": ">=8.1" - }, - "require-dev": { - "contributte/phpstan": "^0.1", - "contributte/qa": "^0.4", - "contributte/tester": "^0.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.9.x-dev" - } - }, - "autoload": { - "psr-4": { - "Nettrine\\Annotations\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Milan Felix Šulc", - "homepage": "https://f3l1x.io" - } - ], - "description": "Doctrine Annotations for Nette Framework", - "homepage": "https://github.com/contributte/doctrine-annotations", - "keywords": [ - "annotations", - "doctrine", - "nette", - "nettrine" - ], - "support": { - "issues": "https://github.com/contributte/doctrine-annotations/issues", - "source": "https://github.com/contributte/doctrine-annotations/tree/v0.8.1" - }, - "funding": [ - { - "url": "https://contributte.org/partners.html", - "type": "custom" - }, - { - "url": "https://github.com/f3l1x", - "type": "github" - } - ], - "time": "2023-07-03T16:12:16+00:00" - }, - { - "name": "nettrine/cache", - "version": "v0.5.0", - "source": { - "type": "git", - "url": "https://github.com/contributte/doctrine-cache.git", - "reference": "85223ef25e1dd4e35471405aed254e9da983e4a3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/contributte/doctrine-cache/zipball/85223ef25e1dd4e35471405aed254e9da983e4a3", - "reference": "85223ef25e1dd4e35471405aed254e9da983e4a3", - "shasum": "" - }, - "require": { - "doctrine/cache": "^2.2.0", - "nette/di": "^3.2.4", - "php": ">=8.2", - "symfony/cache": "^7.2.1" - }, - "require-dev": { - "contributte/phpstan": "^0.2", - "contributte/qa": "^0.4", - "contributte/tester": "^0.3", - "tracy/tracy": "^2.10.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.6.x-dev" - } - }, - "autoload": { - "psr-4": { - "Nettrine\\Cache\\": "src/" - } + "source": "https://github.com/nette/utils/tree/v4.1.4" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Milan Felix Šulc", - "homepage": "https://f3l1x.io" - } - ], - "description": "Doctrine Cache for Nette Framework", - "homepage": "https://github.com/contributte/doctrine-cache", - "keywords": [ - "cache", - "doctrine", - "nette", - "nettrine" - ], - "support": { - "issues": "https://github.com/contributte/doctrine-cache/issues", - "source": "https://github.com/contributte/doctrine-cache/tree/v0.5.0" - }, - "funding": [ - { - "url": "https://contributte.org/partners.html", - "type": "custom" - }, - { - "url": "https://github.com/f3l1x", - "type": "github" - } - ], - "time": "2025-01-10T17:33:34+00:00" + "time": "2026-05-11T20:49:54+00:00" }, { "name": "nettrine/dbal", - "version": "v0.9.0", + "version": "v0.10.3", "source": { "type": "git", "url": "https://github.com/contributte/doctrine-dbal.git", - "reference": "15bd7770b098edb6c47909990506bdd7f6449d49" + "reference": "b9858c27f6571956e8f5a9a78fc3f810dac25e88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/contributte/doctrine-dbal/zipball/15bd7770b098edb6c47909990506bdd7f6449d49", - "reference": "15bd7770b098edb6c47909990506bdd7f6449d49", + "url": "https://api.github.com/repos/contributte/doctrine-dbal/zipball/b9858c27f6571956e8f5a9a78fc3f810dac25e88", + "reference": "b9858c27f6571956e8f5a9a78fc3f810dac25e88", "shasum": "" }, "require": { - "doctrine/dbal": "^3.6.7", + "doctrine/dbal": "^4.2.1", "nette/di": "^3.2.2", - "nettrine/cache": "^0.4.0 || ^0.5.0", - "php": ">=8.1" - }, - "conflict": { - "doctrine/event-manager": "<2.0.0", - "nette/di": "<3.0.6", - "nette/schema": "<1.1.0" + "php": ">=8.2", + "psr/cache": "^3.0.0", + "psr/log": "^3.0" }, "require-dev": { "contributte/console": "^0.10.1", - "contributte/phpstan": "^0.1", - "contributte/qa": "^0.4", - "contributte/tester": "^0.3", + "contributte/phpstan": "^0.2.0", + "contributte/qa": "^0.4.0", + "contributte/tester": "^0.3.0", "ext-pdo": "*", "mockery/mockery": "^1.3.5", - "nettrine/orm": "^0.9.0", - "psr/log": "^3.0", + "monolog/monolog": "^3.8.0", + "symfony/cache": "^7.1.9", "tracy/tracy": "^2.10.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.9.x-dev" + "dev-master": "0.11.x-dev" } }, "autoload": { @@ -4489,7 +3480,7 @@ ], "support": { "issues": "https://github.com/contributte/doctrine-dbal/issues", - "source": "https://github.com/contributte/doctrine-dbal/tree/v0.9.0" + "source": "https://github.com/contributte/doctrine-dbal/tree/v0.10.3" }, "funding": [ { @@ -4501,37 +3492,37 @@ "type": "github" } ], - "time": "2024-07-22T07:03:27+00:00" + "time": "2026-01-02T19:10:30+00:00" }, { "name": "nettrine/extensions-atlantic18", - "version": "v0.6.0", + "version": "v0.7.1", "source": { "type": "git", "url": "https://github.com/contributte/doctrine-extensions-atlantic18.git", - "reference": "14c1812da3a430e36cb9bcbb4c19c9e502a4e58f" + "reference": "95a635150d45544fd2ba4ce917ad41d7afaf3824" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/contributte/doctrine-extensions-atlantic18/zipball/14c1812da3a430e36cb9bcbb4c19c9e502a4e58f", - "reference": "14c1812da3a430e36cb9bcbb4c19c9e502a4e58f", + "url": "https://api.github.com/repos/contributte/doctrine-extensions-atlantic18/zipball/95a635150d45544fd2ba4ce917ad41d7afaf3824", + "reference": "95a635150d45544fd2ba4ce917ad41d7afaf3824", "shasum": "" }, "require": { - "doctrine/annotations": "^1.6.0", - "doctrine/orm": "^2.8.0", - "gedmo/doctrine-extensions": "^3.0.3", - "nette/di": "^3.0.0", - "php": ">=7.2" + "doctrine/orm": "^3.3.0", + "gedmo/doctrine-extensions": "^3.22.0", + "nette/di": "^3.2.0", + "php": ">=8.2" }, "require-dev": { - "nettrine/orm": "^0.8.0", - "ninjify/nunjuck": "^0.4", - "ninjify/qa": "^0.12", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-nette": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12" + "contributte/phpstan": "^0.2.0", + "contributte/qa": "^0.4.0", + "contributte/tester": "^0.3.0", + "nettrine/dbal": "^0.10.3", + "nettrine/orm": "^0.10.1", + "symfony/cache": "^7.2.0", + "symfony/translation-contracts": "^3.5.0", + "symfony/var-exporter": "^7.2.0" }, "type": "library", "extra": { @@ -4555,16 +3546,17 @@ } ], "description": "Doctrine2 behavioral extensions for Nette Framework", - "homepage": "https://github.com/nettrine/extensions-atlantic18", + "homepage": "https://github.com/contributte/doctrine-extensions-atlantic18", "keywords": [ "database", "doctrine", + "gedmo", "nette", "orm" ], "support": { "issues": "https://github.com/contributte/doctrine-extensions-atlantic18/issues", - "source": "https://github.com/contributte/doctrine-extensions-atlantic18/tree/v0.6.0" + "source": "https://github.com/contributte/doctrine-extensions-atlantic18/tree/v0.7.1" }, "funding": [ { @@ -4576,39 +3568,40 @@ "type": "github" } ], - "time": "2021-01-28T08:33:18+00:00" + "time": "2026-01-07T08:20:59+00:00" }, { "name": "nettrine/migrations", - "version": "v0.9.3", + "version": "v0.10.1", "source": { "type": "git", "url": "https://github.com/contributte/doctrine-migrations.git", - "reference": "41331ae024edd53a7ea7c96b6ae154c3c2e6ac8c" + "reference": "2dbce6a03b999effbf49654fb9d0d31a43779a28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/contributte/doctrine-migrations/zipball/41331ae024edd53a7ea7c96b6ae154c3c2e6ac8c", - "reference": "41331ae024edd53a7ea7c96b6ae154c3c2e6ac8c", + "url": "https://api.github.com/repos/contributte/doctrine-migrations/zipball/2dbce6a03b999effbf49654fb9d0d31a43779a28", + "reference": "2dbce6a03b999effbf49654fb9d0d31a43779a28", "shasum": "" }, "require": { - "doctrine/migrations": "^3.6.0", - "nette/di": "^3.1.2", - "php": ">=8.1", - "symfony/console": "^6.2.0" + "doctrine/migrations": "^3.8.2", + "nette/di": "^3.2.3", + "php": ">=8.2" }, "require-dev": { - "contributte/phpstan": "^0.1", - "contributte/qa": "^0.4", - "contributte/tester": "^0.3", - "doctrine/orm": "^2.6", - "mockery/mockery": "^1.3.0" + "contributte/phpstan": "^0.2.0", + "contributte/qa": "^0.4.0", + "contributte/tester": "^0.4.0", + "doctrine/orm": "^3.3.0", + "mockery/mockery": "^1.6.12", + "psr/log": "^3.0", + "symfony/console": "^7.2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.10.x-dev" + "dev-master": "0.11.x-dev" } }, "autoload": { @@ -4624,10 +3617,6 @@ { "name": "Milan Felix Šulc", "homepage": "https://f3l1x.io" - }, - { - "name": "Josef Benjac", - "homepage": "http://josefbenjac.com" } ], "description": "Doctrine Migrations for Nette Framework", @@ -4639,7 +3628,7 @@ ], "support": { "issues": "https://github.com/contributte/doctrine-migrations/issues", - "source": "https://github.com/contributte/doctrine-migrations/tree/v0.9.3" + "source": "https://github.com/contributte/doctrine-migrations/tree/v0.10.1" }, "funding": [ { @@ -4651,48 +3640,48 @@ "type": "github" } ], - "time": "2025-01-10T15:58:01+00:00" + "time": "2025-12-14T19:35:36+00:00" }, { "name": "nettrine/orm", - "version": "v0.9.0", + "version": "v0.10.1", "source": { "type": "git", "url": "https://github.com/contributte/doctrine-orm.git", - "reference": "f3afa2cf045259e1f4c996a693643510656ff95c" + "reference": "480480c92b0d2f35165fa3e478584cef60fac394" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/contributte/doctrine-orm/zipball/f3afa2cf045259e1f4c996a693643510656ff95c", - "reference": "f3afa2cf045259e1f4c996a693643510656ff95c", + "url": "https://api.github.com/repos/contributte/doctrine-orm/zipball/480480c92b0d2f35165fa3e478584cef60fac394", + "reference": "480480c92b0d2f35165fa3e478584cef60fac394", "shasum": "" }, "require": { - "doctrine/common": "^3.4.3", - "doctrine/orm": "^2.14.0", + "doctrine/orm": "^3.3.0", "nette/di": "^3.1.2", - "nettrine/annotations": "^0.8.0 || ^0.9.0", - "nettrine/cache": "^0.4.0 || ^0.5.0", - "nettrine/dbal": "^0.8.0 || ^0.9.0", - "php": ">=8.1", - "symfony/console": "^5.3.0 || ^6.2.0 || ^7.0.0 " + "nettrine/dbal": "^0.10.2 || ^0.11.0", + "php": ">=8.2", + "psr/cache": "^3.0.0", + "psr/log": "^3.0.2" }, "conflict": { - "doctrine/persistence": "<3.0.0", - "nette/di": "<3.0.6", - "nette/schema": "<1.1.0" + "doctrine/event-manager": "<2.0.0" }, "require-dev": { - "contributte/phpstan": "^0.1", + "contributte/phpstan": "^0.2.0", "contributte/qa": "^0.4", - "contributte/tester": "^0.3", - "mockery/mockery": "^1.3.1", + "contributte/tester": "^0.3.0", + "mockery/mockery": "^1.6.12", + "monolog/monolog": "^3.8.0", + "symfony/cache": "^7.1.9", + "symfony/console": "^7.1.8 ", + "symfony/var-exporter": "^7.0", "tracy/tracy": "^2.10.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.9.x-dev" + "dev-master": "0.11.x-dev" } }, "autoload": { @@ -4720,7 +3709,7 @@ ], "support": { "issues": "https://github.com/contributte/doctrine-orm/issues", - "source": "https://github.com/contributte/doctrine-orm/tree/v0.9.0" + "source": "https://github.com/contributte/doctrine-orm/tree/v0.10.1" }, "funding": [ { @@ -4732,7 +3721,7 @@ "type": "github" } ], - "time": "2024-08-20T09:11:52+00:00" + "time": "2026-01-06T16:53:40+00:00" }, { "name": "psr/cache", @@ -5043,16 +4032,16 @@ }, { "name": "psr/http-message", - "version": "1.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { @@ -5061,7 +4050,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -5076,7 +4065,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -5090,9 +4079,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2023-04-04T09:50:52+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "psr/log", @@ -5129,71 +4118,20 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" - }, - "time": "2024-09-11T13:17:53+00:00" - }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for simple caching", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ - "cache", - "caching", + "log", "psr", - "psr-16", - "simple-cache" + "psr-3" ], "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2017-10-23T01:57:42+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { "name": "ralouphie/getallheaders", @@ -5317,20 +4255,20 @@ }, { "name": "ramsey/uuid", - "version": "4.9.1", + "version": "4.9.3", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440" + "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/81f941f6f729b1e3ceea61d9d014f8b6c6800440", - "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/1df15849d00943a67d677dc9cfd80795f038c9f8", + "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", + "brick/math": ">=0.8.16 <=0.18", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" }, @@ -5389,9 +4327,9 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.9.1" + "source": "https://github.com/ramsey/uuid/tree/4.9.3" }, - "time": "2025-09-04T20:59:21+00:00" + "time": "2026-06-18T03:57:49+00:00" }, { "name": "ramsey/uuid-doctrine", @@ -5479,27 +4417,27 @@ }, { "name": "sebastian/comparator", - "version": "6.3.2", + "version": "8.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8" + "reference": "c025fc7604afab3f195fab7cdaf72327331af241" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8", - "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c025fc7604afab3f195fab7cdaf72327331af241", + "reference": "c025fc7604afab3f195fab7cdaf72327331af241", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/diff": "^6.0", - "sebastian/exporter": "^6.0" + "php": ">=8.4", + "sebastian/diff": "^9.0", + "sebastian/exporter": "^8.1.0" }, "require-dev": { - "phpunit/phpunit": "^11.4" + "phpunit/phpunit": "^13.2" }, "suggest": { "ext-bcmath": "For comparing BcMath\\Number objects" @@ -5507,7 +4445,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.3-dev" + "dev-main": "8.3-dev" } }, "autoload": { @@ -5547,7 +4485,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2" + "source": "https://github.com/sebastianbergmann/comparator/tree/8.3.0" }, "funding": [ { @@ -5567,33 +4505,33 @@ "type": "tidelift" } ], - "time": "2025-08-10T08:07:46+00:00" + "time": "2026-06-05T03:06:45+00:00" }, { "name": "sebastian/diff", - "version": "6.0.2", + "version": "9.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" + "reference": "a3fb6a298a265ff487a91bbea46e03cd01dbb226" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/a3fb6a298a265ff487a91bbea46e03cd01dbb226", + "reference": "a3fb6a298a265ff487a91bbea46e03cd01dbb226", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^11.0", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^13.2", + "symfony/process": "^7.4.13" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "9.0-dev" } }, "autoload": { @@ -5626,42 +4564,54 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" + "source": "https://github.com/sebastianbergmann/diff/tree/9.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/diff", + "type": "tidelift" } ], - "time": "2024-07-03T04:53:05+00:00" + "time": "2026-06-05T03:04:51+00:00" }, { "name": "sebastian/exporter", - "version": "6.3.2", + "version": "8.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" + "reference": "cfaa77c750dcad6f44c9bac8f62ac486e1c82c26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", - "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/cfaa77c750dcad6f44c9bac8f62ac486e1c82c26", + "reference": "cfaa77c750dcad6f44c9bac8f62ac486e1c82c26", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/recursion-context": "^6.0" + "php": ">=8.4", + "sebastian/recursion-context": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^13.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.3-dev" + "dev-main": "8.1-dev" } }, "autoload": { @@ -5704,7 +4654,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/8.1.1" }, "funding": [ { @@ -5724,32 +4674,32 @@ "type": "tidelift" } ], - "time": "2025-09-24T06:12:51+00:00" + "time": "2026-07-13T11:35:11+00:00" }, { "name": "sebastian/recursion-context", - "version": "6.0.3", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" + "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", - "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/74c5af21f6a5833e91767ca068c4d3dfec15317e", + "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -5780,7 +4730,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/8.0.0" }, "funding": [ { @@ -5800,99 +4750,33 @@ "type": "tidelift" } ], - "time": "2025-08-13T04:42:22+00:00" - }, - { - "name": "spatie/regex", - "version": "1.4.2", - "source": { - "type": "git", - "url": "https://github.com/spatie/regex.git", - "reference": "1500ed75af430df3a32047494c43d79d45cf152b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/regex/zipball/1500ed75af430df3a32047494c43d79d45cf152b", - "reference": "1500ed75af430df3a32047494c43d79d45cf152b", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Regex\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Sebastian De Deyne", - "email": "sebastian@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A sane interface for php's built in preg_* functions", - "homepage": "https://github.com/spatie/regex", - "keywords": [ - "expression", - "expressions", - "regex", - "regular", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/regex/issues", - "source": "https://github.com/spatie/regex/tree/1.4.2" - }, - "funding": [ - { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2020-11-03T23:05:25+00:00" + "time": "2026-02-06T04:51:28+00:00" }, { "name": "symfony/cache", - "version": "v7.3.5", + "version": "v8.1.1", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "4a55feb59664f49042a0824c0f955e2f4c1412ad" + "reference": "c14decc1b0755b1e8ab6babeef56e1880348e817" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/4a55feb59664f49042a0824c0f955e2f4c1412ad", - "reference": "4a55feb59664f49042a0824c0f955e2f4c1412ad", + "url": "https://api.github.com/repos/symfony/cache/zipball/c14decc1b0755b1e8ab6babeef56e1880348e817", + "reference": "c14decc1b0755b1e8ab6babeef56e1880348e817", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", "symfony/cache-contracts": "^3.6", - "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/var-exporter": "^8.1" }, "conflict": { - "doctrine/dbal": "<3.6", - "symfony/dependency-injection": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/var-dumper": "<6.4" + "ext-redis": "<6.1", + "ext-relay": "<0.12.1" }, "provide": { "psr/cache-implementation": "2.0|3.0", @@ -5901,16 +4785,16 @@ }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/dbal": "^3.6|^4", + "doctrine/dbal": "^4.3", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/clock": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/filesystem": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/clock": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/filesystem": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -5945,7 +4829,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.3.5" + "source": "https://github.com/symfony/cache/tree/v8.1.1" }, "funding": [ { @@ -5965,20 +4849,20 @@ "type": "tidelift" } ], - "time": "2025-10-16T13:55:38+00:00" + "time": "2026-06-17T15:04:37+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.6.0", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868" + "reference": "9789738bc19af1106dc54d6afba9a0b467516cf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868", - "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/9789738bc19af1106dc54d6afba9a0b467516cf2", + "reference": "9789738bc19af1106dc54d6afba9a0b467516cf2", "shasum": "" }, "require": { @@ -5992,7 +4876,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -6025,7 +4909,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.7.1" }, "funding": [ { @@ -6036,56 +4920,62 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-03-13T15:25:07+00:00" + "time": "2026-06-05T06:23:12+00:00" }, { "name": "symfony/console", - "version": "v6.4.27", + "version": "v8.1.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "13d3176cf8ad8ced24202844e9f95af11e2959fc" + "reference": "b711a8ab808b6c074c6b8caef70d0fd8d6b6d07d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/13d3176cf8ad8ced24202844e9f95af11e2959fc", - "reference": "13d3176cf8ad8ced24202844e9f95af11e2959fc", + "url": "https://api.github.com/repos/symfony/console/zipball/b711a8ab808b6c074c6b8caef70d0fd8d6b6d07d", + "reference": "b711a8ab808b6c074c6b8caef70d0fd8d6b6d07d", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.4.1", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php85": "^1.32", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^7.4.6|^8.0.6" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<8.1", + "symfony/event-dispatcher": "<8.1" }, "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" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/event-dispatcher": "^8.1", + "symfony/filesystem": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6119,7 +5009,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.27" + "source": "https://github.com/symfony/console/tree/v8.1.1" }, "funding": [ { @@ -6139,20 +5029,20 @@ "type": "tidelift" } ], - "time": "2025-10-06T10:25:16+00:00" + "time": "2026-06-16T12:55:20+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.6.0", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d", + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d", "shasum": "" }, "require": { @@ -6165,7 +5055,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -6190,7 +5080,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.6.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1" }, "funding": [ { @@ -6201,25 +5091,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-06-05T06:23:12+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.33.0", + "version": "v1.37.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { @@ -6269,7 +5163,94 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/polyfill-deepclone", + "version": "v1.40.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-deepclone.git", + "reference": "dca4ccba5f360070b574414dce4c1e7a559844fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-deepclone/zipball/dca4ccba5f360070b574414dce4c1e7a559844fa", + "reference": "dca4ccba5f360070b574414dce4c1e7a559844fa", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "provide": { + "ext-deepclone": "*" + }, + "suggest": { + "ext-deepclone": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\DeepClone\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the deepclone extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "deepclone", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-deepclone/tree/v1.40.0" }, "funding": [ { @@ -6289,20 +5270,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-06-12T07:27:17+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.33.0", + "version": "v1.38.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + "reference": "e9247d281d694a5120554d9afaf54e070e88a603" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603", + "reference": "e9247d281d694a5120554d9afaf54e070e88a603", "shasum": "" }, "require": { @@ -6351,7 +5332,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1" }, "funding": [ { @@ -6371,20 +5352,20 @@ "type": "tidelift" } ], - "time": "2025-06-27T09:58:17+00:00" + "time": "2026-05-26T05:58:03+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.33.0", + "version": "v1.38.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "3833d7255cc303546435cb650316bff708a1c75c" + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", - "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b", "shasum": "" }, "require": { @@ -6436,7 +5417,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0" }, "funding": [ { @@ -6456,20 +5437,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-05-25T13:48:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", + "version": "v1.38.2", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", "shasum": "" }, "require": { @@ -6521,7 +5502,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" }, "funding": [ { @@ -6541,37 +5522,52 @@ "type": "tidelift" } ], - "time": "2024-12-23T08:48:59+00:00" + "time": "2026-05-27T06:59:30+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.31.0", + "name": "symfony/polyfill-php80", + "version": "v1.37.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", - "reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", "shasum": "" }, "require": { "php": ">=7.2" }, - "type": "metapackage", + "type": "library", "extra": { "thanks": { "url": "https://github.com/symfony/polyfill", "name": "symfony/polyfill" } }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -6581,7 +5577,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -6590,7 +5586,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" }, "funding": [ { @@ -6601,25 +5597,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.33.0", + "name": "symfony/polyfill-php84", + "version": "v1.38.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", "shasum": "" }, "require": { @@ -6637,7 +5637,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Polyfill\\Php84\\": "" }, "classmap": [ "Resources/stubs" @@ -6648,10 +5648,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -6661,7 +5657,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -6670,7 +5666,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" }, "funding": [ { @@ -6690,20 +5686,20 @@ "type": "tidelift" } ], - "time": "2025-01-02T08:10:11+00:00" + "time": "2026-05-26T12:51:13+00:00" }, { - "name": "symfony/polyfill-php84", - "version": "v1.33.0", + "name": "symfony/polyfill-php85", + "version": "v1.38.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", + "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", "shasum": "" }, "require": { @@ -6721,7 +5717,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php84\\": "" + "Symfony\\Polyfill\\Php85\\": "" }, "classmap": [ "Resources/stubs" @@ -6741,7 +5737,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -6750,7 +5746,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.38.1" }, "funding": [ { @@ -6770,28 +5766,29 @@ "type": "tidelift" } ], - "time": "2025-06-24T13:30:11+00:00" + "time": "2026-05-26T02:25:22+00:00" }, { "name": "symfony/property-access", - "version": "v7.3.3", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "4a4389e5c8bd1d0320d80a23caa6a1ac71cb81a7" + "reference": "9261ef060f26cc7b728f67f141ba19b98a6209a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/4a4389e5c8bd1d0320d80a23caa6a1ac71cb81a7", - "reference": "4a4389e5c8bd1d0320d80a23caa6a1ac71cb81a7", + "url": "https://api.github.com/repos/symfony/property-access/zipball/9261ef060f26cc7b728f67f141ba19b98a6209a9", + "reference": "9261ef060f26cc7b728f67f141ba19b98a6209a9", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/property-info": "^6.4|^7.0" + "php": ">=8.4.1", + "symfony/property-info": "^7.4.4|^8.0.4" }, "require-dev": { - "symfony/cache": "^6.4|^7.0" + "symfony/cache": "^7.4|^8.0", + "symfony/var-exporter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6830,7 +5827,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.3.3" + "source": "https://github.com/symfony/property-access/tree/v8.1.0" }, "funding": [ { @@ -6850,41 +5847,37 @@ "type": "tidelift" } ], - "time": "2025-08-04T15:15:28+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/property-info", - "version": "v7.3.5", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "0b346ed259dc5da43535caf243005fe7d4b0f051" + "reference": "4721e8c56d0cd2378e0ef9a9899f810008b859f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/0b346ed259dc5da43535caf243005fe7d4b0f051", - "reference": "0b346ed259dc5da43535caf243005fe7d4b0f051", + "url": "https://api.github.com/repos/symfony/property-info/zipball/4721e8c56d0cd2378e0ef9a9899f810008b859f7", + "reference": "4721e8c56d0cd2378e0ef9a9899f810008b859f7", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0", - "symfony/type-info": "^7.3.5" + "php": ">=8.4.1", + "symfony/string": "^7.4|^8.0", + "symfony/type-info": "^7.4.7|^8.0.7" }, "conflict": { - "phpdocumentor/reflection-docblock": "<5.2", - "phpdocumentor/type-resolver": "<1.5.1", - "symfony/cache": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/serializer": "<6.4" + "phpdocumentor/reflection-docblock": "<5.2|>=7", + "phpdocumentor/type-resolver": "<1.5.1" }, "require-dev": { - "phpdocumentor/reflection-docblock": "^5.2", + "phpdocumentor/reflection-docblock": "^5.2|^6.0", "phpstan/phpdoc-parser": "^1.0|^2.0", - "symfony/cache": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0" + "symfony/cache": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6920,7 +5913,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.3.5" + "source": "https://github.com/symfony/property-info/tree/v8.1.0" }, "funding": [ { @@ -6940,20 +5933,20 @@ "type": "tidelift" } ], - "time": "2025-10-05T22:12:41+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.6.0", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/c0a284bab1ed8aa0417e3d69250ab437739563a0", + "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0", "shasum": "" }, "require": { @@ -6971,7 +5964,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -7007,7 +6000,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.7.1" }, "funding": [ { @@ -7018,29 +6011,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-25T09:37:31+00:00" + "time": "2026-06-16T09:55:08+00:00" }, { "name": "symfony/stopwatch", - "version": "v7.3.0", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd" + "reference": "21c07b026905d596e8379caeb115d87aa479499d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", - "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/21c07b026905d596e8379caeb115d87aa479499d", + "reference": "21c07b026905d596e8379caeb115d87aa479499d", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -7069,7 +6066,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.3.0" + "source": "https://github.com/symfony/stopwatch/tree/v8.1.0" }, "funding": [ { @@ -7080,43 +6077,47 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-24T10:49:57+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/string", - "version": "v7.3.4", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f96476035142921000338bad71e5247fbc138872" + "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f96476035142921000338bad71e5247fbc138872", - "reference": "f96476035142921000338bad71e5247fbc138872", + "url": "https://api.github.com/repos/symfony/string/zipball/afd5944f4005862d961efb85c8bbd5c523c4e3c9", + "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4.1", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-intl-grapheme": "^1.33", + "symfony/polyfill-intl-normalizer": "^1.0", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/emoji": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/var-exporter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -7155,7 +6156,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.4" + "source": "https://github.com/symfony/string/tree/v8.1.0" }, "funding": [ { @@ -7175,26 +6176,25 @@ "type": "tidelift" } ], - "time": "2025-09-11T14:36:48+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/type-info", - "version": "v7.3.5", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "8b36f41421160db56914f897b57eaa6a830758b3" + "reference": "9f24df8a79781b9b9f030fea7dfd2f3bd1e7e7e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/8b36f41421160db56914f897b57eaa6a830758b3", - "reference": "8b36f41421160db56914f897b57eaa6a830758b3", + "url": "https://api.github.com/repos/symfony/type-info/zipball/9f24df8a79781b9b9f030fea7dfd2f3bd1e7e7e7", + "reference": "9f24df8a79781b9b9f030fea7dfd2f3bd1e7e7e7", "shasum": "" }, "require": { - "php": ">=8.2", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" + "php": ">=8.4.1", + "psr/container": "^1.1|^2.0" }, "conflict": { "phpstan/phpdoc-parser": "<1.30" @@ -7238,7 +6238,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.3.5" + "source": "https://github.com/symfony/type-info/tree/v8.1.0" }, "funding": [ { @@ -7258,30 +6258,31 @@ "type": "tidelift" } ], - "time": "2025-10-16T12:30:12+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.3.4", + "version": "v8.1.1", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4" + "reference": "75b74315b4e4be40e5534cf9c5cc30dd0907ed71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0f020b544a30a7fe8ba972e53ee48a74c0bc87f4", - "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/75b74315b4e4be40e5534cf9c5cc30dd0907ed71", + "reference": "75b74315b4e4be40e5534cf9c5cc30dd0907ed71", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3" + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-deepclone": "^1.40" }, "require-dev": { - "symfony/property-access": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/property-access": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -7306,11 +6307,12 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "description": "Provides tools to export, instantiate, hydrate, clone and lazy-load PHP objects", "homepage": "https://symfony.com", "keywords": [ "clone", "construct", + "deep-clone", "export", "hydrate", "instantiate", @@ -7319,7 +6321,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.3.4" + "source": "https://github.com/symfony/var-exporter/tree/v8.1.1" }, "funding": [ { @@ -7339,32 +6341,32 @@ "type": "tidelift" } ], - "time": "2025-09-11T10:12:26+00:00" + "time": "2026-06-27T09:05:56+00:00" }, { "name": "symfony/yaml", - "version": "v7.3.5", + "version": "v8.1.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "90208e2fc6f68f613eae7ca25a2458a931b1bacc" + "reference": "8e4cdd4311683516be06944f4b85244063cdb886" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/90208e2fc6f68f613eae7ca25a2458a931b1bacc", - "reference": "90208e2fc6f68f613eae7ca25a2458a931b1bacc", + "url": "https://api.github.com/repos/symfony/yaml/zipball/8e4cdd4311683516be06944f4b85244063cdb886", + "reference": "8e4cdd4311683516be06944f4b85244063cdb886", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", + "php": ">=8.4.1", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<6.4" + "symfony/console": "<7.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0" + "symfony/console": "^7.4|^8.0", + "yaml/yaml-test-suite": "*" }, "bin": [ "Resources/bin/yaml-lint" @@ -7395,7 +6397,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.3.5" + "source": "https://github.com/symfony/yaml/tree/v8.1.1" }, "funding": [ { @@ -7415,20 +6417,20 @@ "type": "tidelift" } ], - "time": "2025-09-27T09:00:46+00:00" + "time": "2026-06-09T11:06:24+00:00" }, { "name": "tracy/tracy", - "version": "v2.11.0", + "version": "v2.12.0", "source": { "type": "git", "url": "https://github.com/nette/tracy.git", - "reference": "eec57bcf2ff11d79f519a19da9d7ae1e2c63c42e" + "reference": "535eda4871fd04f2756c8d95f6bdfa43706d79be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/tracy/zipball/eec57bcf2ff11d79f519a19da9d7ae1e2c63c42e", - "reference": "eec57bcf2ff11d79f519a19da9d7ae1e2c63c42e", + "url": "https://api.github.com/repos/nette/tracy/zipball/535eda4871fd04f2756c8d95f6bdfa43706d79be", + "reference": "535eda4871fd04f2756c8d95f6bdfa43706d79be", "shasum": "" }, "require": { @@ -7444,15 +6446,17 @@ "nette/di": "^3.0", "nette/http": "^3.0", "nette/mail": "^3.0 || ^4.0", - "nette/tester": "^2.2", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", "nette/utils": "^3.0 || ^4.0", - "phpstan/phpstan-nette": "^2.0@stable", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", "psr/log": "^1.0 || ^2.0 || ^3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.11-dev" + "dev-master": "2.12-dev" } }, "autoload": { @@ -7491,9 +6495,9 @@ ], "support": { "issues": "https://github.com/nette/tracy/issues", - "source": "https://github.com/nette/tracy/tree/v2.11.0" + "source": "https://github.com/nette/tracy/tree/v2.12.0" }, - "time": "2025-10-31T00:12:50+00:00" + "time": "2026-05-04T00:23:53+00:00" } ], "packages-dev": [ @@ -7685,16 +6689,16 @@ }, { "name": "nette/tester", - "version": "v2.5.6", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/nette/tester.git", - "reference": "f7328f743d06df233bbc9b68da9f4941f73ad661" + "reference": "86e4d80d0953256c3b2930b9d47a07d2a9528770" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/tester/zipball/f7328f743d06df233bbc9b68da9f4941f73ad661", - "reference": "f7328f743d06df233bbc9b68da9f4941f73ad661", + "url": "https://api.github.com/repos/nette/tester/zipball/86e4d80d0953256c3b2930b9d47a07d2a9528770", + "reference": "86e4d80d0953256c3b2930b9d47a07d2a9528770", "shasum": "" }, "require": { @@ -7702,7 +6706,7 @@ }, "require-dev": { "ext-simplexml": "*", - "phpstan/phpstan-nette": "^2.0@stable" + "phpstan/phpstan": "^2.0@stable" }, "bin": [ "src/tester" @@ -7710,7 +6714,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -7757,17 +6761,17 @@ ], "support": { "issues": "https://github.com/nette/tester/issues", - "source": "https://github.com/nette/tester/tree/v2.5.6" + "source": "https://github.com/nette/tester/tree/v2.6.1" }, - "time": "2025-08-07T00:28:58+00:00" + "time": "2026-05-11T18:11:12+00:00" }, { "name": "phpstan/phpstan", - "version": "2.1.31", + "version": "2.2.5", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ead89849d879fe203ce9292c6ef5e7e76f867b96", - "reference": "ead89849d879fe203ce9292c6ef5e7e76f867b96", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/909c1e5fef7989ac0d0c1c5c42e32a5c4f6198a0", + "reference": "909c1e5fef7989ac0d0c1c5c42e32a5c4f6198a0", "shasum": "" }, "require": { @@ -7790,6 +6794,17 @@ "license": [ "MIT" ], + "authors": [ + { + "name": "Ondřej Mirtes" + }, + { + "name": "Markus Staab" + }, + { + "name": "Vincent Langlet" + } + ], "description": "PHPStan - PHP Static Analysis Tool", "keywords": [ "dev", @@ -7812,25 +6827,25 @@ "type": "github" } ], - "time": "2025-10-10T14:14:11+00:00" + "time": "2026-07-05T06:31:06+00:00" }, { "name": "phpstan/phpstan-nette", - "version": "2.0.6", + "version": "2.0.12", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-nette.git", - "reference": "aa6c413df9587c355a744c3a84ecf9736987b607" + "reference": "2c104f121b9db65407112069ef4fd43799c9ba0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-nette/zipball/aa6c413df9587c355a744c3a84ecf9736987b607", - "reference": "aa6c413df9587c355a744c3a84ecf9736987b607", + "url": "https://api.github.com/repos/phpstan/phpstan-nette/zipball/2c104f121b9db65407112069ef4fd43799c9ba0c", + "reference": "2c104f121b9db65407112069ef4fd43799c9ba0c", "shasum": "" }, "require": { "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.1.12" + "phpstan/phpstan": "^2.2.3" }, "conflict": { "nette/application": "<2.3.0", @@ -7842,14 +6857,15 @@ }, "require-dev": { "nette/application": "^3.0", - "nette/di": "^3.1.10", + "nette/di": "^3.0", "nette/forms": "^3.0", - "nette/utils": "^2.3.0 || ^3.0.0", + "nette/utils": "^2.3.0 || ^3.0.0 || ^4.0", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/phpstan-deprecation-rules": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-phpunit": "^2.0.8", "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6" + "phpunit/phpunit": "^9.6", + "shipmonk/name-collision-detector": "^2.1" }, "type": "phpstan-extension", "extra": { @@ -7872,26 +6888,86 @@ "description": "Nette Framework class reflection extension for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-nette/issues", - "source": "https://github.com/phpstan/phpstan-nette/tree/2.0.6" + "source": "https://github.com/phpstan/phpstan-nette/tree/2.0.12" + }, + "time": "2026-07-02T10:28:46+00:00" + }, + { + "name": "rector/rector", + "version": "2.5.7", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/rector.git", + "reference": "ba22f8c087848278fed6b4910d4cf1108096d8d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/ba22f8c087848278fed6b4910d4cf1108096d8d3", + "reference": "ba22f8c087848278fed6b4910d4cf1108096d8d3", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "phpstan/phpstan": "^2.2.2" + }, + "conflict": { + "rector/rector-doctrine": "*", + "rector/rector-downgrade-php": "*", + "rector/rector-phpunit": "*", + "rector/rector-symfony": "*" + }, + "suggest": { + "ext-dom": "To manipulate phpunit.xml via the custom-rule command" + }, + "bin": [ + "bin/rector" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Instant Upgrade and Automated Refactoring of any PHP code", + "homepage": "https://getrector.com/", + "keywords": [ + "automation", + "dev", + "migration", + "refactoring" + ], + "support": { + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/2.5.7" }, - "time": "2025-09-19T19:54:10+00:00" + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2026-07-13T15:24:18+00:00" }, { "name": "symfony/process", - "version": "v7.3.4", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b" + "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/f24f8f316367b30810810d4eb30c543d7003ff3b", - "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b", + "url": "https://api.github.com/repos/symfony/process/zipball/c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", + "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4.1" }, "type": "library", "autoload": { @@ -7919,7 +6995,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.3.4" + "source": "https://github.com/symfony/process/tree/v8.1.0" }, "funding": [ { @@ -7939,26 +7015,26 @@ "type": "tidelift" } ], - "time": "2025-09-11T10:12:26+00:00" + "time": "2026-05-29T05:06:50+00:00" } ], "aliases": [], "minimum-stability": "dev", "stability-flags": { - "mockery/mockery": 0, - "mikey179/vfsstream": 0 + "mikey179/vfsstream": 0, + "mockery/mockery": 0 }, "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=8.2", + "php": ">=8.4", "ext-yaml": ">=2.0", "ext-json": ">=1.7", "ext-zip": ">=1.15" }, - "platform-dev": [], + "platform-dev": {}, "platform-overrides": { - "php": "8.2.0" + "php": "8.5" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/migrations/Version20260717113247.php b/migrations/Version20260717113247.php new file mode 100644 index 0000000..5f1e83c --- /dev/null +++ b/migrations/Version20260717113247.php @@ -0,0 +1,41 @@ +addSql('ALTER TABLE sis_affiliation CHANGE user_id user_id CHAR(36) DEFAULT NULL, CHANGE event_id event_id CHAR(36) DEFAULT NULL'); + $this->addSql('ALTER TABLE sis_course CHANGE id id CHAR(36) NOT NULL'); + $this->addSql('ALTER TABLE sis_schedule_event CHANGE id id CHAR(36) NOT NULL, CHANGE term_id term_id CHAR(36) DEFAULT NULL, CHANGE course_id course_id CHAR(36) DEFAULT NULL'); + $this->addSql('ALTER TABLE sis_term CHANGE id id CHAR(36) NOT NULL'); + $this->addSql('ALTER TABLE user CHANGE id id CHAR(36) NOT NULL, CHANGE instance_id instance_id CHAR(36) NOT NULL'); + $this->addSql('ALTER TABLE user_changelog CHANGE user_id user_id CHAR(36) DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE sis_affiliation CHANGE user_id user_id CHAR(36) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', CHANGE event_id event_id CHAR(36) DEFAULT NULL COMMENT \'(DC2Type:uuid)\''); + $this->addSql('ALTER TABLE sis_course CHANGE id id CHAR(36) NOT NULL COMMENT \'(DC2Type:uuid)\''); + $this->addSql('ALTER TABLE sis_schedule_event CHANGE id id CHAR(36) NOT NULL COMMENT \'(DC2Type:uuid)\', CHANGE term_id term_id CHAR(36) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', CHANGE course_id course_id CHAR(36) DEFAULT NULL COMMENT \'(DC2Type:uuid)\''); + $this->addSql('ALTER TABLE sis_term CHANGE id id CHAR(36) NOT NULL COMMENT \'(DC2Type:uuid)\''); + $this->addSql('ALTER TABLE user CHANGE id id CHAR(36) NOT NULL COMMENT \'(DC2Type:uuid)\', CHANGE instance_id instance_id CHAR(36) NOT NULL COMMENT \'(DC2Type:uuid)\''); + $this->addSql('ALTER TABLE user_changelog CHANGE user_id user_id CHAR(36) DEFAULT NULL COMMENT \'(DC2Type:uuid)\''); + } +} diff --git a/tests/AccessToken/AccessManager.phpt b/tests/AccessToken/AccessManager.phpt index 50c7e33..71baa3c 100644 --- a/tests/AccessToken/AccessManager.phpt +++ b/tests/AccessToken/AccessManager.phpt @@ -28,7 +28,7 @@ class TestAccessManager extends Tester\TestCase public function testDecodeToken() { $users = Mockery::mock(App\Model\Repository\Users::class); - $verificationKey = "abc"; + $verificationKey = "abc-1234567890-1234567890-1234567890"; $manager = new AccessManager(["verificationKey" => $verificationKey], $users); $payload = ["sub" => "123", "exp" => time() + 123]; $token = JWT::encode($payload, $verificationKey, "HS256"); @@ -40,7 +40,7 @@ class TestAccessManager extends Tester\TestCase public function testDecodeUnverifiedToken() { $users = Mockery::mock(App\Model\Repository\Users::class); - $verificationKey = "abc"; + $verificationKey = "abc-1234567890-1234567890-1234567890"; $manager = new AccessManager(["verificationKey" => $verificationKey], $users); $payload = ["sub" => "123", "exp" => time() + 123]; $token = JWT::encode($payload, $verificationKey . "!!!", "HS256"); @@ -57,7 +57,7 @@ class TestAccessManager extends Tester\TestCase public function testDecodeExpiredToken() { $users = Mockery::mock(App\Model\Repository\Users::class); - $verificationKey = "abc"; + $verificationKey = "abc-1234567890-1234567890-1234567890"; $manager = new AccessManager(["verificationKey" => $verificationKey], $users); $payload = ["sub" => "123", "exp" => time() - 123, "leeway" => 0]; $token = JWT::encode($payload, $verificationKey, "HS256"); @@ -74,7 +74,7 @@ class TestAccessManager extends Tester\TestCase public function testDecodeExpiredTokenWithEnoughLeeway() { $users = Mockery::mock(App\Model\Repository\Users::class); - $verificationKey = "abc"; + $verificationKey = "abc-1234567890-1234567890-1234567890"; $manager = new AccessManager(["verificationKey" => $verificationKey], $users); $payload = ["sub" => "123", "exp" => time() - 5, "leeway" => 10]; $token = JWT::encode($payload, $verificationKey, "HS256"); @@ -84,7 +84,7 @@ class TestAccessManager extends Tester\TestCase public function testDecodeTokenBeforeNBF() { $users = Mockery::mock(App\Model\Repository\Users::class); - $verificationKey = "abc"; + $verificationKey = "abc-1234567890-1234567890-1234567890"; $manager = new AccessManager(["verificationKey" => $verificationKey], $users); $payload = ["sub" => "123", "exp" => time() + 1000, "nbf" => time() + 100]; $token = JWT::encode($payload, $verificationKey, "HS256"); @@ -105,7 +105,7 @@ class TestAccessManager extends Tester\TestCase public function testIssueToken() { $users = Mockery::mock(App\Model\Repository\Users::class); - $verificationKey = "abc"; + $verificationKey = "abc-1234567890-1234567890-1234567890"; $manager = new AccessManager( [ "verificationKey" => $verificationKey, @@ -134,7 +134,7 @@ class TestAccessManager extends Tester\TestCase public function testIssueTokenWithScopes() { $users = Mockery::mock(App\Model\Repository\Users::class); - $verificationKey = "abc"; + $verificationKey = "abc-1234567890-1234567890-1234567890"; $manager = new AccessManager(["verificationKey" => $verificationKey], $users); $user = Mockery::mock(App\Model\Entity\User::class); @@ -149,7 +149,7 @@ class TestAccessManager extends Tester\TestCase public function testIssueTokenWithEffectiveRole() { $users = Mockery::mock(App\Model\Repository\Users::class); - $verificationKey = "abc"; + $verificationKey = "abc-1234567890-1234567890-1234567890"; $manager = new AccessManager(["verificationKey" => $verificationKey], $users); $user = Mockery::mock(App\Model\Entity\User::class); @@ -164,7 +164,7 @@ class TestAccessManager extends Tester\TestCase public function testIssueTokenWithExplicitExpiration() { $users = Mockery::mock(App\Model\Repository\Users::class); - $verificationKey = "abc"; + $verificationKey = "abc-1234567890-1234567890-1234567890"; $manager = new AccessManager(["verificationKey" => $verificationKey], $users); $user = Mockery::mock(App\Model\Entity\User::class); @@ -179,7 +179,7 @@ class TestAccessManager extends Tester\TestCase public function testCustomPayload() { $users = Mockery::mock(App\Model\Repository\Users::class); - $verificationKey = "abc"; + $verificationKey = "abc-1234567890-1234567890-1234567890"; $manager = new AccessManager(["verificationKey" => $verificationKey], $users); $user = Mockery::mock(App\Model\Entity\User::class); diff --git a/tests/Authorizator/MockIdentity.php b/tests/Authorizator/MockIdentity.php index 486caee..45e4d62 100644 --- a/tests/Authorizator/MockIdentity.php +++ b/tests/Authorizator/MockIdentity.php @@ -6,7 +6,7 @@ class MockIdentity extends App\Security\Identity private $scopeRoles; private $effectiveRole; - public function __construct(array $roles, array $scopeRoles = [], string $effectiveRole = null) + public function __construct(array $roles, array $scopeRoles = [], ?string $effectiveRole = null) { parent::__construct(null, null); $this->roles = $roles; @@ -19,12 +19,12 @@ public function getRoles(): array return $this->roles; } - function getScopeRoles() + public function getScopeRoles() { return $this->scopeRoles; } - function getEffectiveRole(): ?string + public function getEffectiveRole(): ?string { return $this->effectiveRole; } diff --git a/tests/base/PresenterTestHelper.php b/tests/base/PresenterTestHelper.php index 1b49334..973c29a 100644 --- a/tests/base/PresenterTestHelper.php +++ b/tests/base/PresenterTestHelper.php @@ -4,6 +4,7 @@ use App\Model\Repository\Users; use App\Security\AccessManager; use App\Security\TokenScope; +use Doctrine\DBAL\DriverManager; use Doctrine\Common\EventManager; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; @@ -16,7 +17,6 @@ use Nette\Utils\FileSystem; use Nette\Utils\Json; use Nette\Utils\JsonException; -use Nettrine\ORM\Decorator\SimpleEntityManagerDecorator; use Symfony\Component\Process\Process; class PresenterTestHelper @@ -33,12 +33,13 @@ private static function createEntityManager( string $dbPath, Configuration $configuration, EventManager $eventManager - ): SimpleEntityManagerDecorator { - return new SimpleEntityManagerDecorator(EntityManager::create( - ["driver" => "pdo_sqlite", "path" => $dbPath], + ): EntityManager { + $connection = DriverManager::getConnection(["driver" => "pdo_sqlite", "path" => $dbPath], $configuration); + return new EntityManager( + $connection, $configuration, $eventManager - )); + ); } public static function replaceService(Container $container, $service, $type = null) @@ -98,7 +99,7 @@ public static function fillDatabase(Container $container) $originalEm->getConfiguration(), $originalEm->getEventManager() ); - static::replaceService($container, $schemaEm, SimpleEntityManagerDecorator::class); + static::replaceService($container, $schemaEm, EntityManagerInterface::class); $schemaTool = new Doctrine\ORM\Tools\SchemaTool($schemaEm); $schemaTool->dropSchema($schemaEm->getMetadataFactory()->getAllMetadata()); @@ -126,7 +127,7 @@ public static function fillDatabase(Container $container) file_put_contents($dumpPath, $sqliteProcess->getOutput()); // Replace the temporary entity manager with the original one - static::replaceService($container, $originalEm, SimpleEntityManagerDecorator::class); + static::replaceService($container, $originalEm, EntityManagerInterface::class); } flock($lockHandle, LOCK_UN); diff --git a/tests/bootstrap.php b/tests/bootstrap.php index b130e32..046db8c 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -6,12 +6,27 @@ Tester\Environment::setup(); +// We have no control over the errors in imported modules (vendor directory), +// so we ignore deprecated warnings from there +$__previousErrorHandler = set_error_handler( + function (int $severity, string $message, string $file, int $line) use (&$__previousErrorHandler) { + if (($severity === E_DEPRECATED || $severity === E_USER_DEPRECATED) && str_contains($file, '/vendor/')) { + return true; + } + return ($__previousErrorHandler) ? $__previousErrorHandler($severity, $message, $file, $line) : false; + } +); + +// and we need to make the TestCase::run ignore deprecated warnings too +// (otherwise it silently tears down the test in the middle, which is hard to debug) +error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED); + $appDir = __DIR__ . '/../app'; -$configurator = new Nette\Configurator(); +$configurator = new Nette\Bootstrap\Configurator(); $configurator->setDebugMode(false); $configurator->setTempDirectory(TEMP_DIR); -$configurator->addParameters(['appDir' => $appDir]); +$configurator->addStaticParameters(['appDir' => $appDir]); $configurator->createRobotLoader() ->addDirectory($appDir) @@ -20,11 +35,6 @@ ->register(); $configurator->addConfig(__DIR__ . '/../app/config/config.neon'); - -if (getenv("TRAVIS")) { - $configurator->addConfig(__DIR__ . '/config.travis.neon'); -} else { - $configurator->addConfig(__DIR__ . '/config.tests.neon'); -} +$configurator->addConfig(__DIR__ . '/config.tests.neon'); return $configurator->createContainer(); diff --git a/tests/config.tests.neon b/tests/config.tests.neon index ffcb770..f5fdc83 100644 --- a/tests/config.tests.neon +++ b/tests/config.tests.neon @@ -1,8 +1,13 @@ +parameters: + accessManager: + verificationKey: "test-key-1234567890-1234567890-1234567890" + nettrine.dbal: - connection: - url: 'sqlite://:memory:' - charset: UTF-8 - driver: pdo_sqlite + connections: + default: + driver: pdo_sqlite + url: "sqlite:///:memory:" + services: cacheStorage: factory: Nette\Caching\Storages\MemoryStorage diff --git a/tests/config.travis.neon b/tests/config.travis.neon deleted file mode 100644 index bb11ac1..0000000 --- a/tests/config.travis.neon +++ /dev/null @@ -1,3 +0,0 @@ -doctrine: - url: 'sqlite://:memory:' - charset: UTF-8 diff --git a/www/.htaccess b/www/.htaccess index da941ae..a343edd 100644 --- a/www/.htaccess +++ b/www/.htaccess @@ -1,29 +1,38 @@ # Apache configuration file (see httpd.apache.org/docs/current/mod/quickreference.html) -# disable directory listing + + # Enable CORS for all origins, headers and methods + Header always set Access-Control-Allow-Origin "*" + Header always set Access-Control-Allow-Headers "*" + Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, PATCH, OPTIONS" + + + # disable directory listing Options -Indexes -# enable cool URL + # enable cool URL, the RewriteBase (and optionally the HTTPS enforcement) must be set in the main Apache configuration file + # (since these things rely on the deployment location) RewriteEngine On - # RewriteBase / - # use HTTPS - # RewriteCond %{HTTPS} !on - # RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] + # RewriteBase / + # RewriteCond %{HTTPS} !on + # RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] - # prevents files starting with dot to be viewed by browser - RewriteRule /\.|^\.(?!well-known/) - [F] + # prevents files starting with dot to be viewed by browser + RewriteRule /\.|^\.(?!well-known/) - [F] + + # front controller + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L] - # front controller - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L] # enable gzip compression + AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json application/xml image/svg+xml diff --git a/www/index.php b/www/index.php index cfcb22e..c580c7c 100644 --- a/www/index.php +++ b/www/index.php @@ -1,14 +1,5 @@