From 1dfa17abcac344bdbb8cab0a7de3197475d5ea63 Mon Sep 17 00:00:00 2001 From: Jonny Barnes Date: Sat, 1 Mar 2025 15:00:41 +0000 Subject: [PATCH] Update Laravel to v12 --- .env.example | 7 +- .../Commands/ParseCachedWebMentions.php | 2 +- .../RemoteContentNotFoundException.php | 2 +- .../Controllers/Admin/ArticlesController.php | 2 +- .../Controllers/Admin/NotesController.php | 2 +- app/Http/Controllers/IndieAuthController.php | 4 +- .../Controllers/MicropubMediaController.php | 6 +- .../Controllers/WebMentionsController.php | 6 +- app/Jobs/DownloadWebMention.php | 16 +- app/Jobs/ProcessLike.php | 2 +- app/Jobs/ProcessMedia.php | 15 +- app/Jobs/SaveProfileImage.php | 2 +- app/Jobs/SendWebMentions.php | 4 +- app/Models/Note.php | 2 +- app/Models/Place.php | 2 +- app/Models/WebMention.php | 4 +- app/Services/BookmarkService.php | 6 +- app/Services/LikeService.php | 2 +- app/Services/Micropub/UpdateService.php | 6 +- app/Services/PlaceService.php | 6 +- composer.json | 21 +- composer.lock | 2712 ++++++----------- config/app.php | 2 +- config/database.php | 4 + config/debugbar.php | 2 +- config/filesystems.php | 6 +- config/mail.php | 4 +- config/session.php | 2 +- database/seeders/NotesTableSeeder.php | 2 +- helpers.php | 4 +- public/index.php | 47 +- routes/web.php | 2 +- tests/Browser/ExampleTest.php | 2 +- .../Feature/Admin/AdminHomeControllerTest.php | 3 +- tests/Feature/Admin/AdminTest.php | 17 +- tests/Feature/Admin/ArticlesTest.php | 15 +- tests/Feature/Admin/BioTest.php | 9 +- tests/Feature/Admin/ClientsTest.php | 13 +- tests/Feature/Admin/ContactsTest.php | 23 +- tests/Feature/Admin/LikesTest.php | 13 +- tests/Feature/Admin/NotesTest.php | 13 +- tests/Feature/Admin/PlacesTest.php | 11 +- tests/Feature/ArticlesTest.php | 15 +- tests/Feature/BookmarksTest.php | 11 +- tests/Feature/ContactsTest.php | 12 +- tests/Feature/CorsHeadersTest.php | 5 +- tests/Feature/FeedsTest.php | 28 +- tests/Feature/FrontPageTest.php | 3 +- tests/Feature/HorizonTest.php | 4 +- tests/Feature/IndieAuthTest.php | 4 +- tests/Feature/LikesTest.php | 35 +- tests/Feature/MicropubControllerTest.php | 79 +- tests/Feature/MicropubMediaTest.php | 67 +- tests/Feature/NotesControllerTest.php | 17 +- tests/Feature/OwnYourGramTest.php | 3 +- tests/Feature/ParseCachedWebMentionsTest.php | 3 +- tests/Feature/PlacesTest.php | 9 +- tests/Feature/ReDownloadWebMentionsTest.php | 3 +- tests/Feature/SearchTest.php | 3 +- tests/Feature/ShortURLsControllerTest.php | 9 +- tests/Feature/SwarmTest.php | 18 +- tests/Feature/TokenServiceTest.php | 10 +- tests/Feature/WebMentionsControllerTest.php | 17 +- tests/Unit/ArticlesTest.php | 13 +- tests/Unit/BookmarksTest.php | 13 +- tests/Unit/HelpersTest.php | 13 +- .../Unit/Jobs/AddClientToDatabaseJobTest.php | 3 +- tests/Unit/Jobs/DownloadWebMentionJobTest.php | 7 +- tests/Unit/Jobs/ProcessBookmarkJobTest.php | 5 +- tests/Unit/Jobs/ProcessMediaJobTest.php | 20 +- tests/Unit/Jobs/ProcessWebMentionJobTest.php | 13 +- tests/Unit/Jobs/SaveProfileImageJobTest.php | 13 +- tests/Unit/Jobs/SaveScreenshotJobTest.php | 5 +- tests/Unit/Jobs/SendWebMentionJobTest.php | 17 +- .../Jobs/SyndicateNoteToBlueskyJobTest.php | 5 +- .../Jobs/SyndicateNoteToMastodonJobTest.php | 5 +- tests/Unit/LikesTest.php | 9 +- tests/Unit/MediaTest.php | 5 +- tests/Unit/MicropubClientsTest.php | 3 +- tests/Unit/NotesTest.php | 58 +- tests/Unit/PlacesTest.php | 19 +- tests/Unit/TagsTest.php | 13 +- tests/Unit/WebMentionTest.php | 28 +- 83 files changed, 1324 insertions(+), 2323 deletions(-) diff --git a/.env.example b/.env.example index ccd42db9..43a5f376 100644 --- a/.env.example +++ b/.env.example @@ -12,7 +12,9 @@ APP_FALLBACK_LOCALE=en APP_FAKER_LOCALE=en_US APP_MAINTENANCE_DRIVER=file -APP_MAINTENANCE_STORE=database +# APP_MAINTENANCE_STORE=database + +PHP_CLI_SERVER_WORKERS=4 BCRYPT_ROUNDS=12 @@ -39,7 +41,7 @@ FILESYSTEM_DISK=local QUEUE_CONNECTION=database CACHE_STORE=database -CACHE_PREFIX= +# CACHE_PREFIX= MEMCACHED_HOST=127.0.0.1 @@ -49,6 +51,7 @@ REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=log +MAIL_SCHEME=null MAIL_HOST=127.0.0.1 MAIL_PORT=2525 MAIL_USERNAME=null diff --git a/app/Console/Commands/ParseCachedWebMentions.php b/app/Console/Commands/ParseCachedWebMentions.php index 96d57332..010a086a 100644 --- a/app/Console/Commands/ParseCachedWebMentions.php +++ b/app/Console/Commands/ParseCachedWebMentions.php @@ -37,7 +37,7 @@ class ParseCachedWebMentions extends Command { $htmlFiles = $filesystem->allFiles(storage_path() . '/HTML'); foreach ($htmlFiles as $file) { - if ($file->getExtension() !== 'backup') { //we don’t want to parse `.backup` files + if ($file->getExtension() !== 'backup') { // we don’t want to parse `.backup` files $filepath = $file->getPathname(); $this->info('Loading HTML from: ' . $filepath); $html = $filesystem->get($filepath); diff --git a/app/Exceptions/RemoteContentNotFoundException.php b/app/Exceptions/RemoteContentNotFoundException.php index 751ebaa9..68440d50 100644 --- a/app/Exceptions/RemoteContentNotFoundException.php +++ b/app/Exceptions/RemoteContentNotFoundException.php @@ -6,5 +6,5 @@ use Exception; class RemoteContentNotFoundException extends Exception { - //used when guzzle can’t find the remote content + // used when guzzle can’t find the remote content } diff --git a/app/Http/Controllers/Admin/ArticlesController.php b/app/Http/Controllers/Admin/ArticlesController.php index d1c10c9d..429f64c8 100644 --- a/app/Http/Controllers/Admin/ArticlesController.php +++ b/app/Http/Controllers/Admin/ArticlesController.php @@ -30,7 +30,7 @@ class ArticlesController extends Controller public function store(): RedirectResponse { - //if a `.md` is attached use that for the main content. + // if a `.md` is attached use that for the main content. if (request()->hasFile('article')) { $file = request()->file('article')->openFile(); $content = $file->fread($file->getSize()); diff --git a/app/Http/Controllers/Admin/NotesController.php b/app/Http/Controllers/Admin/NotesController.php index afa75adb..add755b0 100644 --- a/app/Http/Controllers/Admin/NotesController.php +++ b/app/Http/Controllers/Admin/NotesController.php @@ -67,7 +67,7 @@ class NotesController extends Controller */ public function update(int $noteId): RedirectResponse { - //update note data + // update note data $note = Note::findOrFail($noteId); $note->note = request()->input('content'); $note->in_reply_to = request()->input('in-reply-to'); diff --git a/app/Http/Controllers/IndieAuthController.php b/app/Http/Controllers/IndieAuthController.php index e919fa6d..45b488da 100644 --- a/app/Http/Controllers/IndieAuthController.php +++ b/app/Http/Controllers/IndieAuthController.php @@ -26,8 +26,8 @@ class IndieAuthController extends Controller 'authorization_endpoint' => route('indieauth.start'), 'token_endpoint' => route('indieauth.token'), 'code_challenge_methods_supported' => ['S256'], - //'introspection_endpoint' => route('indieauth.introspection'), - //'introspection_endpoint_auth_methods_supported' => ['none'], + // 'introspection_endpoint' => route('indieauth.introspection'), + // 'introspection_endpoint_auth_methods_supported' => ['none'], ]); } diff --git a/app/Http/Controllers/MicropubMediaController.php b/app/Http/Controllers/MicropubMediaController.php index e3ed8b61..a660f11a 100644 --- a/app/Http/Controllers/MicropubMediaController.php +++ b/app/Http/Controllers/MicropubMediaController.php @@ -191,7 +191,7 @@ class MicropubMediaController extends Controller */ private function getFileTypeFromMimeType(string $mimeType): string { - //try known images + // try known images $imageMimeTypes = [ 'image/gif', 'image/jpeg', @@ -203,7 +203,7 @@ class MicropubMediaController extends Controller if (in_array($mimeType, $imageMimeTypes)) { return 'image'; } - //try known video + // try known video $videoMimeTypes = [ 'video/mp4', 'video/mpeg', @@ -214,7 +214,7 @@ class MicropubMediaController extends Controller if (in_array($mimeType, $videoMimeTypes)) { return 'video'; } - //try known audio types + // try known audio types $audioMimeTypes = [ 'audio/midi', 'audio/mpeg', diff --git a/app/Http/Controllers/WebMentionsController.php b/app/Http/Controllers/WebMentionsController.php index 700a7e23..aa75ba22 100644 --- a/app/Http/Controllers/WebMentionsController.php +++ b/app/Http/Controllers/WebMentionsController.php @@ -33,7 +33,7 @@ class WebMentionsController extends Controller */ public function receive(Request $request): Response { - //first we trivially reject requests that lack all required inputs + // first we trivially reject requests that lack all required inputs if (($request->has('target') !== true) || ($request->has('source') !== true)) { return response( 'You need both the target and source parameters', @@ -41,12 +41,12 @@ class WebMentionsController extends Controller ); } - //next check the $target is valid + // next check the $target is valid $path = parse_url($request->input('target'), PHP_URL_PATH); $pathParts = explode('/', $path); if ($pathParts[1] === 'notes') { - //we have a note + // we have a note $noteId = $pathParts[2]; try { $note = Note::findOrFail(resolve(Numbers::class)->b60tonum($noteId)); diff --git a/app/Jobs/DownloadWebMention.php b/app/Jobs/DownloadWebMention.php index d8f97328..3c187dd4 100644 --- a/app/Jobs/DownloadWebMention.php +++ b/app/Jobs/DownloadWebMention.php @@ -35,30 +35,30 @@ class DownloadWebMention implements ShouldQueue public function handle(Client $guzzle): void { $response = $guzzle->request('GET', $this->source); - //4XX and 5XX responses should get Guzzle to throw an exception, - //Laravel should catch and retry these automatically. + // 4XX and 5XX responses should get Guzzle to throw an exception, + // Laravel should catch and retry these automatically. if ($response->getStatusCode() === 200) { $filesystem = new FileSystem; $filename = storage_path('HTML') . '/' . $this->createFilenameFromURL($this->source); - //backup file first + // backup file first $filenameBackup = $filename . '.' . date('Y-m-d') . '.backup'; if ($filesystem->exists($filename)) { $filesystem->copy($filename, $filenameBackup); } - //check if base directory exists + // check if base directory exists if (! $filesystem->exists($filesystem->dirname($filename))) { $filesystem->makeDirectory( $filesystem->dirname($filename), - 0755, //mode - true //recursive + 0755, // mode + true // recursive ); } - //save new HTML + // save new HTML $filesystem->put( $filename, (string) $response->getBody() ); - //remove backup if the same + // remove backup if the same if ($filesystem->exists($filenameBackup)) { if ($filesystem->get($filename) === $filesystem->get($filenameBackup)) { $filesystem->delete($filenameBackup); diff --git a/app/Jobs/ProcessLike.php b/app/Jobs/ProcessLike.php index 37a377a3..3c6028a9 100644 --- a/app/Jobs/ProcessLike.php +++ b/app/Jobs/ProcessLike.php @@ -49,7 +49,7 @@ class ProcessLike implements ShouldQueue $this->like->content = $tweet->html; $this->like->save(); - //POSSE like + // POSSE like try { $client->request( 'POST', diff --git a/app/Jobs/ProcessMedia.php b/app/Jobs/ProcessMedia.php index e57acf3e..b7f36648 100644 --- a/app/Jobs/ProcessMedia.php +++ b/app/Jobs/ProcessMedia.php @@ -32,18 +32,21 @@ class ProcessMedia implements ShouldQueue */ public function handle(ImageManager $manager): void { + // Load file + $file = Storage::disk('local')->get('media/' . $this->filename); + // Open file try { - $image = $manager->read(storage_path('app/media/') . $this->filename); + $image = $manager->read($file); } catch (DecoderException) { // not an image; delete file and end job - unlink(storage_path('app/media/') . $this->filename); + Storage::disk('local')->delete('media/' . $this->filename); return; } // Save the file publicly - Storage::disk('local')->copy('media/' . $this->filename, 'public/media/' . $this->filename); + Storage::disk('public')->put('media/' . $this->filename, $file); // Create smaller versions if necessary if ($image->width() > 1000) { @@ -54,13 +57,13 @@ class ProcessMedia implements ShouldQueue $basename = trim(implode('.', $filenameParts), '.'); $medium = $image->resize(width: 1000); - Storage::disk('local')->put('public/media/' . $basename . '-medium.' . $extension, (string) $medium->encode()); + Storage::disk('public')->put('media/' . $basename . '-medium.' . $extension, (string) $medium->encode()); $small = $image->resize(width: 500); - Storage::disk('local')->put('public/media/' . $basename . '-small.' . $extension, (string) $small->encode()); + Storage::disk('public')->put('media/' . $basename . '-small.' . $extension, (string) $small->encode()); } // Now we can delete the locally saved image - unlink(storage_path('app/media/') . $this->filename); + Storage::disk('local')->delete('media/' . $this->filename); } } diff --git a/app/Jobs/SaveProfileImage.php b/app/Jobs/SaveProfileImage.php index d1b09776..08152d5b 100644 --- a/app/Jobs/SaveProfileImage.php +++ b/app/Jobs/SaveProfileImage.php @@ -49,7 +49,7 @@ class SaveProfileImage implements ShouldQueue $home = array_shift($home); } - //dont save pbs.twimg.com links + // dont save pbs.twimg.com links if ( $photo && parse_url($photo, PHP_URL_HOST) !== 'pbs.twimg.com' diff --git a/app/Jobs/SendWebMentions.php b/app/Jobs/SendWebMentions.php index 4252f8e0..51e5f162 100644 --- a/app/Jobs/SendWebMentions.php +++ b/app/Jobs/SendWebMentions.php @@ -72,7 +72,7 @@ class SendWebMentions implements ShouldQueue $guzzle = resolve(Client::class); $response = $guzzle->get($url); - //check HTTP Headers for webmention endpoint + // check HTTP Headers for webmention endpoint $links = Header::parse($response->getHeader('Link')); foreach ($links as $link) { if (array_key_exists('rel', $link) && mb_stristr($link['rel'], 'webmention')) { @@ -80,7 +80,7 @@ class SendWebMentions implements ShouldQueue } } - //failed to find a header so parse HTML + // failed to find a header so parse HTML $html = (string) $response->getBody(); $mf2 = new \Mf2\Parser($html, $url); diff --git a/app/Models/Note.php b/app/Models/Note.php index 9c58bb3e..62b9fcea 100644 --- a/app/Models/Note.php +++ b/app/Models/Note.php @@ -111,7 +111,7 @@ class Note extends Model { if ($value !== null) { $normalized = normalizer_normalize($value, Normalizer::FORM_C); - if ($normalized === '') { //we don’t want to save empty strings to the db + if ($normalized === '') { // we don’t want to save empty strings to the db $normalized = null; } $this->attributes['note'] = $normalized; diff --git a/app/Models/Place.php b/app/Models/Place.php index 2a36aa32..62c826ad 100644 --- a/app/Models/Place.php +++ b/app/Models/Place.php @@ -59,7 +59,7 @@ class Place extends Model * sin(radians(places.latitude))))"; return $query - ->select() //pick the columns you want here. + ->select() // pick the columns you want here. ->selectRaw("{$haversine} AS distance") ->whereRaw("{$haversine} < ?", [$distance]); } diff --git a/app/Models/WebMention.php b/app/Models/WebMention.php index a9930851..bd717aa6 100644 --- a/app/Models/WebMention.php +++ b/app/Models/WebMention.php @@ -123,7 +123,7 @@ class WebMention extends Model $host = parse_url($url, PHP_URL_HOST); if ($host === 'pbs.twimg.com') { - //make sure we use HTTPS, we know twitter supports it + // make sure we use HTTPS, we know twitter supports it return str_replace('http://', 'https://', $url); } @@ -135,7 +135,7 @@ class WebMention extends Model $codebird = resolve(Codebird::class); $info = $codebird->users_show(['screen_name' => $username]); $profile_image = $info->profile_image_url_https; - Cache::put($url, $profile_image, 10080); //1 week + Cache::put($url, $profile_image, 10080); // 1 week return $profile_image; } diff --git a/app/Services/BookmarkService.php b/app/Services/BookmarkService.php index 1a17dd08..32ec7260 100644 --- a/app/Services/BookmarkService.php +++ b/app/Services/BookmarkService.php @@ -21,7 +21,7 @@ class BookmarkService extends Service public function create(array $request, ?string $client = null): Bookmark { if (Arr::get($request, 'properties.bookmark-of.0')) { - //micropub request + // micropub request $url = normalize_url(Arr::get($request, 'properties.bookmark-of.0')); $name = Arr::get($request, 'properties.name.0'); $content = Arr::get($request, 'properties.content.0'); @@ -61,7 +61,7 @@ class BookmarkService extends Service try { $response = $client->request('GET', 'https://web.archive.org/save/' . $url); } catch (ClientException $e) { - //throw an exception to be caught + // throw an exception to be caught throw new InternetArchiveException; } if ($response->hasHeader('Content-Location')) { @@ -70,7 +70,7 @@ class BookmarkService extends Service } } - //throw an exception to be caught + // throw an exception to be caught throw new InternetArchiveException; } } diff --git a/app/Services/LikeService.php b/app/Services/LikeService.php index efd2216b..dd08e25b 100644 --- a/app/Services/LikeService.php +++ b/app/Services/LikeService.php @@ -16,7 +16,7 @@ class LikeService extends Service public function create(array $request, ?string $client = null): Like { if (Arr::get($request, 'properties.like-of.0')) { - //micropub request + // micropub request $url = normalize_url(Arr::get($request, 'properties.like-of.0')); } if (Arr::get($request, 'like-of')) { diff --git a/app/Services/Micropub/UpdateService.php b/app/Services/Micropub/UpdateService.php index 144984c2..f806361c 100644 --- a/app/Services/Micropub/UpdateService.php +++ b/app/Services/Micropub/UpdateService.php @@ -20,7 +20,7 @@ class UpdateService { $urlPath = parse_url(Arr::get($request, 'url'), PHP_URL_PATH); - //is it a note we are updating? + // is it a note we are updating? if (mb_substr($urlPath, 1, 5) !== 'notes') { return response()->json([ 'error' => 'invalid', @@ -37,7 +37,7 @@ class UpdateService ], 404); } - //got the note, are we dealing with a “replace” request? + // got the note, are we dealing with a “replace” request? if (Arr::get($request, 'replace')) { foreach (Arr::get($request, 'replace') as $property => $value) { if ($property === 'content') { @@ -64,7 +64,7 @@ class UpdateService ]); } - //how about “add” + // how about “add” if (Arr::get($request, 'add')) { foreach (Arr::get($request, 'add') as $property => $value) { if ($property === 'syndication') { diff --git a/app/Services/PlaceService.php b/app/Services/PlaceService.php index a63caa98..cd9b4b9f 100644 --- a/app/Services/PlaceService.php +++ b/app/Services/PlaceService.php @@ -14,8 +14,8 @@ class PlaceService */ public function createPlace(array $data): Place { - //obviously a place needs a lat/lng, but this could be sent in a geo-url - //if no geo array key, we assume the array already has lat/lng values + // obviously a place needs a lat/lng, but this could be sent in a geo-url + // if no geo array key, we assume the array already has lat/lng values if (array_key_exists('geo', $data) && $data['geo'] !== null) { preg_match_all( '/([0-9\.\-]+)/', @@ -40,7 +40,7 @@ class PlaceService */ public function createPlaceFromCheckin(array $checkin): Place { - //check if the place exists if from swarm + // check if the place exists if from swarm if (Arr::has($checkin, 'properties.url')) { $place = Place::whereExternalURL(Arr::get($checkin, 'properties.url.0'))->get(); if (count($place) === 1) { diff --git a/composer.json b/composer.json index 17312637..e4ea6123 100644 --- a/composer.json +++ b/composer.json @@ -1,4 +1,5 @@ { + "$schema": "https://getcomposer.org/schema.json", "name": "jonnybarnes/jonnybarnes.uk", "type": "project", "description": "The code for jonnybarnes.uk, based on Laravel 11", @@ -11,14 +12,14 @@ "ext-json": "*", "ext-pgsql": "*", "ext-sodium": "*", - "cviebrock/eloquent-sluggable": "^11.0", + "cviebrock/eloquent-sluggable": "^12.0", "guzzlehttp/guzzle": "^7.2", "indieauth/client": "^1.1", "intervention/image": "^3", "jonnybarnes/indieweb": "~0.2", "jonnybarnes/webmentions-parser": "~0.5", "jublonet/codebird-php": "4.0.0-beta.1", - "laravel/framework": "^11.0", + "laravel/framework": "^12.0", "laravel/horizon": "^5.0", "laravel/sanctum": "^4.0", "laravel/scout": "^10.1", @@ -46,11 +47,9 @@ "mockery/mockery": "^1.4.4", "nunomaduro/collision": "^8.1", "openai-php/client": "^0.10.1", - "phpunit/php-code-coverage": "^10.0", - "phpunit/phpunit": "^10.1", - "psalm/plugin-laravel": "^2.8", - "spatie/laravel-ray": "^1.12", - "vimeo/psalm": "^5.0" + "phpunit/php-code-coverage": "^11.0", + "phpunit/phpunit": "^11.0", + "spatie/laravel-ray": "^1.12" }, "autoload": { "psr-4": { @@ -79,7 +78,13 @@ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ - "@php artisan key:generate --ansi" + "@php artisan key:generate --ansi", + "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"", + "@php artisan migrate --graceful --ansi" + ], + "dev": [ + "Composer\\Config::disableProcessTimeout", + "npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite" ] }, "extra": { diff --git a/composer.lock b/composer.lock index ca4775e8..a7521ac8 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c0b2ab80898a42868cc33845917f45d4", + "content-hash": "cd963bfd9cfb41beb4151e73ae98dc98", "packages": [ { "name": "aws/aws-crt-php", @@ -62,16 +62,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.338.2", + "version": "3.342.18", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "7a52364e053d74363f9976dfb4473bace5b7790e" + "reference": "e6c81bf323b082f8fe2b76d8d41e2614806d5892" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/7a52364e053d74363f9976dfb4473bace5b7790e", - "reference": "7a52364e053d74363f9976dfb4473bace5b7790e", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e6c81bf323b082f8fe2b76d8d41e2614806d5892", + "reference": "e6c81bf323b082f8fe2b76d8d41e2614806d5892", "shasum": "" }, "require": { @@ -97,7 +97,6 @@ "ext-openssl": "*", "ext-pcntl": "*", "ext-sockets": "*", - "paragonie/random_compat": ">= 2", "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", "psr/cache": "^2.0 || ^3.0", "psr/simple-cache": "^2.0 || ^3.0", @@ -154,22 +153,22 @@ "support": { "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.338.2" + "source": "https://github.com/aws/aws-sdk-php/tree/3.342.18" }, - "time": "2025-01-24T19:09:22+00:00" + "time": "2025-04-01T18:15:02+00:00" }, { "name": "brick/math", - "version": "0.12.1", + "version": "0.12.3", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1" + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1", + "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", "shasum": "" }, "require": { @@ -178,7 +177,7 @@ "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^10.1", - "vimeo/psalm": "5.16.0" + "vimeo/psalm": "6.8.8" }, "type": "library", "autoload": { @@ -208,7 +207,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.1" + "source": "https://github.com/brick/math/tree/0.12.3" }, "funding": [ { @@ -216,7 +215,7 @@ "type": "github" } ], - "time": "2023-11-29T23:19:16+00:00" + "time": "2025-02-28T13:11:00+00:00" }, { "name": "carbonphp/carbon-doctrine-types", @@ -514,29 +513,32 @@ }, { "name": "cviebrock/eloquent-sluggable", - "version": "11.0.1", + "version": "12.0.0", "source": { "type": "git", "url": "https://github.com/cviebrock/eloquent-sluggable.git", - "reference": "a4281cf0284a21efc1031a065b112ddd6c826eea" + "reference": "50d0c8a508cb5d6193ff6668518930ba8ec8ef24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cviebrock/eloquent-sluggable/zipball/a4281cf0284a21efc1031a065b112ddd6c826eea", - "reference": "a4281cf0284a21efc1031a065b112ddd6c826eea", + "url": "https://api.github.com/repos/cviebrock/eloquent-sluggable/zipball/50d0c8a508cb5d6193ff6668518930ba8ec8ef24", + "reference": "50d0c8a508cb5d6193ff6668518930ba8ec8ef24", "shasum": "" }, "require": { "cocur/slugify": "^4.3", - "illuminate/config": "^11.0", - "illuminate/database": "^11.0", - "illuminate/support": "^11.0", + "illuminate/config": "^12.0", + "illuminate/database": "^12.0", + "illuminate/support": "^12.0", "php": "^8.2" }, "require-dev": { + "friendsofphp/php-cs-fixer": "^3.65", + "larastan/larastan": "^3.0", "mockery/mockery": "^1.4.4", - "orchestra/testbench": "^9.0", - "pestphp/pest": "^2.28" + "orchestra/testbench": "^10.0", + "pestphp/pest": "^3.7", + "phpstan/phpstan": "^2.0" }, "type": "library", "extra": { @@ -544,9 +546,6 @@ "providers": [ "Cviebrock\\EloquentSluggable\\ServiceProvider" ] - }, - "branch-alias": { - "dev-master": "11.0.x-dev" } }, "autoload": { @@ -570,13 +569,12 @@ "eloquent", "eloquent-sluggable", "laravel", - "lumen", "slug", "sluggable" ], "support": { "issues": "https://github.com/cviebrock/eloquent-sluggable/issues", - "source": "https://github.com/cviebrock/eloquent-sluggable/tree/11.0.1" + "source": "https://github.com/cviebrock/eloquent-sluggable/tree/12.0.0" }, "funding": [ { @@ -584,7 +582,7 @@ "type": "github" } ], - "time": "2024-11-29T01:32:17+00:00" + "time": "2025-02-26T22:53:32+00:00" }, { "name": "dflydev/dot-access-data", @@ -941,16 +939,16 @@ }, { "name": "egulias/email-validator", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "b115554301161fa21467629f1e1391c1936de517" + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517", - "reference": "b115554301161fa21467629f1e1391c1936de517", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", "shasum": "" }, "require": { @@ -996,7 +994,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.3" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" }, "funding": [ { @@ -1004,7 +1002,7 @@ "type": "github" } ], - "time": "2024-12-27T00:36:43+00:00" + "time": "2025-03-06T22:45:56+00:00" }, { "name": "fruitcake/php-cors", @@ -1141,16 +1139,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.9.2", + "version": "7.9.3", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b" + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", "shasum": "" }, "require": { @@ -1247,7 +1245,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.2" + "source": "https://github.com/guzzle/guzzle/tree/7.9.3" }, "funding": [ { @@ -1263,20 +1261,20 @@ "type": "tidelift" } ], - "time": "2024-07-24T11:22:20+00:00" + "time": "2025-03-27T13:37:11+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.4", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", "shasum": "" }, "require": { @@ -1330,7 +1328,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.4" + "source": "https://github.com/guzzle/promises/tree/2.2.0" }, "funding": [ { @@ -1346,20 +1344,20 @@ "type": "tidelift" } ], - "time": "2024-10-17T10:06:22+00:00" + "time": "2025-03-27T13:27:01+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.7.0", + "version": "2.7.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", "shasum": "" }, "require": { @@ -1446,7 +1444,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.0" + "source": "https://github.com/guzzle/psr7/tree/2.7.1" }, "funding": [ { @@ -1462,20 +1460,20 @@ "type": "tidelift" } ], - "time": "2024-07-18T11:15:46+00:00" + "time": "2025-03-27T12:30:47+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.3", + "version": "v1.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2", + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2", "shasum": "" }, "require": { @@ -1532,7 +1530,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.4" }, "funding": [ { @@ -1548,7 +1546,7 @@ "type": "tidelift" } ], - "time": "2023-12-03T19:50:20+00:00" + "time": "2025-02-03T10:55:03+00:00" }, { "name": "indieauth/client", @@ -1703,16 +1701,16 @@ }, { "name": "intervention/gif", - "version": "4.2.1", + "version": "4.2.2", "source": { "type": "git", "url": "https://github.com/Intervention/gif.git", - "reference": "6addac2c68b4bc0e37d0d3ccedda57eb84729c49" + "reference": "5999eac6a39aa760fb803bc809e8909ee67b451a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/gif/zipball/6addac2c68b4bc0e37d0d3ccedda57eb84729c49", - "reference": "6addac2c68b4bc0e37d0d3ccedda57eb84729c49", + "url": "https://api.github.com/repos/Intervention/gif/zipball/5999eac6a39aa760fb803bc809e8909ee67b451a", + "reference": "5999eac6a39aa760fb803bc809e8909ee67b451a", "shasum": "" }, "require": { @@ -1720,7 +1718,7 @@ }, "require-dev": { "phpstan/phpstan": "^2.1", - "phpunit/phpunit": "^10.0 || ^11.0", + "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0", "slevomat/coding-standard": "~8.0", "squizlabs/php_codesniffer": "^3.8" }, @@ -1751,7 +1749,7 @@ ], "support": { "issues": "https://github.com/Intervention/gif/issues", - "source": "https://github.com/Intervention/gif/tree/4.2.1" + "source": "https://github.com/Intervention/gif/tree/4.2.2" }, "funding": [ { @@ -1767,20 +1765,20 @@ "type": "ko_fi" } ], - "time": "2025-01-05T10:52:39+00:00" + "time": "2025-03-29T07:46:21+00:00" }, { "name": "intervention/image", - "version": "3.11.0", + "version": "3.11.2", "source": { "type": "git", "url": "https://github.com/Intervention/image.git", - "reference": "6b9ce4fc4485d30117e13935b25bc55a8b894a79" + "reference": "ebbb711871fb261c064cf4c422f5f3c124fe1842" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/6b9ce4fc4485d30117e13935b25bc55a8b894a79", - "reference": "6b9ce4fc4485d30117e13935b25bc55a8b894a79", + "url": "https://api.github.com/repos/Intervention/image/zipball/ebbb711871fb261c064cf4c422f5f3c124fe1842", + "reference": "ebbb711871fb261c064cf4c422f5f3c124fe1842", "shasum": "" }, "require": { @@ -1791,7 +1789,7 @@ "require-dev": { "mockery/mockery": "^1.6", "phpstan/phpstan": "^2.1", - "phpunit/phpunit": "^10.0 || ^11.0", + "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0", "slevomat/coding-standard": "~8.0", "squizlabs/php_codesniffer": "^3.8" }, @@ -1827,7 +1825,7 @@ ], "support": { "issues": "https://github.com/Intervention/image/issues", - "source": "https://github.com/Intervention/image/tree/3.11.0" + "source": "https://github.com/Intervention/image/tree/3.11.2" }, "funding": [ { @@ -1843,7 +1841,7 @@ "type": "ko_fi" } ], - "time": "2025-01-18T15:42:14+00:00" + "time": "2025-02-27T13:08:55+00:00" }, { "name": "jonnybarnes/indieweb", @@ -2012,20 +2010,20 @@ }, { "name": "laravel/framework", - "version": "v11.40.0", + "version": "v12.5.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "599a28196d284fee158cc10086fd56ac625ad7a3" + "reference": "0ab4791b2c5f405f8728e4481265599803564c02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/599a28196d284fee158cc10086fd56ac625ad7a3", - "reference": "599a28196d284fee158cc10086fd56ac625ad7a3", + "url": "https://api.github.com/repos/laravel/framework/zipball/0ab4791b2c5f405f8728e4481265599803564c02", + "reference": "0ab4791b2c5f405f8728e4481265599803564c02", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "brick/math": "^0.11|^0.12", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.4", @@ -2040,32 +2038,32 @@ "fruitcake/php-cors": "^1.3", "guzzlehttp/guzzle": "^7.8.2", "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", + "laravel/prompts": "^0.3.0", "laravel/serializable-closure": "^1.3|^2.0", "league/commonmark": "^2.6", "league/flysystem": "^3.25.1", "league/flysystem-local": "^3.25.1", "league/uri": "^7.5.1", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.6|^3.8.4", + "nesbot/carbon": "^3.8.4", "nunomaduro/termwind": "^2.0", "php": "^8.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^7.0.3", - "symfony/error-handler": "^7.0.3", - "symfony/finder": "^7.0.3", + "symfony/console": "^7.2.0", + "symfony/error-handler": "^7.2.0", + "symfony/finder": "^7.2.0", "symfony/http-foundation": "^7.2.0", - "symfony/http-kernel": "^7.0.3", - "symfony/mailer": "^7.0.3", - "symfony/mime": "^7.0.3", + "symfony/http-kernel": "^7.2.0", + "symfony/mailer": "^7.2.0", + "symfony/mime": "^7.2.0", "symfony/polyfill-php83": "^1.31", - "symfony/process": "^7.0.3", - "symfony/routing": "^7.0.3", - "symfony/uid": "^7.0.3", - "symfony/var-dumper": "^7.0.3", + "symfony/process": "^7.2.0", + "symfony/routing": "^7.2.0", + "symfony/uid": "^7.2.0", + "symfony/var-dumper": "^7.2.0", "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.6.1", "voku/portable-ascii": "^2.0.2" @@ -2129,17 +2127,17 @@ "league/flysystem-read-only": "^3.25.1", "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", - "orchestra/testbench-core": "^9.6", + "orchestra/testbench-core": "^10.0.0", "pda/pheanstalk": "^5.0.6", "php-http/discovery": "^1.15", - "phpstan/phpstan": "^1.11.5", - "phpunit/phpunit": "^10.5.35|^11.3.6", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1", "predis/predis": "^2.3", "resend/resend-php": "^0.10.0", - "symfony/cache": "^7.0.3", - "symfony/http-client": "^7.0.3", - "symfony/psr-http-message-bridge": "^7.0.3", - "symfony/translation": "^7.0.3" + "symfony/cache": "^7.2.0", + "symfony/http-client": "^7.2.0", + "symfony/psr-http-message-bridge": "^7.2.0", + "symfony/translation": "^7.2.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", @@ -2165,22 +2163,22 @@ "mockery/mockery": "Required to use mocking (^1.6).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", - "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).", "predis/predis": "Required to use the predis connector (^2.3).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." + "symfony/cache": "Required to PSR-6 cache bridge (^7.2).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.2).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.2)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "11.x-dev" + "dev-master": "12.x-dev" } }, "autoload": { @@ -2223,29 +2221,29 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-01-24T16:17:42+00:00" + "time": "2025-04-01T14:40:42+00:00" }, { "name": "laravel/horizon", - "version": "v5.30.2", + "version": "v5.31.1", "source": { "type": "git", "url": "https://github.com/laravel/horizon.git", - "reference": "baef526f036717b0090754cbd9c9b67f879739fd" + "reference": "bc98b63313b2e0a3d0c8e84e1b691388ef1bf653" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/baef526f036717b0090754cbd9c9b67f879739fd", - "reference": "baef526f036717b0090754cbd9c9b67f879739fd", + "url": "https://api.github.com/repos/laravel/horizon/zipball/bc98b63313b2e0a3d0c8e84e1b691388ef1bf653", + "reference": "bc98b63313b2e0a3d0c8e84e1b691388ef1bf653", "shasum": "" }, "require": { "ext-json": "*", "ext-pcntl": "*", "ext-posix": "*", - "illuminate/contracts": "^9.21|^10.0|^11.0", - "illuminate/queue": "^9.21|^10.0|^11.0", - "illuminate/support": "^9.21|^10.0|^11.0", + "illuminate/contracts": "^9.21|^10.0|^11.0|^12.0", + "illuminate/queue": "^9.21|^10.0|^11.0|^12.0", + "illuminate/support": "^9.21|^10.0|^11.0|^12.0", "nesbot/carbon": "^2.17|^3.0", "php": "^8.0", "ramsey/uuid": "^4.0", @@ -2256,9 +2254,9 @@ }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^7.0|^8.0|^9.0", + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.0|^10.4", + "phpunit/phpunit": "^9.0|^10.4|^11.5", "predis/predis": "^1.1|^2.0" }, "suggest": { @@ -2301,22 +2299,22 @@ ], "support": { "issues": "https://github.com/laravel/horizon/issues", - "source": "https://github.com/laravel/horizon/tree/v5.30.2" + "source": "https://github.com/laravel/horizon/tree/v5.31.1" }, - "time": "2025-01-13T16:51:22+00:00" + "time": "2025-03-16T23:48:25+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.3", + "version": "v0.3.5", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea" + "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/749395fcd5f8f7530fe1f00dfa84eb22c83d94ea", - "reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea", + "url": "https://api.github.com/repos/laravel/prompts/zipball/57b8f7efe40333cdb925700891c7d7465325d3b1", + "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1", "shasum": "" }, "require": { @@ -2330,7 +2328,7 @@ "laravel/framework": ">=10.17.0 <10.25.0" }, "require-dev": { - "illuminate/collections": "^10.0|^11.0", + "illuminate/collections": "^10.0|^11.0|^12.0", "mockery/mockery": "^1.5", "pestphp/pest": "^2.3|^3.4", "phpstan/phpstan": "^1.11", @@ -2360,38 +2358,38 @@ "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.3.3" + "source": "https://github.com/laravel/prompts/tree/v0.3.5" }, - "time": "2024-12-30T15:53:31+00:00" + "time": "2025-02-11T13:34:40+00:00" }, { "name": "laravel/sanctum", - "version": "v4.0.7", + "version": "v4.0.8", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "698064236a46df016e64a7eb059b1414e0b281df" + "reference": "ec1dd9ddb2ab370f79dfe724a101856e0963f43c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/698064236a46df016e64a7eb059b1414e0b281df", - "reference": "698064236a46df016e64a7eb059b1414e0b281df", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/ec1dd9ddb2ab370f79dfe724a101856e0963f43c", + "reference": "ec1dd9ddb2ab370f79dfe724a101856e0963f43c", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/console": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/database": "^11.0", - "illuminate/support": "^11.0", + "illuminate/console": "^11.0|^12.0", + "illuminate/contracts": "^11.0|^12.0", + "illuminate/database": "^11.0|^12.0", + "illuminate/support": "^11.0|^12.0", "php": "^8.2", "symfony/console": "^7.0" }, "require-dev": { "mockery/mockery": "^1.6", - "orchestra/testbench": "^9.0", + "orchestra/testbench": "^9.0|^10.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -2426,30 +2424,30 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2024-12-11T16:40:21+00:00" + "time": "2025-01-26T19:34:36+00:00" }, { "name": "laravel/scout", - "version": "v10.12.1", + "version": "v10.14.1", "source": { "type": "git", "url": "https://github.com/laravel/scout.git", - "reference": "f40f14b7a63be753a425eae4f56cd71d08478242" + "reference": "6ae3ec83ceacb554f395df9fe15318a14b79bb39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/scout/zipball/f40f14b7a63be753a425eae4f56cd71d08478242", - "reference": "f40f14b7a63be753a425eae4f56cd71d08478242", + "url": "https://api.github.com/repos/laravel/scout/zipball/6ae3ec83ceacb554f395df9fe15318a14b79bb39", + "reference": "6ae3ec83ceacb554f395df9fe15318a14b79bb39", "shasum": "" }, "require": { - "illuminate/bus": "^9.0|^10.0|^11.0", - "illuminate/contracts": "^9.0|^10.0|^11.0", - "illuminate/database": "^9.0|^10.0|^11.0", - "illuminate/http": "^9.0|^10.0|^11.0", - "illuminate/pagination": "^9.0|^10.0|^11.0", - "illuminate/queue": "^9.0|^10.0|^11.0", - "illuminate/support": "^9.0|^10.0|^11.0", + "illuminate/bus": "^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^9.0|^10.0|^11.0|^12.0", + "illuminate/database": "^9.0|^10.0|^11.0|^12.0", + "illuminate/http": "^9.0|^10.0|^11.0|^12.0", + "illuminate/pagination": "^9.0|^10.0|^11.0|^12.0", + "illuminate/queue": "^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^9.0|^10.0|^11.0|^12.0", "php": "^8.0", "symfony/console": "^6.0|^7.0" }, @@ -2460,7 +2458,7 @@ "algolia/algoliasearch-client-php": "^3.2|^4.0", "meilisearch/meilisearch-php": "^1.0", "mockery/mockery": "^1.0", - "orchestra/testbench": "^7.31|^8.11|^9.0", + "orchestra/testbench": "^7.31|^8.11|^9.0|^10.0", "php-http/guzzle7-adapter": "^1.0", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.3|^10.4", @@ -2507,36 +2505,36 @@ "issues": "https://github.com/laravel/scout/issues", "source": "https://github.com/laravel/scout" }, - "time": "2025-01-21T15:07:47+00:00" + "time": "2025-04-01T14:58:03+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.7", + "version": "v2.0.4", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "4f48ade902b94323ca3be7646db16209ec76be3d" + "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/4f48ade902b94323ca3be7646db16209ec76be3d", - "reference": "4f48ade902b94323ca3be7646db16209ec76be3d", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841", + "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": "^8.1" }, "require-dev": { - "illuminate/support": "^8.0|^9.0|^10.0|^11.0", - "nesbot/carbon": "^2.61|^3.0", - "pestphp/pest": "^1.21.3", - "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" + "illuminate/support": "^10.0|^11.0|^12.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36|^3.0", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -2568,26 +2566,26 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-11-14T18:34:49+00:00" + "time": "2025-03-19T13:51:03+00:00" }, { "name": "laravel/tinker", - "version": "v2.10.0", + "version": "v2.10.1", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5" + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/ba4d51eb56de7711b3a37d63aa0643e99a339ae5", - "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^7.2.5|^8.0", "psy/psysh": "^0.11.1|^0.12.0", "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" @@ -2595,10 +2593,10 @@ "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.8|^9.3.3" + "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." }, "type": "library", "extra": { @@ -2632,22 +2630,22 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.10.0" + "source": "https://github.com/laravel/tinker/tree/v2.10.1" }, - "time": "2024-09-23T13:32:56+00:00" + "time": "2025-01-27T14:24:01+00:00" }, { "name": "lcobucci/jwt", - "version": "5.4.2", + "version": "5.5.0", "source": { "type": "git", "url": "https://github.com/lcobucci/jwt.git", - "reference": "ea1ce71cbf9741e445a5914e2f67cdbb484ff712" + "reference": "a835af59b030d3f2967725697cf88300f579088e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/ea1ce71cbf9741e445a5914e2f67cdbb484ff712", - "reference": "ea1ce71cbf9741e445a5914e2f67cdbb484ff712", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a835af59b030d3f2967725697cf88300f579088e", + "reference": "a835af59b030d3f2967725697cf88300f579088e", "shasum": "" }, "require": { @@ -2695,7 +2693,7 @@ ], "support": { "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/5.4.2" + "source": "https://github.com/lcobucci/jwt/tree/5.5.0" }, "funding": [ { @@ -2707,7 +2705,7 @@ "type": "patreon" } ], - "time": "2024-11-07T12:54:35+00:00" + "time": "2025-01-26T21:29:45+00:00" }, { "name": "league/commonmark", @@ -3446,16 +3444,16 @@ }, { "name": "monolog/monolog", - "version": "3.8.1", + "version": "3.9.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", "shasum": "" }, "require": { @@ -3533,7 +3531,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.8.1" + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" }, "funding": [ { @@ -3545,7 +3543,7 @@ "type": "tidelift" } ], - "time": "2024-12-05T17:15:07+00:00" + "time": "2025-03-24T10:02:05+00:00" }, { "name": "mtdowling/jmespath.php", @@ -3615,16 +3613,16 @@ }, { "name": "nesbot/carbon", - "version": "3.8.4", + "version": "3.8.6", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "129700ed449b1f02d70272d2ac802357c8c30c58" + "reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/129700ed449b1f02d70272d2ac802357c8c30c58", - "reference": "129700ed449b1f02d70272d2ac802357c8c30c58", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ff2f20cf83bd4d503720632ce8a426dc747bf7fd", + "reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd", "shasum": "" }, "require": { @@ -3700,8 +3698,8 @@ ], "support": { "docs": "https://carbon.nesbot.com/docs", - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" + "issues": "https://github.com/CarbonPHP/carbon/issues", + "source": "https://github.com/CarbonPHP/carbon" }, "funding": [ { @@ -3717,7 +3715,7 @@ "type": "tidelift" } ], - "time": "2024-12-27T09:25:35+00:00" + "time": "2025-02-20T17:33:38+00:00" }, { "name": "nette/schema", @@ -3783,16 +3781,16 @@ }, { "name": "nette/utils", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" + "reference": "ce708655043c7050eb050df361c5e313cf708309" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "url": "https://api.github.com/repos/nette/utils/zipball/ce708655043c7050eb050df361c5e313cf708309", + "reference": "ce708655043c7050eb050df361c5e313cf708309", "shasum": "" }, "require": { @@ -3863,31 +3861,33 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.5" + "source": "https://github.com/nette/utils/tree/v4.0.6" }, - "time": "2024-08-07T15:39:19+00:00" + "time": "2025-03-30T21:06:30+00:00" }, { "name": "nikic/php-parser", - "version": "v4.19.4", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2", - "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.1" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -3895,7 +3895,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -3919,9 +3919,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-09-29T15:01:53+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "nunomaduro/termwind", @@ -4371,16 +4371,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299" + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/c00d78fb6b29658347f9d37ebe104bffadf36299", - "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", "shasum": "" }, "require": { @@ -4412,9 +4412,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" }, - "time": "2024-10-13T11:29:49+00:00" + "time": "2025-02-19T13:28:12+00:00" }, { "name": "psr/clock", @@ -4830,16 +4830,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.7", + "version": "v0.12.8", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c" + "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", - "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/85057ceedee50c49d4f6ecaff73ee96adb3b3625", + "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625", "shasum": "" }, "require": { @@ -4903,9 +4903,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.7" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.8" }, - "time": "2024-12-10T01:58:33+00:00" + "time": "2025-03-16T03:05:19+00:00" }, { "name": "ralouphie/getallheaders", @@ -4953,16 +4953,16 @@ }, { "name": "ramsey/collection", - "version": "2.0.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", "shasum": "" }, "require": { @@ -4970,25 +4970,22 @@ }, "require-dev": { "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.28.3", - "fakerphp/faker": "^1.21", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^1.0", - "mockery/mockery": "^1.5", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpcsstandards/phpcsutils": "^1.0.0-rc1", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18.4", - "ramsey/coding-standard": "^2.0.3", - "ramsey/conventional-commits": "^1.3", - "vimeo/psalm": "^5.4" + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" }, "type": "library", "extra": { @@ -5026,19 +5023,9 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.0.0" + "source": "https://github.com/ramsey/collection/tree/2.1.1" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2022-12-31T21:50:55+00:00" + "time": "2025-03-22T05:38:12+00:00" }, { "name": "ramsey/uuid", @@ -5329,30 +5316,30 @@ }, { "name": "spatie/error-solutions", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/spatie/error-solutions.git", - "reference": "d239a65235a1eb128dfa0a4e4c4ef032ea11b541" + "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/error-solutions/zipball/d239a65235a1eb128dfa0a4e4c4ef032ea11b541", - "reference": "d239a65235a1eb128dfa0a4e4c4ef032ea11b541", + "url": "https://api.github.com/repos/spatie/error-solutions/zipball/e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", + "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", "shasum": "" }, "require": { "php": "^8.0" }, "require-dev": { - "illuminate/broadcasting": "^10.0|^11.0", - "illuminate/cache": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", - "livewire/livewire": "^2.11|^3.3.5", + "illuminate/broadcasting": "^10.0|^11.0|^12.0", + "illuminate/cache": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0", + "livewire/livewire": "^2.11|^3.5.20", "openai-php/client": "^0.10.1", - "orchestra/testbench": "^7.0|8.22.3|^9.0", - "pestphp/pest": "^2.20", - "phpstan/phpstan": "^1.11", + "orchestra/testbench": "8.22.3|^9.0|^10.0", + "pestphp/pest": "^2.20|^3.0", + "phpstan/phpstan": "^2.1", "psr/simple-cache": "^3.0", "psr/simple-cache-implementation": "^3.0", "spatie/ray": "^1.28", @@ -5391,7 +5378,7 @@ ], "support": { "issues": "https://github.com/spatie/error-solutions/issues", - "source": "https://github.com/spatie/error-solutions/tree/1.1.2" + "source": "https://github.com/spatie/error-solutions/tree/1.1.3" }, "funding": [ { @@ -5399,24 +5386,24 @@ "type": "github" } ], - "time": "2024-12-11T09:51:56+00:00" + "time": "2025-02-14T12:29:50+00:00" }, { "name": "spatie/flare-client-php", - "version": "1.10.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272" + "reference": "bf1716eb98bd689451b071548ae9e70738dce62f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", - "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/bf1716eb98bd689451b071548ae9e70738dce62f", + "reference": "bf1716eb98bd689451b071548ae9e70738dce62f", "shasum": "" }, "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^8.0", "spatie/backtrace": "^1.6.1", "symfony/http-foundation": "^5.2|^6.0|^7.0", @@ -5460,7 +5447,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.10.0" + "source": "https://github.com/spatie/flare-client-php/tree/1.10.1" }, "funding": [ { @@ -5468,20 +5455,20 @@ "type": "github" } ], - "time": "2024-12-02T14:30:06+00:00" + "time": "2025-02-14T13:42:06+00:00" }, { "name": "spatie/ignition", - "version": "1.15.0", + "version": "1.15.1", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2" + "reference": "31f314153020aee5af3537e507fef892ffbf8c85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/e3a68e137371e1eb9edc7f78ffa733f3b98991d2", - "reference": "e3a68e137371e1eb9edc7f78ffa733f3b98991d2", + "url": "https://api.github.com/repos/spatie/ignition/zipball/31f314153020aee5af3537e507fef892ffbf8c85", + "reference": "31f314153020aee5af3537e507fef892ffbf8c85", "shasum": "" }, "require": { @@ -5494,7 +5481,7 @@ "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "require-dev": { - "illuminate/cache": "^9.52|^10.0|^11.0", + "illuminate/cache": "^9.52|^10.0|^11.0|^12.0", "mockery/mockery": "^1.4", "pestphp/pest": "^1.20|^2.0", "phpstan/extension-installer": "^1.1", @@ -5551,27 +5538,27 @@ "type": "github" } ], - "time": "2024-06-12T14:55:22+00:00" + "time": "2025-02-21T14:31:39+00:00" }, { "name": "spatie/laravel-ignition", - "version": "2.9.0", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "62042df15314b829d0f26e02108f559018e2aad0" + "reference": "1baee07216d6748ebd3a65ba97381b051838707a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/62042df15314b829d0f26e02108f559018e2aad0", - "reference": "62042df15314b829d0f26e02108f559018e2aad0", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1baee07216d6748ebd3a65ba97381b051838707a", + "reference": "1baee07216d6748ebd3a65ba97381b051838707a", "shasum": "" }, "require": { "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "illuminate/support": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0|^12.0", "php": "^8.1", "spatie/ignition": "^1.15", "symfony/console": "^6.2.3|^7.0", @@ -5580,12 +5567,12 @@ "require-dev": { "livewire/livewire": "^2.11|^3.3.5", "mockery/mockery": "^1.5.1", - "openai-php/client": "^0.8.1", - "orchestra/testbench": "8.22.3|^9.0", - "pestphp/pest": "^2.34", + "openai-php/client": "^0.8.1|^0.10", + "orchestra/testbench": "8.22.3|^9.0|^10.0", + "pestphp/pest": "^2.34|^3.7", "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan-deprecation-rules": "^1.1.1", - "phpstan/phpstan-phpunit": "^1.3.16", + "phpstan/phpstan-deprecation-rules": "^1.1.1|^2.0", + "phpstan/phpstan-phpunit": "^1.3.16|^2.0", "vlucas/phpdotenv": "^5.5" }, "suggest": { @@ -5642,7 +5629,7 @@ "type": "github" } ], - "time": "2024-12-02T08:43:31+00:00" + "time": "2025-02-20T13:13:55+00:00" }, { "name": "spomky-labs/cbor-php", @@ -5912,16 +5899,16 @@ }, { "name": "symfony/console", - "version": "v7.2.1", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" + "reference": "e51498ea18570c062e7df29d05a7003585b19b88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "url": "https://api.github.com/repos/symfony/console/zipball/e51498ea18570c062e7df29d05a7003585b19b88", + "reference": "e51498ea18570c062e7df29d05a7003585b19b88", "shasum": "" }, "require": { @@ -5985,7 +5972,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.1" + "source": "https://github.com/symfony/console/tree/v7.2.5" }, "funding": [ { @@ -6001,7 +5988,7 @@ "type": "tidelift" } ], - "time": "2024-12-11T03:49:26+00:00" + "time": "2025-03-12T08:11:12+00:00" }, { "name": "symfony/css-selector", @@ -6137,16 +6124,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.2.1", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "6150b89186573046167796fa5f3f76601d5145f8" + "reference": "102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/6150b89186573046167796fa5f3f76601d5145f8", - "reference": "6150b89186573046167796fa5f3f76601d5145f8", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b", + "reference": "102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b", "shasum": "" }, "require": { @@ -6192,7 +6179,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/v7.2.1" + "source": "https://github.com/symfony/error-handler/tree/v7.2.5" }, "funding": [ { @@ -6208,7 +6195,7 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:50:44+00:00" + "time": "2025-03-03T07:12:39+00:00" }, { "name": "symfony/event-dispatcher", @@ -6432,16 +6419,16 @@ }, { "name": "symfony/html-sanitizer", - "version": "v7.2.2", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/html-sanitizer.git", - "reference": "f6bc679b024e30f27e33815930a5b8b304c79813" + "reference": "91443febe34cfa5e8e00425f892e6316db95bc23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/f6bc679b024e30f27e33815930a5b8b304c79813", - "reference": "f6bc679b024e30f27e33815930a5b8b304c79813", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/91443febe34cfa5e8e00425f892e6316db95bc23", + "reference": "91443febe34cfa5e8e00425f892e6316db95bc23", "shasum": "" }, "require": { @@ -6481,7 +6468,7 @@ "sanitizer" ], "support": { - "source": "https://github.com/symfony/html-sanitizer/tree/v7.2.2" + "source": "https://github.com/symfony/html-sanitizer/tree/v7.2.3" }, "funding": [ { @@ -6497,20 +6484,20 @@ "type": "tidelift" } ], - "time": "2024-12-30T18:35:15+00:00" + "time": "2025-01-27T11:08:17+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.2.2", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "62d1a43796ca3fea3f83a8470dfe63a4af3bc588" + "reference": "371272aeb6286f8135e028ca535f8e4d6f114126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/62d1a43796ca3fea3f83a8470dfe63a4af3bc588", - "reference": "62d1a43796ca3fea3f83a8470dfe63a4af3bc588", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/371272aeb6286f8135e028ca535f8e4d6f114126", + "reference": "371272aeb6286f8135e028ca535f8e4d6f114126", "shasum": "" }, "require": { @@ -6559,7 +6546,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.2.2" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.5" }, "funding": [ { @@ -6575,20 +6562,20 @@ "type": "tidelift" } ], - "time": "2024-12-30T19:00:17+00:00" + "time": "2025-03-25T15:54:33+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.2.2", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "3c432966bd8c7ec7429663105f5a02d7e75b4306" + "reference": "b1fe91bc1fa454a806d3f98db4ba826eb9941a54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3c432966bd8c7ec7429663105f5a02d7e75b4306", - "reference": "3c432966bd8c7ec7429663105f5a02d7e75b4306", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b1fe91bc1fa454a806d3f98db4ba826eb9941a54", + "reference": "b1fe91bc1fa454a806d3f98db4ba826eb9941a54", "shasum": "" }, "require": { @@ -6673,7 +6660,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/v7.2.2" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.5" }, "funding": [ { @@ -6689,20 +6676,20 @@ "type": "tidelift" } ], - "time": "2024-12-31T14:59:40+00:00" + "time": "2025-03-28T13:32:50+00:00" }, { "name": "symfony/mailer", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc" + "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/e4d358702fb66e4c8a2af08e90e7271a62de39cc", - "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "url": "https://api.github.com/repos/symfony/mailer/zipball/f3871b182c44997cf039f3b462af4a48fb85f9d3", + "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3", "shasum": "" }, "require": { @@ -6753,7 +6740,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.2.0" + "source": "https://github.com/symfony/mailer/tree/v7.2.3" }, "funding": [ { @@ -6769,20 +6756,20 @@ "type": "tidelift" } ], - "time": "2024-11-25T15:21:05+00:00" + "time": "2025-01-27T11:08:17+00:00" }, { "name": "symfony/mime", - "version": "v7.2.1", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283" + "reference": "87ca22046b78c3feaff04b337f33b38510fd686b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/7f9617fcf15cb61be30f8b252695ed5e2bfac283", - "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283", + "url": "https://api.github.com/repos/symfony/mime/zipball/87ca22046b78c3feaff04b337f33b38510fd686b", + "reference": "87ca22046b78c3feaff04b337f33b38510fd686b", "shasum": "" }, "require": { @@ -6837,7 +6824,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.2.1" + "source": "https://github.com/symfony/mime/tree/v7.2.4" }, "funding": [ { @@ -6853,7 +6840,7 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:50:44+00:00" + "time": "2025-02-19T08:51:20+00:00" }, { "name": "symfony/polyfill-ctype", @@ -7493,16 +7480,16 @@ }, { "name": "symfony/process", - "version": "v7.2.0", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" + "reference": "87b7c93e57df9d8e39a093d32587702380ff045d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", - "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "url": "https://api.github.com/repos/symfony/process/zipball/87b7c93e57df9d8e39a093d32587702380ff045d", + "reference": "87b7c93e57df9d8e39a093d32587702380ff045d", "shasum": "" }, "require": { @@ -7534,7 +7521,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.2.0" + "source": "https://github.com/symfony/process/tree/v7.2.5" }, "funding": [ { @@ -7550,20 +7537,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2025-03-13T12:21:46+00:00" }, { "name": "symfony/property-access", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "3ae42efba01e45aaedecf5c93c8d6a3ab3a82276" + "reference": "b28732e315d81fbec787f838034de7d6c9b2b902" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/3ae42efba01e45aaedecf5c93c8d6a3ab3a82276", - "reference": "3ae42efba01e45aaedecf5c93c8d6a3ab3a82276", + "url": "https://api.github.com/repos/symfony/property-access/zipball/b28732e315d81fbec787f838034de7d6c9b2b902", + "reference": "b28732e315d81fbec787f838034de7d6c9b2b902", "shasum": "" }, "require": { @@ -7610,7 +7597,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.2.0" + "source": "https://github.com/symfony/property-access/tree/v7.2.3" }, "funding": [ { @@ -7626,20 +7613,20 @@ "type": "tidelift" } ], - "time": "2024-09-26T12:28:35+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/property-info", - "version": "v7.2.2", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "1dfeb0dac7a99f7b3be42db9ccc299c5a6483fcf" + "reference": "f00fd9685ecdbabe82ca25c7b739ce7bba99302c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/1dfeb0dac7a99f7b3be42db9ccc299c5a6483fcf", - "reference": "1dfeb0dac7a99f7b3be42db9ccc299c5a6483fcf", + "url": "https://api.github.com/repos/symfony/property-info/zipball/f00fd9685ecdbabe82ca25c7b739ce7bba99302c", + "reference": "f00fd9685ecdbabe82ca25c7b739ce7bba99302c", "shasum": "" }, "require": { @@ -7650,7 +7637,9 @@ "conflict": { "phpdocumentor/reflection-docblock": "<5.2", "phpdocumentor/type-resolver": "<1.5.1", - "symfony/dependency-injection": "<6.4" + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/serializer": "<6.4" }, "require-dev": { "phpdocumentor/reflection-docblock": "^5.2", @@ -7693,7 +7682,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.2.2" + "source": "https://github.com/symfony/property-info/tree/v7.2.5" }, "funding": [ { @@ -7709,20 +7698,20 @@ "type": "tidelift" } ], - "time": "2024-12-31T11:04:50+00:00" + "time": "2025-03-06T16:27:19+00:00" }, { "name": "symfony/routing", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", - "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "url": "https://api.github.com/repos/symfony/routing/zipball/ee9a67edc6baa33e5fae662f94f91fd262930996", + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996", "shasum": "" }, "require": { @@ -7774,7 +7763,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.2.0" + "source": "https://github.com/symfony/routing/tree/v7.2.3" }, "funding": [ { @@ -7790,20 +7779,20 @@ "type": "tidelift" } ], - "time": "2024-11-25T11:08:51+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/serializer", - "version": "v7.2.0", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "3f5ed9f5e6c02e3853109190ba38408f5e1d2dd0" + "reference": "d8b75b2c8144c29ac43b235738411f7cca6d584d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/3f5ed9f5e6c02e3853109190ba38408f5e1d2dd0", - "reference": "3f5ed9f5e6c02e3853109190ba38408f5e1d2dd0", + "url": "https://api.github.com/repos/symfony/serializer/zipball/d8b75b2c8144c29ac43b235738411f7cca6d584d", + "reference": "d8b75b2c8144c29ac43b235738411f7cca6d584d", "shasum": "" }, "require": { @@ -7872,7 +7861,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v7.2.0" + "source": "https://github.com/symfony/serializer/tree/v7.2.5" }, "funding": [ { @@ -7888,7 +7877,7 @@ "type": "tidelift" } ], - "time": "2024-11-25T15:21:05+00:00" + "time": "2025-03-24T12:37:32+00:00" }, { "name": "symfony/service-contracts", @@ -8062,16 +8051,16 @@ }, { "name": "symfony/translation", - "version": "v7.2.2", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "e2674a30132b7cc4d74540d6c2573aa363f05923" + "reference": "283856e6981286cc0d800b53bd5703e8e363f05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e2674a30132b7cc4d74540d6c2573aa363f05923", - "reference": "e2674a30132b7cc4d74540d6c2573aa363f05923", + "url": "https://api.github.com/repos/symfony/translation/zipball/283856e6981286cc0d800b53bd5703e8e363f05a", + "reference": "283856e6981286cc0d800b53bd5703e8e363f05a", "shasum": "" }, "require": { @@ -8137,7 +8126,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.2.2" + "source": "https://github.com/symfony/translation/tree/v7.2.4" }, "funding": [ { @@ -8153,7 +8142,7 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:18:10+00:00" + "time": "2025-02-13T10:27:23+00:00" }, { "name": "symfony/translation-contracts", @@ -8235,16 +8224,16 @@ }, { "name": "symfony/type-info", - "version": "v7.2.2", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "3b5a17470fff0034f25fd4287cbdaa0010d2f749" + "reference": "c4824a6b658294c828e609d3d8dbb4e87f6a375d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/3b5a17470fff0034f25fd4287cbdaa0010d2f749", - "reference": "3b5a17470fff0034f25fd4287cbdaa0010d2f749", + "url": "https://api.github.com/repos/symfony/type-info/zipball/c4824a6b658294c828e609d3d8dbb4e87f6a375d", + "reference": "c4824a6b658294c828e609d3d8dbb4e87f6a375d", "shasum": "" }, "require": { @@ -8290,7 +8279,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.2.2" + "source": "https://github.com/symfony/type-info/tree/v7.2.5" }, "funding": [ { @@ -8306,7 +8295,7 @@ "type": "tidelift" } ], - "time": "2024-12-20T13:38:37+00:00" + "time": "2025-03-24T09:03:36+00:00" }, { "name": "symfony/uid", @@ -8384,16 +8373,16 @@ }, { "name": "symfony/var-dumper", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" + "reference": "82b478c69745d8878eb60f9a049a4d584996f73a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", - "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/82b478c69745d8878eb60f9a049a4d584996f73a", + "reference": "82b478c69745d8878eb60f9a049a4d584996f73a", "shasum": "" }, "require": { @@ -8447,7 +8436,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.2.0" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.3" }, "funding": [ { @@ -8463,7 +8452,7 @@ "type": "tidelift" } ], - "time": "2024-11-08T15:48:14+00:00" + "time": "2025-01-17T11:39:41+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -8762,16 +8751,16 @@ }, { "name": "web-auth/webauthn-lib", - "version": "5.1.1", + "version": "5.2.2", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-lib.git", - "reference": "6b95b2b3902d943796c3c2bac2dd14af9d031fc2" + "reference": "8937c397c8ae91b5af422ca8aa915c756062da74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/6b95b2b3902d943796c3c2bac2dd14af9d031fc2", - "reference": "6b95b2b3902d943796c3c2bac2dd14af9d031fc2", + "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/8937c397c8ae91b5af422ca8aa915c756062da74", + "reference": "8937c397c8ae91b5af422ca8aa915c756062da74", "shasum": "" }, "require": { @@ -8832,7 +8821,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-lib/tree/5.1.1" + "source": "https://github.com/web-auth/webauthn-lib/tree/5.2.2" }, "funding": [ { @@ -8844,7 +8833,7 @@ "type": "patreon" } ], - "time": "2025-01-03T23:01:20+00:00" + "time": "2025-03-16T14:38:43+00:00" }, { "name": "webmozart/assert", @@ -8906,192 +8895,35 @@ } ], "packages-dev": [ - { - "name": "amphp/amp", - "version": "v2.6.4", - "source": { - "type": "git", - "url": "https://github.com/amphp/amp.git", - "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", - "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1", - "ext-json": "*", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^7 | ^8 | ^9", - "react/promise": "^2", - "vimeo/psalm": "^3.12" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "files": [ - "lib/functions.php", - "lib/Internal/functions.php" - ], - "psr-4": { - "Amp\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "https://amphp.org/amp", - "keywords": [ - "async", - "asynchronous", - "awaitable", - "concurrency", - "event", - "event-loop", - "future", - "non-blocking", - "promise" - ], - "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.4" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-03-21T18:52:26+00:00" - }, - { - "name": "amphp/byte-stream", - "version": "v1.8.2", - "source": { - "type": "git", - "url": "https://github.com/amphp/byte-stream.git", - "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", - "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", - "shasum": "" - }, - "require": { - "amphp/amp": "^2", - "php": ">=7.1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1.4", - "friendsofphp/php-cs-fixer": "^2.3", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^6 || ^7 || ^8", - "psalm/phar": "^3.11.4" - }, - "type": "library", - "autoload": { - "files": [ - "lib/functions.php" - ], - "psr-4": { - "Amp\\ByteStream\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "https://amphp.org/byte-stream", - "keywords": [ - "amp", - "amphp", - "async", - "io", - "non-blocking", - "stream" - ], - "support": { - "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v1.8.2" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-04-13T18:00:56+00:00" - }, { "name": "barryvdh/laravel-debugbar", - "version": "v3.14.10", + "version": "v3.15.2", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "56b9bd235e3fe62e250124804009ce5bab97cc63" + "reference": "0bc1e1361e7fffc2be156f46ad1fba6927c01729" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/56b9bd235e3fe62e250124804009ce5bab97cc63", - "reference": "56b9bd235e3fe62e250124804009ce5bab97cc63", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/0bc1e1361e7fffc2be156f46ad1fba6927c01729", + "reference": "0bc1e1361e7fffc2be156f46ad1fba6927c01729", "shasum": "" }, "require": { - "illuminate/routing": "^9|^10|^11", - "illuminate/session": "^9|^10|^11", - "illuminate/support": "^9|^10|^11", - "maximebf/debugbar": "~1.23.0", - "php": "^8.0", + "illuminate/routing": "^9|^10|^11|^12", + "illuminate/session": "^9|^10|^11|^12", + "illuminate/support": "^9|^10|^11|^12", + "php": "^8.1", + "php-debugbar/php-debugbar": "~2.1.1", "symfony/finder": "^6|^7" }, + "conflict": { + "maximebf/debugbar": "*" + }, "require-dev": { "mockery/mockery": "^1.3.3", - "orchestra/testbench-dusk": "^5|^6|^7|^8|^9", - "phpunit/phpunit": "^9.6|^10.5", + "orchestra/testbench-dusk": "^7|^8|^9|^10", + "phpunit/phpunit": "^9.5.10|^10|^11", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", @@ -9105,7 +8937,7 @@ ] }, "branch-alias": { - "dev-master": "3.14-dev" + "dev-master": "3.15-dev" } }, "autoload": { @@ -9130,13 +8962,14 @@ "keywords": [ "debug", "debugbar", + "dev", "laravel", "profiler", "webprofiler" ], "support": { "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.14.10" + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.15.2" }, "funding": [ { @@ -9148,40 +8981,40 @@ "type": "github" } ], - "time": "2024-12-23T10:10:42+00:00" + "time": "2025-02-25T15:25:22+00:00" }, { "name": "barryvdh/laravel-ide-helper", - "version": "v3.5.4", + "version": "v3.5.5", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "980a87e250fc2a7558bc46e07f61c7594500ea53" + "reference": "8d441ec99f8612b942b55f5183151d91591b618a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/980a87e250fc2a7558bc46e07f61c7594500ea53", - "reference": "980a87e250fc2a7558bc46e07f61c7594500ea53", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/8d441ec99f8612b942b55f5183151d91591b618a", + "reference": "8d441ec99f8612b942b55f5183151d91591b618a", "shasum": "" }, "require": { "barryvdh/reflection-docblock": "^2.3", "composer/class-map-generator": "^1.0", "ext-json": "*", - "illuminate/console": "^11.15", - "illuminate/database": "^11.15", - "illuminate/filesystem": "^11.15", - "illuminate/support": "^11.15", + "illuminate/console": "^11.15 || ^12", + "illuminate/database": "^11.15 || ^12", + "illuminate/filesystem": "^11.15 || ^12", + "illuminate/support": "^11.15 || ^12", "php": "^8.2" }, "require-dev": { "ext-pdo_sqlite": "*", "friendsofphp/php-cs-fixer": "^3", - "illuminate/config": "^11.15", - "illuminate/view": "^11.15", + "illuminate/config": "^11.15 || ^12", + "illuminate/view": "^11.15 || ^12", "mockery/mockery": "^1.4", - "orchestra/testbench": "^9.2", - "phpunit/phpunit": "^10.5", + "orchestra/testbench": "^9.2 || ^10", + "phpunit/phpunit": "^10.5 || ^11.5.3", "spatie/phpunit-snapshot-assertions": "^4 || ^5", "vimeo/psalm": "^5.4", "vlucas/phpdotenv": "^5" @@ -9230,7 +9063,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", - "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.5.4" + "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.5.5" }, "funding": [ { @@ -9242,7 +9075,7 @@ "type": "github" } ], - "time": "2025-01-14T09:07:00+00:00" + "time": "2025-02-11T13:59:46+00:00" }, { "name": "barryvdh/reflection-docblock", @@ -9298,16 +9131,16 @@ }, { "name": "composer/class-map-generator", - "version": "1.5.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915" + "reference": "134b705ddb0025d397d8318a75825fe3c9d1da34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915", - "reference": "4b0a223cf5be7c9ee7e0ef1bc7db42b4a97c9915", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/134b705ddb0025d397d8318a75825fe3c9d1da34", + "reference": "134b705ddb0025d397d8318a75825fe3c9d1da34", "shasum": "" }, "require": { @@ -9351,7 +9184,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.5.0" + "source": "https://github.com/composer/class-map-generator/tree/1.6.1" }, "funding": [ { @@ -9367,7 +9200,7 @@ "type": "tidelift" } ], - "time": "2024-11-25T16:11:06+00:00" + "time": "2025-03-24T13:50:44+00:00" }, { "name": "composer/pcre", @@ -9448,190 +9281,6 @@ ], "time": "2024-11-12T16:29:46+00:00" }, - { - "name": "composer/semver", - "version": "3.4.3", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-09-19T14:15:21+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.5", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-05-06T16:37:16+00:00" - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php", - "support": { - "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", - "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" - }, - "time": "2019-12-04T15:06:13+00:00" - }, { "name": "fakerphp/faker", "version": "v1.24.1", @@ -9695,180 +9344,18 @@ }, "time": "2024-11-21T13:46:39+00:00" }, - { - "name": "felixfbecker/advanced-json-rpc", - "version": "v3.2.1", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "shasum": "" - }, - "require": { - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "php": "^7.1 || ^8.0", - "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "AdvancedJsonRpc\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "A more advanced JSONRPC implementation", - "support": { - "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", - "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" - }, - "time": "2021-06-11T22:34:44+00:00" - }, - { - "name": "felixfbecker/language-server-protocol", - "version": "v1.5.3", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/a9e113dbc7d849e35b8776da39edaf4313b7b6c9", - "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpstan/phpstan": "*", - "squizlabs/php_codesniffer": "^3.1", - "vimeo/psalm": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "LanguageServerProtocol\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "PHP classes for the Language Server Protocol", - "keywords": [ - "language", - "microsoft", - "php", - "server" - ], - "support": { - "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.3" - }, - "time": "2024-04-30T00:40:11+00:00" - }, - { - "name": "fidry/cpu-core-counter", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", - "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.2.0" - }, - "funding": [ - { - "url": "https://github.com/theofidry", - "type": "github" - } - ], - "time": "2024-08-06T10:04:20+00:00" - }, { "name": "filp/whoops", - "version": "2.16.0", + "version": "2.18.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" + "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", + "url": "https://api.github.com/repos/filp/whoops/zipball/a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", + "reference": "a7de6c3c6c3c022f5cfc337f8ede6a14460cf77e", "shasum": "" }, "require": { @@ -9918,7 +9405,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.16.0" + "source": "https://github.com/filp/whoops/tree/2.18.0" }, "funding": [ { @@ -9926,7 +9413,7 @@ "type": "github" } ], - "time": "2024-09-25T12:00:00+00:00" + "time": "2025-03-15T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -9981,24 +9468,24 @@ }, { "name": "laravel/dusk", - "version": "v8.2.13", + "version": "v8.3.2", "source": { "type": "git", "url": "https://github.com/laravel/dusk.git", - "reference": "8ddd53a74c2e6f9c3b68cf8189dad44077b585b0" + "reference": "bb701836357bf6f6c6658ef90b5a0f8232affb0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/dusk/zipball/8ddd53a74c2e6f9c3b68cf8189dad44077b585b0", - "reference": "8ddd53a74c2e6f9c3b68cf8189dad44077b585b0", + "url": "https://api.github.com/repos/laravel/dusk/zipball/bb701836357bf6f6c6658ef90b5a0f8232affb0f", + "reference": "bb701836357bf6f6c6658ef90b5a0f8232affb0f", "shasum": "" }, "require": { "ext-json": "*", "ext-zip": "*", "guzzlehttp/guzzle": "^7.5", - "illuminate/console": "^10.0|^11.0", - "illuminate/support": "^10.0|^11.0", + "illuminate/console": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0", "php": "^8.1", "php-webdriver/webdriver": "^1.15.2", "symfony/console": "^6.2|^7.0", @@ -10007,11 +9494,13 @@ "vlucas/phpdotenv": "^5.2" }, "require-dev": { + "laravel/framework": "^10.0|^11.0|^12.0", "mockery/mockery": "^1.6", - "orchestra/testbench": "^8.19|^9.0", + "orchestra/testbench-core": "^8.19|^9.0|^10.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.1|^11.0", - "psy/psysh": "^0.11.12|^0.12" + "phpunit/phpunit": "^10.1|^11.0|^12.0.1", + "psy/psysh": "^0.11.12|^0.12", + "symfony/yaml": "^6.2|^7.0" }, "suggest": { "ext-pcntl": "Used to gracefully terminate Dusk when tests are running." @@ -10047,41 +9536,41 @@ ], "support": { "issues": "https://github.com/laravel/dusk/issues", - "source": "https://github.com/laravel/dusk/tree/v8.2.13" + "source": "https://github.com/laravel/dusk/tree/v8.3.2" }, - "time": "2025-01-06T14:52:17+00:00" + "time": "2025-02-20T14:42:00+00:00" }, { "name": "laravel/pail", - "version": "v1.2.1", + "version": "v1.2.2", "source": { "type": "git", "url": "https://github.com/laravel/pail.git", - "reference": "353ac12134b98e2e7c3333d916bd3e523931e583" + "reference": "f31f4980f52be17c4667f3eafe034e6826787db2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pail/zipball/353ac12134b98e2e7c3333d916bd3e523931e583", - "reference": "353ac12134b98e2e7c3333d916bd3e523931e583", + "url": "https://api.github.com/repos/laravel/pail/zipball/f31f4980f52be17c4667f3eafe034e6826787db2", + "reference": "f31f4980f52be17c4667f3eafe034e6826787db2", "shasum": "" }, "require": { "ext-mbstring": "*", - "illuminate/console": "^10.24|^11.0", - "illuminate/contracts": "^10.24|^11.0", - "illuminate/log": "^10.24|^11.0", - "illuminate/process": "^10.24|^11.0", - "illuminate/support": "^10.24|^11.0", + "illuminate/console": "^10.24|^11.0|^12.0", + "illuminate/contracts": "^10.24|^11.0|^12.0", + "illuminate/log": "^10.24|^11.0|^12.0", + "illuminate/process": "^10.24|^11.0|^12.0", + "illuminate/support": "^10.24|^11.0|^12.0", "nunomaduro/termwind": "^1.15|^2.0", "php": "^8.2", "symfony/console": "^6.0|^7.0" }, "require-dev": { - "laravel/framework": "^10.24|^11.0", + "laravel/framework": "^10.24|^11.0|^12.0", "laravel/pint": "^1.13", - "orchestra/testbench-core": "^8.12|^9.0", - "pestphp/pest": "^2.20", - "pestphp/pest-plugin-type-coverage": "^2.3", + "orchestra/testbench-core": "^8.13|^9.0|^10.0", + "pestphp/pest": "^2.20|^3.0", + "pestphp/pest-plugin-type-coverage": "^2.3|^3.0", "phpstan/phpstan": "^1.10", "symfony/var-dumper": "^6.3|^7.0" }, @@ -10127,20 +9616,20 @@ "issues": "https://github.com/laravel/pail/issues", "source": "https://github.com/laravel/pail" }, - "time": "2024-10-23T12:56:23+00:00" + "time": "2025-01-28T15:15:15+00:00" }, { "name": "laravel/pint", - "version": "v1.20.0", + "version": "v1.21.2", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b" + "reference": "370772e7d9e9da087678a0edf2b11b6960e40558" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/53072e8ea22213a7ed168a8a15b96fbb8b82d44b", - "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b", + "url": "https://api.github.com/repos/laravel/pint/zipball/370772e7d9e9da087678a0edf2b11b6960e40558", + "reference": "370772e7d9e9da087678a0edf2b11b6960e40558", "shasum": "" }, "require": { @@ -10148,15 +9637,15 @@ "ext-mbstring": "*", "ext-tokenizer": "*", "ext-xml": "*", - "php": "^8.1.0" + "php": "^8.2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.66.0", - "illuminate/view": "^10.48.25", - "larastan/larastan": "^2.9.12", - "laravel-zero/framework": "^10.48.25", + "friendsofphp/php-cs-fixer": "^3.72.0", + "illuminate/view": "^11.44.2", + "larastan/larastan": "^3.2.0", + "laravel-zero/framework": "^11.36.1", "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^1.17.0", + "nunomaduro/termwind": "^2.3", "pestphp/pest": "^2.36.0" }, "bin": [ @@ -10193,32 +9682,32 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2025-01-14T16:20:53+00:00" + "time": "2025-03-14T22:31:42+00:00" }, { "name": "laravel/sail", - "version": "v1.40.0", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "237e70656d8eface4839de51d101284bd5d0cf71" + "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/237e70656d8eface4839de51d101284bd5d0cf71", - "reference": "237e70656d8eface4839de51d101284bd5d0cf71", + "url": "https://api.github.com/repos/laravel/sail/zipball/fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", + "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", "shasum": "" }, "require": { - "illuminate/console": "^9.52.16|^10.0|^11.0", - "illuminate/contracts": "^9.52.16|^10.0|^11.0", - "illuminate/support": "^9.52.16|^10.0|^11.0", + "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0", "php": "^8.0", "symfony/console": "^6.0|^7.0", "symfony/yaml": "^6.0|^7.0" }, "require-dev": { - "orchestra/testbench": "^7.0|^8.0|^9.0", + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", "phpstan/phpstan": "^1.10" }, "bin": [ @@ -10256,75 +9745,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2025-01-13T16:57:11+00:00" - }, - { - "name": "maximebf/debugbar", - "version": "v1.23.5", - "source": { - "type": "git", - "url": "https://github.com/php-debugbar/php-debugbar.git", - "reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/eeabd61a1f19ba5dcd5ac4585a477130ee03ce25", - "reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25", - "shasum": "" - }, - "require": { - "php": "^7.2|^8", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4|^5|^6|^7" - }, - "require-dev": { - "dbrekelmans/bdi": "^1", - "phpunit/phpunit": "^8|^9", - "symfony/panther": "^1|^2.1", - "twig/twig": "^1.38|^2.7|^3.0" - }, - "suggest": { - "kriswallsmith/assetic": "The best way to manage assets", - "monolog/monolog": "Log using Monolog", - "predis/predis": "Redis storage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.23-dev" - } - }, - "autoload": { - "psr-4": { - "DebugBar\\": "src/DebugBar/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Maxime Bouroumeau-Fuseau", - "email": "maxime.bouroumeau@gmail.com", - "homepage": "http://maximebf.com" - }, - { - "name": "Barry vd. Heuvel", - "email": "barryvdh@gmail.com" - } - ], - "description": "Debug bar in the browser for php application", - "homepage": "https://github.com/maximebf/php-debugbar", - "keywords": [ - "debug", - "debugbar" - ], - "support": { - "issues": "https://github.com/php-debugbar/php-debugbar/issues", - "source": "https://github.com/php-debugbar/php-debugbar/tree/v1.23.5" - }, - "time": "2024-12-15T19:20:42+00:00" + "time": "2025-01-24T15:45:36+00:00" }, { "name": "mockery/mockery", @@ -10411,16 +9832,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.12.1", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" + "reference": "024473a478be9df5fdaca2c793f2232fe788e414" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", + "reference": "024473a478be9df5fdaca2c793f2232fe788e414", "shasum": "" }, "require": { @@ -10459,7 +9880,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" }, "funding": [ { @@ -10467,92 +9888,41 @@ "type": "tidelift" } ], - "time": "2024-11-08T17:47:46+00:00" - }, - { - "name": "netresearch/jsonmapper", - "version": "v4.5.0", - "source": { - "type": "git", - "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5", - "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", - "squizlabs/php_codesniffer": "~3.5" - }, - "type": "library", - "autoload": { - "psr-0": { - "JsonMapper": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "OSL-3.0" - ], - "authors": [ - { - "name": "Christian Weiske", - "email": "cweiske@cweiske.de", - "homepage": "http://github.com/cweiske/jsonmapper/", - "role": "Developer" - } - ], - "description": "Map nested JSON structures onto PHP classes", - "support": { - "email": "cweiske@cweiske.de", - "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0" - }, - "time": "2024-09-08T10:13:13+00:00" + "time": "2025-02-12T12:17:51+00:00" }, { "name": "nunomaduro/collision", - "version": "v8.5.0", + "version": "v8.7.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5" + "reference": "586cb8181a257a2152b6a855ca8d9598878a1a26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/586cb8181a257a2152b6a855ca8d9598878a1a26", + "reference": "586cb8181a257a2152b6a855ca8d9598878a1a26", "shasum": "" }, "require": { - "filp/whoops": "^2.16.0", - "nunomaduro/termwind": "^2.1.0", + "filp/whoops": "^2.17.0", + "nunomaduro/termwind": "^2.3.0", "php": "^8.2.0", - "symfony/console": "^7.1.5" + "symfony/console": "^7.2.1" }, "conflict": { - "laravel/framework": "<11.0.0 || >=12.0.0", - "phpunit/phpunit": "<10.5.1 || >=12.0.0" + "laravel/framework": "<11.39.1 || >=13.0.0", + "phpunit/phpunit": "<11.5.3 || >=12.0.0" }, "require-dev": { - "larastan/larastan": "^2.9.8", - "laravel/framework": "^11.28.0", - "laravel/pint": "^1.18.1", - "laravel/sail": "^1.36.0", - "laravel/sanctum": "^4.0.3", - "laravel/tinker": "^2.10.0", - "orchestra/testbench-core": "^9.5.3", - "pestphp/pest": "^2.36.0 || ^3.4.0", + "larastan/larastan": "^2.10.0", + "laravel/framework": "^11.44.2", + "laravel/pint": "^1.21.2", + "laravel/sail": "^1.41.0", + "laravel/sanctum": "^4.0.8", + "laravel/tinker": "^2.10.1", + "orchestra/testbench-core": "^9.12.0", + "pestphp/pest": "^3.7.4", "sebastian/environment": "^6.1.0 || ^7.2.0" }, "type": "library", @@ -10590,6 +9960,7 @@ "cli", "command-line", "console", + "dev", "error", "handling", "laravel", @@ -10615,7 +9986,7 @@ "type": "patreon" } ], - "time": "2024-10-15T16:06:32+00:00" + "time": "2025-03-14T22:37:40+00:00" }, { "name": "openai-php/client", @@ -10708,99 +10079,6 @@ ], "time": "2024-11-12T20:51:16+00:00" }, - { - "name": "orchestra/testbench-core", - "version": "v9.9.2", - "source": { - "type": "git", - "url": "https://github.com/orchestral/testbench-core.git", - "reference": "c7bcf7ab14fa09941278a7b1b731362db77e1745" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/c7bcf7ab14fa09941278a7b1b731362db77e1745", - "reference": "c7bcf7ab14fa09941278a7b1b731362db77e1745", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.2", - "php": "^8.2", - "symfony/polyfill-php83": "^1.31", - "symfony/polyfill-php84": "^1.31" - }, - "conflict": { - "brianium/paratest": "<7.3.0 || >=8.0.0", - "laravel/framework": "<11.35.0 || >=12.0.0", - "laravel/serializable-closure": "<1.3.0 || >=3.0.0", - "nunomaduro/collision": "<8.0.0 || >=9.0.0", - "orchestra/testbench-dusk": "<9.10.0 || >=10.0.0", - "phpunit/phpunit": "<10.5.35 || >=11.0.0 <11.3.6 || >=11.6.0" - }, - "require-dev": { - "fakerphp/faker": "^1.24", - "laravel/framework": "^11.35.0", - "laravel/pint": "^1.17", - "laravel/serializable-closure": "^1.3 || ^2.0", - "mockery/mockery": "^1.6.10", - "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^10.5.35 || ^11.3.6", - "spatie/laravel-ray": "^1.39", - "symfony/process": "^7.0.3", - "symfony/yaml": "^7.0.3", - "vlucas/phpdotenv": "^5.6.1" - }, - "suggest": { - "brianium/paratest": "Allow using parallel testing (^7.3).", - "ext-pcntl": "Required to use all features of the console signal trapping.", - "fakerphp/faker": "Allow using Faker for testing (^1.23).", - "laravel/framework": "Required for testing (^11.35.0).", - "mockery/mockery": "Allow using Mockery for testing (^1.6).", - "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^8.0).", - "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^9.0).", - "phpunit/phpunit": "Allow using PHPUnit for testing (^10.5 || ^11.0).", - "symfony/process": "Required to use Orchestra\\Testbench\\remote function (^7.0).", - "symfony/yaml": "Required for Testbench CLI (^7.0).", - "vlucas/phpdotenv": "Required for Testbench CLI (^5.4.1)." - }, - "bin": [ - "testbench" - ], - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Orchestra\\Testbench\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" - } - ], - "description": "Testing Helper for Laravel Development", - "homepage": "https://packages.tools/testbench", - "keywords": [ - "BDD", - "TDD", - "dev", - "laravel", - "laravel-packages", - "testing" - ], - "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench-core" - }, - "time": "2025-01-22T03:23:53+00:00" - }, { "name": "phar-io/manifest", "version": "2.0.4", @@ -10919,6 +10197,76 @@ }, "time": "2022-02-21T01:04:05+00:00" }, + { + "name": "php-debugbar/php-debugbar", + "version": "v2.1.6", + "source": { + "type": "git", + "url": "https://github.com/php-debugbar/php-debugbar.git", + "reference": "16fa68da5617220594aa5e33fa9de415f94784a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/16fa68da5617220594aa5e33fa9de415f94784a0", + "reference": "16fa68da5617220594aa5e33fa9de415f94784a0", + "shasum": "" + }, + "require": { + "php": "^8", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4|^5|^6|^7" + }, + "require-dev": { + "dbrekelmans/bdi": "^1", + "phpunit/phpunit": "^8|^9", + "symfony/panther": "^1|^2.1", + "twig/twig": "^1.38|^2.7|^3.0" + }, + "suggest": { + "kriswallsmith/assetic": "The best way to manage assets", + "monolog/monolog": "Log using Monolog", + "predis/predis": "Redis storage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "DebugBar\\": "src/DebugBar/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Debug bar in the browser for php application", + "homepage": "https://github.com/php-debugbar/php-debugbar", + "keywords": [ + "debug", + "debug bar", + "debugbar", + "dev" + ], + "support": { + "issues": "https://github.com/php-debugbar/php-debugbar/issues", + "source": "https://github.com/php-debugbar/php-debugbar/tree/v2.1.6" + }, + "time": "2025-02-21T17:47:03+00:00" + }, { "name": "php-di/invoker", "version": "2.3.6", @@ -10976,20 +10324,20 @@ }, { "name": "php-di/php-di", - "version": "7.0.7", + "version": "7.0.9", "source": { "type": "git", "url": "https://github.com/PHP-DI/PHP-DI.git", - "reference": "e87435e3c0e8f22977adc5af0d5cdcc467e15cf1" + "reference": "d8480267f5cf239650debba704f3ecd15b638cde" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/e87435e3c0e8f22977adc5af0d5cdcc467e15cf1", - "reference": "e87435e3c0e8f22977adc5af0d5cdcc467e15cf1", + "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/d8480267f5cf239650debba704f3ecd15b638cde", + "reference": "d8480267f5cf239650debba704f3ecd15b638cde", "shasum": "" }, "require": { - "laravel/serializable-closure": "^1.0", + "laravel/serializable-closure": "^1.0 || ^2.0", "php": ">=8.0", "php-di/invoker": "^2.0", "psr/container": "^1.1 || ^2.0" @@ -11001,8 +10349,8 @@ "friendsofphp/php-cs-fixer": "^3", "friendsofphp/proxy-manager-lts": "^1", "mnapoli/phpunit-easymock": "^1.3", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.6" + "phpunit/phpunit": "^9.6", + "vimeo/psalm": "^5|^6" }, "suggest": { "friendsofphp/proxy-manager-lts": "Install it if you want to use lazy injection (version ^1)" @@ -11033,7 +10381,7 @@ ], "support": { "issues": "https://github.com/PHP-DI/PHP-DI/issues", - "source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.7" + "source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.9" }, "funding": [ { @@ -11045,7 +10393,7 @@ "type": "tidelift" } ], - "time": "2024-07-21T15:55:45+00:00" + "time": "2025-02-28T12:46:35+00:00" }, { "name": "php-http/discovery", @@ -11250,35 +10598,35 @@ }, { "name": "phpunit/php-code-coverage", - "version": "10.1.16", + "version": "11.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/14d63fbcca18457e49c6f8bebaa91a87e8e188d7", + "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-text-template": "^3.0.1", - "sebastian/code-unit-reverse-lookup": "^3.0.0", - "sebastian/complexity": "^3.2.0", - "sebastian/environment": "^6.1.0", - "sebastian/lines-of-code": "^2.0.2", - "sebastian/version": "^4.0.1", + "nikic/php-parser": "^5.4.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.0", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^10.1" + "phpunit/phpunit": "^11.5.2" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -11287,7 +10635,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1.x-dev" + "dev-main": "11.0.x-dev" } }, "autoload": { @@ -11316,7 +10664,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.9" }, "funding": [ { @@ -11324,32 +10672,32 @@ "type": "github" } ], - "time": "2024-08-22T04:31:57+00:00" + "time": "2025-02-25T13:26:39+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.1.0", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -11377,7 +10725,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" }, "funding": [ { @@ -11385,28 +10733,28 @@ "type": "github" } ], - "time": "2023-08-31T06:24:48+00:00" + "time": "2024-08-27T05:02:59+00:00" }, { "name": "phpunit/php-invoker", - "version": "4.0.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcntl": "*" @@ -11414,7 +10762,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -11440,7 +10788,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" }, "funding": [ { @@ -11448,32 +10797,32 @@ "type": "github" } ], - "time": "2023-02-03T06:56:09+00:00" + "time": "2024-07-03T05:07:44+00:00" }, { "name": "phpunit/php-text-template", - "version": "3.0.1", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -11500,7 +10849,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" }, "funding": [ { @@ -11508,32 +10857,32 @@ "type": "github" } ], - "time": "2023-08-31T14:07:24+00:00" + "time": "2024-07-03T05:08:43+00:00" }, { "name": "phpunit/php-timer", - "version": "6.0.0", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -11559,7 +10908,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" }, "funding": [ { @@ -11567,20 +10917,20 @@ "type": "github" } ], - "time": "2023-02-03T06:57:52+00:00" + "time": "2024-07-03T05:09:35+00:00" }, { "name": "phpunit/phpunit", - "version": "10.5.41", + "version": "11.5.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e76586fa3d49714f230221734b44892e384109d7" + "reference": "4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e76586fa3d49714f230221734b44892e384109d7", - "reference": "e76586fa3d49714f230221734b44892e384109d7", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c", + "reference": "4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c", "shasum": "" }, "require": { @@ -11590,26 +10940,26 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.1", + "myclabs/deep-copy": "^1.13.0", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.16", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-invoker": "^4.0.0", - "phpunit/php-text-template": "^3.0.1", - "phpunit/php-timer": "^6.0.0", - "sebastian/cli-parser": "^2.0.1", - "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.3", - "sebastian/diff": "^5.1.1", - "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.2", - "sebastian/global-state": "^6.0.2", - "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.0", - "sebastian/type": "^4.0.0", - "sebastian/version": "^4.0.1" + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.9", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.1", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.0", + "sebastian/exporter": "^6.3.0", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/type": "^5.1.2", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" @@ -11620,7 +10970,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.5-dev" + "dev-main": "11.5-dev" } }, "autoload": { @@ -11652,7 +11002,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.41" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.15" }, "funding": [ { @@ -11668,104 +11018,32 @@ "type": "tidelift" } ], - "time": "2025-01-13T09:33:05+00:00" - }, - { - "name": "psalm/plugin-laravel", - "version": "v2.11.0", - "source": { - "type": "git", - "url": "https://github.com/psalm/psalm-plugin-laravel.git", - "reference": "ffd51399b672959331ed3ef4eaae13984474e2f0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/psalm/psalm-plugin-laravel/zipball/ffd51399b672959331ed3ef4eaae13984474e2f0", - "reference": "ffd51399b672959331ed3ef4eaae13984474e2f0", - "shasum": "" - }, - "require": { - "barryvdh/laravel-ide-helper": "^2.13 || ^3.0", - "ext-simplexml": "*", - "illuminate/config": "^10.48 || ^11.0", - "illuminate/container": "^10.48 || ^11.0", - "illuminate/contracts": "^10.48 || ^11.0", - "illuminate/database": "^10.48 || ^11.0", - "illuminate/events": "^10.48 || ^11.0", - "illuminate/http": "^10.48 || ^11.0", - "illuminate/routing": "^10.48 || ^11.0", - "illuminate/support": "^10.48 || ^11.0", - "illuminate/view": "^10.48 || ^11.0", - "nikic/php-parser": "^4.18 || ^5.0", - "orchestra/testbench-core": "^8.22 || ^9.0", - "php": "^8.1", - "symfony/console": "^6.0 || ^7.0", - "symfony/finder": "^6.0 || ^7.0", - "vimeo/psalm": "^5.20" - }, - "require-dev": { - "laravel/framework": "^10.48 || ^11.0", - "phpunit/phpunit": "^10.5 || ^11.0", - "phpyh/psalm-tester": "^0.1.0", - "ramsey/collection": "^1.3", - "rector/rector": "^1.0", - "slevomat/coding-standard": "^8.8", - "squizlabs/php_codesniffer": "*", - "symfony/http-foundation": "^6.0 || ^7.0" - }, - "type": "psalm-plugin", - "extra": { - "psalm": { - "pluginClass": "Psalm\\LaravelPlugin\\Plugin" - } - }, - "autoload": { - "psr-4": { - "Psalm\\LaravelPlugin\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matthew Brown", - "email": "github@muglug.com" - } - ], - "description": "Psalm plugin for Laravel", - "homepage": "https://github.com/psalm/psalm-plugin-laravel", - "support": { - "issues": "https://github.com/psalm/psalm-plugin-laravel/issues", - "source": "https://github.com/psalm/psalm-plugin-laravel/tree/v2.11.0" - }, - "time": "2024-03-19T21:40:03+00:00" + "time": "2025-03-23T16:02:11+00:00" }, { "name": "sebastian/cli-parser", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -11789,7 +11067,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" }, "funding": [ { @@ -11797,32 +11075,32 @@ "type": "github" } ], - "time": "2024-03-02T07:12:49+00:00" + "time": "2024-07-03T04:41:36+00:00" }, { "name": "sebastian/code-unit", - "version": "2.0.0", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -11845,7 +11123,8 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" }, "funding": [ { @@ -11853,32 +11132,32 @@ "type": "github" } ], - "time": "2023-02-03T06:58:43+00:00" + "time": "2025-03-19T07:56:08+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -11900,7 +11179,8 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" }, "funding": [ { @@ -11908,36 +11188,39 @@ "type": "github" } ], - "time": "2023-02-03T06:59:15+00:00" + "time": "2024-07-03T04:45:54+00:00" }, { "name": "sebastian/comparator", - "version": "5.0.3", + "version": "6.3.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" + "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959", + "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -11977,7 +11260,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1" }, "funding": [ { @@ -11985,33 +11268,33 @@ "type": "github" } ], - "time": "2024-10-18T14:56:07+00:00" + "time": "2025-03-07T06:57:01+00:00" }, { "name": "sebastian/complexity", - "version": "3.2.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -12035,7 +11318,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" }, "funding": [ { @@ -12043,33 +11326,33 @@ "type": "github" } ], - "time": "2023-12-21T08:37:17+00:00" + "time": "2024-07-03T04:49:50+00:00" }, { "name": "sebastian/diff", - "version": "5.1.1", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -12102,7 +11385,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" }, "funding": [ { @@ -12110,27 +11393,27 @@ "type": "github" } ], - "time": "2024-03-02T07:15:17+00:00" + "time": "2024-07-03T04:53:05+00:00" }, { "name": "sebastian/environment", - "version": "6.1.0", + "version": "7.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-posix": "*" @@ -12138,7 +11421,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "7.2-dev" } }, "autoload": { @@ -12166,7 +11449,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.0" }, "funding": [ { @@ -12174,34 +11457,34 @@ "type": "github" } ], - "time": "2024-03-23T08:47:14+00:00" + "time": "2024-07-03T04:54:44+00:00" }, { "name": "sebastian/exporter", - "version": "5.1.2", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -12244,7 +11527,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" }, "funding": [ { @@ -12252,35 +11535,35 @@ "type": "github" } ], - "time": "2024-03-02T07:17:12+00:00" + "time": "2024-12-05T09:17:50+00:00" }, { "name": "sebastian/global-state", - "version": "6.0.2", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -12306,7 +11589,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" }, "funding": [ { @@ -12314,33 +11597,33 @@ "type": "github" } ], - "time": "2024-03-02T07:19:19+00:00" + "time": "2024-07-03T04:57:36+00:00" }, { "name": "sebastian/lines-of-code", - "version": "2.0.2", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -12364,7 +11647,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" }, "funding": [ { @@ -12372,34 +11655,34 @@ "type": "github" } ], - "time": "2023-12-21T08:38:20+00:00" + "time": "2024-07-03T04:58:38+00:00" }, { "name": "sebastian/object-enumerator", - "version": "5.0.0", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -12421,7 +11704,8 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" }, "funding": [ { @@ -12429,32 +11713,32 @@ "type": "github" } ], - "time": "2023-02-03T07:08:32+00:00" + "time": "2024-07-03T05:00:13+00:00" }, { "name": "sebastian/object-reflector", - "version": "3.0.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -12476,7 +11760,8 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" }, "funding": [ { @@ -12484,32 +11769,32 @@ "type": "github" } ], - "time": "2023-02-03T07:06:18+00:00" + "time": "2024-07-03T05:01:32+00:00" }, { "name": "sebastian/recursion-context", - "version": "5.0.0", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -12539,7 +11824,8 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" }, "funding": [ { @@ -12547,32 +11833,32 @@ "type": "github" } ], - "time": "2023-02-03T07:05:40+00:00" + "time": "2024-07-03T05:10:34+00:00" }, { "name": "sebastian/type", - "version": "4.0.0", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", + "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -12595,7 +11881,8 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.2" }, "funding": [ { @@ -12603,29 +11890,29 @@ "type": "github" } ], - "time": "2023-02-03T07:10:45+00:00" + "time": "2025-03-18T13:35:50+00:00" }, { "name": "sebastian/version", - "version": "4.0.1", + "version": "5.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -12648,7 +11935,8 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" }, "funding": [ { @@ -12656,111 +11944,43 @@ "type": "github" } ], - "time": "2023-02-07T11:34:05+00:00" - }, - { - "name": "spatie/array-to-xml", - "version": "3.4.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/array-to-xml.git", - "reference": "7dcfc67d60b0272926dabad1ec01f6b8a5fb5e67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/7dcfc67d60b0272926dabad1ec01f6b8a5fb5e67", - "reference": "7dcfc67d60b0272926dabad1ec01f6b8a5fb5e67", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "php": "^8.0" - }, - "require-dev": { - "mockery/mockery": "^1.2", - "pestphp/pest": "^1.21", - "spatie/pest-plugin-snapshots": "^1.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Spatie\\ArrayToXml\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://freek.dev", - "role": "Developer" - } - ], - "description": "Convert an array to xml", - "homepage": "https://github.com/spatie/array-to-xml", - "keywords": [ - "array", - "convert", - "xml" - ], - "support": { - "source": "https://github.com/spatie/array-to-xml/tree/3.4.0" - }, - "funding": [ - { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-12-16T12:45:15+00:00" + "time": "2024-10-09T05:16:32+00:00" }, { "name": "spatie/laravel-ray", - "version": "1.39.0", + "version": "1.40.2", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ray.git", - "reference": "31b601f98590606d20e76b5dd68578dc1642cd2c" + "reference": "1d1b31eb83cb38b41975c37363c7461de6d86b25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/31b601f98590606d20e76b5dd68578dc1642cd2c", - "reference": "31b601f98590606d20e76b5dd68578dc1642cd2c", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/1d1b31eb83cb38b41975c37363c7461de6d86b25", + "reference": "1d1b31eb83cb38b41975c37363c7461de6d86b25", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", "ext-json": "*", - "illuminate/contracts": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0", - "illuminate/database": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0", - "illuminate/queue": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0", - "illuminate/support": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0", + "illuminate/contracts": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "illuminate/database": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "illuminate/queue": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "illuminate/support": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0 || ^12.0", "php": "^7.4 || ^8.0", - "spatie/backtrace": "^1.0", + "spatie/backtrace": "^1.7.1", "spatie/ray": "^1.41.3", "symfony/stopwatch": "4.2 || ^5.1 || ^6.0 || ^7.0", "zbateson/mail-mime-parser": "^1.3.1 || ^2.0 || ^3.0" }, "require-dev": { "guzzlehttp/guzzle": "^7.3", - "laravel/framework": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0", - "orchestra/testbench-core": "^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0", - "pestphp/pest": "^1.22 || ^2.0", + "laravel/framework": "^7.20 || ^8.19 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "orchestra/testbench-core": "^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0", + "pestphp/pest": "^1.22 || ^2.0 || ^3.0", "phpstan/phpstan": "^1.10.57 || ^2.0.2", - "phpunit/phpunit": "^9.3 || ^10.1", - "rector/rector": "dev-main", + "phpunit/phpunit": "^9.3 || ^10.1 || ^11.0.10", + "rector/rector": "^0.19.2 || ^1.0.1 || ^2.0.0", "spatie/pest-plugin-snapshots": "^1.1 || ^2.0", "symfony/var-dumper": "^4.2 || ^5.1 || ^6.0 || ^7.0.3" }, @@ -12800,7 +12020,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.39.0" + "source": "https://github.com/spatie/laravel-ray/tree/1.40.2" }, "funding": [ { @@ -12812,7 +12032,7 @@ "type": "other" } ], - "time": "2024-12-11T09:34:41+00:00" + "time": "2025-03-27T08:26:55+00:00" }, { "name": "spatie/macroable", @@ -12866,16 +12086,16 @@ }, { "name": "spatie/ray", - "version": "1.41.4", + "version": "1.41.6", "source": { "type": "git", "url": "https://github.com/spatie/ray.git", - "reference": "c5dbda0548c1881b30549ccc0b6d485f7471aaa5" + "reference": "ae6e32a54a901544a3d70b12b865900bc240f71c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/c5dbda0548c1881b30549ccc0b6d485f7471aaa5", - "reference": "c5dbda0548c1881b30549ccc0b6d485f7471aaa5", + "url": "https://api.github.com/repos/spatie/ray/zipball/ae6e32a54a901544a3d70b12b865900bc240f71c", + "reference": "ae6e32a54a901544a3d70b12b865900bc240f71c", "shasum": "" }, "require": { @@ -12883,18 +12103,18 @@ "ext-json": "*", "php": "^7.4 || ^8.0", "ramsey/uuid": "^3.0 || ^4.1", - "spatie/backtrace": "^1.1", + "spatie/backtrace": "^1.7.1", "spatie/macroable": "^1.0 || ^2.0", "symfony/stopwatch": "^4.2 || ^5.1 || ^6.0 || ^7.0", "symfony/var-dumper": "^4.2 || ^5.1 || ^6.0 || ^7.0.3" }, "require-dev": { - "illuminate/support": "^7.20 || ^8.18 || ^9.0 || ^10.0 || ^11.0", - "nesbot/carbon": "^2.63", + "illuminate/support": "^7.20 || ^8.18 || ^9.0 || ^10.0 || ^11.0 || ^12.0", + "nesbot/carbon": "^2.63 || ^3.8.4", "pestphp/pest": "^1.22", - "phpstan/phpstan": "^1.10.57 || ^2.0.2", + "phpstan/phpstan": "^1.10.57 || ^2.0.3", "phpunit/phpunit": "^9.5", - "rector/rector": "dev-main", + "rector/rector": "^0.19.2 || ^1.0.1 || ^2.0.0", "spatie/phpunit-snapshot-assertions": "^4.2", "spatie/test-time": "^1.2" }, @@ -12935,7 +12155,7 @@ ], "support": { "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.41.4" + "source": "https://github.com/spatie/ray/tree/1.41.6" }, "funding": [ { @@ -12947,73 +12167,59 @@ "type": "other" } ], - "time": "2024-12-09T11:32:15+00:00" + "time": "2025-03-21T08:56:30+00:00" }, { - "name": "symfony/filesystem", - "version": "v7.2.0", + "name": "staabm/side-effects-detector", + "version": "1.0.5", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" }, "require-dev": { - "symfony/process": "^6.4|^7.0" + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "lib/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.2.0" + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/staabm", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2024-10-25T15:15:23+00:00" + "time": "2024-10-20T05:08:20+00:00" }, { "name": "symfony/polyfill-iconv", @@ -13095,94 +12301,18 @@ ], "time": "2024-09-09T11:45:10+00:00" }, - { - "name": "symfony/polyfill-php84", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "e5493eb51311ab0b1cc2243416613f06ed8f18bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/e5493eb51311ab0b1cc2243416613f06ed8f18bd", - "reference": "e5493eb51311ab0b1cc2243416613f06ed8f18bd", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php84\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T12:04:04+00:00" - }, { "name": "symfony/stopwatch", - "version": "v7.2.2", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df" + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/e46690d5b9d7164a6d061cab1e8d46141b9f49df", - "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", "shasum": "" }, "require": { @@ -13215,7 +12345,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.2.2" + "source": "https://github.com/symfony/stopwatch/tree/v7.2.4" }, "funding": [ { @@ -13231,20 +12361,20 @@ "type": "tidelift" } ], - "time": "2024-12-18T14:28:33+00:00" + "time": "2025-02-24T10:49:57+00:00" }, { "name": "symfony/yaml", - "version": "v7.2.0", + "version": "v7.2.5", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "099581e99f557e9f16b43c5916c26380b54abb22" + "reference": "4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/099581e99f557e9f16b43c5916c26380b54abb22", - "reference": "099581e99f557e9f16b43c5916c26380b54abb22", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912", + "reference": "4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912", "shasum": "" }, "require": { @@ -13287,7 +12417,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.2.0" + "source": "https://github.com/symfony/yaml/tree/v7.2.5" }, "funding": [ { @@ -13303,7 +12433,7 @@ "type": "tidelift" } ], - "time": "2024-10-23T06:56:12+00:00" + "time": "2025-03-03T07:12:39+00:00" }, { "name": "theseer/tokenizer", @@ -13355,116 +12485,6 @@ ], "time": "2024-03-03T12:36:25+00:00" }, - { - "name": "vimeo/psalm", - "version": "5.26.1", - "source": { - "type": "git", - "url": "https://github.com/vimeo/psalm.git", - "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/d747f6500b38ac4f7dfc5edbcae6e4b637d7add0", - "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0", - "shasum": "" - }, - "require": { - "amphp/amp": "^2.4.2", - "amphp/byte-stream": "^1.5", - "composer-runtime-api": "^2", - "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^2.0 || ^3.0", - "dnoegel/php-xdg-base-dir": "^0.1.1", - "ext-ctype": "*", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.1", - "felixfbecker/language-server-protocol": "^1.5.2", - "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.17", - "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", - "sebastian/diff": "^4.0 || ^5.0 || ^6.0", - "spatie/array-to-xml": "^2.17.0 || ^3.0", - "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.0 || ^7.0" - }, - "conflict": { - "nikic/php-parser": "4.17.0" - }, - "provide": { - "psalm/psalm": "self.version" - }, - "require-dev": { - "amphp/phpunit-util": "^2.0", - "bamarni/composer-bin-plugin": "^1.4", - "brianium/paratest": "^6.9", - "ext-curl": "*", - "mockery/mockery": "^1.5", - "nunomaduro/mock-final-classes": "^1.1", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpdoc-parser": "^1.6", - "phpunit/phpunit": "^9.6", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.6", - "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0" - }, - "suggest": { - "ext-curl": "In order to send data to shepherd", - "ext-igbinary": "^2.0.5 is required, used to serialize caching data" - }, - "bin": [ - "psalm", - "psalm-language-server", - "psalm-plugin", - "psalm-refactor", - "psalter" - ], - "type": "project", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev", - "dev-2.x": "2.x-dev", - "dev-3.x": "3.x-dev", - "dev-4.x": "4.x-dev", - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psalm\\": "src/Psalm/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matthew Brown" - } - ], - "description": "A static analysis tool for finding errors in PHP applications", - "keywords": [ - "code", - "inspection", - "php", - "static analysis" - ], - "support": { - "docs": "https://psalm.dev/docs", - "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm" - }, - "time": "2024-09-08T18:53:08+00:00" - }, { "name": "zbateson/mail-mime-parser", "version": "3.0.3", @@ -13689,6 +12709,6 @@ "ext-pgsql": "*", "ext-sodium": "*" }, - "platform-dev": {}, + "platform-dev": [], "plugin-api-version": "2.6.0" } diff --git a/config/app.php b/config/app.php index f4672673..324b513a 100644 --- a/config/app.php +++ b/config/app.php @@ -65,7 +65,7 @@ return [ | */ - 'timezone' => env('APP_TIMEZONE', 'UTC'), + 'timezone' => 'UTC', /* |-------------------------------------------------------------------------- diff --git a/config/database.php b/config/database.php index f8e8dcb8..8910562d 100644 --- a/config/database.php +++ b/config/database.php @@ -37,6 +37,9 @@ return [ 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, ], 'mysql' => [ @@ -145,6 +148,7 @@ return [ 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + 'persistent' => env('REDIS_PERSISTENT', false), ], 'default' => [ diff --git a/config/debugbar.php b/config/debugbar.php index b045f6ca..cb04694e 100644 --- a/config/debugbar.php +++ b/config/debugbar.php @@ -119,7 +119,7 @@ return [ 'full_log' => false, ], 'views' => [ - 'data' => false, //Note: Can slow down the application, because the data can be quite large.. + 'data' => false, // Note: Can slow down the application, because the data can be quite large.. ], 'route' => [ 'label' => true, // show complete route on bar diff --git a/config/filesystems.php b/config/filesystems.php index 44fe9c82..a17a9a47 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -32,8 +32,10 @@ return [ 'local' => [ 'driver' => 'local', - 'root' => storage_path('app'), + 'root' => storage_path('app/private'), + 'serve' => true, 'throw' => false, + 'report' => false, ], 'public' => [ @@ -42,6 +44,7 @@ return [ 'url' => env('APP_URL').'/storage', 'visibility' => 'public', 'throw' => false, + 'report' => false, ], 's3' => [ @@ -54,6 +57,7 @@ return [ 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), 'throw' => false, + 'report' => false, ], ], diff --git a/config/mail.php b/config/mail.php index a4a02fe4..7132144d 100644 --- a/config/mail.php +++ b/config/mail.php @@ -38,14 +38,14 @@ return [ 'smtp' => [ 'transport' => 'smtp', + 'scheme' => env('MAIL_SCHEME'), 'url' => env('MAIL_URL'), 'host' => env('MAIL_HOST', '127.0.0.1'), 'port' => env('MAIL_PORT', 2525), - 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, - 'local_domain' => env('MAIL_EHLO_DOMAIN'), + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url(env('APP_URL', 'http://localhost'), PHP_URL_HOST)), ], 'ses' => [ diff --git a/config/session.php b/config/session.php index 0e22ee41..6ff263bd 100644 --- a/config/session.php +++ b/config/session.php @@ -32,7 +32,7 @@ return [ | */ - 'lifetime' => env('SESSION_LIFETIME', 120), + 'lifetime' => (int) env('SESSION_LIFETIME', 120), 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), diff --git a/database/seeders/NotesTableSeeder.php b/database/seeders/NotesTableSeeder.php index b73c2e34..a9fbab12 100644 --- a/database/seeders/NotesTableSeeder.php +++ b/database/seeders/NotesTableSeeder.php @@ -83,7 +83,7 @@ class NotesTableSeeder extends Seeder ->where('id', $noteWithoutContact->id) ->update(['updated_at' => $now->toDateTimeString()]); - //copy aaron’s profile pic in place + // copy aaron’s profile pic in place $spl = new SplFileInfo(public_path() . '/assets/profile-images/aaronparecki.com'); if ($spl->isDir() === false) { mkdir(public_path() . '/assets/profile-images/aaronparecki.com', 0755); diff --git a/helpers.php b/helpers.php index ed1f9912..0c3dfcfa 100644 --- a/helpers.php +++ b/helpers.php @@ -138,7 +138,7 @@ if (! function_exists('normalize_url')) { $url['query'] = ''; sort($queries); foreach ($queries as $query) { - //lets drop query params we don’t want + // lets drop query params we don’t want $key = stristr($query, '=', true); if (queryKeyIsBanned($key) === false) { $url['query'] .= "{$query}&"; @@ -197,7 +197,7 @@ if (! function_exists('prettyPrintJson')) { case '{': case '[': $level++; - //no break + // no break case ',': $ends_line_level = $level; break; diff --git a/public/index.php b/public/index.php index 1d69f3a2..ee8f07e9 100644 --- a/public/index.php +++ b/public/index.php @@ -1,55 +1,20 @@ make(Kernel::class); - -$response = $kernel->handle( - $request = Request::capture() -)->send(); - -$kernel->terminate($request, $response); +$app->handleRequest(Request::capture()); diff --git a/routes/web.php b/routes/web.php index 7b4030c8..5c8e989d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -64,7 +64,7 @@ Route::domain(config('url.longurl'))->group(function () { Route::middleware(MyAuthMiddleware::class)->prefix('admin')->group(function () { Route::get('/', [HomeController::class, 'welcome']); - //Articles + // Articles Route::prefix('blog')->group(function () { Route::get('/', [AdminArticlesController::class, 'index']); Route::get('/create', [AdminArticlesController::class, 'create']); diff --git a/tests/Browser/ExampleTest.php b/tests/Browser/ExampleTest.php index 1716a41e..37e2a581 100644 --- a/tests/Browser/ExampleTest.php +++ b/tests/Browser/ExampleTest.php @@ -12,7 +12,7 @@ class ExampleTest extends DuskTestCase * * @return void */ - public function testBasicExample() + public function test_basic_example() { $this->browse(function (Browser $browser) { $browser->visit('/') diff --git a/tests/Feature/Admin/AdminHomeControllerTest.php b/tests/Feature/Admin/AdminHomeControllerTest.php index b74b8b25..0fd92cc0 100644 --- a/tests/Feature/Admin/AdminHomeControllerTest.php +++ b/tests/Feature/Admin/AdminHomeControllerTest.php @@ -6,13 +6,14 @@ namespace Tests\Feature\Admin; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class AdminHomeControllerTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function adminHomepageLoads(): void { $user = User::factory()->make(); diff --git a/tests/Feature/Admin/AdminTest.php b/tests/Feature/Admin/AdminTest.php index d69d59a4..753ee054 100644 --- a/tests/Feature/Admin/AdminTest.php +++ b/tests/Feature/Admin/AdminTest.php @@ -5,25 +5,26 @@ declare(strict_types=1); namespace Tests\Feature\Admin; use App\Models\User; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class AdminTest extends TestCase { - /** @test */ + #[Test] public function adminPageRedirectsUnauthorisedUsersToLoginPage(): void { $response = $this->get('/admin'); $response->assertRedirect('/login'); } - /** @test */ + #[Test] public function loginPageLoads(): void { $response = $this->get('/login'); $response->assertViewIs('login'); } - /** @test */ + #[Test] public function loginAttemptWithBadCredentialsFails(): void { $response = $this->post('/login', [ @@ -33,7 +34,7 @@ class AdminTest extends TestCase $response->assertRedirect('/login'); } - /** @test */ + #[Test] public function loginSucceeds(): void { User::factory([ @@ -49,7 +50,7 @@ class AdminTest extends TestCase $response->assertRedirect('/admin'); } - /** @test */ + #[Test] public function whenLoggedInRedirectsToAdminPage(): void { $user = User::factory()->create(); @@ -57,14 +58,14 @@ class AdminTest extends TestCase $response->assertRedirect('/'); } - /** @test */ + #[Test] public function loggedOutUsersSimplyRedirected(): void { $response = $this->get('/logout'); $response->assertRedirect('/'); } - /** @test */ + #[Test] public function loggedInUsersShownLogoutForm(): void { $user = User::factory()->create(); @@ -72,7 +73,7 @@ class AdminTest extends TestCase $response->assertViewIs('logout'); } - /** @test */ + #[Test] public function loggedInUsersCanLogout(): void { $user = User::factory()->create(); diff --git a/tests/Feature/Admin/ArticlesTest.php b/tests/Feature/Admin/ArticlesTest.php index 0139d699..507ed072 100644 --- a/tests/Feature/Admin/ArticlesTest.php +++ b/tests/Feature/Admin/ArticlesTest.php @@ -9,13 +9,14 @@ use App\Models\User; use Faker\Factory; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Http\UploadedFile; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ArticlesTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function adminArticlesPageLoads(): void { $user = User::factory()->make(); @@ -25,7 +26,7 @@ class ArticlesTest extends TestCase $response->assertSeeText('Select article to edit:'); } - /** @test */ + #[Test] public function adminCanLoadFormToCreateArticle(): void { $user = User::factory()->make(); @@ -35,7 +36,7 @@ class ArticlesTest extends TestCase $response->assertSeeText('Title (URL)'); } - /** @test */ + #[Test] public function admiNCanCreateNewArticle(): void { $user = User::factory()->make(); @@ -48,7 +49,7 @@ class ArticlesTest extends TestCase $this->assertDatabaseHas('articles', ['title' => 'Test Title']); } - /** @test */ + #[Test] public function adminCanCreateNewArticleWithFile(): void { $user = User::factory()->make(); @@ -73,7 +74,7 @@ class ArticlesTest extends TestCase ]); } - /** @test */ + #[Test] public function articleCanLoadFormToEditArticle(): void { $user = User::factory()->make(); @@ -86,7 +87,7 @@ class ArticlesTest extends TestCase $response->assertSeeText('This is *my* new blog. It uses `Markdown`.'); } - /** @test */ + #[Test] public function adminCanEditArticle(): void { $user = User::factory()->make(); @@ -104,7 +105,7 @@ class ArticlesTest extends TestCase ]); } - /** @test */ + #[Test] public function adminCanDeleteArticle(): void { $user = User::factory()->make(); diff --git a/tests/Feature/Admin/BioTest.php b/tests/Feature/Admin/BioTest.php index 7f1328ea..6453b037 100644 --- a/tests/Feature/Admin/BioTest.php +++ b/tests/Feature/Admin/BioTest.php @@ -7,13 +7,14 @@ namespace Tests\Feature\Admin; use App\Models\Bio; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class BioTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function adminBiosPageLoads(): void { $user = User::factory()->make(); @@ -23,7 +24,7 @@ class BioTest extends TestCase $response->assertSeeText('Edit bio'); } - /** @test */ + #[Test] public function adminCanCreateBio(): void { $user = User::factory()->make(); @@ -36,7 +37,7 @@ class BioTest extends TestCase $this->assertDatabaseHas('bios', ['content' => 'Bio content']); } - /** @test */ + #[Test] public function adminCanLoadExistingBio(): void { $user = User::factory()->make(); @@ -49,7 +50,7 @@ class BioTest extends TestCase $response->assertSeeText('This is my bio. It uses HTML.'); } - /** @test */ + #[Test] public function adminCanEditBio(): void { $user = User::factory()->make(); diff --git a/tests/Feature/Admin/ClientsTest.php b/tests/Feature/Admin/ClientsTest.php index 463f336a..4afe4a54 100644 --- a/tests/Feature/Admin/ClientsTest.php +++ b/tests/Feature/Admin/ClientsTest.php @@ -7,13 +7,14 @@ namespace Tests\Feature\Admin; use App\Models\MicropubClient; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ClientsTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function clientsPageLoads(): void { $user = User::factory()->make(); @@ -23,7 +24,7 @@ class ClientsTest extends TestCase $response->assertSeeText('Clients'); } - /** @test */ + #[Test] public function adminCanLoadFormToCreateClient(): void { $user = User::factory()->make(); @@ -33,7 +34,7 @@ class ClientsTest extends TestCase $response->assertSeeText('New Client'); } - /** @test */ + #[Test] public function adminCanCreateNewClient(): void { $user = User::factory()->make(); @@ -49,7 +50,7 @@ class ClientsTest extends TestCase ]); } - /** @test */ + #[Test] public function adminCanLoadEditFormForClient(): void { $user = User::factory()->make(); @@ -62,7 +63,7 @@ class ClientsTest extends TestCase $response->assertSee('https://jbl5.dev/notes/new'); } - /** @test */ + #[Test] public function adminCanEditClient(): void { $user = User::factory()->make(); @@ -80,7 +81,7 @@ class ClientsTest extends TestCase ]); } - /** @test */ + #[Test] public function adminCanDeleteClient(): void { $user = User::factory()->make(); diff --git a/tests/Feature/Admin/ContactsTest.php b/tests/Feature/Admin/ContactsTest.php index 5d5f42bf..4b8f632f 100644 --- a/tests/Feature/Admin/ContactsTest.php +++ b/tests/Feature/Admin/ContactsTest.php @@ -12,6 +12,7 @@ use GuzzleHttp\HandlerStack; use GuzzleHttp\Psr7\Response; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Http\UploadedFile; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ContactsTest extends TestCase @@ -27,7 +28,7 @@ class ContactsTest extends TestCase parent::tearDown(); } - /** @test */ + #[Test] public function contactIndexPageLoads(): void { $user = User::factory()->make(); @@ -36,7 +37,7 @@ class ContactsTest extends TestCase $response->assertViewIs('admin.contacts.index'); } - /** @test */ + #[Test] public function contactCreatePageLoads(): void { $user = User::factory()->make(); @@ -45,7 +46,7 @@ class ContactsTest extends TestCase $response->assertViewIs('admin.contacts.create'); } - /** @test */ + #[Test] public function adminCanCreateNewContact(): void { $user = User::factory()->make(); @@ -62,7 +63,7 @@ class ContactsTest extends TestCase ]); } - /** @test */ + #[Test] public function adminCanSeeFormToEditContact(): void { $user = User::factory()->make(); @@ -72,7 +73,7 @@ class ContactsTest extends TestCase $response->assertViewIs('admin.contacts.edit'); } - /** @test */ + #[Test] public function adminCanUpdateContact(): void { $user = User::factory()->make(); @@ -91,7 +92,7 @@ class ContactsTest extends TestCase ]); } - /** @test */ + #[Test] public function adminCanEditContactAndUploadAvatar(): void { copy(__DIR__ . '/../../aaron.png', sys_get_temp_dir() . '/tantek.png'); @@ -114,7 +115,7 @@ class ContactsTest extends TestCase ); } - /** @test */ + #[Test] public function adminCanDeleteContact(): void { $user = User::factory()->make(); @@ -132,7 +133,7 @@ class ContactsTest extends TestCase ]); } - /** @test */ + #[Test] public function adminCanTriggerRetrievalOfRemoteAvatar(): void { $html = <<<'HTML' @@ -161,7 +162,7 @@ class ContactsTest extends TestCase ); } - /** @test */ + #[Test] public function gettingRemoteAvatarFailsGracefullyWithRemoteNotFound(): void { $mock = new MockHandler([ @@ -178,7 +179,7 @@ class ContactsTest extends TestCase $response->assertRedirect('/admin/contacts/' . $contact->id . '/edit'); } - /** @test */ + #[Test] public function gettingRemoteAvatarFailsGracefullyWithRemoteError(): void { $html = <<<'HTML' @@ -201,7 +202,7 @@ class ContactsTest extends TestCase $response->assertRedirect('/admin/contacts/' . $contact->id . '/edit'); } - /** @test */ + #[Test] public function gettingRemoteAvatarFailsGracefullyForContactWithNoHompage(): void { $contact = Contact::create([ diff --git a/tests/Feature/Admin/LikesTest.php b/tests/Feature/Admin/LikesTest.php index b5560c14..151f7b73 100644 --- a/tests/Feature/Admin/LikesTest.php +++ b/tests/Feature/Admin/LikesTest.php @@ -9,13 +9,14 @@ use App\Models\Like; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Queue; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class LikesTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function likesPageLoads(): void { $user = User::factory()->make(); @@ -25,7 +26,7 @@ class LikesTest extends TestCase $response->assertSeeText('Likes'); } - /** @test */ + #[Test] public function likeCreateFormLoads(): void { $user = User::factory()->make(); @@ -35,7 +36,7 @@ class LikesTest extends TestCase $response->assertSeeText('New Like'); } - /** @test */ + #[Test] public function adminCanCreateLike(): void { Queue::fake(); @@ -51,7 +52,7 @@ class LikesTest extends TestCase Queue::assertPushed(ProcessLike::class); } - /** @test */ + #[Test] public function likeEditFormLoads(): void { $user = User::factory()->make(); @@ -62,7 +63,7 @@ class LikesTest extends TestCase $response->assertSee('Edit Like'); } - /** @test */ + #[Test] public function adminCanEditLike(): void { Queue::fake(); @@ -80,7 +81,7 @@ class LikesTest extends TestCase Queue::assertPushed(ProcessLike::class); } - /** @test */ + #[Test] public function adminCanDeleteLike(): void { $like = Like::factory()->create(); diff --git a/tests/Feature/Admin/NotesTest.php b/tests/Feature/Admin/NotesTest.php index ac60004b..ccd3a867 100644 --- a/tests/Feature/Admin/NotesTest.php +++ b/tests/Feature/Admin/NotesTest.php @@ -9,13 +9,14 @@ use App\Models\Note; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Queue; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class NotesTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function notesPageLoads(): void { $user = User::factory()->make(); @@ -24,7 +25,7 @@ class NotesTest extends TestCase $response->assertViewIs('admin.notes.index'); } - /** @test */ + #[Test] public function noteCreatePageLoads(): void { $user = User::factory()->make(); @@ -33,7 +34,7 @@ class NotesTest extends TestCase $response->assertViewIs('admin.notes.create'); } - /** @test */ + #[Test] public function adminCanCreateNewNote(): void { $user = User::factory()->make(); @@ -47,7 +48,7 @@ class NotesTest extends TestCase ]); } - /** @test */ + #[Test] public function noteEditFormLoads(): void { $user = User::factory()->make(); @@ -57,7 +58,7 @@ class NotesTest extends TestCase $response->assertViewIs('admin.notes.edit'); } - /** @test */ + #[Test] public function adminCanEditNote(): void { Queue::fake(); @@ -76,7 +77,7 @@ class NotesTest extends TestCase Queue::assertPushed(SendWebMentions::class); } - /** @test */ + #[Test] public function adminCanDeleteNote(): void { $user = User::factory()->make(); diff --git a/tests/Feature/Admin/PlacesTest.php b/tests/Feature/Admin/PlacesTest.php index 0de5b928..1f711e8e 100644 --- a/tests/Feature/Admin/PlacesTest.php +++ b/tests/Feature/Admin/PlacesTest.php @@ -7,13 +7,14 @@ namespace Tests\Feature\Admin; use App\Models\Place; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class PlacesTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function placesPageLoads(): void { $user = User::factory()->make(); @@ -22,7 +23,7 @@ class PlacesTest extends TestCase $response->assertViewIs('admin.places.index'); } - /** @test */ + #[Test] public function createPlacePageLoads(): void { $user = User::factory()->make(); @@ -31,7 +32,7 @@ class PlacesTest extends TestCase $response->assertViewIs('admin.places.create'); } - /** @test */ + #[Test] public function adminCanCreateNewPlace(): void { $user = User::factory()->make(); @@ -48,7 +49,7 @@ class PlacesTest extends TestCase ]); } - /** @test */ + #[Test] public function editPlacePageLoads(): void { $user = User::factory()->make(); @@ -58,7 +59,7 @@ class PlacesTest extends TestCase $response->assertViewIs('admin.places.edit'); } - /** @test */ + #[Test] public function adminCanUpdatePlace(): void { $user = User::factory()->make(); diff --git a/tests/Feature/ArticlesTest.php b/tests/Feature/ArticlesTest.php index d268fc4d..8e544009 100644 --- a/tests/Feature/ArticlesTest.php +++ b/tests/Feature/ArticlesTest.php @@ -7,20 +7,21 @@ namespace Tests\Feature; use App\Models\Article; use Illuminate\Foundation\Testing\RefreshDatabase; use Jonnybarnes\IndieWeb\Numbers; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ArticlesTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function articlesPageLoads(): void { $response = $this->get('/blog'); $response->assertViewIs('articles.index'); } - /** @test */ + #[Test] public function singleArticlePageLoads() { $article = Article::factory()->create(); @@ -28,7 +29,7 @@ class ArticlesTest extends TestCase $response->assertViewIs('articles.show'); } - /** @test */ + #[Test] public function wrongDateInUrlRedirectsToCorrectDate() { $article = Article::factory()->create(); @@ -36,7 +37,7 @@ class ArticlesTest extends TestCase $response->assertRedirect('/blog/' . date('Y') . '/' . date('m') . '/' . $article->titleurl); } - /** @test */ + #[Test] public function oldUrlsWithIdAreRedirected() { $article = Article::factory()->create(); @@ -45,21 +46,21 @@ class ArticlesTest extends TestCase $response->assertRedirect($article->link); } - /** @test */ + #[Test] public function unknownSlugGetsNotFoundResponse() { $response = $this->get('/blog/' . date('Y') . '/' . date('m') . '/unknown-slug'); $response->assertNotFound(); } - /** @test */ + #[Test] public function unknownArticleIdGetsNotFoundResponse() { $response = $this->get('/blog/s/22'); $response->assertNotFound(); } - /** @test */ + #[Test] public function someUrlsDoNotParseCorrectly(): void { $response = $this->get('/blog/feed.js'); diff --git a/tests/Feature/BookmarksTest.php b/tests/Feature/BookmarksTest.php index a00b8c37..73948237 100644 --- a/tests/Feature/BookmarksTest.php +++ b/tests/Feature/BookmarksTest.php @@ -8,6 +8,7 @@ use App\Jobs\ProcessBookmark; use App\Models\Bookmark; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Queue; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; use Tests\TestToken; @@ -15,14 +16,14 @@ class BookmarksTest extends TestCase { use RefreshDatabase, TestToken; - /** @test */ + #[Test] public function bookmarksPageLoadsWithoutError(): void { $response = $this->get('/bookmarks'); $response->assertViewIs('bookmarks.index'); } - /** @test */ + #[Test] public function singleBookmarkPageLoadsWithoutError(): void { $bookmark = Bookmark::factory()->create(); @@ -30,7 +31,7 @@ class BookmarksTest extends TestCase $response->assertViewIs('bookmarks.show'); } - /** @test */ + #[Test] public function whenBookmarkIsAddedUsingHttpSyntaxCheckJobToTakeScreenshotIsInvoked(): void { Queue::fake(); @@ -48,7 +49,7 @@ class BookmarksTest extends TestCase $this->assertDatabaseHas('bookmarks', ['url' => 'https://example.org/blog-post']); } - /** @test */ + #[Test] public function whenBookmarkIsAddedUsingJsonSyntaxCheckJobToTakeScreenshotIsInvoked(): void { Queue::fake(); @@ -68,7 +69,7 @@ class BookmarksTest extends TestCase $this->assertDatabaseHas('bookmarks', ['url' => 'https://example.org/blog-post']); } - /** @test */ + #[Test] public function whenTheBookmarkIsCreatedCheckNecessaryTagsAreAlsoCreated(): void { Queue::fake(); diff --git a/tests/Feature/ContactsTest.php b/tests/Feature/ContactsTest.php index 211af20b..a773e45f 100644 --- a/tests/Feature/ContactsTest.php +++ b/tests/Feature/ContactsTest.php @@ -6,6 +6,7 @@ namespace Tests\Feature; use App\Models\Contact; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ContactsTest extends TestCase @@ -14,9 +15,8 @@ class ContactsTest extends TestCase /** * Check the `/contacts` page gives a good response. - * - * @test */ + #[Test] public function contactsPageLoadsWithoutError(): void { $response = $this->get('/contacts'); @@ -25,9 +25,8 @@ class ContactsTest extends TestCase /** * Test an individual contact page with default profile image. - * - * @test */ + #[Test] public function contactPageShouldFallbackToDefaultProfilePic(): void { Contact::factory()->create([ @@ -39,9 +38,8 @@ class ContactsTest extends TestCase /** * Test an individual contact page with a specific profile image. - * - * @test */ + #[Test] public function contactPageShouldUseSpecificProfilePicIfPresent(): void { Contact::factory()->create([ @@ -52,7 +50,7 @@ class ContactsTest extends TestCase $response->assertViewHas('image', '/assets/profile-images/aaronparecki.com/image'); } - /** @test */ + #[Test] public function unknownContactReturnsNotFoundResponse(): void { $response = $this->get('/contacts/unknown'); diff --git a/tests/Feature/CorsHeadersTest.php b/tests/Feature/CorsHeadersTest.php index 7a5fdf05..07af166e 100644 --- a/tests/Feature/CorsHeadersTest.php +++ b/tests/Feature/CorsHeadersTest.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Tests\Feature; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; use Tests\TestToken; @@ -11,7 +12,7 @@ class CorsHeadersTest extends TestCase { use TestToken; - /** @test */ + #[Test] public function checkCorsHeadersOnMediaEndpoint(): void { $response = $this->call( @@ -25,7 +26,7 @@ class CorsHeadersTest extends TestCase $response->assertHeader('Access-Control-Allow-Origin', '*'); } - /** @test */ + #[Test] public function checkForNoCorsHeaderOnNonMediaEndpointLinks(): void { $response = $this->get('/blog'); diff --git a/tests/Feature/FeedsTest.php b/tests/Feature/FeedsTest.php index 481218b7..a0704b90 100644 --- a/tests/Feature/FeedsTest.php +++ b/tests/Feature/FeedsTest.php @@ -8,6 +8,7 @@ use App\Models\Article; use App\Models\Note; use App\Models\Place; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class FeedsTest extends TestCase @@ -16,9 +17,8 @@ class FeedsTest extends TestCase /** * Test the blog RSS feed. - * - * @test */ + #[Test] public function blogRssFeedIsPresent(): void { Article::factory()->count(3)->create(); @@ -29,9 +29,8 @@ class FeedsTest extends TestCase /** * Test the notes RSS feed. - * - * @test */ + #[Test] public function notesRssFeedIsPresent(): void { Note::factory()->count(3)->create(); @@ -42,9 +41,8 @@ class FeedsTest extends TestCase /** * Test the blog RSS feed. - * - * @test */ + #[Test] public function blogAtomFeedIsPresent(): void { Article::factory()->count(3)->create(); @@ -53,7 +51,7 @@ class FeedsTest extends TestCase $response->assertOk(); } - /** @test */ + #[Test] public function blogJf2FeedIsPresent(): void { Article::factory()->count(3)->create(); @@ -77,9 +75,8 @@ class FeedsTest extends TestCase /** * Test the notes RSS feed. - * - * @test */ + #[Test] public function notesAtomFeedIsPresent(): void { Note::factory()->count(3)->create(); @@ -90,9 +87,8 @@ class FeedsTest extends TestCase /** * Test the blog JSON feed. - * - * @test */ + #[Test] public function blogJsonFeedIsPresent(): void { Article::factory()->count(3)->create(); @@ -103,9 +99,8 @@ class FeedsTest extends TestCase /** * Test the notes JSON feed. - * - * @test */ + #[Test] public function notesJsonFeedIsPresent(): void { Note::factory()->count(3)->create(); @@ -114,7 +109,7 @@ class FeedsTest extends TestCase $response->assertOk(); } - /** @test */ + #[Test] public function notesJf2FeedIsPresent(): void { Note::factory()->count(3)->create(); @@ -139,9 +134,8 @@ class FeedsTest extends TestCase /** * Each JSON feed item must have one of `content_text` or `content_html`, * and whichever one they have can’t be `null`. - * - * @test */ + #[Test] public function jsonFeedsHaveRequiredAttributes(): void { Note::factory()->count(3)->create(); @@ -161,7 +155,7 @@ class FeedsTest extends TestCase } } - /** @test */ + #[Test] public function jsonNoteFeedLoadsPlaceDataWithoutLazyLoading(): void { $place = Place::factory()->create(); diff --git a/tests/Feature/FrontPageTest.php b/tests/Feature/FrontPageTest.php index 6f24a851..b78191bf 100644 --- a/tests/Feature/FrontPageTest.php +++ b/tests/Feature/FrontPageTest.php @@ -7,13 +7,14 @@ use App\Models\Bookmark; use App\Models\Like; use App\Models\Note; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class FrontPageTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function frontPageLoadsAllContent(): void { Note::factory()->create(['note' => 'Note 1']); diff --git a/tests/Feature/HorizonTest.php b/tests/Feature/HorizonTest.php index e1f5124f..f4566e2f 100644 --- a/tests/Feature/HorizonTest.php +++ b/tests/Feature/HorizonTest.php @@ -3,15 +3,15 @@ namespace Tests\Feature; use App\Models\User; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class HorizonTest extends TestCase { /** * Horizon has its own test suite, here we just test it has been installed successfully. - * - * @test */ + #[Test] public function horizonIsInstalled(): void { $user = User::factory()->create([ diff --git a/tests/Feature/IndieAuthTest.php b/tests/Feature/IndieAuthTest.php index 20c388b7..78ba8130 100644 --- a/tests/Feature/IndieAuthTest.php +++ b/tests/Feature/IndieAuthTest.php @@ -31,8 +31,8 @@ class IndieAuthTest extends TestCase 'authorization_endpoint' => route('indieauth.start'), 'token_endpoint' => route('indieauth.token'), 'code_challenge_methods_supported' => ['S256'], - //'introspection_endpoint' => 'introspection_endpoint', - //'introspection_endpoint_auth_methods_supported' => ['none'], + // 'introspection_endpoint' => 'introspection_endpoint', + // 'introspection_endpoint_auth_methods_supported' => ['none'], ]); } diff --git a/tests/Feature/LikesTest.php b/tests/Feature/LikesTest.php index 45c24e63..3f13724a 100644 --- a/tests/Feature/LikesTest.php +++ b/tests/Feature/LikesTest.php @@ -14,6 +14,7 @@ use GuzzleHttp\Psr7\Response; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Queue; use Jonnybarnes\WebmentionsParser\Authorship; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; use Tests\TestToken; @@ -22,14 +23,14 @@ class LikesTest extends TestCase use RefreshDatabase; use TestToken; - /** @test */ + #[Test] public function likesPageHasCorrectView(): void { $response = $this->get('/likes'); $response->assertViewIs('likes.index'); } - /** @test */ + #[Test] public function singleLikePageHasCorrectView(): void { $like = Like::factory()->create(); @@ -37,7 +38,7 @@ class LikesTest extends TestCase $response->assertViewIs('likes.show'); } - /** @test */ + #[Test] public function checkLikeCreatedFromMicropubApiRequests(): void { Queue::fake(); @@ -57,7 +58,7 @@ class LikesTest extends TestCase $this->assertDatabaseHas('likes', ['url' => 'https://example.org/blog-post']); } - /** @test */ + #[Test] public function checkLikeCreatedFromMicropubWebRequests(): void { Queue::fake(); @@ -75,7 +76,7 @@ class LikesTest extends TestCase $this->assertDatabaseHas('likes', ['url' => 'https://example.org/blog-post']); } - /** @test */ + #[Test] public function likeWithSimpleAuthor(): void { $like = new Like; @@ -114,7 +115,7 @@ class LikesTest extends TestCase $this->assertEquals('Fred Bloggs', Like::find($id)->author_name); } - /** @test */ + #[Test] public function likeWithHCard(): void { $like = new Like; @@ -157,7 +158,7 @@ class LikesTest extends TestCase $this->assertEquals('Fred Bloggs', Like::find($id)->author_name); } - /** @test */ + #[Test] public function likeWithoutMicroformats(): void { $like = new Like; @@ -193,7 +194,7 @@ class LikesTest extends TestCase $this->assertNull(Like::find($id)->author_name); } - /** @test */ + #[Test] public function likeThatIsATweet(): void { $like = new Like; @@ -219,10 +220,9 @@ class LikesTest extends TestCase 'author_url' => 'https://twitter.com/jonnybarnes', 'html' => '
HTML of the tweet embed
', ]; - $codebirdMock = $this->getMockBuilder(Codebird::class) - ->addMethods(['statuses_oembed']) - ->getMock(); - $codebirdMock->method('statuses_oembed') + $codebirdMock = $this->createPartialMock(Codebird::class, ['__call']); + $codebirdMock->method('__call') + ->with('statuses_oembed', $this->anything()) ->willReturn($info); $this->app->instance(Codebird::class, $codebirdMock); @@ -233,7 +233,7 @@ class LikesTest extends TestCase $this->assertEquals('Jonny Barnes', Like::find($id)->author_name); } - /** @test */ + #[Test] public function noErrorForFailureToPosseWithBridgy(): void { $like = new Like; @@ -257,10 +257,9 @@ class LikesTest extends TestCase 'author_url' => 'https://twitter.com/jonnybarnes', 'html' => '
HTML of the tweet embed
', ]; - $codebirdMock = $this->getMockBuilder(Codebird::class) - ->addMethods(['statuses_oembed']) - ->getMock(); - $codebirdMock->method('statuses_oembed') + $codebirdMock = $this->createPartialMock(Codebird::class, ['__call']); + $codebirdMock->method('__call') + ->with('statuses_oembed', $this->anything()) ->willReturn($info); $this->app->instance(Codebird::class, $codebirdMock); @@ -271,7 +270,7 @@ class LikesTest extends TestCase $this->assertEquals('Jonny Barnes', Like::find($id)->author_name); } - /** @test */ + #[Test] public function unknownLikeGivesNotFoundResponse(): void { $response = $this->get('/likes/202'); diff --git a/tests/Feature/MicropubControllerTest.php b/tests/Feature/MicropubControllerTest.php index 06935d55..2cd75fc3 100644 --- a/tests/Feature/MicropubControllerTest.php +++ b/tests/Feature/MicropubControllerTest.php @@ -15,6 +15,7 @@ use Carbon\Carbon; use Faker\Factory; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Queue; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; use Tests\TestToken; @@ -23,7 +24,7 @@ class MicropubControllerTest extends TestCase use RefreshDatabase; use TestToken; - /** @test */ + #[Test] public function micropubGetRequestWithoutTokenReturnsErrorResponse(): void { $response = $this->get('/api/post'); @@ -31,7 +32,7 @@ class MicropubControllerTest extends TestCase $response->assertJsonFragment(['error_description' => 'No access token was provided in the request']); } - /** @test */ + #[Test] public function micropubGetRequestWithoutValidTokenReturnsErrorResponse(): void { $response = $this->get('/api/post', ['HTTP_Authorization' => 'Bearer abc123']); @@ -42,9 +43,8 @@ class MicropubControllerTest extends TestCase /** * Test a GET request for the micropub endpoint with a valid token gives a * 200 response. Check token information is also returned in the response. - * - * @test */ + #[Test] public function micropubGetRequestWithValidTokenReturnsOkResponse(): void { $response = $this->get('/api/post', ['HTTP_Authorization' => 'Bearer ' . $this->getToken()]); @@ -52,14 +52,14 @@ class MicropubControllerTest extends TestCase $response->assertJsonFragment(['response' => 'token']); } - /** @test */ + #[Test] public function micropubClientsCanRequestSyndicationTargetsCanBeEmpty(): void { $response = $this->get('/api/post?q=syndicate-to', ['HTTP_Authorization' => 'Bearer ' . $this->getToken()]); $response->assertJsonFragment(['syndicate-to' => []]); } - /** @test */ + #[Test] public function micropubClientsCanRequestSyndicationTargetsPopulatesFromModel(): void { $syndicationTarget = SyndicationTarget::factory()->create(); @@ -67,7 +67,7 @@ class MicropubControllerTest extends TestCase $response->assertJsonFragment(['uid' => $syndicationTarget->uid]); } - /** @test */ + #[Test] public function micropubClientsCanRequestKnownNearbyPlaces(): void { Place::factory()->create([ @@ -80,8 +80,6 @@ class MicropubControllerTest extends TestCase } /** - * @test - * * @todo Add uncertainty parameter * public function micropubClientsCanRequestKnownNearbyPlacesWithUncertaintyParameter(): void @@ -89,22 +87,21 @@ class MicropubControllerTest extends TestCase $response = $this->get('/api/post?q=geo:53.5,-2.38', ['HTTP_Authorization' => 'Bearer ' . $this->getToken()]); $response->assertJson(['places' => [['slug' => 'the-bridgewater-pub']]]); }*/ - - /** @test */ + #[Test] public function returnEmptyResultWhenMicropubClientRequestsKnownNearbyPlaces(): void { $response = $this->get('/api/post?q=geo:1.23,4.56', ['HTTP_Authorization' => 'Bearer ' . $this->getToken()]); $response->assertJson(['places' => []]); } - /** @test */ + #[Test] public function micropubClientCanRequestEndpointConfig(): void { $response = $this->get('/api/post?q=config', ['HTTP_Authorization' => 'Bearer ' . $this->getToken()]); $response->assertJsonFragment(['media-endpoint' => route('media-endpoint')]); } - /** @test */ + #[Test] public function micropubClientCanCreateNewNote(): void { $faker = Factory::create(); @@ -123,7 +120,7 @@ class MicropubControllerTest extends TestCase $this->assertDatabaseHas('notes', ['note' => $note]); } - /** @test */ + #[Test] public function micropubClientCanRequestTheNewNoteIsSyndicatedToMastodonAndBluesky(): void { Queue::fake(); @@ -157,7 +154,7 @@ class MicropubControllerTest extends TestCase Queue::assertPushed(SyndicateNoteToBluesky::class); } - /** @test */ + #[Test] public function micropubClientsCanCreateNewPlaces(): void { $response = $this->post( @@ -173,7 +170,7 @@ class MicropubControllerTest extends TestCase $this->assertDatabaseHas('places', ['slug' => 'the-barton-arms']); } - /** @test */ + #[Test] public function micropubClientsCanCreateNewPlacesWithOldLocationSyntax(): void { $response = $this->post( @@ -190,7 +187,7 @@ class MicropubControllerTest extends TestCase $this->assertDatabaseHas('places', ['slug' => 'the-barton-arms']); } - /** @test */ + #[Test] public function micropubClientWebRequestWithInvalidTokenReturnsErrorResponse(): void { $response = $this->post( @@ -205,7 +202,7 @@ class MicropubControllerTest extends TestCase $response->assertJson(['error' => 'invalid_token']); } - /** @test */ + #[Test] public function micropubClientWebRequestWithTokenWithoutAnyScopesReturnsErrorResponse(): void { $response = $this->post( @@ -220,7 +217,7 @@ class MicropubControllerTest extends TestCase $response->assertJson(['error_description' => 'The provided token has no scopes']); } - /** @test */ + #[Test] public function micropubClientWebRequestWithTokenWithoutCreateScopesReturnsErrorResponse(): void { $response = $this->post( @@ -238,9 +235,8 @@ class MicropubControllerTest extends TestCase /** * Test a valid micropub requests using JSON syntax creates a new note. - * - * @test */ + #[Test] public function micropubClientApiRequestCreatesNewNote(): void { Queue::fake(); @@ -286,9 +282,8 @@ class MicropubControllerTest extends TestCase /** * Test a valid micropub requests using JSON syntax creates a new note with * existing self-created place. - * - * @test */ + #[Test] public function micropubClientApiRequestCreatesNewNoteWithExistingPlaceInLocationData(): void { $place = new Place; @@ -317,9 +312,8 @@ class MicropubControllerTest extends TestCase /** * Test a valid micropub requests using JSON syntax creates a new note with * a new place defined in the location block. - * - * @test */ + #[Test] public function micropubClientApiRequestCreatesNewNoteWithNewPlaceInLocationData(): void { $faker = Factory::create(); @@ -353,9 +347,8 @@ class MicropubControllerTest extends TestCase /** * Test a valid micropub requests using JSON syntax creates a new note without * a new place defined in the location block if there is missing data. - * - * @test */ + #[Test] public function micropubClientApiRequestCreatesNewNoteWithoutNewPlaceInLocationData(): void { $faker = Factory::create(); @@ -387,9 +380,8 @@ class MicropubControllerTest extends TestCase /** * Test a micropub requests using JSON syntax without a token returns an * error. Also check the message. - * - * @test */ + #[Test] public function micropubClientApiRequestWithoutTokenReturnsError(): void { $faker = Factory::create(); @@ -414,9 +406,8 @@ class MicropubControllerTest extends TestCase /** * Test a micropub requests using JSON syntax without a valid token returns * an error. Also check the message. - * - * @test */ + #[Test] public function micropubClientApiRequestWithTokenWithInsufficientPermissionReturnsError(): void { $faker = Factory::create(); @@ -439,7 +430,7 @@ class MicropubControllerTest extends TestCase ->assertStatus(401); } - /** @test */ + #[Test] public function micropubClientApiRequestForUnsupportedPostTypeReturnsError(): void { $response = $this->postJson( @@ -460,7 +451,7 @@ class MicropubControllerTest extends TestCase ->assertStatus(500); } - /** @test */ + #[Test] public function micropubClientApiRequestCreatesNewPlace(): void { $faker = Factory::create(); @@ -480,7 +471,7 @@ class MicropubControllerTest extends TestCase ->assertStatus(201); } - /** @test */ + #[Test] public function micropubClientApiRequestCreatesNewPlaceWithUncertaintyParameter(): void { $faker = Factory::create(); @@ -500,7 +491,7 @@ class MicropubControllerTest extends TestCase ->assertStatus(201); } - /** @test */ + #[Test] public function micropubClientApiRequestUpdatesExistingNote(): void { $note = Note::factory()->create(); @@ -520,7 +511,7 @@ class MicropubControllerTest extends TestCase ->assertStatus(200); } - /** @test */ + #[Test] public function micropubClientApiRequestUpdatesNoteSyndicationLinks(): void { $note = Note::factory()->create(); @@ -547,7 +538,7 @@ class MicropubControllerTest extends TestCase ]); } - /** @test */ + #[Test] public function micropubClientApiRequestAddsImageToNote(): void { $note = Note::factory()->create(); @@ -570,7 +561,7 @@ class MicropubControllerTest extends TestCase ]); } - /** @test */ + #[Test] public function micropubClientApiRequestReturnsErrorTryingToUpdateNonNoteModel(): void { $response = $this->postJson( @@ -589,7 +580,7 @@ class MicropubControllerTest extends TestCase ->assertStatus(500); } - /** @test */ + #[Test] public function micropubClientApiRequestReturnsErrorTryingToUpdateNonExistingNote(): void { $response = $this->postJson( @@ -608,7 +599,7 @@ class MicropubControllerTest extends TestCase ->assertStatus(404); } - /** @test */ + #[Test] public function micropubClientApiRequestReturnsErrorWhenTryingToUpdateUnsupportedProperty(): void { $note = Note::factory()->create(); @@ -628,7 +619,7 @@ class MicropubControllerTest extends TestCase ->assertStatus(500); } - /** @test */ + #[Test] public function micropubClientApiRequestWithTokenWithInsufficientScopeReturnsError(): void { $response = $this->postJson( @@ -647,7 +638,7 @@ class MicropubControllerTest extends TestCase ->assertJson(['error' => 'insufficient_scope']); } - /** @test */ + #[Test] public function micropubClientApiRequestCanReplaceNoteSyndicationTargets(): void { $note = Note::factory()->create(); @@ -674,7 +665,7 @@ class MicropubControllerTest extends TestCase ]); } - /** @test */ + #[Test] public function micropubClientWebRequestCanEncodeTokenWithinTheForm(): void { $faker = Factory::create(); @@ -692,7 +683,7 @@ class MicropubControllerTest extends TestCase $this->assertDatabaseHas('notes', ['note' => $note]); } - /** @test */ + #[Test] public function micropubClientApiRequestCreatesArticlesWhenItIncludesTheNameProperty(): void { $faker = Factory::create(); diff --git a/tests/Feature/MicropubMediaTest.php b/tests/Feature/MicropubMediaTest.php index 527116cf..c38483f1 100644 --- a/tests/Feature/MicropubMediaTest.php +++ b/tests/Feature/MicropubMediaTest.php @@ -11,6 +11,7 @@ use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\Queue; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; use Tests\TestToken; @@ -19,7 +20,7 @@ class MicropubMediaTest extends TestCase use RefreshDatabase; use TestToken; - /** @test */ + #[Test] public function emptyResponseForLastUploadWhenNoneFound(): void { // Make sure there’s no media @@ -33,7 +34,7 @@ class MicropubMediaTest extends TestCase $response->assertJson(['url' => null]); } - /** @test */ + #[Test] public function getRequestWithInvalidTokenReturnsErrorResponse(): void { $response = $this->get( @@ -44,7 +45,7 @@ class MicropubMediaTest extends TestCase $response->assertJsonFragment(['error_description' => 'The provided token did not pass validation']); } - /** @test */ + #[Test] public function getRequestWithTokenWithoutScopeReturnsErrorResponse(): void { $response = $this->get( @@ -55,7 +56,7 @@ class MicropubMediaTest extends TestCase $response->assertJsonFragment(['error_description' => 'The provided token has no scopes']); } - /** @test */ + #[Test] public function getRequestWithTokenWithInsufficientScopeReturnsErrorResponse(): void { $response = $this->get( @@ -66,7 +67,7 @@ class MicropubMediaTest extends TestCase $response->assertJsonFragment(['error_description' => 'The token’s scope does not have the necessary requirements.']); } - /** @test */ + #[Test] public function emptyGetRequestWithTokenReceivesOkResponse(): void { $response = $this->get( @@ -77,7 +78,7 @@ class MicropubMediaTest extends TestCase $response->assertJson(['status' => 'OK']); } - /** @test */ + #[Test] public function clientCanListLastUpload(): void { Queue::fake(); @@ -102,11 +103,11 @@ class MicropubMediaTest extends TestCase $lastUploadResponse->assertJson(['url' => $response->headers->get('Location')]); // now remove file - unlink(storage_path('app/media/') . $filename); - $this->removeDirIfEmpty(storage_path('app/media')); + unlink(storage_path('app/private/media/') . $filename); + $this->removeDirIfEmpty(storage_path('app/private/media')); } - /** @test */ + #[Test] public function clientCanSourceUploads(): void { Queue::fake(); @@ -134,11 +135,11 @@ class MicropubMediaTest extends TestCase ]]]); // now remove file - unlink(storage_path('app/media/') . $filename); - $this->removeDirIfEmpty(storage_path('app/media')); + unlink(storage_path('app/private/media/') . $filename); + $this->removeDirIfEmpty(storage_path('app/private/media')); } - /** @test */ + #[Test] public function clientCanSourceUploadsWithLimit(): void { Queue::fake(); @@ -168,11 +169,11 @@ class MicropubMediaTest extends TestCase $this->assertCount(1, json_decode($sourceUploadResponse->getContent(), true)['items']); // now remove file - unlink(storage_path('app/media/') . $filename); - $this->removeDirIfEmpty(storage_path('app/media')); + unlink(storage_path('app/private/media/') . $filename); + $this->removeDirIfEmpty(storage_path('app/private/media')); } - /** @test */ + #[Test] public function mediaEndpointUploadRequiresFile(): void { $response = $this->post( @@ -188,7 +189,7 @@ class MicropubMediaTest extends TestCase ]); } - /** @test */ + #[Test] public function errorResponseForUnknownQValue(): void { $response = $this->get( @@ -199,7 +200,7 @@ class MicropubMediaTest extends TestCase $response->assertJson(['error' => 'invalid_request']); } - /** @test */ + #[Test] public function optionsRequestReturnsCorsResponse(): void { $response = $this->options('/api/media'); @@ -208,7 +209,7 @@ class MicropubMediaTest extends TestCase $response->assertHeader('access-control-allow-origin', '*'); } - /** @test */ + #[Test] public function mediaEndpointRequestWithInvalidTokenReturns400Response(): void { $response = $this->post( @@ -220,7 +221,7 @@ class MicropubMediaTest extends TestCase $response->assertJsonFragment(['error_description' => 'The provided token did not pass validation']); } - /** @test */ + #[Test] public function mediaEndpointRequestWithTokenWithNoScopeReturns400Response(): void { $response = $this->post( @@ -232,7 +233,7 @@ class MicropubMediaTest extends TestCase $response->assertJsonFragment(['error_description' => 'The provided token has no scopes']); } - /** @test */ + #[Test] public function mediaEndpointRequestWithInsufficientTokenScopesReturns401Response(): void { $response = $this->post( @@ -246,7 +247,7 @@ class MicropubMediaTest extends TestCase ]); } - /** @test */ + #[Test] public function mediaEndpointUploadFile(): void { Queue::fake(); @@ -265,11 +266,11 @@ class MicropubMediaTest extends TestCase Queue::assertPushed(ProcessMedia::class); Storage::disk('local')->assertExists($filename); // now remove file - unlink(storage_path('app/') . $filename); - $this->removeDirIfEmpty(storage_path('app/media')); + unlink(storage_path('app/private/') . $filename); + $this->removeDirIfEmpty(storage_path('app/private/media')); } - /** @test */ + #[Test] public function mediaEndpointUploadAudioFile(): void { Queue::fake(); @@ -288,11 +289,11 @@ class MicropubMediaTest extends TestCase Queue::assertPushed(ProcessMedia::class); Storage::disk('local')->assertExists($filename); // now remove file - unlink(storage_path('app/') . $filename); - $this->removeDirIfEmpty(storage_path('app/media')); + unlink(storage_path('app/private/') . $filename); + $this->removeDirIfEmpty(storage_path('app/private/media')); } - /** @test */ + #[Test] public function mediaEndpointUploadVideoFile(): void { Queue::fake(); @@ -311,11 +312,11 @@ class MicropubMediaTest extends TestCase Queue::assertPushed(ProcessMedia::class); Storage::disk('local')->assertExists($filename); // now remove file - unlink(storage_path('app/') . $filename); - $this->removeDirIfEmpty(storage_path('app/media')); + unlink(storage_path('app/private/') . $filename); + $this->removeDirIfEmpty(storage_path('app/private/media')); } - /** @test */ + #[Test] public function mediaEndpointUploadDocumentFile(): void { Queue::fake(); @@ -333,11 +334,11 @@ class MicropubMediaTest extends TestCase Queue::assertPushed(ProcessMedia::class); Storage::disk('local')->assertExists($filename); // now remove file - unlink(storage_path('app/') . $filename); - $this->removeDirIfEmpty(storage_path('app/media')); + unlink(storage_path('app/private/') . $filename); + $this->removeDirIfEmpty(storage_path('app/private/media')); } - /** @test */ + #[Test] public function mediaEndpointUploadInvalidFileReturnsError(): void { Queue::fake(); diff --git a/tests/Feature/NotesControllerTest.php b/tests/Feature/NotesControllerTest.php index bf1c315f..43e5a050 100644 --- a/tests/Feature/NotesControllerTest.php +++ b/tests/Feature/NotesControllerTest.php @@ -6,6 +6,7 @@ namespace Tests\Feature; use App\Models\Note; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class NotesControllerTest extends TestCase @@ -15,9 +16,8 @@ class NotesControllerTest extends TestCase /** * Test the `/notes` page returns 200, this should * mean the database is being hit. - * - * @test */ + #[Test] public function notesPageLoads(): void { $response = $this->get('/notes'); @@ -26,9 +26,8 @@ class NotesControllerTest extends TestCase /** * Test a specific note. - * - * @test */ + #[Test] public function specificNotePageLoads(): void { $note = Note::factory()->create(); @@ -46,9 +45,8 @@ class NotesControllerTest extends TestCase /** * Test that `/note/{decID}` redirects to `/notes/{nb60id}`. - * - * @test */ + #[Test] public function oldNoteUrlsRedirect(): void { $note = Note::factory()->create(); @@ -58,23 +56,22 @@ class NotesControllerTest extends TestCase /** * Visit the tagged page and check the tag view data. - * - * @test */ + #[Test] public function taggedNotesPageLoads(): void { $response = $this->get('/notes/tagged/beer'); $response->assertViewHas('tag', 'beer'); } - /** @test */ + #[Test] public function unknownNoteGives404(): void { $response = $this->get('/notes/112233'); $response->assertNotFound(); } - /** @test */ + #[Test] public function checkNoteIdNotOutOfRange(): void { $response = $this->get('/notes/photou-photologo'); diff --git a/tests/Feature/OwnYourGramTest.php b/tests/Feature/OwnYourGramTest.php index 076f114b..a1ff9026 100644 --- a/tests/Feature/OwnYourGramTest.php +++ b/tests/Feature/OwnYourGramTest.php @@ -6,6 +6,7 @@ namespace Tests\Feature; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Carbon; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; use Tests\TestToken; @@ -14,7 +15,7 @@ class OwnYourGramTest extends TestCase use RefreshDatabase; use TestToken; - /** @test */ + #[Test] public function postingInstagramUrlSavesMediaPath(): void { $response = $this->json( diff --git a/tests/Feature/ParseCachedWebMentionsTest.php b/tests/Feature/ParseCachedWebMentionsTest.php index ca829491..ae0e9b3c 100644 --- a/tests/Feature/ParseCachedWebMentionsTest.php +++ b/tests/Feature/ParseCachedWebMentionsTest.php @@ -9,6 +9,7 @@ use Illuminate\FileSystem\FileSystem; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Artisan; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ParseCachedWebMentionsTest extends TestCase @@ -25,7 +26,7 @@ class ParseCachedWebMentionsTest extends TestCase copy(__DIR__ . '/../tantek.html', storage_path('HTML') . '/http/tantek.com/index.html'); } - /** @test */ + #[Test] public function parseWebmentionHtml(): void { $webmentionAaron = WebMention::factory()->create([ diff --git a/tests/Feature/PlacesTest.php b/tests/Feature/PlacesTest.php index ba7c69d8..82a3e280 100644 --- a/tests/Feature/PlacesTest.php +++ b/tests/Feature/PlacesTest.php @@ -6,6 +6,7 @@ namespace Tests\Feature; use App\Models\Place; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class PlacesTest extends TestCase @@ -14,9 +15,8 @@ class PlacesTest extends TestCase /** * Test the `/places` page for OK response. - * - * @test */ + #[Test] public function placesPageLoads(): void { $response = $this->get('/places'); @@ -25,9 +25,8 @@ class PlacesTest extends TestCase /** * Test a specific place. - * - * @test */ + #[Test] public function singlePlacePageLoads(): void { $place = Place::factory()->create(); @@ -35,7 +34,7 @@ class PlacesTest extends TestCase $response->assertViewHas('place', $place); } - /** @test */ + #[Test] public function unknownPlaceGives404() { $response = $this->get('/places/unknown'); diff --git a/tests/Feature/ReDownloadWebMentionsTest.php b/tests/Feature/ReDownloadWebMentionsTest.php index 6d46548f..f3ea0b6f 100644 --- a/tests/Feature/ReDownloadWebMentionsTest.php +++ b/tests/Feature/ReDownloadWebMentionsTest.php @@ -9,13 +9,14 @@ use App\Models\WebMention; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Queue; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ReDownloadWebMentionsTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function downloadJobGetsQueued(): void { Queue::fake(); diff --git a/tests/Feature/SearchTest.php b/tests/Feature/SearchTest.php index a0dd43bc..582e8042 100644 --- a/tests/Feature/SearchTest.php +++ b/tests/Feature/SearchTest.php @@ -5,11 +5,12 @@ declare(strict_types=1); namespace Tests\Feature; use App\Models\Note; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class SearchTest extends TestCase { - /** @test */ + #[Test] public function searchEndpointReturnsResults(): void { Note::factory(10)->create(); diff --git a/tests/Feature/ShortURLsControllerTest.php b/tests/Feature/ShortURLsControllerTest.php index 55774b91..989f3b5b 100644 --- a/tests/Feature/ShortURLsControllerTest.php +++ b/tests/Feature/ShortURLsControllerTest.php @@ -4,32 +4,33 @@ declare(strict_types=1); namespace Tests\Feature; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ShortURLsControllerTest extends TestCase { - /** @test */ + #[Test] public function shortDomainRedirectsToLongDomain(): void { $response = $this->get('https://' . config('url.shorturl')); $response->assertRedirect(config('app.url')); } - /** @test */ + #[Test] public function shortDomainSlashAtRedirectsToTwitter(): void { $response = $this->get('https://' . config('url.shorturl') . '/@'); $response->assertRedirect('https://twitter.com/jonnybarnes'); } - /** @test */ + #[Test] public function shortDomainSlashTRedirectsToLongDomainSlashNotes(): void { $response = $this->get('https://' . config('url.shorturl') . '/t/E'); $response->assertRedirect(config('app.url') . '/notes/E'); } - /** @test */ + #[Test] public function shortDomainSlashBRedirectsToLongDomainSlashBlog(): void { $response = $this->get('https://' . config('url.shorturl') . '/b/1'); diff --git a/tests/Feature/SwarmTest.php b/tests/Feature/SwarmTest.php index 7283aa50..84642009 100644 --- a/tests/Feature/SwarmTest.php +++ b/tests/Feature/SwarmTest.php @@ -8,6 +8,7 @@ use App\Jobs\SendWebMentions; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Queue; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; use Tests\TestToken; @@ -18,9 +19,8 @@ class SwarmTest extends TestCase /** * Given a check in to Foursquare, this is the content Ownyourswarm will post to us. - * - * @test */ + #[Test] public function mockedOwnyourswarmRequestWithFoursquare(): void { Queue::fake(); @@ -66,9 +66,8 @@ class SwarmTest extends TestCase /** * This request would actually come from another client than OwnYourSwarm, but we’re testing * OpenStreetMap data. - * - * @test */ + #[Test] public function mockedOwnyourswarmRequestWithOsm(): void { Queue::fake(); @@ -109,9 +108,8 @@ class SwarmTest extends TestCase /** * This request would actually come from another client than OwnYourSwarm, as that would include a Foursquare URL - * - * @test */ + #[Test] public function mockedOwnyourswarmRequestWithoutKnownExternalUrl(): void { Queue::fake(); @@ -150,7 +148,7 @@ class SwarmTest extends TestCase Queue::assertPushed(SendWebMentions::class); } - /** @test */ + #[Test] public function mockedOwnyourswarmRequestWithNoTextContent(): void { $response = $this->json( @@ -187,7 +185,7 @@ class SwarmTest extends TestCase $this->get($response->__get('headers')->get('location'))->assertSee('📍'); } - /** @test */ + #[Test] public function mockedOwnyourswarmRequestSavesJustThePostWhenAnErrorOccursInTheCheckinData(): void { Queue::fake(); @@ -225,7 +223,7 @@ class SwarmTest extends TestCase Queue::assertPushed(SendWebMentions::class); } - /** @test */ + #[Test] public function mockedOwnyourswarmRequestWithHAdrLocation(): void { Queue::fake(); @@ -271,7 +269,7 @@ class SwarmTest extends TestCase Queue::assertPushed(SendWebMentions::class); } - /** @test */ + #[Test] public function ownyourswarmCheckinTestUsingRealData(): void { $response = $this->json( diff --git a/tests/Feature/TokenServiceTest.php b/tests/Feature/TokenServiceTest.php index f9b3773c..24f581b3 100644 --- a/tests/Feature/TokenServiceTest.php +++ b/tests/Feature/TokenServiceTest.php @@ -9,6 +9,7 @@ use DateTimeImmutable; use Lcobucci\JWT\Configuration; use Lcobucci\JWT\Signer\Key\InMemory; use Lcobucci\JWT\Validation\RequiredConstraintsViolated; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class TokenServiceTest extends TestCase @@ -16,9 +17,8 @@ class TokenServiceTest extends TestCase /** * Given the token is dependent on a random nonce, the time of creation and * the APP_KEY, to test, we shall create a token, and then verify it. - * - * @test */ + #[Test] public function tokenserviceCreatesAndValidatesTokens(): void { $tokenService = new TokenService; @@ -37,11 +37,7 @@ class TokenServiceTest extends TestCase $this->assertSame($data, $validData); } - /** - * @test - * - * @throws \Exception - */ + #[Test] public function tokensWithDifferentSigningKeyThrowsException(): void { $this->expectException(RequiredConstraintsViolated::class); diff --git a/tests/Feature/WebMentionsControllerTest.php b/tests/Feature/WebMentionsControllerTest.php index 27e9d0eb..d9482450 100644 --- a/tests/Feature/WebMentionsControllerTest.php +++ b/tests/Feature/WebMentionsControllerTest.php @@ -8,13 +8,14 @@ use App\Jobs\ProcessWebMention; use App\Models\Note; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Queue; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class WebMentionsControllerTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function webmentionEndpointCanServeBrowserRequest(): void { $response = $this->get('/webmention'); @@ -23,9 +24,8 @@ class WebMentionsControllerTest extends TestCase /** * Test webmentions without source and target are rejected. - * - * @test */ + #[Test] public function webmentionsWithoutSourceAndTargetAreRejected(): void { $response = $this->call('POST', '/webmention', ['source' => 'https://example.org/post/123']); @@ -36,9 +36,8 @@ class WebMentionsControllerTest extends TestCase * Test invalid target gives a 400 response. * * In this case an invalid target is a URL that doesn’t exist on our domain. - * - * @test */ + #[Test] public function invalidTargetReturnsErrorResponse(): void { $response = $this->call('POST', '/webmention', [ @@ -50,9 +49,8 @@ class WebMentionsControllerTest extends TestCase /** * Test blog target gets a 501 response due to our not supporting it. - * - * @test */ + #[Test] public function blogTargetReturns501Response(): void { $response = $this->call('POST', '/webmention', [ @@ -64,9 +62,8 @@ class WebMentionsControllerTest extends TestCase /** * Test that a non-existent note gives a 400 response. - * - * @test */ + #[Test] public function nonexistentNoteReturnsErrorResponse(): void { $response = $this->call('POST', '/webmention', [ @@ -76,7 +73,7 @@ class WebMentionsControllerTest extends TestCase $response->assertStatus(400); } - /** @test */ + #[Test] public function legitimateWebmentionTriggersProcessWebmentionJob(): void { Queue::fake(); diff --git a/tests/Unit/ArticlesTest.php b/tests/Unit/ArticlesTest.php index e214d9d1..a43a7006 100644 --- a/tests/Unit/ArticlesTest.php +++ b/tests/Unit/ArticlesTest.php @@ -7,13 +7,14 @@ namespace Tests\Unit; use App\Models\Article; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Carbon; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ArticlesTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function titleSlugIsGeneratedAutomatically(): void { $article = new Article; @@ -24,7 +25,7 @@ class ArticlesTest extends TestCase $this->assertEquals('my-title', $article->titleurl); } - /** @test */ + #[Test] public function markdownContentIsConverted(): void { $article = new Article; @@ -33,7 +34,7 @@ class ArticlesTest extends TestCase $this->assertEquals('

Some markdown

' . PHP_EOL, $article->html); } - /** @test */ + #[Test] public function weGenerateTheDifferentTimeAttributes(): void { $article = Article::create([ @@ -47,7 +48,7 @@ class ArticlesTest extends TestCase $this->assertEquals($article->pubdate, $article->updated_at->toRSSString()); } - /** @test */ + #[Test] public function weGenerateTheArticleLinkFromTheSlug(): void { $article = Article::create([ @@ -62,7 +63,7 @@ class ArticlesTest extends TestCase ); } - /** @test */ + #[Test] public function dateScopeReturnsExpectedArticles(): void { Article::factory()->create([ @@ -81,7 +82,7 @@ class ArticlesTest extends TestCase $this->assertCount(2, $emptyScope); } - /** @test */ + #[Test] public function dateScopeReturnsExpectedArticlesForDecember(): void { Article::factory()->create([ diff --git a/tests/Unit/BookmarksTest.php b/tests/Unit/BookmarksTest.php index 3a4aabd7..0f30267b 100644 --- a/tests/Unit/BookmarksTest.php +++ b/tests/Unit/BookmarksTest.php @@ -10,14 +10,15 @@ use GuzzleHttp\Client; use GuzzleHttp\Handler\MockHandler; use GuzzleHttp\HandlerStack; use GuzzleHttp\Psr7\Response; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class BookmarksTest extends TestCase { - /** - * @test + /* + * @\test * - * @group puppeteer + * @\group puppeteer * public function takeScreenshotOfDuckDuckGo() { @@ -25,7 +26,7 @@ class BookmarksTest extends TestCase $this->assertTrue(file_exists(public_path() . '/assets/img/bookmarks/' . $uuid . '.png')); }*/ - /** @test */ + #[Test] public function archiveLinkMethodCallsArchiveService(): void { $mock = new MockHandler([ @@ -38,7 +39,7 @@ class BookmarksTest extends TestCase $this->assertEquals('/web/1234/example.org', $url); } - /** @test */ + #[Test] public function archiveLinkMethodThrowsAnExceptionOnError(): void { $this->expectException(InternetArchiveException::class); @@ -52,7 +53,7 @@ class BookmarksTest extends TestCase (new BookmarkService)->getArchiveLink('https://example.org'); } - /** @test */ + #[Test] public function archiveLinkMethodThrowsAnExceptionIfNoLocationReturned(): void { $this->expectException(InternetArchiveException::class); diff --git a/tests/Unit/HelpersTest.php b/tests/Unit/HelpersTest.php index 9c3af608..601296ff 100644 --- a/tests/Unit/HelpersTest.php +++ b/tests/Unit/HelpersTest.php @@ -4,28 +4,27 @@ declare(strict_types=1); namespace Tests\Unit; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class HelpersTest extends TestCase { - /** @test */ + #[Test] public function normalizeUrlIsIdempotent(): void { $input = 'http://example.org:80/index.php?foo=bar&baz=1'; $this->assertEquals(normalize_url(normalize_url($input)), normalize_url($input)); } - /** - * @test - * - * @dataProvider urlProvider - */ + #[Test] + #[DataProvider('urlProvider')] public function normalizeUrlOnDataProvider(string $input, string $output): void { $this->assertEquals($output, normalize_url($input)); } - /** @test */ + #[Test] public function prettyPrintJson(): void { // phpcs:disable Generic.Files.LineLength.TooLong diff --git a/tests/Unit/Jobs/AddClientToDatabaseJobTest.php b/tests/Unit/Jobs/AddClientToDatabaseJobTest.php index fb8cd504..af07901b 100644 --- a/tests/Unit/Jobs/AddClientToDatabaseJobTest.php +++ b/tests/Unit/Jobs/AddClientToDatabaseJobTest.php @@ -6,13 +6,14 @@ namespace Tests\Unit\Jobs; use App\Jobs\AddClientToDatabase; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class AddClientToDatabaseJobTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function clientIsAddedToDatabaseByJob(): void { $job = new AddClientToDatabase('https://example.org/client'); diff --git a/tests/Unit/Jobs/DownloadWebMentionJobTest.php b/tests/Unit/Jobs/DownloadWebMentionJobTest.php index 03e15a82..6e11a49c 100644 --- a/tests/Unit/Jobs/DownloadWebMentionJobTest.php +++ b/tests/Unit/Jobs/DownloadWebMentionJobTest.php @@ -10,6 +10,7 @@ use GuzzleHttp\Handler\MockHandler; use GuzzleHttp\HandlerStack; use GuzzleHttp\Psr7\Response; use Illuminate\FileSystem\FileSystem; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class DownloadWebMentionJobTest extends TestCase @@ -23,7 +24,7 @@ class DownloadWebMentionJobTest extends TestCase parent::tearDown(); } - /** @test */ + #[Test] public function htmlIsSavedByJob(): void { $this->assertFileDoesNotExist(storage_path('HTML/https')); @@ -51,7 +52,7 @@ class DownloadWebMentionJobTest extends TestCase $this->assertFileDoesNotExist(storage_path('HTML/https/example.org/reply') . '/1.' . date('Y-m-d') . '.backup'); } - /** @test */ + #[Test] public function htmlAndBackupSavedByJob(): void { $this->assertFileDoesNotExist(storage_path('HTML/https')); @@ -86,7 +87,7 @@ class DownloadWebMentionJobTest extends TestCase $this->assertFileExists(storage_path('HTML/https/example.org/reply') . '/1.' . date('Y-m-d') . '.backup'); } - /** @test */ + #[Test] public function indexHtmlFileIsSavedByJobForUrlsEndingWithSlash(): void { $this->assertFileDoesNotExist(storage_path('HTML/https')); diff --git a/tests/Unit/Jobs/ProcessBookmarkJobTest.php b/tests/Unit/Jobs/ProcessBookmarkJobTest.php index 4078712e..f433270b 100644 --- a/tests/Unit/Jobs/ProcessBookmarkJobTest.php +++ b/tests/Unit/Jobs/ProcessBookmarkJobTest.php @@ -11,13 +11,14 @@ use App\Models\Bookmark; use App\Services\BookmarkService; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Queue; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ProcessBookmarkJobTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function archiveLinkIsSavedByJobAndScreenshotJobIsQueued(): void { Queue::fake(); @@ -38,7 +39,7 @@ class ProcessBookmarkJobTest extends TestCase Queue::assertPushed(SaveScreenshot::class); } - /** @test */ + #[Test] public function archiveLinkSavedAsNullWhenExceptionThrown(): void { Queue::fake(); diff --git a/tests/Unit/Jobs/ProcessMediaJobTest.php b/tests/Unit/Jobs/ProcessMediaJobTest.php index ae870d18..daecc00e 100644 --- a/tests/Unit/Jobs/ProcessMediaJobTest.php +++ b/tests/Unit/Jobs/ProcessMediaJobTest.php @@ -7,11 +7,12 @@ namespace Tests\Unit\Jobs; use App\Jobs\ProcessMedia; use Illuminate\Support\Facades\Storage; use Intervention\Image\ImageManager; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ProcessMediaJobTest extends TestCase { - /** @test */ + #[Test] public function nonMediaFilesAreNotSaved(): void { $manager = app()->make(ImageManager::class); @@ -22,7 +23,7 @@ class ProcessMediaJobTest extends TestCase $this->assertFileDoesNotExist(storage_path('app/media/') . 'file.txt'); } - /** @test */ + #[Test] public function smallImagesAreNotResized(): void { $manager = app()->make(ImageManager::class); @@ -37,7 +38,7 @@ class ProcessMediaJobTest extends TestCase Storage::disk('local')->delete('public/media'); } - /** @test */ + #[Test] public function largeImagesHaveSmallerImagesCreated(): void { $manager = app()->make(ImageManager::class); @@ -45,16 +46,17 @@ class ProcessMediaJobTest extends TestCase $job = new ProcessMedia('test-image.jpg'); $job->handle($manager); - Storage::disk('local')->assertExists('public/media/test-image.jpg'); - Storage::disk('local')->assertExists('public/media/test-image-small.jpg'); - Storage::disk('local')->assertExists('public/media/test-image-medium.jpg'); + // These need to look in public disk + Storage::disk('public')->assertExists('media/test-image.jpg'); + Storage::disk('public')->assertExists('media/test-image-small.jpg'); + Storage::disk('public')->assertExists('media/test-image-medium.jpg'); $this->assertFileDoesNotExist(storage_path('app/media/') . 'test-image.jpg'); // Tidy up files created by the job - Storage::disk('local')->delete('public/media/test-image.jpg'); - Storage::disk('local')->delete('public/media/test-image-small.jpg'); - Storage::disk('local')->delete('public/media/test-image-medium.jpg'); + Storage::disk('public')->delete('media/test-image.jpg'); + Storage::disk('public')->delete('media/test-image-small.jpg'); + Storage::disk('public')->delete('media/test-image-medium.jpg'); $this->removeDirIfEmpty(storage_path('app/public/media')); $this->removeDirIfEmpty(storage_path('app/media')); } diff --git a/tests/Unit/Jobs/ProcessWebMentionJobTest.php b/tests/Unit/Jobs/ProcessWebMentionJobTest.php index e9b24bde..1bf56621 100644 --- a/tests/Unit/Jobs/ProcessWebMentionJobTest.php +++ b/tests/Unit/Jobs/ProcessWebMentionJobTest.php @@ -17,6 +17,7 @@ use Illuminate\FileSystem\FileSystem; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Queue; use Jonnybarnes\WebmentionsParser\Parser; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class ProcessWebMentionJobTest extends TestCase @@ -32,7 +33,7 @@ class ProcessWebMentionJobTest extends TestCase parent::tearDown(); } - /** @test */ + #[Test] public function failureGettingWebmentionThrowsAnException(): void { $this->expectException(RemoteContentNotFoundException::class); @@ -51,7 +52,7 @@ class ProcessWebMentionJobTest extends TestCase $job->handle($parser, $client); } - /** @test */ + #[Test] public function newWebmentionGetsSavedByJob(): void { Queue::fake(); @@ -83,7 +84,7 @@ class ProcessWebMentionJobTest extends TestCase ]); } - /** @test */ + #[Test] public function existingWebmentionGetsUpdatedByJob(): void { Queue::fake(); @@ -120,7 +121,7 @@ class ProcessWebMentionJobTest extends TestCase ]); } - /** @test */ + #[Test] public function webmentionReplyGetsDeletedWhenReplyToValueChanges(): void { $parser = new Parser; @@ -157,7 +158,7 @@ class ProcessWebMentionJobTest extends TestCase ]); } - /** @test */ + #[Test] public function webmentionLikeGetsDeletedWhenLikeOfValueChanges(): void { $parser = new Parser; @@ -194,7 +195,7 @@ class ProcessWebMentionJobTest extends TestCase ]); } - /** @test */ + #[Test] public function webmentionRepostGetsDeletedWhenRepostOfValueChanges(): void { $parser = new Parser; diff --git a/tests/Unit/Jobs/SaveProfileImageJobTest.php b/tests/Unit/Jobs/SaveProfileImageJobTest.php index 83f476e1..3c418a7a 100644 --- a/tests/Unit/Jobs/SaveProfileImageJobTest.php +++ b/tests/Unit/Jobs/SaveProfileImageJobTest.php @@ -11,6 +11,7 @@ use GuzzleHttp\HandlerStack; use GuzzleHttp\Psr7\Response; use Jonnybarnes\WebmentionsParser\Authorship; use Jonnybarnes\WebmentionsParser\Exceptions\AuthorshipParserException; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class SaveProfileImageJobTest extends TestCase @@ -24,7 +25,7 @@ class SaveProfileImageJobTest extends TestCase parent::tearDown(); } - /** @test */ + #[Test] public function authorshipAlgorithmReturnsNullOnException(): void { $mf = ['items' => []]; @@ -36,7 +37,7 @@ class SaveProfileImageJobTest extends TestCase $this->assertNull($job->handle($authorship)); } - /** @test */ + #[Test] public function weDoNotProcessTwitterImages(): void { $mf = ['items' => []]; @@ -54,7 +55,7 @@ class SaveProfileImageJobTest extends TestCase $this->assertNull($job->handle($authorship)); } - /** @test */ + #[Test] public function remoteAuthorImagesAreSavedLocally(): void { $mock = new MockHandler([ @@ -79,7 +80,7 @@ class SaveProfileImageJobTest extends TestCase $this->assertFileExists(public_path() . '/assets/profile-images/example.org/image'); } - /** @test */ + #[Test] public function localDefaultAuthorImageIsUsedAsFallback(): void { $mock = new MockHandler([ @@ -107,7 +108,7 @@ class SaveProfileImageJobTest extends TestCase ); } - /** @test */ + #[Test] public function weGetUrlFromPhotoObjectIfAltTextIsProvided(): void { $mock = new MockHandler([ @@ -135,7 +136,7 @@ class SaveProfileImageJobTest extends TestCase $this->assertFileExists(public_path() . '/assets/profile-images/example.org/image'); } - /** @test */ + #[Test] public function useFirstUrlIfMultipleHomepagesAreProvided(): void { $mock = new MockHandler([ diff --git a/tests/Unit/Jobs/SaveScreenshotJobTest.php b/tests/Unit/Jobs/SaveScreenshotJobTest.php index 74f7f2e7..b2c3ef15 100644 --- a/tests/Unit/Jobs/SaveScreenshotJobTest.php +++ b/tests/Unit/Jobs/SaveScreenshotJobTest.php @@ -13,13 +13,14 @@ use GuzzleHttp\Middleware; use GuzzleHttp\Psr7\Response; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Storage; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class SaveScreenshotJobTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function screenshotIsSavedByJob(): void { Storage::fake('public'); @@ -84,7 +85,7 @@ class SaveScreenshotJobTest extends TestCase Storage::disk('public')->assertExists('/assets/img/bookmarks/' . $bookmark->screenshot . '.png'); } - /** @test */ + #[Test] public function screenshotJobHandlesUnfinishedTasks(): void { Storage::fake('public'); diff --git a/tests/Unit/Jobs/SendWebMentionJobTest.php b/tests/Unit/Jobs/SendWebMentionJobTest.php index f52686be..9eef719b 100644 --- a/tests/Unit/Jobs/SendWebMentionJobTest.php +++ b/tests/Unit/Jobs/SendWebMentionJobTest.php @@ -10,11 +10,12 @@ use GuzzleHttp\Client; use GuzzleHttp\Handler\MockHandler; use GuzzleHttp\HandlerStack; use GuzzleHttp\Psr7\Response; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class SendWebMentionJobTest extends TestCase { - /** @test */ + #[Test] public function discoverWebmentionEndpointOnOwnDomain(): void { $note = new Note; @@ -23,7 +24,7 @@ class SendWebMentionJobTest extends TestCase $this->assertNull($job->discoverWebmentionEndpoint('/notes/tagged/test')); } - /** @test */ + #[Test] public function discoverWebmentionEndpointFromHeaderLinks(): void { $url = 'https://example.org/webmention'; @@ -38,7 +39,7 @@ class SendWebMentionJobTest extends TestCase $this->assertEquals($url, $job->discoverWebmentionEndpoint('https://example.org')); } - /** @test */ + #[Test] public function discoverWebmentionEndpointFromHtmlLinkTags(): void { $html = ''; @@ -56,7 +57,7 @@ class SendWebMentionJobTest extends TestCase ); } - /** @test */ + #[Test] public function discoverWebmentionEndpointFromLegacyHtmlMarkup(): void { $html = ''; @@ -74,14 +75,14 @@ class SendWebMentionJobTest extends TestCase ); } - /** @test */ + #[Test] public function ensureEmptyNoteDoesNotTriggerAnyActions(): void { $job = new SendWebMentions(new Note); $this->assertNull($job->handle()); } - /** @test */ + #[Test] public function weResolveRelativeUris(): void { $uri = '/blog/post'; @@ -90,7 +91,7 @@ class SendWebMentionJobTest extends TestCase $this->assertEquals('https://example.org/blog/post', $job->resolveUri($uri, $base)); } - /** @test */ + #[Test] public function weSendAWebmentionForANote(): void { $html = ''; @@ -110,7 +111,7 @@ class SendWebMentionJobTest extends TestCase $this->assertTrue(true); } - /** @test */ + #[Test] public function linksInNotesCanNotSupportWebmentions(): void { $mock = new MockHandler([ diff --git a/tests/Unit/Jobs/SyndicateNoteToBlueskyJobTest.php b/tests/Unit/Jobs/SyndicateNoteToBlueskyJobTest.php index e1e3fb8c..2dbae153 100644 --- a/tests/Unit/Jobs/SyndicateNoteToBlueskyJobTest.php +++ b/tests/Unit/Jobs/SyndicateNoteToBlueskyJobTest.php @@ -11,13 +11,14 @@ use GuzzleHttp\HandlerStack; use GuzzleHttp\Middleware; use GuzzleHttp\Psr7\Response; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class SyndicateNoteToBlueskyJobTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function weSyndicateNotesToBluesky(): void { config(['bridgy.bluesky_token' => 'test']); @@ -38,7 +39,7 @@ class SyndicateNoteToBlueskyJobTest extends TestCase ]); } - /** @test */ + #[Test] public function weSyndicateTheOriginalMarkdownToBluesky(): void { config(['bridgy.bluesky_token' => 'test']); diff --git a/tests/Unit/Jobs/SyndicateNoteToMastodonJobTest.php b/tests/Unit/Jobs/SyndicateNoteToMastodonJobTest.php index d90261e7..d7215223 100644 --- a/tests/Unit/Jobs/SyndicateNoteToMastodonJobTest.php +++ b/tests/Unit/Jobs/SyndicateNoteToMastodonJobTest.php @@ -11,13 +11,14 @@ use GuzzleHttp\HandlerStack; use GuzzleHttp\Middleware; use GuzzleHttp\Psr7\Response; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class SyndicateNoteToMastodonJobTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function weSyndicateNotesToMastodon(): void { config(['bridgy.mastodon_token' => 'test']); @@ -38,7 +39,7 @@ class SyndicateNoteToMastodonJobTest extends TestCase ]); } - /** @test */ + #[Test] public function weSyndicateTheOriginalMarkdown(): void { config(['bridgy.mastodon_token' => 'test']); diff --git a/tests/Unit/LikesTest.php b/tests/Unit/LikesTest.php index dc243967..073d1ca4 100644 --- a/tests/Unit/LikesTest.php +++ b/tests/Unit/LikesTest.php @@ -6,13 +6,14 @@ namespace Tests\Unit; use App\Models\Like; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class LikesTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function weCanSetTheAuthorUrl(): void { $like = new Like; @@ -20,7 +21,7 @@ class LikesTest extends TestCase $this->assertEquals('https://joe.bloggs', $like->author_url); } - /** @test */ + #[Test] public function weDoNotModifyPlainTextContent(): void { $like = new Like; @@ -31,7 +32,7 @@ class LikesTest extends TestCase $this->assertEquals('some plaintext content', $like->content); } - /** @test */ + #[Test] public function weCanHandleBlankContent(): void { $like = new Like; @@ -42,7 +43,7 @@ class LikesTest extends TestCase $this->assertNull($like->content); } - /** @test */ + #[Test] public function htmlLikeContentIsFiltered(): void { $htmlEvil = <<<'HTML' diff --git a/tests/Unit/MediaTest.php b/tests/Unit/MediaTest.php index df1a22cf..4dd4c256 100644 --- a/tests/Unit/MediaTest.php +++ b/tests/Unit/MediaTest.php @@ -7,13 +7,14 @@ namespace Tests\Unit; use App\Models\Media; use App\Models\Note; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class MediaTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function getTheNoteThatMediaInstanceBelongsTo(): void { $media = Media::factory()->for(Note::factory())->create(); @@ -21,7 +22,7 @@ class MediaTest extends TestCase $this->assertInstanceOf(Note::class, $media->note); } - /** @test */ + #[Test] public function absoluteUrlsAreReturnedUnmodified(): void { $absoluteUrl = 'https://instagram-cdn.com/image/uuid'; diff --git a/tests/Unit/MicropubClientsTest.php b/tests/Unit/MicropubClientsTest.php index 26d6dca4..d3bc0e01 100644 --- a/tests/Unit/MicropubClientsTest.php +++ b/tests/Unit/MicropubClientsTest.php @@ -7,13 +7,14 @@ namespace Tests\Unit; use App\Models\MicropubClient; use Illuminate\Database\Eloquent\Collection; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class MicropubClientsTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function weCanGetNotesRelatingToClient(): void { $client = MicropubClient::factory()->make(); diff --git a/tests/Unit/NotesTest.php b/tests/Unit/NotesTest.php index dfd532e6..2f157c8a 100644 --- a/tests/Unit/NotesTest.php +++ b/tests/Unit/NotesTest.php @@ -16,6 +16,7 @@ use GuzzleHttp\Psr7\Response; use Illuminate\Filesystem\Filesystem; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Cache; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class NotesTest extends TestCase @@ -25,9 +26,8 @@ class NotesTest extends TestCase /** * Test the getNoteAttribute method. This will then also call the * relevant sub-methods. - * - * @test */ + #[Test] public function getNoteAttributeMethodCallsSubMethods(): void { // phpcs:ignore @@ -40,9 +40,8 @@ class NotesTest extends TestCase /** * Look for a default image in the contact’s h-card for the makeHCards method. - * - * @test */ + #[Test] public function defaultImageUsedAsFallbackInMakehcardsMethod(): void { // phpcs:ignore @@ -70,9 +69,8 @@ class NotesTest extends TestCase /** * Look for a specific profile image in the contact’s h-card. - * - * @test */ + #[Test] public function specificProfileImageUsedInMakehcardsMethod(): void { Contact::factory()->create([ @@ -106,9 +104,8 @@ class NotesTest extends TestCase /** * Look for twitter URL when there’s no associated contact. - * - * @test */ + #[Test] public function twitterLinkIsCreatedWhenNoContactFound(): void { $expected = '

Hi @bob

' . PHP_EOL; @@ -118,7 +115,7 @@ class NotesTest extends TestCase $this->assertEquals($expected, $note->note); } - /** @test */ + #[Test] public function shorturlMethodReturnsExpectedValue(): void { $note = Note::factory()->make(); @@ -126,7 +123,7 @@ class NotesTest extends TestCase $this->assertEquals(config('url.shorturl') . '/notes/E', $note->shorturl); } - /** @test */ + #[Test] public function weGetLatitudeLongitudeValuesOfAssociatedPlaceOfNote(): void { $place = Place::factory()->create([ @@ -140,7 +137,7 @@ class NotesTest extends TestCase $this->assertEquals('-2.3805', $note->longitude); } - /** @test */ + #[Test] public function whenNoAssociatedPlaceWeGetNullForLatitudeLongitudeValues(): void { $note = Note::factory()->create(); @@ -148,7 +145,7 @@ class NotesTest extends TestCase $this->assertNull($note->longitude); } - /** @test */ + #[Test] public function weCanGetAddressAttributeForAssociatedPlace(): void { $place = Place::factory()->create([ @@ -162,7 +159,7 @@ class NotesTest extends TestCase $this->assertEquals('The Bridgewater Pub', $note->address); } - /** @test */ + #[Test] public function deletingNotesAlsoDeletesTagsViaTheEventObserver(): void { // first we’ll create a temporary note to delete @@ -177,7 +174,7 @@ class NotesTest extends TestCase ]); } - /** @test */ + #[Test] public function saveBlankNotesAsNull(): void { $note = new Note(['note' => '']); @@ -185,7 +182,7 @@ class NotesTest extends TestCase $this->assertNull($note->note); } - /** @test */ + #[Test] public function reverseGeocodeAnAttraction(): void { // phpcs:disable Generic.Files.LineLength.TooLong @@ -210,7 +207,7 @@ class NotesTest extends TestCase ); } - /** @test */ + #[Test] public function reverseGeocodeASuburb(): void { // phpcs:disable Generic.Files.LineLength.TooLong @@ -235,7 +232,7 @@ class NotesTest extends TestCase ); } - /** @test */ + #[Test] public function reverseGeocodeACity(): void { // Note I’ve modified this JSON response so it only contains the @@ -262,7 +259,7 @@ class NotesTest extends TestCase ); } - /** @test */ + #[Test] public function reverseGeocodeACounty(): void { // Note I’ve removed everything below county to test for queries where @@ -286,7 +283,7 @@ class NotesTest extends TestCase $this->assertEquals('Kent, UK', $address); } - /** @test */ + #[Test] public function reverseGeocodeACountry(): void { // Note I’ve removed everything below country to test for querires where @@ -310,7 +307,7 @@ class NotesTest extends TestCase $this->assertEquals('Ireland', $address); } - /** @test */ + #[Test] public function addImageElementToNoteContentWhenMediaAssociated(): void { $media = Media::factory()->create([ @@ -327,7 +324,7 @@ class NotesTest extends TestCase $this->assertEquals($expected, $note->content); } - /** @test */ + #[Test] public function addVideoElementToNoteContentWhenMediaAssociated(): void { $media = Media::factory()->create([ @@ -344,7 +341,7 @@ class NotesTest extends TestCase $this->assertEquals($expected, $note->content); } - /** @test */ + #[Test] public function addAudioElementToNoteContentWhenMediaAssociated(): void { $media = Media::factory()->create([ @@ -362,10 +359,9 @@ class NotesTest extends TestCase } /** - * @test - * * @todo Why do we need to provide text? */ + #[Test] public function provideTextForBlankContent(): void { $note = new Note; @@ -382,9 +378,8 @@ class NotesTest extends TestCase $this->assertNull($note->twitter); }*/ - - /** @test */ - public function markdownContentGetsConverted(): void + #[Test] + public function markdown_content_gets_converted(): void { $note = Note::factory()->create([ 'note' => 'The best search engine? https://duckduckgo.com', @@ -398,9 +393,8 @@ class NotesTest extends TestCase /** * For now, just reply on a cached object instead of actually querying Twitter. - * - * @test */ + #[Test] public function checkInReplyToIsTwitterLink(): void { $tempContent = (object) [ @@ -415,7 +409,7 @@ class NotesTest extends TestCase $this->assertEquals($tempContent, $note->twitter); } - /** @test */ + #[Test] public function latitudeAndLongitudeCanBeParsedFromPlainLocation(): void { $note = Note::factory()->create([ @@ -426,7 +420,7 @@ class NotesTest extends TestCase $this->assertSame(4.56, $note->longitude); } - /** @test */ + #[Test] public function addressAttributeCanBeRetrievedFromPlainLocation(): void { Cache::put('1.23,4.56', 'Antarctica'); @@ -438,7 +432,7 @@ class NotesTest extends TestCase $this->assertSame('Antarctica', $note->address); } - /** @test */ + #[Test] public function mastodonUsernamesAreParsedCorrectly(): void { $expected = '

Hi @freekmurze@phpc.social how are you?

' . PHP_EOL; diff --git a/tests/Unit/PlacesTest.php b/tests/Unit/PlacesTest.php index e9daadda..b3f0ed37 100644 --- a/tests/Unit/PlacesTest.php +++ b/tests/Unit/PlacesTest.php @@ -10,13 +10,14 @@ use App\Services\PlaceService; use Illuminate\Database\Eloquent\Collection; use Illuminate\Foundation\Testing\RefreshDatabase; use InvalidArgumentException; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class PlacesTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function canRetrieveAssociatedNotes(): void { $place = Place::factory()->create(); @@ -27,7 +28,7 @@ class PlacesTest extends TestCase $this->assertCount(5, $place->notes); } - /** @test */ + #[Test] public function nearMethodReturnsCollection(): void { Place::factory()->create([ @@ -39,7 +40,7 @@ class PlacesTest extends TestCase $this->assertEquals('the-bridgewater-pub', $nearby[0]->slug); } - /** @test */ + #[Test] public function getLongurl(): void { $place = Place::factory()->create([ @@ -48,7 +49,7 @@ class PlacesTest extends TestCase $this->assertEquals(config('app.url') . '/places/the-bridgewater-pub', $place->longurl); } - /** @test */ + #[Test] public function getShorturl() { $place = Place::factory()->create([ @@ -57,7 +58,7 @@ class PlacesTest extends TestCase $this->assertEquals(config('url.shorturl') . '/places/the-bridgewater-pub', $place->shorturl); } - /** @test */ + #[Test] public function getUri(): void { $place = Place::factory()->create([ @@ -66,7 +67,7 @@ class PlacesTest extends TestCase $this->assertEquals(config('app.url') . '/places/the-bridgewater-pub', $place->uri); } - /** @test */ + #[Test] public function placeServiceReturnsExistingPlaceBasedOnExternalUrlsSearch(): void { Place::factory(10)->create(); @@ -86,7 +87,7 @@ class PlacesTest extends TestCase $this->assertCount(11, Place::all()); } - /** @test */ + #[Test] public function placeServiceRequiresNameWhenCreatingNewPlace(): void { $this->expectException(InvalidArgumentException::class); @@ -96,7 +97,7 @@ class PlacesTest extends TestCase $service->createPlaceFromCheckin(['foo' => 'bar']); } - /** @test */ + #[Test] public function placeServiceRequiresLatitudeWhenCreatingNewPlace(): void { $this->expectException(InvalidArgumentException::class); @@ -106,7 +107,7 @@ class PlacesTest extends TestCase $service->createPlaceFromCheckin(['properties' => ['name' => 'bar']]); } - /** @test */ + #[Test] public function placeServiceCanUpdateExternalUrls(): void { $place = Place::factory()->create([ diff --git a/tests/Unit/TagsTest.php b/tests/Unit/TagsTest.php index 3592024a..4d9dcdd0 100644 --- a/tests/Unit/TagsTest.php +++ b/tests/Unit/TagsTest.php @@ -8,13 +8,15 @@ use App\Models\Bookmark; use App\Models\Note; use App\Models\Tag; use Illuminate\Foundation\Testing\RefreshDatabase; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class TagsTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function canGetAssociatedNotes(): void { $note = Note::factory()->create(); @@ -23,7 +25,7 @@ class TagsTest extends TestCase $this->assertCount(1, $tag->notes); } - /** @test */ + #[Test] public function canGetAssociatedBookmarks(): void { $bookmark = Bookmark::factory()->create(); @@ -32,11 +34,8 @@ class TagsTest extends TestCase $this->assertCount(1, $tag->bookmarks); } - /** - * @test - * - * @dataProvider tagsProvider - */ + #[Test] + #[DataProvider('tagsProvider')] public function canNormalize(string $input, string $expected): void { $this->assertSame($expected, Tag::normalize($input)); diff --git a/tests/Unit/WebMentionTest.php b/tests/Unit/WebMentionTest.php index a63bc01e..7a6ce471 100644 --- a/tests/Unit/WebMentionTest.php +++ b/tests/Unit/WebMentionTest.php @@ -10,13 +10,14 @@ use Codebird\Codebird; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Cache; +use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; class WebMentionTest extends TestCase { use RefreshDatabase; - /** @test */ + #[Test] public function commentableMethodLinksToNotes(): void { $note = Note::factory()->create(); @@ -27,7 +28,7 @@ class WebMentionTest extends TestCase $this->assertInstanceOf(Note::class, $webmention->commentable); } - /** @test */ + #[Test] public function publishedAttributeUsesUpdatedAtWhenNoRelevantMf2Data(): void { $webmention = new WebMention; @@ -36,7 +37,7 @@ class WebMentionTest extends TestCase $this->assertEquals($updated_at->toDayDateTimeString(), $webmention->published); } - /** @test */ + #[Test] public function publishedAttributeUsesUpdatedAtWhenErrorParsingMf2Data(): void { $webmention = new WebMention; @@ -54,7 +55,7 @@ class WebMentionTest extends TestCase $this->assertEquals($updated_at->toDayDateTimeString(), $webmention->published); } - /** @test */ + #[Test] public function createPhotoLinkDoesNothingWithGenericUrlAndNoLocallySavedImage(): void { $webmention = new WebMention; @@ -63,7 +64,7 @@ class WebMentionTest extends TestCase $this->assertEquals($expected, $webmention->createPhotoLink($homepage)); } - /** @test */ + #[Test] public function createPhotoLinkReturnsLocallySavedImageUrlIfItExists(): void { $webmention = new WebMention; @@ -72,7 +73,7 @@ class WebMentionTest extends TestCase $this->assertEquals($expected, $webmention->createPhotoLink($homepage)); } - /** @test */ + #[Test] public function createPhotoLinkDealsWithSpecialCaseOfDirectTwitterPhotoLinks(): void { $webmention = new WebMention; @@ -81,7 +82,7 @@ class WebMentionTest extends TestCase $this->assertEquals($expected, $webmention->createPhotoLink($twitterProfileImage)); } - /** @test */ + #[Test] public function createPhotoLinkReturnsCachedTwitterPhotoLinks(): void { $webmention = new WebMention; @@ -91,16 +92,15 @@ class WebMentionTest extends TestCase $this->assertEquals($expected, $webmention->createPhotoLink($twitterURL)); } - /** @test */ + #[Test] public function createPhotoLinkResolvesTwitterPhotoLinks(): void { $info = (object) [ 'profile_image_url_https' => 'https://pbs.twimg.com/static_profile_link.jpg', ]; - $codebirdMock = $this->getMockBuilder(Codebird::class) - ->addMethods(['users_show']) - ->getMock(); - $codebirdMock->method('users_show') + $codebirdMock = $this->createPartialMock(Codebird::class, ['__call']); + $codebirdMock->method('__call') + ->with('users_show', $this->anything()) ->willReturn($info); $this->app->instance(Codebird::class, $codebirdMock); @@ -117,14 +117,14 @@ class WebMentionTest extends TestCase $this->assertEquals($expected, $webmention->createPhotoLink($twitterURL)); } - /** @test */ + #[Test] public function getReplyAttributeDefaultsToNull(): void { $webmention = new WebMention; $this->assertNull($webmention->reply); } - /** @test */ + #[Test] public function getReplyAttributeWithMf2WithoutHtmlReturnsNull(): void { $webmention = new WebMention;