From 728853d79c7873d3a05a096f6269bb509ae8df33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Viguier?= Date: Sat, 8 Jun 2024 20:32:35 +0200 Subject: [PATCH] Composer update + phpstan annotations + Improved speed. (#2448) * Composer update: add all the required annotations for phpstan * Remove some queries. (#2455) * Remove middleware when we already passed the landing point (#2456) * Add missing primary key in Jobs_history + option to disable feedback completely. (#2457) * Wrap collections to avoid double queries (#2458) --- app/Actions/Album/Archive.php | 6 +- app/Actions/Album/Delete.php | 4 +- app/Actions/Album/Merge.php | 4 +- app/Actions/Album/Move.php | 4 +- app/Actions/Albums/Top.php | 13 +- app/Actions/Albums/Tree.php | 16 +- app/Actions/Db/BaseOptimizer.php | 8 +- app/Actions/Db/OptimizeDb.php | 3 + app/Actions/Db/OptimizeTables.php | 3 + .../Pipes/Checks/ConfigSanityCheck.php | 7 +- .../Pipes/Checks/ForeignKeyListInfo.php | 15 + .../Pipes/Checks/PHPVersionCheck.php | 15 + .../Pipes/Infos/CountForeignKeyInfo.php | 15 + .../Diagnostics/Pipes/Infos/SystemInfo.php | 5 + app/Actions/Import/Exec.php | 4 +- app/Actions/Import/FromUrl.php | 2 +- app/Actions/InstallUpdate/DefaultConfig.php | 9 +- .../InstallUpdate/PermissionsChecker.php | 24 +- .../InstallUpdate/RequirementsChecker.php | 14 +- app/Actions/Photo/Archive.php | 4 +- app/Actions/Photo/Create.php | 4 +- app/Actions/Photo/Delete.php | 16 +- app/Actions/Photo/Duplicate.php | 6 +- app/Actions/RSS/Generate.php | 2 +- app/Actions/Search/AlbumSearch.php | 15 +- app/Actions/Search/PhotoSearch.php | 10 +- app/Actions/Sharing/ListShare.php | 1 + app/Actions/Sharing/ListedAlbum.php | 7 +- app/Assets/ArrayToTextTable.php | 33 +- app/Assets/Features.php | 7 +- app/Casts/ArrayCast.php | 27 +- app/Casts/DateTimeWithTimezoneCast.php | 25 +- app/Casts/MustNotSetCast.php | 3 +- app/Console/Commands/Ghostbuster.php | 4 +- app/Contracts/DTO.php | 6 +- app/Contracts/Http/Requests/HasAlbums.php | 2 +- app/Contracts/Http/Requests/HasPhotos.php | 2 +- app/Contracts/Http/RuleSet.php | 2 +- app/Contracts/Models/AbstractAlbum.php | 4 +- app/Contracts/Models/SizeVariantFactory.php | 2 +- app/Contracts/Versions/Remote/GitRemote.php | 6 +- app/DTO/AbstractDTO.php | 6 +- app/DTO/ArrayableDTO.php | 4 +- app/DTO/BacktraceRecord.php | 3 + app/DTO/BaseImportReport.php | 2 + app/Eloquent/FixedQueryBuilderTrait.php | 18 +- app/Enum/LicenseType.php | 2 +- app/Enum/Traits/DecorateBackedEnum.php | 6 +- app/Exceptions/Handler.php | 4 +- app/Factories/AlbumFactory.php | 11 +- .../Administration/JobController.php | 2 +- .../Administration/SettingsController.php | 2 +- .../Administration/SharingController.php | 2 +- app/Http/Controllers/PhotoController.php | 7 +- app/Http/Controllers/RSSController.php | 3 +- .../WebAuthn/WebAuthnLoginController.php | 4 +- .../WebAuthn/WebAuthnManageController.php | 2 + app/Http/Kernel.php | 15 +- app/Http/Middleware/AcceptContentType.php | 2 +- app/Http/Requests/AbstractEmptyRequest.php | 18 +- .../Requests/Album/ArchiveAlbumsRequest.php | 1 + .../Requests/Album/SetAlbumsTitleRequest.php | 3 +- app/Http/Requests/BaseApiRequest.php | 8 +- .../Requests/Install/SetUpAdminRequest.php | 3 + .../Requests/Photo/ArchivePhotosRequest.php | 4 +- .../Requests/Photo/DuplicatePhotosRequest.php | 2 +- app/Http/Requests/Photo/MovePhotosRequest.php | 2 +- .../Photo/SetPhotosStarredRequest.php | 2 +- .../Requests/Photo/SetPhotosTagsRequest.php | 2 +- .../Requests/Photo/SetPhotosTitleRequest.php | 2 +- app/Http/Requests/Traits/HasAlbumsTrait.php | 4 +- app/Http/Requests/Traits/HasPhotosTrait.php | 4 +- .../Collections/AlbumForestResource.php | 8 +- .../Collections/PhotoCollectionResource.php | 2 +- .../Collections/PositionDataResource.php | 10 +- .../Collections/TopAlbumsResource.php | 10 +- app/Http/Resources/ConfigurationResource.php | 3 +- app/Http/Resources/InitResource.php | 2 +- app/Http/Resources/Models/AlbumResource.php | 2 +- .../Resources/Models/AlbumTreeResource.php | 2 +- app/Http/Resources/Models/PhotoResource.php | 10 +- .../Resources/Models/SizeVariantResource.php | 2 +- .../Resources/Models/SmartAlbumResource.php | 2 +- .../Resources/Models/TagAlbumResource.php | 2 +- .../Models/UserManagementResource.php | 2 +- app/Http/Resources/Models/UserResource.php | 2 +- .../Resources/Rights/AlbumRightsResource.php | 2 +- .../Resources/Rights/GlobalRightsResource.php | 2 +- .../Resources/Rights/PhotoRightsResource.php | 2 +- .../Rights/RootAlbumRightsResource.php | 2 +- .../Rights/SettingsRightsResource.php | 2 +- .../Rights/UserManagementRightsResource.php | 2 +- .../Resources/Rights/UserRightsResource.php | 2 +- app/Http/Resources/SearchResource.php | 9 +- .../Sharing/ListedAlbumsResource.php | 2 +- .../Resources/Sharing/SharedAlbumResource.php | 2 +- app/Http/Resources/Sharing/SharesResource.php | 9 +- .../Resources/Sharing/UserSharedResource.php | 2 +- app/Image/FileDeleter.php | 16 +- app/Livewire/Components/Base/ContextMenu.php | 8 +- app/Livewire/Components/Base/Modal.php | 10 +- app/Livewire/Components/Forms/Add/Upload.php | 2 +- .../Components/Forms/Album/AddTrack.php | 2 +- .../Components/Forms/Album/Create.php | 6 +- .../Components/Forms/Album/CreateTag.php | 5 +- .../Components/Forms/Album/Delete.php | 4 +- .../Components/Forms/Album/DeletePanel.php | 2 +- app/Livewire/Components/Forms/Album/Merge.php | 4 +- app/Livewire/Components/Forms/Album/Move.php | 4 +- .../Components/Forms/Album/MovePanel.php | 2 +- .../Components/Forms/Album/Properties.php | 16 +- .../Components/Forms/Album/Rename.php | 4 +- .../Components/Forms/Album/SearchAlbum.php | 22 +- .../Components/Forms/Album/ShareWith.php | 6 +- .../Components/Forms/Album/Transfer.php | 2 +- .../Components/Forms/Photo/CopyTo.php | 4 +- .../Components/Forms/Photo/Delete.php | 4 +- .../Components/Forms/Photo/Download.php | 4 +- app/Livewire/Components/Forms/Photo/Move.php | 4 +- .../Components/Forms/Photo/Rename.php | 4 +- app/Livewire/Components/Forms/Photo/Tag.php | 5 +- .../Forms/Profile/ManageSecondFactor.php | 3 + .../Base/BaseConfigDoubleDropDown.php | 4 +- .../Settings/Base/BaseConfigDropDown.php | 2 +- .../SetAlbumDecorationOrientationSetting.php | 2 +- .../Settings/SetAlbumDecorationSetting.php | 2 +- .../Forms/Settings/SetAlbumSortingSetting.php | 4 +- .../Forms/Settings/SetLangSetting.php | 2 +- .../Forms/Settings/SetLayoutSetting.php | 2 +- .../Settings/SetLicenseDefaultSetting.php | 2 +- .../Forms/Settings/SetMapProviderSetting.php | 2 +- .../Forms/Settings/SetPhotoOverlaySetting.php | 2 +- .../Forms/Settings/SetPhotoSortingSetting.php | 4 +- app/Livewire/Components/Menus/AlbumAdd.php | 1 + .../Components/Menus/AlbumsDropdown.php | 2 +- .../Components/Menus/PhotosDropdown.php | 4 +- app/Livewire/Components/Modals/Login.php | 2 +- .../Diagnostics/AbstractPreSection.php | 2 +- .../Components/Modules/Diagnostics/Errors.php | 2 +- .../Components/Modules/Diagnostics/Space.php | 1 + .../Components/Modules/Jobs/Feedback.php | 4 +- .../Modules/Maintenance/Cleaning.php | 2 + .../Modules/Maintenance/FixJobs.php | 1 + .../Modules/Maintenance/FixTree.php | 1 + .../Modules/Maintenance/Optimize.php | 1 + .../Components/Modules/Maintenance/Update.php | 1 + app/Livewire/Components/Pages/Frame.php | 15 + .../Components/Pages/Gallery/Album.php | 85 +- .../Components/Pages/Gallery/Albums.php | 15 +- .../Pages/Gallery/BaseAlbumComponent.php | 31 +- .../Components/Pages/Gallery/Search.php | 25 +- app/Livewire/Components/Pages/Jobs.php | 2 +- app/Livewire/Components/Pages/Map.php | 6 +- app/Livewire/Components/Pages/Users.php | 1 + app/Livewire/DTO/AlbumFlags.php | 11 +- app/Livewire/DTO/AlbumRights.php | 4 + app/Livewire/DTO/AlbumsFlags.php | 4 + app/Livewire/DTO/OauthData.php | 4 + app/Livewire/DTO/PhotoFlags.php | 4 + app/Livewire/DTO/ProtectedCollection.php | 52 + app/Livewire/Forms/AllConfigsForms.php | 4 +- app/Livewire/Forms/ImportFromUrlForm.php | 2 +- app/Livewire/Forms/PhotoUpdateForm.php | 5 +- .../Traits/AlbumsPhotosContextMenus.php | 14 + app/Livewire/Traits/InteractWithModal.php | 10 +- app/Livewire/Traits/UsePhotoViewActions.php | 6 +- app/Livewire/Traits/UseValidator.php | 2 +- app/Livewire/Traits/UseWireable.php | 9 +- app/Mail/PhotosAdded.php | 3 + app/Metadata/RateLimiterStore.php | 3 + app/Metadata/Versions/Remote/GitTags.php | 4 +- app/ModelFunctions/MOVFormat.php | 6 + app/Models/AccessPermission.php | 4 +- app/Models/Album.php | 7 +- app/Models/BaseAlbumImpl.php | 10 +- app/Models/Builders/AlbumBuilder.php | 4 +- app/Models/Extensions/BaseAlbum.php | 11 +- .../ForwardsToParentImplementation.php | 12 +- .../HasBidirectionalRelationships.php | 29 +- .../HasRandomIDAndLegacyTimeBasedID.php | 4 +- app/Models/Extensions/SizeVariants.php | 14 +- app/Models/Extensions/SortingDecorator.php | 19 +- .../Extensions/ThrowsConsistentExceptions.php | 4 +- app/Models/Extensions/Thumb.php | 15 +- .../ToArrayThrowsNotImplemented.php | 8 + app/Models/JobHistory.php | 2 +- app/Models/OauthCredential.php | 2 +- app/Models/Photo.php | 12 +- app/Models/SizeVariant.php | 7 +- app/Models/SymLink.php | 12 +- app/Models/TagAlbum.php | 3 + app/Models/User.php | 16 +- app/Policies/AlbumPolicy.php | 4 +- app/Policies/AlbumQueryPolicy.php | 26 +- app/Policies/PhotoQueryPolicy.php | 16 +- app/Providers/AppServiceProvider.php | 7 +- app/Relations/BaseHasManyPhotos.php | 13 +- app/Relations/HasAlbumThumb.php | 24 +- app/Relations/HasManyBidirectionally.php | 26 +- app/Relations/HasManyChildAlbums.php | 23 +- app/Relations/HasManyChildPhotos.php | 26 +- app/Relations/HasManyPhotosByTag.php | 11 +- app/Relations/HasManyPhotosRecursively.php | 11 +- app/Relations/HasManySizeVariants.php | 26 +- app/Services/Auth/SessionOrTokenGuard.php | 2 + app/SmartAlbums/BaseSmartAlbum.php | 11 +- app/SmartAlbums/Utils/MimicModel.php | 2 +- .../Components/Gallery/Album/Thumbs/Album.php | 4 +- .../Components/Gallery/Album/Thumbs/Photo.php | 4 +- .../Components/Gallery/Photo/Download.php | 1 + composer.lock | 1484 ++++++++++++----- .../2019_09_28_171753_config_fix.php | 5 +- .../2020_07_11_184605_update_licences.php | 6 +- .../2021_05_25_160600_post_revert_fixes.php | 6 +- ..._06_01_181900_refactor_timestamps_anew.php | 6 +- ...4_06_08_093403_primary_key_job_history.php | 25 + ...42_add_config_display_processing_queue.php | 22 + package-lock.json | 764 +++++---- phpstan.neon | 63 +- .../gallery/view/photo-listing.blade.php | 2 +- .../livewire/forms/album/properties.blade.php | 2 +- .../livewire/pages/gallery/album.blade.php | 4 +- .../livewire/pages/gallery/albums.blade.php | 6 +- .../livewire/pages/gallery/search.blade.php | 4 +- routes/web-livewire.php | 38 +- scripts/gen_release.php | 10 +- tests/AbstractTestCase.php | 2 +- tests/Livewire/WireableTest.php | 2 + 228 files changed, 2576 insertions(+), 1435 deletions(-) create mode 100644 app/Livewire/DTO/ProtectedCollection.php create mode 100644 database/migrations/2024_06_08_093403_primary_key_job_history.php create mode 100644 database/migrations/2024_06_08_103842_add_config_display_processing_queue.php diff --git a/app/Actions/Album/Archive.php b/app/Actions/Album/Archive.php index d946193d6a..1eb344d9e2 100644 --- a/app/Actions/Album/Archive.php +++ b/app/Actions/Album/Archive.php @@ -39,7 +39,7 @@ class Archive extends Action protected int $deflateLevel = -1; /** - * @param Collection $albums + * @param Collection $albums * * @return StreamedResponse * @@ -101,6 +101,10 @@ public function do(Collection $albums): StreamedResponse /** * Create the title of the ZIP archive. + * + * @param Collection $albums + * + * @return string */ private static function createZipTitle(Collection $albums): string { diff --git a/app/Actions/Album/Delete.php b/app/Actions/Album/Delete.php index baa74fa541..d1497d5e00 100644 --- a/app/Actions/Album/Delete.php +++ b/app/Actions/Album/Delete.php @@ -86,7 +86,7 @@ public function do(array $albumIDs): FileDeleter // find all photos in those and their descendants // Only load necessary attributes for tree; in particular avoid // loading expensive `min_taken_at` and `max_taken_at`. - /** @var Collection $albums */ + /** @var Collection $albums */ $albums = Album::query() ->without(['cover', 'thumb']) ->select(['id', 'parent_id', '_lft', '_rgt', 'track_short_path']) @@ -182,7 +182,7 @@ public function do(array $albumIDs): FileDeleter * The latter is more efficient, because we do not reload models * from the DB. * - * @param Collection $albums + * @param Collection $albums * * @return void * diff --git a/app/Actions/Album/Merge.php b/app/Actions/Album/Merge.php index 5df8147de9..600056b884 100644 --- a/app/Actions/Album/Merge.php +++ b/app/Actions/Album/Merge.php @@ -15,8 +15,8 @@ class Merge extends Action * Merges the content of the given source albums (photos and sub-albums) * into the target. * - * @param Album $targetAlbum - * @param Collection $albums + * @param Album $targetAlbum + * @param Collection $albums * * @throws ModelNotFoundException * @throws ModelDBException diff --git a/app/Actions/Album/Move.php b/app/Actions/Album/Move.php index dd6e877e11..41bf29bad5 100644 --- a/app/Actions/Album/Move.php +++ b/app/Actions/Album/Move.php @@ -12,8 +12,8 @@ class Move extends Action /** * Moves the given albums into the target. * - * @param Album|null $targetAlbum - * @param Collection $albums + * @param Album|null $targetAlbum + * @param Collection $albums * * @throws ModelNotFoundException * @throws ModelDBException diff --git a/app/Actions/Albums/Top.php b/app/Actions/Albums/Top.php index 3ce860c01a..1e028e5b3a 100644 --- a/app/Actions/Albums/Top.php +++ b/app/Actions/Albums/Top.php @@ -63,7 +63,7 @@ public function get(): TopAlbumsResource if (Configs::getValueAsBool('SA_enabled')) { // Do not eagerly load the relation `photos` for each smart album. // On the albums overview, we only need a thumbnail for each album. - /** @var BaseCollection $smartAlbums */ + /** @var BaseCollection $smartAlbums */ $smartAlbums = $this->albumFactory ->getAllBuiltInSmartAlbums(false) ->map( @@ -75,7 +75,9 @@ public function get(): TopAlbumsResource $tagAlbumQuery = $this->albumQueryPolicy ->applyVisibilityFilter(TagAlbum::query()->with(['access_permissions', 'owner'])); - /** @var BaseCollection $tagAlbums */ + + /** @var BaseCollection $tagAlbums */ + /** @phpstan-ignore-next-line */ $tagAlbums = (new SortingDecorator($tagAlbumQuery)) ->orderBy($this->sorting->column, $this->sorting->order) ->get(); @@ -87,15 +89,15 @@ public function get(): TopAlbumsResource $userID = Auth::id(); if ($userID !== null) { // For authenticated users we group albums by ownership. - /** @var BaseCollection $albums */ + /** @var BaseCollection $albums */ $albums = (new SortingDecorator($query)) ->orderBy(ColumnSortingType::OWNER_ID, OrderSortingType::ASC) ->orderBy($this->sorting->column, $this->sorting->order) ->get(); /** - * @var BaseCollection $a - * @var BaseCollection $b + * @var BaseCollection $a + * @var BaseCollection $b */ list($a, $b) = $albums->partition(fn ($album) => $album->owner_id === $userID); @@ -103,6 +105,7 @@ public function get(): TopAlbumsResource } else { // For anonymous users we don't want to implicitly expose // ownership via sorting. + /** @var BaseCollection */ $albums = (new SortingDecorator($query)) ->orderBy($this->sorting->column, $this->sorting->order) ->get(); diff --git a/app/Actions/Albums/Tree.php b/app/Actions/Albums/Tree.php index d694a7483f..f666376e71 100644 --- a/app/Actions/Albums/Tree.php +++ b/app/Actions/Albums/Tree.php @@ -12,6 +12,7 @@ use App\Models\Album; use App\Models\Extensions\SortingDecorator; use App\Policies\AlbumQueryPolicy; +use Illuminate\Support\Collection as BaseCollection; use Illuminate\Support\Facades\Auth; use Kalnoy\Nestedset\Collection as NsCollection; @@ -61,9 +62,9 @@ public function get(): AlbumForestResource } $query->orderBy($this->sorting->column, $this->sorting->order); - /** @var NsCollection $albums */ + /** @var NsCollection $albums */ $albums = $query->get(); - /** @var ?NsCollection $sharedAlbums */ + /** @var ?NsCollection $sharedAlbums */ $sharedAlbums = null; $userID = Auth::id(); if ($userID !== null) { @@ -74,8 +75,8 @@ public function get(): AlbumForestResource // (sub)-tree and then `toTree` will return garbage as it does // not find connected paths within `$albums` or `$sharedAlbums`, // resp. - /** @var NsCollection $albums */ - /** @var ?NsCollection $sharedAlbums */ + /** @var NsCollection $albums */ + /** @var ?NsCollection $sharedAlbums */ list($albums, $sharedAlbums) = $albums->partition(fn (Album $album) => $album->owner_id === $userID); } @@ -83,6 +84,11 @@ public function get(): AlbumForestResource // as there are several top-level albums below root. // Otherwise, `toTree` uses the ID of the album with the lowest // `_lft` value as the (wrong) root album. - return new AlbumForestResource($albums->toTree(null), $sharedAlbums?->toTree(null)); + /** @var BaseCollection $albumsTree */ + $albumsTree = $albums->toTree(null); + /** @var BaseCollection $sharedTree */ + $sharedTree = $sharedAlbums?->toTree(null); + + return new AlbumForestResource($albumsTree, $sharedTree); } } diff --git a/app/Actions/Db/BaseOptimizer.php b/app/Actions/Db/BaseOptimizer.php index 62f153bc91..659522a6e9 100644 --- a/app/Actions/Db/BaseOptimizer.php +++ b/app/Actions/Db/BaseOptimizer.php @@ -24,7 +24,7 @@ public function __construct() /** * Get the kind of driver used. * - * @param array $ret reference array for return messages + * @param array $ret reference array for return messages * * @return DbDriverType|null */ @@ -62,9 +62,9 @@ abstract public function do(): array; /** * Execute SQL statement. * - * @param string $sql statment to be executed - * @param string $success success message - * @param array $ret reference array for return messages + * @param string $sql statment to be executed + * @param string $success success message + * @param array $ret reference array for return messages * * @return void */ diff --git a/app/Actions/Db/OptimizeDb.php b/app/Actions/Db/OptimizeDb.php index 1b7d109a2e..76a9255e4e 100644 --- a/app/Actions/Db/OptimizeDb.php +++ b/app/Actions/Db/OptimizeDb.php @@ -6,6 +6,9 @@ class OptimizeDb extends BaseOptimizer { + /** + * @return array + */ public function do(): array { $ret = ['Optimizing Database.']; diff --git a/app/Actions/Db/OptimizeTables.php b/app/Actions/Db/OptimizeTables.php index baa590952c..9ca15dc214 100644 --- a/app/Actions/Db/OptimizeTables.php +++ b/app/Actions/Db/OptimizeTables.php @@ -6,6 +6,9 @@ class OptimizeTables extends BaseOptimizer { + /** + * @return array + */ public function do(): array { $ret = ['Optimizing tables.']; diff --git a/app/Actions/Diagnostics/Pipes/Checks/ConfigSanityCheck.php b/app/Actions/Diagnostics/Pipes/Checks/ConfigSanityCheck.php index 7dfea32d31..8584bdb651 100644 --- a/app/Actions/Diagnostics/Pipes/Checks/ConfigSanityCheck.php +++ b/app/Actions/Diagnostics/Pipes/Checks/ConfigSanityCheck.php @@ -12,6 +12,7 @@ */ class ConfigSanityCheck implements DiagnosticPipe { + /** @var array */ private array $settings; /** @@ -38,7 +39,7 @@ public function handle(array &$data, \Closure $next): array /** * Check that a certain set of configuration exists in the database. * - * @param array $data + * @param array $data * * @return void */ @@ -59,7 +60,7 @@ private function checkKeysExistsAndSet(array &$data): void /** * Warning if the Dropbox key does not exists. * - * @param array $data + * @param array $data * * @return void */ @@ -77,7 +78,7 @@ private function checkDropBoxKeyWarning(array &$data): void /** * Sanity check of the config. * - * @param array $return + * @param array $return */ private function sanity(array &$return): void { diff --git a/app/Actions/Diagnostics/Pipes/Checks/ForeignKeyListInfo.php b/app/Actions/Diagnostics/Pipes/Checks/ForeignKeyListInfo.php index f374689eda..853f349e34 100644 --- a/app/Actions/Diagnostics/Pipes/Checks/ForeignKeyListInfo.php +++ b/app/Actions/Diagnostics/Pipes/Checks/ForeignKeyListInfo.php @@ -30,6 +30,11 @@ public function handle(array &$data, \Closure $next): array return $next($data); } + /** + * @param array $data + * + * @return void + */ private function sqlite(array &$data): void { $fks = DB::select("SELECT m.name , p.* FROM sqlite_master m JOIN pragma_foreign_key_list(m.name) p ON m.name != p.\"table\" WHERE m.type = 'table' ORDER BY m.name;"); @@ -39,6 +44,11 @@ private function sqlite(array &$data): void } } + /** + * @param array $data + * + * @return void + */ private function mysql(array &$data): void { $fks = DB::select('select * @@ -57,6 +67,11 @@ private function mysql(array &$data): void } } + /** + * @param array $data + * + * @return void + */ private function pgsql(array &$data): void { $fks = DB::select('SELECT tc.table_schema, tc.constraint_name, tc.table_name, kcu.column_name, diff --git a/app/Actions/Diagnostics/Pipes/Checks/PHPVersionCheck.php b/app/Actions/Diagnostics/Pipes/Checks/PHPVersionCheck.php index 6ea0dc088f..84da9a0c9c 100644 --- a/app/Actions/Diagnostics/Pipes/Checks/PHPVersionCheck.php +++ b/app/Actions/Diagnostics/Pipes/Checks/PHPVersionCheck.php @@ -27,6 +27,11 @@ public function handle(array &$data, \Closure $next): array return $next($data); } + /** + * @param array $data + * + * @return void + */ private function checkPhpVersion(array &$data): void { // As we cannot test this as those are just raising warnings which we cannot check via CICD. @@ -44,6 +49,11 @@ private function checkPhpVersion(array &$data): void } } + /** + * @param array $data + * + * @return void + */ private function check32Bits(array &$data): void { // 32 or 64 bits ? @@ -54,6 +64,11 @@ private function check32Bits(array &$data): void } } + /** + * @param array $data + * + * @return void + */ private function checkExtensions(array &$data): void { // Extensions diff --git a/app/Actions/Diagnostics/Pipes/Infos/CountForeignKeyInfo.php b/app/Actions/Diagnostics/Pipes/Infos/CountForeignKeyInfo.php index 37fbdaf12a..9431ad1d63 100644 --- a/app/Actions/Diagnostics/Pipes/Infos/CountForeignKeyInfo.php +++ b/app/Actions/Diagnostics/Pipes/Infos/CountForeignKeyInfo.php @@ -26,12 +26,22 @@ public function handle(array &$data, \Closure $next): array return $next($data); } + /** + * @param array $data + * + * @return void + */ private function sqlite(array &$data): void { $fks = DB::select("SELECT m.name , p.* FROM sqlite_master m JOIN pragma_foreign_key_list(m.name) p ON m.name != p.\"table\" WHERE m.type = 'table' ORDER BY m.name;"); $data[] = Diagnostics::line('Number of foreign key:', sprintf('%d found.', count($fks))); } + /** + * @param array $data + * + * @return void + */ private function mysql(array &$data): void { $fks = DB::select('select * @@ -46,6 +56,11 @@ private function mysql(array &$data): void $data[] = Diagnostics::line('Number of foreign key:', sprintf('%d found.', count($fks))); } + /** + * @param array $data + * + * @return void + */ private function pgsql(array &$data): void { $fks = DB::select('SELECT tc.table_schema, tc.constraint_name, tc.table_name, kcu.column_name, diff --git a/app/Actions/Diagnostics/Pipes/Infos/SystemInfo.php b/app/Actions/Diagnostics/Pipes/Infos/SystemInfo.php index 34e8ccf5fb..83f8f20b66 100644 --- a/app/Actions/Diagnostics/Pipes/Infos/SystemInfo.php +++ b/app/Actions/Diagnostics/Pipes/Infos/SystemInfo.php @@ -63,6 +63,11 @@ public function handle(array &$data, \Closure $next): array return $next($data); } + /** + * @param array $data + * + * @return void + */ private function getUploadLimit(array &$data): void { $size = Upload::getUploadLimit(); diff --git a/app/Actions/Import/Exec.php b/app/Actions/Import/Exec.php index 890e9b72f7..2c944b4bd7 100644 --- a/app/Actions/Import/Exec.php +++ b/app/Actions/Import/Exec.php @@ -183,7 +183,7 @@ private static function normalizePath(string $path): string * * @param string $path * - * @return array + * @return array * * @throws FileOperationException */ @@ -368,7 +368,7 @@ private static function check_file_matches_pattern(string $pattern, string $file } /** - * @param array $my_array + * @param array $my_array * * @return string */ diff --git a/app/Actions/Import/FromUrl.php b/app/Actions/Import/FromUrl.php index a09a153ecb..45f400dbd4 100644 --- a/app/Actions/Import/FromUrl.php +++ b/app/Actions/Import/FromUrl.php @@ -28,7 +28,7 @@ class FromUrl * @param Album|null $album * @param int $intendedOwnerId * - * @return Collection the collection of imported photos + * @return Collection the collection of imported photos * * @throws MassImportException */ diff --git a/app/Actions/InstallUpdate/DefaultConfig.php b/app/Actions/InstallUpdate/DefaultConfig.php index 54f3dfc91a..1b8e674d70 100644 --- a/app/Actions/InstallUpdate/DefaultConfig.php +++ b/app/Actions/InstallUpdate/DefaultConfig.php @@ -8,6 +8,7 @@ class DefaultConfig { + /** @var array{core:array,requirements:array>,permissions:array} */ private array $config = [ /* |-------------------------------------------------------------------------- @@ -139,18 +140,24 @@ public function __construct() // @codeCoverageIgnoreEnd } + /** + * @return array + */ public function get_core(): array { return $this->config['core']; } + /** + * @return array> + */ public function get_requirements(): array { return $this->config['requirements']; } /** - * @return string[] + * @return array */ public function get_permissions(): array { diff --git a/app/Actions/InstallUpdate/PermissionsChecker.php b/app/Actions/InstallUpdate/PermissionsChecker.php index d560e40374..f7903d857d 100644 --- a/app/Actions/InstallUpdate/PermissionsChecker.php +++ b/app/Actions/InstallUpdate/PermissionsChecker.php @@ -6,16 +6,11 @@ class PermissionsChecker { - protected array $results = []; - - /** - * Set the result array permissions and errors. - */ - public function __construct() - { - $this->results['permissions'] = []; - $this->results['errors'] = null; - } + /** @var array{"errors":bool|null,"permissions":array{"folder":string,"permission":(string|int)[][],"isSet":int}[]} */ + protected array $results = [ + 'permissions' => [], + 'errors' => null, + ]; /** * Return true if we are stupid enough to use Windows. @@ -28,9 +23,9 @@ public function is_win(): bool /** * Check for the folders permissions. * - * @param string[] $folders + * @param array $folders * - * @return array + * @return array{"errors":bool|null,"permissions":array{"folder":string,"permission":(string|int)[][],"isSet":int}[]} */ public function check(array $folders): array { @@ -87,6 +82,11 @@ private function addFile(string $folder, string $permission, int $isSet): void /** * map. + * + * @param string $permissions + * @param int $areSet + * + * @return (string|int)[][] */ private function map_perm_set(string $permissions, int $areSet): array { diff --git a/app/Actions/InstallUpdate/RequirementsChecker.php b/app/Actions/InstallUpdate/RequirementsChecker.php index d9bb1bd942..da19491d36 100644 --- a/app/Actions/InstallUpdate/RequirementsChecker.php +++ b/app/Actions/InstallUpdate/RequirementsChecker.php @@ -15,14 +15,16 @@ class RequirementsChecker /** * Check for the server requirements. * - * @param array $requirements + * @param array> $requirements * - * @return array + * @return array{requirements:array>,errors:bool} */ public function check(array $requirements): array { - $results = []; - $results['errors'] = false; + $results = [ + 'errors' => false, + 'requirements' => [], + ]; foreach ($requirements as $type => $requirement_) { if ($type === 'php') { // check php requirements @@ -59,7 +61,7 @@ public function check(array $requirements): array * * @param string|null $minPhpVersion * - * @return array + * @return array{full:string,current:string,minimum:string,supported:bool} */ public function checkPHPVersion(?string $minPhpVersion = null): array { @@ -78,7 +80,7 @@ public function checkPHPVersion(?string $minPhpVersion = null): array /** * Get current Php version information. * - * @return array + * @return array{full:string,version:string} */ private static function getPhpVersionInfo(): array { diff --git a/app/Actions/Photo/Archive.php b/app/Actions/Photo/Archive.php index 326da21980..cad7e4c356 100644 --- a/app/Actions/Photo/Archive.php +++ b/app/Actions/Photo/Archive.php @@ -128,8 +128,8 @@ protected function file(Photo $photo, DownloadVariantType $downloadVariant): Str } /** - * @param Collection $photos - * @param DownloadVariantType $downloadVariant + * @param Collection $photos + * @param DownloadVariantType $downloadVariant * * @return StreamedResponse * diff --git a/app/Actions/Photo/Create.php b/app/Actions/Photo/Create.php index 5fa64921b0..657429ed31 100644 --- a/app/Actions/Photo/Create.php +++ b/app/Actions/Photo/Create.php @@ -185,8 +185,8 @@ private function handleVideoLivePartner(InitDTO $initDTO): Photo * * @template T of VideoPartnerDTO|StandaloneDTO|PhotoPartnerDTO * - * @param array $pipes - * @param T $dto + * @param array $pipes + * @param T $dto * * @return T * diff --git a/app/Actions/Photo/Delete.php b/app/Actions/Photo/Delete.php index 89eddfb6fb..b6af4ee29c 100644 --- a/app/Actions/Photo/Delete.php +++ b/app/Actions/Photo/Delete.php @@ -98,7 +98,7 @@ public function do(array $photoIDs, array $albumIDs = []): FileDeleter * Size variants which belong to a photo which has a duplicate that is * not going to be deleted are skipped. * - * @param array $photoIDs the photo IDs + * @param array $photoIDs the photo IDs * * @return void * @@ -139,7 +139,7 @@ private function collectSizeVariantPathsByPhotoID(array $photoIDs): void * Size variants which belong to a photo which has a duplicate that is * not going to be deleted are skipped. * - * @param array $albumIDs the album IDs + * @param array $albumIDs the album IDs * * @return void * @@ -180,7 +180,7 @@ private function collectSizeVariantPathsByAlbumID(array $albumIDs): void * Live photos which have a duplicate that is not going to be deleted are * skipped. * - * @param array $photoIDs the photo IDs + * @param array $photoIDs the photo IDs * * @return void * @@ -229,7 +229,7 @@ private function collectLivePhotoPathsByPhotoID(array $photoIDs) * Live photos which have a duplicate that is not going to be deleted are * skipped. * - * @param array $albumIDs the album IDs + * @param array $albumIDs the album IDs * * @return void * @@ -274,7 +274,7 @@ private function collectLivePhotoPathsByAlbumID(array $albumIDs) /** * Collects all symbolic links which shall be deleted from disk. * - * @param array $photoIDs the photo IDs + * @param array $photoIDs the photo IDs * * @return void * @@ -304,7 +304,7 @@ private function collectSymLinksByPhotoID(array $photoIDs): void /** * Collects all symbolic links which shall be deleted from disk. * - * @param array $albumIDs the album IDs + * @param array $albumIDs the album IDs * * @return void * @@ -338,8 +338,8 @@ private function collectSymLinksByAlbumID(array $albumIDs): void * The records are deleted in such an order that foreign keys are not * broken. * - * @param array $photoIDs the photo IDs - * @param array $albumIDs the album IDs + * @param array $photoIDs the photo IDs + * @param array $albumIDs the album IDs * * @return void * diff --git a/app/Actions/Photo/Duplicate.php b/app/Actions/Photo/Duplicate.php index a72078aa76..29d30ec450 100644 --- a/app/Actions/Photo/Duplicate.php +++ b/app/Actions/Photo/Duplicate.php @@ -13,10 +13,10 @@ class Duplicate /** * Duplicates a set of photos. * - * @param EloquentCollection $photos the source photos - * @param Album|null $album the destination album; `null` means root album + * @param EloquentCollection $photos the source photos + * @param Album|null $album the destination album; `null` means root album * - * @return BaseCollection the duplicates + * @return BaseCollection the duplicates * * @throws ModelDBException */ diff --git a/app/Actions/RSS/Generate.php b/app/Actions/RSS/Generate.php index 2620e8b5b4..2589024bcd 100644 --- a/app/Actions/RSS/Generate.php +++ b/app/Actions/RSS/Generate.php @@ -51,7 +51,7 @@ private function toFeedItem(Photo $photo_model): FeedItem } /** - * @return Collection + * @return Collection * * @throws InternalLycheeException */ diff --git a/app/Actions/Search/AlbumSearch.php b/app/Actions/Search/AlbumSearch.php index 9c06040ae3..0ce9b6a08d 100644 --- a/app/Actions/Search/AlbumSearch.php +++ b/app/Actions/Search/AlbumSearch.php @@ -4,6 +4,7 @@ use App\Contracts\Exceptions\InternalLycheeException; use App\DTO\AlbumSortingCriterion; +use App\Eloquent\FixedQueryBuilder; use App\Exceptions\Internal\QueryBuilderException; use App\Models\Album; use App\Models\Builders\AlbumBuilder; @@ -25,7 +26,7 @@ public function __construct(AlbumQueryPolicy $albumQueryPolicy) /** * @param string[] $terms * - * @returns Collection + * @return Collection * * @throws InternalLycheeException */ @@ -40,6 +41,7 @@ public function queryTagAlbums(array $terms): Collection $sorting = AlbumSortingCriterion::createDefault(); + /** @phpstan-ignore-next-line */ return (new SortingDecorator($albumQuery)) ->orderBy($sorting->column, $sorting->order) ->get(); @@ -48,7 +50,7 @@ public function queryTagAlbums(array $terms): Collection /** * @param string[] $terms * - * @returns Collection + * @return Collection * * @throws InternalLycheeException */ @@ -62,6 +64,7 @@ public function queryAlbums(array $terms): Collection $sorting = AlbumSortingCriterion::createDefault(); + /** @phpstan-ignore-next-line */ return (new SortingDecorator($albumQuery)) ->orderBy($sorting->column, $sorting->order) ->get(); @@ -70,18 +73,18 @@ public function queryAlbums(array $terms): Collection /** * Adds the search conditions to the provided query builder. * - * @param string[] $terms - * @param AlbumBuilder|TagAlbumBuilder $query + * @param string[] $terms + * @param AlbumBuilder|TagAlbumBuilder|FixedQueryBuilder|FixedQueryBuilder $query * * @return void * * @throws QueryBuilderException */ - private function addSearchCondition(array $terms, AlbumBuilder|TagAlbumBuilder $query): void + private function addSearchCondition(array $terms, AlbumBuilder|TagAlbumBuilder|FixedQueryBuilder $query): void { foreach ($terms as $term) { $query->where( - fn (AlbumBuilder|TagAlbumBuilder $query) => $query + fn (AlbumBuilder|TagAlbumBuilder|FixedQueryBuilder $query) => $query ->where('base_albums.title', 'like', '%' . $term . '%') ->orWhere('base_albums.description', 'like', '%' . $term . '%') ); diff --git a/app/Actions/Search/PhotoSearch.php b/app/Actions/Search/PhotoSearch.php index 798f5d35b9..f8dd08c8f0 100644 --- a/app/Actions/Search/PhotoSearch.php +++ b/app/Actions/Search/PhotoSearch.php @@ -24,6 +24,10 @@ public function __construct(PhotoQueryPolicy $photoQueryPolicy) /** * Apply search directly. * + * @param array $terms + * + * @return Collection photos + * * @throws InternalLycheeException */ public function query(array $terms): Collection @@ -38,10 +42,10 @@ public function query(array $terms): Collection /** * Create the query manually. * - * @param array $terms - * @param Album|null $album the optional top album which is used as a search base + * @param array $terms + * @param Album|null $album the optional top album which is used as a search base * - * @return Builder + * @return FixedQueryBuilder */ public function sqlQuery(array $terms, ?Album $album = null): Builder { diff --git a/app/Actions/Sharing/ListShare.php b/app/Actions/Sharing/ListShare.php index 8676d3afa1..a00796019d 100644 --- a/app/Actions/Sharing/ListShare.php +++ b/app/Actions/Sharing/ListShare.php @@ -105,6 +105,7 @@ private function breadcrumbPath(object $album): string return implode('/', $title); } + /** @phpstan-ignore-next-line */ private function linkAlbums(Collection $albums): void { if ($albums->isEmpty()) { diff --git a/app/Actions/Sharing/ListedAlbum.php b/app/Actions/Sharing/ListedAlbum.php index d336b05513..a02cbd1ec2 100644 --- a/app/Actions/Sharing/ListedAlbum.php +++ b/app/Actions/Sharing/ListedAlbum.php @@ -3,9 +3,10 @@ namespace App\Actions\Sharing; /** - * @property string $id - * @property string $title - * @property string $parent_id + * @property string $id + * @property string $title + * @property string $parent_id + * @property ?ListedAlbum $parent */ class ListedAlbum { diff --git a/app/Assets/ArrayToTextTable.php b/app/Assets/ArrayToTextTable.php index 1fd7947ab2..27d8e44c29 100644 --- a/app/Assets/ArrayToTextTable.php +++ b/app/Assets/ArrayToTextTable.php @@ -27,7 +27,7 @@ class ArrayToTextTable public const ALIGNCENTER = STR_PAD_BOTH; public const ALIGNRIGHT = STR_PAD_LEFT; - /** @var array */ + /** @var array> */ protected array $data; /** @var array */ protected array $keys; @@ -46,7 +46,7 @@ class ArrayToTextTable /** * Create a table. * - * @param array $rawData + * @param array> $rawData * * @return void */ @@ -71,7 +71,7 @@ public function __toString(): string /** * return the table. * - * @param array|null $rawData + * @param array|object>|null $rawData * * @return string * @@ -121,7 +121,7 @@ public function getTable(?array $rawData = null): string } /** - * @param array|null $data + * @param array|object>|null $data * * @return self */ @@ -222,6 +222,15 @@ protected function line(string $left, string $horizontal, string $link, string $ return $line . $right; } + /** + * @param array $row + * @param int $alignment + * + * @return array + * + * @throws MbstringException + * @throws PcreException + */ protected function row(array $row, int $alignment): array { $data = []; @@ -243,6 +252,15 @@ protected function row(array $row, int $alignment): array return $rowLines; } + /** + * @param array $row + * @param int $alignment + * + * @return string + * + * @throws MbstringException + * @throws PcreException + */ protected function rowLine(array $row, int $alignment): string { $line = $this->decorator->getVertical(); @@ -261,7 +279,7 @@ protected function rowLine(array $row, int $alignment): string } /** - * @return array + * @return array> * * @throws PcreException */ @@ -316,6 +334,11 @@ protected function setWidth(string $key, ?string $value): void } } + /** + * @param string|null $value + * + * @return array + */ protected static function valueToLines(?string $value): array { return explode("\n", $value); diff --git a/app/Assets/Features.php b/app/Assets/Features.php index 2489e84d91..71e7409ace 100644 --- a/app/Assets/Features.php +++ b/app/Assets/Features.php @@ -110,12 +110,9 @@ public static function someAreInactive(array $featureNames): bool */ public static function when(string|array $featureNames, mixed $valIfTrue, mixed $valIfFalse): mixed { - // Sadly phpstan does not do the type inference as it would do in a if statement. $retValue = match (is_array($featureNames)) { - true => self::allAreActive($featureNames) ? $valIfTrue : $valIfFalse, // @phpstan-ignore-line - // Parameter #1 $featureNames of static method App\Assets\Features::allAreActive() expects array, array|string given. - false => self::active($featureNames) ? $valIfTrue : $valIfFalse, // @phpstan-ignore-line - // Parameter #1 $featureName of static method App\Assets\Features::active() expects string, array|string given. + true => self::allAreActive($featureNames) ? $valIfTrue : $valIfFalse, + false => self::active($featureNames) ? $valIfTrue : $valIfFalse, }; return is_callable($retValue) ? $retValue() : $retValue; diff --git a/app/Casts/ArrayCast.php b/app/Casts/ArrayCast.php index 18e8bfd31f..f7e3fbdaa6 100644 --- a/app/Casts/ArrayCast.php +++ b/app/Casts/ArrayCast.php @@ -5,30 +5,33 @@ use Illuminate\Contracts\Database\Eloquent\CastsAttributes; use Illuminate\Database\Eloquent\Model; +/** + * @implements CastsAttributes + */ class ArrayCast implements CastsAttributes { /** - * @param Model $model the associated model class - * @param string $key the name of the SQL column holding the stringified array - * @param mixed $value the stringified array - * @param array $attributes all SQL attributes of the entity + * @param Model $model the associated model class + * @param string $key the name of the SQL column holding the stringified array + * @param mixed $value the stringified array + * @param array $attributes all SQL attributes of the entity * - * @return array the array + * @return array the array */ - public function get($model, string $key, $value, array $attributes): array + public function get(Model $model, string $key, mixed $value, array $attributes): array { return ($value === null || $value === '') ? [] : explode(',', strval($value)); } /** - * @param Model $model the associated model class - * @param string $key the name of the SQL column holding the stringified array - * @param mixed $value the array - * @param array $attributes + * @param Model $model the associated model class + * @param string $key the name of the SQL column holding the stringified array + * @param (string|null)[]|null $value the array + * @param array $attributes * - * @return array An associative map of SQL columns and their values + * @return array An associative map of SQL columns and their values */ - public function set($model, string $key, $value, array $attributes): array + public function set(Model $model, string $key, mixed $value, array $attributes): array { // Normalize the input value // The array must not contain empty tags and tags which contain a comma diff --git a/app/Casts/DateTimeWithTimezoneCast.php b/app/Casts/DateTimeWithTimezoneCast.php index 42986c774e..8484e1a945 100644 --- a/app/Casts/DateTimeWithTimezoneCast.php +++ b/app/Casts/DateTimeWithTimezoneCast.php @@ -11,6 +11,9 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Carbon; +/** + * @implements CastsAttributes + */ class DateTimeWithTimezoneCast implements CastsAttributes { public const TZ_ATTRIBUTE_SUFFIX = '_orig_tz'; @@ -25,10 +28,10 @@ class DateTimeWithTimezoneCast implements CastsAttributes * $key . '_orig_tz' and which stores the original timezone of the * (key, value)-pair at hand. * - * @param Model $model the associated model class - * @param string $key the name of the SQL column holding the datetime - * @param mixed $value the SQL datetime string - * @param array $attributes all SQL attributes of the entity + * @param Model $model the associated model class + * @param string $key the name of the SQL column holding the datetime + * @param mixed $value the SQL datetime string + * @param array $attributes all SQL attributes of the entity * * @return Carbon|null The Carbon object with a properly set timezone * @@ -38,7 +41,7 @@ class DateTimeWithTimezoneCast implements CastsAttributes * @throws InvalidFormatException * @throws InvalidTimeZoneException */ - public function get($model, string $key, $value, array $attributes): ?Carbon + public function get(Model $model, string $key, $value, array $attributes): ?Carbon { $tzKey = $key . self::TZ_ATTRIBUTE_SUFFIX; if ($value === null) { @@ -66,17 +69,17 @@ public function get($model, string $key, $value, array $attributes): ?Carbon /** * Converts the given value into an SQL string for storage. * - * @param Model $model the associated model class - * @param string $key the name of the SQL column holding the datetime - * @param mixed $value the Carbon object of the model - * @param array $attributes + * @param Model $model the associated model class + * @param string $key the name of the SQL column holding the datetime + * @param Carbon|null $value the Carbon object of the model + * @param array $attributes * - * @return array An associative map of SQL columns and their values + * @return array An associative map of SQL columns and their values * * @throws LycheeInvalidArgumentException * @throws InvalidTimeZoneException */ - public function set($model, string $key, $value, array $attributes): array + public function set(Model $model, string $key, mixed $value, array $attributes): array { if ($value !== null && !($value instanceof Carbon)) { $type = gettype($value); diff --git a/app/Casts/MustNotSetCast.php b/app/Casts/MustNotSetCast.php index bf75f8e2c9..e0216775c7 100644 --- a/app/Casts/MustNotSetCast.php +++ b/app/Casts/MustNotSetCast.php @@ -51,7 +51,8 @@ public function __construct(?string $alternative = null) * * @throws IllegalOrderOfOperationException */ - public function set($model, string $key, $value, array $attributes): void + /** @phpstan-ignore-next-line Assigning type to array breaks contra-variance */ + public function set(Model $model, string $key, mixed $value, array $attributes): void { $msg = 'must not set read-only attribute \'' . get_class($model) . '::$' . $key . '\' directly'; if ($this->alternative !== null) { diff --git a/app/Console/Commands/Ghostbuster.php b/app/Console/Commands/Ghostbuster.php index 26479f5033..3d052500af 100644 --- a/app/Console/Commands/Ghostbuster.php +++ b/app/Console/Commands/Ghostbuster.php @@ -121,11 +121,11 @@ public function handle(): int $isDeadSymlink = is_link($fullPath) && !file_exists(readlink($fullPath)); } - /** @var Collection $photos */ + /** @var Collection $photos */ $photos = Photo::query() ->where('live_photo_short_path', '=', $filename) ->get(); - /** @var Collection $sizeVariants */ + /** @var Collection $sizeVariants */ $sizeVariants = SizeVariant::query() ->with('photo') ->where('short_path', '=', $filename) diff --git a/app/Contracts/DTO.php b/app/Contracts/DTO.php index 3719af9938..eee5059180 100644 --- a/app/Contracts/DTO.php +++ b/app/Contracts/DTO.php @@ -13,6 +13,10 @@ * We use DTOs as result types for some controller methods which do not * return proper models. * Thereby we avoid using associative arrays and have a bit more type safety. + * + * @template TValue + * + * @extends Arrayable */ interface DTO extends Arrayable, Jsonable, \JsonSerializable { @@ -34,7 +38,7 @@ public function toJson($options = 0): string; * * @see Arrayable::toArray() * - * @return array The serialized properties of this object + * @return array The serialized properties of this object * * @throws \JsonException */ diff --git a/app/Contracts/Http/Requests/HasAlbums.php b/app/Contracts/Http/Requests/HasAlbums.php index 884ebc42d9..4ff040499d 100644 --- a/app/Contracts/Http/Requests/HasAlbums.php +++ b/app/Contracts/Http/Requests/HasAlbums.php @@ -10,7 +10,7 @@ interface HasAlbums { /** - * @return Collection + * @return Collection */ public function albums(): Collection; } diff --git a/app/Contracts/Http/Requests/HasPhotos.php b/app/Contracts/Http/Requests/HasPhotos.php index 6b0f96826a..26c25a9b77 100644 --- a/app/Contracts/Http/Requests/HasPhotos.php +++ b/app/Contracts/Http/Requests/HasPhotos.php @@ -8,7 +8,7 @@ interface HasPhotos { /** - * @return Collection + * @return Collection */ public function photos(): Collection; } diff --git a/app/Contracts/Http/RuleSet.php b/app/Contracts/Http/RuleSet.php index d2415af9c8..34af3a00ed 100644 --- a/app/Contracts/Http/RuleSet.php +++ b/app/Contracts/Http/RuleSet.php @@ -12,7 +12,7 @@ interface RuleSet /** * Return an array containing the rules to be applied to the request attributes. * - * @return array + * @return array> */ public static function rules(): array; diff --git a/app/Contracts/Models/AbstractAlbum.php b/app/Contracts/Models/AbstractAlbum.php index f9c87c9016..1815804093 100644 --- a/app/Contracts/Models/AbstractAlbum.php +++ b/app/Contracts/Models/AbstractAlbum.php @@ -29,11 +29,13 @@ * @property Collection $photos * @property Thumb|null $thumb * @property Collection $access_permissions + * + * @extends Arrayable */ interface AbstractAlbum extends \JsonSerializable, Arrayable, Jsonable { /** - * @return Relation|Builder + * @return Relation|Builder */ public function photos(): Relation|Builder; diff --git a/app/Contracts/Models/SizeVariantFactory.php b/app/Contracts/Models/SizeVariantFactory.php index 4c915f163f..74c75e69b7 100644 --- a/app/Contracts/Models/SizeVariantFactory.php +++ b/app/Contracts/Models/SizeVariantFactory.php @@ -82,7 +82,7 @@ public function createSizeVariantCond(SizeVariantType $sizeVariant): ?SizeVarian * This method is inapt to create the original size variant. * Use {@link SizeVariantFactory::createOriginal()} for that. * - * @return Collection the collection of created size variants + * @return Collection the collection of created size variants * * @throws LycheeException */ diff --git a/app/Contracts/Versions/Remote/GitRemote.php b/app/Contracts/Versions/Remote/GitRemote.php index d30c96dd04..50cb18070b 100644 --- a/app/Contracts/Versions/Remote/GitRemote.php +++ b/app/Contracts/Versions/Remote/GitRemote.php @@ -9,7 +9,7 @@ interface GitRemote * * @param bool $useCache * - * @return array + * @return object[] */ public function fetchRemote(bool $useCache): array; @@ -17,8 +17,8 @@ public function fetchRemote(bool $useCache): array; * Count the number of elements between current version and remote HEAD. * Do nothing if no data are available. * - * @param array $data fetched from github - * @param string $needle + * @param object[] $data fetched from github + * @param string $needle * * @return int|false Number of elements behind or false if not available */ diff --git a/app/DTO/AbstractDTO.php b/app/DTO/AbstractDTO.php index c1190bd53b..893291b31c 100644 --- a/app/DTO/AbstractDTO.php +++ b/app/DTO/AbstractDTO.php @@ -13,6 +13,10 @@ * We use DTOs as result types for some controller methods which do not * return proper models. * Thereby we avoid using associative arrays and have a bit more type safety. + * + * @template TValue + * + * @implements DTO */ abstract class AbstractDTO implements DTO { @@ -55,7 +59,7 @@ public function toJson($options = 0): string * * @see Arrayable::toArray() * - * @return array The serialized properties of this object + * @return array The serialized properties of this object * * @throws \JsonException */ diff --git a/app/DTO/ArrayableDTO.php b/app/DTO/ArrayableDTO.php index 2d9fb51324..b235fc9c67 100644 --- a/app/DTO/ArrayableDTO.php +++ b/app/DTO/ArrayableDTO.php @@ -9,13 +9,15 @@ * In some cases, when a DTO does not need to apply casts on attributes * we can directly make use of a reflection which returns an array containing * all the PUBLIC attributes of the DTO. + * + * @extends AbstractDTO */ class ArrayableDTO extends AbstractDTO { /** * By default, we return an array containing the PUBLIC attributes of the DTO. * - * @return array the serialized properties of this object + * @return array the serialized properties of this object */ public function toArray(): array { diff --git a/app/DTO/BacktraceRecord.php b/app/DTO/BacktraceRecord.php index 1b4de97d37..2f0ac7e8f6 100644 --- a/app/DTO/BacktraceRecord.php +++ b/app/DTO/BacktraceRecord.php @@ -4,6 +4,9 @@ use Illuminate\Support\Str; +/** + * @extends AbstractDTO + */ class BacktraceRecord extends AbstractDTO { public const UNKNOWN_PLACEHOLDER = ''; diff --git a/app/DTO/BaseImportReport.php b/app/DTO/BaseImportReport.php index a60400c37c..32ac42743c 100644 --- a/app/DTO/BaseImportReport.php +++ b/app/DTO/BaseImportReport.php @@ -15,6 +15,8 @@ * Hence, errors cannot be reported using the normal exception handling * mechanism, but must be reported "inline" within the streamed response * as an event report. + * + * @extends AbstractDTO */ abstract class BaseImportReport extends AbstractDTO { diff --git a/app/Eloquent/FixedQueryBuilderTrait.php b/app/Eloquent/FixedQueryBuilderTrait.php index 489b2bdd33..cf037c8fda 100644 --- a/app/Eloquent/FixedQueryBuilderTrait.php +++ b/app/Eloquent/FixedQueryBuilderTrait.php @@ -168,13 +168,13 @@ public function join($table, $first, $operator = null, $second = null, $type = ' /** * Add a subquery join clause to the query. * - * @param \Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder|string $query - * @param string $as - * @param \Closure|string $first - * @param string|null $operator - * @param string|null $second - * @param string $type - * @param bool $where + * @param \Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder|string $query + * @param string $as + * @param \Closure|string $first + * @param string|null $operator + * @param string|null $second + * @param string $type + * @param bool $where * * @return $this * @@ -219,8 +219,8 @@ public function leftJoin($table, $first, $operator = null, $second = null): stat /** * Add an "order by" clause to the query. * - * @param \Closure|Builder|BaseBuilder|Expression|string $column - * @param string $direction + * @param \Closure|Builder|BaseBuilder|Expression|string $column + * @param string $direction * * @return $this * diff --git a/app/Enum/LicenseType.php b/app/Enum/LicenseType.php index ca0e7dc93b..94ede45654 100644 --- a/app/Enum/LicenseType.php +++ b/app/Enum/LicenseType.php @@ -48,7 +48,7 @@ enum LicenseType: string /** * Given return the array of localized name. * - * @return array + * @return array */ public static function localized(): array { diff --git a/app/Enum/Traits/DecorateBackedEnum.php b/app/Enum/Traits/DecorateBackedEnum.php index ee02504e7f..46e168ff46 100644 --- a/app/Enum/Traits/DecorateBackedEnum.php +++ b/app/Enum/Traits/DecorateBackedEnum.php @@ -31,7 +31,7 @@ trait DecorateBackedEnum /** * Returns a list of name covered by the enum. * - * @return array + * @return string[] */ public static function names(): array { @@ -41,7 +41,7 @@ public static function names(): array /** * Returns a list of values covered by the enum. * - * @return array + * @return (string|int)[] */ public static function values(): array { @@ -51,7 +51,7 @@ public static function values(): array /** * Returns an associative array [name => value]. * - * @return array + * @return array */ public static function array(): array { diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 4e2dd7478b..df567795dd 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -347,7 +347,7 @@ protected function renderHttpException(HttpExceptionInterface $e): SymfonyRespon * * @param \Throwable $e * - * @return array + * @return array */ protected function convertExceptionToArray(\Throwable $e): array { @@ -378,7 +378,7 @@ protected function convertExceptionToArray(\Throwable $e): array * * @param \Throwable|null $e * - * @return ($e is null ? null : array) + * @return ($e is null ? null : array) */ private function convertDebugExceptionToArray(\Throwable|null $e): array|null { diff --git a/app/Factories/AlbumFactory.php b/app/Factories/AlbumFactory.php index c8f4f1ffa1..0aba502ced 100644 --- a/app/Factories/AlbumFactory.php +++ b/app/Factories/AlbumFactory.php @@ -99,8 +99,8 @@ public function findBaseAlbumOrFail(string $albumID, bool $withRelations = true) * album (i.e. photos and sub-albums, * if applicable) shall be loaded, too. * - * @return Collection a possibly empty list of - * {@link AbstractAlbum} + * @return Collection a possibly empty list of + * {@link AbstractAlbum} * * @throws ModelNotFoundException */ @@ -122,6 +122,7 @@ public function findAbstractAlbumsOrFail(array $albumIDs, bool $withRelations = } } + /** @phpstan-ignore-next-line phpstan stan complain of incompatibility of types while both are subtypes... */ return new Collection(array_merge( $smartAlbums, $this->findBaseAlbumsOrFail($modelAlbumIDs, $withRelations)->all() @@ -137,7 +138,7 @@ public function findAbstractAlbumsOrFail(array $albumIDs, bool $withRelations = * album (i.e. photos and sub-albums, * if applicable) shall be loaded, too. * - * @return Collection a possibly empty list of {@link BaseAlbum} + * @return Collection a possibly empty list of {@link BaseAlbum} * * @throws ModelNotFoundException */ @@ -156,7 +157,7 @@ public function findBaseAlbumsOrFail(array $albumIDs, bool $withRelations = true $albumQuery->with(['photos', 'children', 'photos.size_variants']); } - /** @var Collection $result */ + /** @var Collection $result */ $result = new Collection(array_merge( $tagAlbumQuery->findMany($albumIDs)->all(), $albumQuery->findMany($albumIDs)->all(), @@ -177,7 +178,7 @@ public function findBaseAlbumsOrFail(array $albumIDs, bool $withRelations = true * {@link BaseSmartAlbum::photos()} * for each smart album * - * @return Collection + * @return Collection * * @throws InvalidSmartIdException */ diff --git a/app/Http/Controllers/Administration/JobController.php b/app/Http/Controllers/Administration/JobController.php index e36bfe6bfe..e83ea7912b 100644 --- a/app/Http/Controllers/Administration/JobController.php +++ b/app/Http/Controllers/Administration/JobController.php @@ -15,7 +15,7 @@ class JobController extends Controller /** * @param string $order * - * @return Collection + * @return Collection * * @throws QueryBuilderException */ diff --git a/app/Http/Controllers/Administration/SettingsController.php b/app/Http/Controllers/Administration/SettingsController.php index 537911545e..b5adf32ba3 100644 --- a/app/Http/Controllers/Administration/SettingsController.php +++ b/app/Http/Controllers/Administration/SettingsController.php @@ -394,7 +394,7 @@ public function setJS(SetJSSettingRequest $request): void * Fortunately, this is behind an admin middleware. * This is used in the advanced settings part. * - * @return Collection + * @return Collection * * @throws QueryBuilderException */ diff --git a/app/Http/Controllers/Administration/SharingController.php b/app/Http/Controllers/Administration/SharingController.php index 12da811488..c2f865dc45 100644 --- a/app/Http/Controllers/Administration/SharingController.php +++ b/app/Http/Controllers/Administration/SharingController.php @@ -82,7 +82,7 @@ public function setByAlbum(SetSharesByAlbumRequest $request): void */ private function updateLinks(array $userIds, array $albumIDs): void { - /** @var Collection $users */ + /** @var Collection $users */ $users = User::query() ->whereIn('id', $userIds) ->get(); diff --git a/app/Http/Controllers/PhotoController.php b/app/Http/Controllers/PhotoController.php index bf639e50ea..b45c415f28 100644 --- a/app/Http/Controllers/PhotoController.php +++ b/app/Http/Controllers/PhotoController.php @@ -89,10 +89,9 @@ public function getRandom(PhotoQueryPolicy $photoQueryPolicy): PhotoResource ->with(['album', 'size_variants', 'size_variants.sym_links']); } - // PHPStan does not understand that `firstOrFail` returns `Photo`, but assumes that it returns `Model` - // @phpstan-ignore-next-line - return PhotoResource::make($query->inRandomOrder() - ->firstOrFail()); + $num = $query->count() - 1; + + return PhotoResource::make($query->skip(rand(0, $num))->firstOrFail()); } /** diff --git a/app/Http/Controllers/RSSController.php b/app/Http/Controllers/RSSController.php index 41be056130..482073df6b 100644 --- a/app/Http/Controllers/RSSController.php +++ b/app/Http/Controllers/RSSController.php @@ -8,13 +8,14 @@ use App\Models\Configs; use Illuminate\Routing\Controller; use Illuminate\Support\Collection; +use Spatie\Feed\FeedItem; class RSSController extends Controller { /** * @param Generate $generate * - * @return Collection + * @return Collection * * @throws LycheeException */ diff --git a/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php b/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php index 18f7703b28..da1651dbcf 100644 --- a/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php +++ b/app/Http/Controllers/WebAuthn/WebAuthnLoginController.php @@ -81,7 +81,7 @@ public function login(AssertedRequest $request, AssertionValidator $validator): /** * Check if the credentials are for a public key signed challenge. * - * @param array $credentials + * @param array $credentials * * @return bool */ @@ -93,7 +93,7 @@ private function isSignedChallenge(array $credentials): bool /** * Retrieve a user by the given credentials. * - * @param array $credentials + * @param array $credentials * * @return User|null */ diff --git a/app/Http/Controllers/WebAuthn/WebAuthnManageController.php b/app/Http/Controllers/WebAuthn/WebAuthnManageController.php index ff9ec8d9e2..c3e2055a0a 100644 --- a/app/Http/Controllers/WebAuthn/WebAuthnManageController.php +++ b/app/Http/Controllers/WebAuthn/WebAuthnManageController.php @@ -12,6 +12,8 @@ class WebAuthnManageController { /** * @throws UnauthenticatedException + * + * @phpstan-ignore-next-line unused... */ public function list(ListCredentialsRequest $request): Collection { diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 74b55da01b..3428514285 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -46,6 +46,19 @@ class Kernel extends HttpKernel \App\Http\Middleware\QueryStringFixer::class, ], + 'web-livewire' => [ + 'accept_content_type:html', + \Illuminate\Cookie\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + \App\Http\Middleware\DisableCSP::class, + \App\Http\Middleware\QueryStringFixer::class, + ], + 'web-admin' => [ 'accept_content_type:html', \Illuminate\Cookie\Middleware\EncryptCookies::class, @@ -64,8 +77,6 @@ class Kernel extends HttpKernel ], 'api' => [ - 'installation:complete', - 'admin_user:set', 'accept_content_type:json', 'content_type:json', \Illuminate\Cookie\Middleware\EncryptCookies::class, diff --git a/app/Http/Middleware/AcceptContentType.php b/app/Http/Middleware/AcceptContentType.php index c696f33798..2b8809f9b6 100644 --- a/app/Http/Middleware/AcceptContentType.php +++ b/app/Http/Middleware/AcceptContentType.php @@ -22,7 +22,7 @@ class AcceptContentType /** * The URIs that should be excluded from CSRF verification. * - * @var array + * @var array */ protected $except = [ 'livewire/upload-file', diff --git a/app/Http/Requests/AbstractEmptyRequest.php b/app/Http/Requests/AbstractEmptyRequest.php index e0a70722a8..7ef6611394 100644 --- a/app/Http/Requests/AbstractEmptyRequest.php +++ b/app/Http/Requests/AbstractEmptyRequest.php @@ -2,17 +2,12 @@ namespace App\Http\Requests; -use App\Exceptions\Internal\InvalidSmartIdException; -use App\Exceptions\Internal\QueryBuilderException; -use Illuminate\Database\Eloquent\ModelNotFoundException; -use Illuminate\Http\UploadedFile; - abstract class AbstractEmptyRequest extends BaseApiRequest { /** * Returns the validation rules that apply to the request. * - * @return array + * {@inheritDoc} */ public function rules(): array { @@ -20,16 +15,9 @@ public function rules(): array } /** - * Post-processes the validated values. - * - * @param array $values - * @param UploadedFile[] $files - * - * @return void + * Returns the validation rules that apply to the request. * - * @throws ModelNotFoundException - * @throws InvalidSmartIdException - * @throws QueryBuilderException + * {@inheritDoc} */ protected function processValidatedValues(array $values, array $files): void { diff --git a/app/Http/Requests/Album/ArchiveAlbumsRequest.php b/app/Http/Requests/Album/ArchiveAlbumsRequest.php index ba85d9d000..05de00bfbb 100644 --- a/app/Http/Requests/Album/ArchiveAlbumsRequest.php +++ b/app/Http/Requests/Album/ArchiveAlbumsRequest.php @@ -16,6 +16,7 @@ */ class ArchiveAlbumsRequest extends BaseApiRequest implements HasAlbums { + /** @use HasAlbumsTrait */ use HasAlbumsTrait; /** diff --git a/app/Http/Requests/Album/SetAlbumsTitleRequest.php b/app/Http/Requests/Album/SetAlbumsTitleRequest.php index fe78d9b965..6a68b27855 100644 --- a/app/Http/Requests/Album/SetAlbumsTitleRequest.php +++ b/app/Http/Requests/Album/SetAlbumsTitleRequest.php @@ -19,11 +19,12 @@ * * SetAlbumsTitleRuleSet ensure that we are actually dealing with BaseAlbum * - * @implements HasAlbums + * @implements HasAlbums<\App\Models\Album|\App\Models\TagAlbum> */ class SetAlbumsTitleRequest extends BaseApiRequest implements HasTitle, HasAlbums { use HasTitleTrait; + /** @use HasAlbumsTrait<\App\Models\Album|\App\Models\TagAlbum> */ use HasAlbumsTrait; /** diff --git a/app/Http/Requests/BaseApiRequest.php b/app/Http/Requests/BaseApiRequest.php index 3b6ad27753..eb1fbb0ffb 100644 --- a/app/Http/Requests/BaseApiRequest.php +++ b/app/Http/Requests/BaseApiRequest.php @@ -23,6 +23,8 @@ abstract class BaseApiRequest extends FormRequest /** * @throws FrameworkException + * + * @phpstan-ignore-next-line */ public function __construct( array $query = [], @@ -141,15 +143,15 @@ abstract public function authorize(): bool; /** * Returns the validation rules that apply to the request. * - * @return array + * @return array> */ abstract public function rules(): array; /** * Post-processes the validated values. * - * @param array $values - * @param UploadedFile[] $files + * @param array $values + * @param UploadedFile[] $files * * @return void * diff --git a/app/Http/Requests/Install/SetUpAdminRequest.php b/app/Http/Requests/Install/SetUpAdminRequest.php index ec1c5ef273..32ce5c0aad 100644 --- a/app/Http/Requests/Install/SetUpAdminRequest.php +++ b/app/Http/Requests/Install/SetUpAdminRequest.php @@ -18,6 +18,9 @@ class SetUpAdminRequest extends FormRequest implements HasUsername, HasPassword protected $errorBag = 'errors'; + /** + * @return array> + */ public function rules(): array { return [ diff --git a/app/Http/Requests/Photo/ArchivePhotosRequest.php b/app/Http/Requests/Photo/ArchivePhotosRequest.php index f00a91129c..245e22d8c4 100644 --- a/app/Http/Requests/Photo/ArchivePhotosRequest.php +++ b/app/Http/Requests/Photo/ArchivePhotosRequest.php @@ -61,8 +61,8 @@ protected function processValidatedValues(array $values, array $files): void 'size_variants' => fn (HasMany $r) => $r->where('type', '=', $variant), ]); } - // `findOrFail` returns the union `Photo|Collection` - // which is not assignable to `Collection`; but as we query + // `findOrFail` returns the union `Photo|Collection` + // which is not assignable to `Collection`; but as we query // with an array of IDs we never get a single entity (even if the // array only contains a single ID). $this->photos = $photoQuery->findOrFail( diff --git a/app/Http/Requests/Photo/DuplicatePhotosRequest.php b/app/Http/Requests/Photo/DuplicatePhotosRequest.php index b990e2f8c5..9e4c708306 100644 --- a/app/Http/Requests/Photo/DuplicatePhotosRequest.php +++ b/app/Http/Requests/Photo/DuplicatePhotosRequest.php @@ -32,7 +32,7 @@ public function rules(): array */ protected function processValidatedValues(array $values, array $files): void { - /** @var array $photosIDs */ + /** @var array $photosIDs */ $photosIDs = $values[RequestAttribute::PHOTO_IDS_ATTRIBUTE]; $this->photos = Photo::query() ->with(['size_variants']) diff --git a/app/Http/Requests/Photo/MovePhotosRequest.php b/app/Http/Requests/Photo/MovePhotosRequest.php index f20876be67..ade8dddd8d 100644 --- a/app/Http/Requests/Photo/MovePhotosRequest.php +++ b/app/Http/Requests/Photo/MovePhotosRequest.php @@ -32,7 +32,7 @@ public function rules(): array */ protected function processValidatedValues(array $values, array $files): void { - /** @var array $photosIDs */ + /** @var array $photosIDs */ $photosIDs = $values[RequestAttribute::PHOTO_IDS_ATTRIBUTE]; $this->photos = Photo::query() ->findOrFail($photosIDs); diff --git a/app/Http/Requests/Photo/SetPhotosStarredRequest.php b/app/Http/Requests/Photo/SetPhotosStarredRequest.php index 7561c12dd8..4fb759fd0a 100644 --- a/app/Http/Requests/Photo/SetPhotosStarredRequest.php +++ b/app/Http/Requests/Photo/SetPhotosStarredRequest.php @@ -35,7 +35,7 @@ public function rules(): array */ protected function processValidatedValues(array $values, array $files): void { - /** @var array $photosIDs */ + /** @var array $photosIDs */ $photosIDs = $values[RequestAttribute::PHOTO_IDS_ATTRIBUTE]; $this->photos = Photo::query()->findOrFail($photosIDs); $this->isStarred = static::toBoolean($values[RequestAttribute::IS_STARRED_ATTRIBUTE]); diff --git a/app/Http/Requests/Photo/SetPhotosTagsRequest.php b/app/Http/Requests/Photo/SetPhotosTagsRequest.php index 61ae13c1c4..8ea92d234e 100644 --- a/app/Http/Requests/Photo/SetPhotosTagsRequest.php +++ b/app/Http/Requests/Photo/SetPhotosTagsRequest.php @@ -33,7 +33,7 @@ public function rules(): array */ protected function processValidatedValues(array $values, array $files): void { - /** @var array $photosIDs */ + /** @var array $photosIDs */ $photosIDs = $values[RequestAttribute::PHOTO_IDS_ATTRIBUTE]; $this->photos = Photo::query()->findOrFail($photosIDs); $this->tags = $values[RequestAttribute::TAGS_ATTRIBUTE]; diff --git a/app/Http/Requests/Photo/SetPhotosTitleRequest.php b/app/Http/Requests/Photo/SetPhotosTitleRequest.php index 78ff124232..de51cfa326 100644 --- a/app/Http/Requests/Photo/SetPhotosTitleRequest.php +++ b/app/Http/Requests/Photo/SetPhotosTitleRequest.php @@ -31,7 +31,7 @@ public function rules(): array */ protected function processValidatedValues(array $values, array $files): void { - /** @var array $photosIDs */ + /** @var array $photosIDs */ $photosIDs = $values[RequestAttribute::PHOTO_IDS_ATTRIBUTE]; $this->photos = Photo::query()->findOrFail($photosIDs); $this->title = $values[RequestAttribute::TITLE_ATTRIBUTE]; diff --git a/app/Http/Requests/Traits/HasAlbumsTrait.php b/app/Http/Requests/Traits/HasAlbumsTrait.php index 950b511e23..2d72661af3 100644 --- a/app/Http/Requests/Traits/HasAlbumsTrait.php +++ b/app/Http/Requests/Traits/HasAlbumsTrait.php @@ -10,12 +10,12 @@ trait HasAlbumsTrait { /** - * @var Collection + * @var Collection */ protected Collection $albums; /** - * @return Collection + * @return Collection */ public function albums(): Collection { diff --git a/app/Http/Requests/Traits/HasPhotosTrait.php b/app/Http/Requests/Traits/HasPhotosTrait.php index bc0f5e72c1..aabf64f753 100644 --- a/app/Http/Requests/Traits/HasPhotosTrait.php +++ b/app/Http/Requests/Traits/HasPhotosTrait.php @@ -8,12 +8,12 @@ trait HasPhotosTrait { /** - * @var Collection + * @var Collection */ protected Collection $photos; /** - * @return Collection + * @return Collection */ public function photos(): Collection { diff --git a/app/Http/Resources/Collections/AlbumForestResource.php b/app/Http/Resources/Collections/AlbumForestResource.php index 03b59854ed..dacfea4503 100644 --- a/app/Http/Resources/Collections/AlbumForestResource.php +++ b/app/Http/Resources/Collections/AlbumForestResource.php @@ -11,6 +11,12 @@ */ class AlbumForestResource extends JsonResource { + /** + * @param Collection $albums + * @param Collection|null $sharedAlbums + * + * @return void + */ public function __construct( public Collection $albums, public ?Collection $sharedAlbums = null @@ -27,7 +33,7 @@ public function __construct( * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Collections/PhotoCollectionResource.php b/app/Http/Resources/Collections/PhotoCollectionResource.php index 8bd1859a07..294a8d112e 100644 --- a/app/Http/Resources/Collections/PhotoCollectionResource.php +++ b/app/Http/Resources/Collections/PhotoCollectionResource.php @@ -25,7 +25,7 @@ class PhotoCollectionResource extends ResourceCollection * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Collections/PositionDataResource.php b/app/Http/Resources/Collections/PositionDataResource.php index d07a29c60e..3671690345 100644 --- a/app/Http/Resources/Collections/PositionDataResource.php +++ b/app/Http/Resources/Collections/PositionDataResource.php @@ -16,10 +16,10 @@ class PositionDataResource extends JsonResource public ?string $track_url; /** - * @param string|null $id the ID of the album; `null` for root album - * @param string|null $title the title of the album; `null` if untitled - * @param Collection $photos the collection of photos with position data to be shown on map - * @param string|null $track_url the URL of the album's track + * @param string|null $id the ID of the album; `null` for root album + * @param string|null $title the title of the album; `null` if untitled + * @param Collection $photos the collection of photos with position data to be shown on map + * @param string|null $track_url the URL of the album's track */ public function __construct( ?string $id, @@ -38,7 +38,7 @@ public function __construct( * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Collections/TopAlbumsResource.php b/app/Http/Resources/Collections/TopAlbumsResource.php index 8475df74fb..596dedaeb2 100644 --- a/app/Http/Resources/Collections/TopAlbumsResource.php +++ b/app/Http/Resources/Collections/TopAlbumsResource.php @@ -20,6 +20,14 @@ */ class TopAlbumsResource extends JsonResource { + /** + * @param Collection $smart_albums + * @param Collection $tag_albums + * @param Collection $albums + * @param Collection|null $shared_albums + * + * @return void + */ public function __construct( public Collection $smart_albums, public Collection $tag_albums, @@ -37,7 +45,7 @@ public function __construct( * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/ConfigurationResource.php b/app/Http/Resources/ConfigurationResource.php index 879a2ba308..32eb7cc922 100644 --- a/app/Http/Resources/ConfigurationResource.php +++ b/app/Http/Resources/ConfigurationResource.php @@ -36,7 +36,7 @@ public function __construct() * * @param \Illuminate\Http\Request $request * - * @return array + * @return array */ public function toArray($request): array { @@ -65,6 +65,7 @@ public function toArray($request): array } } + /** @phpstan-ignore-next-line */ return [ // Computed 'lang_available' => $this->when(Auth::check(), config('app.supported_locale')), diff --git a/app/Http/Resources/InitResource.php b/app/Http/Resources/InitResource.php index f0b33b559b..4efb9981e8 100644 --- a/app/Http/Resources/InitResource.php +++ b/app/Http/Resources/InitResource.php @@ -23,7 +23,7 @@ public function __construct() * * @param \Illuminate\Http\Request $request * - * @return array + * @return array */ public function toArray($request): array { diff --git a/app/Http/Resources/Models/AlbumResource.php b/app/Http/Resources/Models/AlbumResource.php index 7e48657b27..2abb243e9a 100644 --- a/app/Http/Resources/Models/AlbumResource.php +++ b/app/Http/Resources/Models/AlbumResource.php @@ -28,7 +28,7 @@ public function __construct(Album $album) * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Models/AlbumTreeResource.php b/app/Http/Resources/Models/AlbumTreeResource.php index 0ae1ddc14d..d7520dbc92 100644 --- a/app/Http/Resources/Models/AlbumTreeResource.php +++ b/app/Http/Resources/Models/AlbumTreeResource.php @@ -27,7 +27,7 @@ public function __construct(Album $album) * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Models/PhotoResource.php b/app/Http/Resources/Models/PhotoResource.php index ebc98cab20..6e886d47af 100644 --- a/app/Http/Resources/Models/PhotoResource.php +++ b/app/Http/Resources/Models/PhotoResource.php @@ -39,7 +39,7 @@ public function __construct(Photo $photo) * @param \Illuminate\Http\Request $request * @param Request $request * - * @return array|Arrayable|\JsonSerializable + * @return array|Arrayable|\JsonSerializable */ public function toArray($request) { @@ -107,6 +107,11 @@ public function toArray($request) ]; } + /** + * @param SizeVariant|null $original + * + * @return array + */ private function preformatted(?SizeVariant $original): array { $overlay_date_format = Configs::getValueAsString('date_format_photo_overlay'); @@ -136,6 +141,9 @@ private function preformatted(?SizeVariant $original): array ]; } + /** + * @return array + */ private function precomputed(): array { return [ diff --git a/app/Http/Resources/Models/SizeVariantResource.php b/app/Http/Resources/Models/SizeVariantResource.php index 382c75d08f..7595541b93 100644 --- a/app/Http/Resources/Models/SizeVariantResource.php +++ b/app/Http/Resources/Models/SizeVariantResource.php @@ -37,7 +37,7 @@ public function setNoUrl(bool $noUrl): self * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Models/SmartAlbumResource.php b/app/Http/Resources/Models/SmartAlbumResource.php index 9809bcafcf..f866f46f5e 100644 --- a/app/Http/Resources/Models/SmartAlbumResource.php +++ b/app/Http/Resources/Models/SmartAlbumResource.php @@ -23,7 +23,7 @@ public function __construct(BaseSmartAlbum $smartAlbum) * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Models/TagAlbumResource.php b/app/Http/Resources/Models/TagAlbumResource.php index cd6555ffff..0288bf4698 100644 --- a/app/Http/Resources/Models/TagAlbumResource.php +++ b/app/Http/Resources/Models/TagAlbumResource.php @@ -27,7 +27,7 @@ public function __construct(TagAlbum $tagAlbum) * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Models/UserManagementResource.php b/app/Http/Resources/Models/UserManagementResource.php index 75684039c3..5c8af035fd 100644 --- a/app/Http/Resources/Models/UserManagementResource.php +++ b/app/Http/Resources/Models/UserManagementResource.php @@ -24,7 +24,7 @@ public function __construct(User $user) * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Models/UserResource.php b/app/Http/Resources/Models/UserResource.php index 7ae5c9cd10..ab4c60278f 100644 --- a/app/Http/Resources/Models/UserResource.php +++ b/app/Http/Resources/Models/UserResource.php @@ -24,7 +24,7 @@ public function __construct(?User $user) * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Rights/AlbumRightsResource.php b/app/Http/Resources/Rights/AlbumRightsResource.php index e3ee8c3528..014b8b562a 100644 --- a/app/Http/Resources/Rights/AlbumRightsResource.php +++ b/app/Http/Resources/Rights/AlbumRightsResource.php @@ -40,7 +40,7 @@ public function __construct(AbstractAlbum $abstractAlbum) * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Rights/GlobalRightsResource.php b/app/Http/Resources/Rights/GlobalRightsResource.php index 499716a36b..9423577ba8 100644 --- a/app/Http/Resources/Rights/GlobalRightsResource.php +++ b/app/Http/Resources/Rights/GlobalRightsResource.php @@ -20,7 +20,7 @@ public function __construct() * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Rights/PhotoRightsResource.php b/app/Http/Resources/Rights/PhotoRightsResource.php index 378a8a84c2..9ff73e322d 100644 --- a/app/Http/Resources/Rights/PhotoRightsResource.php +++ b/app/Http/Resources/Rights/PhotoRightsResource.php @@ -37,7 +37,7 @@ public function __construct(Photo $photo) * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Rights/RootAlbumRightsResource.php b/app/Http/Resources/Rights/RootAlbumRightsResource.php index 7cdf094195..4ea21bad39 100644 --- a/app/Http/Resources/Rights/RootAlbumRightsResource.php +++ b/app/Http/Resources/Rights/RootAlbumRightsResource.php @@ -23,7 +23,7 @@ public function __construct() * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Rights/SettingsRightsResource.php b/app/Http/Resources/Rights/SettingsRightsResource.php index e767c8e15f..82e096f60b 100644 --- a/app/Http/Resources/Rights/SettingsRightsResource.php +++ b/app/Http/Resources/Rights/SettingsRightsResource.php @@ -23,7 +23,7 @@ public function __construct() * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Rights/UserManagementRightsResource.php b/app/Http/Resources/Rights/UserManagementRightsResource.php index 52f35ce32d..57ea9a4eea 100644 --- a/app/Http/Resources/Rights/UserManagementRightsResource.php +++ b/app/Http/Resources/Rights/UserManagementRightsResource.php @@ -23,7 +23,7 @@ public function __construct() * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Rights/UserRightsResource.php b/app/Http/Resources/Rights/UserRightsResource.php index 2129ced9e6..8b09c3b760 100644 --- a/app/Http/Resources/Rights/UserRightsResource.php +++ b/app/Http/Resources/Rights/UserRightsResource.php @@ -23,7 +23,7 @@ public function __construct() * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/SearchResource.php b/app/Http/Resources/SearchResource.php index 4d2e4db06f..4cdcaa690c 100644 --- a/app/Http/Resources/SearchResource.php +++ b/app/Http/Resources/SearchResource.php @@ -13,6 +13,13 @@ class SearchResource extends JsonResource { + /** + * @param Collection $albums + * @param Collection $tag_albums + * @param Collection $photos + * + * @return void + */ public function __construct( public Collection $albums, public Collection $tag_albums, @@ -27,7 +34,7 @@ public function __construct( * * @param \Illuminate\Http\Request $request * - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable + * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { diff --git a/app/Http/Resources/Sharing/ListedAlbumsResource.php b/app/Http/Resources/Sharing/ListedAlbumsResource.php index d9612e1b9c..c8f7299c9d 100644 --- a/app/Http/Resources/Sharing/ListedAlbumsResource.php +++ b/app/Http/Resources/Sharing/ListedAlbumsResource.php @@ -22,7 +22,7 @@ public function __construct(object $albumListed) * * @param \Illuminate\Http\Request $request * - * @return array + * @return array */ public function toArray($request): array { diff --git a/app/Http/Resources/Sharing/SharedAlbumResource.php b/app/Http/Resources/Sharing/SharedAlbumResource.php index d91410acbb..08898dac02 100644 --- a/app/Http/Resources/Sharing/SharedAlbumResource.php +++ b/app/Http/Resources/Sharing/SharedAlbumResource.php @@ -22,7 +22,7 @@ public function __construct(object $albumShared) * * @param \Illuminate\Http\Request $request * - * @return array + * @return array */ public function toArray($request): array { diff --git a/app/Http/Resources/Sharing/SharesResource.php b/app/Http/Resources/Sharing/SharesResource.php index 3b7902f21c..c38a225e4a 100644 --- a/app/Http/Resources/Sharing/SharesResource.php +++ b/app/Http/Resources/Sharing/SharesResource.php @@ -10,6 +10,13 @@ */ class SharesResource extends JsonResource { + /** + * @param Collection $shared + * @param Collection $albums + * @param Collection $users + * + * @return void + */ public function __construct( public Collection $shared, public Collection $albums, @@ -24,7 +31,7 @@ public function __construct( * * @param \Illuminate\Http\Request $request * - * @return array + * @return array */ public function toArray($request): array { diff --git a/app/Http/Resources/Sharing/UserSharedResource.php b/app/Http/Resources/Sharing/UserSharedResource.php index bc1e016464..b1e8359b5c 100644 --- a/app/Http/Resources/Sharing/UserSharedResource.php +++ b/app/Http/Resources/Sharing/UserSharedResource.php @@ -22,7 +22,7 @@ public function __construct(object $user) * * @param \Illuminate\Http\Request $request * - * @return array + * @return array */ public function toArray($request): array { diff --git a/app/Image/FileDeleter.php b/app/Image/FileDeleter.php index 696352cbfb..3e8c07994d 100644 --- a/app/Image/FileDeleter.php +++ b/app/Image/FileDeleter.php @@ -24,9 +24,9 @@ class FileDeleter { /** - * @param array> $files - * @param Collection $sizeVariants - * @param Collection $symbolicLinks + * @param array> $files + * @param Collection $sizeVariants + * @param Collection $symbolicLinks * * @return void */ @@ -38,7 +38,7 @@ public function __construct( } /** - * @param Collection $sizeVariants + * @param Collection $sizeVariants * * @return void */ @@ -48,7 +48,7 @@ public function addSizeVariants(Collection $sizeVariants): void } /** - * @param Collection $symbolicLinks + * @param Collection $symbolicLinks * * @return void */ @@ -60,8 +60,8 @@ public function addSymbolicLinks(Collection $symbolicLinks): void /** * Give the possility to add files with their associated storage to the deleter. * - * @param Collection $paths - * @param string $diskName + * @param Collection $paths + * @param string $diskName * * @return void */ @@ -77,7 +77,7 @@ public function addFiles(Collection $paths, string $diskName): void */ private function convertSizeVariantsList() { - /** @var Collection> $grouped */ + /** @var Collection> $grouped */ $grouped = $this->sizeVariants->groupBy('storage_disk'); $grouped->each( fn (Collection $svs, string $k) => $this->files[$k] = ($this->files[$k] ?? new Collection())->merge($svs->pluck('short_path')) diff --git a/app/Livewire/Components/Base/ContextMenu.php b/app/Livewire/Components/Base/ContextMenu.php index f443978c48..9f43c5e5b5 100644 --- a/app/Livewire/Components/Base/ContextMenu.php +++ b/app/Livewire/Components/Base/ContextMenu.php @@ -32,8 +32,8 @@ class ContextMenu extends Component implements Openable public string $style; /** - * @var array defines the arguments to be passed to the - * Livewire component loaded inside the ContextMenu + * @var array defines the arguments to be passed to the + * Livewire component loaded inside the ContextMenu */ #[Locked] public array $params = []; @@ -41,8 +41,8 @@ class ContextMenu extends Component implements Openable /** * Open the Context Menu. * - * @param string $type defines the Component loaded inside the modal - * @param array $params Arguments to pass to the modal + * @param string $type defines the Component loaded inside the modal + * @param array $params Arguments to pass to the modal * * @return void */ diff --git a/app/Livewire/Components/Base/Modal.php b/app/Livewire/Components/Base/Modal.php index 231b79de9d..ab00e93d81 100644 --- a/app/Livewire/Components/Base/Modal.php +++ b/app/Livewire/Components/Base/Modal.php @@ -35,8 +35,8 @@ class Modal extends Component implements Openable public string $close_text = ''; /** - * @var array defines the arguments to be passed to the - * Livewire component loaded inside the Modal + * @var array defines the arguments to be passed to the + * Livewire component loaded inside the Modal */ public array $params = []; @@ -50,9 +50,9 @@ class Modal extends Component implements Openable /** * Open a Modal. * - * @param string $type defines the Component loaded inside the modal - * @param string $close_text text to put if we use a close button - * @param array $params Arguments to pass to the modal + * @param string $type defines the Component loaded inside the modal + * @param string $close_text text to put if we use a close button + * @param array $params Arguments to pass to the modal * * @return void */ diff --git a/app/Livewire/Components/Forms/Add/Upload.php b/app/Livewire/Components/Forms/Add/Upload.php index e94e9992c3..eeefd7107d 100644 --- a/app/Livewire/Components/Forms/Add/Upload.php +++ b/app/Livewire/Components/Forms/Add/Upload.php @@ -157,7 +157,7 @@ public static function getUploadLimit(): int ); } - /** @var array $rules */ + /** @var string[] $rules */ $rules = FileUploadConfiguration::rules(); $sizeRule = collect($rules)->first(fn ($rule) => Str::startsWith($rule, 'max:'), 'max:12288'); $LivewireSizeLimit = intval(Str::substr($sizeRule, 4)) * 1024; diff --git a/app/Livewire/Components/Forms/Album/AddTrack.php b/app/Livewire/Components/Forms/Album/AddTrack.php index 79f9abe4ad..880e802252 100644 --- a/app/Livewire/Components/Forms/Album/AddTrack.php +++ b/app/Livewire/Components/Forms/Album/AddTrack.php @@ -43,7 +43,7 @@ public function boot(): void } /** - * {@inheritDoc} + * @return array> */ public function rules(): array { diff --git a/app/Livewire/Components/Forms/Album/Create.php b/app/Livewire/Components/Forms/Album/Create.php index 163ace07ea..f7e7785a51 100644 --- a/app/Livewire/Components/Forms/Album/Create.php +++ b/app/Livewire/Components/Forms/Album/Create.php @@ -33,7 +33,7 @@ class Create extends Component * This defines the set of validation rules to be applied on the input. * It would be a good idea to unify (namely reuse) the rules from the JSON api. * - * @return array + * @return array> */ protected function rules(): array { @@ -43,11 +43,11 @@ protected function rules(): array /** * Mount the component. * - * @param array $params + * @param array{parentID:string|null} $params * * @return void */ - public function mount(array $params = []): void + public function mount(array $params = [Params::PARENT_ID => null]): void { $this->parent_id = $params[Params::PARENT_ID]; Gate::authorize(AlbumPolicy::CAN_EDIT_ID, [AbstractAlbum::class, [$this->parent_id]]); diff --git a/app/Livewire/Components/Forms/Album/CreateTag.php b/app/Livewire/Components/Forms/Album/CreateTag.php index c280045ec7..8a52a34e4b 100644 --- a/app/Livewire/Components/Forms/Album/CreateTag.php +++ b/app/Livewire/Components/Forms/Album/CreateTag.php @@ -26,6 +26,7 @@ class CreateTag extends Component public string $title = ''; public string $tag = ''; + /** @var string[] $tags */ #[Locked] public array $tags = []; public function boot(): void { @@ -36,7 +37,7 @@ public function boot(): void * This defines the set of validation rules to be applied on the input. * It would be a good idea to unify (namely reuse) the rules from the JSON api. * - * @return array + * @return array> */ protected function rules(): array { @@ -46,7 +47,7 @@ protected function rules(): array /** * Mount the component. * - * @param array $params + * @param array $params * * @return void */ diff --git a/app/Livewire/Components/Forms/Album/Delete.php b/app/Livewire/Components/Forms/Album/Delete.php index 114a7205e5..174791d71c 100644 --- a/app/Livewire/Components/Forms/Album/Delete.php +++ b/app/Livewire/Components/Forms/Album/Delete.php @@ -23,7 +23,7 @@ class Delete extends Component use InteractWithModal; // We need to use an array instead of directly said album id to reuse the rules (because I'm lazy). - /** @var array */ + /** @var string[] */ #[Locked] public array $albumIDs; #[Locked] public string $parent_id; #[Locked] public string $title = ''; @@ -40,7 +40,7 @@ public function boot(): void /** * This is the equivalent of the constructor for Livewire Components. * - * @param array{albumID?:string,albumIDs?:array,parentID:?string} $params to delete + * @param array{albumID?:string,albumIDs?:string[],parentID:?string} $params to delete * * @return void */ diff --git a/app/Livewire/Components/Forms/Album/DeletePanel.php b/app/Livewire/Components/Forms/Album/DeletePanel.php index 073e99eaa8..67e808a532 100644 --- a/app/Livewire/Components/Forms/Album/DeletePanel.php +++ b/app/Livewire/Components/Forms/Album/DeletePanel.php @@ -25,7 +25,7 @@ class DeletePanel extends Component use Notify; // We need to use an array instead of directly said album id to reuse the rules (because I'm lazy). - /** @var array */ + /** @var string[] */ #[Locked] public array $albumIDs; #[Locked] public string $title; private AlbumFactory $albumFactory; diff --git a/app/Livewire/Components/Forms/Album/Merge.php b/app/Livewire/Components/Forms/Album/Merge.php index e9654f24c5..02244f4c4f 100644 --- a/app/Livewire/Components/Forms/Album/Merge.php +++ b/app/Livewire/Components/Forms/Album/Merge.php @@ -23,7 +23,7 @@ class Merge extends Component use AuthorizesRequests; #[Locked] public ?string $parent_id = null; - /** @var array */ + /** @var string[] */ #[Locked] public array $albumIDs; #[Locked] public string $titleMoved = ''; #[Locked] public int $num; @@ -44,7 +44,7 @@ public function boot(): void /** * This is the equivalent of the constructor for Livewire Components. * - * @param array{albumID?:string,albumIDs?:array,parentID:?string} $params to move + * @param array{albumID?:string,albumIDs?:string[],parentID:?string} $params to move * * @return void */ diff --git a/app/Livewire/Components/Forms/Album/Move.php b/app/Livewire/Components/Forms/Album/Move.php index 24ddcd49e3..5d2a1b2522 100644 --- a/app/Livewire/Components/Forms/Album/Move.php +++ b/app/Livewire/Components/Forms/Album/Move.php @@ -23,7 +23,7 @@ class Move extends Component use AuthorizesRequests; #[Locked] public ?string $parent_id = null; - /** @var array */ + /** @var string[] */ #[Locked] public array $albumIDs; #[Locked] public string $titleMoved = ''; #[Locked] public int $num; @@ -44,7 +44,7 @@ public function boot(): void /** * This is the equivalent of the constructor for Livewire Components. * - * @param array{albumID?:string,albumIDs?:array,parentID:?string} $params to move + * @param array{albumID?:string,albumIDs?:string[],parentID:?string} $params to move * * @return void */ diff --git a/app/Livewire/Components/Forms/Album/MovePanel.php b/app/Livewire/Components/Forms/Album/MovePanel.php index 38041ca154..146d2f7ad2 100644 --- a/app/Livewire/Components/Forms/Album/MovePanel.php +++ b/app/Livewire/Components/Forms/Album/MovePanel.php @@ -23,7 +23,7 @@ class MovePanel extends Component use Notify; // We need to use an array instead of directly said album id to reuse the rules. - /** @var array */ + /** @var string[] */ #[Locked] public array $albumIDs; #[Locked] public ?string $titleMoved; // Destination diff --git a/app/Livewire/Components/Forms/Album/Properties.php b/app/Livewire/Components/Forms/Album/Properties.php index a45d2c85b2..5b740f42b5 100644 --- a/app/Livewire/Components/Forms/Album/Properties.php +++ b/app/Livewire/Components/Forms/Album/Properties.php @@ -22,6 +22,7 @@ use App\Policies\AlbumPolicy; use App\Rules\CopyrightRule; use App\Rules\TitleRule; +use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Contracts\View\View; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Support\Facades\Gate; @@ -139,7 +140,7 @@ public function submit(AlbumFactory $albumFactory): void /** * Return computed property so that it does not stay in memory. * - * @return array column sorting + * @return array column sorting */ final public function getPhotoSortingColumnsProperty(): array { @@ -150,7 +151,7 @@ final public function getPhotoSortingColumnsProperty(): array /** * Return computed property so that it does not stay in memory. * - * @return array column sorting + * @return array column sorting */ final public function getAlbumSortingColumnsProperty(): array { @@ -161,7 +162,7 @@ final public function getAlbumSortingColumnsProperty(): array /** * Return computed property so that it does not stay in memory. * - * @return array order + * @return array order */ final public function getSortingOrdersProperty(): array { @@ -172,7 +173,7 @@ final public function getSortingOrdersProperty(): array /** * Return computed property so that it does not stay in memory. * - * @return array order + * @return array order */ final public function getAspectRatiosProperty(): array { @@ -180,6 +181,13 @@ final public function getAspectRatiosProperty(): array return ['' => '-', ...AspectRatioType::localized()]; } + /** + * Return the list of license localized. + * + * @return array + * + * @throws BindingResolutionException + */ final public function getLicensesProperty(): array { return LicenseType::localized(); diff --git a/app/Livewire/Components/Forms/Album/Rename.php b/app/Livewire/Components/Forms/Album/Rename.php index b830776f26..6da62cc299 100644 --- a/app/Livewire/Components/Forms/Album/Rename.php +++ b/app/Livewire/Components/Forms/Album/Rename.php @@ -23,7 +23,7 @@ class Rename extends Component use AuthorizesRequests; #[Locked] public ?string $parent_id = null; - /** @var array */ + /** @var string[] */ #[Locked] public array $albumIDs; #[Locked] public int $num; public string $title = ''; @@ -38,7 +38,7 @@ public function boot(): void /** * This is the equivalent of the constructor for Livewire Components. * - * @param array{albumID?:string,albumIDs?:array,parentID:?string} $params to move + * @param array{albumID?:string,albumIDs?:string[],parentID:?string} $params to move * * @return void */ diff --git a/app/Livewire/Components/Forms/Album/SearchAlbum.php b/app/Livewire/Components/Forms/Album/SearchAlbum.php index c885490e03..ae781f4ede 100644 --- a/app/Livewire/Components/Forms/Album/SearchAlbum.php +++ b/app/Livewire/Components/Forms/Album/SearchAlbum.php @@ -16,12 +16,15 @@ /** * TODO: improve speed. 800ms component. + * + * @phpstan-type TAlbumSaved array{id:string|null,title:string,original:string,short_title:string,thumb:string} */ class SearchAlbum extends Component { private const SHORTEN_BY = 80; public ?string $search = null; // ! wired + /** @var TAlbumSaved[] */ #[Locked] public array $albumListSaved; /** * This is the equivalent of the constructor for Livewire Components. @@ -40,7 +43,7 @@ public function mount(?string $parent_id, ?int $lft = null, ?int $rgt = null): v /** * Give the tree of albums owned by the user. * - * @return Collection + * @return Collection */ public function getAlbumListProperty(): Collection { @@ -64,6 +67,13 @@ public function render(): View return view('livewire.forms.album.search-album'); } + /** + * @param int|null $lft + * @param int|null $rgt + * @param string|null $parent_id + * + * @return TAlbumSaved[] + */ private function getAlbumsListWithPath(?int $lft, ?int $rgt, ?string $parent_id): array { $albumQueryPolicy = resolve(AlbumQueryPolicy::class); @@ -78,8 +88,9 @@ private function getAlbumsListWithPath(?int $lft, ?int $rgt, ?string $parent_id) $query = (new SortingDecorator($unfiltered)) ->orderBy($sorting->column, $sorting->order); - /** @var NsCollection $albums */ + /** @var NsCollection $albums */ $albums = $query->get(); + /** @var NsCollection $tree */ $tree = $albums->toTree(null); $flat_tree = $this->flatten($tree); @@ -104,13 +115,14 @@ private function getAlbumsListWithPath(?int $lft, ?int $rgt, ?string $parent_id) /** * Flatten the tree and create bread crumb paths. * - * @param mixed $collection - * @param string $prefix + * @param NsCollection|Collection $collection + * @param string $prefix * - * @return array + * @return TAlbumSaved[] */ private function flatten($collection, $prefix = ''): array { + /** @var TAlbumSaved[] $flatArray */ $flatArray = []; foreach ($collection as $node) { $title = $prefix . ($prefix !== '' ? '/' : '') . $node->title; diff --git a/app/Livewire/Components/Forms/Album/ShareWith.php b/app/Livewire/Components/Forms/Album/ShareWith.php index f853041c19..0465c20f52 100644 --- a/app/Livewire/Components/Forms/Album/ShareWith.php +++ b/app/Livewire/Components/Forms/Album/ShareWith.php @@ -19,6 +19,9 @@ use Illuminate\Support\Str; use Livewire\Component; +/** + * @phpstan-type TUser array{id:int,username:string} + */ class ShareWith extends Component { use AuthorizesRequests; @@ -27,6 +30,7 @@ class ShareWith extends Component public BaseAlbum $album; + /** @var AccessPermission[] */ public array $perms; public ?string $search = null; // ! wired @@ -72,7 +76,7 @@ public function render(): View * - Not the admins (they already have all access) * - Not users which have already been shared. * - * @return array + * @return TUser[] * * @throws UnauthorizedException * @throws QueryBuilderException diff --git a/app/Livewire/Components/Forms/Album/Transfer.php b/app/Livewire/Components/Forms/Album/Transfer.php index 1c6e0aa785..697644fc2b 100644 --- a/app/Livewire/Components/Forms/Album/Transfer.php +++ b/app/Livewire/Components/Forms/Album/Transfer.php @@ -61,7 +61,7 @@ public function render(): View /** * Return a table with the user_id and associated username. * - * @return array list of usernames + * @return string[] list of usernames */ public function getUsersProperty(): array { diff --git a/app/Livewire/Components/Forms/Photo/CopyTo.php b/app/Livewire/Components/Forms/Photo/CopyTo.php index a02d4f26b9..6f1699c688 100644 --- a/app/Livewire/Components/Forms/Photo/CopyTo.php +++ b/app/Livewire/Components/Forms/Photo/CopyTo.php @@ -30,7 +30,7 @@ class CopyTo extends Component private Duplicate $duplicate; #[Locked] public string $parent_id; - /** @var array */ + /** @var string[] */ #[Locked] public array $photoIDs; #[Locked] public string $title = ''; // Destination @@ -48,7 +48,7 @@ public function boot(): void /** * This is the equivalent of the constructor for Livewire Components. * - * @param array{photoID?:string,photoIDs?:array,albumID:?string} $params to move + * @param array{photoID?:string,photoIDs?:string[],albumID:?string} $params to move * * @return void */ diff --git a/app/Livewire/Components/Forms/Photo/Delete.php b/app/Livewire/Components/Forms/Photo/Delete.php index ebf8855f3d..61b612db61 100644 --- a/app/Livewire/Components/Forms/Photo/Delete.php +++ b/app/Livewire/Components/Forms/Photo/Delete.php @@ -25,7 +25,7 @@ class Delete extends Component use UseValidator; use Notify; - /** @var array */ + /** @var string[] */ #[Locked] public array $photoIDs; #[Locked] public ?string $albumId = null; #[Locked] public string $title = ''; @@ -33,7 +33,7 @@ class Delete extends Component /** * This is the equivalent of the constructor for Livewire Components. * - * @param array{albumID:?string,photoID?:string,photoIDs?:array} $params to delete + * @param array{albumID:?string,photoID?:string,photoIDs?:string[]} $params to delete * * @return void */ diff --git a/app/Livewire/Components/Forms/Photo/Download.php b/app/Livewire/Components/Forms/Photo/Download.php index 7ff0b67f27..fdb7d82da7 100644 --- a/app/Livewire/Components/Forms/Photo/Download.php +++ b/app/Livewire/Components/Forms/Photo/Download.php @@ -22,14 +22,14 @@ class Download extends Component use UseValidator; use Notify; - /** @var array */ + /** @var string[] */ #[Locked] public array $photoIDs; public Photo $photo; /** * This is the equivalent of the constructor for Livewire Components. * - * @param array{albumID:?string,photoID?:string,photoIDs?:array} $params to download + * @param array{albumID:?string,photoID?:string,photoIDs?:string[]} $params to download * * @return void */ diff --git a/app/Livewire/Components/Forms/Photo/Move.php b/app/Livewire/Components/Forms/Photo/Move.php index 8d29957008..ce086eefb0 100644 --- a/app/Livewire/Components/Forms/Photo/Move.php +++ b/app/Livewire/Components/Forms/Photo/Move.php @@ -24,7 +24,7 @@ class Move extends Component private PhotoMove $move; #[Locked] public string $parent_id; - /** @var array */ + /** @var string[] */ #[Locked] public array $photoIDs; #[Locked] public string $title = ''; #[Locked] public int $num; @@ -44,7 +44,7 @@ public function boot(): void /** * This is the equivalent of the constructor for Livewire Components. * - * @param array{photoID?:string,photoIDs?:array,albumID:?string} $params to move + * @param array{photoID?:string,photoIDs?:string[],albumID:?string} $params to move * * @return void */ diff --git a/app/Livewire/Components/Forms/Photo/Rename.php b/app/Livewire/Components/Forms/Photo/Rename.php index 4993bd0366..04e82defe1 100644 --- a/app/Livewire/Components/Forms/Photo/Rename.php +++ b/app/Livewire/Components/Forms/Photo/Rename.php @@ -19,7 +19,7 @@ class Rename extends Component use InteractWithModal; use AuthorizesRequests; - /** @var array */ + /** @var string[] */ #[Locked] public array $photoIDs; #[Locked] public int $num; public string $title = ''; @@ -27,7 +27,7 @@ class Rename extends Component /** * This is the equivalent of the constructor for Livewire Components. * - * @param array{photoID?:string,photoIDs?:array,albumID:?string} $params to move + * @param array{photoID?:string,photoIDs?:string[],albumID:?string} $params to move * * @return void */ diff --git a/app/Livewire/Components/Forms/Photo/Tag.php b/app/Livewire/Components/Forms/Photo/Tag.php index 71f7ac24a8..4cd8880019 100644 --- a/app/Livewire/Components/Forms/Photo/Tag.php +++ b/app/Livewire/Components/Forms/Photo/Tag.php @@ -18,8 +18,9 @@ class Tag extends Component use InteractWithModal; use AuthorizesRequests; - /** @var array */ + /** @var string[] */ #[Locked] public array $photoIDs; + /** @var string[] */ #[Locked] public array $tags = []; #[Locked] public int $num; public bool $shall_override = false; @@ -28,7 +29,7 @@ class Tag extends Component /** * This is the equivalent of the constructor for Livewire Components. * - * @param array{photoID?:string,photoIDs?:array,albumID:?string} $params to move + * @param array{photoID?:string,photoIDs?:string[],albumID:?string} $params to move * * @return void */ diff --git a/app/Livewire/Components/Forms/Profile/ManageSecondFactor.php b/app/Livewire/Components/Forms/Profile/ManageSecondFactor.php index ab9c9d2921..db947577e5 100644 --- a/app/Livewire/Components/Forms/Profile/ManageSecondFactor.php +++ b/app/Livewire/Components/Forms/Profile/ManageSecondFactor.php @@ -31,6 +31,9 @@ class ManageSecondFactor extends Component /** @var string alias to rename the credentials. By default we provide the first parts of the ID */ public string $alias; // ! wired + /** + * @return array> + */ public function rules(): array { return ['alias' => 'required|string|min:5|max:255']; diff --git a/app/Livewire/Components/Forms/Settings/Base/BaseConfigDoubleDropDown.php b/app/Livewire/Components/Forms/Settings/Base/BaseConfigDoubleDropDown.php index d10ae9a52f..2dbe0c40af 100644 --- a/app/Livewire/Components/Forms/Settings/Base/BaseConfigDoubleDropDown.php +++ b/app/Livewire/Components/Forms/Settings/Base/BaseConfigDoubleDropDown.php @@ -82,14 +82,14 @@ public function updated($field, $value) /** * Defines accessor for the drop down options1. * - * @return array + * @return array */ abstract public function getOptions1Property(): array; /** * Defines accessor for the drop down options2. * - * @return array + * @return array */ abstract public function getOptions2Property(): array; } \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/Base/BaseConfigDropDown.php b/app/Livewire/Components/Forms/Settings/Base/BaseConfigDropDown.php index c7b2ac354a..0e3d11f6b8 100644 --- a/app/Livewire/Components/Forms/Settings/Base/BaseConfigDropDown.php +++ b/app/Livewire/Components/Forms/Settings/Base/BaseConfigDropDown.php @@ -63,7 +63,7 @@ public function updating($field, $value): void /** * Defines accessor for the drop down options1. * - * @return array + * @return array */ abstract public function getOptionsProperty(): array; } \ No newline at end of file diff --git a/app/Livewire/Components/Forms/Settings/SetAlbumDecorationOrientationSetting.php b/app/Livewire/Components/Forms/Settings/SetAlbumDecorationOrientationSetting.php index cdab0a7ebd..0155d9da0b 100644 --- a/app/Livewire/Components/Forms/Settings/SetAlbumDecorationOrientationSetting.php +++ b/app/Livewire/Components/Forms/Settings/SetAlbumDecorationOrientationSetting.php @@ -14,7 +14,7 @@ class SetAlbumDecorationOrientationSetting extends BaseConfigDropDown /** * Options available. * - * @return array + * @return array */ public function getOptionsProperty(): array { diff --git a/app/Livewire/Components/Forms/Settings/SetAlbumDecorationSetting.php b/app/Livewire/Components/Forms/Settings/SetAlbumDecorationSetting.php index a9fe65396e..eb7c3a1417 100644 --- a/app/Livewire/Components/Forms/Settings/SetAlbumDecorationSetting.php +++ b/app/Livewire/Components/Forms/Settings/SetAlbumDecorationSetting.php @@ -14,7 +14,7 @@ class SetAlbumDecorationSetting extends BaseConfigDropDown /** * Specify the options available. * - * @return array + * @return array */ public function getOptionsProperty(): array { diff --git a/app/Livewire/Components/Forms/Settings/SetAlbumSortingSetting.php b/app/Livewire/Components/Forms/Settings/SetAlbumSortingSetting.php index c7d28fa5dd..b3ea1da809 100644 --- a/app/Livewire/Components/Forms/Settings/SetAlbumSortingSetting.php +++ b/app/Livewire/Components/Forms/Settings/SetAlbumSortingSetting.php @@ -37,7 +37,7 @@ public function mount(): void /** * Give the options on the column. * - * @return array + * @return array */ public function getOptions1Property(): array { @@ -47,7 +47,7 @@ public function getOptions1Property(): array /** * Give the options on the ordering. * - * @return array + * @return array */ public function getOptions2Property(): array { diff --git a/app/Livewire/Components/Forms/Settings/SetLangSetting.php b/app/Livewire/Components/Forms/Settings/SetLangSetting.php index 5f8a20e512..37adec9a15 100644 --- a/app/Livewire/Components/Forms/Settings/SetLangSetting.php +++ b/app/Livewire/Components/Forms/Settings/SetLangSetting.php @@ -13,7 +13,7 @@ class SetLangSetting extends BaseConfigDropDown /** * Give the list of available languages. * - * @return array + * @return array */ public function getOptionsProperty(): array { diff --git a/app/Livewire/Components/Forms/Settings/SetLayoutSetting.php b/app/Livewire/Components/Forms/Settings/SetLayoutSetting.php index d7488c3cb7..b10291fed5 100644 --- a/app/Livewire/Components/Forms/Settings/SetLayoutSetting.php +++ b/app/Livewire/Components/Forms/Settings/SetLayoutSetting.php @@ -14,7 +14,7 @@ class SetLayoutSetting extends BaseConfigDropDown /** * Provides the different options. * - * @return array + * @return array */ public function getOptionsProperty(): array { diff --git a/app/Livewire/Components/Forms/Settings/SetLicenseDefaultSetting.php b/app/Livewire/Components/Forms/Settings/SetLicenseDefaultSetting.php index 0b5784829a..eefa0930a8 100644 --- a/app/Livewire/Components/Forms/Settings/SetLicenseDefaultSetting.php +++ b/app/Livewire/Components/Forms/Settings/SetLicenseDefaultSetting.php @@ -14,7 +14,7 @@ class SetLicenseDefaultSetting extends BaseConfigDropDown /** * We have to use this mapping to provide easilly readable license type. * - * @return array + * @return array */ public function getOptionsProperty(): array { diff --git a/app/Livewire/Components/Forms/Settings/SetMapProviderSetting.php b/app/Livewire/Components/Forms/Settings/SetMapProviderSetting.php index 238cd551e5..af08060d02 100644 --- a/app/Livewire/Components/Forms/Settings/SetMapProviderSetting.php +++ b/app/Livewire/Components/Forms/Settings/SetMapProviderSetting.php @@ -13,7 +13,7 @@ class SetMapProviderSetting extends BaseConfigDropDown /** * Options for the provider. * - * @return array + * @return array */ public function getOptionsProperty(): array { diff --git a/app/Livewire/Components/Forms/Settings/SetPhotoOverlaySetting.php b/app/Livewire/Components/Forms/Settings/SetPhotoOverlaySetting.php index 8b5a15f59a..7cd5557eaa 100644 --- a/app/Livewire/Components/Forms/Settings/SetPhotoOverlaySetting.php +++ b/app/Livewire/Components/Forms/Settings/SetPhotoOverlaySetting.php @@ -14,7 +14,7 @@ class SetPhotoOverlaySetting extends BaseConfigDropDown /** * Default overlay options. * - * @return array + * @return array */ public function getOptionsProperty(): array { diff --git a/app/Livewire/Components/Forms/Settings/SetPhotoSortingSetting.php b/app/Livewire/Components/Forms/Settings/SetPhotoSortingSetting.php index af16d021e7..c0faf4ca53 100644 --- a/app/Livewire/Components/Forms/Settings/SetPhotoSortingSetting.php +++ b/app/Livewire/Components/Forms/Settings/SetPhotoSortingSetting.php @@ -37,7 +37,7 @@ public function mount(): void /** * Give the columns options. * - * @return array + * @return array */ public function getOptions1Property(): array { @@ -47,7 +47,7 @@ public function getOptions1Property(): array /** * Ordering ascending or descending. * - * @return array + * @return array */ public function getOptions2Property(): array { diff --git a/app/Livewire/Components/Menus/AlbumAdd.php b/app/Livewire/Components/Menus/AlbumAdd.php index 6e02bc9ec0..57439f168b 100644 --- a/app/Livewire/Components/Menus/AlbumAdd.php +++ b/app/Livewire/Components/Menus/AlbumAdd.php @@ -19,6 +19,7 @@ class AlbumAdd extends Component use InteractWithModal; use InteractWithContextMenu; + /** @var array{parentID:string|null} */ #[Locked] public array $params; private ?Album $album = null; diff --git a/app/Livewire/Components/Menus/AlbumsDropdown.php b/app/Livewire/Components/Menus/AlbumsDropdown.php index 7cbe9e9d19..78f16eca36 100644 --- a/app/Livewire/Components/Menus/AlbumsDropdown.php +++ b/app/Livewire/Components/Menus/AlbumsDropdown.php @@ -17,7 +17,7 @@ class AlbumsDropdown extends Component use InteractWithModal; use InteractWithContextMenu; - /** @var array{parentID:?string,albumIDs:array} */ + /** @var array{parentID:?string,albumIDs:string[]} */ #[Locked] public array $params; /** * Renders the Add menu in the top right. diff --git a/app/Livewire/Components/Menus/PhotosDropdown.php b/app/Livewire/Components/Menus/PhotosDropdown.php index 9e74d5caf3..869b5e6cc9 100644 --- a/app/Livewire/Components/Menus/PhotosDropdown.php +++ b/app/Livewire/Components/Menus/PhotosDropdown.php @@ -21,13 +21,13 @@ class PhotosDropdown extends Component use InteractWithModal; use InteractWithContextMenu; - /** @var array{albumID:?string,photoIDs:array} */ + /** @var array{albumID:?string,photoIDs:string[]} */ #[Locked] public array $params; #[Locked] public bool $are_starred; /** * mount info and load star condition. * - * @param array{albumID:?string,photoIDs:array} $params + * @param array{albumID:?string,photoIDs:string[]} $params * * @return void */ diff --git a/app/Livewire/Components/Modals/Login.php b/app/Livewire/Components/Modals/Login.php index fc91ab9352..3b7b7252f0 100644 --- a/app/Livewire/Components/Modals/Login.php +++ b/app/Livewire/Components/Modals/Login.php @@ -109,7 +109,7 @@ public function getCanUse2faProperty(): bool /** * List the Oauth providers which are enabled. * - * @return array + * @return string[] */ public function getAvailableOauthProperty(): array { diff --git a/app/Livewire/Components/Modules/Diagnostics/AbstractPreSection.php b/app/Livewire/Components/Modules/Diagnostics/AbstractPreSection.php index 45e833f393..e490dfa858 100644 --- a/app/Livewire/Components/Modules/Diagnostics/AbstractPreSection.php +++ b/app/Livewire/Components/Modules/Diagnostics/AbstractPreSection.php @@ -33,7 +33,7 @@ final public function render(): View /** * Defined the data to be displayed. * - * @return array + * @return string[] */ abstract public function getDataProperty(): array; diff --git a/app/Livewire/Components/Modules/Diagnostics/Errors.php b/app/Livewire/Components/Modules/Diagnostics/Errors.php index 8a4fa85543..c7f29999e7 100644 --- a/app/Livewire/Components/Modules/Diagnostics/Errors.php +++ b/app/Livewire/Components/Modules/Diagnostics/Errors.php @@ -30,7 +30,7 @@ public function getTitleProperty(): string * Computable property to access the errors. * If we are not ready to load, we return an empty array. * - * @return array + * @return array */ public function getDataProperty(): array { diff --git a/app/Livewire/Components/Modules/Diagnostics/Space.php b/app/Livewire/Components/Modules/Diagnostics/Space.php index a79bec5d30..ed177ea0ba 100644 --- a/app/Livewire/Components/Modules/Diagnostics/Space.php +++ b/app/Livewire/Components/Modules/Diagnostics/Space.php @@ -12,6 +12,7 @@ class Space extends Component { + /** @var string[] */ #[Locked] public array $result = []; #[Locked] public string $action; #[Locked] public bool $can; diff --git a/app/Livewire/Components/Modules/Jobs/Feedback.php b/app/Livewire/Components/Modules/Jobs/Feedback.php index 2296f1f326..1b9819cc87 100644 --- a/app/Livewire/Components/Modules/Jobs/Feedback.php +++ b/app/Livewire/Components/Modules/Jobs/Feedback.php @@ -30,7 +30,7 @@ public function mount(): void } $this->open = Configs::getValueAsBool('current_job_processing_visible'); - $this->display = true; + $this->display = Configs::getValueAsBool('job_processing_queue_visible'); } /** @@ -46,7 +46,7 @@ public function render(): View /** * Return the list of current Jobs that will be created & possibly processed. * - * @return Collection Jobs + * @return Collection Jobs */ public function getJobHistoryProperty(): Collection { diff --git a/app/Livewire/Components/Modules/Maintenance/Cleaning.php b/app/Livewire/Components/Modules/Maintenance/Cleaning.php index 8051b71b06..5d756d1c7d 100644 --- a/app/Livewire/Components/Modules/Maintenance/Cleaning.php +++ b/app/Livewire/Components/Modules/Maintenance/Cleaning.php @@ -18,8 +18,10 @@ */ class Cleaning extends Component { + /** @var string[] */ #[Locked] public array $result = []; #[Locked] public string $path = ''; + /** @var string[] */ private array $skip = ['.gitignore']; /** diff --git a/app/Livewire/Components/Modules/Maintenance/FixJobs.php b/app/Livewire/Components/Modules/Maintenance/FixJobs.php index 3888511951..1c0957f1f7 100644 --- a/app/Livewire/Components/Modules/Maintenance/FixJobs.php +++ b/app/Livewire/Components/Modules/Maintenance/FixJobs.php @@ -19,6 +19,7 @@ */ class FixJobs extends Component { + /** @var JobStatus[] */ private array $waitingJobsTypes = [JobStatus::READY, JobStatus::STARTED]; /** diff --git a/app/Livewire/Components/Modules/Maintenance/FixTree.php b/app/Livewire/Components/Modules/Maintenance/FixTree.php index eb4ff84334..53a10dcb81 100644 --- a/app/Livewire/Components/Modules/Maintenance/FixTree.php +++ b/app/Livewire/Components/Modules/Maintenance/FixTree.php @@ -18,6 +18,7 @@ class FixTree extends Component { #[Locked] public int|null $result = null; #[Locked] public string $path = ''; + /** @var array */ #[Locked] public array $stats; /** * Rendering of the front-end. diff --git a/app/Livewire/Components/Modules/Maintenance/Optimize.php b/app/Livewire/Components/Modules/Maintenance/Optimize.php index b04c1eec4d..f347e1a83b 100644 --- a/app/Livewire/Components/Modules/Maintenance/Optimize.php +++ b/app/Livewire/Components/Modules/Maintenance/Optimize.php @@ -16,6 +16,7 @@ */ class Optimize extends Component { + /** @var string[] */ #[Locked] public array $result = []; /** * Rendering of the front-end. diff --git a/app/Livewire/Components/Modules/Maintenance/Update.php b/app/Livewire/Components/Modules/Maintenance/Update.php index c593702086..9159e144d5 100644 --- a/app/Livewire/Components/Modules/Maintenance/Update.php +++ b/app/Livewire/Components/Modules/Maintenance/Update.php @@ -18,6 +18,7 @@ */ class Update extends Component { + /** @var string[] */ #[Locked] public array $result = []; #[Locked] public string $channelName; #[Locked] public string $info; diff --git a/app/Livewire/Components/Pages/Frame.php b/app/Livewire/Components/Pages/Frame.php index 0a6bd082b3..ba6c368847 100644 --- a/app/Livewire/Components/Pages/Frame.php +++ b/app/Livewire/Components/Pages/Frame.php @@ -2,7 +2,10 @@ namespace App\Livewire\Components\Pages; +use App\Contracts\Exceptions\InternalLycheeException; use App\Contracts\Models\AbstractAlbum; +use App\Exceptions\Internal\IllegalOrderOfOperationException; +use App\Exceptions\Internal\InvalidSmartIdException; use App\Exceptions\PhotoCollectionEmptyException; use App\Exceptions\UnauthorizedException; use App\Factories\AlbumFactory; @@ -11,6 +14,7 @@ use App\Policies\AlbumPolicy; use App\Policies\PhotoQueryPolicy; use Illuminate\Contracts\Container\BindingResolutionException; +use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Support\Facades\Gate; use Illuminate\View\View; use Livewire\Attributes\Renderless; @@ -59,6 +63,17 @@ public function mount(?string $albumId = null): void $this->back = $albumId !== null ? route('livewire-gallery-album', ['albumId' => $albumId]) : route('livewire-gallery'); } + /** + * @param int $retries + * + * @return array + * + * @throws InternalLycheeException + * @throws ModelNotFoundException + * @throws InvalidSmartIdException + * @throws PhotoCollectionEmptyException + * @throws IllegalOrderOfOperationException + */ #[Renderless] public function loadPhoto(int $retries = 5): array { diff --git a/app/Livewire/Components/Pages/Gallery/Album.php b/app/Livewire/Components/Pages/Gallery/Album.php index 6ce82a8b43..68de8f29a8 100644 --- a/app/Livewire/Components/Pages/Gallery/Album.php +++ b/app/Livewire/Components/Pages/Gallery/Album.php @@ -14,6 +14,7 @@ use App\Livewire\DTO\AlbumRights; use App\Livewire\DTO\Layouts; use App\Livewire\DTO\PhotoFlags; +use App\Livewire\DTO\ProtectedCollection; use App\Livewire\DTO\SessionFlags; use App\Models\Album as ModelsAlbum; use App\Models\Configs; @@ -24,7 +25,6 @@ use App\Policies\AlbumPolicy; use App\Policies\PhotoPolicy; use Illuminate\Database\Eloquent\RelationNotFoundException; -use Illuminate\Support\Collection; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Gate; use Illuminate\View\View; @@ -41,6 +41,7 @@ class Album extends BaseAlbumComponent implements Reloadable { private AlbumFactory $albumFactory; + private AlbumFormatted $formatted; #[Locked] public bool $is_search_accessible = false; public ?AbstractAlbum $album = null; @@ -54,6 +55,8 @@ public function boot(): void { $this->albumFactory = resolve(AlbumFactory::class); $this->layouts = new Layouts(); + $this->albumsCollection = new ProtectedCollection(type: 'album'); + $this->photosCollection = new ProtectedCollection(type: 'photo'); } public function mount(string $albumId, string $photoId = ''): void @@ -74,23 +77,34 @@ final public function render(): View { $this->sessionFlags = SessionFlags::get(); $this->rights = AlbumRights::make($this->album); + $this->num_albums = 0; + $this->num_albums = 0; if ($this->flags->is_accessible) { + $this->formatted = new AlbumFormatted($this->album, $this->fetchHeaderUrl()?->url); $this->num_users = User::count(); - $this->header_url ??= $this->fetchHeaderUrl()?->url; - $this->num_albums = $this->album instanceof ModelsAlbum ? $this->album->children->count() : 0; - $this->num_photos = $this->album->photos->count(); + + $this->photosCollection->set($this->album->photos); + $this->num_photos = $this->photosCollection->get()->count(); // No photos, no frame if ($this->num_photos === 0) { $this->flags->is_mod_frame_enabled = false; } + if ($this->album instanceof ModelsAlbum) { + $this->albumsCollection->set($this->album->children()->getResults()); + $this->num_albums = $this->albumsCollection->get()->count(); + } else { + $this->albumsCollection->set(null); + } + $is_latitude_longitude_found = false; if ($this->album instanceof ModelsAlbum) { $is_latitude_longitude_found = $this->album->all_photos()->whereNotNull('latitude')->whereNotNull('longitude')->count() > 0; $aspectRatio = $this->album->album_thumb_aspect_ratio ?? Configs::getValueAsEnum('default_album_thumb_aspect_ratio', AspectRatioType::class); $this->flags->album_thumb_css_aspect_ratio = $aspectRatio->css(); + $this->flags->cover_id = $this->album->cover_id; } else { $is_latitude_longitude_found = $this->album->photos()->whereNotNull('latitude')->whereNotNull('longitude')->count() > 0; } @@ -102,6 +116,9 @@ final public function render(): View can_rotate: Configs::getValueAsBool('editor_enabled'), can_edit: $this->rights->can_edit, ); + } else { + $this->albumsCollection->set(null); + $this->photosCollection->set(collect([])); } return view('livewire.pages.gallery.album'); @@ -132,41 +149,6 @@ public function reloadPage(): void } } - /** - * Return the photoIDs (no need to wait to compute the geometry). - * - * @return Collection - */ - public function getPhotosProperty(): Collection - { - return $this->album->photos; - } - - /** - * @return Collection|null - */ - public function getAlbumsProperty(): Collection|null - { - if ($this->album instanceof ModelsAlbum) { - /** @var Collection $res */ - $res = $this->album->children()->getResults(); - - return $res; - } - - return null; - } - - /** - * Used in the JS front-end to manage the selected albums. - * - * @return array - */ - public function getAlbumIDsProperty(): array - { - return $this->getAlbumsProperty()?->map(fn ($v, $k) => $v->id)?->all() ?? []; - } - /** * Fetch the header url. * @@ -203,19 +185,22 @@ private function fetchHeaderUrl(): SizeVariant|null return $headerSizeVariant; } - $photo = SizeVariant::query() + $query_ratio = SizeVariant::query() ->select('photo_id') ->whereBelongsTo($this->album->photos) ->where('ratio', '>', 1) // ! we prefer landscape first. - ->whereIn('type', [SizeVariantType::MEDIUM, SizeVariantType::SMALL2X, SizeVariantType::SMALL]) - ->inRandomOrder() - ->first() ?? - SizeVariant::query() - ->select('photo_id') - ->whereBelongsTo($this->album->photos) - ->whereIn('type', [SizeVariantType::MEDIUM, SizeVariantType::SMALL2X, SizeVariantType::SMALL]) - ->inRandomOrder() - ->first(); + ->whereIn('type', [SizeVariantType::MEDIUM, SizeVariantType::SMALL2X, SizeVariantType::SMALL]); + $num = $query_ratio->count() - 1; + $photo = $query_ratio->skip(rand(0, $num))->first(); + + if ($photo === null) { + $query = SizeVariant::query() + ->select('photo_id') + ->whereBelongsTo($this->album->photos) + ->whereIn('type', [SizeVariantType::MEDIUM, SizeVariantType::SMALL2X, SizeVariantType::SMALL]); + $num = $query->count() - 1; + $photo = $query->skip(rand(0, $num))->first(); + } return $photo === null ? null : SizeVariant::query() ->where('photo_id', '=', $photo->photo_id) @@ -278,7 +263,7 @@ public function setAsCover(string $albumID): void public function getAlbumFormattedProperty(): AlbumFormatted { - return new AlbumFormatted($this->album, $this->fetchHeaderUrl()?->url); + return $this->formatted; } public function getNoImagesAlbumsMessageProperty(): string diff --git a/app/Livewire/Components/Pages/Gallery/Albums.php b/app/Livewire/Components/Pages/Gallery/Albums.php index 4b20aa3380..ddaa2a5a60 100644 --- a/app/Livewire/Components/Pages/Gallery/Albums.php +++ b/app/Livewire/Components/Pages/Gallery/Albums.php @@ -72,19 +72,26 @@ public function boot(): void $this->title = Configs::getValueAsString('site_title'); } + /** + * @return Collection + */ public function getAlbumsProperty(): Collection { return $this->topAlbums->albums; } + /** + * @return Collection + */ public function getSmartAlbumsProperty(): Collection { return $this->topAlbums->smart_albums - // We filter out the public one (we don't remove it completely to not break the other front-end). - ->concat($this->topAlbums->tag_albums) - ->reject(fn ($album) => $album === null); + ->concat($this->topAlbums->tag_albums); } + /** + * @return Collection + */ public function getSharedAlbumsProperty(): Collection { return $this->topAlbums->shared_albums; @@ -115,7 +122,7 @@ public function getIsLoginLeftProperty(): bool /** * Used in the JS front-end to manage the selected albums. * - * @return array + * @return string[] */ public function getAlbumIDsProperty(): array { diff --git a/app/Livewire/Components/Pages/Gallery/BaseAlbumComponent.php b/app/Livewire/Components/Pages/Gallery/BaseAlbumComponent.php index 270a9a0e89..c92235a6ec 100644 --- a/app/Livewire/Components/Pages/Gallery/BaseAlbumComponent.php +++ b/app/Livewire/Components/Pages/Gallery/BaseAlbumComponent.php @@ -11,6 +11,7 @@ use App\Livewire\DTO\AlbumRights; use App\Livewire\DTO\Layouts; use App\Livewire\DTO\PhotoFlags; +use App\Livewire\DTO\ProtectedCollection; use App\Livewire\DTO\SessionFlags; use App\Livewire\Traits\AlbumsPhotosContextMenus; use App\Livewire\Traits\Notify; @@ -41,9 +42,14 @@ abstract class BaseAlbumComponent extends Component protected Layouts $layouts; + /** @var ProtectedCollection */ + protected ?ProtectedCollection $albumsCollection; + + /** @var ProtectedCollection<\App\Models\Photo> */ + protected ?ProtectedCollection $photosCollection; + #[Locked] public ?string $albumId = null; #[Locked] public ?string $photoId = null; - #[Locked] public ?string $header_url = null; #[Locked] public int $num_albums = 0; #[Locked] public int $num_photos = 0; #[Locked] public int $num_users = 0; @@ -72,23 +78,32 @@ final public function getPhotosResourceProperty(): PhotoCollectionResource /** * Return the photoIDs (no need to wait to compute the geometry). * - * @return Collection + * @return Collection|LengthAwarePaginator */ - abstract public function getPhotosProperty(): Collection|LengthAwarePaginator; + public function getPhotosProperty(): Collection|LengthAwarePaginator + { + return $this->photosCollection->get(); + } /** * Return the albums. * - * @return Collection|null + * @return Collection|null */ - abstract public function getAlbumsProperty(): Collection|null; + final public function getAlbumsProperty(): Collection|null + { + return $this->albumsCollection->get(); + } /** * Used in the JS front-end to manage the selected albums. * - * @return array + * @return string[] */ - abstract public function getAlbumIDsProperty(): array; + final public function getAlbumIDsProperty(): array + { + return $this->albumsCollection->get()?->map(fn ($v, $_k) => $v->id)?->all() ?? []; + } /** * Back property used to retrieve the URL to step back and back arrow. @@ -124,7 +139,7 @@ final public function getLayoutsProperty(): Layouts /** * Getter for the license types in the front-end. * - * @return array associated array of license type and their localization + * @return array associated array of license type and their localization */ final public function getLicensesProperty(): array { diff --git a/app/Livewire/Components/Pages/Gallery/Search.php b/app/Livewire/Components/Pages/Gallery/Search.php index 00bfd99a7d..39e9c78e90 100644 --- a/app/Livewire/Components/Pages/Gallery/Search.php +++ b/app/Livewire/Components/Pages/Gallery/Search.php @@ -11,6 +11,7 @@ use App\Livewire\DTO\AlbumRights; use App\Livewire\DTO\Layouts; use App\Livewire\DTO\PhotoFlags; +use App\Livewire\DTO\ProtectedCollection; use App\Livewire\DTO\SessionFlags; use App\Models\Album as ModelsAlbum; use App\Models\Configs; @@ -35,8 +36,6 @@ class Search extends BaseAlbumComponent /** @var LengthAwarePaginator */ private LengthAwarePaginator $photos; - /** @var Collection */ - private Collection $albums; #[Locked] #[Url(history: true)] @@ -56,8 +55,9 @@ public function boot(): void $this->layouts = new Layouts(); $this->albumSearch = resolve(AlbumSearch::class); $this->photoSearch = resolve(PhotoSearch::class); + $this->albumsCollection = new ProtectedCollection(type: 'album', is_loaded: true, collection: collect([])); + $this->photosCollection = new ProtectedCollection(type: 'photo'); $this->photos = new LengthAwarePaginator([], 0, 200); - $this->albums = collect([]); $this->num_albums = 0; $this->num_photos = 0; $this->search_minimum_length_required = Configs::getValueAsInt('search_minimum_length_required'); @@ -87,6 +87,7 @@ public function mount(string $albumId = ''): void $album = $this->albumFactory->findAbstractAlbumOrFail($albumId); if ($album instanceof ModelsAlbum) { $this->album = $album; + $this->flags->cover_id = $this->album->cover_id; } else { $this->album = null; } @@ -126,14 +127,14 @@ public function render(): View ->paginate(Configs::getValueAsInt('search_pagination_limit')) ->withQueryString(); $this->photos = $photoResults; - /** @var Collection $albumResults */ $albumResults = $this->albumSearch->queryAlbums($this->terms); - $this->albums = $albumResults; - $this->num_albums = $this->albums->count(); + $this->albumsCollection->set($albumResults); + $this->num_albums = $this->albumsCollection->get()->count(); $this->num_photos = $this->photos->count(); $this->albumId = ''; $this->photoId = ''; } + /** @var Collection $albumResults */ return view('livewire.pages.gallery.search'); } @@ -141,23 +142,13 @@ public function render(): View /** * Return the photos. * - * @return Collection + * @return Collection */ public function getPhotosProperty(): Collection { return collect($this->photos->items()); } - public function getAlbumsProperty(): ?Collection - { - return $this->albums; - } - - public function getAlbumIDsProperty(): array - { - return $this->albums->map(fn ($v, $k) => $v->id)->all(); - } - // For now, simple public function getBackProperty(): string { diff --git a/app/Livewire/Components/Pages/Jobs.php b/app/Livewire/Components/Pages/Jobs.php index b07d8c5eea..f19b67dfd6 100644 --- a/app/Livewire/Components/Pages/Jobs.php +++ b/app/Livewire/Components/Pages/Jobs.php @@ -28,7 +28,7 @@ public function mount(): void * We use a computed property instead of attributes * in order to avoid poluting the data sent to the user. * - * @return Collection + * @return Collection * * @throws ConfigurationKeyMissingException */ diff --git a/app/Livewire/Components/Pages/Map.php b/app/Livewire/Components/Pages/Map.php index 63691fff54..62a4ddb055 100644 --- a/app/Livewire/Components/Pages/Map.php +++ b/app/Livewire/Components/Pages/Map.php @@ -53,12 +53,12 @@ public function mount(?string $albumId = null): void } /** - * @return array + * @return array */ public function getDataProperty(): array { if ($this->albumId === null) { - /** @var array $ret */ + /** @var array $ret */ $ret = $this->rootPositionData->do()->toArray(request()); return $ret; @@ -66,7 +66,7 @@ public function getDataProperty(): array $includeSubAlbums = Configs::getValueAsBool('map_include_subalbums'); - /** @var array $ret */ + /** @var array $ret */ $ret = $this->albumPositionData->get($this->album, $includeSubAlbums)->toArray(request()); return $ret; diff --git a/app/Livewire/Components/Pages/Users.php b/app/Livewire/Components/Pages/Users.php index c1d3032fb3..90567acfba 100644 --- a/app/Livewire/Components/Pages/Users.php +++ b/app/Livewire/Components/Pages/Users.php @@ -19,6 +19,7 @@ */ class Users extends Component { + /** @var Collection */ public Collection $users; private Create $create; diff --git a/app/Livewire/DTO/AlbumFlags.php b/app/Livewire/DTO/AlbumFlags.php index a70352961a..d8ca953e06 100644 --- a/app/Livewire/DTO/AlbumFlags.php +++ b/app/Livewire/DTO/AlbumFlags.php @@ -3,11 +3,19 @@ namespace App\Livewire\DTO; use App\Enum\AspectRatioType; +use App\Livewire\Traits\UseWireable; use App\Models\Configs; use Illuminate\Support\Facades\Auth; +use Livewire\Wireable; -class AlbumFlags +/** + * @implements Wireable + */ +class AlbumFlags implements Wireable { + /** @phpstan-use UseWireable */ + use UseWireable; + public function __construct( public bool $is_accessible = false, public bool $is_password_protected = false, @@ -15,6 +23,7 @@ public function __construct( public bool $is_base_album = false, public bool $is_mod_frame_enabled = false, public string $album_thumb_css_aspect_ratio = '', + public string|null $cover_id = null, ) { $this->is_map_accessible = Configs::getValueAsBool('map_display'); $this->is_map_accessible = $this->is_map_accessible && (Auth::check() || Configs::getValueAsBool('map_display_public')); diff --git a/app/Livewire/DTO/AlbumRights.php b/app/Livewire/DTO/AlbumRights.php index 4cd2963cfe..e34e5ddb03 100644 --- a/app/Livewire/DTO/AlbumRights.php +++ b/app/Livewire/DTO/AlbumRights.php @@ -8,8 +8,12 @@ use Illuminate\Support\Facades\Gate; use Livewire\Wireable; +/** + * @implements Wireable + */ class AlbumRights implements Wireable { + /** @phpstan-use UseWireable */ use UseWireable; public function __construct( diff --git a/app/Livewire/DTO/AlbumsFlags.php b/app/Livewire/DTO/AlbumsFlags.php index 26f079cbe6..0a8d1ffaa1 100644 --- a/app/Livewire/DTO/AlbumsFlags.php +++ b/app/Livewire/DTO/AlbumsFlags.php @@ -13,8 +13,12 @@ use Laragear\WebAuthn\Models\WebAuthnCredential; use Livewire\Wireable; +/** + * @implements Wireable + */ class AlbumsFlags implements Wireable { + /** @phpstan-use UseWireable */ use UseWireable; public function __construct( diff --git a/app/Livewire/DTO/OauthData.php b/app/Livewire/DTO/OauthData.php index 9718206429..dd1d747b64 100644 --- a/app/Livewire/DTO/OauthData.php +++ b/app/Livewire/DTO/OauthData.php @@ -5,8 +5,12 @@ use App\Livewire\Traits\UseWireable; use Livewire\Wireable; +/** + * @implements Wireable + */ class OauthData implements Wireable { + /** @phpstan-use UseWireable */ use UseWireable; public function __construct( diff --git a/app/Livewire/DTO/PhotoFlags.php b/app/Livewire/DTO/PhotoFlags.php index 266739b85d..126b9df7d2 100644 --- a/app/Livewire/DTO/PhotoFlags.php +++ b/app/Livewire/DTO/PhotoFlags.php @@ -5,8 +5,12 @@ use App\Livewire\Traits\UseWireable; use Livewire\Wireable; +/** + * @implements Wireable + */ class PhotoFlags implements Wireable { + /** @phpstan-use UseWireable */ use UseWireable; public function __construct( diff --git a/app/Livewire/DTO/ProtectedCollection.php b/app/Livewire/DTO/ProtectedCollection.php new file mode 100644 index 0000000000..0939188005 --- /dev/null +++ b/app/Livewire/DTO/ProtectedCollection.php @@ -0,0 +1,52 @@ +|null $collection + * + * @return void + */ + public function __construct( + private string $type, + private bool $is_loaded = false, + private ?Collection $collection = null, + ) { + } + + /** + * @return Collection|null collection encapsulated + * + * @throws LycheeLogicException we queried it too early + */ + public function get(): Collection|null + { + if ($this->is_loaded) { + return $this->collection; + } + + throw new LycheeLogicException(sprintf('Collection %s data is not available.', $this->type)); + } + + /** + * Set the collection. + * + * @param Collection|null $collection + * + * @return void + */ + public function set(Collection|null $collection) + { + $this->is_loaded = true; + $this->collection = $collection; + } +} \ No newline at end of file diff --git a/app/Livewire/Forms/AllConfigsForms.php b/app/Livewire/Forms/AllConfigsForms.php index 00f9bf6aa7..2cc707b016 100644 --- a/app/Livewire/Forms/AllConfigsForms.php +++ b/app/Livewire/Forms/AllConfigsForms.php @@ -15,7 +15,7 @@ class AllConfigsForms extends Form #[Locked] public array $configs; - /** @var array */ + /** @var string[] */ public array $values; /** @@ -31,7 +31,7 @@ class AllConfigsForms extends Form /** * Initialize form data. * - * @param Collection $configs + * @param Collection $configs * * @return void */ diff --git a/app/Livewire/Forms/ImportFromUrlForm.php b/app/Livewire/Forms/ImportFromUrlForm.php index d4a91234ee..77831d15fb 100644 --- a/app/Livewire/Forms/ImportFromUrlForm.php +++ b/app/Livewire/Forms/ImportFromUrlForm.php @@ -12,8 +12,8 @@ class ImportFromUrlForm extends Form { #[Locked] public ?string $albumID = null; + /** @var string[] $urls */ #[Locked] - /** @var array */ public array $urls = []; public string $urlArea = ''; diff --git a/app/Livewire/Forms/PhotoUpdateForm.php b/app/Livewire/Forms/PhotoUpdateForm.php index cb9a313349..d8d9c340d8 100644 --- a/app/Livewire/Forms/PhotoUpdateForm.php +++ b/app/Livewire/Forms/PhotoUpdateForm.php @@ -16,7 +16,7 @@ class PhotoUpdateForm { private ?Photo $photo = null; - /** @var array */ + /** @var string[] */ #[Locked] public array $tags = []; #[Locked] public string $date = ''; public function __construct( @@ -96,6 +96,9 @@ public function save(): void $photo->save(); } + /** + * @return array + */ public function all(): array { return Utils::getPublicProperties($this); diff --git a/app/Livewire/Traits/AlbumsPhotosContextMenus.php b/app/Livewire/Traits/AlbumsPhotosContextMenus.php index 29bae91ad1..bd7514a957 100644 --- a/app/Livewire/Traits/AlbumsPhotosContextMenus.php +++ b/app/Livewire/Traits/AlbumsPhotosContextMenus.php @@ -35,6 +35,13 @@ public function openPhotoDropdown(int $x, int $y, string $photoId): void )->to(ContextMenu::class); } + /** + * @param int $x + * @param int $y + * @param string[] $photoIds + * + * @return void + */ #[Renderless] public function openPhotosDropdown(int $x, int $y, array $photoIds): void { @@ -57,6 +64,13 @@ public function openAlbumDropdown(int $x, int $y, string $albumID): void )->to(ContextMenu::class); } + /** + * @param int $x + * @param int $y + * @param string[] $albumIds + * + * @return void + */ #[Renderless] public function openAlbumsDropdown(int $x, int $y, array $albumIds): void { diff --git a/app/Livewire/Traits/InteractWithModal.php b/app/Livewire/Traits/InteractWithModal.php index 6b98053546..d607ff6113 100644 --- a/app/Livewire/Traits/InteractWithModal.php +++ b/app/Livewire/Traits/InteractWithModal.php @@ -9,8 +9,8 @@ trait InteractWithModal /** * Open Modal with form and paramters. * - * @param string $form Livewire component to include in the modal - * @param array $params Parameters for said component + * @param string $form Livewire component to include in the modal + * @param array $params Parameters for said component * * @return void */ @@ -22,9 +22,9 @@ protected function openModal(string $form, array $params = []): void /** * Open Modal with form and paramters. * - * @param string $form Livewire component to include in the modal - * @param string $close_text text to put if we use a close button - * @param array $params Parameters for said component + * @param string $form Livewire component to include in the modal + * @param string $close_text text to put if we use a close button + * @param array $params Parameters for said component * * @return void */ diff --git a/app/Livewire/Traits/UsePhotoViewActions.php b/app/Livewire/Traits/UsePhotoViewActions.php index e4988308c2..564e70be1b 100644 --- a/app/Livewire/Traits/UsePhotoViewActions.php +++ b/app/Livewire/Traits/UsePhotoViewActions.php @@ -20,7 +20,7 @@ trait UsePhotoViewActions /** * Update data from a form data. * - * @param array $formData data + * @param string[] $formData data * * @return PhotoResource|null null or error, updated Model otherwise */ @@ -118,7 +118,7 @@ public function rotate_cw(string $photoID): void /** * Set all photos for given id as starred. * - * @param array $photoIDs + * @param string[] $photoIDs * * @return void */ @@ -132,7 +132,7 @@ public function setStar(array $photoIDs): void /** * Set all photos for given id as NOT starred. * - * @param array $photoIDs + * @param string[] $photoIDs * * @return void */ diff --git a/app/Livewire/Traits/UseValidator.php b/app/Livewire/Traits/UseValidator.php index 5722527671..da1cc037c0 100644 --- a/app/Livewire/Traits/UseValidator.php +++ b/app/Livewire/Traits/UseValidator.php @@ -13,7 +13,7 @@ trait UseValidator /** * Send message to front-end, it will be displayed in the top right of the window. * - * @param array $rules to apply + * @param array> $rules * * @return bool */ diff --git a/app/Livewire/Traits/UseWireable.php b/app/Livewire/Traits/UseWireable.php index b3b78eae13..f248297dc3 100644 --- a/app/Livewire/Traits/UseWireable.php +++ b/app/Livewire/Traits/UseWireable.php @@ -6,9 +6,16 @@ /** * Quick helpers for the serialization and deserialization of livewire components. + * + * @template TModelClass */ trait UseWireable { + /** + * @return array + * + * @throws LycheeLogicException + */ public function toLivewire(): array { $result = []; @@ -29,7 +36,7 @@ public function toLivewire(): array /** * @param mixed $data * - * @return self + * @return TModelClass * * @throws LycheeLogicException * @throws \ReflectionException diff --git a/app/Mail/PhotosAdded.php b/app/Mail/PhotosAdded.php index e3eb139b50..d78db2613e 100644 --- a/app/Mail/PhotosAdded.php +++ b/app/Mail/PhotosAdded.php @@ -12,12 +12,15 @@ class PhotosAdded extends Mailable use Queueable; use SerializesModels; + /** @var array>|string>> */ protected array $photos; protected string $title; /** * Create a new message instance. * + * @param array>|string>> $photos + * * @return void */ public function __construct(array $photos) diff --git a/app/Metadata/RateLimiterStore.php b/app/Metadata/RateLimiterStore.php index 8d2fc2962c..9a817d01db 100644 --- a/app/Metadata/RateLimiterStore.php +++ b/app/Metadata/RateLimiterStore.php @@ -10,6 +10,9 @@ */ class RateLimiterStore implements Store { + /** + * @return array + */ public function get(): array { return Cache::get('rate-limiter', []); diff --git a/app/Metadata/Versions/Remote/GitTags.php b/app/Metadata/Versions/Remote/GitTags.php index 5d793394de..260afe2e7b 100644 --- a/app/Metadata/Versions/Remote/GitTags.php +++ b/app/Metadata/Versions/Remote/GitTags.php @@ -63,8 +63,8 @@ protected function dataToSha(object $data): string /** * Given array and sha returns the name of the tag associated to the sha. * - * @param array $data - * @param string $sha + * @param object[] $data + * @param string $sha * * @return string */ diff --git a/app/ModelFunctions/MOVFormat.php b/app/ModelFunctions/MOVFormat.php index b955ea1e35..da5b139ae6 100644 --- a/app/ModelFunctions/MOVFormat.php +++ b/app/ModelFunctions/MOVFormat.php @@ -51,11 +51,17 @@ public function getExtraParams(): array return ['-f', self::FFMPEG_CONTAINER_ID]; } + /** + * @return string[] + */ public function getAvailableAudioCodecs(): array { return [self::FFMPEG_AUDIO_CODEC_ID]; } + /** + * @return string[] + */ public function getAvailableVideoCodecs(): array { return [self::FFMPEG_VIDEO_CODEC_ID]; diff --git a/app/Models/AccessPermission.php b/app/Models/AccessPermission.php index 31b75c8c11..7bd68cd8c7 100644 --- a/app/Models/AccessPermission.php +++ b/app/Models/AccessPermission.php @@ -101,7 +101,7 @@ public function newEloquentBuilder($query): AccessPermissionBuilder /** * Returns the relationship between an AccessPermission and its associated album. * - * @return BelongsTo + * @return BelongsTo */ public function album(): BelongsTo { @@ -111,7 +111,7 @@ public function album(): BelongsTo /** * Returns the relationship between an AccessPermission and its applied User. * - * @return BelongsTo + * @return BelongsTo */ public function user(): BelongsTo { diff --git a/app/Models/Album.php b/app/Models/Album.php index 225e4bbd74..5ecfc94d27 100644 --- a/app/Models/Album.php +++ b/app/Models/Album.php @@ -172,6 +172,9 @@ class Album extends BaseAlbum implements Node */ protected $with = ['cover', 'cover.size_variants', 'thumb']; + /** + * @return array + */ protected function _toArray(): array { return parent::toArray(); @@ -233,7 +236,7 @@ public function descendants(): DescendantsRelation /** * Return the relationship between an album and its cover. * - * @return HasOne + * @return HasOne */ public function cover(): HasOne { @@ -243,7 +246,7 @@ public function cover(): HasOne /** * Return the relationship between an album and its header. * - * @return HasOne + * @return HasOne */ public function header(): HasOne { diff --git a/app/Models/BaseAlbumImpl.php b/app/Models/BaseAlbumImpl.php index 3d1c4ac3a7..723943de2e 100644 --- a/app/Models/BaseAlbumImpl.php +++ b/app/Models/BaseAlbumImpl.php @@ -133,6 +133,7 @@ class BaseAlbumImpl extends Model implements HasRandomID { use HasAttributesPatch; + /** @phpstan-use HasRandomIDAndLegacyTimeBasedID */ use HasRandomIDAndLegacyTimeBasedID; use ThrowsConsistentExceptions; use UTCBasedTimes; @@ -196,6 +197,9 @@ class BaseAlbumImpl extends Model implements HasRandomID */ protected $with = ['owner', 'access_permissions']; + /** + * @return array + */ protected function _toArray(): array { return parent::toArray(); @@ -214,7 +218,7 @@ public function newEloquentBuilder($query): BaseAlbumImplBuilder /** * Returns the relationship between an album and its owner. * - * @return BelongsTo + * @return BelongsTo */ public function owner(): BelongsTo { @@ -225,7 +229,7 @@ public function owner(): BelongsTo * Returns the relationship between an album and all users with whom * this album is shared. * - * @return BelongsToMany + * @return BelongsToMany */ public function shared_with(): BelongsToMany { @@ -240,7 +244,7 @@ public function shared_with(): BelongsToMany /** * Returns the relationship between an album and its associated permissions. * - * @return hasMany + * @return hasMany */ public function access_permissions(): hasMany { diff --git a/app/Models/Builders/AlbumBuilder.php b/app/Models/Builders/AlbumBuilder.php index d7d6b1aa86..c6c2773c77 100644 --- a/app/Models/Builders/AlbumBuilder.php +++ b/app/Models/Builders/AlbumBuilder.php @@ -60,7 +60,7 @@ class AlbumBuilder extends NSQueryBuilder * num_children and num_photos to the query, if a "full" model is * requested, i.e. if the selected columns are `*` or not given at all. * - * @param array|string $columns + * @param string[]|string $columns * * @return Album[] * @@ -101,7 +101,7 @@ public function getModels($columns = ['*']): array /** * Get statistics of errors of the tree. * - * @return array + * @return array * * @throws QueryBuilderException */ diff --git a/app/Models/Extensions/BaseAlbum.php b/app/Models/Extensions/BaseAlbum.php index 3262432dfc..4fbcdc36e4 100644 --- a/app/Models/Extensions/BaseAlbum.php +++ b/app/Models/Extensions/BaseAlbum.php @@ -58,7 +58,7 @@ abstract class BaseAlbum extends Model implements AbstractAlbum, HasRandomID public $incrementing = false; /** - * {@inheritDoc} + * @return BelongsTo */ public function base_class(): BelongsTo { @@ -68,7 +68,7 @@ public function base_class(): BelongsTo /** * Returns the relationship between an album and its owner. * - * @return BelongsTo + * @return BelongsTo */ public function owner(): BelongsTo { @@ -79,7 +79,7 @@ public function owner(): BelongsTo * Returns the relationship between an album and all users with whom * this album is shared. * - * @return BelongsToMany + * @return BelongsToMany */ public function shared_with(): BelongsToMany { @@ -89,7 +89,7 @@ public function shared_with(): BelongsToMany /** * Returns the relationship between an album and its associated permissions. * - * @return HasMany + * @return HasMany */ public function access_permissions(): HasMany { @@ -116,6 +116,9 @@ public function public_permissions(): AccessPermission|null return $this->base_class->public_permissions(); } + /** + * @return Relation<\App\Models\Photo> + */ abstract public function photos(): Relation; /** diff --git a/app/Models/Extensions/ForwardsToParentImplementation.php b/app/Models/Extensions/ForwardsToParentImplementation.php index 5823b2ff00..8a1edba13b 100644 --- a/app/Models/Extensions/ForwardsToParentImplementation.php +++ b/app/Models/Extensions/ForwardsToParentImplementation.php @@ -75,7 +75,9 @@ public function initializeForwardsToParentImplementation(): void /** * Perform a model insert operation. * - * @param Builder $query + * @template TModel of \Illuminate\Database\Eloquent\Model + * + * @param Builder $query * * @return bool * @@ -104,7 +106,9 @@ protected function performInsert(Builder $query): bool /** * Perform a model update operation. * - * @param Builder $query + * @template TModel of \Illuminate\Database\Eloquent\Model + * + * @param Builder $query * * @return bool */ @@ -205,7 +209,7 @@ public function getIncrementing(): bool * * Inspired by {@link \Illuminate\Database\Eloquent\Concerns\HasAttributes::isDirty()}. * - * @param array|string|null $attributes + * @param string[]|string|null $attributes * * @return bool */ @@ -222,7 +226,7 @@ public function isDirty($attributes = null): bool /** * Convert the model instance to an array. * - * @return array + * @return array */ public function toArray(): array { diff --git a/app/Models/Extensions/HasBidirectionalRelationships.php b/app/Models/Extensions/HasBidirectionalRelationships.php index 188750acd8..b29cc02fa8 100644 --- a/app/Models/Extensions/HasBidirectionalRelationships.php +++ b/app/Models/Extensions/HasBidirectionalRelationships.php @@ -62,15 +62,18 @@ protected function getRelationshipFromMethod($method): mixed * * Inspired by {@link \Illuminate\Database\Eloquent\Concerns\HasRelationships::hasMany}. * - * @param string $related - * @param string|null $foreignKey - * @param string|null $localKey - * @param string|null $foreignMethodName + * @template TRelatedModel of \Illuminate\Database\Eloquent\Model * - * @return HasManyBidirectionally + * @param class-string $related + * @param string|null $foreignKey + * @param string|null $localKey + * @param string|null $foreignMethodName + * + * @return HasManyBidirectionally */ public function hasManyBidirectionally(string $related, ?string $foreignKey = null, ?string $localKey = null, ?string $foreignMethodName = null): HasManyBidirectionally { + /** @var TRelatedModel $instance */ $instance = $this->newRelatedInstance($related); $foreignKey = $foreignKey ?? $this->getForeignKey(); @@ -79,6 +82,7 @@ public function hasManyBidirectionally(string $related, ?string $foreignKey = nu $foreignMethodName = $foreignMethodName ?? $this->getForeignProperty(); + /** @phpstan-ignore-next-line */ return $this->newHasManyBidirectionally( $instance->newQuery(), $this, @@ -93,13 +97,16 @@ public function hasManyBidirectionally(string $related, ?string $foreignKey = nu * * Inspired by {@link \Illuminate\Database\Eloquent\Concerns\HasRelationships::newHasMany}. * - * @param Builder $query - * @param Model $parent - * @param string $foreignKey - * @param string $localKey - * @param string $foreignMethodName + * @template TRelatedModel of \Illuminate\Database\Eloquent\Model + * @template TParentModel of \Illuminate\Database\Eloquent\Model + * + * @param Builder $query + * @param TParentModel $parent + * @param string $foreignKey + * @param string $localKey + * @param string $foreignMethodName * - * @return HasManyBidirectionally + * @return HasManyBidirectionally */ protected function newHasManyBidirectionally(Builder $query, Model $parent, string $foreignKey, string $localKey, string $foreignMethodName): HasManyBidirectionally { diff --git a/app/Models/Extensions/HasRandomIDAndLegacyTimeBasedID.php b/app/Models/Extensions/HasRandomIDAndLegacyTimeBasedID.php index 8faf6db1ed..dc4e896ef1 100644 --- a/app/Models/Extensions/HasRandomIDAndLegacyTimeBasedID.php +++ b/app/Models/Extensions/HasRandomIDAndLegacyTimeBasedID.php @@ -15,6 +15,8 @@ /** * Trait HasTimeBasedID. * + * @template TModel of \Illuminate\Database\Eloquent\Model + * * Inspired by https://emymbenoun.medium.com/how-to-use-uuids-instead-of-auto-increment-ids-in-your-laravel-app-2e6cc045f6c1. */ trait HasRandomIDAndLegacyTimeBasedID @@ -72,7 +74,7 @@ public function setAttribute($key, $value): mixed * The method is mostly copied & pasted from {@link \Illuminate\Database\Eloquent\Model::performInsert()} * with adoptions regarding key generation. * - * @param Builder $query + * @param Builder $query * * @return bool true on success * diff --git a/app/Models/Extensions/SizeVariants.php b/app/Models/Extensions/SizeVariants.php index 05f986b662..789b4914b4 100644 --- a/app/Models/Extensions/SizeVariants.php +++ b/app/Models/Extensions/SizeVariants.php @@ -20,6 +20,8 @@ /** * Class SizeVariants. + * + * @extends AbstractDTO|null> */ class SizeVariants extends AbstractDTO { @@ -37,10 +39,10 @@ class SizeVariants extends AbstractDTO /** * SizeVariants constructor. * - * @param Photo $photo the parent object - * this object is tied to - * @param Collection|null $sizeVariants a collection of size - * variants + * @param Photo $photo the parent object + * this object is tied to + * @param Collection|null $sizeVariants a collection of size + * variants * * @throws LycheeInvalidArgumentException thrown if the photo and the * collection of size variants don't @@ -91,7 +93,7 @@ public function add(SizeVariant $sizeVariant): void /** * Serializes this object into an array. * - * @return array The serialized properties of this object + * @return array|null> The serialized properties of this object */ public function toArray(): array { @@ -109,7 +111,7 @@ public function toArray(): array /** * Return all SizeVariants as a collection. * - * @return BaseCollection + * @return BaseCollection */ public function toCollection(): BaseCollection { diff --git a/app/Models/Extensions/SortingDecorator.php b/app/Models/Extensions/SortingDecorator.php index 5f61e767e0..ee459e7ecf 100644 --- a/app/Models/Extensions/SortingDecorator.php +++ b/app/Models/Extensions/SortingDecorator.php @@ -8,6 +8,9 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; +/** + * @template TModelClass of \Illuminate\Database\Eloquent\Model + */ class SortingDecorator { public const POSTPONE_COLUMNS = [ @@ -15,8 +18,16 @@ class SortingDecorator ColumnSortingType::DESCRIPTION, ]; + /** + * @var Builder + */ protected Builder $baseBuilder; + /** + * @param Builder $baseBuilder + * + * @return void + */ public function __construct(Builder $baseBuilder) { $this->baseBuilder = $baseBuilder; @@ -76,6 +87,8 @@ public function __construct(Builder $baseBuilder) * @param ColumnSortingType $column the column acc. to which the result shall be sorted * @param OrderSortingType $direction the order direction * + * @return SortingDecorator + * * @throws InvalidOrderDirectionException */ public function orderBy(ColumnSortingType $column, OrderSortingType $direction): SortingDecorator @@ -99,6 +112,8 @@ public function orderBy(ColumnSortingType $column, OrderSortingType $direction): * @param ColumnSortingType $column the column acc. to which the result shall be sorted * @param OrderSortingType $direction the order direction * + * @return SortingDecorator + * * @throws InvalidOrderDirectionException */ public function orderPhotosBy(ColumnSortingType $column, OrderSortingType $direction): SortingDecorator @@ -120,7 +135,7 @@ public function orderPhotosBy(ColumnSortingType $column, OrderSortingType $direc * * @param string[] $columns * - * @return Collection + * @return Collection * * @throws InvalidOrderDirectionException */ @@ -144,7 +159,7 @@ public function get(array $columns = ['*']): Collection throw new InvalidOrderDirectionException(); } - /** @var Collection $result */ + /** @var Collection $result */ $result = $this->baseBuilder->get($columns); // Sort with PHP for the remaining criteria in reverse order. diff --git a/app/Models/Extensions/ThrowsConsistentExceptions.php b/app/Models/Extensions/ThrowsConsistentExceptions.php index 3141865f87..5b57707bf4 100644 --- a/app/Models/Extensions/ThrowsConsistentExceptions.php +++ b/app/Models/Extensions/ThrowsConsistentExceptions.php @@ -45,7 +45,7 @@ protected function friendlyModelName(): string abstract public function toArray(); /** - * @param array $options + * @param array $options * * @return bool always return true * @@ -104,7 +104,7 @@ public function delete(): bool /** * Serializes this object into an array. * - * @return array The serialized properties of this object + * @return array The serialized properties of this object * * @throws \JsonException * diff --git a/app/Models/Extensions/Thumb.php b/app/Models/Extensions/Thumb.php index 08bf1c8f7a..d51dfb03e2 100644 --- a/app/Models/Extensions/Thumb.php +++ b/app/Models/Extensions/Thumb.php @@ -14,6 +14,9 @@ use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\Relation; +/** + * @extends AbstractDTO + */ class Thumb extends AbstractDTO { public string $id; @@ -33,9 +36,9 @@ protected function __construct(string $id, string $type, string $thumbUrl, ?stri * Restricts the given relation for size variants such that only the * necessary variants for a thumbnail are selected. * - * @param HasMany $relation + * @param HasMany $relation * - * @return HasMany + * @return HasMany */ public static function sizeVariantsFilter(HasMany $relation): HasMany { @@ -53,8 +56,8 @@ public static function sizeVariantsFilter(HasMany $relation): HasMany * Note, this method assumes that the relation is already restricted * such that it only returns photos which the current user may see. * - * @param Relation|Builder $photoQueryable the relation to or query for {@link Photo} which is used to pick a thumb - * @param SortingCriterion $sorting the sorting criterion + * @param Relation|Builder $photoQueryable the relation to or query for {@link Photo} which is used to pick a thumb + * @param SortingCriterion $sorting the sorting criterion * * @return Thumb|null the created thumbnail; null if the relation is empty * @@ -85,7 +88,7 @@ public static function createFromQueryable(Relation|Builder $photoQueryable, Sor * Note, this method assumes that the relation is already restricted * such that it only returns photos which the current user may see. * - * @param Relation|Builder $photoQueryable the relation to or query for {@link Photo} which is used to pick a thumb + * @param Relation|Builder $photoQueryable the relation to or query for {@link Photo} which is used to pick a thumb * * @return Thumb|null the created thumbnail; null if the relation is empty * @@ -153,7 +156,7 @@ public static function createFromPhoto(?Photo $photo): ?Thumb /** * Serializes this object into an array. * - * @return array The serialized properties of this object + * @return array The serialized properties of this object */ public function toArray(): array { diff --git a/app/Models/Extensions/ToArrayThrowsNotImplemented.php b/app/Models/Extensions/ToArrayThrowsNotImplemented.php index 400986775e..f5e2d64a58 100644 --- a/app/Models/Extensions/ToArrayThrowsNotImplemented.php +++ b/app/Models/Extensions/ToArrayThrowsNotImplemented.php @@ -16,8 +16,16 @@ */ trait ToArrayThrowsNotImplemented { + /** + * @return array + */ abstract protected function _toArray(): array; + /** + * @return array + * + * @throws NotImplementedException + */ final public function toArray(): array { if (Route::is('livewire_index') || Route::is('livewire.message')) { diff --git a/app/Models/JobHistory.php b/app/Models/JobHistory.php index 3384fbb7ea..4313959105 100644 --- a/app/Models/JobHistory.php +++ b/app/Models/JobHistory.php @@ -73,7 +73,7 @@ public function newEloquentBuilder($query): JobHistoryBuilder /** * Returns the relationship between an Job and its owner. * - * @return BelongsTo + * @return BelongsTo */ public function owner(): BelongsTo { diff --git a/app/Models/OauthCredential.php b/app/Models/OauthCredential.php index 1435d84860..a6e01245c0 100644 --- a/app/Models/OauthCredential.php +++ b/app/Models/OauthCredential.php @@ -47,7 +47,7 @@ class OauthCredential extends Model /** * Return the relationship between a Photo and its Album. * - * @return BelongsTo + * @return BelongsTo */ public function user(): BelongsTo { diff --git a/app/Models/Photo.php b/app/Models/Photo.php index d8909c3440..bf8ca023ad 100644 --- a/app/Models/Photo.php +++ b/app/Models/Photo.php @@ -124,8 +124,10 @@ class Photo extends Model use HasFactory; use UTCBasedTimes; use HasAttributesPatch; + /** @phpstan-use HasRandomIDAndLegacyTimeBasedID */ use HasRandomIDAndLegacyTimeBasedID; use ThrowsConsistentExceptions; + /** @phpstan-use HasBidirectionalRelationships */ use HasBidirectionalRelationships; use ToArrayThrowsNotImplemented; @@ -178,6 +180,9 @@ public function newEloquentBuilder($query): PhotoBuilder return new PhotoBuilder($query); } + /** + * @return array + */ protected function _toArray(): array { return parent::toArray(); @@ -186,7 +191,7 @@ protected function _toArray(): array /** * Return the relationship between a Photo and its Album. * - * @return BelongsTo + * @return BelongsTo */ public function album(): BelongsTo { @@ -196,7 +201,7 @@ public function album(): BelongsTo /** * Return the relationship between a Photo and its Owner. * - * @return BelongsTo + * @return BelongsTo */ public function owner(): BelongsTo { @@ -420,8 +425,7 @@ public function isRaw(): bool } /** - * @throws ModelDBException - * @throws IllegalOrderOfOperationException + * @param string[] $except */ public function replicate(?array $except = null): Photo { diff --git a/app/Models/SizeVariant.php b/app/Models/SizeVariant.php index 2515981bb5..2f5847c55d 100644 --- a/app/Models/SizeVariant.php +++ b/app/Models/SizeVariant.php @@ -136,6 +136,9 @@ public function newEloquentBuilder($query): SizeVariantBuilder return new SizeVariantBuilder($query); } + /** + * @return array + */ protected function _toArray(): array { return parent::toArray(); @@ -145,7 +148,7 @@ protected function _toArray(): array * Returns the association to the photo which this size variant belongs * to. * - * @return BelongsTo + * @return BelongsTo */ public function photo(): BelongsTo { @@ -156,7 +159,7 @@ public function photo(): BelongsTo * Returns the association to the symbolics links which point to this * size variant. * - * @return HasManyBidirectionally + * @return HasManyBidirectionally */ public function sym_links(): HasManyBidirectionally { diff --git a/app/Models/SymLink.php b/app/Models/SymLink.php index fd55ef2930..efc22e5a70 100644 --- a/app/Models/SymLink.php +++ b/app/Models/SymLink.php @@ -79,6 +79,9 @@ class SymLink extends Model 'size_variant_id', // see above ]; + /** + * @return array + */ final protected function _toArray(): array { return parent::toArray(); @@ -94,6 +97,9 @@ public function newEloquentBuilder($query): SymLinkBuilder return new SymLinkBuilder($query); } + /** + * @return BelongsTo + */ public function size_variant(): BelongsTo { return $this->belongsTo(SizeVariant::class); @@ -102,9 +108,9 @@ public function size_variant(): BelongsTo /** * Scopes the passed query to all outdated symlinks. * - * @param Builder $query the unscoped query + * @param Builder $query the unscoped query * - * @return Builder the scoped query + * @return Builder the scoped query * * @throws InvalidTimeZoneException */ @@ -143,7 +149,7 @@ protected function getUrlAttribute(): string * If this method cannot create the symbolic link, then this method * cancels the insert operation. * - * @param Builder $query + * @param Builder $query * * @return bool * diff --git a/app/Models/TagAlbum.php b/app/Models/TagAlbum.php index e4080d67db..0499f00275 100644 --- a/app/Models/TagAlbum.php +++ b/app/Models/TagAlbum.php @@ -92,6 +92,9 @@ class TagAlbum extends BaseAlbum 'thumb', ]; + /** + * @return array + */ protected function _toArray(): array { $result = parent::toArray(); diff --git a/app/Models/User.php b/app/Models/User.php index c8ece1a41e..734c5a7159 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -44,7 +44,7 @@ * @property Collection $oauthCredentials * @property DatabaseNotificationCollection|DatabaseNotification[] $notifications * @property Collection $shared - * @property Collection $photos + * @property Collection $photos * @property int|null $photos_count * @property Collection $webAuthnCredentials * @property int|null $web_authn_credentials_count @@ -108,6 +108,9 @@ class User extends Authenticatable implements WebAuthnAuthenticatable protected $hidden = []; + /** + * @return array + */ protected function _toArray(): array { return parent::toArray(); @@ -128,17 +131,18 @@ public function newEloquentBuilder($query): UserBuilder /** * Return the albums owned by the user. * - * @return HasMany + * @return HasMany */ public function albums(): HasMany { + /** @phpstan-ignore-next-line */ return $this->hasMany(BaseAlbumImpl::class, 'owner_id', 'id'); } /** * Return the photos owned by the user. * - * @return HasMany + * @return HasMany */ public function photos(): HasMany { @@ -148,7 +152,7 @@ public function photos(): HasMany /** * Return the albums shared to the user. * - * @return BelongsToMany + * @return BelongsToMany */ public function shared(): BelongsToMany { @@ -163,7 +167,7 @@ public function shared(): BelongsToMany /** * Return the Oauth credentials owned by the user. * - * @return HasMany + * @return HasMany */ public function oauthCredentials(): HasMany { @@ -207,7 +211,7 @@ public function getNameAttribute(): string */ public function delete(): bool { - /** @var HasMany[] $ownershipRelations */ + /** @var HasMany[] $ownershipRelations */ $ownershipRelations = [$this->photos(), $this->albums()]; $hasAny = false; diff --git a/app/Policies/AlbumPolicy.php b/app/Policies/AlbumPolicy.php index 314f55273c..4d0c3d7ba8 100644 --- a/app/Policies/AlbumPolicy.php +++ b/app/Policies/AlbumPolicy.php @@ -537,9 +537,9 @@ public static function getUnlockedAlbumIDs(): array * Remove root and smart albums, as they get a pass. * Make IDs unique as otherwise count will fail. * - * @param array $albumIDs + * @param array $albumIDs * - * @return array + * @return array */ private function uniquify(array $albumIDs): array { diff --git a/app/Policies/AlbumQueryPolicy.php b/app/Policies/AlbumQueryPolicy.php index 35a5350841..ebceee7ca4 100644 --- a/app/Policies/AlbumQueryPolicy.php +++ b/app/Policies/AlbumQueryPolicy.php @@ -38,13 +38,13 @@ class AlbumQueryPolicy * * Note this makes use of the fact that when an album is NOT shared nor public, the value of is_link_required is NULL. * - * @param AlbumBuilder|TagAlbumBuilder $query + * @param AlbumBuilder|FixedQueryBuilder|FixedQueryBuilder $query * - * @return AlbumBuilder|TagAlbumBuilder + * @return AlbumBuilder|FixedQueryBuilder|FixedQueryBuilder|TagAlbumBuilder * * @throws InternalLycheeException */ - public function applyVisibilityFilter(AlbumBuilder|FixedQueryBuilder $query): AlbumBuilder|TagAlbumBuilder + public function applyVisibilityFilter(AlbumBuilder|FixedQueryBuilder $query): AlbumBuilder|TagAlbumBuilder|FixedQueryBuilder { $this->prepareModelQueryOrFail($query); @@ -379,7 +379,7 @@ public function appendUnreachableAlbumsCondition(BaseBuilder $builder, int|strin /** * Throws an exception if the given query does not query for an album. * - * @param AlbumBuilder|FixedQueryBuilder $query + * @param AlbumBuilder|FixedQueryBuilder|FixedQueryBuilder $query * * @throws QueryBuilderException * @throws InvalidQueryModelException @@ -473,11 +473,11 @@ private function getComputedAccessPermissionSubQuery(bool $full = false): BaseBu /** * Helper to join the the computed property for the possibly logged-in user. * - * @param AlbumBuilder|FixedQueryBuilder|BaseBuilder $query query to join to - * @param string $second id to link with - * @param string $prefix prefix in the future queries - * @param string $type left|inner - * @param bool $full Select most columns instead of just restricted + * @param AlbumBuilder|FixedQueryBuilder|FixedQueryBuilder|FixedQueryBuilder<\App\Models\Photo>|BaseBuilder $query query to join to + * @param string $second id to link with + * @param string $prefix prefix in the future queries + * @param string $type left|inner + * @param bool $full Select most columns instead of just restricted * * @return void * @@ -504,10 +504,10 @@ public function joinSubComputedAccessPermissions( * Join BaseAlbum. * This aim to give lighter sub selection to make the queries run faster. * - * @param AlbumBuilder|FixedQueryBuilder|BaseBuilder $query - * @param string $second - * @param string $prefix - * @param bool $full + * @param AlbumBuilder|FixedQueryBuilder|FixedQueryBuilder|BaseBuilder $query + * @param string $second + * @param string $prefix + * @param bool $full * * @return void * diff --git a/app/Policies/PhotoQueryPolicy.php b/app/Policies/PhotoQueryPolicy.php index 133fab468b..4518637ce5 100644 --- a/app/Policies/PhotoQueryPolicy.php +++ b/app/Policies/PhotoQueryPolicy.php @@ -35,9 +35,9 @@ public function __construct() * (cp. {@link AlbumQueryPolicy::isAccessible()}). * - the photo is public * - * @param FixedQueryBuilder $query + * @param FixedQueryBuilder $query * - * @return FixedQueryBuilder + * @return FixedQueryBuilder * * @throws InternalLycheeException */ @@ -86,10 +86,10 @@ public function applyVisibilityFilter(FixedQueryBuilder $query): FixedQueryBuild * The method simply assumes that the user has already legitimately * accessed the origin album, if the caller provides an album model. * - * @param FixedQueryBuilder $query the photo query which shall be restricted - * @param Album|null $origin the optional top album which is used as a search base + * @param FixedQueryBuilder $query the photo query which shall be restricted + * @param Album|null $origin the optional top album which is used as a search base * - * @return FixedQueryBuilder the restricted photo query + * @return FixedQueryBuilder the restricted photo query * * @throws InternalLycheeException */ @@ -188,9 +188,9 @@ public function appendSearchabilityConditions(BaseBuilder $query, int|string|nul /** * Throws an exception if the given query does not query for a photo. * - * @param FixedQueryBuilder $query the query to prepare - * @param bool $addAlbums if true, joins photo query with (parent) albums - * @param bool $addBaseAlbums if true, joins photos query with (parent) base albums + * @param FixedQueryBuilder $query the query to prepare + * @param bool $addAlbums if true, joins photo query with (parent) albums + * @param bool $addBaseAlbums if true, joins photos query with (parent) base albums * * @throws InternalLycheeException */ diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 3fa32f01b8..376958767d 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -48,7 +48,7 @@ class AppServiceProvider extends ServiceProvider /** * Defines which queries to ignore when doing explain. * - * @var array + * @var string[] */ private array $ignore_log_SQL = [ @@ -62,6 +62,7 @@ class AppServiceProvider extends ServiceProvider 'configs', ]; + /** @var array */ public array $singletons = [ SymLinkFunctions::class => SymLinkFunctions::class, @@ -85,6 +86,7 @@ class AppServiceProvider extends ServiceProvider GitTags::class => GitTags::class, ]; + /** @var array */ private array $livewireSynth = [ AlbumSynth::class, @@ -119,6 +121,7 @@ public function boot() try { $lang = Configs::getValueAsString('lang'); + /** @disregard P1013 Undefined method setLocale() (stupid intelephense) */ app()->setLocale($lang); } catch (\Throwable $e) { /** Ignore. @@ -175,7 +178,7 @@ public function boot() }); Livewire::setUpdateRoute(function ($handle) use ($dir_url) { - return Route::post($dir_url . 'livewire/update', $handle)->middleware('web'); + return Route::post($dir_url . 'livewire/update', $handle)->middleware('web-livewire'); }); } diff --git a/app/Relations/BaseHasManyPhotos.php b/app/Relations/BaseHasManyPhotos.php index 0e8bb11281..94efedfb75 100644 --- a/app/Relations/BaseHasManyPhotos.php +++ b/app/Relations/BaseHasManyPhotos.php @@ -16,6 +16,8 @@ * Common base class of all photo relations for albums which are not the * direct parent of the queried photos, but include the photo due to some * indirect condition. + * + * @extends Relation */ abstract class BaseHasManyPhotos extends Relation { @@ -58,6 +60,9 @@ public function __construct(BaseAlbum $owningAlbum) ); } + /** + * @return FixedQueryBuilder + */ protected function getRelationQuery(): FixedQueryBuilder { /** @@ -91,10 +96,10 @@ public function getParent(): BaseAlbum * In this case, the default value is an empty collection of * {@link \App\Models\Photo}. * - * @param array $models a list of owning models, i.e. a list of albums - * @param string $relation the name of the relation on the owning models + * @param array $models a list of owning models, i.e. a list of albums + * @param string $relation the name of the relation on the owning models * - * @return array always returns $models + * @return array always returns $models */ public function initRelation(array $models, $relation): array { @@ -117,7 +122,7 @@ public function initRelation(array $models, $relation): array * sorting, the collection is sorted after is has been fetched from * the DB. * - * @return Collection + * @return Collection * * @throws InvalidOrderDirectionException */ diff --git a/app/Relations/HasAlbumThumb.php b/app/Relations/HasAlbumThumb.php index 095b93eade..e93ac12f2c 100644 --- a/app/Relations/HasAlbumThumb.php +++ b/app/Relations/HasAlbumThumb.php @@ -21,7 +21,9 @@ use Illuminate\Support\Facades\Gate; /** - * @mixin Builder + * @mixin Builder + * + * @extends Relation */ class HasAlbumThumb extends Relation { @@ -44,6 +46,9 @@ public function __construct(Album $parent) ); } + /** + * @return FixedQueryBuilder + */ protected function getRelationQuery(): FixedQueryBuilder { /** @@ -228,10 +233,10 @@ public function addEagerConstraints(array $models): void } /** - * @param array $models an array of albums models whose thumbnails shall be initialized - * @param string $relation the name of the relation from the parent to the child models + * @param array $models an array of albums models whose thumbnails shall be initialized + * @param string $relation the name of the relation from the parent to the child models * - * @return array the array of album models + * @return array the array of album models */ public function initRelation(array $models, $relation): array { @@ -245,16 +250,17 @@ public function initRelation(array $models, $relation): array /** * Match the eagerly loaded results to their parents. * - * @param array $models an array of parent models - * @param Collection $results the unified collection of all child models of all parent models - * @param string $relation the name of the relation from the parent to the child models + * @param array $models an array of parent models + * @param Collection $results the unified collection of all child models of all parent models + * @param string $relation the name of the relation from the parent to the child models * - * @return array + * @return array */ public function match(array $models, Collection $results, $relation): array { $dictionary = $results->mapToDictionary(function ($result) { - return [$result->covered_album_id => $result]; // @phpstan-ignore-line + /** @phpstan-ignore-next-line undefied property */ + return [$result->covered_album_id => $result]; })->all(); // Once we have the dictionary we can simply spin through the parent models to diff --git a/app/Relations/HasManyBidirectionally.php b/app/Relations/HasManyBidirectionally.php index 542468820d..563552a622 100644 --- a/app/Relations/HasManyBidirectionally.php +++ b/app/Relations/HasManyBidirectionally.php @@ -8,12 +8,28 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; +/** + * @template TRelatedModel of \Illuminate\Database\Eloquent\Model + * @template TParentModel of \Illuminate\Database\Eloquent\Model + * + * @extends HasMany + */ class HasManyBidirectionally extends HasMany implements BidirectionalRelation { use BidirectionalRelationTrait; + /** + * @param Builder $query + * @param TParentModel $parent + * @param string $foreignKey + * @param string $localKey + * @param string $foreignMethodName + * + * @return void + */ public function __construct(Builder $query, Model $parent, string $foreignKey, string $localKey, string $foreignMethodName) { + /** @phpstan-ignore-next-line */ parent::__construct($query, $parent, $foreignKey, $localKey); $this->foreignMethodName = $foreignMethodName; } @@ -26,11 +42,11 @@ public function __construct(Builder $query, Model $parent, string $foreignKey, s * but additionally sets the reverse association of the child object * back to its parent object. * - * @param array $models an array of parent models - * @param Collection $results the unified collection of all child models of all parent models - * @param string $relation the name of the relation from the parent to the child models + * @param TParentModel[] $models an array of parent models + * @param Collection $results the unified collection of all child models of all parent models + * @param string $relation the name of the relation from the parent to the child models * - * @return array + * @return TParentModel[] */ public function match(array $models, Collection $results, $relation): array { @@ -41,7 +57,7 @@ public function match(array $models, Collection $results, $relation): array // matching very convenient and easy work. Then we'll just return them. foreach ($models as $model) { if (isset($dictionary[$key = $this->getDictionaryKey($model->getAttribute($this->localKey))])) { - /** @var Collection $childrenOfModel */ + /** @var Collection $childrenOfModel */ $childrenOfModel = $this->getRelationValue($dictionary, $key, 'many'); $model->setRelation($relation, $childrenOfModel); // This is the newly added code which sets this method apart diff --git a/app/Relations/HasManyChildAlbums.php b/app/Relations/HasManyChildAlbums.php index 5b103625d9..6f03967fb3 100644 --- a/app/Relations/HasManyChildAlbums.php +++ b/app/Relations/HasManyChildAlbums.php @@ -13,6 +13,9 @@ use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; +/** + * @extends HasManyBidirectionally + */ class HasManyChildAlbums extends HasManyBidirectionally { protected AlbumQueryPolicy $albumQueryPolicy; @@ -27,6 +30,7 @@ public function __construct(Album $owningAlbum) $this->albumQueryPolicy = resolve(AlbumQueryPolicy::class); $this->sorting = $owningAlbum->album_sorting ?? AlbumSortingCriterion::createDefault(); parent::__construct( + /** @phpstan-ignore-next-line */ $owningAlbum->newQuery(), $owningAlbum, 'parent_id', @@ -60,6 +64,8 @@ public function addConstraints() } /** + * @param Album[] $models + * * @throws InternalLycheeException */ public function addEagerConstraints(array $models) @@ -69,6 +75,8 @@ public function addEagerConstraints(array $models) } /** + * @return Collection + * * @throws InvalidOrderDirectionException */ public function getResults(): Collection @@ -77,7 +85,10 @@ public function getResults(): Collection return $this->related->newCollection(); } - return (new SortingDecorator($this->query)) + /** @var SortingDecorator */ + $sortingDecorator = new SortingDecorator($this->query); + + return $sortingDecorator ->orderBy($this->sorting->column, $this->sorting->order) ->get(); } @@ -85,11 +96,11 @@ public function getResults(): Collection /** * Match the eagerly loaded results to their parents. * - * @param array $models an array of parent models - * @param Collection $results the unified collection of all child models of all parent models - * @param string $relation the name of the relation from the parent to the child models + * @param Album[] $models an array of parent models + * @param Collection $results the unified collection of all child models of all parent models + * @param string $relation the name of the relation from the parent to the child models * - * @return array + * @return Album[] */ public function match(array $models, Collection $results, $relation): array { @@ -100,7 +111,7 @@ public function match(array $models, Collection $results, $relation): array // matching very convenient and easy work. Then we'll just return them. foreach ($models as $model) { if (isset($dictionary[$key = $this->getDictionaryKey($model->getAttribute($this->localKey))])) { - /** @var Collection $childrenOfModel */ + /** @var Collection $childrenOfModel */ $childrenOfModel = $this->getRelationValue($dictionary, $key, 'many'); $childrenOfModel = $childrenOfModel ->sortBy($this->sorting->column->value, SORT_NATURAL | SORT_FLAG_CASE, $this->sorting->order === OrderSortingType::DESC) diff --git a/app/Relations/HasManyChildPhotos.php b/app/Relations/HasManyChildPhotos.php index 264456ea47..4c07d0cc9f 100644 --- a/app/Relations/HasManyChildPhotos.php +++ b/app/Relations/HasManyChildPhotos.php @@ -14,6 +14,9 @@ use Illuminate\Database\Eloquent\InvalidCastException; use Illuminate\Database\Eloquent\Model; +/** + * @extends HasManyBidirectionally + */ class HasManyChildPhotos extends HasManyBidirectionally { protected PhotoQueryPolicy $photoQueryPolicy; @@ -26,7 +29,6 @@ public function __construct(Album $owningAlbum) // attributes must be initialized by then $this->photoQueryPolicy = resolve(PhotoQueryPolicy::class); parent::__construct( - /** @phpstan-ignore-next-line */ Photo::query(), $owningAlbum, 'album_id', @@ -35,6 +37,9 @@ public function __construct(Album $owningAlbum) ); } + /** + * @return FixedQueryBuilder + */ protected function getRelationQuery(): FixedQueryBuilder { /** @@ -73,6 +78,8 @@ public function addConstraints() } /** + * @param Album[] $models + * * @throws InternalLycheeException */ public function addEagerConstraints(array $models) @@ -82,6 +89,8 @@ public function addEagerConstraints(array $models) } /** + * @return Collection + * * @throws InvalidOrderDirectionException */ public function getResults(): Collection @@ -92,7 +101,10 @@ public function getResults(): Collection $albumSorting = $this->getParent()->getEffectivePhotoSorting(); - return (new SortingDecorator($this->query)) + /** @var SortingDecorator */ + $sortingDecorator = new SortingDecorator($this->query); + + return $sortingDecorator ->orderPhotosBy( $albumSorting->column, $albumSorting->order @@ -103,11 +115,11 @@ public function getResults(): Collection /** * Match the eagerly loaded results to their parents. * - * @param array $models an array of parent models - * @param Collection $results the unified collection of all child models of all parent models - * @param string $relation the name of the relation from the parent to the child models + * @param Album[] $models an array of parent models + * @param Collection $results the unified collection of all child models of all parent models + * @param string $relation the name of the relation from the parent to the child models * - * @return array + * @return Album[] * * @throws \LogicException * @throws InvalidCastException @@ -122,7 +134,7 @@ public function match(array $models, Collection $results, $relation): array /** @var Album $model */ foreach ($models as $model) { if (isset($dictionary[$key = $this->getDictionaryKey($model->getAttribute($this->localKey))])) { - /** @var Collection $childrenOfModel */ + /** @var Collection $childrenOfModel */ $childrenOfModel = $this->getRelationValue($dictionary, $key, 'many'); $sorting = $model->getEffectivePhotoSorting(); $childrenOfModel = $childrenOfModel diff --git a/app/Relations/HasManyPhotosByTag.php b/app/Relations/HasManyPhotosByTag.php index c60985a1c6..0403fce27f 100644 --- a/app/Relations/HasManyPhotosByTag.php +++ b/app/Relations/HasManyPhotosByTag.php @@ -30,6 +30,7 @@ public function __construct(TagAlbum $owningAlbum) public function addConstraints(): void { if (static::$constraints) { + /** @phpstan-ignore-next-line */ $this->addEagerConstraints([$this->parent]); } } @@ -42,7 +43,7 @@ public function addConstraints(): void * The unified result of the query is mapped to the specific albums * by {@link HasManyPhotosByTag::match()}. * - * @param array $albums an array of {@link \App\Models\TagAlbum} whose photos are loaded + * @param TagAlbum[] $albums an array of {@link \App\Models\TagAlbum} whose photos are loaded * * @return void * @@ -73,11 +74,11 @@ public function addEagerConstraints(array $albums): void * This method is called by the framework after the unified result of * photos has been fetched by {@link HasManyPhotosByTag::addEagerConstraints()}. * - * @param array $albums the list of owning albums - * @param Collection $photos collection of {@link Photo} models which needs to be mapped to the albums - * @param string $relation the name of the relation + * @param TagAlbum[] $albums the list of owning albums + * @param Collection $photos collection of {@link Photo} models which needs to be mapped to the albums + * @param string $relation the name of the relation * - * @return array + * @return TagAlbum[] * * @throws NotImplementedException */ diff --git a/app/Relations/HasManyPhotosRecursively.php b/app/Relations/HasManyPhotosRecursively.php index cfdb533094..33073d7029 100644 --- a/app/Relations/HasManyPhotosRecursively.php +++ b/app/Relations/HasManyPhotosRecursively.php @@ -78,6 +78,9 @@ public function addEagerConstraints(array $albums): void ->applySearchabilityFilter($this->getRelationQuery(), $albums[0]); } + /** + * @return Collection + */ public function getResults(): Collection { /** @var Album|null $album */ @@ -95,11 +98,11 @@ public function getResults(): Collection * This method is called by the framework after the unified result of * photos has been fetched by {@link HasManyPhotosRecursively::addEagerConstraints()}. * - * @param array $albums the list of owning albums - * @param Collection $photos collection of {@link Photo} models which needs to be mapped to the albums - * @param string $relation the name of the relation + * @param Album[] $albums the list of owning albums + * @param Collection $photos collection of {@link Photo} models which needs to be mapped to the albums + * @param string $relation the name of the relation * - * @return array + * @return Album[] * * @throws NotImplementedException */ diff --git a/app/Relations/HasManySizeVariants.php b/app/Relations/HasManySizeVariants.php index 47f3a08c85..d341c24bfb 100644 --- a/app/Relations/HasManySizeVariants.php +++ b/app/Relations/HasManySizeVariants.php @@ -15,14 +15,16 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; +/** + * @extends HasMany + */ class HasManySizeVariants extends HasMany { public function __construct(Photo $owningPhoto) { parent::__construct( - /** @phpstan-ignore-next-line */ SizeVariant::query(), - $owningPhoto, + $owningPhoto, /** @phpstan-ignore-line */ 'photo_id', 'id' ); @@ -48,7 +50,7 @@ public function getResults(): SizeVariants $parent = $this->parent; return new SizeVariants($parent, - is_null($this->getParentKey()) ? // @phpstan-ignore-line + is_null($this->getParentKey()) ? $this->related->newCollection() : $this->query->get() ); @@ -57,10 +59,10 @@ public function getResults(): SizeVariants /** * Initialize the relation on a set of models. * - * @param array $models - * @param string $relation + * @param Photo[] $models + * @param string $relation * - * @return array + * @return Photo[] */ public function initRelation(array $models, $relation): array { @@ -68,7 +70,7 @@ public function initRelation(array $models, $relation): array foreach ($models as $model) { $model->setRelation( $relation, - new SizeVariants($model, $this->related->newCollection()) // @phpstan-ignore-line + new SizeVariants($model, $this->related->newCollection()) ); } @@ -83,11 +85,11 @@ public function initRelation(array $models, $relation): array * but additionally sets the reverse association of the child object * back to its parent object. * - * @param array $models an array of parent models - * @param Collection $results the unified collection of all child models of all parent models - * @param string $relation the name of the relation from the parent to the child models + * @param Photo[] $models an array of parent models + * @param Collection $results the unified collection of all child models of all parent models + * @param string $relation the name of the relation from the parent to the child models * - * @return array + * @return Photo[] */ public function match(array $models, Collection $results, $relation): array { @@ -99,7 +101,7 @@ public function match(array $models, Collection $results, $relation): array /** @var Photo $model */ foreach ($models as $model) { if (isset($dictionary[$key = $this->getDictionaryKey($model->getAttribute($this->localKey))])) { - /** @var Collection $childrenOfModel */ + /** @var Collection $childrenOfModel */ $childrenOfModel = $this->getRelationValue($dictionary, $key, 'many'); $model->setRelation($relation, new SizeVariants($model, $childrenOfModel)); } diff --git a/app/Services/Auth/SessionOrTokenGuard.php b/app/Services/Auth/SessionOrTokenGuard.php index 65ffd4ac1d..32482ad9a0 100644 --- a/app/Services/Auth/SessionOrTokenGuard.php +++ b/app/Services/Auth/SessionOrTokenGuard.php @@ -109,6 +109,8 @@ class SessionOrTokenGuard extends SessionGuard * {@link \Illuminate\Auth\AuthManager::createSessionDriver()} which * creates the Laravel Session guard. * + * @param array $config + * * @throws BindingResolutionException */ public static function createGuard(Application $app, string $name, array $config): self diff --git a/app/SmartAlbums/BaseSmartAlbum.php b/app/SmartAlbums/BaseSmartAlbum.php index 287b3e1597..d5af21b018 100644 --- a/app/SmartAlbums/BaseSmartAlbum.php +++ b/app/SmartAlbums/BaseSmartAlbum.php @@ -68,6 +68,9 @@ protected function __construct(SmartAlbumType $id, \Closure $smartCondition) } } + /** + * @return array{id:string,title:string,thumb:?Thumb,policy:AlbumProtectionPolicy,photos:?array} + */ protected function _toArray(): array { // The properties `thumb` and `photos` are intentionally treated @@ -99,6 +102,8 @@ protected function _toArray(): array } /** + * @return \App\Eloquent\FixedQueryBuilder + * * @throws InternalLycheeException */ public function photos(): Builder @@ -110,7 +115,7 @@ public function photos(): Builder } /** - * @return Collection + * @return Collection * * @throws InvalidOrderDirectionException * @throws InvalidQueryModelException @@ -122,7 +127,7 @@ protected function getPhotosAttribute(): Collection if ($this->photos === null) { $sorting = PhotoSortingCriterion::createDefault(); - /** @var \Illuminate\Database\Eloquent\Collection&iterable<\App\Models\Photo> $photos */ + /** @var \Illuminate\Database\Eloquent\Collection&iterable $photos */ $photos = (new SortingDecorator($this->photos())) ->orderPhotosBy($sorting->column, $sorting->order) ->get(); @@ -136,7 +141,7 @@ protected function getPhotosAttribute(): Collection * Similar to the function above. * The big difference is that we do not check if it is null or not. * - * @return Collection|null + * @return Collection|null */ public function getPhotos(): ?Collection { diff --git a/app/SmartAlbums/Utils/MimicModel.php b/app/SmartAlbums/Utils/MimicModel.php index b37e34c6dd..fc58a8ed30 100644 --- a/app/SmartAlbums/Utils/MimicModel.php +++ b/app/SmartAlbums/Utils/MimicModel.php @@ -14,7 +14,7 @@ abstract public function toArray(): array; /** * Serializes this object into an array. * - * @return array The serialized properties of this object + * @return array The serialized properties of this object * * @throws \JsonException */ diff --git a/app/View/Components/Gallery/Album/Thumbs/Album.php b/app/View/Components/Gallery/Album/Thumbs/Album.php index d4a3b35807..0618acd659 100644 --- a/app/View/Components/Gallery/Album/Thumbs/Album.php +++ b/app/View/Components/Gallery/Album/Thumbs/Album.php @@ -39,7 +39,7 @@ class Album extends Component public string $aspect_ratio_class; - public function __construct(AbstractAlbum $data, string $strAspectRatioClass) + public function __construct(AbstractAlbum $data, string $strAspectRatioClass, ?string $coverId) { $this->aspect_ratio_class = $strAspectRatioClass; @@ -76,7 +76,7 @@ public function __construct(AbstractAlbum $data, string $strAspectRatioClass) $this->is_tag_album = $data instanceof TagAlbum; // This aims to indicate whether the current thumb is used to determine the parent. - $this->is_cover_id = $data instanceof AlbumModel && $data->thumb !== null && $data->parent?->cover_id === $data->thumb->id; + $this->is_cover_id = $data instanceof AlbumModel && $data->thumb !== null && $coverId === $data->thumb->id; $this->has_subalbum = $data instanceof AlbumModel && !$data->isLeaf(); } diff --git a/app/View/Components/Gallery/Album/Thumbs/Photo.php b/app/View/Components/Gallery/Album/Thumbs/Photo.php index d726f3c7a8..327efe2f25 100644 --- a/app/View/Components/Gallery/Album/Thumbs/Photo.php +++ b/app/View/Components/Gallery/Album/Thumbs/Photo.php @@ -45,7 +45,7 @@ class Photo extends Component * * @throws ConfigurationKeyMissingException */ - public function __construct(ModelsPhoto $data, string $albumId, int $idx) + public function __construct(ModelsPhoto $data, string $albumId, int $idx, ?string $coverId) { $this->idx = $idx; $date_format = Configs::getValueAsString('date_format_photo_thumb'); @@ -59,7 +59,7 @@ public function __construct(ModelsPhoto $data, string $albumId, int $idx) $this->is_video = $data->isVideo(); $this->is_livephoto = $data->live_photo_url !== null; - $this->is_cover_id = $data->album?->cover_id === $data->id; + $this->is_cover_id = $coverId === $data->id; $this->css_overlay = match ($displayOverlay) { ThumbOverlayVisibilityType::NEVER => 'hidden', diff --git a/app/View/Components/Gallery/Photo/Download.php b/app/View/Components/Gallery/Photo/Download.php index 386232046e..76b7c8f5af 100644 --- a/app/View/Components/Gallery/Photo/Download.php +++ b/app/View/Components/Gallery/Photo/Download.php @@ -15,6 +15,7 @@ class Download extends Component { public string $url_placeholder = 'api/Photo::getArchive?photoIDs=%s&kind%s'; public string $photoId; + /** @var array */ public array $size_variants; /** diff --git a/composer.lock b/composer.lock index 23e0491702..6d339c2a2d 100644 --- a/composer.lock +++ b/composer.lock @@ -62,16 +62,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.305.4", + "version": "3.311.0", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "fc26a2ebf720e0b75a353d7e8fe206796671e00b" + "reference": "3e1cc8fe522eae7deca8b7753c573c2c69444705" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/fc26a2ebf720e0b75a353d7e8fe206796671e00b", - "reference": "fc26a2ebf720e0b75a353d7e8fe206796671e00b", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/3e1cc8fe522eae7deca8b7753c573c2c69444705", + "reference": "3e1cc8fe522eae7deca8b7753c573c2c69444705", "shasum": "" }, "require": { @@ -151,9 +151,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.305.4" + "source": "https://github.com/aws/aws-sdk-php/tree/3.311.0" }, - "time": "2024-04-26T18:06:31+00:00" + "time": "2024-06-05T18:07:37+00:00" }, { "name": "bepsvpt/secure-headers", @@ -758,16 +758,16 @@ }, { "name": "doctrine/event-manager", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", "shasum": "" }, "require": { @@ -777,10 +777,10 @@ "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^10", + "doctrine/coding-standard": "^12", "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.28" + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.24" }, "type": "library", "autoload": { @@ -829,7 +829,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/2.0.0" + "source": "https://github.com/doctrine/event-manager/tree/2.0.1" }, "funding": [ { @@ -845,7 +845,7 @@ "type": "tidelift" } ], - "time": "2022-10-12T20:59:15+00:00" + "time": "2024-05-22T20:47:39+00:00" }, { "name": "doctrine/inflector", @@ -1192,26 +1192,26 @@ }, { "name": "firebase/php-jwt", - "version": "v6.10.0", + "version": "v6.10.1", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "a49db6f0a5033aef5143295342f1c95521b075ff" + "reference": "500501c2ce893c824c801da135d02661199f60c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/a49db6f0a5033aef5143295342f1c95521b075ff", - "reference": "a49db6f0a5033aef5143295342f1c95521b075ff", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5", + "reference": "500501c2ce893c824c801da135d02661199f60c5", "shasum": "" }, "require": { - "php": "^7.4||^8.0" + "php": "^8.0" }, "require-dev": { - "guzzlehttp/guzzle": "^6.5||^7.4", + "guzzlehttp/guzzle": "^7.4", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "psr/cache": "^1.0||^2.0", + "psr/cache": "^2.0||^3.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0" }, @@ -1249,9 +1249,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.10.0" + "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" }, - "time": "2023-12-01T16:26:39+00:00" + "time": "2024-05-18T18:05:11+00:00" }, { "name": "fruitcake/php-cors", @@ -2405,16 +2405,16 @@ }, { "name": "laravel/framework", - "version": "v10.48.9", + "version": "v10.48.12", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "ad758500b47964d022addf119600a1b1b0230733" + "reference": "590afea38e708022662629fbf5184351fa82cf08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/ad758500b47964d022addf119600a1b1b0230733", - "reference": "ad758500b47964d022addf119600a1b1b0230733", + "url": "https://api.github.com/repos/laravel/framework/zipball/590afea38e708022662629fbf5184351fa82cf08", + "reference": "590afea38e708022662629fbf5184351fa82cf08", "shasum": "" }, "require": { @@ -2608,20 +2608,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-04-23T15:01:33+00:00" + "time": "2024-05-28T15:46:19+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.20", + "version": "v0.1.23", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "bf9a360c484976692de0f3792f30066f4f4b34a2" + "reference": "9bc4df7c699b0452c6b815e64a2d84b6d7f99400" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/bf9a360c484976692de0f3792f30066f4f4b34a2", - "reference": "bf9a360c484976692de0f3792f30066f4f4b34a2", + "url": "https://api.github.com/repos/laravel/prompts/zipball/9bc4df7c699b0452c6b815e64a2d84b6d7f99400", + "reference": "9bc4df7c699b0452c6b815e64a2d84b6d7f99400", "shasum": "" }, "require": { @@ -2661,11 +2661,12 @@ "license": [ "MIT" ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.20" + "source": "https://github.com/laravel/prompts/tree/v0.1.23" }, - "time": "2024-04-18T00:45:25+00:00" + "time": "2024-05-27T13:53:20+00:00" }, { "name": "laravel/serializable-closure", @@ -2729,16 +2730,16 @@ }, { "name": "laravel/socialite", - "version": "v5.13.1", + "version": "v5.14.0", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "feed1c1ccfd991bc12af59de4aa24f657d9c5cbe" + "reference": "c7b0193a3753a29aff8ce80aa2f511917e6ed68a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/feed1c1ccfd991bc12af59de4aa24f657d9c5cbe", - "reference": "feed1c1ccfd991bc12af59de4aa24f657d9c5cbe", + "url": "https://api.github.com/repos/laravel/socialite/zipball/c7b0193a3753a29aff8ce80aa2f511917e6ed68a", + "reference": "c7b0193a3753a29aff8ce80aa2f511917e6ed68a", "shasum": "" }, "require": { @@ -2797,7 +2798,7 @@ "issues": "https://github.com/laravel/socialite/issues", "source": "https://github.com/laravel/socialite" }, - "time": "2024-04-24T20:36:50+00:00" + "time": "2024-05-03T20:31:38+00:00" }, { "name": "lcobucci/clock", @@ -3126,16 +3127,16 @@ }, { "name": "league/flysystem", - "version": "3.27.0", + "version": "3.28.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "4729745b1ab737908c7d055148c9a6b3e959832f" + "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/4729745b1ab737908c7d055148c9a6b3e959832f", - "reference": "4729745b1ab737908c7d055148c9a6b3e959832f", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", + "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", "shasum": "" }, "require": { @@ -3159,10 +3160,13 @@ "composer/semver": "^3.0", "ext-fileinfo": "*", "ext-ftp": "*", + "ext-mongodb": "^1.3", "ext-zip": "*", "friendsofphp/php-cs-fixer": "^3.5", "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2", "phpseclib/phpseclib": "^3.0.36", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.5.11|^10.0", @@ -3200,32 +3204,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.27.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.28.0" }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - } - ], - "time": "2024-04-07T19:17:50+00:00" + "time": "2024-05-22T10:09:12+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.27.0", + "version": "3.28.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "3e6ce2f972f1470db779f04d29c289dcd2c32837" + "reference": "22071ef1604bc776f5ff2468ac27a752514665c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/3e6ce2f972f1470db779f04d29c289dcd2c32837", - "reference": "3e6ce2f972f1470db779f04d29c289dcd2c32837", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/22071ef1604bc776f5ff2468ac27a752514665c8", + "reference": "22071ef1604bc776f5ff2468ac27a752514665c8", "shasum": "" }, "require": { @@ -3265,32 +3259,22 @@ "storage" ], "support": { - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.27.0" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.28.0" }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - } - ], - "time": "2024-04-07T19:16:54+00:00" + "time": "2024-05-06T20:05:52+00:00" }, { "name": "league/flysystem-local", - "version": "3.25.1", + "version": "3.28.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92" + "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/61a6a90d6e999e4ddd9ce5adb356de0939060b92", - "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/13f22ea8be526ea58c2ddff9e158ef7c296e4f40", + "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40", "shasum": "" }, "require": { @@ -3324,19 +3308,9 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.25.1" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.28.0" }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - } - ], - "time": "2024-03-15T19:58:44+00:00" + "time": "2024-05-06T20:05:52+00:00" }, { "name": "league/mime-type-detection", @@ -3472,16 +3446,16 @@ }, { "name": "livewire/livewire", - "version": "v3.4.11", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "8a78d0c3ae9b4c96a2d8932ea4ac0dc782325de0" + "reference": "72e900825c560f0e4e620185b26c5441a8914435" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/8a78d0c3ae9b4c96a2d8932ea4ac0dc782325de0", - "reference": "8a78d0c3ae9b4c96a2d8932ea4ac0dc782325de0", + "url": "https://api.github.com/repos/livewire/livewire/zipball/72e900825c560f0e4e620185b26c5441a8914435", + "reference": "72e900825c560f0e4e620185b26c5441a8914435", "shasum": "" }, "require": { @@ -3496,7 +3470,7 @@ }, "require-dev": { "calebporzio/sushi": "^2.1", - "laravel/framework": "^10.0|^11.0", + "laravel/framework": "^10.15.0|^11.0", "laravel/prompts": "^0.1.6", "mockery/mockery": "^1.3.1", "orchestra/testbench": "^8.21.0|^9.0", @@ -3536,7 +3510,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.4.11" + "source": "https://github.com/livewire/livewire/tree/v3.5.0" }, "funding": [ { @@ -3544,7 +3518,7 @@ "type": "github" } ], - "time": "2024-04-24T12:14:15+00:00" + "time": "2024-05-21T13:39:04+00:00" }, { "name": "lychee-org/nestedset", @@ -3953,16 +3927,16 @@ }, { "name": "nesbot/carbon", - "version": "2.72.3", + "version": "2.72.5", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83" + "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0c6fd108360c562f6e4fd1dedb8233b423e91c83", - "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/afd46589c216118ecd48ff2b95d77596af1e57ed", + "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed", "shasum": "" }, "require": { @@ -3996,8 +3970,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" }, "laravel": { "providers": [ @@ -4056,7 +4030,7 @@ "type": "tidelift" } ], - "time": "2024-01-25T10:35:09+00:00" + "time": "2024-06-03T19:18:41+00:00" }, { "name": "nette/schema", @@ -4453,16 +4427,16 @@ }, { "name": "paragonie/constant_time_encoding", - "version": "v2.6.3", + "version": "v2.7.0", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "58c3f47f650c94ec05a151692652a868995d2938" + "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", - "reference": "58c3f47f650c94ec05a151692652a868995d2938", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105", + "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105", "shasum": "" }, "require": { @@ -4516,7 +4490,7 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2022-06-14T06:56:20+00:00" + "time": "2024-05-08T12:18:48+00:00" }, { "name": "paragonie/random_compat", @@ -5410,20 +5384,20 @@ }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", + "php": ">=7.1", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", @@ -5447,7 +5421,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -5459,9 +5433,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", @@ -6188,21 +6162,21 @@ }, { "name": "socialiteproviders/manager", - "version": "v4.5.1", + "version": "v4.6.0", "source": { "type": "git", "url": "https://github.com/SocialiteProviders/Manager.git", - "reference": "a67f194f0f4c4c7616c549afc697b78df9658d44" + "reference": "dea5190981c31b89e52259da9ab1ca4e2b258b21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/a67f194f0f4c4c7616c549afc697b78df9658d44", - "reference": "a67f194f0f4c4c7616c549afc697b78df9658d44", + "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/dea5190981c31b89e52259da9ab1ca4e2b258b21", + "reference": "dea5190981c31b89e52259da9ab1ca4e2b258b21", "shasum": "" }, "require": { "illuminate/support": "^8.0 || ^9.0 || ^10.0 || ^11.0", - "laravel/socialite": "^5.2", + "laravel/socialite": "^5.5", "php": "^8.0" }, "require-dev": { @@ -6258,20 +6232,20 @@ "issues": "https://github.com/socialiteproviders/manager/issues", "source": "https://github.com/socialiteproviders/manager" }, - "time": "2024-02-17T08:58:03+00:00" + "time": "2024-05-04T07:57:39+00:00" }, { "name": "socialiteproviders/microsoft", - "version": "4.2.3", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/SocialiteProviders/Microsoft.git", - "reference": "92c6f245a6175bcb51f4c7e0542b1e2891646edb" + "reference": "9cda621d75b8681b9c0a015a766f05aa5d29d1d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SocialiteProviders/Microsoft/zipball/92c6f245a6175bcb51f4c7e0542b1e2891646edb", - "reference": "92c6f245a6175bcb51f4c7e0542b1e2891646edb", + "url": "https://api.github.com/repos/SocialiteProviders/Microsoft/zipball/9cda621d75b8681b9c0a015a766f05aa5d29d1d0", + "reference": "9cda621d75b8681b9c0a015a766f05aa5d29d1d0", "shasum": "" }, "require": { @@ -6308,7 +6282,7 @@ "issues": "https://github.com/socialiteproviders/providers/issues", "source": "https://github.com/socialiteproviders/providers" }, - "time": "2024-02-28T14:16:00+00:00" + "time": "2024-05-13T22:57:35+00:00" }, { "name": "socialiteproviders/nextcloud", @@ -6405,16 +6379,16 @@ }, { "name": "spatie/image-optimizer", - "version": "1.7.4", + "version": "1.7.5", "source": { "type": "git", "url": "https://github.com/spatie/image-optimizer.git", - "reference": "ed39c7bfce7a2ecf676174a2d4286ab3a1c4f4f7" + "reference": "43aff6725cd87bb78ccd8532633cfa8bdc962505" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/ed39c7bfce7a2ecf676174a2d4286ab3a1c4f4f7", - "reference": "ed39c7bfce7a2ecf676174a2d4286ab3a1c4f4f7", + "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/43aff6725cd87bb78ccd8532633cfa8bdc962505", + "reference": "43aff6725cd87bb78ccd8532633cfa8bdc962505", "shasum": "" }, "require": { @@ -6454,9 +6428,9 @@ ], "support": { "issues": "https://github.com/spatie/image-optimizer/issues", - "source": "https://github.com/spatie/image-optimizer/tree/1.7.4" + "source": "https://github.com/spatie/image-optimizer/tree/1.7.5" }, - "time": "2024-05-06T09:12:30+00:00" + "time": "2024-05-16T08:48:33+00:00" }, { "name": "spatie/laravel-feed", @@ -6741,16 +6715,16 @@ }, { "name": "symfony/cache", - "version": "v6.4.6", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "b59bbf9c093b592d77110f9ee70c74dff89294cb" + "reference": "287142df5579ce223c485b3872df3efae8390984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/b59bbf9c093b592d77110f9ee70c74dff89294cb", - "reference": "b59bbf9c093b592d77110f9ee70c74dff89294cb", + "url": "https://api.github.com/repos/symfony/cache/zipball/287142df5579ce223c485b3872df3efae8390984", + "reference": "287142df5579ce223c485b3872df3efae8390984", "shasum": "" }, "require": { @@ -6817,7 +6791,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.6" + "source": "https://github.com/symfony/cache/tree/v6.4.8" }, "funding": [ { @@ -6833,20 +6807,20 @@ "type": "tidelift" } ], - "time": "2024-03-27T13:27:42+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.4.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "2c9db6509a1b21dad229606897639d3284f54b2a" + "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/2c9db6509a1b21dad229606897639d3284f54b2a", - "reference": "2c9db6509a1b21dad229606897639d3284f54b2a", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", "shasum": "" }, "require": { @@ -6856,7 +6830,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -6893,7 +6867,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0" }, "funding": [ { @@ -6909,20 +6883,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/console", - "version": "v6.4.6", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f" + "reference": "be5854cee0e8c7b110f00d695d11debdfa1a2a91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a2708a5da5c87d1d0d52937bdeac625df659e11f", - "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f", + "url": "https://api.github.com/repos/symfony/console/zipball/be5854cee0e8c7b110f00d695d11debdfa1a2a91", + "reference": "be5854cee0e8c7b110f00d695d11debdfa1a2a91", "shasum": "" }, "require": { @@ -6987,7 +6961,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.6" + "source": "https://github.com/symfony/console/tree/v6.4.8" }, "funding": [ { @@ -7003,20 +6977,20 @@ "type": "tidelift" } ], - "time": "2024-03-29T19:07:53+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "symfony/css-selector", - "version": "v7.0.3", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be" + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/ec60a4edf94e63b0556b6a0888548bb400a3a3be", - "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", "shasum": "" }, "require": { @@ -7052,7 +7026,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.0.3" + "source": "https://github.com/symfony/css-selector/tree/v7.1.1" }, "funding": [ { @@ -7068,20 +7042,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.4.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "shasum": "" }, "require": { @@ -7090,7 +7064,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -7119,7 +7093,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.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" }, "funding": [ { @@ -7135,20 +7109,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.6", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "64db1c1802e3a4557e37ba33031ac39f452ac5d4" + "reference": "ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/64db1c1802e3a4557e37ba33031ac39f452ac5d4", - "reference": "64db1c1802e3a4557e37ba33031ac39f452ac5d4", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc", + "reference": "ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc", "shasum": "" }, "require": { @@ -7194,7 +7168,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.6" + "source": "https://github.com/symfony/error-handler/tree/v6.4.8" }, "funding": [ { @@ -7210,20 +7184,20 @@ "type": "tidelift" } ], - "time": "2024-03-19T11:56:30+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.0.3", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e" + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e", - "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", "shasum": "" }, "require": { @@ -7274,7 +7248,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" }, "funding": [ { @@ -7290,20 +7264,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.4.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "4e64b49bf370ade88e567de29465762e316e4224" + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224", - "reference": "4e64b49bf370ade88e567de29465762e316e4224", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", "shasum": "" }, "require": { @@ -7313,7 +7287,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -7350,7 +7324,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" }, "funding": [ { @@ -7366,20 +7340,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/finder", - "version": "v6.4.0", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" + "reference": "3ef977a43883215d560a2cecb82ec8e62131471c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", - "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", + "url": "https://api.github.com/repos/symfony/finder/zipball/3ef977a43883215d560a2cecb82ec8e62131471c", + "reference": "3ef977a43883215d560a2cecb82ec8e62131471c", "shasum": "" }, "require": { @@ -7414,7 +7388,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.0" + "source": "https://github.com/symfony/finder/tree/v6.4.8" }, "funding": [ { @@ -7430,20 +7404,20 @@ "type": "tidelift" } ], - "time": "2023-10-31T17:30:12+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.4", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304" + "reference": "27de8cc95e11db7a50b027e71caaab9024545947" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ebc713bc6e6f4b53f46539fc158be85dfcd77304", - "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/27de8cc95e11db7a50b027e71caaab9024545947", + "reference": "27de8cc95e11db7a50b027e71caaab9024545947", "shasum": "" }, "require": { @@ -7491,7 +7465,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.4" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.8" }, "funding": [ { @@ -7507,20 +7481,20 @@ "type": "tidelift" } ], - "time": "2024-02-08T15:01:18+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.6", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "060038863743fd0cd982be06acecccf246d35653" + "reference": "6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/060038863743fd0cd982be06acecccf246d35653", - "reference": "060038863743fd0cd982be06acecccf246d35653", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1", + "reference": "6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1", "shasum": "" }, "require": { @@ -7575,6 +7549,7 @@ "symfony/translation-contracts": "^2.5|^3", "symfony/uid": "^5.4|^6.0|^7.0", "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^5.4|^6.4|^7.0", "symfony/var-exporter": "^6.2|^7.0", "twig/twig": "^2.13|^3.0.4" }, @@ -7604,7 +7579,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.6" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.8" }, "funding": [ { @@ -7620,20 +7595,20 @@ "type": "tidelift" } ], - "time": "2024-04-03T06:09:15+00:00" + "time": "2024-06-02T16:06:25+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.6", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "677f34a6f4b4559e08acf73ae0aec460479e5859" + "reference": "76326421d44c07f7824b19487cfbf87870b37efc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/677f34a6f4b4559e08acf73ae0aec460479e5859", - "reference": "677f34a6f4b4559e08acf73ae0aec460479e5859", + "url": "https://api.github.com/repos/symfony/mailer/zipball/76326421d44c07f7824b19487cfbf87870b37efc", + "reference": "76326421d44c07f7824b19487cfbf87870b37efc", "shasum": "" }, "require": { @@ -7684,7 +7659,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.6" + "source": "https://github.com/symfony/mailer/tree/v6.4.8" }, "funding": [ { @@ -7700,20 +7675,20 @@ "type": "tidelift" } ], - "time": "2024-03-27T21:14:17+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "symfony/mime", - "version": "v6.4.6", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "14762b86918823cb42e3558cdcca62e58b5227fe" + "reference": "618597ab8b78ac86d1c75a9d0b35540cda074f33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/14762b86918823cb42e3558cdcca62e58b5227fe", - "reference": "14762b86918823cb42e3558cdcca62e58b5227fe", + "url": "https://api.github.com/repos/symfony/mime/zipball/618597ab8b78ac86d1c75a9d0b35540cda074f33", + "reference": "618597ab8b78ac86d1c75a9d0b35540cda074f33", "shasum": "" }, "require": { @@ -7769,7 +7744,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.6" + "source": "https://github.com/symfony/mime/tree/v6.4.8" }, "funding": [ { @@ -7785,7 +7760,7 @@ "type": "tidelift" } ], - "time": "2024-03-21T19:36:20+00:00" + "time": "2024-06-01T07:50:16+00:00" }, { "name": "symfony/polyfill-ctype", @@ -8500,16 +8475,16 @@ }, { "name": "symfony/process", - "version": "v6.4.7", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "cdb1c81c145fd5aa9b0038bab694035020943381" + "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/cdb1c81c145fd5aa9b0038bab694035020943381", - "reference": "cdb1c81c145fd5aa9b0038bab694035020943381", + "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5", + "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5", "shasum": "" }, "require": { @@ -8541,7 +8516,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.7" + "source": "https://github.com/symfony/process/tree/v6.4.8" }, "funding": [ { @@ -8557,20 +8532,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "symfony/routing", - "version": "v6.4.6", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "f2591fd1f8c6e3734656b5d6b3829e8bf81f507c" + "reference": "8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/f2591fd1f8c6e3734656b5d6b3829e8bf81f507c", - "reference": "f2591fd1f8c6e3734656b5d6b3829e8bf81f507c", + "url": "https://api.github.com/repos/symfony/routing/zipball/8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58", + "reference": "8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58", "shasum": "" }, "require": { @@ -8624,7 +8599,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.6" + "source": "https://github.com/symfony/routing/tree/v6.4.8" }, "funding": [ { @@ -8640,25 +8615,26 @@ "type": "tidelift" } ], - "time": "2024-03-28T13:28:49+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.4.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "11bbf19a0fb7b36345861e85c5768844c552906e" + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e", - "reference": "11bbf19a0fb7b36345861e85c5768844c552906e", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^1.1|^2.0" + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -8666,7 +8642,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -8706,7 +8682,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" }, "funding": [ { @@ -8722,20 +8698,20 @@ "type": "tidelift" } ], - "time": "2023-12-19T21:51:00+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/string", - "version": "v7.0.4", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b" + "reference": "60bc311c74e0af215101235aa6f471bcbc032df2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f5832521b998b0bec40bee688ad5de98d4cf111b", - "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b", + "url": "https://api.github.com/repos/symfony/string/zipball/60bc311c74e0af215101235aa6f471bcbc032df2", + "reference": "60bc311c74e0af215101235aa6f471bcbc032df2", "shasum": "" }, "require": { @@ -8749,6 +8725,7 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { + "symfony/emoji": "^7.1", "symfony/error-handler": "^6.4|^7.0", "symfony/http-client": "^6.4|^7.0", "symfony/intl": "^6.4|^7.0", @@ -8792,7 +8769,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.0.4" + "source": "https://github.com/symfony/string/tree/v7.1.1" }, "funding": [ { @@ -8808,20 +8785,20 @@ "type": "tidelift" } ], - "time": "2024-02-01T13:17:36+00:00" + "time": "2024-06-04T06:40:14+00:00" }, { "name": "symfony/translation", - "version": "v6.4.4", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e" + "reference": "a002933b13989fc4bd0b58e04bf7eec5210e438a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bce6a5a78e94566641b2594d17e48b0da3184a8e", - "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e", + "url": "https://api.github.com/repos/symfony/translation/zipball/a002933b13989fc4bd0b58e04bf7eec5210e438a", + "reference": "a002933b13989fc4bd0b58e04bf7eec5210e438a", "shasum": "" }, "require": { @@ -8887,7 +8864,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.4" + "source": "https://github.com/symfony/translation/tree/v6.4.8" }, "funding": [ { @@ -8903,20 +8880,20 @@ "type": "tidelift" } ], - "time": "2024-02-20T13:16:58+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.4.2", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b" + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", - "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", "shasum": "" }, "require": { @@ -8925,7 +8902,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -8965,7 +8942,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" }, "funding": [ { @@ -8981,20 +8958,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/uid", - "version": "v6.4.3", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0" + "reference": "35904eca37a84bb764c560cbfcac9f0ac2bcdbdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", - "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", + "url": "https://api.github.com/repos/symfony/uid/zipball/35904eca37a84bb764c560cbfcac9f0ac2bcdbdf", + "reference": "35904eca37a84bb764c560cbfcac9f0ac2bcdbdf", "shasum": "" }, "require": { @@ -9039,7 +9016,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.3" + "source": "https://github.com/symfony/uid/tree/v6.4.8" }, "funding": [ { @@ -9055,20 +9032,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.6", + "version": "v6.4.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "95bd2706a97fb875185b51ecaa6112ec184233d4" + "reference": "ad23ca4312395f0a8a8633c831ef4c4ee542ed25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/95bd2706a97fb875185b51ecaa6112ec184233d4", - "reference": "95bd2706a97fb875185b51ecaa6112ec184233d4", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ad23ca4312395f0a8a8633c831ef4c4ee542ed25", + "reference": "ad23ca4312395f0a8a8633c831ef4c4ee542ed25", "shasum": "" }, "require": { @@ -9124,7 +9101,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.6" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.8" }, "funding": [ { @@ -9140,20 +9117,20 @@ "type": "tidelift" } ], - "time": "2024-03-19T11:56:30+00:00" + "time": "2024-05-31T14:49:08+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.0.6", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "c74c568d2a15a1d407cf40d61ea82bc2d521e27b" + "reference": "db82c2b73b88734557cfc30e3270d83fa651b712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/c74c568d2a15a1d407cf40d61ea82bc2d521e27b", - "reference": "c74c568d2a15a1d407cf40d61ea82bc2d521e27b", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/db82c2b73b88734557cfc30e3270d83fa651b712", + "reference": "db82c2b73b88734557cfc30e3270d83fa651b712", "shasum": "" }, "require": { @@ -9200,7 +9177,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.0.6" + "source": "https://github.com/symfony/var-exporter/tree/v7.1.1" }, "funding": [ { @@ -9216,7 +9193,7 @@ "type": "tidelift" } ], - "time": "2024-03-20T21:25:22+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "thecodingmachine/safe", @@ -9692,16 +9669,16 @@ "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v3.13.4", + "version": "v3.13.5", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "00201bcd1eaf9b1d3debddcdc13c219e4835fb61" + "reference": "92d86be45ee54edff735e46856f64f14b6a8bb07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/00201bcd1eaf9b1d3debddcdc13c219e4835fb61", - "reference": "00201bcd1eaf9b1d3debddcdc13c219e4835fb61", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/92d86be45ee54edff735e46856f64f14b6a8bb07", + "reference": "92d86be45ee54edff735e46856f64f14b6a8bb07", "shasum": "" }, "require": { @@ -9760,7 +9737,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.13.4" + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.13.5" }, "funding": [ { @@ -9772,7 +9749,7 @@ "type": "github" } ], - "time": "2024-04-10T09:15:45+00:00" + "time": "2024-04-12T11:20:37+00:00" }, { "name": "barryvdh/laravel-ide-helper", @@ -9920,18 +9897,82 @@ }, "time": "2023-06-14T05:06:27+00:00" }, + { + "name": "clue/ndjson-react", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/clue/reactphp-ndjson.git", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", + "react/event-loop": "^1.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\React\\NDJson\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", + "homepage": "https://github.com/clue/reactphp-ndjson", + "keywords": [ + "NDJSON", + "json", + "jsonlines", + "newline", + "reactphp", + "streaming" + ], + "support": { + "issues": "https://github.com/clue/reactphp-ndjson/issues", + "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-12-23T10:58:28+00:00" + }, { "name": "composer/class-map-generator", - "version": "1.1.1", + "version": "1.3.2", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "8286a62d243312ed99b3eee20d5005c961adb311" + "reference": "acd227952154850d0bb7d65caa4f9edf9cd806a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/8286a62d243312ed99b3eee20d5005c961adb311", - "reference": "8286a62d243312ed99b3eee20d5005c961adb311", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/acd227952154850d0bb7d65caa4f9edf9cd806a7", + "reference": "acd227952154850d0bb7d65caa4f9edf9cd806a7", "shasum": "" }, "require": { @@ -9975,7 +10016,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.1.1" + "source": "https://github.com/composer/class-map-generator/tree/1.3.2" }, "funding": [ { @@ -9991,20 +10032,20 @@ "type": "tidelift" } ], - "time": "2024-03-15T12:53:41+00:00" + "time": "2024-05-31T19:45:56+00:00" }, { "name": "composer/pcre", - "version": "3.1.3", + "version": "3.1.4", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" + "reference": "04229f163664973f68f38f6f73d917799168ef24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24", + "reference": "04229f163664973f68f38f6f73d917799168ef24", "shasum": "" }, "require": { @@ -10046,7 +10087,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.3" + "source": "https://github.com/composer/pcre/tree/3.1.4" }, "funding": [ { @@ -10062,7 +10103,7 @@ "type": "tidelift" } ], - "time": "2024-03-19T10:26:25+00:00" + "time": "2024-05-27T13:40:54+00:00" }, { "name": "composer/semver", @@ -10147,16 +10188,16 @@ }, { "name": "composer/xdebug-handler", - "version": "3.0.4", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255" + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255", - "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { @@ -10193,7 +10234,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.4" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, "funding": [ { @@ -10209,7 +10250,7 @@ "type": "tidelift" } ], - "time": "2024-03-26T18:29:49+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { "name": "dedoc/scramble", @@ -10349,6 +10390,67 @@ }, "time": "2024-01-02T13:46:09+00:00" }, + { + "name": "fidry/cpu-core-counter", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2024-02-07T09:43:46+00:00" + }, { "name": "filp/whoops", "version": "2.15.4", @@ -10422,25 +10524,32 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.54.0", + "version": "v3.58.1", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "2aecbc8640d7906c38777b3dcab6f4ca79004d08" + "reference": "04e9424025677a86914b9a4944dbbf4060bb0aff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2aecbc8640d7906c38777b3dcab6f4ca79004d08", - "reference": "2aecbc8640d7906c38777b3dcab6f4ca79004d08", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/04e9424025677a86914b9a4944dbbf4060bb0aff", + "reference": "04e9424025677a86914b9a4944dbbf4060bb0aff", "shasum": "" }, "require": { + "clue/ndjson-react": "^1.0", "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.3", "ext-filter": "*", "ext-json": "*", "ext-tokenizer": "*", + "fidry/cpu-core-counter": "^1.0", "php": "^7.4 || ^8.0", + "react/child-process": "^0.6.5", + "react/event-loop": "^1.0", + "react/promise": "^2.0 || ^3.0", + "react/socket": "^1.0", + "react/stream": "^1.0", "sebastian/diff": "^4.0 || ^5.0 || ^6.0", "symfony/console": "^5.4 || ^6.0 || ^7.0", "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", @@ -10503,7 +10612,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.54.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.58.1" }, "funding": [ { @@ -10511,7 +10620,7 @@ "type": "github" } ], - "time": "2024-04-17T08:12:13+00:00" + "time": "2024-05-29T16:39:07+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -10641,16 +10750,16 @@ }, { "name": "larastan/larastan", - "version": "v2.9.5", + "version": "v2.9.7", "source": { "type": "git", "url": "https://github.com/larastan/larastan.git", - "reference": "101f1a4470f87326f4d3995411d28679d8800abe" + "reference": "5c805f636095cc2e0b659e3954775cf8f1dad1bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/101f1a4470f87326f4d3995411d28679d8800abe", - "reference": "101f1a4470f87326f4d3995411d28679d8800abe", + "url": "https://api.github.com/repos/larastan/larastan/zipball/5c805f636095cc2e0b659e3954775cf8f1dad1bb", + "reference": "5c805f636095cc2e0b659e3954775cf8f1dad1bb", "shasum": "" }, "require": { @@ -10664,7 +10773,7 @@ "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0", "php": "^8.0.2", "phpmyadmin/sql-parser": "^5.9.0", - "phpstan/phpstan": "^1.10.66" + "phpstan/phpstan": "^1.11.1" }, "require-dev": { "doctrine/coding-standard": "^12.0", @@ -10719,7 +10828,7 @@ ], "support": { "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v2.9.5" + "source": "https://github.com/larastan/larastan/tree/v2.9.7" }, "funding": [ { @@ -10739,31 +10848,31 @@ "type": "patreon" } ], - "time": "2024-04-16T19:13:34+00:00" + "time": "2024-05-27T18:33:26+00:00" }, { "name": "lychee-org/phpstan-lychee", - "version": "v1.0.3", + "version": "v1.0.4", "source": { "type": "git", "url": "https://github.com/LycheeOrg/phpstan-lychee.git", - "reference": "8132b18283ef41b7b15db76032d8df1e8567b9dd" + "reference": "4f04a10680fbe50884159b0ef8c06a670117f16d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LycheeOrg/phpstan-lychee/zipball/8132b18283ef41b7b15db76032d8df1e8567b9dd", - "reference": "8132b18283ef41b7b15db76032d8df1e8567b9dd", + "url": "https://api.github.com/repos/LycheeOrg/phpstan-lychee/zipball/4f04a10680fbe50884159b0ef8c06a670117f16d", + "reference": "4f04a10680fbe50884159b0ef8c06a670117f16d", "shasum": "" }, "require": { "friendsofphp/php-cs-fixer": "^3.3", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.1", - "phpstan/phpstan-strict-rules": "^1.4", - "slam/phpstan-extensions": "^6.0", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpstan/phpstan-strict-rules": "^1.6", + "slam/phpstan-extensions": "^6.3", "squizlabs/php_codesniffer": "^3.5", - "symplify/phpstan-rules": "12.0.2", + "symplify/phpstan-rules": "12.7.0", "thecodingmachine/phpstan-safe-rule": "^1.2" }, "type": "library", @@ -10785,10 +10894,10 @@ ], "description": "Set of rules for all Lychee related php repo", "support": { - "source": "https://github.com/LycheeOrg/phpstan-lychee/tree/v1.0.3", + "source": "https://github.com/LycheeOrg/phpstan-lychee/tree/v1.0.4", "issues": "https://github.com/LycheeOrg/phpstan-lychee/issues" }, - "time": "2024-03-02T16:17:13+00:00" + "time": "2024-05-25T20:57:05+00:00" }, { "name": "maximebf/debugbar", @@ -10860,16 +10969,16 @@ }, { "name": "mockery/mockery", - "version": "1.6.11", + "version": "1.6.12", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "81a161d0b135df89951abd52296adf97deb0723d" + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/81a161d0b135df89951abd52296adf97deb0723d", - "reference": "81a161d0b135df89951abd52296adf97deb0723d", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", "shasum": "" }, "require": { @@ -10939,7 +11048,7 @@ "security": "https://github.com/mockery/mockery/security/advisories", "source": "https://github.com/mockery/mockery" }, - "time": "2024-03-21T18:34:15+00:00" + "time": "2024-05-16T03:13:13+00:00" }, { "name": "myclabs/deep-copy", @@ -11436,16 +11545,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.28.0", + "version": "1.29.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb" + "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4", + "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4", "shasum": "" }, "require": { @@ -11477,22 +11586,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.1" }, - "time": "2024-04-03T18:51:33+00:00" + "time": "2024-05-31T08:52:43+00:00" }, { "name": "phpstan/phpstan", - "version": "1.10.67", + "version": "1.11.4", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493" + "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493", - "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9100a76ce8015b9aa7125b9171ae3a76887b6c82", + "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82", "shasum": "" }, "require": { @@ -11537,29 +11646,28 @@ "type": "github" } ], - "time": "2024-04-16T07:22:02+00:00" + "time": "2024-06-06T12:19:22+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", - "version": "1.1.4", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", - "reference": "089d8a8258ed0aeefdc7b68b6c3d25572ebfdbaa" + "reference": "fa8cce7720fa782899a0aa97b6a41225d1bb7b26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/089d8a8258ed0aeefdc7b68b6c3d25572ebfdbaa", - "reference": "089d8a8258ed0aeefdc7b68b6c3d25572ebfdbaa", + "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/fa8cce7720fa782899a0aa97b6a41225d1bb7b26", + "reference": "fa8cce7720fa782899a0aa97b6a41225d1bb7b26", "shasum": "" }, "require": { "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.10.3" + "phpstan/phpstan": "^1.11" }, "require-dev": { "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-php-parser": "^1.1", "phpstan/phpstan-phpunit": "^1.0", "phpunit/phpunit": "^9.5" }, @@ -11583,27 +11691,27 @@ "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", "support": { "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", - "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/1.1.4" + "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/1.2.0" }, - "time": "2023-08-05T09:02:04+00:00" + "time": "2024-04-20T06:39:48+00:00" }, { "name": "phpstan/phpstan-strict-rules", - "version": "1.5.5", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-strict-rules.git", - "reference": "2e193a07651a6f4be3baa44ddb21d822681f5918" + "reference": "363f921dd8441777d4fc137deb99beb486c77df1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/2e193a07651a6f4be3baa44ddb21d822681f5918", - "reference": "2e193a07651a6f4be3baa44ddb21d822681f5918", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/363f921dd8441777d4fc137deb99beb486c77df1", + "reference": "363f921dd8441777d4fc137deb99beb486c77df1", "shasum": "" }, "require": { "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.10.60" + "phpstan/phpstan": "^1.11" }, "require-dev": { "nikic/php-parser": "^4.13.0", @@ -11632,9 +11740,9 @@ "description": "Extra strict and opinionated rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-strict-rules/issues", - "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.5" + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.6.0" }, - "time": "2024-04-19T15:12:26+00:00" + "time": "2024-04-20T06:37:51+00:00" }, { "name": "phpunit/php-code-coverage", @@ -12058,6 +12166,536 @@ ], "time": "2024-04-24T06:32:35+00:00" }, + { + "name": "react/cache", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/cache/issues", + "source": "https://github.com/reactphp/cache/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2022-11-30T15:59:55+00:00" + }, + { + "name": "react/child-process", + "version": "v0.6.5", + "source": { + "type": "git", + "url": "https://github.com/reactphp/child-process.git", + "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", + "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/event-loop": "^1.2", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", + "react/socket": "^1.8", + "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\ChildProcess\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven library for executing child processes with ReactPHP.", + "keywords": [ + "event-driven", + "process", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/child-process/issues", + "source": "https://github.com/reactphp/child-process/tree/v0.6.5" + }, + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-09-16T13:41:56+00:00" + }, + { + "name": "react/dns", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "c134600642fa615b46b41237ef243daa65bb64ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/dns/zipball/c134600642fa615b46b41237ef243daa65bb64ec", + "reference": "c134600642fa615b46b41237ef243daa65bb64ec", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.2", + "react/promise": "^3.0 || ^2.7 || ^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4 || ^3 || ^2", + "react/promise-timer": "^1.9" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Dns\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/dns/issues", + "source": "https://github.com/reactphp/dns/tree/v1.12.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-11-29T12:41:06+00:00" + }, + { + "name": "react/event-loop", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "suggest": { + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "support": { + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-11-13T13:48:05+00:00" + }, + { + "name": "react/promise", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-05-24T10:39:05+00:00" + }, + { + "name": "react/socket", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/socket.git", + "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/socket/zipball/216d3aec0b87f04a40ca04f481e6af01bdd1d038", + "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.11", + "react/event-loop": "^1.2", + "react/promise": "^3 || ^2.6 || ^1.2.1", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4 || ^3 || ^2", + "react/promise-stream": "^1.4", + "react/promise-timer": "^1.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Socket\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", + "keywords": [ + "Connection", + "Socket", + "async", + "reactphp", + "stream" + ], + "support": { + "issues": "https://github.com/reactphp/socket/issues", + "source": "https://github.com/reactphp/socket/tree/v1.15.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-12-15T11:02:10+00:00" + }, + { + "name": "react/stream", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/stream.git", + "reference": "6fbc9672905c7d5a885f2da2fc696f65840f4a66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/stream/zipball/6fbc9672905c7d5a885f2da2fc696f65840f4a66", + "reference": "6fbc9672905c7d5a885f2da2fc696f65840f4a66", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" + }, + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "keywords": [ + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" + ], + "support": { + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-06-16T10:52:11+00:00" + }, { "name": "sebastian/cli-parser", "version": "2.0.1", @@ -13043,16 +13681,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.9.2", + "version": "3.10.1", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480" + "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/aac1f6f347a5c5ac6bc98ad395007df00990f480", - "reference": "aac1f6f347a5c5ac6bc98ad395007df00990f480", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/8f90f7a53ce271935282967f53d0894f8f1ff877", + "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877", "shasum": "" }, "require": { @@ -13119,20 +13757,20 @@ "type": "open_collective" } ], - "time": "2024-04-23T20:25:34+00:00" + "time": "2024-05-22T21:24:41+00:00" }, { "name": "symfony/filesystem", - "version": "v7.0.6", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "408105dff4c104454100730bdfd1a9cdd993f04d" + "reference": "802e87002f919296c9f606457d9fa327a0b3d6b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/408105dff4c104454100730bdfd1a9cdd993f04d", - "reference": "408105dff4c104454100730bdfd1a9cdd993f04d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/802e87002f919296c9f606457d9fa327a0b3d6b2", + "reference": "802e87002f919296c9f606457d9fa327a0b3d6b2", "shasum": "" }, "require": { @@ -13140,6 +13778,9 @@ "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, "type": "library", "autoload": { "psr-4": { @@ -13166,7 +13807,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.0.6" + "source": "https://github.com/symfony/filesystem/tree/v7.1.1" }, "funding": [ { @@ -13182,20 +13823,20 @@ "type": "tidelift" } ], - "time": "2024-03-21T19:37:36+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.0.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "700ff4096e346f54cb628ea650767c8130f1001f" + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/700ff4096e346f54cb628ea650767c8130f1001f", - "reference": "700ff4096e346f54cb628ea650767c8130f1001f", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/47aa818121ed3950acd2b58d1d37d08a94f9bf55", + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55", "shasum": "" }, "require": { @@ -13233,7 +13874,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.0.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.1.1" }, "funding": [ { @@ -13249,7 +13890,7 @@ "type": "tidelift" } ], - "time": "2023-08-08T10:20:21+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/polyfill-php81", @@ -13329,16 +13970,16 @@ }, { "name": "symfony/stopwatch", - "version": "v7.0.3", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112" + "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/983900d6fddf2b0cbaacacbbad07610854bd8112", - "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", + "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", "shasum": "" }, "require": { @@ -13371,7 +14012,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.0.3" + "source": "https://github.com/symfony/stopwatch/tree/v7.1.1" }, "funding": [ { @@ -13387,59 +14028,39 @@ "type": "tidelift" } ], - "time": "2024-01-23T15:02:46+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symplify/phpstan-rules", - "version": "12.0.2", + "version": "12.7.0", "source": { "type": "git", "url": "https://github.com/symplify/phpstan-rules.git", - "reference": "03046af33bfb40da242976480116ecc59496140a" + "reference": "14f506143ae7d6548da88326331cc536686e224f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/phpstan-rules/zipball/03046af33bfb40da242976480116ecc59496140a", - "reference": "03046af33bfb40da242976480116ecc59496140a", + "url": "https://api.github.com/repos/symplify/phpstan-rules/zipball/14f506143ae7d6548da88326331cc536686e224f", + "reference": "14f506143ae7d6548da88326331cc536686e224f", "shasum": "" }, "require": { "nette/utils": "^3.2.9 || ^4.0", - "nikic/php-parser": "^4.15.3", - "php": ">=8.1", - "phpstan/phpstan": "^1.10", - "symplify/rule-doc-generator-contracts": "^11.1.26", + "php": "^7.2|^8.0", + "phpstan/phpstan": "^1.10.30", "webmozart/assert": "^1.11" }, - "require-dev": { - "illuminate/console": "^10.9", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpstan/extension-installer": "^1.3", - "phpunit/phpunit": "^10.1", - "rector/rector": "^0.16", - "symfony/framework-bundle": "6.1.*", - "symplify/easy-ci": "^11.2", - "symplify/easy-coding-standard": "^11.3", - "symplify/phpstan-extensions": "^11.2", - "symplify/rule-doc-generator": "^11.2", - "tomasvotruba/type-coverage": "^0.2.0", - "tomasvotruba/unused-public": "^0.1.10" - }, "type": "phpstan-extension", "extra": { "phpstan": { "includes": [ - "config/services/services.neon", - "config/packages/symfony/services.neon" + "config/services/services.neon" ] } }, "autoload": { "psr-4": { - "Symplify\\PHPStanRules\\": [ - "src", - "packages" - ] + "Symplify\\PHPStanRules\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -13449,66 +14070,7 @@ "description": "Set of Symplify rules for PHPStan", "support": { "issues": "https://github.com/symplify/phpstan-rules/issues", - "source": "https://github.com/symplify/phpstan-rules/tree/12.0.2" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2023-05-19T12:15:03+00:00" - }, - { - "name": "symplify/rule-doc-generator-contracts", - "version": "11.2.0", - "source": { - "type": "git", - "url": "https://github.com/symplify/rule-doc-generator-contracts.git", - "reference": "479cfcfd46047f80624aba931d9789e50475b5c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/rule-doc-generator-contracts/zipball/479cfcfd46047f80624aba931d9789e50475b5c6", - "reference": "479cfcfd46047f80624aba931d9789e50475b5c6", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpstan/extension-installer": "^1.2", - "rector/rector": "^0.15.10", - "symplify/easy-ci": "^11.1", - "symplify/easy-coding-standard": "^11.1", - "symplify/easy-testing": "^11.1", - "symplify/phpstan-extensions": "^11.1", - "symplify/phpstan-rules": "11.2.3.72", - "tomasvotruba/unused-public": "^0.0.34" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "11.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\RuleDocGenerator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Contracts for production code of RuleDocGenerator", - "support": { - "source": "https://github.com/symplify/rule-doc-generator-contracts/tree/11.2.0" + "source": "https://github.com/symplify/phpstan-rules/tree/12.7.0" }, "funding": [ { @@ -13520,7 +14082,7 @@ "type": "github" } ], - "time": "2024-03-18T22:02:54+00:00" + "time": "2024-05-25T15:32:40+00:00" }, { "name": "thecodingmachine/phpstan-safe-rule", @@ -13659,5 +14221,5 @@ "platform-overrides": { "php": "8.2" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" } diff --git a/database/migrations/2019_09_28_171753_config_fix.php b/database/migrations/2019_09_28_171753_config_fix.php index 522518b146..43c321948c 100644 --- a/database/migrations/2019_09_28_171753_config_fix.php +++ b/database/migrations/2019_09_28_171753_config_fix.php @@ -51,7 +51,7 @@ private function update_names(): void /** * Cleaning up entries which do not exists anymore. * - * @param array $values + * @param array{key:string,value:string,cat:string,type_range:string,confidentiality:string}[] $values */ private function cleanup(array &$values): void { @@ -90,7 +90,7 @@ private function missing_columns(): void /** * Update the fields which are missing, set up the correct values for columns. * - * @param array $default_values + * @param array{key:string,value:string,cat:string,type_range:string,confidentiality:string}[] $default_values */ private function update_missing_fields(array &$default_values): void { @@ -116,6 +116,7 @@ public function up(): void defined('TERNARY') or define('TERNARY', '0|1|2'); defined('DISABLED') or define('DISABLED', ''); + /** @var array{key:string,value:string,cat:string,type_range:string,confidentiality:string}[] */ $default_values = [ [ 'key' => 'version', diff --git a/database/migrations/2020_07_11_184605_update_licences.php b/database/migrations/2020_07_11_184605_update_licences.php index 027cb7464f..11613aeefd 100644 --- a/database/migrations/2020_07_11_184605_update_licences.php +++ b/database/migrations/2020_07_11_184605_update_licences.php @@ -8,7 +8,7 @@ /** * Update the fields. * - * @param array $default_values + * @param array{key:string,value:string,cat:string,type_range:string,confidentiality:string}[] $default_values */ private function update_fields(array &$default_values): void { @@ -44,7 +44,7 @@ public function up(): void $this->update_fields($default_values); // Get all CC licences - /** @var Collection $photos */ + /** @var Collection $photos */ $photos = DB::table('photos')->where('license', 'like', 'CC-%')->get(); if ($photos->isEmpty()) { return; @@ -60,7 +60,7 @@ public function up(): void public function down(): void { // Get all CC licences - /** @var Collection $photos */ + /** @var Collection $photos */ $photos = DB::table('photos')->where('license', 'like', 'CC-%')->get(); if ($photos->isEmpty()) { return; diff --git a/database/migrations/2021_05_25_160600_post_revert_fixes.php b/database/migrations/2021_05_25_160600_post_revert_fixes.php index eb05977721..f331ede2a0 100644 --- a/database/migrations/2021_05_25_160600_post_revert_fixes.php +++ b/database/migrations/2021_05_25_160600_post_revert_fixes.php @@ -237,9 +237,9 @@ protected function setConfiguration(string $key, string $value, string $range): * If the current value of the configuration option is not included in * $map, then the value is not altered. * - * @param string $key the key (aka name) of the configuration option - * @param array $map a mapping from old-to-new configuration values - * @param string $range the new range for the configuration option + * @param string $key the key (aka name) of the configuration option + * @param array $map a mapping from old-to-new configuration values + * @param string $range the new range for the configuration option */ protected function convertConfiguration(string $key, array $map, string $range): void { diff --git a/database/migrations/2021_06_01_181900_refactor_timestamps_anew.php b/database/migrations/2021_06_01_181900_refactor_timestamps_anew.php index ddeccf0668..924072a5ea 100644 --- a/database/migrations/2021_06_01_181900_refactor_timestamps_anew.php +++ b/database/migrations/2021_06_01_181900_refactor_timestamps_anew.php @@ -513,9 +513,9 @@ protected function setConfiguration(string $key, string $value, string $range): * If the current value of the configuration option is not included in * $map, then the value is not altered. * - * @param string $key the key (aka name) of the configuration option - * @param array $map a mapping from old-to-new configuration values - * @param string $range the new range for the configuration option + * @param string $key the key (aka name) of the configuration option + * @param array $map a mapping from old-to-new configuration values + * @param string $range the new range for the configuration option */ protected function convertConfiguration(string $key, array $map, string $range): void { diff --git a/database/migrations/2024_06_08_093403_primary_key_job_history.php b/database/migrations/2024_06_08_093403_primary_key_job_history.php new file mode 100644 index 0000000000..56acd46e22 --- /dev/null +++ b/database/migrations/2024_06_08_093403_primary_key_job_history.php @@ -0,0 +1,25 @@ +index(['owner_id', 'status']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // We cannot remove index key because owner_id is used for FK constraint. + } +}; diff --git a/database/migrations/2024_06_08_103842_add_config_display_processing_queue.php b/database/migrations/2024_06_08_103842_add_config_display_processing_queue.php new file mode 100644 index 0000000000..64e481ef76 --- /dev/null +++ b/database/migrations/2024_06_08_103842_add_config_display_processing_queue.php @@ -0,0 +1,22 @@ + 'job_processing_queue_visible', + 'value' => '1', + 'is_secret' => false, + 'cat' => self::PROCESSING, + 'type_range' => self::BOOL, + 'description' => 'Enable the processing queue in the bottom left corner.', + ], + ]; + } +}; diff --git a/package-lock.json b/package-lock.json index f62352ae12..caeac5c59d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,9 +50,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", "cpu": [ "ppc64" ], @@ -65,9 +65,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", "cpu": [ "arm" ], @@ -80,9 +80,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", "cpu": [ "arm64" ], @@ -95,9 +95,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "cpu": [ "x64" ], @@ -110,9 +110,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", "cpu": [ "arm64" ], @@ -125,9 +125,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", "cpu": [ "x64" ], @@ -140,9 +140,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", "cpu": [ "arm64" ], @@ -155,9 +155,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", "cpu": [ "x64" ], @@ -170,9 +170,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", "cpu": [ "arm" ], @@ -185,9 +185,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", "cpu": [ "arm64" ], @@ -200,9 +200,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", "cpu": [ "ia32" ], @@ -215,9 +215,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", "cpu": [ "loong64" ], @@ -230,9 +230,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", "cpu": [ "mips64el" ], @@ -245,9 +245,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", "cpu": [ "ppc64" ], @@ -260,9 +260,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", "cpu": [ "riscv64" ], @@ -275,9 +275,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", "cpu": [ "s390x" ], @@ -290,9 +290,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", "cpu": [ "x64" ], @@ -305,9 +305,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", "cpu": [ "x64" ], @@ -320,9 +320,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", "cpu": [ "x64" ], @@ -335,9 +335,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", "cpu": [ "x64" ], @@ -350,9 +350,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", "cpu": [ "arm64" ], @@ -365,9 +365,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", "cpu": [ "ia32" ], @@ -380,9 +380,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "cpu": [ "x64" ], @@ -395,9 +395,9 @@ } }, "node_modules/@fortawesome/fontawesome-free": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.1.tgz", - "integrity": "sha512-CNy5vSwN3fsUStPRLX7fUYojyuzoEMSXPl7zSLJ8TgtRfjv24LOnOWKT2zYwaHZCJGkdyRnTmstR0P+Ah503Gw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.2.tgz", + "integrity": "sha512-hRILoInAx8GNT5IMkrtIt9blOdrqHOnPBH+k70aWUAqPZPgopb9G5EQJFpaBx/S8zp2fC+mPW349Bziuk1o28Q==", "hasInstallScript": true, "engines": { "node": ">=6" @@ -520,9 +520,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", - "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", "cpu": [ "arm" ], @@ -532,9 +532,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", - "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", "cpu": [ "arm64" ], @@ -544,9 +544,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", - "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", "cpu": [ "arm64" ], @@ -556,9 +556,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", - "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", "cpu": [ "x64" ], @@ -568,9 +568,21 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", - "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", "cpu": [ "arm" ], @@ -580,9 +592,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", - "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", "cpu": [ "arm64" ], @@ -592,9 +604,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", - "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", "cpu": [ "arm64" ], @@ -603,10 +615,22 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", - "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", "cpu": [ "riscv64" ], @@ -615,10 +639,22 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", - "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", "cpu": [ "x64" ], @@ -628,9 +664,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", - "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", "cpu": [ "x64" ], @@ -640,9 +676,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", - "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", "cpu": [ "arm64" ], @@ -652,9 +688,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", - "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", "cpu": [ "ia32" ], @@ -664,9 +700,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", - "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", "cpu": [ "x64" ], @@ -676,9 +712,9 @@ ] }, "node_modules/@tailwindcss/typography": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.12.tgz", - "integrity": "sha512-CNwpBpconcP7ppxmuq3qvaCxiRWnbhANpY/ruH4L5qs2GCiVDJXde/pjj2HWPV1+Q4G9+V/etrwUYopdcjAlyg==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.13.tgz", + "integrity": "sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==", "dev": true, "dependencies": { "lodash.castarray": "^4.4.0", @@ -690,29 +726,16 @@ "tailwindcss": ">=3.0.0 || insiders" } }, - "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@types/alpinejs": { - "version": "3.13.7", - "resolved": "https://registry.npmjs.org/@types/alpinejs/-/alpinejs-3.13.7.tgz", - "integrity": "sha512-9VH1N/414xJy9FJXXAfwQjbX+i+Qr9Xs8xAI1xBdD79X2EvHnAen5qRiSsbJuhqQJ9J798W3CUva21EidO3krw==", + "version": "3.13.10", + "resolved": "https://registry.npmjs.org/@types/alpinejs/-/alpinejs-3.13.10.tgz", + "integrity": "sha512-ah53tF6mWuuwerpDE7EHwbZErNDJQlsLISPqJhYj2RZ9nuTYbRknSkqebUd3igkhLIZKkPa7IiXjSn9qsU9O2w==", "dev": true }, "node_modules/@types/eslint": { - "version": "8.56.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.5.tgz", - "integrity": "sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw==", + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "peer": true, "dependencies": { "@types/estree": "*", @@ -752,9 +775,9 @@ "integrity": "sha512-q2ybP0u0NVj87oMnGZOGxY2iUN8ddr48zPOBHBdbOLpsMTA/keGj+93ou+OMCnJk0xewzlNIaVEkxM6VBD3E2w==" }, "node_modules/@types/leaflet": { - "version": "1.9.8", - "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.8.tgz", - "integrity": "sha512-EXdsL4EhoUtGm2GC2ZYtXn+Fzc6pluVgagvo2VC1RHWToLGlTRwVYoDpqS/7QXa01rmDyBjJk3Catpf60VMkwg==", + "version": "1.9.12", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.12.tgz", + "integrity": "sha512-BK7XS+NyRI291HIo0HCfE18Lp8oA30H1gpi1tf0mF3TgiCEzanQjOqNZ4x126SXzzi2oNSZhZ5axJp1k0iM6jg==", "dev": true, "dependencies": { "@types/geojson": "*" @@ -785,9 +808,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.26.tgz", - "integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==", + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", "dependencies": { "undici-types": "~5.26.4" } @@ -808,9 +831,9 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -830,9 +853,9 @@ "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { @@ -853,15 +876,15 @@ "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -889,28 +912,28 @@ "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -918,24 +941,24 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -944,12 +967,12 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -1058,9 +1081,9 @@ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/autoprefixer": { - "version": "10.4.18", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", - "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "funding": [ { "type": "opencollective", @@ -1077,7 +1100,7 @@ ], "dependencies": { "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001591", + "caniuse-lite": "^1.0.30001599", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -1099,11 +1122,14 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/brace-expansion": { @@ -1115,11 +1141,11 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -1179,9 +1205,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001597", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", - "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", + "version": "1.0.30001628", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001628.tgz", + "integrity": "sha512-S3BnR4Kh26TBxbi5t5kpbcUlLJb9lhtDXISDPwOfI+JoC+ik0QksvkZtUVyikw3hjnkgkMPSJ8oIM9yMm9vflA==", "funding": [ { "type": "opencollective", @@ -1247,9 +1273,9 @@ } }, "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "peer": true, "engines": { "node": ">=6.0" @@ -1392,9 +1418,9 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/electron-to-chromium": { - "version": "1.4.701", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.701.tgz", - "integrity": "sha512-K3WPQ36bUOtXg/1+69bFlFOvdSm0/0bGqmsfPDLRXLanoKXdA+pIWuf/VbA9b+2CwBFuONgl4NEz4OEm+OJOKA==" + "version": "1.4.790", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.790.tgz", + "integrity": "sha512-eVGeQxpaBYbomDBa/Mehrs28MdvCXfJmEFzaMFsv8jH/MJDLIylJN81eTJ5kvx7B7p18OiPK0BkC06lydEy63A==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -1407,9 +1433,9 @@ "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" }, "node_modules/enhanced-resolve": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", - "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -1419,14 +1445,14 @@ } }, "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", + "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==" }, "node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -1435,29 +1461,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, "node_modules/escalade": { @@ -1567,9 +1593,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1646,21 +1672,21 @@ } }, "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -1775,9 +1801,9 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -1821,9 +1847,9 @@ } }, "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.3.tgz", + "integrity": "sha512-uy2bNX5zQ+tESe+TiC7ilGRz8AtRGmnJH55NC5S0nSUjvvvM2hJHmefHErugGXN4pNv4Qx7vLsnNw9qJ9mtIsw==", "bin": { "jiti": "bin/jiti.js" } @@ -1846,9 +1872,9 @@ "integrity": "sha512-M5FimNMXgiOYerVRGsXZ2YK9YNCaTtwtYp7Hb2308U1Q9TXXHx5G0p08mcVR5O53qf8bWY4NJcPBxE6zuayXSg==" }, "node_modules/laravel-vite-plugin": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.0.2.tgz", - "integrity": "sha512-Mcclml10khYzBVxDwJro8wnVDwD4i7XOSEMACQNnarvTnHjrjXLLL+B/Snif2wYAyElsOqagJZ7VAinb/2vF5g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.0.4.tgz", + "integrity": "sha512-dEj8Q/Fsn0kKbOQ55bl/NmyJL+dD6OxnVaM/nNByw5XV4b00ky6FzXKVuHLDr4BvSJKH1y6oaOcEG5wKpCZ5+A==", "dependencies": { "picocolors": "^1.0.0", "vite-plugin-full-reload": "^1.1.0" @@ -1943,22 +1969,19 @@ "dev": true }, "node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "engines": { "node": "14 || >=16.14" } }, "node_modules/magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" } }, "node_modules/merge-stream": { @@ -1976,11 +1999,11 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -2009,9 +2032,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2023,9 +2046,9 @@ } }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { "node": ">=16 || 14 >=14.17" } @@ -2155,24 +2178,24 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -2210,9 +2233,9 @@ } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -2230,7 +2253,7 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -2333,10 +2356,23 @@ "postcss": "^8.2.14" } }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -2351,9 +2387,9 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", "bin": { "prettier": "bin/prettier.cjs" }, @@ -2476,9 +2512,9 @@ } }, "node_modules/rollup": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", - "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", "dependencies": { "@types/estree": "1.0.5" }, @@ -2490,19 +2526,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.0", - "@rollup/rollup-android-arm64": "4.13.0", - "@rollup/rollup-darwin-arm64": "4.13.0", - "@rollup/rollup-darwin-x64": "4.13.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", - "@rollup/rollup-linux-arm64-gnu": "4.13.0", - "@rollup/rollup-linux-arm64-musl": "4.13.0", - "@rollup/rollup-linux-riscv64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-musl": "4.13.0", - "@rollup/rollup-win32-arm64-msvc": "4.13.0", - "@rollup/rollup-win32-ia32-msvc": "4.13.0", - "@rollup/rollup-win32-x64-msvc": "4.13.0", + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", "fsevents": "~2.3.2" } }, @@ -2567,12 +2606,9 @@ } }, "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -2580,17 +2616,6 @@ "node": ">=10" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -2644,9 +2669,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -2802,9 +2827,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", - "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", + "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -2814,7 +2839,7 @@ "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.19.1", + "jiti": "^1.21.0", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", @@ -2837,6 +2862,18 @@ "node": ">=14.0.0" } }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -2846,9 +2883,9 @@ } }, "node_modules/terser": { - "version": "5.29.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", - "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", + "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -2963,9 +3000,9 @@ } }, "node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -2980,9 +3017,9 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "funding": [ { "type": "opencollective", @@ -2998,8 +3035,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -3023,13 +3060,13 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/vite": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.7.tgz", - "integrity": "sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==", + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.12.tgz", + "integrity": "sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==", "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.35", - "rollup": "^4.2.0" + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" }, "bin": { "vite": "bin/vite.js" @@ -3108,9 +3145,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -3121,26 +3158,26 @@ } }, "node_modules/webpack": { - "version": "5.90.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", - "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -3148,7 +3185,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -3281,15 +3318,10 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/yaml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.3.tgz", + "integrity": "sha512-sntgmxj8o7DE7g/Qi60cqpLBA3HG3STcDA0kO+WfB05jEKhZMbY7umNm2rBpQvsmZ16/lPXCJGW2672dgOUkrg==", "bin": { "yaml": "bin.mjs" }, diff --git a/phpstan.neon b/phpstan.neon index 7df223585b..159f9b5800 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -3,7 +3,6 @@ includes: - vendor/lychee-org/phpstan-lychee/phpstan.neon parameters: - checkGenericClassInNonGenericObjectType: false treatPhpDocTypesAsCertain: false paths: - app @@ -29,28 +28,30 @@ parameters: - '#Access to an undefined property App\\Contracts\\Image\\StreamStats::\$bytes#' # bunch of false positives from Eloquent - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::from\(\).#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::limit\(\).#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::offset\(\).#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::take\(\).#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::truncate\(\).#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::insert\(\).#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::select\(\).#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::orderBy\(\)#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::where(Not)?(Null|In|Between|Exists|Column|Year|Month|Day)?\(\).#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::delete\(\)#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::without\(\)#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::with\(\)#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::count\(\).#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::update\(\).#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::inRandomOrder\(\).#' - - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder)(<.*>)?::groupBy\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::from\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::limit\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::offset\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::take\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::truncate\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::insert\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::select\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::orderBy\(\)#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::where(Not)?(Null|In|Between|Exists|Column|Year|Month|Day)?\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::delete\(\)#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::without\(\)#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::with\(\)#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::count\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::update\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::inRandomOrder\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::groupBy\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::latest\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::first\(\).#' + - '#Dynamic call to static method (Illuminate\\Database\\Query\\Builder|Illuminate\\Database\\Eloquent\\(Builder|Relations\\.*)|App\\Models\\Builders\\.*|App\\Eloquent\\FixedQueryBuilder|App\\Relations\\.*)(<.*>)?::skip\(\).#' - '#Dynamic call to static method App\\Models\\Builders\\.*::orderByDesc\(\).#' - '#Dynamic call to static method App\\Models\\Builders\\.*::selectRaw\(\).#' - '#Call to an undefined method Illuminate\\Database\\Eloquent\\.*::with(Only)?\(\)#' - '#Call to an undefined method App\\Relations\\HasManyPhotosRecursively::whereNotNull\(\)#' - '#Call to an undefined method Illuminate\\Database\\Eloquent\\Builder|Illuminate\\Database\\Eloquent\\Relations\\Relation::whereNotNull\(\).#' - - '#Call to private method latest\(\) of parent class Illuminate\\Database\\Eloquent\\Relations\\HasMany#' - '#Call to protected method asDateTime\(\) of class Illuminate\\Database\\Eloquent\\Model.#' # Covariance - LSP princinple: https://en.wikipedia.org/wiki/Liskov_substitution_principle @@ -58,16 +59,17 @@ parameters: message: '#Parameter \#1 \$column \(array\|Closure\|Illuminate\\Database\\Query\\Expression\|string\) of method .* should be contravariant with parameter \$column \(array\|\(Closure.*\)\|\(Closure.*\)\|Illuminate\\Contracts\\Database\\Query\\Expression\|string\) of method .*#' paths: - app/Eloquent/FixedQueryBuilderTrait.php - - '#Parameter \#1 \$models \(array<.*>\) of method .*::initRelation\(\) should be contravariant with parameter \$models \(array\) of method .*::initRelation\(\)#' - - '#Parameter \#1 \$models \(array<.*>\) of method .*::match\(\) should be contravariant with parameter \$models \(array\) of method .*::match\(\)#' - - '#Parameter \#1 \$models \(array<.*>\) of method .*::addEagerConstraints\(\) should be contravariant with parameter \$models \(array\) of method .*::addEagerConstraints\(\)#' - - '#Parameter \#1 \$albums \(array<.*>\) of method .*::addEagerConstraints\(\) should be contravariant with parameter \$models \(array\) of method .*::addEagerConstraints\(\)#' - - - '#Parameter \#1 \$key of method .*::partition\(\) expects \(callable\(.*\): bool\)\|Illuminate\\Database\\Eloquent\\Model\|string, Closure\(.*\): bool given.#' - + - '#Parameter \#1 \$models .* of method .*::initRelation\(\) should be contravariant with parameter \$models .* of method .*::initRelation\(\)#' + - '#Parameter \#(1|2) \$(models|albums|photos|results) .* of method .*::(match|addEagerConstraints)\(\) should be contravariant with parameter \$(models|albums|photos|results) .* of method .*::(match|addEagerConstraints)\(\)#' + - '#Parameter .* of method .*::partition\(\) expects \(callable\(.*\): bool\)\|Illuminate\\Database\\Eloquent\\Model\|string, Closure\(.*\): bool given.#' + - '#Parameter .* of method .*::performInsert\(\) should be contravariant with parameter .* of method .*::performInsert\(\)#' + - '#Parameter .* of method .*::replicate\(\) should be contravariant with parameter .* of method .*::replicate\(\)#' + - '#Parameter .* of method .*::save\(\) should be contravariant with parameter .* of method .*::save\(\)#' + - '#Parameter .* of method .*::newEloquentBuilder\(\) should be contravariant with parameter .* of method Kalnoy\\Nestedset\\Node::newEloquentBuilder\(\)#' + - '#Parameter .* of method .*::performUpdate\(\) should be contravariant with parameter .* of method .*::performUpdate\(\)#' + - '#Parameter .* of method .*::isDirty\(\) should be contravariant with parameter .* of method .*::isDirty\(\)#' - '#Call to an undefined( static)? method Kalnoy\\Nestedset\\.*::(whereIn|select|join|leftJoin|orderBy|addSelect|without)\(\)#' - - '#Parameter .* of method .*::newEloquentBuilder\(\) should be contravariant with parameter \$query \(mixed\) of method Kalnoy\\Nestedset\\Node::newEloquentBuilder\(\)#' - '#Call to an undefined method Geocoder\\Location::getDisplayName\(\)#' - '#Call to an undefined method COM::getfolder\(\).#' - '#Dynamic call to static method Laragear\\WebAuthn\\Http\\Requests\\AssertionRequest::validate\(\).#' @@ -107,6 +109,11 @@ parameters: paths: - database/migrations + - + message: '#with generic class Doctrine\\DBAL\\Schema\\AbstractSchemaManager does not specify its types: T#' + paths: + - database/migrations + # Configs - message: '#Cast to bool is forbidden.#' @@ -114,6 +121,10 @@ parameters: - config # TESTS + - + message: '#no value type specified in iterable type array.#' + paths: + - tests - message: '#Dynamic call to static method Illuminate\\Testing\\TestResponse::assert(Forbidden|ViewIs|Unauthorized|Ok|Status)#' paths: diff --git a/resources/views/components/gallery/view/photo-listing.blade.php b/resources/views/components/gallery/view/photo-listing.blade.php index 5b328cd20c..0592ed94a6 100644 --- a/resources/views/components/gallery/view/photo-listing.blade.php +++ b/resources/views/components/gallery/view/photo-listing.blade.php @@ -20,6 +20,6 @@ @endif
@foreach ($this->photos as $idx => $photo) - + @endforeach
diff --git a/resources/views/livewire/forms/album/properties.blade.php b/resources/views/livewire/forms/album/properties.blade.php index a94c1a12c3..046726af8d 100644 --- a/resources/views/livewire/forms/album/properties.blade.php +++ b/resources/views/livewire/forms/album/properties.blade.php @@ -21,7 +21,7 @@ - +
{{ __('lychee.ALBUM_SET_LICENSE') }} diff --git a/resources/views/livewire/pages/gallery/album.blade.php b/resources/views/livewire/pages/gallery/album.blade.php index b6a4b76ef2..b46228f01b 100644 --- a/resources/views/livewire/pages/gallery/album.blade.php +++ b/resources/views/livewire/pages/gallery/album.blade.php @@ -35,7 +35,7 @@ class="relative flex flex-wrap content-start w-full justify-start overflow-y-auto" x-bind:class="isFullscreen ? 'h-[calc(100vh-3px)]' : 'h-[calc(100vh-56px)]'"> @if ($rights->can_edit && $flags->is_base_album) - + @endif @if ($this->albumFormatted !== null && ($num_albums > 0 || $num_photos > 0)) @@ -53,7 +53,7 @@ class="relative flex flex-wrap content-start w-full justify-start overflow-y-aut @endif @if ($num_albums > 0) @foreach ($this->albums as $data) - + @endforeach @endif @if ($num_albums > 0 && $num_photos > 0) diff --git a/resources/views/livewire/pages/gallery/albums.blade.php b/resources/views/livewire/pages/gallery/albums.blade.php index b1000b3995..3ea77c4c52 100644 --- a/resources/views/livewire/pages/gallery/albums.blade.php +++ b/resources/views/livewire/pages/gallery/albums.blade.php @@ -38,7 +38,7 @@ @if ($this->smartAlbums->count() > 0) @foreach ($this->smartAlbums as $album) - + @endforeach @if ($this->albums->count() > 0) @@ -47,7 +47,7 @@ @if ($this->albums->count() > 0) @foreach ($this->albums as $album) - + @endforeach @endif @@ -62,7 +62,7 @@ $oldUsername = $album->owner->username; @endphp @endif - + @endforeach @endif
diff --git a/resources/views/livewire/pages/gallery/search.blade.php b/resources/views/livewire/pages/gallery/search.blade.php index 0a3a306178..02867be8b3 100644 --- a/resources/views/livewire/pages/gallery/search.blade.php +++ b/resources/views/livewire/pages/gallery/search.blade.php @@ -47,7 +47,7 @@ class="w-80 px-3 pt-1.5 pb-1 rounded-full placeholder:text-text-main-200 bg-bg-8 @if ($this->rights->can_edit && $this->flags->is_base_album) - + @endif @if ($this->albumFormatted !== null && ($this->num_albums > 0 || $this->num_photos > 0)) @@ -63,7 +63,7 @@ class="w-80 px-3 pt-1.5 pb-1 rounded-full placeholder:text-text-main-200 bg-bg-8 @endif @if ($this->num_albums > 0) @foreach ($this->albums as $data) - + @endforeach @endif @if ($this->num_albums > 0 && $this->num_photos > 0) diff --git a/routes/web-livewire.php b/routes/web-livewire.php index 99fd91f345..439d82b173 100644 --- a/routes/web-livewire.php +++ b/routes/web-livewire.php @@ -26,29 +26,33 @@ Route::get('/diagnostics', Diagnostics::class)->name('diagnostics'); }); +Route::prefix(Features::when('livewire', '', 'livewire')) +->group(function () { + // Oauth routes. + Route::get('/auth/{provider}/redirect', [Oauth::class, 'redirected'])->whereIn('provider', OauthProvidersType::values()); + Route::get('/auth/{provider}/authenticate', [Oauth::class, 'authenticate'])->name('oauth-authenticate')->whereIn('provider', OauthProvidersType::values()); + Route::get('/auth/{provider}/register', [Oauth::class, 'register'])->name('oauth-register')->whereIn('provider', OauthProvidersType::values()); + + Route::get('/all-settings', AllSettings::class)->name('all-settings'); + Route::get('/settings', Settings::class)->name('settings'); + Route::get('/profile', Profile::class)->name('profile'); + Route::get('/users', Users::class)->name('users'); + Route::get('/sharing', Sharing::class)->name('sharing'); + Route::get('/jobs', Jobs::class)->name('jobs'); + Route::get('/maintenance', Maintenance::class)->name('maintenance'); + Route::get('/map/{albumId?}', Map::class)->name('livewire-map'); + Route::get('/frame/{albumId?}', Frame::class)->name('livewire-frame'); + Route::get('/search/{albumId?}', Search::class)->name('livewire-search'); + Route::get('/gallery/{albumId}/', Album::class)->name('livewire-gallery-album'); + Route::get('/gallery/{albumId}/{photoId}', Album::class)->name('livewire-gallery-photo'); +}); + Route::middleware(['installation:complete', 'migration:complete']) ->group(function () { Route::prefix(Features::when('livewire', '', 'livewire')) ->group(function () { - // Oauth routes. - Route::get('/auth/{provider}/redirect', [Oauth::class, 'redirected'])->whereIn('provider', OauthProvidersType::values()); - Route::get('/auth/{provider}/authenticate', [Oauth::class, 'authenticate'])->name('oauth-authenticate')->whereIn('provider', OauthProvidersType::values()); - Route::get('/auth/{provider}/register', [Oauth::class, 'register'])->name('oauth-register')->whereIn('provider', OauthProvidersType::values()); - Route::get('/landing', Landing::class)->name('landing'); - Route::get('/all-settings', AllSettings::class)->name('all-settings'); - Route::get('/settings', Settings::class)->name('settings'); - Route::get('/profile', Profile::class)->name('profile'); - Route::get('/users', Users::class)->name('users'); - Route::get('/sharing', Sharing::class)->name('sharing'); - Route::get('/jobs', Jobs::class)->name('jobs'); - Route::get('/maintenance', Maintenance::class)->name('maintenance'); - Route::get('/map/{albumId?}', Map::class)->name('livewire-map'); - Route::get('/frame/{albumId?}', Frame::class)->name('livewire-frame'); Route::get('/gallery', Albums::class)->name('livewire-gallery'); - Route::get('/search/{albumId?}', Search::class)->name('livewire-search'); - Route::get('/gallery/{albumId}/', Album::class)->name('livewire-gallery-album'); - Route::get('/gallery/{albumId}/{photoId}', Album::class)->name('livewire-gallery-photo'); Route::get('/', [RedirectController::class, 'view'])->name('livewire-index'); }); }); diff --git a/scripts/gen_release.php b/scripts/gen_release.php index fd23b7c906..4acaf550c8 100755 --- a/scripts/gen_release.php +++ b/scripts/gen_release.php @@ -43,7 +43,7 @@ public function down(): void /** * We get the current version number. * - * @return array + * @return array */ function get_version(): array { @@ -63,10 +63,10 @@ function get_version(): array /** * Given the current version and the update array return the new version number. * - * @param array $curr_version current version number - * @param string $kind 'minor' or 'major' + * @param array $curr_version current version number + * @param string $kind 'minor' or 'major' * - * @return array + * @return array */ function new_version(array $curr_version, string $kind): array { @@ -88,6 +88,8 @@ function new_version(array $curr_version, string $kind): array /** * encode $version into a string of 6 digits. * + * @param array $version + * * @return string */ function str_version(array $version): string diff --git a/tests/AbstractTestCase.php b/tests/AbstractTestCase.php index 474fb3fa07..648cb83cf4 100644 --- a/tests/AbstractTestCase.php +++ b/tests/AbstractTestCase.php @@ -102,7 +102,7 @@ protected static function importPath(string $path = ''): string } /** - * @return BaseCollection the IDs of recently added photos + * @return BaseCollection the IDs of recently added photos */ protected static function getRecentPhotoIDs(): BaseCollection { diff --git a/tests/Livewire/WireableTest.php b/tests/Livewire/WireableTest.php index 9d49959b96..d7452f25d6 100644 --- a/tests/Livewire/WireableTest.php +++ b/tests/Livewire/WireableTest.php @@ -22,6 +22,7 @@ class WireableTest extends AbstractTestCase public function testWirableDehydrate(): void { $trait = new class() implements Wireable { + /** @phpstan-use UseWireable */ use UseWireable; public object $num; @@ -37,6 +38,7 @@ public function __construct() public function testWirableHydrate(): void { $trait = new class() implements Wireable { + /** @phpstan-use UseWireable */ use UseWireable; };