From fe52cdc9f8b5f49b29206c7918f1ca45cd887b14 Mon Sep 17 00:00:00 2001 From: Constantin Graf Date: Fri, 4 Oct 2024 21:59:02 +0200 Subject: [PATCH] Add update lookup and telemetry, Add version and build to app config --- .env.production | 2 + .github/workflows/build-private.yml | 46 +- .github/workflows/build-public.yml | 42 +- .../SelfHostCheckForUpdateCommand.php | 46 + .../SelfHost/SelfHostTelemetryCommand.php | 44 + app/Console/Kernel.php | 8 + app/Filament/Widgets/ServerOverview.php | 34 + app/Providers/Filament/AdminPanelProvider.php | 3 + app/Service/ApiService.php | 93 ++ composer.json | 3 +- composer.lock | 1168 ++++++++--------- config/app.php | 6 +- config/scheduling.php | 2 + package-lock.json | 66 +- package.json | 12 +- .../css/filament/admin/tailwind.config.js | 10 + resources/css/filament/admin/theme.css | 3 + .../widgets/server-overview.blade.php | 28 + .../SelfHostCheckForUpdateCommandTest.php | 72 + .../SelfHost/SelfHostTelemetryCommandTest.php | 71 + .../{ => Resources}/AuditResourceTest.php | 3 +- .../{ => Resources}/ClientResourceTest.php | 3 +- .../{ => Resources}/FailedJobResourceTest.php | 3 +- .../OrganizationResourceTest.php | 3 +- .../{ => Resources}/ProjectResourceTest.php | 3 +- .../{ => Resources}/TagResourceTest.php | 3 +- .../{ => Resources}/TaskResourceTest.php | 3 +- .../{ => Resources}/TimeEntryResourceTest.php | 3 +- .../{ => Resources}/UserResourceTest.php | 3 +- .../Widgets/ServerOverviewWidgetTest.php | 83 ++ vite.config.js | 2 +- 31 files changed, 1193 insertions(+), 678 deletions(-) create mode 100644 app/Console/Commands/SelfHost/SelfHostCheckForUpdateCommand.php create mode 100644 app/Console/Commands/SelfHost/SelfHostTelemetryCommand.php create mode 100644 app/Filament/Widgets/ServerOverview.php create mode 100644 app/Service/ApiService.php create mode 100644 resources/css/filament/admin/tailwind.config.js create mode 100644 resources/css/filament/admin/theme.css create mode 100644 resources/views/filament/widgets/server-overview.blade.php create mode 100644 tests/Unit/Console/Commands/SelfHost/SelfHostCheckForUpdateCommandTest.php create mode 100644 tests/Unit/Console/Commands/SelfHost/SelfHostTelemetryCommandTest.php rename tests/Unit/Filament/{ => Resources}/AuditResourceTest.php (95%) rename tests/Unit/Filament/{ => Resources}/ClientResourceTest.php (93%) rename tests/Unit/Filament/{ => Resources}/FailedJobResourceTest.php (94%) rename tests/Unit/Filament/{ => Resources}/OrganizationResourceTest.php (96%) rename tests/Unit/Filament/{ => Resources}/ProjectResourceTest.php (93%) rename tests/Unit/Filament/{ => Resources}/TagResourceTest.php (93%) rename tests/Unit/Filament/{ => Resources}/TaskResourceTest.php (93%) rename tests/Unit/Filament/{ => Resources}/TimeEntryResourceTest.php (94%) rename tests/Unit/Filament/{ => Resources}/UserResourceTest.php (97%) create mode 100644 tests/Unit/Filament/Widgets/ServerOverviewWidgetTest.php diff --git a/.env.production b/.env.production index 6ec63f81..47403473 100644 --- a/.env.production +++ b/.env.production @@ -1,4 +1,6 @@ APP_NAME=solidtime +APP_VERSION=0.0.0 +APP_BUILD=0 VITE_APP_NAME=solidtime APP_ENV=production APP_DEBUG=false diff --git a/.github/workflows/build-private.yml b/.github/workflows/build-private.yml index cf2e393e..4b00ef77 100644 --- a/.github/workflows/build-private.yml +++ b/.github/workflows/build-private.yml @@ -20,15 +20,55 @@ jobs: steps: - name: "Check out code" uses: actions/checkout@v4 + with: + fetch-depth: 0 # Required for WyriHaximus/github-action-get-previous-tag + + - name: "Get build" + id: build + run: echo "build=$(git rev-parse --short=8 HEAD)" >> "$GITHUB_OUTPUT" + + - name: "Get Previous tag (normal push)" + id: previoustag + if: ${{ !startsWith(github.ref, 'refs/tags/v') }} + uses: "WyriHaximus/github-action-get-previous-tag@v1" + with: + prefix: "v" + + - name: "Get version" + id: version + run: | + if ${{ !startsWith(github.ref, 'refs/tags/v') }}; then + if ${{ startsWith(steps.previoustag.outputs.tag, 'v') }}; then + version=$(echo "${{ steps.previoustag.outputs.tag }}" | cut -c 2-) + echo "app_version=${version}" >> "$GITHUB_OUTPUT" + else + echo "ERROR: No previous tag found"; + exit 1; + fi + else + version=$(echo "${{ github.ref }}" | cut -c 12-) + echo "app_version=${version}" >> "$GITHUB_OUTPUT" + fi + + - name: "Copy .env template for production" + run: | + cp .env.production .env + rm .env.production .env.ci .env.example + + - name: "Add version to .env" + run: sed -i 's/APP_VERSION=0.0.0/APP_VERSION=${{ steps.version.outputs.app_version }}/g' .env + + - name: "Add build to .env" + run: sed -i 's/APP_BUILD=0/APP_BUILD=${{ steps.build.outputs.build }}/g' .env + + - name: "Output .env" + run: cat .env - name: "Use Node.js" uses: actions/setup-node@v4 with: node-version: '20.x' - - name: "Copy .env template for production" - run: cp .env.production .env && cat .env - - name: "Checkout billing extension" uses: actions/checkout@v4 with: diff --git a/.github/workflows/build-public.yml b/.github/workflows/build-public.yml index 8bf7c7fc..53034d00 100644 --- a/.github/workflows/build-public.yml +++ b/.github/workflows/build-public.yml @@ -25,9 +25,49 @@ jobs: steps: - name: "Check out code" uses: actions/checkout@v4 + with: + fetch-depth: 0 # Required for WyriHaximus/github-action-get-previous-tag + + - name: "Get build" + id: build + run: echo "build=$(git rev-parse --short=8 HEAD)" >> "$GITHUB_OUTPUT" + + - name: "Get Previous tag (normal push)" + id: previoustag + if: ${{ !startsWith(github.ref, 'refs/tags/v') }} + uses: "WyriHaximus/github-action-get-previous-tag@v1" + with: + prefix: "v" + + - name: "Get version" + id: version + run: | + if ${{ !startsWith(github.ref, 'refs/tags/v') }}; then + if ${{ startsWith(steps.previoustag.outputs.tag, 'v') }}; then + version=$(echo "${{ steps.previoustag.outputs.tag }}" | cut -c 2-) + echo "app_version=${version}" >> "$GITHUB_OUTPUT" + else + echo "ERROR: No previous tag found"; + exit 1; + fi + else + version=$(echo "${{ github.ref }}" | cut -c 12-) + echo "app_version=${version}" >> "$GITHUB_OUTPUT" + fi - name: "Copy .env template for production" - run: cp .env.production .env + run: | + cp .env.production .env + rm .env.production .env.ci .env.example + + - name: "Add version to .env" + run: sed -i 's/APP_VERSION=0.0.0/APP_VERSION=${{ steps.version.outputs.app_version }}/g' .env + + - name: "Add build to .env" + run: sed -i 's/APP_BUILD=0/APP_BUILD=${{ steps.build.outputs.build }}/g' .env + + - name: "Output .env" + run: cat .env - name: "Install dependencies" uses: php-actions/composer@v6 diff --git a/app/Console/Commands/SelfHost/SelfHostCheckForUpdateCommand.php b/app/Console/Commands/SelfHost/SelfHostCheckForUpdateCommand.php new file mode 100644 index 00000000..0e2be7b8 --- /dev/null +++ b/app/Console/Commands/SelfHost/SelfHostCheckForUpdateCommand.php @@ -0,0 +1,46 @@ +checkForUpdate(); + if ($latestVersion === null) { + $this->error('Failed to check for update, check the logs for more information.'); + + return self::FAILURE; + } + + // Note: Cache for 13 hours, because the command runs twice daily (every 12 hours). + Cache::put('latest_version', $latestVersion, 60 * 60 * 12); + + return self::SUCCESS; + } +} diff --git a/app/Console/Commands/SelfHost/SelfHostTelemetryCommand.php b/app/Console/Commands/SelfHost/SelfHostTelemetryCommand.php new file mode 100644 index 00000000..e3e72ce5 --- /dev/null +++ b/app/Console/Commands/SelfHost/SelfHostTelemetryCommand.php @@ -0,0 +1,44 @@ +telemetry(); + + if (! $success) { + $this->error('Failed to send telemetry data, check the logs for more information.'); + + return self::FAILURE; + + } + + return self::SUCCESS; + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 6e7596ec..587f56e3 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -17,6 +17,14 @@ protected function schedule(Schedule $schedule): void $schedule->command('time-entry:send-still-running-mails') ->when(fn (): bool => config('scheduling.tasks.time_entry_send_still_running_mails')) ->everyTenMinutes(); + + $schedule->command('self-hosting:check-for-update') + ->when(fn (): bool => config('scheduling.tasks.self_hosting_check_for_update')) + ->twiceDaily(); + + $schedule->command('self-hosting:telemetry') + ->when(fn (): bool => config('scheduling.tasks.self_hosting_telemetry')) + ->twiceDaily(); } /** diff --git a/app/Filament/Widgets/ServerOverview.php b/app/Filament/Widgets/ServerOverview.php new file mode 100644 index 00000000..51a6e5a7 --- /dev/null +++ b/app/Filament/Widgets/ServerOverview.php @@ -0,0 +1,34 @@ + + */ + protected function getViewData(): array + { + $currentVersion = Cache::get('latest_version', null); + + $needsUpdate = false; + if ($currentVersion !== null && version_compare($currentVersion, config('app.version')) > 0) { + $needsUpdate = true; + } + + return [ + 'version' => config('app.version'), + 'build' => config('app.build'), + 'environment' => config('app.env'), + 'currentVersion' => $currentVersion, + 'needsUpdate' => $needsUpdate, + ]; + } +} diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 18ae723f..5beb16be 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -5,6 +5,7 @@ namespace App\Providers\Filament; use App\Filament\Widgets\ActiveUserOverview; +use App\Filament\Widgets\ServerOverview; use App\Filament\Widgets\TimeEntriesCreated; use App\Filament\Widgets\TimeEntriesImported; use App\Filament\Widgets\UserRegistrations; @@ -44,11 +45,13 @@ public function panel(Panel $panel): Panel ]) ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets') ->widgets([ + ServerOverview::class, ActiveUserOverview::class, UserRegistrations::class, TimeEntriesCreated::class, TimeEntriesImported::class, ]) + ->viteTheme('resources/css/filament/admin/theme.css') ->plugins([ EnvironmentIndicatorPlugin::make() ->color(fn () => match (App::environment()) { diff --git a/app/Service/ApiService.php b/app/Service/ApiService.php new file mode 100644 index 00000000..9cb8ce00 --- /dev/null +++ b/app/Service/ApiService.php @@ -0,0 +1,93 @@ +timeout(3) + ->connectTimeout(2) + ->post(self::API_URL.'/check-for-update', [ + 'version' => config('app.version'), + 'build' => config('app.build'), + 'url' => config('app.url'), + ]); + + if ($response->status() === 200 && isset($response->json()['version']) && is_string($response->json()['version'])) { + return $response->json()['version']; + } else { + Log::warning('Failed to check for update', [ + 'status' => $response->status(), + 'body' => $response->body(), + ]); + + return null; + } + } catch (\Throwable $e) { + Log::warning('Failed to check for update', [ + 'message' => $e->getMessage(), + ]); + + return null; + } + } + + public function telemetry(): bool + { + try { + $response = Http::asJson() + ->timeout(3) + ->connectTimeout(2) + ->post(self::API_URL.'/telemetry', [ + 'version' => config('app.version'), + 'build' => config('app.build'), + 'url' => config('app.url'), + // telemetry data + 'user_count' => User::count(), + 'organization_count' => Organization::count(), + 'audit_count' => Audit::count(), + 'project_count' => Project::count(), + 'project_member_count' => ProjectMember::count(), + 'client_count' => Client::count(), + 'task_count' => Task::count(), + 'time_entry_count' => TimeEntry::count(), + ]); + + if ($response->status() === 200) { + return true; + } else { + Log::warning('Failed send telemetry data', [ + 'status' => $response->status(), + 'body' => $response->body(), + ]); + + return false; + } + } catch (Exception $e) { + Log::warning('Failed send telemetry data', [ + 'message' => $e->getMessage(), + ]); + + return false; + } + } +} diff --git a/composer.json b/composer.json index 47a91211..e367355e 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,6 @@ "name": "solidtime-io/solidtime", "type": "project", "description": "An open-source time-tracking app", - "version": "0.0.1", "keywords": [], "license": "AGPL-3.0-or-later", "require": { @@ -29,7 +28,7 @@ "spatie/temporary-directory": "^2.2", "stechstudio/filament-impersonate": "^3.8", "tightenco/ziggy": "^2.1.0", - "tpetry/laravel-postgresql-enhanced": "^1.0.0", + "tpetry/laravel-postgresql-enhanced": "^2.0.0", "wikimedia/composer-merge-plugin": "^2.1.0" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 10be85cc..a6ec0f2e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7f978a63c930b4ec8bbb1d9a3c4dc1fd", + "content-hash": "84e9d436af2f46e57ecc42a117e94259", "packages": [ { "name": "anourvalar/eloquent-serialize", - "version": "1.2.23", + "version": "1.2.25", "source": { "type": "git", "url": "https://github.com/AnourValar/eloquent-serialize.git", - "reference": "fd7bc1dc2c98fe705647ab4b81d13ea3d599ea1f" + "reference": "6d7a868ae4218b9d7796334ff9a17e1539bad48a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AnourValar/eloquent-serialize/zipball/fd7bc1dc2c98fe705647ab4b81d13ea3d599ea1f", - "reference": "fd7bc1dc2c98fe705647ab4b81d13ea3d599ea1f", + "url": "https://api.github.com/repos/AnourValar/eloquent-serialize/zipball/6d7a868ae4218b9d7796334ff9a17e1539bad48a", + "reference": "6d7a868ae4218b9d7796334ff9a17e1539bad48a", "shasum": "" }, "require": { @@ -68,9 +68,9 @@ ], "support": { "issues": "https://github.com/AnourValar/eloquent-serialize/issues", - "source": "https://github.com/AnourValar/eloquent-serialize/tree/1.2.23" + "source": "https://github.com/AnourValar/eloquent-serialize/tree/1.2.25" }, - "time": "2024-07-12T10:52:26+00:00" + "time": "2024-09-16T12:59:37+00:00" }, { "name": "aws/aws-crt-php", @@ -128,16 +128,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.321.4", + "version": "3.323.0", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "986326efde1d0598ec9fc1b185716550be8ef522" + "reference": "058611bd22a81c873b1399892672861848e1d466" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/986326efde1d0598ec9fc1b185716550be8ef522", - "reference": "986326efde1d0598ec9fc1b185716550be8ef522", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/058611bd22a81c873b1399892672861848e1d466", + "reference": "058611bd22a81c873b1399892672861848e1d466", "shasum": "" }, "require": { @@ -220,22 +220,22 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.321.4" + "source": "https://github.com/aws/aws-sdk-php/tree/3.323.0" }, - "time": "2024-09-04T18:09:31+00:00" + "time": "2024-10-03T18:06:26+00:00" }, { "name": "bacon/bacon-qr-code", - "version": "v3.0.0", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/Bacon/BaconQrCode.git", - "reference": "510de6eca6248d77d31b339d62437cc995e2fb41" + "reference": "f9cc1f52b5a463062251d666761178dbdb6b544f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/510de6eca6248d77d31b339d62437cc995e2fb41", - "reference": "510de6eca6248d77d31b339d62437cc995e2fb41", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/f9cc1f52b5a463062251d666761178dbdb6b544f", + "reference": "f9cc1f52b5a463062251d666761178dbdb6b544f", "shasum": "" }, "require": { @@ -274,9 +274,9 @@ "homepage": "https://github.com/Bacon/BaconQrCode", "support": { "issues": "https://github.com/Bacon/BaconQrCode/issues", - "source": "https://github.com/Bacon/BaconQrCode/tree/v3.0.0" + "source": "https://github.com/Bacon/BaconQrCode/tree/v3.0.1" }, - "time": "2024-04-18T11:16:25+00:00" + "time": "2024-10-01T13:55:55+00:00" }, { "name": "blade-ui-kit/blade-heroicons", @@ -617,16 +617,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a" + "reference": "48a792895a2b7a6ee65dd5442c299d7b835b6137" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/063d9aa8696582f5a41dffbbaf3c81024f0a604a", - "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/48a792895a2b7a6ee65dd5442c299d7b835b6137", + "reference": "48a792895a2b7a6ee65dd5442c299d7b835b6137", "shasum": "" }, "require": { @@ -636,8 +636,8 @@ }, "require-dev": { "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8 || ^9", "psr/log": "^1.0 || ^2.0 || ^3.0", - "symfony/phpunit-bridge": "^4.2 || ^5", "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "type": "library", @@ -673,7 +673,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.1" + "source": "https://github.com/composer/ca-bundle/tree/1.5.2" }, "funding": [ { @@ -689,20 +689,20 @@ "type": "tidelift" } ], - "time": "2024-07-08T15:28:20+00:00" + "time": "2024-09-25T07:49:53+00:00" }, { "name": "composer/class-map-generator", - "version": "1.3.4", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3" + "reference": "98bbf6780e56e0fd2404fe4b82eb665a0f93b783" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3", - "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/98bbf6780e56e0fd2404fe4b82eb665a0f93b783", + "reference": "98bbf6780e56e0fd2404fe4b82eb665a0f93b783", "shasum": "" }, "require": { @@ -715,8 +715,8 @@ "phpstan/phpstan-deprecation-rules": "^1", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^8", + "symfony/filesystem": "^5.4 || ^6" }, "type": "library", "extra": { @@ -746,7 +746,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.3.4" + "source": "https://github.com/composer/class-map-generator/tree/1.4.0" }, "funding": [ { @@ -762,25 +762,25 @@ "type": "tidelift" } ], - "time": "2024-06-12T14:13:04+00:00" + "time": "2024-10-03T18:14:00+00:00" }, { "name": "composer/composer", - "version": "2.7.9", + "version": "2.8.1", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "e30ccdd665828ae66eb1be78f056e39e1d5f55ab" + "reference": "e52b8672276cf436670cdd6bd5de4353740e83b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/e30ccdd665828ae66eb1be78f056e39e1d5f55ab", - "reference": "e30ccdd665828ae66eb1be78f056e39e1d5f55ab", + "url": "https://api.github.com/repos/composer/composer/zipball/e52b8672276cf436670cdd6bd5de4353740e83b2", + "reference": "e52b8672276cf436670cdd6bd5de4353740e83b2", "shasum": "" }, "require": { "composer/ca-bundle": "^1.5", - "composer/class-map-generator": "^1.3.3", + "composer/class-map-generator": "^1.4.0", "composer/metadata-minifier": "^1.0", "composer/pcre": "^2.2 || ^3.2", "composer/semver": "^3.3", @@ -820,7 +820,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.7-dev" + "dev-main": "2.8-dev" }, "phpstan": { "includes": [ @@ -860,7 +860,7 @@ "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/composer/issues", "security": "https://github.com/composer/composer/security/policy", - "source": "https://github.com/composer/composer/tree/2.7.9" + "source": "https://github.com/composer/composer/tree/2.8.1" }, "funding": [ { @@ -876,7 +876,7 @@ "type": "tidelift" } ], - "time": "2024-09-04T12:43:28+00:00" + "time": "2024-10-04T09:31:01+00:00" }, { "name": "composer/metadata-minifier", @@ -1028,24 +1028,24 @@ }, { "name": "composer/semver", - "version": "3.4.2", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "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.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -1089,7 +1089,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.2" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -1105,7 +1105,7 @@ "type": "tidelift" } ], - "time": "2024-07-12T11:35:52+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "composer/spdx-licenses", @@ -2095,16 +2095,16 @@ }, { "name": "filament/actions", - "version": "v3.2.110", + "version": "v3.2.115", "source": { "type": "git", "url": "https://github.com/filamentphp/actions.git", - "reference": "5d6e4fe444f1ef04d373518248a445bbcc3ca272" + "reference": "38c6eb00c7e3265907b37482c2dfd411c6f910c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/actions/zipball/5d6e4fe444f1ef04d373518248a445bbcc3ca272", - "reference": "5d6e4fe444f1ef04d373518248a445bbcc3ca272", + "url": "https://api.github.com/repos/filamentphp/actions/zipball/38c6eb00c7e3265907b37482c2dfd411c6f910c9", + "reference": "38c6eb00c7e3265907b37482c2dfd411c6f910c9", "shasum": "" }, "require": { @@ -2144,20 +2144,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-08-26T07:22:35+00:00" + "time": "2024-09-27T13:16:08+00:00" }, { "name": "filament/filament", - "version": "v3.2.110", + "version": "v3.2.115", "source": { "type": "git", "url": "https://github.com/filamentphp/panels.git", - "reference": "130636e90e821154e0ce60dcbc7b358d2a1a716f" + "reference": "8d0f0e7101c14fe2f00490172452767f16b39f02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/130636e90e821154e0ce60dcbc7b358d2a1a716f", - "reference": "130636e90e821154e0ce60dcbc7b358d2a1a716f", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/8d0f0e7101c14fe2f00490172452767f16b39f02", + "reference": "8d0f0e7101c14fe2f00490172452767f16b39f02", "shasum": "" }, "require": { @@ -2209,20 +2209,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-08-30T01:52:09+00:00" + "time": "2024-09-27T13:16:11+00:00" }, { "name": "filament/forms", - "version": "v3.2.110", + "version": "v3.2.115", "source": { "type": "git", "url": "https://github.com/filamentphp/forms.git", - "reference": "02fe2e211993f6291b719a093ed6f63e17125e9a" + "reference": "ffa33043ea0ee67a4eed58535687f87311e4256b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/02fe2e211993f6291b719a093ed6f63e17125e9a", - "reference": "02fe2e211993f6291b719a093ed6f63e17125e9a", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/ffa33043ea0ee67a4eed58535687f87311e4256b", + "reference": "ffa33043ea0ee67a4eed58535687f87311e4256b", "shasum": "" }, "require": { @@ -2265,20 +2265,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-08-30T18:04:06+00:00" + "time": "2024-09-27T13:16:04+00:00" }, { "name": "filament/infolists", - "version": "v3.2.110", + "version": "v3.2.115", "source": { "type": "git", "url": "https://github.com/filamentphp/infolists.git", - "reference": "96403f2842e4c485f32110e4456b7a3bbcb1e835" + "reference": "d4d3030644e3617aed252a5df3c385145ada0ec6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/infolists/zipball/96403f2842e4c485f32110e4456b7a3bbcb1e835", - "reference": "96403f2842e4c485f32110e4456b7a3bbcb1e835", + "url": "https://api.github.com/repos/filamentphp/infolists/zipball/d4d3030644e3617aed252a5df3c385145ada0ec6", + "reference": "d4d3030644e3617aed252a5df3c385145ada0ec6", "shasum": "" }, "require": { @@ -2316,20 +2316,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-08-14T16:52:44+00:00" + "time": "2024-09-27T13:16:10+00:00" }, { "name": "filament/notifications", - "version": "v3.2.110", + "version": "v3.2.115", "source": { "type": "git", "url": "https://github.com/filamentphp/notifications.git", - "reference": "03ea56e0729c98c65831ab0215285a7cb1c4117f" + "reference": "0272612e1d54e0520f8717b24c71b9b70f198c8f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/notifications/zipball/03ea56e0729c98c65831ab0215285a7cb1c4117f", - "reference": "03ea56e0729c98c65831ab0215285a7cb1c4117f", + "url": "https://api.github.com/repos/filamentphp/notifications/zipball/0272612e1d54e0520f8717b24c71b9b70f198c8f", + "reference": "0272612e1d54e0520f8717b24c71b9b70f198c8f", "shasum": "" }, "require": { @@ -2368,20 +2368,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-07-31T11:53:11+00:00" + "time": "2024-09-27T13:16:07+00:00" }, { "name": "filament/support", - "version": "v3.2.110", + "version": "v3.2.115", "source": { "type": "git", "url": "https://github.com/filamentphp/support.git", - "reference": "78e25428c754fcbb30c321d5dda439c760de9837" + "reference": "6dba51efd6f2a32db21bc8684cd663915ab0e4d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/support/zipball/78e25428c754fcbb30c321d5dda439c760de9837", - "reference": "78e25428c754fcbb30c321d5dda439c760de9837", + "url": "https://api.github.com/repos/filamentphp/support/zipball/6dba51efd6f2a32db21bc8684cd663915ab0e4d7", + "reference": "6dba51efd6f2a32db21bc8684cd663915ab0e4d7", "shasum": "" }, "require": { @@ -2392,7 +2392,7 @@ "illuminate/support": "^10.45|^11.0", "illuminate/view": "^10.45|^11.0", "kirschbaum-development/eloquent-power-joins": "^3.0", - "livewire/livewire": "^3.4.10", + "livewire/livewire": "^3.4.10 <= 3.5.6", "php": "^8.1", "ryangjchandler/blade-capture-directive": "^0.2|^0.3|^1.0", "spatie/color": "^1.5", @@ -2427,20 +2427,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-08-26T07:22:57+00:00" + "time": "2024-09-27T13:16:20+00:00" }, { "name": "filament/tables", - "version": "v3.2.110", + "version": "v3.2.115", "source": { "type": "git", "url": "https://github.com/filamentphp/tables.git", - "reference": "129943d1b4e6c1edeef53e804eb56ef78a932a6c" + "reference": "07226fcd080f0f547aac31cf5117bfab192ea770" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/tables/zipball/129943d1b4e6c1edeef53e804eb56ef78a932a6c", - "reference": "129943d1b4e6c1edeef53e804eb56ef78a932a6c", + "url": "https://api.github.com/repos/filamentphp/tables/zipball/07226fcd080f0f547aac31cf5117bfab192ea770", + "reference": "07226fcd080f0f547aac31cf5117bfab192ea770", "shasum": "" }, "require": { @@ -2479,20 +2479,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-08-30T01:52:14+00:00" + "time": "2024-09-27T13:16:23+00:00" }, { "name": "filament/widgets", - "version": "v3.2.110", + "version": "v3.2.115", "source": { "type": "git", "url": "https://github.com/filamentphp/widgets.git", - "reference": "909fc82bae2cf41d70b3cd7dda8982245b2ea723" + "reference": "06b70c4f260c91da03bdc51d1275543776ef7385" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/widgets/zipball/909fc82bae2cf41d70b3cd7dda8982245b2ea723", - "reference": "909fc82bae2cf41d70b3cd7dda8982245b2ea723", + "url": "https://api.github.com/repos/filamentphp/widgets/zipball/06b70c4f260c91da03bdc51d1275543776ef7385", + "reference": "06b70c4f260c91da03bdc51d1275543776ef7385", "shasum": "" }, "require": { @@ -2523,7 +2523,7 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-07-31T11:53:30+00:00" + "time": "2024-09-23T14:10:16+00:00" }, { "name": "firebase/php-jwt", @@ -3349,16 +3349,16 @@ }, { "name": "kirschbaum-development/eloquent-power-joins", - "version": "3.5.7", + "version": "3.5.8", "source": { "type": "git", "url": "https://github.com/kirschbaum-development/eloquent-power-joins.git", - "reference": "3f57b398117d97bae4dfd5c37ea0f8f48f296c97" + "reference": "397ef08f15ceff48111fd7f57d9f1fd41bf1a453" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/3f57b398117d97bae4dfd5c37ea0f8f48f296c97", - "reference": "3f57b398117d97bae4dfd5c37ea0f8f48f296c97", + "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/397ef08f15ceff48111fd7f57d9f1fd41bf1a453", + "reference": "397ef08f15ceff48111fd7f57d9f1fd41bf1a453", "shasum": "" }, "require": { @@ -3405,9 +3405,9 @@ ], "support": { "issues": "https://github.com/kirschbaum-development/eloquent-power-joins/issues", - "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/3.5.7" + "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/3.5.8" }, - "time": "2024-06-26T13:09:29+00:00" + "time": "2024-09-10T10:28:05+00:00" }, { "name": "korridor/laravel-computed-attributes", @@ -3611,16 +3611,16 @@ }, { "name": "laminas/laminas-diactoros", - "version": "3.3.1", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "74cfb9a7522ffd2a161d1ebe10db2fc2abb9df45" + "reference": "2cce7e77ca4c6c4183e9e8d4edeba483afc14487" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/74cfb9a7522ffd2a161d1ebe10db2fc2abb9df45", - "reference": "74cfb9a7522ffd2a161d1ebe10db2fc2abb9df45", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/2cce7e77ca4c6c4183e9e8d4edeba483afc14487", + "reference": "2cce7e77ca4c6c4183e9e8d4edeba483afc14487", "shasum": "" }, "require": { @@ -3629,7 +3629,7 @@ "psr/http-message": "^1.1 || ^2.0" }, "provide": { - "psr/http-factory-implementation": "^1.1 || ^2.0", + "psr/http-factory-implementation": "^1.0", "psr/http-message-implementation": "^1.1 || ^2.0" }, "require-dev": { @@ -3637,12 +3637,12 @@ "ext-dom": "*", "ext-gd": "*", "ext-libxml": "*", - "http-interop/http-factory-tests": "^0.9.0", + "http-interop/http-factory-tests": "^2.2.0", "laminas/laminas-coding-standard": "~2.5.0", - "php-http/psr7-integration-tests": "^1.3", - "phpunit/phpunit": "^9.6.16", - "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.22.1" + "php-http/psr7-integration-tests": "^1.4.0", + "phpunit/phpunit": "^10.5.31", + "psalm/plugin-phpunit": "^0.19.0", + "vimeo/psalm": "^5.25.0" }, "type": "library", "extra": { @@ -3692,20 +3692,20 @@ "type": "community_bridge" } ], - "time": "2024-02-16T16:06:16+00:00" + "time": "2024-09-11T00:55:07+00:00" }, { "name": "laravel/fortify", - "version": "v1.24.1", + "version": "v1.24.2", "source": { "type": "git", "url": "https://github.com/laravel/fortify.git", - "reference": "8158ba0960bb5f4aae509d01d74a95e16e30de20" + "reference": "42695c45087e5abb3e173725b4f1ef4956a7b47d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/fortify/zipball/8158ba0960bb5f4aae509d01d74a95e16e30de20", - "reference": "8158ba0960bb5f4aae509d01d74a95e16e30de20", + "url": "https://api.github.com/repos/laravel/fortify/zipball/42695c45087e5abb3e173725b4f1ef4956a7b47d", + "reference": "42695c45087e5abb3e173725b4f1ef4956a7b47d", "shasum": "" }, "require": { @@ -3757,20 +3757,20 @@ "issues": "https://github.com/laravel/fortify/issues", "source": "https://github.com/laravel/fortify" }, - "time": "2024-09-03T10:02:14+00:00" + "time": "2024-09-16T19:20:52+00:00" }, { "name": "laravel/framework", - "version": "v11.22.0", + "version": "v11.26.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "868c75beacc47d0f361b919bbc155c0b619bf3d5" + "reference": "b8cb8998701d5b3cfe68539d3c3da1fc59ddd82b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/868c75beacc47d0f361b919bbc155c0b619bf3d5", - "reference": "868c75beacc47d0f361b919bbc155c0b619bf3d5", + "url": "https://api.github.com/repos/laravel/framework/zipball/b8cb8998701d5b3cfe68539d3c3da1fc59ddd82b", + "reference": "b8cb8998701d5b3cfe68539d3c3da1fc59ddd82b", "shasum": "" }, "require": { @@ -3789,7 +3789,7 @@ "fruitcake/php-cors": "^1.3", "guzzlehttp/guzzle": "^7.8", "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.18", + "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", "laravel/serializable-closure": "^1.3", "league/commonmark": "^2.2.1", "league/flysystem": "^3.8.0", @@ -3832,6 +3832,7 @@ "illuminate/bus": "self.version", "illuminate/cache": "self.version", "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", "illuminate/conditionable": "self.version", "illuminate/config": "self.version", "illuminate/console": "self.version", @@ -3874,7 +3875,7 @@ "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.6", "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^9.1.5", + "orchestra/testbench-core": "^9.5", "pda/pheanstalk": "^5.0", "phpstan/phpstan": "^1.11.5", "phpunit/phpunit": "^10.5|^11.0", @@ -3932,6 +3933,8 @@ "src/Illuminate/Events/functions.php", "src/Illuminate/Filesystem/functions.php", "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Support/functions.php", "src/Illuminate/Support/helpers.php" ], "psr-4": { @@ -3963,20 +3966,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-09-03T15:27:15+00:00" + "time": "2024-10-01T14:29:34+00:00" }, { "name": "laravel/jetstream", - "version": "v5.1.5", + "version": "v5.2.0", "source": { "type": "git", "url": "https://github.com/laravel/jetstream.git", - "reference": "653a422fe65278c1c4f319e99d5cb700c4117ea0" + "reference": "8093245d850c215e47df1c5fc081f545afd7f0c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/jetstream/zipball/653a422fe65278c1c4f319e99d5cb700c4117ea0", - "reference": "653a422fe65278c1c4f319e99d5cb700c4117ea0", + "url": "https://api.github.com/repos/laravel/jetstream/zipball/8093245d850c215e47df1c5fc081f545afd7f0c5", + "reference": "8093245d850c215e47df1c5fc081f545afd7f0c5", "shasum": "" }, "require": { @@ -4030,26 +4033,26 @@ "issues": "https://github.com/laravel/jetstream/issues", "source": "https://github.com/laravel/jetstream" }, - "time": "2024-08-08T13:28:23+00:00" + "time": "2024-09-09T13:52:03+00:00" }, { "name": "laravel/octane", - "version": "v2.5.4", + "version": "v2.5.8", "source": { "type": "git", "url": "https://github.com/laravel/octane.git", - "reference": "d7b8991270eb57eef83be7de62ba04c1289dd65b" + "reference": "ce37959546cf5e04df02aa41960f3ee816670b9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/octane/zipball/d7b8991270eb57eef83be7de62ba04c1289dd65b", - "reference": "d7b8991270eb57eef83be7de62ba04c1289dd65b", + "url": "https://api.github.com/repos/laravel/octane/zipball/ce37959546cf5e04df02aa41960f3ee816670b9b", + "reference": "ce37959546cf5e04df02aa41960f3ee816670b9b", "shasum": "" }, "require": { "laminas/laminas-diactoros": "^3.0", "laravel/framework": "^10.10.1|^11.0", - "laravel/prompts": "^0.1.24", + "laravel/prompts": "^0.1.24|^0.2.0|^0.3.0", "laravel/serializable-closure": "^1.3.0", "nesbot/carbon": "^2.66.0|^3.0", "php": "^8.1.0", @@ -4120,7 +4123,7 @@ "issues": "https://github.com/laravel/octane/issues", "source": "https://github.com/laravel/octane" }, - "time": "2024-08-09T12:25:04+00:00" + "time": "2024-10-01T21:03:50+00:00" }, { "name": "laravel/passport", @@ -4198,89 +4201,23 @@ }, "time": "2024-08-05T13:44:51+00:00" }, - { - "name": "laravel/pint", - "version": "v1.17.3", - "source": { - "type": "git", - "url": "https://github.com/laravel/pint.git", - "reference": "9d77be916e145864f10788bb94531d03e1f7b482" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/9d77be916e145864f10788bb94531d03e1f7b482", - "reference": "9d77be916e145864f10788bb94531d03e1f7b482", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "ext-tokenizer": "*", - "ext-xml": "*", - "php": "^8.1.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.64.0", - "illuminate/view": "^10.48.20", - "larastan/larastan": "^2.9.8", - "laravel-zero/framework": "^10.4.0", - "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^1.15.1", - "pestphp/pest": "^2.35.1" - }, - "bin": [ - "builds/pint" - ], - "type": "project", - "autoload": { - "psr-4": { - "App\\": "app/", - "Database\\Seeders\\": "database/seeders/", - "Database\\Factories\\": "database/factories/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "An opinionated code formatter for PHP.", - "homepage": "https://laravel.com", - "keywords": [ - "format", - "formatter", - "lint", - "linter", - "php" - ], - "support": { - "issues": "https://github.com/laravel/pint/issues", - "source": "https://github.com/laravel/pint" - }, - "time": "2024-09-03T15:00:28+00:00" - }, { "name": "laravel/prompts", - "version": "v0.1.25", + "version": "v0.3.0", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95" + "reference": "ea57a2261093986721d4a5f4f9524d76f21f9fa0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95", + "url": "https://api.github.com/repos/laravel/prompts/zipball/ea57a2261093986721d4a5f4f9524d76f21f9fa0", + "reference": "ea57a2261093986721d4a5f4f9524d76f21f9fa0", "shasum": "" }, "require": { + "composer-runtime-api": "^2.2", "ext-mbstring": "*", - "illuminate/collections": "^10.0|^11.0", "php": "^8.1", "symfony/console": "^6.2|^7.0" }, @@ -4289,6 +4226,7 @@ "laravel/framework": ">=10.17.0 <10.25.0" }, "require-dev": { + "illuminate/collections": "^10.0|^11.0", "mockery/mockery": "^1.5", "pestphp/pest": "^2.3", "phpstan/phpstan": "^1.11", @@ -4300,7 +4238,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "0.1.x-dev" + "dev-main": "0.3.x-dev" } }, "autoload": { @@ -4318,22 +4256,22 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.25" + "source": "https://github.com/laravel/prompts/tree/v0.3.0" }, - "time": "2024-08-12T22:06:33+00:00" + "time": "2024-09-30T14:27:51+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.4", + "version": "v1.3.5", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81" + "reference": "1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/61b87392d986dc49ad5ef64e75b1ff5fee24ef81", - "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c", + "reference": "1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c", "shasum": "" }, "require": { @@ -4381,20 +4319,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-08-02T07:48:17+00:00" + "time": "2024-09-23T13:33:08+00:00" }, { "name": "laravel/tinker", - "version": "v2.9.0", + "version": "v2.10.0", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe" + "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/502e0fe3f0415d06d5db1f83a472f0f3b754bafe", - "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe", + "url": "https://api.github.com/repos/laravel/tinker/zipball/ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5", "shasum": "" }, "require": { @@ -4445,40 +4383,40 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.9.0" + "source": "https://github.com/laravel/tinker/tree/v2.10.0" }, - "time": "2024-01-04T16:10:04+00:00" + "time": "2024-09-23T13:32:56+00:00" }, { "name": "lcobucci/clock", - "version": "3.2.0", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "6f28b826ea01306b07980cb8320ab30b966cd715" + "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/6f28b826ea01306b07980cb8320ab30b966cd715", - "reference": "6f28b826ea01306b07980cb8320ab30b966cd715", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/db3713a61addfffd615b79bf0bc22f0ccc61b86b", + "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b", "shasum": "" }, "require": { - "php": "~8.2.0 || ~8.3.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "infection/infection": "^0.27", - "lcobucci/coding-standard": "^11.0.0", + "infection/infection": "^0.29", + "lcobucci/coding-standard": "^11.1.0", "phpstan/extension-installer": "^1.3.1", "phpstan/phpstan": "^1.10.25", "phpstan/phpstan-deprecation-rules": "^1.1.3", "phpstan/phpstan-phpunit": "^1.3.13", "phpstan/phpstan-strict-rules": "^1.5.1", - "phpunit/phpunit": "^10.2.3" + "phpunit/phpunit": "^11.3.6" }, "type": "library", "autoload": { @@ -4499,7 +4437,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/3.2.0" + "source": "https://github.com/lcobucci/clock/tree/3.3.1" }, "funding": [ { @@ -4511,7 +4449,7 @@ "type": "patreon" } ], - "time": "2023-11-17T17:00:27+00:00" + "time": "2024-09-24T20:45:14+00:00" }, { "name": "lcobucci/jwt", @@ -4918,16 +4856,16 @@ }, { "name": "league/flysystem", - "version": "3.28.0", + "version": "3.29.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c" + "reference": "0adc0d9a51852e170e0028a60bd271726626d3f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", - "reference": "e611adab2b1ae2e3072fa72d62c62f52c2bf1f0c", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/0adc0d9a51852e170e0028a60bd271726626d3f0", + "reference": "0adc0d9a51852e170e0028a60bd271726626d3f0", "shasum": "" }, "require": { @@ -4995,22 +4933,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.28.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.29.0" }, - "time": "2024-05-22T10:09:12+00:00" + "time": "2024-09-29T11:59:11+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.28.0", + "version": "3.29.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "22071ef1604bc776f5ff2468ac27a752514665c8" + "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/22071ef1604bc776f5ff2468ac27a752514665c8", - "reference": "22071ef1604bc776f5ff2468ac27a752514665c8", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/c6ff6d4606e48249b63f269eba7fabdb584e76a9", + "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9", "shasum": "" }, "require": { @@ -5050,22 +4988,22 @@ "storage" ], "support": { - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.28.0" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.29.0" }, - "time": "2024-05-06T20:05:52+00:00" + "time": "2024-08-17T13:10:48+00:00" }, { "name": "league/flysystem-local", - "version": "3.28.0", + "version": "3.29.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40" + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/13f22ea8be526ea58c2ddff9e158ef7c296e4f40", - "reference": "13f22ea8be526ea58c2ddff9e158ef7c296e4f40", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", "shasum": "" }, "require": { @@ -5099,22 +5037,22 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.28.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" }, - "time": "2024-05-06T20:05:52+00:00" + "time": "2024-08-09T21:24:39+00:00" }, { "name": "league/mime-type-detection", - "version": "1.15.0", + "version": "1.16.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301" + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", - "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", "shasum": "" }, "require": { @@ -5145,7 +5083,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" }, "funding": [ { @@ -5157,7 +5095,7 @@ "type": "tidelift" } ], - "time": "2024-01-28T23:22:08+00:00" + "time": "2024-09-21T08:32:55+00:00" }, { "name": "league/oauth2-server", @@ -5423,16 +5361,16 @@ }, { "name": "livewire/livewire", - "version": "v3.5.6", + "version": "v3.5.4", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "597a2808d8d3001cc3ed5ce89a6ebab00f83b80f" + "reference": "b158c6386a892efc6c5e4682e682829baac1f933" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/597a2808d8d3001cc3ed5ce89a6ebab00f83b80f", - "reference": "597a2808d8d3001cc3ed5ce89a6ebab00f83b80f", + "url": "https://api.github.com/repos/livewire/livewire/zipball/b158c6386a892efc6c5e4682e682829baac1f933", + "reference": "b158c6386a892efc6c5e4682e682829baac1f933", "shasum": "" }, "require": { @@ -5440,7 +5378,6 @@ "illuminate/routing": "^10.0|^11.0", "illuminate/support": "^10.0|^11.0", "illuminate/validation": "^10.0|^11.0", - "laravel/prompts": "^0.1.24", "league/mime-type-detection": "^1.9", "php": "^8.1", "symfony/console": "^6.0|^7.0", @@ -5449,6 +5386,7 @@ "require-dev": { "calebporzio/sushi": "^2.1", "laravel/framework": "^10.15.0|^11.0", + "laravel/prompts": "^0.1.6", "mockery/mockery": "^1.3.1", "orchestra/testbench": "^8.21.0|^9.0", "orchestra/testbench-dusk": "^8.24|^9.1", @@ -5487,7 +5425,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.5.6" + "source": "https://github.com/livewire/livewire/tree/v3.5.4" }, "funding": [ { @@ -5495,7 +5433,7 @@ "type": "github" } ], - "time": "2024-08-19T11:52:18+00:00" + "time": "2024-07-15T18:27:32+00:00" }, { "name": "masterminds/html5", @@ -6051,16 +5989,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.1.0", + "version": "v5.3.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" + "reference": "3abf7425cd284141dc5d8d14a9ee444de3345d1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", - "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3abf7425cd284141dc5d8d14a9ee444de3345d1a", + "reference": "3abf7425cd284141dc5d8d14a9ee444de3345d1a", "shasum": "" }, "require": { @@ -6103,22 +6041,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.0" }, - "time": "2024-07-01T20:03:41+00:00" + "time": "2024-09-29T13:56:26+00:00" }, { "name": "novadaemon/filament-pretty-json", - "version": "v2.2.5", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/novadaemon/filament-pretty-json.git", - "reference": "fd7b9258480a668f0416fe4055e28a36679d916b" + "reference": "065f370e1c8d2b031a7b603e59459942d466bc66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/novadaemon/filament-pretty-json/zipball/fd7b9258480a668f0416fe4055e28a36679d916b", - "reference": "fd7b9258480a668f0416fe4055e28a36679d916b", + "url": "https://api.github.com/repos/novadaemon/filament-pretty-json/zipball/065f370e1c8d2b031a7b603e59459942d466bc66", + "reference": "065f370e1c8d2b031a7b603e59459942d466bc66", "shasum": "" }, "require": { @@ -6177,20 +6115,20 @@ "type": "github" } ], - "time": "2024-08-16T18:25:47+00:00" + "time": "2024-09-29T18:43:57+00:00" }, { "name": "nunomaduro/termwind", - "version": "v2.0.1", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a" + "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/58c4c58cf23df7f498daeb97092e34f5259feb6a", - "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/e5f21eade88689536c0cdad4c3cd75f3ed26e01a", + "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a", "shasum": "" }, "require": { @@ -6200,11 +6138,11 @@ }, "require-dev": { "ergebnis/phpstan-rules": "^2.2.0", - "illuminate/console": "^11.0.0", - "laravel/pint": "^1.14.0", - "mockery/mockery": "^1.6.7", - "pestphp/pest": "^2.34.1", - "phpstan/phpstan": "^1.10.59", + "illuminate/console": "^11.1.1", + "laravel/pint": "^1.15.0", + "mockery/mockery": "^1.6.11", + "pestphp/pest": "^2.34.6", + "phpstan/phpstan": "^1.10.66", "phpstan/phpstan-strict-rules": "^1.5.2", "symfony/var-dumper": "^7.0.4", "thecodingmachine/phpstan-strict-rules": "^1.0.0" @@ -6249,7 +6187,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.0.1" + "source": "https://github.com/nunomaduro/termwind/tree/v2.1.0" }, "funding": [ { @@ -6265,31 +6203,33 @@ "type": "github" } ], - "time": "2024-03-06T16:17:14+00:00" + "time": "2024-09-05T15:25:50+00:00" }, { "name": "nwidart/laravel-modules", - "version": "v11.0.11", + "version": "v11.1.4", "source": { "type": "git", "url": "https://github.com/nWidart/laravel-modules.git", - "reference": "9d50adcbf8d11c9ec01e48a5b7adbf320653185c" + "reference": "fb1f6bd7b168baaa6212dee678c18fc983d47ed4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nWidart/laravel-modules/zipball/9d50adcbf8d11c9ec01e48a5b7adbf320653185c", - "reference": "9d50adcbf8d11c9ec01e48a5b7adbf320653185c", + "url": "https://api.github.com/repos/nWidart/laravel-modules/zipball/fb1f6bd7b168baaa6212dee678c18fc983d47ed4", + "reference": "fb1f6bd7b168baaa6212dee678c18fc983d47ed4", "shasum": "" }, "require": { + "ext-dom": "*", "ext-json": "*", - "laravel/pint": "^1.16", + "ext-simplexml": "*", "php": ">=8.2", "wikimedia/composer-merge-plugin": "^2.1" }, "require-dev": { "friendsofphp/php-cs-fixer": "^v3.52", "laravel/framework": "^v11.0", + "laravel/pint": "^1.16", "mockery/mockery": "^1.6", "orchestra/testbench": "^v9.0", "phpstan/phpstan": "^1.4", @@ -6340,7 +6280,7 @@ ], "support": { "issues": "https://github.com/nWidart/laravel-modules/issues", - "source": "https://github.com/nWidart/laravel-modules/tree/v11.0.11" + "source": "https://github.com/nWidart/laravel-modules/tree/v11.1.4" }, "funding": [ { @@ -6352,20 +6292,20 @@ "type": "github" } ], - "time": "2024-06-16T16:26:29+00:00" + "time": "2024-09-22T20:04:49+00:00" }, { "name": "nyholm/psr7", - "version": "1.8.1", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/Nyholm/psr7.git", - "reference": "aa5fc277a4f5508013d571341ade0c3886d4d00e" + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Nyholm/psr7/zipball/aa5fc277a4f5508013d571341ade0c3886d4d00e", - "reference": "aa5fc277a4f5508013d571341ade0c3886d4d00e", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3", "shasum": "" }, "require": { @@ -6418,7 +6358,7 @@ ], "support": { "issues": "https://github.com/Nyholm/psr7/issues", - "source": "https://github.com/Nyholm/psr7/tree/1.8.1" + "source": "https://github.com/Nyholm/psr7/tree/1.8.2" }, "funding": [ { @@ -6430,20 +6370,20 @@ "type": "github" } ], - "time": "2023-11-13T09:31:12+00:00" + "time": "2024-09-09T07:06:30+00:00" }, { "name": "openspout/openspout", - "version": "v4.24.5", + "version": "v4.26.0", "source": { "type": "git", "url": "https://github.com/openspout/openspout.git", - "reference": "393299ae21153f042f48b185f2adeb4b157d1d93" + "reference": "a49b947c0c109f4fd112f9b5c6d6cb3e6baf8b50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/openspout/openspout/zipball/393299ae21153f042f48b185f2adeb4b157d1d93", - "reference": "393299ae21153f042f48b185f2adeb4b157d1d93", + "url": "https://api.github.com/repos/openspout/openspout/zipball/a49b947c0c109f4fd112f9b5c6d6cb3e6baf8b50", + "reference": "a49b947c0c109f4fd112f9b5c6d6cb3e6baf8b50", "shasum": "" }, "require": { @@ -6453,17 +6393,17 @@ "ext-libxml": "*", "ext-xmlreader": "*", "ext-zip": "*", - "php": "~8.1.0 || ~8.2.0 || ~8.3.0" + "php": "~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { "ext-zlib": "*", - "friendsofphp/php-cs-fixer": "^3.60.0", + "friendsofphp/php-cs-fixer": "^3.64.0", "infection/infection": "^0.29.6", "phpbench/phpbench": "^1.3.1", - "phpstan/phpstan": "^1.11.8", + "phpstan/phpstan": "^1.12.4", "phpstan/phpstan-phpunit": "^1.4.0", - "phpstan/phpstan-strict-rules": "^1.6.0", - "phpunit/phpunit": "^10.5.20 || ^11.2.8" + "phpstan/phpstan-strict-rules": "^1.6.1", + "phpunit/phpunit": "^11.3.6" }, "suggest": { "ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)", @@ -6511,7 +6451,7 @@ ], "support": { "issues": "https://github.com/openspout/openspout/issues", - "source": "https://github.com/openspout/openspout/tree/v4.24.5" + "source": "https://github.com/openspout/openspout/tree/v4.26.0" }, "funding": [ { @@ -6523,7 +6463,7 @@ "type": "github" } ], - "time": "2024-07-26T05:48:04+00:00" + "time": "2024-09-24T14:04:43+00:00" }, { "name": "owen-it/laravel-auditing", @@ -6807,16 +6747,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.41", + "version": "3.0.42", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "621c73f7dcb310b61de34d1da4c4204e8ace6ceb" + "reference": "db92f1b1987b12b13f248fe76c3a52cadb67bb98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/621c73f7dcb310b61de34d1da4c4204e8ace6ceb", - "reference": "621c73f7dcb310b61de34d1da4c4204e8ace6ceb", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/db92f1b1987b12b13f248fe76c3a52cadb67bb98", + "reference": "db92f1b1987b12b13f248fe76c3a52cadb67bb98", "shasum": "" }, "require": { @@ -6897,7 +6837,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.41" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.42" }, "funding": [ { @@ -6913,20 +6853,20 @@ "type": "tidelift" } ], - "time": "2024-08-12T00:13:54+00:00" + "time": "2024-09-16T03:06:04+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.30.0", + "version": "1.32.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f" + "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/5ceb0e384997db59f38774bf79c2a6134252c08f", - "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6ca22b154efdd9e3c68c56f5d94670920a1c19a4", + "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4", "shasum": "" }, "require": { @@ -6958,22 +6898,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.32.0" }, - "time": "2024-08-29T09:54:52+00:00" + "time": "2024-09-26T07:23:32+00:00" }, { "name": "pragmarx/google2fa", - "version": "v8.0.2", + "version": "v8.0.3", "source": { "type": "git", "url": "https://github.com/antonioribeiro/google2fa.git", - "reference": "825fb0614534fbaee742df30463297ac5ecf417e" + "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/825fb0614534fbaee742df30463297ac5ecf417e", - "reference": "825fb0614534fbaee742df30463297ac5ecf417e", + "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad", + "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad", "shasum": "" }, "require": { @@ -7010,9 +6950,9 @@ ], "support": { "issues": "https://github.com/antonioribeiro/google2fa/issues", - "source": "https://github.com/antonioribeiro/google2fa/tree/v8.0.2" + "source": "https://github.com/antonioribeiro/google2fa/tree/v8.0.3" }, - "time": "2024-07-13T11:36:19+00:00" + "time": "2024-09-05T11:56:40+00:00" }, { "name": "psr/cache", @@ -7376,16 +7316,16 @@ }, { "name": "psr/log", - "version": "3.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "79dff0b268932c640297f5208d6298f71855c03e" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e", - "reference": "79dff0b268932c640297f5208d6298f71855c03e", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { @@ -7420,9 +7360,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.1" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2024-08-21T13:31:24+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { "name": "psr/simple-cache", @@ -7556,16 +7496,16 @@ }, { "name": "pxlrbt/filament-environment-indicator", - "version": "v2.0.1", + "version": "v2.0.2", "source": { "type": "git", "url": "https://github.com/pxlrbt/filament-environment-indicator.git", - "reference": "8942ad37142298a6eaf7fed747dd9c90402b0ba5" + "reference": "928ccebe9ce14810805b8c23f994f1392e321da2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pxlrbt/filament-environment-indicator/zipball/8942ad37142298a6eaf7fed747dd9c90402b0ba5", - "reference": "8942ad37142298a6eaf7fed747dd9c90402b0ba5", + "url": "https://api.github.com/repos/pxlrbt/filament-environment-indicator/zipball/928ccebe9ce14810805b8c23f994f1392e321da2", + "reference": "928ccebe9ce14810805b8c23f994f1392e321da2", "shasum": "" }, "require": { @@ -7606,7 +7546,7 @@ ], "support": { "issues": "https://github.com/pxlrbt/filament-environment-indicator/issues", - "source": "https://github.com/pxlrbt/filament-environment-indicator/tree/v2.0.1" + "source": "https://github.com/pxlrbt/filament-environment-indicator/tree/v2.0.2" }, "funding": [ { @@ -7614,7 +7554,7 @@ "type": "github" } ], - "time": "2023-09-22T04:12:47+00:00" + "time": "2024-09-21T17:43:56+00:00" }, { "name": "ralouphie/getallheaders", @@ -8167,16 +8107,16 @@ }, { "name": "spatie/color", - "version": "1.5.3", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/spatie/color.git", - "reference": "49739265900cabce4640cd26c3266fd8d2cca390" + "reference": "02ce48c480f86d65702188f738f4e8ccad1b999a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/color/zipball/49739265900cabce4640cd26c3266fd8d2cca390", - "reference": "49739265900cabce4640cd26c3266fd8d2cca390", + "url": "https://api.github.com/repos/spatie/color/zipball/02ce48c480f86d65702188f738f4e8ccad1b999a", + "reference": "02ce48c480f86d65702188f738f4e8ccad1b999a", "shasum": "" }, "require": { @@ -8214,7 +8154,7 @@ ], "support": { "issues": "https://github.com/spatie/color/issues", - "source": "https://github.com/spatie/color/tree/1.5.3" + "source": "https://github.com/spatie/color/tree/1.6.0" }, "funding": [ { @@ -8222,7 +8162,7 @@ "type": "github" } ], - "time": "2022-12-18T12:58:32+00:00" + "time": "2024-09-20T14:00:15+00:00" }, { "name": "spatie/invade", @@ -8585,16 +8525,16 @@ }, { "name": "symfony/console", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111" + "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/1eed7af6961d763e7832e874d7f9b21c3ea9c111", - "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111", + "url": "https://api.github.com/repos/symfony/console/zipball/0fa539d12b3ccf068a722bbbffa07ca7079af9ee", + "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee", "shasum": "" }, "require": { @@ -8658,7 +8598,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.4" + "source": "https://github.com/symfony/console/tree/v7.1.5" }, "funding": [ { @@ -8674,7 +8614,7 @@ "type": "tidelift" } ], - "time": "2024-08-15T22:48:53+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/css-selector", @@ -9041,16 +8981,16 @@ }, { "name": "symfony/filesystem", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "92a91985250c251de9b947a14bb2c9390b1a562c" + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/92a91985250c251de9b947a14bb2c9390b1a562c", - "reference": "92a91985250c251de9b947a14bb2c9390b1a562c", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/61fe0566189bf32e8cfee78335d8776f64a66f5a", + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a", "shasum": "" }, "require": { @@ -9087,7 +9027,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.1.2" + "source": "https://github.com/symfony/filesystem/tree/v7.1.5" }, "funding": [ { @@ -9103,7 +9043,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-09-17T09:16:35+00:00" }, { "name": "symfony/finder", @@ -9171,16 +9111,16 @@ }, { "name": "symfony/html-sanitizer", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/html-sanitizer.git", - "reference": "737cbaa8082b696d0574afd91b9f471eca67fc65" + "reference": "89bf376c056926bd7fe8a81c0f486a060e20fdbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/737cbaa8082b696d0574afd91b9f471eca67fc65", - "reference": "737cbaa8082b696d0574afd91b9f471eca67fc65", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/89bf376c056926bd7fe8a81c0f486a060e20fdbc", + "reference": "89bf376c056926bd7fe8a81c0f486a060e20fdbc", "shasum": "" }, "require": { @@ -9220,7 +9160,7 @@ "sanitizer" ], "support": { - "source": "https://github.com/symfony/html-sanitizer/tree/v7.1.1" + "source": "https://github.com/symfony/html-sanitizer/tree/v7.1.5" }, "funding": [ { @@ -9236,20 +9176,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:55:39+00:00" + "time": "2024-09-20T13:35:23+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" + "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", - "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e30ef73b1e44eea7eb37ba69600a354e553f694b", + "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b", "shasum": "" }, "require": { @@ -9297,7 +9237,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.1.3" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.5" }, "funding": [ { @@ -9313,20 +9253,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6efcbd1b3f444f631c386504fc83eeca25963747" + "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6efcbd1b3f444f631c386504fc83eeca25963747", - "reference": "6efcbd1b3f444f631c386504fc83eeca25963747", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/44204d96150a9df1fc57601ec933d23fefc2d65b", + "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b", "shasum": "" }, "require": { @@ -9411,7 +9351,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.1.4" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.5" }, "funding": [ { @@ -9427,20 +9367,20 @@ "type": "tidelift" } ], - "time": "2024-08-30T17:02:28+00:00" + "time": "2024-09-21T06:09:21+00:00" }, { "name": "symfony/mailer", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee" + "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/8fcff0af9043c8f8a8e229437cea363e282f9aee", - "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee", + "url": "https://api.github.com/repos/symfony/mailer/zipball/bbf21460c56f29810da3df3e206e38dfbb01e80b", + "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b", "shasum": "" }, "require": { @@ -9491,7 +9431,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.1.2" + "source": "https://github.com/symfony/mailer/tree/v7.1.5" }, "funding": [ { @@ -9507,20 +9447,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-09-08T12:32:26+00:00" }, { "name": "symfony/mime", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ccaa6c2503db867f472a587291e764d6a1e58758" + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ccaa6c2503db867f472a587291e764d6a1e58758", - "reference": "ccaa6c2503db867f472a587291e764d6a1e58758", + "url": "https://api.github.com/repos/symfony/mime/zipball/711d2e167e8ce65b05aea6b258c449671cdd38ff", + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff", "shasum": "" }, "require": { @@ -9575,7 +9515,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.1.4" + "source": "https://github.com/symfony/mime/tree/v7.1.5" }, "funding": [ { @@ -9591,24 +9531,24 @@ "type": "tidelift" } ], - "time": "2024-08-13T14:28:19+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -9654,7 +9594,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -9670,24 +9610,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a", - "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -9732,7 +9672,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -9748,26 +9688,25 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c" + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", - "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" @@ -9816,7 +9755,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" }, "funding": [ { @@ -9832,24 +9771,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb", - "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -9897,7 +9836,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -9913,24 +9852,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -9977,7 +9916,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -9993,97 +9932,24 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.30.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "10112722600777e02d2745716b70c5db4ca70442" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442", - "reference": "10112722600777e02d2745716b70c5db4ca70442", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, - "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 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.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-06-19T12:30:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/ec444d3f3f6505bb28d11afa41e75faadebc10a1", - "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -10126,7 +9992,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" }, "funding": [ { @@ -10142,24 +10008,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -10206,7 +10072,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -10222,24 +10088,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af" + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/3fb075789fb91f9ad9af537c4012d523085bd5af", - "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -10282,7 +10148,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" }, "funding": [ { @@ -10298,24 +10164,24 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9" + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", - "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -10358,7 +10224,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" }, "funding": [ { @@ -10374,24 +10240,24 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:35:24+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9" + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/2ba1f33797470debcda07fe9dce20a0003df18e9", - "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-uuid": "*" @@ -10437,7 +10303,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" }, "funding": [ { @@ -10453,20 +10319,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca" + "reference": "5c03ee6369281177f07f7c68252a280beccba847" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca", - "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca", + "url": "https://api.github.com/repos/symfony/process/zipball/5c03ee6369281177f07f7c68252a280beccba847", + "reference": "5c03ee6369281177f07f7c68252a280beccba847", "shasum": "" }, "require": { @@ -10498,7 +10364,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.3" + "source": "https://github.com/symfony/process/tree/v7.1.5" }, "funding": [ { @@ -10514,7 +10380,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:44:47+00:00" + "time": "2024-09-19T21:48:23+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -10765,16 +10631,16 @@ }, { "name": "symfony/string", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b" + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/6cd670a6d968eaeb1c77c2e76091c45c56bc367b", - "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b", + "url": "https://api.github.com/repos/symfony/string/zipball/d66f9c343fa894ec2037cc928381df90a7ad4306", + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306", "shasum": "" }, "require": { @@ -10832,7 +10698,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.4" + "source": "https://github.com/symfony/string/tree/v7.1.5" }, "funding": [ { @@ -10848,20 +10714,20 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:59:40+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/translation", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1" + "reference": "235535e3f84f3dfbdbde0208ede6ca75c3a489ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/8d5e50c813ba2859a6dfc99a0765c550507934a1", - "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1", + "url": "https://api.github.com/repos/symfony/translation/zipball/235535e3f84f3dfbdbde0208ede6ca75c3a489ea", + "reference": "235535e3f84f3dfbdbde0208ede6ca75c3a489ea", "shasum": "" }, "require": { @@ -10926,7 +10792,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.3" + "source": "https://github.com/symfony/translation/tree/v7.1.5" }, "funding": [ { @@ -10942,7 +10808,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-09-16T06:30:38+00:00" }, { "name": "symfony/translation-contracts", @@ -11024,16 +10890,16 @@ }, { "name": "symfony/uid", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "82177535395109075cdb45a70533aa3d7a521cdf" + "reference": "8c7bb8acb933964055215d89f9a9871df0239317" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/82177535395109075cdb45a70533aa3d7a521cdf", - "reference": "82177535395109075cdb45a70533aa3d7a521cdf", + "url": "https://api.github.com/repos/symfony/uid/zipball/8c7bb8acb933964055215d89f9a9871df0239317", + "reference": "8c7bb8acb933964055215d89f9a9871df0239317", "shasum": "" }, "require": { @@ -11078,7 +10944,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.1.4" + "source": "https://github.com/symfony/uid/tree/v7.1.5" }, "funding": [ { @@ -11094,20 +10960,20 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:59:40+00:00" + "time": "2024-09-17T09:16:35+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa" + "reference": "e20e03889539fd4e4211e14d2179226c513c010d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a5fa7481b199090964d6fd5dab6294d5a870c7aa", - "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e20e03889539fd4e4211e14d2179226c513c010d", + "reference": "e20e03889539fd4e4211e14d2179226c513c010d", "shasum": "" }, "require": { @@ -11161,7 +11027,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.4" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.5" }, "funding": [ { @@ -11177,7 +11043,7 @@ "type": "tidelift" } ], - "time": "2024-08-30T16:12:47+00:00" + "time": "2024-09-16T10:07:02+00:00" }, { "name": "tightenco/ziggy", @@ -11304,16 +11170,16 @@ }, { "name": "tpetry/laravel-postgresql-enhanced", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/tpetry/laravel-postgresql-enhanced.git", - "reference": "16cec8445bdfd03044d47ebc29d3f24b40860f1e" + "reference": "a14719f193340a52ff60353b054f31b9975f947b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tpetry/laravel-postgresql-enhanced/zipball/16cec8445bdfd03044d47ebc29d3f24b40860f1e", - "reference": "16cec8445bdfd03044d47ebc29d3f24b40860f1e", + "url": "https://api.github.com/repos/tpetry/laravel-postgresql-enhanced/zipball/a14719f193340a52ff60353b054f31b9975f947b", + "reference": "a14719f193340a52ff60353b054f31b9975f947b", "shasum": "" }, "require": { @@ -11372,9 +11238,9 @@ ], "support": { "issues": "https://github.com/tpetry/laravel-postgresql-enhanced/issues", - "source": "https://github.com/tpetry/laravel-postgresql-enhanced/tree/1.0.1" + "source": "https://github.com/tpetry/laravel-postgresql-enhanced/tree/2.0.0" }, - "time": "2024-08-05T10:22:49+00:00" + "time": "2024-09-27T06:30:41+00:00" }, { "name": "vlucas/phpdotenv", @@ -11798,16 +11664,16 @@ }, { "name": "brianium/paratest", - "version": "v7.5.4", + "version": "v7.5.6", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "c490591cc9c2f4830633b905547d30d5eb609c88" + "reference": "8134d62d5b6f98b145f00db1421f39eb1fd0687b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/c490591cc9c2f4830633b905547d30d5eb609c88", - "reference": "c490591cc9c2f4830633b905547d30d5eb609c88", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/8134d62d5b6f98b145f00db1421f39eb1fd0687b", + "reference": "8134d62d5b6f98b145f00db1421f39eb1fd0687b", "shasum": "" }, "require": { @@ -11821,7 +11687,7 @@ "phpunit/php-code-coverage": "^11.0.6", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-timer": "^7.0.1", - "phpunit/phpunit": "^11.3.3", + "phpunit/phpunit": "^11.3.6", "sebastian/environment": "^7.2.0", "symfony/console": "^6.4.11 || ^7.1.4", "symfony/process": "^6.4.8 || ^7.1.3" @@ -11831,11 +11697,11 @@ "ext-pcov": "*", "ext-posix": "*", "infection/infection": "^0.29.6", - "phpstan/phpstan": "^1.12.1", - "phpstan/phpstan-deprecation-rules": "^1.2.0", + "phpstan/phpstan": "^1.12.5", + "phpstan/phpstan-deprecation-rules": "^1.2.1", "phpstan/phpstan-phpunit": "^1.4.0", - "phpstan/phpstan-strict-rules": "^1.6.0", - "squizlabs/php_codesniffer": "^3.10.2", + "phpstan/phpstan-strict-rules": "^1.6.1", + "squizlabs/php_codesniffer": "^3.10.3", "symfony/filesystem": "^6.4.9 || ^7.1.2" }, "bin": [ @@ -11876,7 +11742,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.5.4" + "source": "https://github.com/paratestphp/paratest/tree/v7.5.6" }, "funding": [ { @@ -11888,7 +11754,7 @@ "type": "paypal" } ], - "time": "2024-09-04T21:15:27+00:00" + "time": "2024-10-02T05:22:28+00:00" }, { "name": "fakerphp/faker", @@ -12016,26 +11882,26 @@ }, { "name": "filp/whoops", - "version": "2.15.4", + "version": "2.16.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" + "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", - "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", + "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", + "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", + "php": "^7.1 || ^8.0", "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" }, "suggest": { "symfony/var-dumper": "Pretty print complex values better with var-dumper available", @@ -12075,7 +11941,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.15.4" + "source": "https://github.com/filp/whoops/tree/2.16.0" }, "funding": [ { @@ -12083,7 +11949,7 @@ "type": "github" } ], - "time": "2023-11-03T12:00:00+00:00" + "time": "2024-09-25T12:00:00+00:00" }, { "name": "fumeapp/modeltyper", @@ -12357,18 +12223,84 @@ ], "time": "2024-07-06T17:46:02+00:00" }, + { + "name": "laravel/pint", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/35c00c05ec43e6b46d295efc0f4386ceb30d50d9", + "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.64.0", + "illuminate/view": "^10.48.20", + "larastan/larastan": "^2.9.8", + "laravel-zero/framework": "^10.4.0", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^1.15.1", + "pestphp/pest": "^2.35.1" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2024-09-24T17:22:50+00:00" + }, { "name": "laravel/sail", - "version": "v1.31.3", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "0a7e2891a85eba2d448a9ffc6fc5ce367e924bc1" + "reference": "511e9c95b0f3ee778dc9e11e242bcd2af8e002cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/0a7e2891a85eba2d448a9ffc6fc5ce367e924bc1", - "reference": "0a7e2891a85eba2d448a9ffc6fc5ce367e924bc1", + "url": "https://api.github.com/repos/laravel/sail/zipball/511e9c95b0f3ee778dc9e11e242bcd2af8e002cd", + "reference": "511e9c95b0f3ee778dc9e11e242bcd2af8e002cd", "shasum": "" }, "require": { @@ -12418,7 +12350,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2024-09-03T20:05:33+00:00" + "time": "2024-09-27T14:58:09+00:00" }, { "name": "laravel/telescope", @@ -13428,16 +13360,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.3.3", + "version": "11.3.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "8ed08766d9a2ed979a2f5fdbb95a0671523419c1" + "reference": "d62c45a19c665bb872c2a47023a0baf41a98bb2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8ed08766d9a2ed979a2f5fdbb95a0671523419c1", - "reference": "8ed08766d9a2ed979a2f5fdbb95a0671523419c1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d62c45a19c665bb872c2a47023a0baf41a98bb2b", + "reference": "d62c45a19c665bb872c2a47023a0baf41a98bb2b", "shasum": "" }, "require": { @@ -13458,13 +13390,13 @@ "phpunit/php-timer": "^7.0.1", "sebastian/cli-parser": "^3.0.2", "sebastian/code-unit": "^3.0.1", - "sebastian/comparator": "^6.0.2", + "sebastian/comparator": "^6.1.0", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.0", "sebastian/exporter": "^6.1.3", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", - "sebastian/type": "^5.0.1", + "sebastian/type": "^5.1.0", "sebastian/version": "^5.0.1" }, "suggest": { @@ -13508,7 +13440,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.3.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.3.6" }, "funding": [ { @@ -13524,7 +13456,7 @@ "type": "tidelift" } ], - "time": "2024-09-04T13:34:52+00:00" + "time": "2024-09-19T10:54:28+00:00" }, { "name": "sebastian/cli-parser", @@ -13698,16 +13630,16 @@ }, { "name": "sebastian/comparator", - "version": "6.0.2", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "450d8f237bd611c45b5acf0733ce43e6bb280f81" + "reference": "fa37b9e2ca618cb051d71b60120952ee8ca8b03d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/450d8f237bd611c45b5acf0733ce43e6bb280f81", - "reference": "450d8f237bd611c45b5acf0733ce43e6bb280f81", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa37b9e2ca618cb051d71b60120952ee8ca8b03d", + "reference": "fa37b9e2ca618cb051d71b60120952ee8ca8b03d", "shasum": "" }, "require": { @@ -13718,12 +13650,12 @@ "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -13763,7 +13695,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.0.2" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.1.0" }, "funding": [ { @@ -13771,7 +13703,7 @@ "type": "github" } ], - "time": "2024-08-12T06:07:25+00:00" + "time": "2024-09-11T15:42:56+00:00" }, { "name": "sebastian/complexity", @@ -14340,28 +14272,28 @@ }, { "name": "sebastian/type", - "version": "5.0.1", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb6a6566f9589e86661291d13eba708cce5eb4aa" + "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb6a6566f9589e86661291d13eba708cce5eb4aa", - "reference": "fb6a6566f9589e86661291d13eba708cce5eb4aa", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/461b9c5da241511a2a0e8f240814fb23ce5c0aac", + "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -14385,7 +14317,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.0.1" + "source": "https://github.com/sebastianbergmann/type/tree/5.1.0" }, "funding": [ { @@ -14393,7 +14325,7 @@ "type": "github" } ], - "time": "2024-07-03T05:11:49+00:00" + "time": "2024-09-17T13:12:04+00:00" }, { "name": "sebastian/version", @@ -14831,16 +14763,16 @@ }, { "name": "symfony/yaml", - "version": "v7.1.4", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "92e080b851c1c655c786a2da77f188f2dccd0f4b" + "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/92e080b851c1c655c786a2da77f188f2dccd0f4b", - "reference": "92e080b851c1c655c786a2da77f188f2dccd0f4b", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4e561c316e135e053bd758bf3b3eb291d9919de4", + "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4", "shasum": "" }, "require": { @@ -14882,7 +14814,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.4" + "source": "https://github.com/symfony/yaml/tree/v7.1.5" }, "funding": [ { @@ -14898,7 +14830,7 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:59:40+00:00" + "time": "2024-09-17T12:49:58+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/app.php b/config/app.php index d3e3d449..1cc8a5b0 100644 --- a/config/app.php +++ b/config/app.php @@ -18,7 +18,11 @@ | */ - 'name' => env('APP_NAME', 'solidtime'), + 'name' => 'solidtime', + + 'version' => env('APP_VERSION'), + + 'build' => env('APP_BUILD'), /* |-------------------------------------------------------------------------- diff --git a/config/scheduling.php b/config/scheduling.php index a577eb4e..71637d2b 100644 --- a/config/scheduling.php +++ b/config/scheduling.php @@ -6,5 +6,7 @@ 'tasks' => [ 'time_entry_send_still_running_mails' => (bool) env('SCHEDULING_TASK_TIME_ENTRY_SEND_STILL_RUNNING_MAILS', true), + 'self_hosting_check_for_update' => (bool) env('SCHEDULING_TASK_SELF_HOSTING_CHECK_FOR_UPDATE', true), + 'self_hosting_telemetry' => (bool) env('SCHEDULING_TASK_SELF_HOSTING_TELEMETRY', true), ], ]; diff --git a/package-lock.json b/package-lock.json index 141503b8..08517d4d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "html", + "name": "solidtime", "lockfileVersion": 3, "requires": true, "packages": { @@ -24,19 +24,19 @@ "devDependencies": { "@inertiajs/vue3": "^1.0.0", "@playwright/test": "^1.41.1", - "@tailwindcss/forms": "^0.5.2", - "@tailwindcss/typography": "^0.5.2", + "@tailwindcss/forms": "^0.5.9", + "@tailwindcss/typography": "^0.5.15", "@types/node": "^20.11.5", "@vitejs/plugin-vue": "^4.5.0", "@vue/tsconfig": "^0.5.1", - "autoprefixer": "^10.4.7", + "autoprefixer": "^10.4.20", "axios": "^1.6.4", "eslint-plugin-unused-imports": "^3.1.0", "laravel-vite-plugin": "^1.0.0", "openapi-zod-client": "^1.16.2", - "postcss": "^8.4.14", - "postcss-nesting": "^12.1.0", - "tailwindcss": "^3.1.0", + "postcss": "^8.4.47", + "postcss-nesting": "^12.1.5", + "tailwindcss": "^3.4.13", "typescript": "^5.3.3", "vite": "^5.0.0", "vite-plugin-checker": "^0.7.2", @@ -1635,24 +1635,22 @@ } }, "node_modules/@tailwindcss/forms": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz", - "integrity": "sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==", + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.9.tgz", + "integrity": "sha512-tM4XVr2+UVTxXJzey9Twx48c1gcxFStqn1pQz0tRsX8o3DvxhN5oY5pvyAbUx7VTaZxpej4Zzvc6h+1RJBzpIg==", "dev": true, - "license": "MIT", "dependencies": { "mini-svg-data-uri": "^1.2.3" }, "peerDependencies": { - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20" } }, "node_modules/@tailwindcss/typography": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.14.tgz", - "integrity": "sha512-ZvOCjUbsJBjL9CxQBn+VEnFpouzuKhxh2dH8xMIWHILL+HfOYtlAkWcyoon8LlzE53d2Yo6YO6pahKKNW3q1YQ==", + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.15.tgz", + "integrity": "sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==", "dev": true, - "license": "MIT", "dependencies": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", @@ -1660,7 +1658,7 @@ "postcss-selector-parser": "6.0.10" }, "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders" + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20" } }, "node_modules/@tanstack/virtual-core": { @@ -2413,7 +2411,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "browserslist": "^4.23.3", "caniuse-lite": "^1.0.30001646", @@ -4647,10 +4644,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "license": "ISC" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -4767,9 +4763,9 @@ } }, "node_modules/postcss": { - "version": "8.4.41", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", - "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "funding": [ { "type": "opencollective", @@ -4784,11 +4780,10 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -4930,7 +4925,6 @@ "url": "https://opencollective.com/csstools" } ], - "license": "MIT-0", "dependencies": { "@csstools/selector-resolve-nested": "^1.1.0", "@csstools/selector-specificity": "^3.1.1", @@ -5406,10 +5400,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "license": "BSD-3-Clause", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -5623,10 +5616,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz", - "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==", - "license": "MIT", + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz", + "integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", diff --git a/package.json b/package.json index 2f693426..4e75c988 100644 --- a/package.json +++ b/package.json @@ -13,19 +13,19 @@ "devDependencies": { "@inertiajs/vue3": "^1.0.0", "@playwright/test": "^1.41.1", - "@tailwindcss/forms": "^0.5.2", - "@tailwindcss/typography": "^0.5.2", + "@tailwindcss/forms": "^0.5.9", + "@tailwindcss/typography": "^0.5.15", "@types/node": "^20.11.5", "@vitejs/plugin-vue": "^4.5.0", "@vue/tsconfig": "^0.5.1", - "autoprefixer": "^10.4.7", + "autoprefixer": "^10.4.20", "axios": "^1.6.4", "eslint-plugin-unused-imports": "^3.1.0", "laravel-vite-plugin": "^1.0.0", "openapi-zod-client": "^1.16.2", - "postcss": "^8.4.14", - "postcss-nesting": "^12.1.0", - "tailwindcss": "^3.1.0", + "postcss": "^8.4.47", + "postcss-nesting": "^12.1.5", + "tailwindcss": "^3.4.13", "typescript": "^5.3.3", "vite": "^5.0.0", "vite-plugin-checker": "^0.7.2", diff --git a/resources/css/filament/admin/tailwind.config.js b/resources/css/filament/admin/tailwind.config.js new file mode 100644 index 00000000..67de966a --- /dev/null +++ b/resources/css/filament/admin/tailwind.config.js @@ -0,0 +1,10 @@ +import preset from '../../../../vendor/filament/filament/tailwind.config.preset' + +export default { + presets: [preset], + content: [ + './app/Filament/**/*.php', + './resources/views/filament/**/*.blade.php', + './vendor/filament/**/*.blade.php', + ], +} diff --git a/resources/css/filament/admin/theme.css b/resources/css/filament/admin/theme.css new file mode 100644 index 00000000..c3a62491 --- /dev/null +++ b/resources/css/filament/admin/theme.css @@ -0,0 +1,3 @@ +@import '/vendor/filament/filament/resources/css/theme.css'; + +@config 'tailwind.config.js'; diff --git a/resources/views/filament/widgets/server-overview.blade.php b/resources/views/filament/widgets/server-overview.blade.php new file mode 100644 index 00000000..56763dbb --- /dev/null +++ b/resources/views/filament/widgets/server-overview.blade.php @@ -0,0 +1,28 @@ + + +
+ Version v{{ $version }}
+ Build {{ $build }} +
+ + @if ($currentVersion !== null) +
+ @if ($needsUpdate) + + + + Update available (v{{ $currentVersion }}) + @else + + Current version + @endif +
+ @endif +
+
diff --git a/tests/Unit/Console/Commands/SelfHost/SelfHostCheckForUpdateCommandTest.php b/tests/Unit/Console/Commands/SelfHost/SelfHostCheckForUpdateCommandTest.php new file mode 100644 index 00000000..8d21a58c --- /dev/null +++ b/tests/Unit/Console/Commands/SelfHost/SelfHostCheckForUpdateCommandTest.php @@ -0,0 +1,72 @@ + Http::response(['version' => '1.2.3'], 200), + ]); + + // Act + $exitCode = $this->withoutMockingConsoleOutput()->artisan('self-host:check-for-update'); + + // Assert + $this->assertSame(Command::SUCCESS, $exitCode); + $output = Artisan::output(); + $this->assertSame('1.2.3', Cache::get('latest_version')); + } + + public function test_checks_for_update_fails_gracefully_if_response_has_error_status_code(): void + { + // Arrange + Http::fake([ + 'https://app.solidtime.io/api/check-for-update' => Http::response(null, 500), + ]); + + // Act + $exitCode = $this->withoutMockingConsoleOutput()->artisan('self-host:check-for-update'); + + // Assert + $this->assertSame(Command::FAILURE, $exitCode); + $output = Artisan::output(); + $this->assertStringContainsString('Failed to check for update, check the logs for more information.', $output); + } + + public function test_checks_for_update_fails_gracefully_if_timeout_happens(): void + { + // Arrange + Http::fake([ + 'https://app.solidtime.io/api/check-for-update' => function (): void { + throw new ConnectionException('Connection timed out'); + }, + ]); + + // Act + $exitCode = $this->withoutMockingConsoleOutput()->artisan('self-host:check-for-update'); + + // Assert + $this->assertSame(Command::FAILURE, $exitCode); + $output = Artisan::output(); + $this->assertStringContainsString('Failed to check for update, check the logs for more information.', $output); + } +} diff --git a/tests/Unit/Console/Commands/SelfHost/SelfHostTelemetryCommandTest.php b/tests/Unit/Console/Commands/SelfHost/SelfHostTelemetryCommandTest.php new file mode 100644 index 00000000..f92655fc --- /dev/null +++ b/tests/Unit/Console/Commands/SelfHost/SelfHostTelemetryCommandTest.php @@ -0,0 +1,71 @@ + Http::response(['success' => true], 200), + ]); + + // Act + $exitCode = $this->withoutMockingConsoleOutput()->artisan('self-host:telemetry'); + + // Assert + $this->assertSame(Command::SUCCESS, $exitCode); + $output = Artisan::output(); + $this->assertSame('', $output); + } + + public function test_telemetry_sends_fails_gracefully_if_response_has_error_status_code(): void + { + // Arrange + Http::fake([ + 'https://app.solidtime.io/api/telemetry' => Http::response(null, 500), + ]); + + // Act + $exitCode = $this->withoutMockingConsoleOutput()->artisan('self-host:telemetry'); + + // Assert + $this->assertSame(Command::FAILURE, $exitCode); + $output = Artisan::output(); + $this->assertStringContainsString('Failed to send telemetry data, check the logs for more information.', $output); + } + + public function test_telemetry_sends_fails_gracefully_if_timeout_happens(): void + { + // Arrange + Http::fake([ + 'https://app.solidtime.io/api/telemetry' => function (): void { + throw new ConnectionException('Connection timed out'); + }, + ]); + + // Act + $exitCode = $this->withoutMockingConsoleOutput()->artisan('self-host:telemetry'); + + // Assert + $this->assertSame(Command::FAILURE, $exitCode); + $output = Artisan::output(); + $this->assertStringContainsString('Failed to send telemetry data, check the logs for more information.', $output); + } +} diff --git a/tests/Unit/Filament/AuditResourceTest.php b/tests/Unit/Filament/Resources/AuditResourceTest.php similarity index 95% rename from tests/Unit/Filament/AuditResourceTest.php rename to tests/Unit/Filament/Resources/AuditResourceTest.php index f4c2753a..1266a72b 100644 --- a/tests/Unit/Filament/AuditResourceTest.php +++ b/tests/Unit/Filament/Resources/AuditResourceTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Tests\Unit\Filament; +namespace Tests\Unit\Filament\Resources; use App\Filament\Resources\AuditResource; use App\Models\Audit; @@ -12,6 +12,7 @@ use Illuminate\Support\Facades\DB; use Livewire\Livewire; use PHPUnit\Framework\Attributes\UsesClass; +use Tests\Unit\Filament\FilamentTestCase; #[UsesClass(AuditResource::class)] class AuditResourceTest extends FilamentTestCase diff --git a/tests/Unit/Filament/ClientResourceTest.php b/tests/Unit/Filament/Resources/ClientResourceTest.php similarity index 93% rename from tests/Unit/Filament/ClientResourceTest.php rename to tests/Unit/Filament/Resources/ClientResourceTest.php index 606dede5..cd01f297 100644 --- a/tests/Unit/Filament/ClientResourceTest.php +++ b/tests/Unit/Filament/Resources/ClientResourceTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Tests\Unit\Filament; +namespace Tests\Unit\Filament\Resources; use App\Filament\Resources\ClientResource; use App\Models\Client; @@ -10,6 +10,7 @@ use Illuminate\Support\Facades\Config; use Livewire\Livewire; use PHPUnit\Framework\Attributes\UsesClass; +use Tests\Unit\Filament\FilamentTestCase; #[UsesClass(ClientResource::class)] class ClientResourceTest extends FilamentTestCase diff --git a/tests/Unit/Filament/FailedJobResourceTest.php b/tests/Unit/Filament/Resources/FailedJobResourceTest.php similarity index 94% rename from tests/Unit/Filament/FailedJobResourceTest.php rename to tests/Unit/Filament/Resources/FailedJobResourceTest.php index db217b14..7b4e6d4c 100644 --- a/tests/Unit/Filament/FailedJobResourceTest.php +++ b/tests/Unit/Filament/Resources/FailedJobResourceTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Tests\Unit\Filament; +namespace Tests\Unit\Filament\Resources; use App\Filament\Resources\FailedJobResource; use App\Filament\Resources\FailedJobResource\Pages\ViewFailedJobs; @@ -11,6 +11,7 @@ use Illuminate\Support\Facades\Config; use Livewire\Livewire; use PHPUnit\Framework\Attributes\UsesClass; +use Tests\Unit\Filament\FilamentTestCase; #[UsesClass(FailedJobResource::class)] class FailedJobResourceTest extends FilamentTestCase diff --git a/tests/Unit/Filament/OrganizationResourceTest.php b/tests/Unit/Filament/Resources/OrganizationResourceTest.php similarity index 96% rename from tests/Unit/Filament/OrganizationResourceTest.php rename to tests/Unit/Filament/Resources/OrganizationResourceTest.php index 63a98be2..ab0c4be5 100644 --- a/tests/Unit/Filament/OrganizationResourceTest.php +++ b/tests/Unit/Filament/Resources/OrganizationResourceTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Tests\Unit\Filament; +namespace Tests\Unit\Filament\Resources; use App\Filament\Resources\OrganizationResource; use App\Models\Organization; @@ -12,6 +12,7 @@ use Livewire\Livewire; use Mockery\MockInterface; use PHPUnit\Framework\Attributes\UsesClass; +use Tests\Unit\Filament\FilamentTestCase; #[UsesClass(OrganizationResource::class)] class OrganizationResourceTest extends FilamentTestCase diff --git a/tests/Unit/Filament/ProjectResourceTest.php b/tests/Unit/Filament/Resources/ProjectResourceTest.php similarity index 93% rename from tests/Unit/Filament/ProjectResourceTest.php rename to tests/Unit/Filament/Resources/ProjectResourceTest.php index cddeba13..6c1359a3 100644 --- a/tests/Unit/Filament/ProjectResourceTest.php +++ b/tests/Unit/Filament/Resources/ProjectResourceTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Tests\Unit\Filament; +namespace Tests\Unit\Filament\Resources; use App\Filament\Resources\ProjectResource; use App\Models\Project; @@ -10,6 +10,7 @@ use Illuminate\Support\Facades\Config; use Livewire\Livewire; use PHPUnit\Framework\Attributes\UsesClass; +use Tests\Unit\Filament\FilamentTestCase; #[UsesClass(ProjectResource::class)] class ProjectResourceTest extends FilamentTestCase diff --git a/tests/Unit/Filament/TagResourceTest.php b/tests/Unit/Filament/Resources/TagResourceTest.php similarity index 93% rename from tests/Unit/Filament/TagResourceTest.php rename to tests/Unit/Filament/Resources/TagResourceTest.php index 29d64ab2..c3637028 100644 --- a/tests/Unit/Filament/TagResourceTest.php +++ b/tests/Unit/Filament/Resources/TagResourceTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Tests\Unit\Filament; +namespace Tests\Unit\Filament\Resources; use App\Filament\Resources\TagResource; use App\Models\Tag; @@ -10,6 +10,7 @@ use Illuminate\Support\Facades\Config; use Livewire\Livewire; use PHPUnit\Framework\Attributes\UsesClass; +use Tests\Unit\Filament\FilamentTestCase; #[UsesClass(TagResource::class)] class TagResourceTest extends FilamentTestCase diff --git a/tests/Unit/Filament/TaskResourceTest.php b/tests/Unit/Filament/Resources/TaskResourceTest.php similarity index 93% rename from tests/Unit/Filament/TaskResourceTest.php rename to tests/Unit/Filament/Resources/TaskResourceTest.php index 9e27d5f6..a3b49814 100644 --- a/tests/Unit/Filament/TaskResourceTest.php +++ b/tests/Unit/Filament/Resources/TaskResourceTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Tests\Unit\Filament; +namespace Tests\Unit\Filament\Resources; use App\Filament\Resources\TaskResource; use App\Models\Task; @@ -10,6 +10,7 @@ use Illuminate\Support\Facades\Config; use Livewire\Livewire; use PHPUnit\Framework\Attributes\UsesClass; +use Tests\Unit\Filament\FilamentTestCase; #[UsesClass(TaskResource::class)] class TaskResourceTest extends FilamentTestCase diff --git a/tests/Unit/Filament/TimeEntryResourceTest.php b/tests/Unit/Filament/Resources/TimeEntryResourceTest.php similarity index 94% rename from tests/Unit/Filament/TimeEntryResourceTest.php rename to tests/Unit/Filament/Resources/TimeEntryResourceTest.php index 583f10f4..86d2f9e1 100644 --- a/tests/Unit/Filament/TimeEntryResourceTest.php +++ b/tests/Unit/Filament/Resources/TimeEntryResourceTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Tests\Unit\Filament; +namespace Tests\Unit\Filament\Resources; use App\Filament\Resources\TimeEntryResource; use App\Models\TimeEntry; @@ -10,6 +10,7 @@ use Illuminate\Support\Facades\Config; use Livewire\Livewire; use PHPUnit\Framework\Attributes\UsesClass; +use Tests\Unit\Filament\FilamentTestCase; #[UsesClass(TimeEntryResource::class)] class TimeEntryResourceTest extends FilamentTestCase diff --git a/tests/Unit/Filament/UserResourceTest.php b/tests/Unit/Filament/Resources/UserResourceTest.php similarity index 97% rename from tests/Unit/Filament/UserResourceTest.php rename to tests/Unit/Filament/Resources/UserResourceTest.php index 3e973f4c..1f5ced07 100644 --- a/tests/Unit/Filament/UserResourceTest.php +++ b/tests/Unit/Filament/Resources/UserResourceTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Tests\Unit\Filament; +namespace Tests\Unit\Filament\Resources; use App\Exceptions\Api\CanNotDeleteUserWhoIsOwnerOfOrganizationWithMultipleMembers; use App\Filament\Resources\TimeEntryResource; @@ -13,6 +13,7 @@ use Livewire\Livewire; use Mockery\MockInterface; use PHPUnit\Framework\Attributes\UsesClass; +use Tests\Unit\Filament\FilamentTestCase; #[UsesClass(TimeEntryResource::class)] class UserResourceTest extends FilamentTestCase diff --git a/tests/Unit/Filament/Widgets/ServerOverviewWidgetTest.php b/tests/Unit/Filament/Widgets/ServerOverviewWidgetTest.php new file mode 100644 index 00000000..02134e8a --- /dev/null +++ b/tests/Unit/Filament/Widgets/ServerOverviewWidgetTest.php @@ -0,0 +1,83 @@ +withPersonalOrganization()->create([ + 'email' => 'admin@example.com', + ]); + + $this->actingAs($user); + } + + public function test_shows_version_and_build_it_no_information_about_the_current_version_exists(): void + { + // Arrange + Config::set('app.version', '1.0.0'); + Config::set('app.build', 'ABC123'); + Cache::forget('latest_version'); + + // Act + $response = Livewire::test(ServerOverview::class); + + // Assert + $response->assertSuccessful(); + $response->assertSee('1.0.0'); + $response->assertSee('ABC123'); + $response->assertDontSee('Update available'); + $response->assertDontSee('Current version'); + } + + public function test_show_version_is_current_when_the_latest_version_is_the_same_as_the_current_version(): void + { + // Arrange + Config::set('app.version', '1.0.0'); + Config::set('app.build', 'ABC123'); + Cache::put('latest_version', '1.0.0'); + + // Act + $response = Livewire::test(ServerOverview::class); + + // Assert + $response->assertSuccessful(); + $response->assertSee('1.0.0'); + $response->assertSee('ABC123'); + $response->assertDontSee('Update available'); + $response->assertSee('Current version'); + } + + public function test_shows_update_available(): void + { + // Arrange + Config::set('app.version', '1.0.0'); + Config::set('app.build', 'ABC123'); + Cache::put('latest_version', '1.0.1'); + + // Act + $response = Livewire::test(ServerOverview::class); + + // Assert + $response->assertSuccessful(); + $response->assertSee('1.0.0'); + $response->assertSee('ABC123'); + $response->assertSee('Update available'); + $response->assertDontSee('Current version'); + $response->assertSee('1.0.1'); + } +} diff --git a/vite.config.js b/vite.config.js index a028d3ca..c057f5f7 100644 --- a/vite.config.js +++ b/vite.config.js @@ -8,7 +8,7 @@ import { } from './vite-module-loader.js'; async function getConfig() { - const paths = ['resources/js/app.ts', 'resources/css/app.css']; + const paths = ['resources/js/app.ts', 'resources/css/app.css', 'resources/css/filament/admin/theme.css']; const modulePaths = await collectModuleAssetsPaths('extensions'); const additionalPlugins = await collectModulePlugins('extensions');