diff --git a/composer.json b/composer.json index 96abe0bed..2f232a488 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,7 @@ "cs:fix": "php-cs-fixer fix", "psalm": "psalm --threads=$(nproc) --no-cache", "psalm:update-baseline": "psalm --threads=$(nproc) --no-cache --update-baseline", - "psalm:fix": "psalm --no-cache --alter --issues=InvalidReturnType,InvalidNullableReturnType,MissingParamType,InvalidFalsableReturnType", + "psalm:fix": "psalm --no-cache --alter --issues=InvalidReturnType,InvalidNullableReturnType,MissingParamType,InvalidFalsableReturnType,MissingOverrideAttribute", "test:unit": "phpunit -c tests/phpunit.xml", "test:unit:coverage": "XDEBUG_MODE=coverage phpunit -c tests/phpunit.xml", "rector": "rector && composer cs:fix", diff --git a/lib/ACL/ACLCacheWrapper.php b/lib/ACL/ACLCacheWrapper.php index 88753736a..4fc35c31e 100644 --- a/lib/ACL/ACLCacheWrapper.php +++ b/lib/ACL/ACLCacheWrapper.php @@ -43,6 +43,7 @@ private function getACLPermissionsForPath(string $path, array $rules = []): int return $canRead ? $permissions : 0; } + #[\Override] protected function formatCacheEntry($entry, array $rules = []): ICacheEntry|false { if (isset($entry['permissions'])) { $entry['scan_permissions'] ??= $entry['permissions']; @@ -55,6 +56,7 @@ protected function formatCacheEntry($entry, array $rules = []): ICacheEntry|fals return $entry; } + #[\Override] public function getFolderContentsById($fileId): array { $results = $this->getCache()->getFolderContentsById($fileId); $rules = $this->preloadEntries($results); @@ -62,6 +64,7 @@ public function getFolderContentsById($fileId): array { return array_filter(array_map(fn (ICacheEntry $entry): ICacheEntry|false => $this->formatCacheEntry($entry, $rules), $results)); } + #[\Override] public function search($pattern): array { $results = $this->getCache()->search($pattern); $this->preloadEntries($results); @@ -69,6 +72,7 @@ public function search($pattern): array { return array_filter(array_map($this->formatCacheEntry(...), $results)); } + #[\Override] public function searchByMime($mimetype): array { $results = $this->getCache()->searchByMime($mimetype); $this->preloadEntries($results); @@ -76,6 +80,7 @@ public function searchByMime($mimetype): array { return array_filter(array_map($this->formatCacheEntry(...), $results)); } + #[\Override] public function searchQuery(ISearchQuery $query): array { $results = $this->getCache()->searchQuery($query); $this->preloadEntries($results); diff --git a/lib/ACL/ACLStorageWrapper.php b/lib/ACL/ACLStorageWrapper.php index 976fca1f7..525303e1a 100644 --- a/lib/ACL/ACLStorageWrapper.php +++ b/lib/ACL/ACLStorageWrapper.php @@ -47,32 +47,39 @@ private function checkPermissions(string $path, int $permissions): bool { return ($this->getACLPermissionsForPath($path) & $permissions) === $permissions; } + #[\Override] public function isReadable(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_READ) && parent::isReadable($path); } + #[\Override] public function isUpdatable(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_UPDATE) && parent::isUpdatable($path); } + #[\Override] public function isCreatable(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_CREATE) && parent::isCreatable($path); } + #[\Override] public function isDeletable(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_DELETE) && $this->canDeleteTree($path) && parent::isDeletable($path); } + #[\Override] public function isSharable(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_SHARE) && parent::isSharable($path); } + #[\Override] public function getPermissions(string $path): int { return $this->storage->getPermissions($path) & $this->getACLPermissionsForPath($path); } + #[\Override] public function rename(string $source, string $target): bool { if (str_starts_with($source, $target)) { $part = substr($source, strlen($target)); @@ -100,6 +107,7 @@ public function rename(string $source, string $target): bool { && parent::rename($source, $target); } + #[\Override] public function opendir(string $path) { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -122,6 +130,7 @@ public function opendir(string $path) { return IteratorDirectory::wrap($items); } + #[\Override] public function copy(string $source, string $target): bool { $permissions = $this->file_exists($target) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE; return $this->checkPermissions($target, $permissions) @@ -129,21 +138,25 @@ public function copy(string $source, string $target): bool { && parent::copy($source, $target); } + #[\Override] public function touch(string $path, ?int $mtime = null): bool { $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE; return $this->checkPermissions($path, $permissions) && parent::touch($path, $mtime); } + #[\Override] public function mkdir(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_CREATE) && parent::mkdir($path); } + #[\Override] public function rmdir(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_DELETE) && $this->canDeleteTree($path) && parent::rmdir($path); } + #[\Override] public function unlink(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_DELETE) && $this->canDeleteTree($path) @@ -158,11 +171,13 @@ private function canDeleteTree(string $path): int { return $this->aclManager->getPermissionsForTree($this->folderId, $this->storageId, $path) & Constants::PERMISSION_DELETE; } + #[\Override] public function file_put_contents(string $path, mixed $data): int|float|false { $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE; return $this->checkPermissions($path, $permissions) ? parent::file_put_contents($path, $data) : false; } + #[\Override] public function fopen(string $path, string $mode) { if ($mode === 'r' or $mode === 'rb') { $permissions = Constants::PERMISSION_READ; @@ -173,6 +188,7 @@ public function fopen(string $path, string $mode) { return $this->checkPermissions($path, $permissions) ? parent::fopen($path, $mode) : false; } + #[\Override] public function writeStream(string $path, $stream, ?int $size = null): int { $permissions = $this->file_exists($path) ? Constants::PERMISSION_UPDATE : Constants::PERMISSION_CREATE; return $this->checkPermissions($path, $permissions) ? parent::writeStream($path, $stream, $size) : 0; @@ -181,6 +197,7 @@ public function writeStream(string $path, $stream, ?int $size = null): int { /** * @inheritDoc */ + #[\Override] public function getCache(string $path = '', ?IStorage $storage = null): ICache { if (!$storage) { $storage = $this; @@ -191,6 +208,7 @@ public function getCache(string $path = '', ?IStorage $storage = null): ICache { return new ACLCacheWrapper($sourceCache, $this->aclManager, $this->folderId, $this->inShare); } + #[\Override] public function getMetaData(string $path): ?array { $data = parent::getMetaData($path); @@ -205,6 +223,7 @@ public function getMetaData(string $path): ?array { /** * @inheritDoc */ + #[\Override] public function getScanner(string $path = '', ?IStorage $storage = null): IScanner { if (!$storage) { $storage = $this->storage; @@ -213,16 +232,19 @@ public function getScanner(string $path = '', ?IStorage $storage = null): IScann return parent::getScanner($path, $storage); } + #[\Override] public function is_dir(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_READ) && parent::is_dir($path); } + #[\Override] public function is_file(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_READ) && parent::is_file($path); } + #[\Override] public function stat(string $path): array|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -231,6 +253,7 @@ public function stat(string $path): array|false { return parent::stat($path); } + #[\Override] public function filetype(string $path): string|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -239,6 +262,7 @@ public function filetype(string $path): string|false { return parent::filetype($path); } + #[\Override] public function filesize(string $path): false|int|float { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -247,11 +271,13 @@ public function filesize(string $path): false|int|float { return parent::filesize($path); } + #[\Override] public function file_exists(string $path): bool { return $this->checkPermissions($path, Constants::PERMISSION_READ) && parent::file_exists($path); } + #[\Override] public function filemtime(string $path): int|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -260,6 +286,7 @@ public function filemtime(string $path): int|false { return parent::filemtime($path); } + #[\Override] public function file_get_contents(string $path): string|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -268,6 +295,7 @@ public function file_get_contents(string $path): string|false { return parent::file_get_contents($path); } + #[\Override] public function getMimeType(string $path): string|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -276,6 +304,7 @@ public function getMimeType(string $path): string|false { return parent::getMimeType($path); } + #[\Override] public function hash(string $type, string $path, bool $raw = false): string|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -284,6 +313,7 @@ public function hash(string $type, string $path, bool $raw = false): string|fals return parent::hash($type, $path, $raw); } + #[\Override] public function getETag(string $path): string|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -292,6 +322,7 @@ public function getETag(string $path): string|false { return parent::getETag($path); } + #[\Override] public function getDirectDownload(string $path): array|false { if (!$this->checkPermissions($path, Constants::PERMISSION_READ)) { return false; @@ -300,6 +331,7 @@ public function getDirectDownload(string $path): array|false { return parent::getDirectDownload($path); } + #[\Override] public function getDirectoryContent(string $directory): \Traversable { $content = $this->getWrapperStorage()->getDirectoryContent($directory); foreach ($content as $data) { diff --git a/lib/ACL/Rule.php b/lib/ACL/Rule.php index 528151e5c..c82613466 100644 --- a/lib/ACL/Rule.php +++ b/lib/ACL/Rule.php @@ -95,6 +95,7 @@ public function applyDenyPermissions(int $permissions): int { return $permissions & $denyMask; } + #[\Override] public function xmlSerialize(Writer $writer): void { $data = [ self::ACL => [ @@ -108,6 +109,7 @@ public function xmlSerialize(Writer $writer): void { $writer->write($data); } + #[\Override] public function jsonSerialize(): array { return [ 'mapping' => [ @@ -119,6 +121,7 @@ public function jsonSerialize(): array { ]; } + #[\Override] public static function xmlDeserialize(Reader $reader): Rule { $elements = \Sabre\Xml\Deserializer\keyValue($reader); diff --git a/lib/ACL/UserMapping/UserMapping.php b/lib/ACL/UserMapping/UserMapping.php index 74858b110..2c6f632bb 100644 --- a/lib/ACL/UserMapping/UserMapping.php +++ b/lib/ACL/UserMapping/UserMapping.php @@ -22,18 +22,22 @@ public function __construct( $this->displayName = $displayName ?? $id; } + #[\Override] public function getType(): string { return $this->type; } + #[\Override] public function getId(): string { return $this->id; } + #[\Override] public function getDisplayName(): string { return $this->displayName; } + #[\Override] public function getKey(): string { return $this->getType() . ':' . $this->getId(); } diff --git a/lib/ACL/UserMapping/UserMappingManager.php b/lib/ACL/UserMapping/UserMappingManager.php index b2cc2bbaa..22cfc1294 100644 --- a/lib/ACL/UserMapping/UserMappingManager.php +++ b/lib/ACL/UserMapping/UserMappingManager.php @@ -29,6 +29,7 @@ public function __construct( ) { } + #[\Override] public function getMappingsForUser(IUser $user, bool $userAssignable = true): array { $groupMappings = array_values(array_map(fn (IGroup $group): UserMapping => new UserMapping('group', $group->getGID(), $group->getDisplayName()), $this->groupManager->getUserGroups($user))); $circleMappings = array_values(array_map(fn (Circle $circle): UserMapping => new UserMapping('circle', $circle->getSingleId(), $circle->getDisplayName()), $this->getUserCircles($user->getUID()))); @@ -38,6 +39,7 @@ public function getMappingsForUser(IUser $user, bool $userAssignable = true): ar ], $groupMappings, $circleMappings); } + #[\Override] public function mappingFromId(string $type, string $id): ?IUserMapping { switch ($type) { case 'group': @@ -115,6 +117,7 @@ public function getCirclesManager(): ?CirclesManager { } } + #[\Override] public function userInMappings(IUser $user, array $mappings): bool { foreach ($mappings as $mapping) { if ($mapping->getType() === 'user' && $mapping->getId() === $user->getUID()) { diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index e2a10e475..d963acb7b 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -68,6 +68,7 @@ public function __construct(array $urlParams = []) { 'workspace' ]; + #[\Override] public function register(IRegistrationContext $context): void { /** Register $principalBackend for the DAV collection */ $context->registerServiceAlias('principalBackend', Principal::class); @@ -184,6 +185,7 @@ public function register(IRegistrationContext $context): void { $context->registerMiddleware(AuthorizedAdminSettingMiddleware::class); } + #[\Override] public function boot(IBootContext $context): void { $context->injectFn(function (IMountProviderCollection $mountProviderCollection, CacheListener $cacheListener, IEventDispatcher $eventDispatcher): void { $mountProviderCollection->registerProvider(Server::get(MountProvider::class)); diff --git a/lib/AppInfo/Capabilities.php b/lib/AppInfo/Capabilities.php index 6369e58cd..d4bdacda9 100644 --- a/lib/AppInfo/Capabilities.php +++ b/lib/AppInfo/Capabilities.php @@ -29,6 +29,7 @@ public function __construct( * }, * } */ + #[\Override] public function getCapabilities(): array { $user = $this->userSession->getUser(); if (!$user) { diff --git a/lib/AuthorizedAdminSettingMiddleware.php b/lib/AuthorizedAdminSettingMiddleware.php index 751de7682..30464e726 100644 --- a/lib/AuthorizedAdminSettingMiddleware.php +++ b/lib/AuthorizedAdminSettingMiddleware.php @@ -30,6 +30,7 @@ public function __construct( /** * Throws an error when the user is not allowed to use the app's APIs */ + #[\Override] public function beforeController(Controller $controller, string $methodName): void { $method = new ReflectionMethod($controller, $methodName); if ($method->getAttributes(RequireGroupFolderAdmin::class) !== [] && !$this->delegatedService->hasApiAccess()) { @@ -37,6 +38,7 @@ public function beforeController(Controller $controller, string $methodName): vo } } + #[\Override] public function afterException(Controller $controller, string $methodName, Exception $exception): Response { /** @var Http::STATUS_* $code */ $code = $exception->getCode(); diff --git a/lib/BackgroundJob/ExpireGroupPlaceholder.php b/lib/BackgroundJob/ExpireGroupPlaceholder.php index 907a54af5..1031a8cbf 100644 --- a/lib/BackgroundJob/ExpireGroupPlaceholder.php +++ b/lib/BackgroundJob/ExpireGroupPlaceholder.php @@ -18,6 +18,7 @@ public function __construct(ITimeFactory $timeFactory) { $this->setInterval(60 * 60 * 99999999); } + #[\Override] protected function run(mixed $argument): void { // noop } diff --git a/lib/BackgroundJob/ExpireGroupTrash.php b/lib/BackgroundJob/ExpireGroupTrash.php index 8d7732fcc..b03e4fe47 100644 --- a/lib/BackgroundJob/ExpireGroupTrash.php +++ b/lib/BackgroundJob/ExpireGroupTrash.php @@ -26,6 +26,7 @@ public function __construct( $this->setInterval(60 * 60); } + #[\Override] protected function run(mixed $argument): void { $backgroundJob = $this->config->getValueString('files_trashbin', 'background_job_expire_trash', 'yes'); if ($backgroundJob === 'no') { diff --git a/lib/BackgroundJob/ExpireGroupVersions.php b/lib/BackgroundJob/ExpireGroupVersions.php index 304e58497..7a75e5d7b 100644 --- a/lib/BackgroundJob/ExpireGroupVersions.php +++ b/lib/BackgroundJob/ExpireGroupVersions.php @@ -38,6 +38,7 @@ public function __construct( * Expiring groupfolder versions can be quite expensive. * We need to limit the amount of folders we expire per run. */ + #[\Override] protected function run(mixed $argument): void { $lastFolder = $this->appConfig->getValueInt(Application::APP_ID, 'cron_last_folder_index', 0); $folders = $this->folderManager->getAllFoldersWithSize(); diff --git a/lib/CacheListener.php b/lib/CacheListener.php index 04d5d6394..a9fa0e081 100644 --- a/lib/CacheListener.php +++ b/lib/CacheListener.php @@ -33,7 +33,9 @@ public function onCacheEvent(ICacheEvent $event): void { if (!$storage->instanceOfStorage(Jail::class)) { return; } - if ($path = $storage->getJailedPath($event->getPath())) { + /** @var Jail $storage */ + $path = $storage->getJailedPath($event->getPath()); + if ($path !== null) { $event->setPath($path); } } diff --git a/lib/Command/Create.php b/lib/Command/Create.php index 8d88a7420..b941e09bd 100644 --- a/lib/Command/Create.php +++ b/lib/Command/Create.php @@ -22,6 +22,7 @@ public function __construct( parent::__construct(); } + #[\Override] protected function configure(): void { $this ->setName('groupfolders:create') @@ -32,6 +33,7 @@ protected function configure(): void { parent::configure(); } + #[\Override] protected function execute(InputInterface $input, OutputInterface $output): int { $name = trim((string)$input->getArgument('name')); diff --git a/lib/Command/ExpireGroup/ExpireGroupBase.php b/lib/Command/ExpireGroup/ExpireGroupBase.php index caad5f2bf..1abd9aacc 100644 --- a/lib/Command/ExpireGroup/ExpireGroupBase.php +++ b/lib/Command/ExpireGroup/ExpireGroupBase.php @@ -20,6 +20,7 @@ public function __construct() { parent::__construct(); } + #[\Override] protected function configure(): void { $this ->setName('groupfolders:expire') @@ -27,6 +28,7 @@ protected function configure(): void { parent::configure(); } + #[\Override] protected function execute(InputInterface $input, OutputInterface $output): int { $output->writeln('groupfolder expiration handling is currently disabled because there is nothing to expire. Enable the "Delete Files" or/and "Versions" app to enable this feature.'); return 0; diff --git a/lib/Command/ExpireGroupVersionsPlaceholder.php b/lib/Command/ExpireGroupVersionsPlaceholder.php index ec9eea4b6..51022254f 100644 --- a/lib/Command/ExpireGroupVersionsPlaceholder.php +++ b/lib/Command/ExpireGroupVersionsPlaceholder.php @@ -13,6 +13,7 @@ use Symfony\Component\Console\Output\OutputInterface; class ExpireGroupVersionsPlaceholder extends Base { + #[\Override] protected function configure(): void { $this ->setName('groupfolders:expire') @@ -20,6 +21,7 @@ protected function configure(): void { parent::configure(); } + #[\Override] protected function execute(InputInterface $input, OutputInterface $output): int { $output->writeln('Team folder version handling is only supported with Nextcloud 15 and up'); return 0; diff --git a/lib/Command/ListCommand.php b/lib/Command/ListCommand.php index 2250975bb..d24bdf3c9 100644 --- a/lib/Command/ListCommand.php +++ b/lib/Command/ListCommand.php @@ -38,6 +38,7 @@ public function __construct( parent::__construct(); } + #[\Override] protected function configure(): void { $this ->setName('groupfolders:list') @@ -46,6 +47,7 @@ protected function configure(): void { parent::configure(); } + #[\Override] protected function execute(InputInterface $input, OutputInterface $output): int { $userId = $input->getOption('user'); $groups = $this->groupManager->search(''); diff --git a/lib/Command/Trashbin/Cleanup.php b/lib/Command/Trashbin/Cleanup.php index 108b0360e..3ba3c936d 100644 --- a/lib/Command/Trashbin/Cleanup.php +++ b/lib/Command/Trashbin/Cleanup.php @@ -35,6 +35,7 @@ public function __construct( } } + #[\Override] protected function configure(): void { $this ->setName('groupfolders:trashbin:cleanup') @@ -44,6 +45,7 @@ protected function configure(): void { parent::configure(); } + #[\Override] protected function execute(InputInterface $input, OutputInterface $output): int { if (!$this->trashBackend) { $output->writeln('files_trashbin is disabled: Team folders trashbin is not available'); diff --git a/lib/DAV/ACLPlugin.php b/lib/DAV/ACLPlugin.php index 0fa0851bc..da5f1f6d4 100644 --- a/lib/DAV/ACLPlugin.php +++ b/lib/DAV/ACLPlugin.php @@ -62,6 +62,7 @@ private function isAdmin(IUser $user, string $path): bool { return $this->canManageACL[$folderId]; } + #[\Override] public function initialize(Server $server): void { $this->server = $server; $this->user = $this->userSession->getUser(); diff --git a/lib/DAV/GroupFoldersHome.php b/lib/DAV/GroupFoldersHome.php index 72c92e1f9..63b80f1f0 100644 --- a/lib/DAV/GroupFoldersHome.php +++ b/lib/DAV/GroupFoldersHome.php @@ -27,23 +27,28 @@ public function __construct( ) { } + #[\Override] public function delete(): never { throw new Forbidden(); } + #[\Override] public function getName(): string { [, $name] = \Sabre\Uri\split($this->principalInfo['uri']); return $name; } + #[\Override] public function setName($name): never { throw new Forbidden('Permission denied to rename this folder'); } + #[\Override] public function createFile($name, $data = null): never { throw new Forbidden('Not allowed to create files in this folder'); } + #[\Override] public function createDirectory($name): never { throw new Forbidden('Permission denied to create folders in this folder'); } @@ -76,6 +81,7 @@ private function getDirectoryForFolder(FolderDefinition $folder): GroupFolderNod return new GroupFolderNode($view, $node, $folder->id); } + #[\Override] public function getChild($name): GroupFolderNode { $folder = $this->getFolder($name); if ($folder) { @@ -88,6 +94,7 @@ public function getChild($name): GroupFolderNode { /** * @return GroupFolderNode[] */ + #[\Override] public function getChildren(): array { $storageId = $this->rootFolder->getMountPoint()->getNumericStorageId(); if ($storageId === null) { @@ -102,10 +109,12 @@ public function getChildren(): array { return array_map($this->getDirectoryForFolder(...), $folders); } + #[\Override] public function childExists($name): bool { return $this->getFolder($name) !== null; } + #[\Override] public function getLastModified(): int { return 0; } diff --git a/lib/DAV/PropFindPlugin.php b/lib/DAV/PropFindPlugin.php index 630a848ac..0444bc6f4 100644 --- a/lib/DAV/PropFindPlugin.php +++ b/lib/DAV/PropFindPlugin.php @@ -32,10 +32,12 @@ public function __construct(IRootFolder $rootFolder, IUserSession $userSession) } + #[\Override] public function getPluginName(): string { return 'groupFoldersDavPlugin'; } + #[\Override] public function initialize(Server $server): void { $server->on('propFind', $this->propFind(...)); } diff --git a/lib/DAV/RootCollection.php b/lib/DAV/RootCollection.php index 1861870a0..6b814c5d9 100644 --- a/lib/DAV/RootCollection.php +++ b/lib/DAV/RootCollection.php @@ -31,6 +31,7 @@ public function __construct( * at least contain a uri item. Other properties may or may not be * supplied by the authentication backend. */ + #[\Override] public function getChildForPrincipal(array $principalInfo): GroupFoldersHome { [, $name] = \Sabre\Uri\split($principalInfo['uri']); $user = $this->userSession->getUser(); @@ -41,6 +42,7 @@ public function getChildForPrincipal(array $principalInfo): GroupFoldersHome { return new GroupFoldersHome($principalInfo, $this->folderManager, $this->rootFolder, $user); } + #[\Override] public function getName(): string { return 'groupfolders'; } diff --git a/lib/Folder/FolderWithMappingsAndCache.php b/lib/Folder/FolderWithMappingsAndCache.php index 90a2eba88..025f6206f 100644 --- a/lib/Folder/FolderWithMappingsAndCache.php +++ b/lib/Folder/FolderWithMappingsAndCache.php @@ -56,6 +56,7 @@ public static function fromFolderWithMapping(FolderDefinitionWithMappings $folde ); } + #[\Override] public function toArray(): array { return [ 'id' => $this->id, diff --git a/lib/Listeners/CircleDestroyedEventListener.php b/lib/Listeners/CircleDestroyedEventListener.php index f1ae1a660..88c9236bd 100644 --- a/lib/Listeners/CircleDestroyedEventListener.php +++ b/lib/Listeners/CircleDestroyedEventListener.php @@ -24,6 +24,7 @@ public function __construct( } + #[\Override] public function handle(Event $event): void { if (!$event instanceof CircleDestroyedEvent) { return; diff --git a/lib/Listeners/LoadAdditionalScriptsListener.php b/lib/Listeners/LoadAdditionalScriptsListener.php index f79dd18a5..b96e6b7ae 100644 --- a/lib/Listeners/LoadAdditionalScriptsListener.php +++ b/lib/Listeners/LoadAdditionalScriptsListener.php @@ -18,6 +18,7 @@ * @template-implements IEventListener */ class LoadAdditionalScriptsListener implements IEventListener { + #[\Override] public function handle(Event $event): void { if (!$event instanceof LoadAdditionalScriptsEvent && !$event instanceof BeforeTemplateRenderedEvent) { return; diff --git a/lib/Listeners/NodeRenamedListener.php b/lib/Listeners/NodeRenamedListener.php index c692d1f20..7727c50f8 100644 --- a/lib/Listeners/NodeRenamedListener.php +++ b/lib/Listeners/NodeRenamedListener.php @@ -25,6 +25,7 @@ public function __construct( ) { } + #[\Override] public function handle(Event $event): void { if (!$event instanceof NodeRenamedEvent) { return; diff --git a/lib/Migration/Version1000000Date20210216085047.php b/lib/Migration/Version1000000Date20210216085047.php index a919c07d9..76f9a47bd 100644 --- a/lib/Migration/Version1000000Date20210216085047.php +++ b/lib/Migration/Version1000000Date20210216085047.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version1000000Date20210216085047 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version102020Date20180806161449.php b/lib/Migration/Version102020Date20180806161449.php index 0b9933505..9804184d1 100644 --- a/lib/Migration/Version102020Date20180806161449.php +++ b/lib/Migration/Version102020Date20180806161449.php @@ -14,6 +14,7 @@ use OCP\Migration\SimpleMigrationStep; class Version102020Date20180806161449 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version103000Date20180806161724.php b/lib/Migration/Version103000Date20180806161724.php index cd772bd5c..7221ff465 100644 --- a/lib/Migration/Version103000Date20180806161724.php +++ b/lib/Migration/Version103000Date20180806161724.php @@ -21,6 +21,7 @@ public function __construct( ) { } + #[\Override] public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array $options): void { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); @@ -35,6 +36,7 @@ public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array } } + #[\Override] public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); @@ -71,6 +73,7 @@ public function changeSchema(IOutput $output, \Closure $schemaClosure, array $op return $schema; } + #[\Override] public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options): void { if (count($this->applicableData)) { $query = $this->connection->getQueryBuilder(); diff --git a/lib/Migration/Version104000Date20180918132853.php b/lib/Migration/Version104000Date20180918132853.php index 0c772bbab..69784cf2e 100644 --- a/lib/Migration/Version104000Date20180918132853.php +++ b/lib/Migration/Version104000Date20180918132853.php @@ -13,14 +13,17 @@ use OCP\Migration\SimpleMigrationStep; class Version104000Date20180918132853 extends SimpleMigrationStep { + #[\Override] public function name(): string { return 'Add group_folders_trash table'; } + #[\Override] public function description(): string { return 'Adds table to store trashbin information for Team folders'; } + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version1401000Date20230426112001.php b/lib/Migration/Version1401000Date20230426112001.php index dfd3bb574..99b86ab9e 100644 --- a/lib/Migration/Version1401000Date20230426112001.php +++ b/lib/Migration/Version1401000Date20230426112001.php @@ -14,6 +14,7 @@ use OCP\Migration\SimpleMigrationStep; class Version1401000Date20230426112001 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version1401000Date20230426112002.php b/lib/Migration/Version1401000Date20230426112002.php index cac09b4f0..2d4aa129b 100644 --- a/lib/Migration/Version1401000Date20230426112002.php +++ b/lib/Migration/Version1401000Date20230426112002.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version1401000Date20230426112002 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version16000Date20230821085801.php b/lib/Migration/Version16000Date20230821085801.php index 9af0e940c..c652456aa 100644 --- a/lib/Migration/Version16000Date20230821085801.php +++ b/lib/Migration/Version16000Date20230821085801.php @@ -16,6 +16,7 @@ use OCP\Migration\SimpleMigrationStep; class Version16000Date20230821085801 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version19000Date20240903062631.php b/lib/Migration/Version19000Date20240903062631.php index 0e397385d..d1e69a9de 100644 --- a/lib/Migration/Version19000Date20240903062631.php +++ b/lib/Migration/Version19000Date20240903062631.php @@ -15,6 +15,7 @@ use OCP\Migration\SimpleMigrationStep; class Version19000Date20240903062631 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version19000Date20241029123147.php b/lib/Migration/Version19000Date20241029123147.php index 00348cea0..ca7e49546 100644 --- a/lib/Migration/Version19000Date20241029123147.php +++ b/lib/Migration/Version19000Date20241029123147.php @@ -18,6 +18,7 @@ class Version19000Date20241029123147 extends SimpleMigrationStep { /** * @param Closure(): ISchemaWrapper $schemaClosure */ + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version2000000Date20250128110101.php b/lib/Migration/Version2000000Date20250128110101.php index 3d46ca898..94c7bd696 100644 --- a/lib/Migration/Version2000000Date20250128110101.php +++ b/lib/Migration/Version2000000Date20250128110101.php @@ -16,6 +16,7 @@ #[AddIndex('group_folders_groups', IndexType::INDEX, 'adding index on single circle id for better select')] class Version2000000Date20250128110101 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version201000Date20190111132839.php b/lib/Migration/Version201000Date20190111132839.php index e148b37df..080c933b1 100644 --- a/lib/Migration/Version201000Date20190111132839.php +++ b/lib/Migration/Version201000Date20190111132839.php @@ -13,14 +13,17 @@ use OCP\Migration\SimpleMigrationStep; class Version201000Date20190111132839 extends SimpleMigrationStep { + #[\Override] public function name(): string { return 'Add groupfolder_acl table'; } + #[\Override] public function description(): string { return 'Adds table to store ACL information for Team folders'; } + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version201000Date20190212150323.php b/lib/Migration/Version201000Date20190212150323.php index 41fdb7e3e..6cefccfc2 100644 --- a/lib/Migration/Version201000Date20190212150323.php +++ b/lib/Migration/Version201000Date20190212150323.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version201000Date20190212150323 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version300000Date20240905185515.php b/lib/Migration/Version300000Date20240905185515.php index e1cb6e42d..e1b9c259f 100644 --- a/lib/Migration/Version300000Date20240905185515.php +++ b/lib/Migration/Version300000Date20240905185515.php @@ -19,6 +19,7 @@ * Adds the delete_by column to the group_folders_trash table */ class Version300000Date20240905185515 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version401001Date20190715092137.php b/lib/Migration/Version401001Date20190715092137.php index 7d5ee7166..eb71d647c 100644 --- a/lib/Migration/Version401001Date20190715092137.php +++ b/lib/Migration/Version401001Date20190715092137.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version401001Date20190715092137 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version501000Date20190927102434.php b/lib/Migration/Version501000Date20190927102434.php index a5c09cefe..7bdd77348 100644 --- a/lib/Migration/Version501000Date20190927102434.php +++ b/lib/Migration/Version501000Date20190927102434.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version501000Date20190927102434 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version501000Date20191218182434.php b/lib/Migration/Version501000Date20191218182434.php index 0fbe3a33b..88c38fdee 100644 --- a/lib/Migration/Version501000Date20191218182434.php +++ b/lib/Migration/Version501000Date20191218182434.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version501000Date20191218182434 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/Version802000Date20201119112624.php b/lib/Migration/Version802000Date20201119112624.php index 95105b54f..4d4b1d407 100644 --- a/lib/Migration/Version802000Date20201119112624.php +++ b/lib/Migration/Version802000Date20201119112624.php @@ -13,6 +13,7 @@ use OCP\Migration\SimpleMigrationStep; class Version802000Date20201119112624 extends SimpleMigrationStep { + #[\Override] public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { /** @var ISchemaWrapper $schema */ $schema = $schemaClosure(); diff --git a/lib/Migration/WrongDefaultQuotaRepairStep.php b/lib/Migration/WrongDefaultQuotaRepairStep.php index 1048eef63..97e9ad787 100644 --- a/lib/Migration/WrongDefaultQuotaRepairStep.php +++ b/lib/Migration/WrongDefaultQuotaRepairStep.php @@ -21,6 +21,7 @@ public function __construct( } + #[\Override] public function getName(): string { return 'Adjust Groupfolders with wrong default quotas'; } @@ -28,6 +29,7 @@ public function getName(): string { /** * @throws Exception */ + #[\Override] public function run(IOutput $output): void { foreach ($this->manager->getAllFolders() as $id => $folder) { $quota = $folder->quota; diff --git a/lib/Mount/CacheRootPermissionsMask.php b/lib/Mount/CacheRootPermissionsMask.php index c85f2d30a..3d0fc95d4 100644 --- a/lib/Mount/CacheRootPermissionsMask.php +++ b/lib/Mount/CacheRootPermissionsMask.php @@ -21,6 +21,7 @@ public function __construct( parent::__construct($cache); } + #[\Override] protected function formatCacheEntry($entry): ICacheEntry|false { $isRoot = $entry->getId() === $this->rootId; if (isset($entry['permissions']) && $isRoot) { diff --git a/lib/Mount/GroupFolderEncryptionJail.php b/lib/Mount/GroupFolderEncryptionJail.php index 295bb6cf3..96e7a24a3 100644 --- a/lib/Mount/GroupFolderEncryptionJail.php +++ b/lib/Mount/GroupFolderEncryptionJail.php @@ -23,6 +23,7 @@ class GroupFolderEncryptionJail extends Jail { * @param string $path * @param ?IStorage $storage */ + #[\Override] public function getCache($path = '', $storage = null): ICache { if (!$storage) { $storage = $this->getWrapperStorage(); diff --git a/lib/Mount/GroupFolderStorage.php b/lib/Mount/GroupFolderStorage.php index 5c5b28a56..b84690ae6 100644 --- a/lib/Mount/GroupFolderStorage.php +++ b/lib/Mount/GroupFolderStorage.php @@ -45,6 +45,7 @@ public function getFolder(): FolderDefinition { return $this->folder; } + #[\Override] public function getOwner(string $path): string|false { if ($this->mountOwner !== null) { return $this->mountOwner->getUID(); @@ -65,6 +66,7 @@ public function getUser(): ?IUser { /** * @inheritDoc */ + #[\Override] public function getCache(string $path = '', ?IStorage $storage = null): ICache { if ($this->cache) { return $this->cache; @@ -88,6 +90,7 @@ public function getCache(string $path = '', ?IStorage $storage = null): ICache { * @param string $path * @param ?IStorage $storage */ + #[\Override] public function getScanner($path = '', $storage = null): IScanner { /** @var ?\OC\Files\Storage\Wrapper\Wrapper $storage */ if (!$storage) { @@ -103,6 +106,7 @@ public function getScanner($path = '', $storage = null): IScanner { return $storage->scanner; } + #[\Override] protected function shouldApplyQuota(string $path): bool { return true; } diff --git a/lib/Mount/GroupMountPoint.php b/lib/Mount/GroupMountPoint.php index fc98ded24..b27d15eff 100644 --- a/lib/Mount/GroupMountPoint.php +++ b/lib/Mount/GroupMountPoint.php @@ -33,6 +33,7 @@ public function __construct( $this->rootId = $rootId; } + #[\Override] public function getMountType(): string { return 'group'; } diff --git a/lib/Mount/MountProvider.php b/lib/Mount/MountProvider.php index 10c186168..82c62b77f 100644 --- a/lib/Mount/MountProvider.php +++ b/lib/Mount/MountProvider.php @@ -48,6 +48,7 @@ public function getFoldersForUser(IUser $user): array { return $this->folderManager->getFoldersForUser($user); } + #[\Override] public function getMountsForUser(IUser $user, IStorageFactory $loader): array { $folders = $this->getFoldersForUser($user); diff --git a/lib/Mount/RootEntryCache.php b/lib/Mount/RootEntryCache.php index 9a83d6aba..675d291f2 100644 --- a/lib/Mount/RootEntryCache.php +++ b/lib/Mount/RootEntryCache.php @@ -20,6 +20,7 @@ public function __construct( parent::__construct($cache); } + #[\Override] public function get($file): ICacheEntry|false { if ($file === '' && $this->rootEntry) { return $this->rootEntry; @@ -28,6 +29,7 @@ public function get($file): ICacheEntry|false { return parent::get($file); } + #[\Override] public function getId($file): int { if ($file === '' && $this->rootEntry) { return $this->rootEntry->getId(); @@ -36,11 +38,13 @@ public function getId($file): int { return parent::getId($file); } + #[\Override] public function update($id, array $data): void { $this->rootEntry = null; parent::update($id, $data); } + #[\Override] public function insert($file, array $data): int { $this->rootEntry = null; return parent::insert($file, $data); diff --git a/lib/Mount/RootPermissionsMask.php b/lib/Mount/RootPermissionsMask.php index f01a3603a..7c3d9aae7 100644 --- a/lib/Mount/RootPermissionsMask.php +++ b/lib/Mount/RootPermissionsMask.php @@ -40,6 +40,7 @@ private function checkMask(int $permissions): bool { return ($this->mask & $permissions) === $permissions; } + #[\Override] public function isUpdatable(string $path): bool { if ($path === '') { return $this->checkMask(Constants::PERMISSION_UPDATE) and parent::isUpdatable($path); @@ -48,6 +49,7 @@ public function isUpdatable(string $path): bool { } } + #[\Override] public function isCreatable(string $path): bool { if ($path === '') { return $this->checkMask(Constants::PERMISSION_CREATE) and parent::isCreatable($path); @@ -56,6 +58,7 @@ public function isCreatable(string $path): bool { } } + #[\Override] public function isDeletable(string $path): bool { if ($path === '') { return $this->checkMask(Constants::PERMISSION_DELETE) and parent::isDeletable($path); @@ -64,6 +67,7 @@ public function isDeletable(string $path): bool { } } + #[\Override] public function isSharable(string $path): bool { if ($path === '') { return $this->checkMask(Constants::PERMISSION_SHARE) and parent::isSharable($path); @@ -72,6 +76,7 @@ public function isSharable(string $path): bool { } } + #[\Override] public function getPermissions(string $path): int { if ($path === '') { return $this->storage->getPermissions($path) & $this->mask; @@ -80,6 +85,7 @@ public function getPermissions(string $path): int { } } + #[\Override] public function getMetaData(string $path): ?array { $data = parent::getMetaData($path); @@ -91,6 +97,7 @@ public function getMetaData(string $path): ?array { return $data; } + #[\Override] public function getCache(string $path = '', ?IStorage $storage = null): ICache { if (!$storage) { $storage = $this; diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php index d7307f209..262c465bc 100644 --- a/lib/Settings/Admin.php +++ b/lib/Settings/Admin.php @@ -25,6 +25,7 @@ public function __construct( ) { } + #[\Override] public function getForm(): TemplateResponse { \OCP\Util::addScript(Application::APP_ID, 'groupfolders-settings'); @@ -51,18 +52,22 @@ public function getForm(): TemplateResponse { ); } + #[\Override] public function getSection(): string { return Application::APP_ID; } + #[\Override] public function getPriority(): int { return 90; } + #[\Override] public function getName(): ?string { return null; } + #[\Override] public function getAuthorizedAppConfig(): array { return []; } diff --git a/lib/Settings/Section.php b/lib/Settings/Section.php index bccc0d4be..ed5994f8f 100644 --- a/lib/Settings/Section.php +++ b/lib/Settings/Section.php @@ -20,18 +20,22 @@ public function __construct( ) { } + #[\Override] public function getID(): string { return Application::APP_ID; } + #[\Override] public function getName(): string { return $this->l->t('Team folders'); } + #[\Override] public function getPriority(): int { return 90; } + #[\Override] public function getIcon(): string { return $this->url->imagePath('groupfolders', 'app-dark.svg'); } diff --git a/lib/Trash/GroupTrashItem.php b/lib/Trash/GroupTrashItem.php index 71ec339a6..39fa2c99c 100644 --- a/lib/Trash/GroupTrashItem.php +++ b/lib/Trash/GroupTrashItem.php @@ -33,6 +33,7 @@ public function getInternalOriginalLocation(): string { return $this->internalOriginalLocation; } + #[\Override] public function isRootItem(): bool { return substr_count($this->getTrashPath(), '/') === 2; } @@ -41,15 +42,18 @@ public function getGroupFolderMountPoint(): string { return $this->mountPoint; } + #[\Override] public function getTitle(): string { return $this->getGroupFolderMountPoint() . '/' . $this->getOriginalLocation(); } + #[\Override] public function getMtime(): int { // trashbin is currently (incorrectly) assuming these to be the same return $this->getDeletedTime(); } + #[\Override] public function getInternalPath(): string { // trashbin expects the path without the deletion timestamp $path = parent::getInternalPath(); diff --git a/lib/Versions/GroupVersionEntity.php b/lib/Versions/GroupVersionEntity.php index ef8acbc12..7cd289ec5 100644 --- a/lib/Versions/GroupVersionEntity.php +++ b/lib/Versions/GroupVersionEntity.php @@ -42,6 +42,7 @@ public function __construct() { $this->addType('metadata', Types::STRING); } + #[\Override] public function jsonSerialize(): array { return [ 'id' => $this->id, diff --git a/psalm.xml b/psalm.xml index 54a6f6d26..6d12b4b3e 100644 --- a/psalm.xml +++ b/psalm.xml @@ -130,6 +130,7 @@ + diff --git a/tests/ACL/ACLCacheWrapperTest.php b/tests/ACL/ACLCacheWrapperTest.php index 4a3b3edf3..1d97641cf 100644 --- a/tests/ACL/ACLCacheWrapperTest.php +++ b/tests/ACL/ACLCacheWrapperTest.php @@ -25,6 +25,7 @@ class ACLCacheWrapperTest extends TestCase { private ACLCacheWrapper $cache; private array $aclPermissions = []; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/ACL/ACLManagerTest.php b/tests/ACL/ACLManagerTest.php index 3c6c1d9f6..22a156a40 100644 --- a/tests/ACL/ACLManagerTest.php +++ b/tests/ACL/ACLManagerTest.php @@ -30,6 +30,7 @@ class ACLManagerTest extends TestCase { /** @var array> */ private array $rules = []; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/ACL/ACLStorageWrapperTest.php b/tests/ACL/ACLStorageWrapperTest.php index fadc13983..0e5d75810 100644 --- a/tests/ACL/ACLStorageWrapperTest.php +++ b/tests/ACL/ACLStorageWrapperTest.php @@ -22,6 +22,7 @@ class ACLStorageWrapperTest extends TestCase { private ACLStorageWrapper $storage; private array $aclPermissions = []; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/ACL/RuleManagerTest.php b/tests/ACL/RuleManagerTest.php index 7dd0700d6..4b9dc835b 100644 --- a/tests/ACL/RuleManagerTest.php +++ b/tests/ACL/RuleManagerTest.php @@ -30,6 +30,7 @@ class RuleManagerTest extends TestCase { private IUser&MockObject $user; private IEventDispatcher&MockObject $eventDispatcher; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/AppInfo/CapabilitiesTest.php b/tests/AppInfo/CapabilitiesTest.php index 393d9189a..311fa9aff 100644 --- a/tests/AppInfo/CapabilitiesTest.php +++ b/tests/AppInfo/CapabilitiesTest.php @@ -23,6 +23,7 @@ class CapabilitiesTest extends TestCase { private IAppManager&MockObject $appManager; private Capabilities $capabilities; + #[\Override] public function setUp(): void { parent::setUp(); diff --git a/tests/Folder/FolderManagerTest.php b/tests/Folder/FolderManagerTest.php index 486280b71..44fda0c06 100644 --- a/tests/Folder/FolderManagerTest.php +++ b/tests/Folder/FolderManagerTest.php @@ -45,6 +45,7 @@ class FolderManagerTest extends TestCase { private FolderStorageManager $folderStorageManager; private IAppConfig $appConfig; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/Listeners/CircleDestroyedEventListenerTest.php b/tests/Listeners/CircleDestroyedEventListenerTest.php index 06f695f18..38ac59cb6 100644 --- a/tests/Listeners/CircleDestroyedEventListenerTest.php +++ b/tests/Listeners/CircleDestroyedEventListenerTest.php @@ -21,6 +21,7 @@ class CircleDestroyedEventListenerTest extends TestCase { private FolderManager&MockObject $folderManager; private CircleDestroyedEventListener $listener; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/Listeners/LoadAdditionalScriptsListenerTest.php b/tests/Listeners/LoadAdditionalScriptsListenerTest.php index c549fe99c..89660f769 100644 --- a/tests/Listeners/LoadAdditionalScriptsListenerTest.php +++ b/tests/Listeners/LoadAdditionalScriptsListenerTest.php @@ -19,6 +19,7 @@ class LoadAdditionalScriptsListenerTest extends TestCase { private LoadAdditionalScriptsListener $listener; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/Listeners/NodeRenamedListenerTest.php b/tests/Listeners/NodeRenamedListenerTest.php index 9ea7ba706..a7f97b49d 100644 --- a/tests/Listeners/NodeRenamedListenerTest.php +++ b/tests/Listeners/NodeRenamedListenerTest.php @@ -30,6 +30,7 @@ class NodeRenamedListenerTest extends TestCase { private MockObject $target; private NodeRenamedEvent&MockObject $event; + #[\Override] protected function setUp(): void { parent::setUp(); diff --git a/tests/Trash/TrashBackendTest.php b/tests/Trash/TrashBackendTest.php index 742a71aca..72c983e59 100644 --- a/tests/Trash/TrashBackendTest.php +++ b/tests/Trash/TrashBackendTest.php @@ -46,6 +46,7 @@ class TrashBackendTest extends TestCase { private IUser $managerUser; private IUser $normalUser; + #[\Override] public function setUp(): void { parent::setUp(); @@ -89,6 +90,7 @@ public function setUp(): void { } + #[\Override] protected function tearDown(): void { $folder = $this->folderManager->getFolder($this->folderId); if ($folder) { diff --git a/vendor-bin/psalm/composer.json b/vendor-bin/psalm/composer.json index d1eb38ea6..254fa9322 100644 --- a/vendor-bin/psalm/composer.json +++ b/vendor-bin/psalm/composer.json @@ -1,11 +1,11 @@ { "require-dev": { - "vimeo/psalm": "^6.4", + "vimeo/psalm": "^6.14", "psalm/plugin-phpunit": "^0.19.3" }, "config": { "platform": { - "php": "8.2.4" + "php": "8.2.27" } } } diff --git a/vendor-bin/psalm/composer.lock b/vendor-bin/psalm/composer.lock index 045351959..7c83a9cef 100644 --- a/vendor-bin/psalm/composer.lock +++ b/vendor-bin/psalm/composer.lock @@ -4,21 +4,21 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5b598ebb121e44cc752418d977c716c9", + "content-hash": "f9f7139e009b603ee856af72f6b6f2e9", "packages": [], "packages-dev": [ { "name": "amphp/amp", - "version": "v3.1.0", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9" + "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9", - "reference": "7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9", + "url": "https://api.github.com/repos/amphp/amp/zipball/fa0ab33a6f47a82929c38d03ca47ebb71086a93f", + "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f", "shasum": "" }, "require": { @@ -78,7 +78,7 @@ ], "support": { "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v3.1.0" + "source": "https://github.com/amphp/amp/tree/v3.1.1" }, "funding": [ { @@ -86,7 +86,7 @@ "type": "github" } ], - "time": "2025-01-26T16:07:39+00:00" + "time": "2025-08-27T21:42:00+00:00" }, { "name": "amphp/byte-stream", @@ -319,16 +319,16 @@ }, { "name": "amphp/parallel", - "version": "v2.3.1", + "version": "v2.3.3", "source": { "type": "git", "url": "https://github.com/amphp/parallel.git", - "reference": "5113111de02796a782f5d90767455e7391cca190" + "reference": "296b521137a54d3a02425b464e5aee4c93db2c60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel/zipball/5113111de02796a782f5d90767455e7391cca190", - "reference": "5113111de02796a782f5d90767455e7391cca190", + "url": "https://api.github.com/repos/amphp/parallel/zipball/296b521137a54d3a02425b464e5aee4c93db2c60", + "reference": "296b521137a54d3a02425b464e5aee4c93db2c60", "shasum": "" }, "require": { @@ -391,7 +391,7 @@ ], "support": { "issues": "https://github.com/amphp/parallel/issues", - "source": "https://github.com/amphp/parallel/tree/v2.3.1" + "source": "https://github.com/amphp/parallel/tree/v2.3.3" }, "funding": [ { @@ -399,7 +399,7 @@ "type": "github" } ], - "time": "2024-12-21T01:56:09+00:00" + "time": "2025-11-15T06:23:42+00:00" }, { "name": "amphp/parser", @@ -969,16 +969,16 @@ }, { "name": "composer/semver", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { @@ -1030,7 +1030,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" + "source": "https://github.com/composer/semver/tree/3.4.4" }, "funding": [ { @@ -1040,13 +1040,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-09-19T14:15:21+00:00" + "time": "2025-08-20T19:15:30+00:00" }, { "name": "composer/xdebug-handler", @@ -1114,6 +1110,58 @@ ], "time": "2024-05-06T16:37:16+00:00" }, + { + "name": "danog/advanced-json-rpc", + "version": "v3.2.2", + "source": { + "type": "git", + "url": "https://github.com/danog/php-advanced-json-rpc.git", + "reference": "aadb1c4068a88c3d0530cfe324b067920661efcb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danog/php-advanced-json-rpc/zipball/aadb1c4068a88c3d0530cfe324b067920661efcb", + "reference": "aadb1c4068a88c3d0530cfe324b067920661efcb", + "shasum": "" + }, + "require": { + "netresearch/jsonmapper": "^5", + "php": ">=8.1", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" + }, + "replace": { + "felixfbecker/php-advanced-json-rpc": "^3" + }, + "require-dev": { + "phpunit/phpunit": "^9" + }, + "type": "library", + "autoload": { + "psr-4": { + "AdvancedJsonRpc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" + } + ], + "description": "A more advanced JSONRPC implementation", + "support": { + "issues": "https://github.com/danog/php-advanced-json-rpc/issues", + "source": "https://github.com/danog/php-advanced-json-rpc/tree/v3.2.2" + }, + "time": "2025-02-14T10:55:15+00:00" + }, { "name": "daverandom/libdns", "version": "v2.1.0", @@ -1243,51 +1291,6 @@ }, "time": "2025-04-07T20:06:18+00:00" }, - { - "name": "felixfbecker/advanced-json-rpc", - "version": "v3.2.1", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "shasum": "" - }, - "require": { - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "php": "^7.1 || ^8.0", - "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "AdvancedJsonRpc\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "A more advanced JSONRPC implementation", - "support": { - "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", - "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" - }, - "time": "2021-06-11T22:34:44+00:00" - }, { "name": "felixfbecker/language-server-protocol", "version": "v1.5.3", @@ -1346,16 +1349,16 @@ }, { "name": "fidry/cpu-core-counter", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", "shasum": "" }, "require": { @@ -1365,10 +1368,10 @@ "fidry/makefile": "^0.2.0", "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^8.5.31 || ^9.5.26", "webmozarts/strict-phpunit": "^7.5" }, @@ -1395,7 +1398,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" }, "funding": [ { @@ -1403,7 +1406,7 @@ "type": "github" } ], - "time": "2024-08-06T10:04:20+00:00" + "time": "2025-08-14T07:29:31+00:00" }, { "name": "kelunik/certificate", @@ -1465,33 +1468,38 @@ }, { "name": "league/uri", - "version": "7.5.1", + "version": "7.7.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "81fb5145d2644324614cc532b28efd0215bda430" + "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", - "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/8d587cddee53490f9b82bf203d3a9aa7ea4f9807", + "reference": "8d587cddee53490f9b82bf203d3a9aa7ea4f9807", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.5", - "php": "^8.1" + "league/uri-interfaces": "^7.7", + "php": "^8.1", + "psr/http-factory": "^1" }, "conflict": { "league/uri-schemes": "^1.0" }, "suggest": { "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", "ext-fileinfo": "to create Data URI from file contennts", "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", + "ext-uri": "to use the PHP native URI class", "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", "league/uri-components": "Needed to easily manipulate URI objects components", + "league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle WHATWG URL", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -1519,6 +1527,7 @@ "description": "URI manipulation library", "homepage": "https://uri.thephpleague.com", "keywords": [ + "URN", "data-uri", "file-uri", "ftp", @@ -1531,9 +1540,11 @@ "psr-7", "query-string", "querystring", + "rfc2141", "rfc3986", "rfc3987", "rfc6570", + "rfc8141", "uri", "uri-template", "url", @@ -1543,7 +1554,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.5.1" + "source": "https://github.com/thephpleague/uri/tree/7.7.0" }, "funding": [ { @@ -1551,26 +1562,25 @@ "type": "github" } ], - "time": "2024-12-08T08:40:02+00:00" + "time": "2025-12-07T16:02:06+00:00" }, { "name": "league/uri-interfaces", - "version": "7.5.0", + "version": "7.7.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/62ccc1a0435e1c54e10ee6022df28d6c04c2946c", + "reference": "62ccc1a0435e1c54e10ee6022df28d6c04c2946c", "shasum": "" }, "require": { "ext-filter": "*", "php": "^8.1", - "psr/http-factory": "^1", "psr/http-message": "^1.1 || ^2.0" }, "suggest": { @@ -1578,6 +1588,7 @@ "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle WHATWG URL", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -1602,7 +1613,7 @@ "homepage": "https://nyamsprod.com" } ], - "description": "Common interfaces and classes for URI representation and interaction", + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", "homepage": "https://uri.thephpleague.com", "keywords": [ "data-uri", @@ -1627,7 +1638,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.7.0" }, "funding": [ { @@ -1635,20 +1646,20 @@ "type": "github" } ], - "time": "2024-12-08T08:18:47+00:00" + "time": "2025-12-07T16:03:21+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.5.0", + "version": "v5.0.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5" + "reference": "8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5", - "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c", + "reference": "8c64d8d444a5d764c641ebe97e0e3bc72b25bf6c", "shasum": "" }, "require": { @@ -1684,22 +1695,22 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v5.0.0" }, - "time": "2024-09-08T10:13:13+00:00" + "time": "2024-09-08T10:20:00+00:00" }, { "name": "nikic/php-parser", - "version": "v5.5.0", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "ae59794362fe85e051a58ad36b289443f57be7a9" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9", - "reference": "ae59794362fe85e051a58ad36b289443f57be7a9", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -1718,7 +1729,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -1742,9 +1753,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2025-05-31T08:24:38+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -1801,16 +1812,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.2", + "version": "5.6.6", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62" + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/5cee1d3dfc2d2aa6599834520911d246f656bcb8", + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8", "shasum": "" }, "require": { @@ -1820,7 +1831,7 @@ "phpdocumentor/reflection-common": "^2.2", "phpdocumentor/type-resolver": "^1.7", "phpstan/phpdoc-parser": "^1.7|^2.0", - "webmozart/assert": "^1.9.1" + "webmozart/assert": "^1.9.1 || ^2" }, "require-dev": { "mockery/mockery": "~1.3.5 || ~1.6.0", @@ -1859,22 +1870,22 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.6" }, - "time": "2025-04-13T19:20:35+00:00" + "time": "2025-12-22T21:13:58+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.10.0", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195", + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195", "shasum": "" }, "require": { @@ -1917,22 +1928,22 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0" }, - "time": "2024-11-09T15:12:26+00:00" + "time": "2025-11-21T15:09:14+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "2.1.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", "shasum": "" }, "require": { @@ -1964,9 +1975,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" }, - "time": "2025-02-19T13:28:12+00:00" + "time": "2025-08-30T15:50:23+00:00" }, { "name": "psalm/plugin-phpunit", @@ -2242,16 +2253,16 @@ }, { "name": "revolt/event-loop", - "version": "v1.0.7", + "version": "v1.0.8", "source": { "type": "git", "url": "https://github.com/revoltphp/event-loop.git", - "reference": "09bf1bf7f7f574453efe43044b06fafe12216eb3" + "reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/09bf1bf7f7f574453efe43044b06fafe12216eb3", - "reference": "09bf1bf7f7f574453efe43044b06fafe12216eb3", + "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/b6fc06dce8e9b523c9946138fa5e62181934f91c", + "reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c", "shasum": "" }, "require": { @@ -2308,35 +2319,35 @@ ], "support": { "issues": "https://github.com/revoltphp/event-loop/issues", - "source": "https://github.com/revoltphp/event-loop/tree/v1.0.7" + "source": "https://github.com/revoltphp/event-loop/tree/v1.0.8" }, - "time": "2025-01-25T19:27:39+00:00" + "time": "2025-08-27T21:33:23+00:00" }, { "name": "sebastian/diff", - "version": "5.1.1", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -2369,7 +2380,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" }, "funding": [ { @@ -2377,20 +2388,20 @@ "type": "github" } ], - "time": "2024-03-02T07:15:17+00:00" + "time": "2024-07-03T04:53:05+00:00" }, { "name": "spatie/array-to-xml", - "version": "3.4.0", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/spatie/array-to-xml.git", - "reference": "7dcfc67d60b0272926dabad1ec01f6b8a5fb5e67" + "reference": "88b2f3852a922dd73177a68938f8eb2ec70c7224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/7dcfc67d60b0272926dabad1ec01f6b8a5fb5e67", - "reference": "7dcfc67d60b0272926dabad1ec01f6b8a5fb5e67", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/88b2f3852a922dd73177a68938f8eb2ec70c7224", + "reference": "88b2f3852a922dd73177a68938f8eb2ec70c7224", "shasum": "" }, "require": { @@ -2433,7 +2444,7 @@ "xml" ], "support": { - "source": "https://github.com/spatie/array-to-xml/tree/3.4.0" + "source": "https://github.com/spatie/array-to-xml/tree/3.4.4" }, "funding": [ { @@ -2445,51 +2456,51 @@ "type": "github" } ], - "time": "2024-12-16T12:45:15+00:00" + "time": "2025-12-15T09:00:41+00:00" }, { "name": "symfony/console", - "version": "v6.4.22", + "version": "v7.4.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3" + "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3", - "reference": "7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3", + "url": "https://api.github.com/repos/symfony/console/zipball/732a9ca6cd9dfd940c639062d5edbde2f6727fb6", + "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^7.2|^8.0" }, "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": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -2523,7 +2534,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.22" + "source": "https://github.com/symfony/console/tree/v7.4.3" }, "funding": [ { @@ -2534,12 +2545,16 @@ "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-05-07T07:05:04+00:00" + "time": "2025-12-23T14:50:43+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2610,25 +2625,25 @@ }, { "name": "symfony/filesystem", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3" + "reference": "d551b38811096d0be9c4691d406991b47c0c630a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d551b38811096d0be9c4691d406991b47c0c630a", + "reference": "d551b38811096d0be9c4691d406991b47c0c630a", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^5.4|^6.4|^7.0" + "symfony/process": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -2656,7 +2671,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.13" + "source": "https://github.com/symfony/filesystem/tree/v7.4.0" }, "funding": [ { @@ -2667,16 +2682,20 @@ "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-10-25T15:07:50+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -2735,7 +2754,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -2746,6 +2765,10 @@ "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" @@ -2755,16 +2778,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { @@ -2813,7 +2836,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -2824,16 +2847,20 @@ "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": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -2894,7 +2921,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -2905,6 +2932,10 @@ "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" @@ -2914,7 +2945,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -2975,7 +3006,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -2986,6 +3017,10 @@ "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" @@ -2993,18 +3028,98 @@ ], "time": "2024-12-23T08:48:59+00:00" }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.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": "2025-06-24T13:30:11+00:00" + }, { "name": "symfony/service-contracts", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "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/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -3058,7 +3173,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -3069,31 +3184,36 @@ "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": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/string", - "version": "v6.4.21", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "73e2c6966a5aef1d4892873ed5322245295370c6" + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/73e2c6966a5aef1d4892873ed5322245295370c6", - "reference": "73e2c6966a5aef1d4892873ed5322245295370c6", + "url": "https://api.github.com/repos/symfony/string/zipball/d50e862cb0a0e0886f73ca1f31b865efbb795003", + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-grapheme": "~1.33", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, @@ -3101,11 +3221,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/intl": "^6.2|^7.0", + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -3144,7 +3264,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.21" + "source": "https://github.com/symfony/string/tree/v7.4.0" }, "funding": [ { @@ -3155,25 +3275,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": "2025-04-18T15:23:29+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "vimeo/psalm", - "version": "6.5.0", + "version": "6.14.3", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "38fc8444edf0cebc9205296ee6e30e906ade783b" + "reference": "d0b040a91f280f071c1abcb1b77ce3822058725a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/38fc8444edf0cebc9205296ee6e30e906ade783b", - "reference": "38fc8444edf0cebc9205296ee6e30e906ade783b", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/d0b040a91f280f071c1abcb1b77ce3822058725a", + "reference": "d0b040a91f280f071c1abcb1b77ce3822058725a", "shasum": "" }, "require": { @@ -3183,6 +3307,7 @@ "composer-runtime-api": "^2", "composer/semver": "^1.4 || ^2.0 || ^3.0", "composer/xdebug-handler": "^2.0 || ^3.0", + "danog/advanced-json-rpc": "^3.1", "dnoegel/php-xdg-base-dir": "^0.1.1", "ext-ctype": "*", "ext-dom": "*", @@ -3191,16 +3316,16 @@ "ext-mbstring": "*", "ext-simplexml": "*", "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.1", "felixfbecker/language-server-protocol": "^1.5.3", "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "netresearch/jsonmapper": "^5.0", "nikic/php-parser": "^5.0.0", - "php": "~8.1.17 || ~8.2.4 || ~8.3.0 || ~8.4.0", + "php": "~8.1.31 || ~8.2.27 || ~8.3.16 || ~8.4.3 || ~8.5.0", "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0", "spatie/array-to-xml": "^2.17.0 || ^3.0", - "symfony/console": "^6.0 || ^7.0", - "symfony/filesystem": "^6.0 || ^7.0" + "symfony/console": "^6.0 || ^7.0 || ^8.0", + "symfony/filesystem": "~6.3.12 || ~6.4.3 || ^7.0.3 || ^8.0", + "symfony/polyfill-php84": "^1.31.0" }, "provide": { "psalm/psalm": "self.version" @@ -3209,6 +3334,7 @@ "amphp/phpunit-util": "^3", "bamarni/composer-bin-plugin": "^1.4", "brianium/paratest": "^6.9", + "danog/class-finder": "^0.4.8", "dg/bypass-finals": "^1.5", "ext-curl": "*", "mockery/mockery": "^1.5", @@ -3220,7 +3346,7 @@ "psalm/plugin-phpunit": "^0.19", "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.6", - "symfony/process": "^6.0 || ^7.0" + "symfony/process": "^6.0 || ^7.0 || ^8.0" }, "suggest": { "ext-curl": "In order to send data to shepherd", @@ -3276,37 +3402,37 @@ "issues": "https://github.com/vimeo/psalm/issues", "source": "https://github.com/vimeo/psalm" }, - "time": "2025-02-07T20:42:25+00:00" + "time": "2025-12-23T15:36:48+00:00" }, { "name": "webmozart/assert", - "version": "1.11.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "reference": "1b34b004e35a164bc5bb6ebd33c844b2d8069a54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/1b34b004e35a164bc5bb6ebd33c844b2d8069a54", + "reference": "1b34b004e35a164bc5bb6ebd33c844b2d8069a54", "shasum": "" }, "require": { "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" + "ext-date": "*", + "ext-filter": "*", + "php": "^8.2" }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10-dev" + "dev-feature/2-0": "2.0-dev" } }, "autoload": { @@ -3322,6 +3448,10 @@ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" + }, + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com" } ], "description": "Assertions to validate method input/output with nice error messages.", @@ -3332,9 +3462,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "source": "https://github.com/webmozarts/assert/tree/2.0.0" }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2025-12-16T21:36:00+00:00" } ], "aliases": [], @@ -3345,7 +3475,7 @@ "platform": {}, "platform-dev": {}, "platform-overrides": { - "php": "8.2.4" + "php": "8.2.27" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" }