diff --git a/.env.example b/.env.example
index 11dd4fb..e4525e5 100644
--- a/.env.example
+++ b/.env.example
@@ -2,7 +2,7 @@ APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
-APP_URL=http://localhost
+APP_URL=http://localhost:8000
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..3379284
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,118 @@
+name: Laravel Chat App CI Workflow
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ branches: [master]
+
+jobs:
+ ci-laravel-chat-app:
+ runs-on: ubuntu-latest
+ services:
+ mysql:
+ image: mysql:8
+ env:
+ MYSQL_ROOT_PASSWORD: root
+ MYSQL_DATABASE: laravel_chat_app
+ ports:
+ - 3306:3306
+ options: >-
+ --health-cmd="mysqladmin ping -uroot -proot"
+ --health-interval=10s
+ --health-timeout=5s
+ --health-retries=5
+
+ env:
+ APP_ENV: testing
+ APP_DEBUG: true
+ APP_URL: http://127.0.0.1
+ DB_CONNECTION: mysql
+ DB_HOST: 127.0.0.1
+ DB_PORT: 3306
+ DB_DATABASE: laravel_chat_app
+ DB_USERNAME: root
+ DB_PASSWORD: root
+ MAIL_MAILER: log
+ CACHE_DRIVER: array
+ SESSION_DRIVER: array
+ QUEUE_CONNECTION: sync
+ SCOUT_DRIVER: database
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up PHP 8.1
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: '8.1'
+ extensions: mbstring, bcmath, pdo_mysql, exif, pcntl, gd
+ coverage: pcov
+ - name: Set up Node.js 20
+ uses: actions/setup-node@v3
+ with:
+ node-version: 20
+
+ - name: Build Laravel Chat App
+ run: make build
+
+ - name: Upload application build artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: laravel-chat-app-build
+ path: build/chat-app.zip
+
+ - name: Wait for MySQL service
+ run: |
+ for i in {1..30}; do
+ if mysqladmin ping -h 127.0.0.1 -uroot -proot > /dev/null 2>&1; then
+ echo "MySQL is ready!"
+ break
+ fi
+ echo "Waiting for MySQL..."
+ sleep 2
+ done
+
+ - name: Run tests and generate JUnit report
+ run: |
+ mkdir -p storage/test-reports
+ php artisan test --log-junit storage/test-reports/junit.xml --coverage
+
+ - name: Upload test report artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: laravel-chat-app-test-report
+ path: storage/test-reports/junit.xml
+
+ - name: Upload code coverage artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: laravel-chat-app-coverage
+ path: coverage.txt
+
+ deploy:
+ runs-on: ubuntu-latest
+ needs: ci-laravel-chat-app
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up Docker
+ uses: docker/setup-buildx-action@v2
+
+ - name: Log in to Docker Hub
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_PASSWORD }}
+
+ - name: Build and push Docker image
+ run: |
+ docker build -t ${{ secrets.DOCKER_USERNAME }}/laravel-chat-app:latest .
+ docker push ${{ secrets.DOCKER_USERNAME }}/laravel-chat-app:latest
+
+ - name: Deploy with Docker Compose v2
+ run: |
+ docker compose down
+ docker compose up -d --build
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..7f4ebca
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,42 @@
+FROM php:8.2-apache
+
+# Install system dependencies
+RUN apt-get update && apt-get install -y \
+ libpng-dev libonig-dev libxml2-dev zip unzip git curl nodejs npm
+
+# Install PHP extensions
+RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
+
+# Set working directory
+WORKDIR /var/www
+
+# Copy app source
+COPY . /var/www
+
+# Install PHP dependencies
+RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
+ && composer install --no-interaction --prefer-dist --optimize-autoloader
+
+# Install Node dependencies and build assets
+RUN npm install && npm run build
+
+# Make Apache serve from Laravel's public directory
+RUN rm -rf /var/www/html && ln -s /var/www/public /var/www/html
+
+# Ensure .env exists (for production, mount your real .env or use secrets)
+RUN [ ! -f .env ] && cp .env.example .env || true
+
+# Set permissions
+RUN chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache
+
+RUN a2enmod rewrite
+
+RUN echo '\n\
+ AllowOverride All\n\
+ Require all granted\n\
+ ' > /etc/apache2/conf-available/laravel.conf \
+ && a2enconf laravel
+
+
+EXPOSE 80
+CMD ["apache2-foreground"]
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..fe12066
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,23 @@
+APP_ENV=.env
+
+install:
+ composer install --no-interaction --prefer-dist --ignore-platform-reqs
+ npm ci
+
+setup-env:
+ @test -f $(APP_ENV) || cp .env.example $(APP_ENV)
+ php artisan key:generate
+
+migrate:
+ php artisan migrate --seed --force
+
+compile:
+ npm run build
+
+package:
+ @mkdir -p build
+ zip -r build/chat-app.zip . -x "*.git*" "node_modules/*" "vendor/*" "storage/logs/*" "build/*"
+ @echo "Application packaged at build/chat-app.zip"
+
+build: install setup-env migrate compile package
+ @echo "Build completed successfully!"
diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php
index a0ed2aa..8ca5b90 100644
--- a/app/Http/Controllers/Auth/AuthenticatedSessionController.php
+++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php
@@ -34,6 +34,13 @@ public function store(LoginRequest $request): RedirectResponse
$request->session()->regenerate();
+ $user = $request->user();
+ $user->update([
+ 'status' => 'online',
+ 'last_seen_at' => now(),
+ ]);
+
+
return redirect()->intended(RouteServiceProvider::HOME);
}
@@ -43,6 +50,7 @@ public function store(LoginRequest $request): RedirectResponse
public function destroy(Request $request): RedirectResponse
{
Auth::guard('web')->user()->update([
+ 'status' => 'offline',
'last_seen_at' => now(),
]);
diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php
index f6d60db..bfad80c 100644
--- a/app/Http/Controllers/Auth/RegisteredUserController.php
+++ b/app/Http/Controllers/Auth/RegisteredUserController.php
@@ -33,8 +33,8 @@ public function store(Request $request): RedirectResponse
{
$request->validate([
'name' => 'required|string|max:255',
- 'username' => 'required|string|max:255|alpha_num|unique:'.User::class,
- 'email' => 'required|string|email|max:255|unique:'.User::class,
+ 'username' => 'required|string|max:255|alpha_num|unique:users,username',
+ 'email' => 'required|string|email|max:255|unique:users,email',
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
@@ -45,9 +45,10 @@ public function store(Request $request): RedirectResponse
'password' => Hash::make($request->password),
'uuid' => str()->uuid(),
'last_seen_at' => now(),
+ 'status' => 'online',
]);
-// event(new Registered($user));
+ event(new Registered($user));
Auth::login($user);
diff --git a/app/Http/Controllers/ChatController.php b/app/Http/Controllers/ChatController.php
index 9c5b166..11e58aa 100644
--- a/app/Http/Controllers/ChatController.php
+++ b/app/Http/Controllers/ChatController.php
@@ -130,4 +130,19 @@ private function loadMessages($user)
->values()
->toArray();
}
+
+ public function update(Chat $chat, ChatRequest $request)
+ {
+ if ($chat->sender_id !== auth()->id()) {
+ abort(403);
+ }
+
+ $chat->update([
+ 'message' => $request->message,
+ ]);
+
+ broadcast(new NewMessageEvent($chat->load('receiver')))->toOthers();
+
+ return back();
+ }
}
diff --git a/app/Models/Chat.php b/app/Models/Chat.php
index 004962c..c0295bb 100644
--- a/app/Models/Chat.php
+++ b/app/Models/Chat.php
@@ -7,7 +7,9 @@
class Chat extends Model
{
- protected $guarded = ['id'];
+ use HasFactory;
+
+ protected $fillable = ['sender_id', 'receiver_id', 'message', 'reply_id', 'seen_at', 'message_deleted_at'];
protected $casts = [
'seen_at' => 'datetime',
diff --git a/app/Models/User.php b/app/Models/User.php
index 416d592..173aa54 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -25,6 +25,7 @@ class User extends Authenticatable
'password',
'uuid',
'last_seen_at',
+ 'status'
];
/**
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 0711696..7c9799a 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -4,6 +4,7 @@
use App\Helpers\Helper;
use Illuminate\Support\ServiceProvider;
+use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
@@ -20,6 +21,8 @@ public function register(): void
*/
public function boot(): void
{
+ Schema::defaultStringLength(191);
+
\Broadcast::channel('online-users', function ($user) {
return [
'id' => $user->id,
@@ -28,5 +31,6 @@ public function boot(): void
'last_seen_at' => Helper::userLastActivityStatus($user->last_seen_at),
];
});
+ Schema::defaultStringLength(191);
}
}
diff --git a/build/chat-app.zip b/build/chat-app.zip
new file mode 100644
index 0000000..443e746
Binary files /dev/null and b/build/chat-app.zip differ
diff --git a/composer.json b/composer.json
index 5e84693..c9815d9 100644
--- a/composer.json
+++ b/composer.json
@@ -54,6 +54,9 @@
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi"
+ ],
+ "test": [
+ "@php artisan test"
]
},
"extra": {
diff --git a/composer.lock b/composer.lock
index 4eb9987..f3cac1b 100644
--- a/composer.lock
+++ b/composer.lock
@@ -8,25 +8,25 @@
"packages": [
{
"name": "brick/math",
- "version": "0.11.0",
+ "version": "0.12.3",
"source": {
"type": "git",
"url": "https://github.com/brick/math.git",
- "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478"
+ "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478",
- "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478",
+ "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba",
+ "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba",
"shasum": ""
},
"require": {
- "php": "^8.0"
+ "php": "^8.1"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.2",
- "phpunit/phpunit": "^9.0",
- "vimeo/psalm": "5.0.0"
+ "phpunit/phpunit": "^10.1",
+ "vimeo/psalm": "6.8.8"
},
"type": "library",
"autoload": {
@@ -46,12 +46,17 @@
"arithmetic",
"bigdecimal",
"bignum",
+ "bignumber",
"brick",
- "math"
+ "decimal",
+ "integer",
+ "math",
+ "mathematics",
+ "rational"
],
"support": {
"issues": "https://github.com/brick/math/issues",
- "source": "https://github.com/brick/math/tree/0.11.0"
+ "source": "https://github.com/brick/math/tree/0.12.3"
},
"funding": [
{
@@ -59,20 +64,89 @@
"type": "github"
}
],
- "time": "2023-01-15T23:15:59+00:00"
+ "time": "2025-02-28T13:11:00+00:00"
+ },
+ {
+ "name": "carbonphp/carbon-doctrine-types",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git",
+ "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb",
+ "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/dbal": "<3.7.0 || >=4.0.0"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^3.7.0",
+ "nesbot/carbon": "^2.71.0 || ^3.0.0",
+ "phpunit/phpunit": "^10.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Carbon\\Doctrine\\": "src/Carbon/Doctrine/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "KyleKatarn",
+ "email": "kylekatarnls@gmail.com"
+ }
+ ],
+ "description": "Types to use Carbon in Doctrine",
+ "keywords": [
+ "carbon",
+ "date",
+ "datetime",
+ "doctrine",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues",
+ "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/kylekatarnls",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/Carbon",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-11T17:09:12+00:00"
},
{
"name": "dflydev/dot-access-data",
- "version": "v3.0.2",
+ "version": "v3.0.3",
"source": {
"type": "git",
"url": "https://github.com/dflydev/dflydev-dot-access-data.git",
- "reference": "f41715465d65213d644d3141a6a93081be5d3549"
+ "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549",
- "reference": "f41715465d65213d644d3141a6a93081be5d3549",
+ "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f",
+ "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f",
"shasum": ""
},
"require": {
@@ -132,39 +206,38 @@
],
"support": {
"issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
- "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2"
+ "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3"
},
- "time": "2022-10-27T11:44:00+00:00"
+ "time": "2024-07-08T12:26:09+00:00"
},
{
"name": "doctrine/inflector",
- "version": "2.0.8",
+ "version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
- "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff"
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff",
- "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b",
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^11.0",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpstan/phpstan-strict-rules": "^1.3",
- "phpunit/phpunit": "^8.5 || ^9.5",
- "vimeo/psalm": "^4.25 || ^5.4"
+ "doctrine/coding-standard": "^12.0 || ^13.0",
+ "phpstan/phpstan": "^1.12 || ^2.0",
+ "phpstan/phpstan-phpunit": "^1.4 || ^2.0",
+ "phpstan/phpstan-strict-rules": "^1.6 || ^2.0",
+ "phpunit/phpunit": "^8.5 || ^12.2"
},
"type": "library",
"autoload": {
"psr-4": {
- "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
+ "Doctrine\\Inflector\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -209,7 +282,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
- "source": "https://github.com/doctrine/inflector/tree/2.0.8"
+ "source": "https://github.com/doctrine/inflector/tree/2.1.0"
},
"funding": [
{
@@ -225,31 +298,31 @@
"type": "tidelift"
}
],
- "time": "2023-06-16T13:40:37+00:00"
+ "time": "2025-08-10T19:31:58+00:00"
},
{
"name": "doctrine/lexer",
- "version": "3.0.0",
+ "version": "3.0.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
- "reference": "84a527db05647743d50373e0ec53a152f2cde568"
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568",
- "reference": "84a527db05647743d50373e0ec53a152f2cde568",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+ "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
"shasum": ""
},
"require": {
"php": "^8.1"
},
"require-dev": {
- "doctrine/coding-standard": "^10",
- "phpstan/phpstan": "^1.9",
- "phpunit/phpunit": "^9.5",
+ "doctrine/coding-standard": "^12",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^10.5",
"psalm/plugin-phpunit": "^0.18.3",
- "vimeo/psalm": "^5.0"
+ "vimeo/psalm": "^5.21"
},
"type": "library",
"autoload": {
@@ -286,7 +359,7 @@
],
"support": {
"issues": "https://github.com/doctrine/lexer/issues",
- "source": "https://github.com/doctrine/lexer/tree/3.0.0"
+ "source": "https://github.com/doctrine/lexer/tree/3.0.1"
},
"funding": [
{
@@ -302,20 +375,20 @@
"type": "tidelift"
}
],
- "time": "2022-12-15T16:57:16+00:00"
+ "time": "2024-02-05T11:56:58+00:00"
},
{
"name": "dragonmantank/cron-expression",
- "version": "v3.3.3",
+ "version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/dragonmantank/cron-expression.git",
- "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a"
+ "reference": "8c784d071debd117328803d86b2097615b457500"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a",
- "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500",
+ "reference": "8c784d071debd117328803d86b2097615b457500",
"shasum": ""
},
"require": {
@@ -328,10 +401,14 @@
"require-dev": {
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^1.0",
- "phpstan/phpstan-webmozart-assert": "^1.0",
"phpunit/phpunit": "^7.0|^8.0|^9.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
"Cron\\": "src/Cron/"
@@ -355,7 +432,7 @@
],
"support": {
"issues": "https://github.com/dragonmantank/cron-expression/issues",
- "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3"
+ "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0"
},
"funding": [
{
@@ -363,20 +440,20 @@
"type": "github"
}
],
- "time": "2023-08-10T19:36:49+00:00"
+ "time": "2024-10-09T13:47:03+00:00"
},
{
"name": "egulias/email-validator",
- "version": "4.0.1",
+ "version": "4.0.4",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
- "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff"
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff",
- "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
"shasum": ""
},
"require": {
@@ -385,8 +462,8 @@
"symfony/polyfill-intl-idn": "^1.26"
},
"require-dev": {
- "phpunit/phpunit": "^9.5.27",
- "vimeo/psalm": "^4.30"
+ "phpunit/phpunit": "^10.2",
+ "vimeo/psalm": "^5.12"
},
"suggest": {
"ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
@@ -422,7 +499,7 @@
],
"support": {
"issues": "https://github.com/egulias/EmailValidator/issues",
- "source": "https://github.com/egulias/EmailValidator/tree/4.0.1"
+ "source": "https://github.com/egulias/EmailValidator/tree/4.0.4"
},
"funding": [
{
@@ -430,25 +507,25 @@
"type": "github"
}
],
- "time": "2023-01-14T14:17:03+00:00"
+ "time": "2025-03-06T22:45:56+00:00"
},
{
"name": "fruitcake/php-cors",
- "version": "v1.2.0",
+ "version": "v1.3.0",
"source": {
"type": "git",
"url": "https://github.com/fruitcake/php-cors.git",
- "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e"
+ "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e",
- "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e",
+ "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b",
+ "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b",
"shasum": ""
},
"require": {
"php": "^7.4|^8.0",
- "symfony/http-foundation": "^4.4|^5.4|^6"
+ "symfony/http-foundation": "^4.4|^5.4|^6|^7"
},
"require-dev": {
"phpstan/phpstan": "^1.4",
@@ -458,7 +535,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.1-dev"
+ "dev-master": "1.2-dev"
}
},
"autoload": {
@@ -489,7 +566,7 @@
],
"support": {
"issues": "https://github.com/fruitcake/php-cors/issues",
- "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0"
+ "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0"
},
"funding": [
{
@@ -501,28 +578,28 @@
"type": "github"
}
],
- "time": "2022-02-20T15:07:15+00:00"
+ "time": "2023-10-12T05:21:21+00:00"
},
{
"name": "graham-campbell/result-type",
- "version": "v1.1.1",
+ "version": "v1.1.3",
"source": {
"type": "git",
"url": "https://github.com/GrahamCampbell/Result-Type.git",
- "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831"
+ "reference": "3ba905c11371512af9d9bdd27d99b782216b6945"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831",
- "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831",
+ "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945",
+ "reference": "3ba905c11371512af9d9bdd27d99b782216b6945",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0",
- "phpoption/phpoption": "^1.9.1"
+ "phpoption/phpoption": "^1.9.3"
},
"require-dev": {
- "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12"
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
},
"type": "library",
"autoload": {
@@ -551,7 +628,7 @@
],
"support": {
"issues": "https://github.com/GrahamCampbell/Result-Type/issues",
- "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1"
+ "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3"
},
"funding": [
{
@@ -563,26 +640,26 @@
"type": "tidelift"
}
],
- "time": "2023-02-25T20:23:15+00:00"
+ "time": "2024-07-20T21:45:45+00:00"
},
{
"name": "guzzlehttp/guzzle",
- "version": "7.8.0",
+ "version": "7.10.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9"
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9",
- "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
"shasum": ""
},
"require": {
"ext-json": "*",
- "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
- "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
+ "guzzlehttp/promises": "^2.3",
+ "guzzlehttp/psr7": "^2.8",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
@@ -591,11 +668,11 @@
"psr/http-client-implementation": "1.0"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.1",
+ "bamarni/composer-bin-plugin": "^1.8.2",
"ext-curl": "*",
- "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
+ "guzzle/client-integration-tests": "3.0.2",
"php-http/message-factory": "^1.1",
- "phpunit/phpunit": "^8.5.29 || ^9.5.23",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20",
"psr/log": "^1.1 || ^2.0 || ^3.0"
},
"suggest": {
@@ -673,7 +750,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.8.0"
+ "source": "https://github.com/guzzle/guzzle/tree/7.10.0"
},
"funding": [
{
@@ -689,28 +766,28 @@
"type": "tidelift"
}
],
- "time": "2023-08-27T10:20:53+00:00"
+ "time": "2025-08-23T22:36:01+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "2.0.1",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "111166291a0f8130081195ac4556a5587d7f1b5d"
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d",
- "reference": "111166291a0f8130081195ac4556a5587d7f1b5d",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.1",
- "phpunit/phpunit": "^8.5.29 || ^9.5.23"
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"type": "library",
"extra": {
@@ -756,7 +833,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.0.1"
+ "source": "https://github.com/guzzle/promises/tree/2.3.0"
},
"funding": [
{
@@ -772,20 +849,20 @@
"type": "tidelift"
}
],
- "time": "2023-08-03T15:11:55+00:00"
+ "time": "2025-08-22T14:34:08+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "2.6.1",
+ "version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727"
+ "reference": "21dc724a0583619cd1652f673303492272778051"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727",
- "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
+ "reference": "21dc724a0583619cd1652f673303492272778051",
"shasum": ""
},
"require": {
@@ -799,9 +876,9 @@
"psr/http-message-implementation": "1.0"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.1",
- "http-interop/http-factory-tests": "^0.9",
- "phpunit/phpunit": "^8.5.29 || ^9.5.23"
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "http-interop/http-factory-tests": "0.9.0",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@@ -872,7 +949,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.6.1"
+ "source": "https://github.com/guzzle/psr7/tree/2.8.0"
},
"funding": [
{
@@ -888,32 +965,38 @@
"type": "tidelift"
}
],
- "time": "2023-08-27T10:13:57+00:00"
+ "time": "2025-08-23T21:21:41+00:00"
},
{
"name": "guzzlehttp/uri-template",
- "version": "v1.0.2",
+ "version": "v1.0.5",
"source": {
"type": "git",
"url": "https://github.com/guzzle/uri-template.git",
- "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d"
+ "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/uri-template/zipball/61bf437fc2197f587f6857d3ff903a24f1731b5d",
- "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d",
+ "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1",
+ "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0",
- "symfony/polyfill-php80": "^1.17"
+ "symfony/polyfill-php80": "^1.24"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.1",
- "phpunit/phpunit": "^8.5.19 || ^9.5.8",
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25",
"uri-template/tests": "1.0.0"
},
"type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
"autoload": {
"psr-4": {
"GuzzleHttp\\UriTemplate\\": "src"
@@ -952,7 +1035,7 @@
],
"support": {
"issues": "https://github.com/guzzle/uri-template/issues",
- "source": "https://github.com/guzzle/uri-template/tree/v1.0.2"
+ "source": "https://github.com/guzzle/uri-template/tree/v1.0.5"
},
"funding": [
{
@@ -968,26 +1051,26 @@
"type": "tidelift"
}
],
- "time": "2023-08-27T10:19:19+00:00"
+ "time": "2025-08-22T14:27:06+00:00"
},
{
"name": "inertiajs/inertia-laravel",
- "version": "v0.6.9",
+ "version": "v0.6.11",
"source": {
"type": "git",
"url": "https://github.com/inertiajs/inertia-laravel.git",
- "reference": "b983c6eb2fe7460df6170060cdd7b47b5ef6832a"
+ "reference": "2a1e19048f95c0e4adb2b2733f9119e49c4fc09f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/b983c6eb2fe7460df6170060cdd7b47b5ef6832a",
- "reference": "b983c6eb2fe7460df6170060cdd7b47b5ef6832a",
+ "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/2a1e19048f95c0e4adb2b2733f9119e49c4fc09f",
+ "reference": "2a1e19048f95c0e4adb2b2733f9119e49c4fc09f",
"shasum": ""
},
"require": {
"ext-json": "*",
"laravel/framework": "^6.0|^7.0|^8.74|^9.0|^10.0",
- "php": "^7.2|~8.0.0|~8.1.0|~8.2.0"
+ "php": "^7.2|~8.0.0|~8.1.0|~8.2.0|~8.3.0"
},
"require-dev": {
"mockery/mockery": "^1.3.3",
@@ -1032,7 +1115,7 @@
],
"support": {
"issues": "https://github.com/inertiajs/inertia-laravel/issues",
- "source": "https://github.com/inertiajs/inertia-laravel/tree/v0.6.9"
+ "source": "https://github.com/inertiajs/inertia-laravel/tree/v0.6.11"
},
"funding": [
{
@@ -1040,24 +1123,24 @@
"type": "github"
}
],
- "time": "2023-01-17T01:02:51+00:00"
+ "time": "2023-10-27T10:59:02+00:00"
},
{
"name": "laravel/framework",
- "version": "v10.21.0",
+ "version": "v10.48.29",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "96b15c7ac382a9adb4a56d40c640e782d669a112"
+ "reference": "8f7f9247cb8aad1a769d6b9815a6623d89b46b47"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/96b15c7ac382a9adb4a56d40c640e782d669a112",
- "reference": "96b15c7ac382a9adb4a56d40c640e782d669a112",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/8f7f9247cb8aad1a769d6b9815a6623d89b46b47",
+ "reference": "8f7f9247cb8aad1a769d6b9815a6623d89b46b47",
"shasum": ""
},
"require": {
- "brick/math": "^0.9.3|^0.10.2|^0.11",
+ "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12",
"composer-runtime-api": "^2.2",
"doctrine/inflector": "^2.0.5",
"dragonmantank/cron-expression": "^3.3.2",
@@ -1071,7 +1154,7 @@
"ext-tokenizer": "*",
"fruitcake/php-cors": "^1.2",
"guzzlehttp/uri-template": "^1.0",
- "laravel/prompts": "^0.1",
+ "laravel/prompts": "^0.1.9",
"laravel/serializable-closure": "^1.3",
"league/commonmark": "^2.2.1",
"league/flysystem": "^3.8.0",
@@ -1086,7 +1169,7 @@
"symfony/console": "^6.2",
"symfony/error-handler": "^6.2",
"symfony/finder": "^6.2",
- "symfony/http-foundation": "^6.2",
+ "symfony/http-foundation": "^6.4",
"symfony/http-kernel": "^6.2",
"symfony/mailer": "^6.2",
"symfony/mime": "^6.2",
@@ -1099,6 +1182,10 @@
"voku/portable-ascii": "^2.0"
},
"conflict": {
+ "carbonphp/carbon-doctrine-types": ">=3.0",
+ "doctrine/dbal": ">=4.0",
+ "mockery/mockery": "1.6.8",
+ "phpunit/phpunit": ">=11.0.0",
"tightenco/collect": "<5.5.33"
},
"provide": {
@@ -1153,13 +1240,15 @@
"league/flysystem-read-only": "^3.3",
"league/flysystem-sftp-v3": "^3.0",
"mockery/mockery": "^1.5.1",
- "orchestra/testbench-core": "^8.4",
+ "nyholm/psr7": "^1.2",
+ "orchestra/testbench-core": "^8.23.4",
"pda/pheanstalk": "^4.0",
- "phpstan/phpstan": "^1.4.7",
+ "phpstan/phpstan": "~1.11.11",
"phpunit/phpunit": "^10.0.7",
"predis/predis": "^2.0.2",
"symfony/cache": "^6.2",
- "symfony/http-client": "^6.2.4"
+ "symfony/http-client": "^6.2.4",
+ "symfony/psr-http-message-bridge": "^2.0"
},
"suggest": {
"ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
@@ -1208,6 +1297,7 @@
"files": [
"src/Illuminate/Collections/helpers.php",
"src/Illuminate/Events/functions.php",
+ "src/Illuminate/Filesystem/functions.php",
"src/Illuminate/Foundation/helpers.php",
"src/Illuminate/Support/helpers.php"
],
@@ -1240,38 +1330,47 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2023-08-29T13:55:56+00:00"
+ "time": "2025-03-12T14:42:01+00:00"
},
{
"name": "laravel/prompts",
- "version": "v0.1.6",
+ "version": "v0.1.25",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
- "reference": "b514c5620e1b3b61221b0024dc88def26d9654f4"
+ "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/prompts/zipball/b514c5620e1b3b61221b0024dc88def26d9654f4",
- "reference": "b514c5620e1b3b61221b0024dc88def26d9654f4",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95",
+ "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"illuminate/collections": "^10.0|^11.0",
"php": "^8.1",
- "symfony/console": "^6.2"
+ "symfony/console": "^6.2|^7.0"
+ },
+ "conflict": {
+ "illuminate/console": ">=10.17.0 <10.25.0",
+ "laravel/framework": ">=10.17.0 <10.25.0"
},
"require-dev": {
"mockery/mockery": "^1.5",
"pestphp/pest": "^2.3",
- "phpstan/phpstan": "^1.10",
+ "phpstan/phpstan": "^1.11",
"phpstan/phpstan-mockery": "^1.1"
},
"suggest": {
"ext-pcntl": "Required for the spinner to be animated."
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "0.1.x-dev"
+ }
+ },
"autoload": {
"files": [
"src/helpers.php"
@@ -1284,24 +1383,25 @@
"license": [
"MIT"
],
+ "description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": {
"issues": "https://github.com/laravel/prompts/issues",
- "source": "https://github.com/laravel/prompts/tree/v0.1.6"
+ "source": "https://github.com/laravel/prompts/tree/v0.1.25"
},
- "time": "2023-08-18T13:32:23+00:00"
+ "time": "2024-08-12T22:06:33+00:00"
},
{
"name": "laravel/sanctum",
- "version": "v3.2.6",
+ "version": "v3.3.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/sanctum.git",
- "reference": "217e8a2bc5aa6a827ced97fcb76504029d3115d7"
+ "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sanctum/zipball/217e8a2bc5aa6a827ced97fcb76504029d3115d7",
- "reference": "217e8a2bc5aa6a827ced97fcb76504029d3115d7",
+ "url": "https://api.github.com/repos/laravel/sanctum/zipball/8c104366459739f3ada0e994bcd3e6fd681ce3d5",
+ "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5",
"shasum": ""
},
"require": {
@@ -1320,13 +1420,13 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "3.x-dev"
- },
"laravel": {
"providers": [
"Laravel\\Sanctum\\SanctumServiceProvider"
]
+ },
+ "branch-alias": {
+ "dev-master": "3.x-dev"
}
},
"autoload": {
@@ -1354,54 +1454,60 @@
"issues": "https://github.com/laravel/sanctum/issues",
"source": "https://github.com/laravel/sanctum"
},
- "time": "2023-08-22T13:21:11+00:00"
+ "time": "2023-12-19T18:44:48+00:00"
},
{
"name": "laravel/scout",
- "version": "v10.3.0",
+ "version": "v10.18.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/scout.git",
- "reference": "b7972cffc879c8c7c255781b341a8867cb411076"
+ "reference": "be9b14c37915429f0d60a305d786f93632b4b09c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/scout/zipball/b7972cffc879c8c7c255781b341a8867cb411076",
- "reference": "b7972cffc879c8c7c255781b341a8867cb411076",
+ "url": "https://api.github.com/repos/laravel/scout/zipball/be9b14c37915429f0d60a305d786f93632b4b09c",
+ "reference": "be9b14c37915429f0d60a305d786f93632b4b09c",
"shasum": ""
},
"require": {
- "illuminate/bus": "^9.0|^10.0",
- "illuminate/contracts": "^9.0|^10.0",
- "illuminate/database": "^9.0|^10.0",
- "illuminate/http": "^9.0|^10.0",
- "illuminate/pagination": "^9.0|^10.0",
- "illuminate/queue": "^9.0|^10.0",
- "illuminate/support": "^9.0|^10.0",
- "php": "^8.0"
+ "illuminate/bus": "^9.0|^10.0|^11.0|^12.0",
+ "illuminate/contracts": "^9.0|^10.0|^11.0|^12.0",
+ "illuminate/database": "^9.0|^10.0|^11.0|^12.0",
+ "illuminate/http": "^9.0|^10.0|^11.0|^12.0",
+ "illuminate/pagination": "^9.0|^10.0|^11.0|^12.0",
+ "illuminate/queue": "^9.0|^10.0|^11.0|^12.0",
+ "illuminate/support": "^9.0|^10.0|^11.0|^12.0",
+ "php": "^8.0",
+ "symfony/console": "^6.0|^7.0"
+ },
+ "conflict": {
+ "algolia/algoliasearch-client-php": "<3.2.0|>=5.0.0"
},
"require-dev": {
- "algolia/algoliasearch-client-php": "^3.2",
+ "algolia/algoliasearch-client-php": "^3.2|^4.0",
"meilisearch/meilisearch-php": "^1.0",
"mockery/mockery": "^1.0",
- "orchestra/testbench": "^7.0|^8.0",
+ "orchestra/testbench": "^7.31|^8.11|^9.0|^10.0",
"php-http/guzzle7-adapter": "^1.0",
"phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^9.3|^10.4|^11.5",
+ "typesense/typesense-php": "^4.9.3"
},
"suggest": {
"algolia/algoliasearch-client-php": "Required to use the Algolia engine (^3.2).",
- "meilisearch/meilisearch-php": "Required to use the Meilisearch engine (^1.0)."
+ "meilisearch/meilisearch-php": "Required to use the Meilisearch engine (^1.0).",
+ "typesense/typesense-php": "Required to use the Typesense engine (^4.9)."
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "10.x-dev"
- },
"laravel": {
"providers": [
"Laravel\\Scout\\ScoutServiceProvider"
]
+ },
+ "branch-alias": {
+ "dev-master": "10.x-dev"
}
},
"autoload": {
@@ -1429,30 +1535,31 @@
"issues": "https://github.com/laravel/scout/issues",
"source": "https://github.com/laravel/scout"
},
- "time": "2023-09-05T15:47:47+00:00"
+ "time": "2025-08-19T02:10:57+00:00"
},
{
"name": "laravel/serializable-closure",
- "version": "v1.3.1",
+ "version": "v1.3.7",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
- "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902"
+ "reference": "4f48ade902b94323ca3be7646db16209ec76be3d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/e5a3057a5591e1cfe8183034b0203921abe2c902",
- "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/4f48ade902b94323ca3be7646db16209ec76be3d",
+ "reference": "4f48ade902b94323ca3be7646db16209ec76be3d",
"shasum": ""
},
"require": {
"php": "^7.3|^8.0"
},
"require-dev": {
- "nesbot/carbon": "^2.61",
+ "illuminate/support": "^8.0|^9.0|^10.0|^11.0",
+ "nesbot/carbon": "^2.61|^3.0",
"pestphp/pest": "^1.21.3",
"phpstan/phpstan": "^1.8.2",
- "symfony/var-dumper": "^5.4.11"
+ "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0"
},
"type": "library",
"extra": {
@@ -1489,43 +1596,40 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
- "time": "2023-07-14T13:56:28+00:00"
+ "time": "2024-11-14T18:34:49+00:00"
},
{
"name": "laravel/tinker",
- "version": "v2.8.2",
+ "version": "v2.10.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/tinker.git",
- "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3"
+ "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/tinker/zipball/b936d415b252b499e8c3b1f795cd4fc20f57e1f3",
- "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3",
+ "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3",
+ "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3",
"shasum": ""
},
"require": {
- "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0",
- "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0",
- "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0",
+ "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
+ "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
+ "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
"php": "^7.2.5|^8.0",
- "psy/psysh": "^0.10.4|^0.11.1",
- "symfony/var-dumper": "^4.3.4|^5.0|^6.0"
+ "psy/psysh": "^0.11.1|^0.12.0",
+ "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0"
},
"require-dev": {
"mockery/mockery": "~1.3.3|^1.4.2",
"phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^8.5.8|^9.3.3"
+ "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0"
},
"suggest": {
- "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0)."
+ "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)."
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "2.x-dev"
- },
"laravel": {
"providers": [
"Laravel\\Tinker\\TinkerServiceProvider"
@@ -1556,22 +1660,22 @@
],
"support": {
"issues": "https://github.com/laravel/tinker/issues",
- "source": "https://github.com/laravel/tinker/tree/v2.8.2"
+ "source": "https://github.com/laravel/tinker/tree/v2.10.1"
},
- "time": "2023-08-15T14:27:00+00:00"
+ "time": "2025-01-27T14:24:01+00:00"
},
{
"name": "league/commonmark",
- "version": "2.4.1",
+ "version": "2.7.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
- "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5"
+ "reference": "10732241927d3971d28e7ea7b5712721fa2296ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5",
- "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/10732241927d3971d28e7ea7b5712721fa2296ca",
+ "reference": "10732241927d3971d28e7ea7b5712721fa2296ca",
"shasum": ""
},
"require": {
@@ -1584,8 +1688,8 @@
},
"require-dev": {
"cebe/markdown": "^1.0",
- "commonmark/cmark": "0.30.0",
- "commonmark/commonmark.js": "0.30.0",
+ "commonmark/cmark": "0.31.1",
+ "commonmark/commonmark.js": "0.31.1",
"composer/package-versions-deprecated": "^1.8",
"embed/embed": "^4.4",
"erusev/parsedown": "^1.0",
@@ -1594,12 +1698,13 @@
"michelf/php-markdown": "^1.4 || ^2.0",
"nyholm/psr7": "^1.5",
"phpstan/phpstan": "^1.8.2",
- "phpunit/phpunit": "^9.5.21",
+ "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0",
"scrutinizer/ocular": "^1.8.1",
- "symfony/finder": "^5.3 | ^6.0",
- "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0",
+ "symfony/finder": "^5.3 | ^6.0 | ^7.0",
+ "symfony/process": "^5.4 | ^6.0 | ^7.0",
+ "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0",
"unleashedtech/php-coding-standard": "^3.1.1",
- "vimeo/psalm": "^4.24.0 || ^5.0.0"
+ "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0"
},
"suggest": {
"symfony/yaml": "v2.3+ required if using the Front Matter extension"
@@ -1607,7 +1712,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.5-dev"
+ "dev-main": "2.8-dev"
}
},
"autoload": {
@@ -1664,7 +1769,7 @@
"type": "tidelift"
}
],
- "time": "2023-08-30T16:55:00+00:00"
+ "time": "2025-07-20T12:47:49+00:00"
},
{
"name": "league/config",
@@ -1750,16 +1855,16 @@
},
{
"name": "league/flysystem",
- "version": "3.15.1",
+ "version": "3.30.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "a141d430414fcb8bf797a18716b09f759a385bed"
+ "reference": "2203e3151755d874bb2943649dae1eb8533ac93e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a141d430414fcb8bf797a18716b09f759a385bed",
- "reference": "a141d430414fcb8bf797a18716b09f759a385bed",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2203e3151755d874bb2943649dae1eb8533ac93e",
+ "reference": "2203e3151755d874bb2943649dae1eb8533ac93e",
"shasum": ""
},
"require": {
@@ -1768,6 +1873,8 @@
"php": "^8.0.2"
},
"conflict": {
+ "async-aws/core": "<1.19.0",
+ "async-aws/s3": "<1.14.0",
"aws/aws-sdk-php": "3.209.31 || 3.210.0",
"guzzlehttp/guzzle": "<7.0",
"guzzlehttp/ringphp": "<1.1.1",
@@ -1775,20 +1882,23 @@
"symfony/http-client": "<5.2"
},
"require-dev": {
- "async-aws/s3": "^1.5",
- "async-aws/simple-s3": "^1.1",
- "aws/aws-sdk-php": "^3.220.0",
+ "async-aws/s3": "^1.5 || ^2.0",
+ "async-aws/simple-s3": "^1.1 || ^2.0",
+ "aws/aws-sdk-php": "^3.295.10",
"composer/semver": "^3.0",
"ext-fileinfo": "*",
"ext-ftp": "*",
+ "ext-mongodb": "^1.3|^2",
"ext-zip": "*",
"friendsofphp/php-cs-fixer": "^3.5",
"google/cloud-storage": "^1.23",
+ "guzzlehttp/psr7": "^2.6",
"microsoft/azure-storage-blob": "^1.1",
- "phpseclib/phpseclib": "^3.0.14",
- "phpstan/phpstan": "^0.12.26",
- "phpunit/phpunit": "^9.5.11",
- "sabre/dav": "^4.3.1"
+ "mongodb/mongodb": "^1.2|^2",
+ "phpseclib/phpseclib": "^3.0.36",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^9.5.11|^10.0",
+ "sabre/dav": "^4.6.0"
},
"type": "library",
"autoload": {
@@ -1822,32 +1932,22 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
- "source": "https://github.com/thephpleague/flysystem/tree/3.15.1"
+ "source": "https://github.com/thephpleague/flysystem/tree/3.30.0"
},
- "funding": [
- {
- "url": "https://ecologi.com/frankdejonge",
- "type": "custom"
- },
- {
- "url": "https://github.com/frankdejonge",
- "type": "github"
- }
- ],
- "time": "2023-05-04T09:04:26+00:00"
+ "time": "2025-06-25T13:29:59+00:00"
},
{
"name": "league/flysystem-local",
- "version": "3.15.0",
+ "version": "3.30.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem-local.git",
- "reference": "543f64c397fefdf9cfeac443ffb6beff602796b3"
+ "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/543f64c397fefdf9cfeac443ffb6beff602796b3",
- "reference": "543f64c397fefdf9cfeac443ffb6beff602796b3",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/6691915f77c7fb69adfb87dcd550052dc184ee10",
+ "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10",
"shasum": ""
},
"require": {
@@ -1881,33 +1981,22 @@
"local"
],
"support": {
- "issues": "https://github.com/thephpleague/flysystem-local/issues",
- "source": "https://github.com/thephpleague/flysystem-local/tree/3.15.0"
+ "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.0"
},
- "funding": [
- {
- "url": "https://ecologi.com/frankdejonge",
- "type": "custom"
- },
- {
- "url": "https://github.com/frankdejonge",
- "type": "github"
- }
- ],
- "time": "2023-05-02T20:02:14+00:00"
+ "time": "2025-05-21T10:34:19+00:00"
},
{
"name": "league/mime-type-detection",
- "version": "1.13.0",
+ "version": "1.16.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/mime-type-detection.git",
- "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96"
+ "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/a6dfb1194a2946fcdc1f38219445234f65b35c96",
- "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96",
+ "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9",
+ "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9",
"shasum": ""
},
"require": {
@@ -1938,7 +2027,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.13.0"
+ "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0"
},
"funding": [
{
@@ -1950,20 +2039,20 @@
"type": "tidelift"
}
],
- "time": "2023-08-05T12:09:49+00:00"
+ "time": "2024-09-21T08:32:55+00:00"
},
{
"name": "monolog/monolog",
- "version": "3.4.0",
+ "version": "3.9.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "e2392369686d420ca32df3803de28b5d6f76867d"
+ "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e2392369686d420ca32df3803de28b5d6f76867d",
- "reference": "e2392369686d420ca32df3803de28b5d6f76867d",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6",
+ "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6",
"shasum": ""
},
"require": {
@@ -1983,12 +2072,14 @@
"guzzlehttp/psr7": "^2.2",
"mongodb/mongodb": "^1.8",
"php-amqplib/php-amqplib": "~2.4 || ^3",
- "phpstan/phpstan": "^1.9",
- "phpstan/phpstan-deprecation-rules": "^1.0",
- "phpstan/phpstan-strict-rules": "^1.4",
- "phpunit/phpunit": "^10.1",
+ "php-console/php-console": "^3.1.8",
+ "phpstan/phpstan": "^2",
+ "phpstan/phpstan-deprecation-rules": "^2",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpunit/phpunit": "^10.5.17 || ^11.0.7",
"predis/predis": "^1.1 || ^2",
- "ruflin/elastica": "^7",
+ "rollbar/rollbar": "^4.0",
+ "ruflin/elastica": "^7 || ^8",
"symfony/mailer": "^5.4 || ^6",
"symfony/mime": "^5.4 || ^6"
},
@@ -2039,7 +2130,7 @@
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
- "source": "https://github.com/Seldaek/monolog/tree/3.4.0"
+ "source": "https://github.com/Seldaek/monolog/tree/3.9.0"
},
"funding": [
{
@@ -2051,23 +2142,24 @@
"type": "tidelift"
}
],
- "time": "2023-06-21T08:46:11+00:00"
+ "time": "2025-03-24T10:02:05+00:00"
},
{
"name": "nesbot/carbon",
- "version": "2.69.0",
+ "version": "2.73.0",
"source": {
"type": "git",
- "url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c"
+ "url": "https://github.com/CarbonPHP/carbon.git",
+ "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4308217830e4ca445583a37d1bf4aff4153fa81c",
- "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075",
+ "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075",
"shasum": ""
},
"require": {
+ "carbonphp/carbon-doctrine-types": "*",
"ext-json": "*",
"php": "^7.1.8 || ^8.0",
"psr/clock": "^1.0",
@@ -2079,11 +2171,11 @@
"psr/clock-implementation": "1.0"
},
"require-dev": {
- "doctrine/dbal": "^2.0 || ^3.1.4",
- "doctrine/orm": "^2.7",
+ "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0",
+ "doctrine/orm": "^2.7 || ^3.0",
"friendsofphp/php-cs-fixer": "^3.0",
"kylekatarnls/multi-tester": "^2.0",
- "ondrejmirtes/better-reflection": "*",
+ "ondrejmirtes/better-reflection": "<6",
"phpmd/phpmd": "^2.9",
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^0.12.99 || ^1.7.14",
@@ -2096,10 +2188,6 @@
],
"type": "library",
"extra": {
- "branch-alias": {
- "dev-3.x": "3.x-dev",
- "dev-master": "2.x-dev"
- },
"laravel": {
"providers": [
"Carbon\\Laravel\\ServiceProvider"
@@ -2109,6 +2197,10 @@
"includes": [
"extension.neon"
]
+ },
+ "branch-alias": {
+ "dev-2.x": "2.x-dev",
+ "dev-master": "3.x-dev"
}
},
"autoload": {
@@ -2157,35 +2249,35 @@
"type": "tidelift"
}
],
- "time": "2023-08-03T09:00:52+00:00"
+ "time": "2025-01-08T20:10:23+00:00"
},
{
"name": "nette/schema",
- "version": "v1.2.4",
+ "version": "v1.3.2",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
- "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab"
+ "reference": "da801d52f0354f70a638673c4a0f04e16529431d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/schema/zipball/c9ff517a53903b3d4e29ec547fb20feecb05b8ab",
- "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab",
+ "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d",
+ "reference": "da801d52f0354f70a638673c4a0f04e16529431d",
"shasum": ""
},
"require": {
- "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0",
- "php": "7.1 - 8.3"
+ "nette/utils": "^4.0",
+ "php": "8.1 - 8.4"
},
"require-dev": {
- "nette/tester": "^2.3 || ^2.4",
+ "nette/tester": "^2.5.2",
"phpstan/phpstan-nette": "^1.0",
- "tracy/tracy": "^2.7"
+ "tracy/tracy": "^2.8"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.2-dev"
+ "dev-master": "1.3-dev"
}
},
"autoload": {
@@ -2217,35 +2309,35 @@
],
"support": {
"issues": "https://github.com/nette/schema/issues",
- "source": "https://github.com/nette/schema/tree/v1.2.4"
+ "source": "https://github.com/nette/schema/tree/v1.3.2"
},
- "time": "2023-08-05T18:56:25+00:00"
+ "time": "2024-10-06T23:10:23+00:00"
},
{
"name": "nette/utils",
- "version": "v4.0.1",
+ "version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
- "reference": "9124157137da01b1f5a5a22d6486cb975f26db7e"
+ "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/9124157137da01b1f5a5a22d6486cb975f26db7e",
- "reference": "9124157137da01b1f5a5a22d6486cb975f26db7e",
+ "url": "https://api.github.com/repos/nette/utils/zipball/c930ca4e3cf4f17dcfb03037703679d2396d2ede",
+ "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede",
"shasum": ""
},
"require": {
- "php": ">=8.0 <8.4"
+ "php": "8.0 - 8.5"
},
"conflict": {
"nette/finder": "<3",
"nette/schema": "<1.2.2"
},
"require-dev": {
- "jetbrains/phpstorm-attributes": "dev-master",
+ "jetbrains/phpstorm-attributes": "^1.2",
"nette/tester": "^2.5",
- "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-nette": "^2.0@stable",
"tracy/tracy": "^2.9"
},
"suggest": {
@@ -2254,8 +2346,7 @@
"ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
"ext-json": "to use Nette\\Utils\\Json",
"ext-mbstring": "to use Strings::lower() etc...",
- "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()",
- "ext-xml": "to use Strings::length() etc. when mbstring is not available"
+ "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()"
},
"type": "library",
"extra": {
@@ -2264,6 +2355,9 @@
}
},
"autoload": {
+ "psr-4": {
+ "Nette\\": "src"
+ },
"classmap": [
"src/"
]
@@ -2304,31 +2398,33 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
- "source": "https://github.com/nette/utils/tree/v4.0.1"
+ "source": "https://github.com/nette/utils/tree/v4.0.8"
},
- "time": "2023-07-30T15:42:21+00:00"
+ "time": "2025-08-06T21:43:34+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v4.17.1",
+ "version": "v5.6.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d"
+ "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
- "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
+ "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
"shasum": ""
},
"require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
"ext-tokenizer": "*",
- "php": ">=7.0"
+ "php": ">=7.4"
},
"require-dev": {
"ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+ "phpunit/phpunit": "^9.0"
},
"bin": [
"bin/php-parse"
@@ -2336,7 +2432,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.9-dev"
+ "dev-master": "5.x-dev"
}
},
"autoload": {
@@ -2360,39 +2456,38 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1"
},
- "time": "2023-08-13T19:53:39+00:00"
+ "time": "2025-08-13T20:13:15+00:00"
},
{
"name": "nunomaduro/termwind",
- "version": "v1.15.1",
+ "version": "v1.17.0",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/termwind.git",
- "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc"
+ "reference": "5369ef84d8142c1d87e4ec278711d4ece3cbf301"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc",
- "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc",
+ "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/5369ef84d8142c1d87e4ec278711d4ece3cbf301",
+ "reference": "5369ef84d8142c1d87e4ec278711d4ece3cbf301",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
- "php": "^8.0",
- "symfony/console": "^5.3.0|^6.0.0"
+ "php": "^8.1",
+ "symfony/console": "^6.4.15"
},
"require-dev": {
- "ergebnis/phpstan-rules": "^1.0.",
- "illuminate/console": "^8.0|^9.0",
- "illuminate/support": "^8.0|^9.0",
- "laravel/pint": "^1.0.0",
- "pestphp/pest": "^1.21.0",
- "pestphp/pest-plugin-mock": "^1.0",
- "phpstan/phpstan": "^1.4.6",
- "phpstan/phpstan-strict-rules": "^1.1.0",
- "symfony/var-dumper": "^5.2.7|^6.0.0",
+ "illuminate/console": "^10.48.24",
+ "illuminate/support": "^10.48.24",
+ "laravel/pint": "^1.18.2",
+ "pestphp/pest": "^2.36.0",
+ "pestphp/pest-plugin-mock": "2.0.0",
+ "phpstan/phpstan": "^1.12.11",
+ "phpstan/phpstan-strict-rules": "^1.6.1",
+ "symfony/var-dumper": "^6.4.15",
"thecodingmachine/phpstan-strict-rules": "^1.0.0"
},
"type": "library",
@@ -2432,7 +2527,7 @@
],
"support": {
"issues": "https://github.com/nunomaduro/termwind/issues",
- "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1"
+ "source": "https://github.com/nunomaduro/termwind/tree/v1.17.0"
},
"funding": [
{
@@ -2448,84 +2543,39 @@
"type": "github"
}
],
- "time": "2023-02-08T01:06:31+00:00"
- },
- {
- "name": "paragonie/random_compat",
- "version": "v9.99.100",
- "source": {
- "type": "git",
- "url": "https://github.com/paragonie/random_compat.git",
- "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
- "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
- "shasum": ""
- },
- "require": {
- "php": ">= 7"
- },
- "require-dev": {
- "phpunit/phpunit": "4.*|5.*",
- "vimeo/psalm": "^1"
- },
- "suggest": {
- "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
- },
- "type": "library",
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Paragon Initiative Enterprises",
- "email": "security@paragonie.com",
- "homepage": "https://paragonie.com"
- }
- ],
- "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
- "keywords": [
- "csprng",
- "polyfill",
- "pseudorandom",
- "random"
- ],
- "support": {
- "email": "info@paragonie.com",
- "issues": "https://github.com/paragonie/random_compat/issues",
- "source": "https://github.com/paragonie/random_compat"
- },
- "time": "2020-10-15T08:29:30+00:00"
+ "time": "2024-11-21T10:36:35+00:00"
},
{
"name": "paragonie/sodium_compat",
- "version": "v1.20.0",
+ "version": "v2.1.0",
"source": {
"type": "git",
"url": "https://github.com/paragonie/sodium_compat.git",
- "reference": "e592a3e06d1fa0d43988c7c7d9948ca836f644b6"
+ "reference": "a673d5f310477027cead2e2f2b6db5d8368157cb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/e592a3e06d1fa0d43988c7c7d9948ca836f644b6",
- "reference": "e592a3e06d1fa0d43988c7c7d9948ca836f644b6",
+ "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/a673d5f310477027cead2e2f2b6db5d8368157cb",
+ "reference": "a673d5f310477027cead2e2f2b6db5d8368157cb",
"shasum": ""
},
"require": {
- "paragonie/random_compat": ">=1",
- "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8"
+ "php": "^8.1",
+ "php-64bit": "*"
},
"require-dev": {
- "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9"
+ "phpunit/phpunit": "^7|^8|^9",
+ "vimeo/psalm": "^4|^5"
},
"suggest": {
- "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.",
- "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security."
+ "ext-sodium": "Better performance, password hashing (Argon2i), secure memory management (memzero), and better security."
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
"autoload": {
"files": [
"autoload.php"
@@ -2582,22 +2632,22 @@
],
"support": {
"issues": "https://github.com/paragonie/sodium_compat/issues",
- "source": "https://github.com/paragonie/sodium_compat/tree/v1.20.0"
+ "source": "https://github.com/paragonie/sodium_compat/tree/v2.1.0"
},
- "time": "2023-04-30T00:54:53+00:00"
+ "time": "2024-09-04T12:51:01+00:00"
},
{
"name": "phpoption/phpoption",
- "version": "1.9.1",
+ "version": "1.9.4",
"source": {
"type": "git",
"url": "https://github.com/schmittjoh/php-option.git",
- "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e"
+ "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e",
- "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d",
+ "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d",
"shasum": ""
},
"require": {
@@ -2605,13 +2655,13 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12"
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34"
},
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
- "forward-command": true
+ "forward-command": false
},
"branch-alias": {
"dev-master": "1.9-dev"
@@ -2647,7 +2697,7 @@
],
"support": {
"issues": "https://github.com/schmittjoh/php-option/issues",
- "source": "https://github.com/schmittjoh/php-option/tree/1.9.1"
+ "source": "https://github.com/schmittjoh/php-option/tree/1.9.4"
},
"funding": [
{
@@ -2659,7 +2709,7 @@
"type": "tidelift"
}
],
- "time": "2023-02-25T19:38:58+00:00"
+ "time": "2025-08-21T11:53:16+00:00"
},
{
"name": "psr/clock",
@@ -2814,16 +2864,16 @@
},
{
"name": "psr/http-client",
- "version": "1.0.2",
+ "version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-client.git",
- "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31"
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31",
- "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
"shasum": ""
},
"require": {
@@ -2860,26 +2910,26 @@
"psr-18"
],
"support": {
- "source": "https://github.com/php-fig/http-client/tree/1.0.2"
+ "source": "https://github.com/php-fig/http-client"
},
- "time": "2023-04-10T20:12:12+00:00"
+ "time": "2023-09-23T14:17:50+00:00"
},
{
"name": "psr/http-factory",
- "version": "1.0.2",
+ "version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-factory.git",
- "reference": "e616d01114759c4c489f93b099585439f795fe35"
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
- "reference": "e616d01114759c4c489f93b099585439f795fe35",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
"shasum": ""
},
"require": {
- "php": ">=7.0.0",
+ "php": ">=7.1",
"psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
@@ -2903,7 +2953,7 @@
"homepage": "https://www.php-fig.org/"
}
],
- "description": "Common interfaces for PSR-7 HTTP message factories",
+ "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
"keywords": [
"factory",
"http",
@@ -2915,9 +2965,9 @@
"response"
],
"support": {
- "source": "https://github.com/php-fig/http-factory/tree/1.0.2"
+ "source": "https://github.com/php-fig/http-factory"
},
- "time": "2023-04-10T20:10:41+00:00"
+ "time": "2024-04-15T12:06:14+00:00"
},
{
"name": "psr/http-message",
@@ -2974,16 +3024,16 @@
},
{
"name": "psr/log",
- "version": "3.0.0",
+ "version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
- "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"shasum": ""
},
"require": {
@@ -3018,9 +3068,9 @@
"psr-3"
],
"support": {
- "source": "https://github.com/php-fig/log/tree/3.0.0"
+ "source": "https://github.com/php-fig/log/tree/3.0.2"
},
- "time": "2021-07-14T16:46:02+00:00"
+ "time": "2024-09-11T13:17:53+00:00"
},
{
"name": "psr/simple-cache",
@@ -3075,25 +3125,25 @@
},
{
"name": "psy/psysh",
- "version": "v0.11.20",
+ "version": "v0.12.10",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "0fa27040553d1d280a67a4393194df5228afea5b"
+ "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/0fa27040553d1d280a67a4393194df5228afea5b",
- "reference": "0fa27040553d1d280a67a4393194df5228afea5b",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/6e80abe6f2257121f1eb9a4c55bf29d921025b22",
+ "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-tokenizer": "*",
- "nikic/php-parser": "^4.0 || ^3.1",
- "php": "^8.0 || ^7.0.8",
- "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4",
- "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4"
+ "nikic/php-parser": "^5.0 || ^4.0",
+ "php": "^8.0 || ^7.4",
+ "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4",
+ "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4"
},
"conflict": {
"symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
@@ -3104,16 +3154,19 @@
"suggest": {
"ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
"ext-pdo-sqlite": "The doc command requires SQLite to work.",
- "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
- "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history."
+ "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well."
},
"bin": [
"bin/psysh"
],
"type": "library",
"extra": {
+ "bamarni-bin": {
+ "bin-links": false,
+ "forward-command": false
+ },
"branch-alias": {
- "dev-main": "0.11.x-dev"
+ "dev-main": "0.12.x-dev"
}
},
"autoload": {
@@ -3131,12 +3184,11 @@
"authors": [
{
"name": "Justin Hileman",
- "email": "justin@justinhileman.info",
- "homepage": "http://justinhileman.com"
+ "email": "justin@justinhileman.info"
}
],
"description": "An interactive shell for modern PHP.",
- "homepage": "http://psysh.org",
+ "homepage": "https://psysh.org",
"keywords": [
"REPL",
"console",
@@ -3145,29 +3197,29 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.11.20"
+ "source": "https://github.com/bobthecow/psysh/tree/v0.12.10"
},
- "time": "2023-07-31T14:32:22+00:00"
+ "time": "2025-08-04T12:39:37+00:00"
},
{
"name": "pusher/pusher-php-server",
- "version": "7.2.3",
+ "version": "7.2.7",
"source": {
"type": "git",
"url": "https://github.com/pusher/pusher-http-php.git",
- "reference": "416e68dd5f640175ad5982131c42a7a666d1d8e9"
+ "reference": "148b0b5100d000ed57195acdf548a2b1b38ee3f7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/416e68dd5f640175ad5982131c42a7a666d1d8e9",
- "reference": "416e68dd5f640175ad5982131c42a7a666d1d8e9",
+ "url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/148b0b5100d000ed57195acdf548a2b1b38ee3f7",
+ "reference": "148b0b5100d000ed57195acdf548a2b1b38ee3f7",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"guzzlehttp/guzzle": "^7.2",
- "paragonie/sodium_compat": "^1.6",
+ "paragonie/sodium_compat": "^1.6|^2.0",
"php": "^7.3|^8.0",
"psr/log": "^1.0|^2.0|^3.0"
},
@@ -3206,9 +3258,9 @@
],
"support": {
"issues": "https://github.com/pusher/pusher-http-php/issues",
- "source": "https://github.com/pusher/pusher-http-php/tree/7.2.3"
+ "source": "https://github.com/pusher/pusher-http-php/tree/7.2.7"
},
- "time": "2023-05-17T16:00:06+00:00"
+ "time": "2025-01-06T10:56:20+00:00"
},
{
"name": "ralouphie/getallheaders",
@@ -3256,16 +3308,16 @@
},
{
"name": "ramsey/collection",
- "version": "2.0.0",
+ "version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/ramsey/collection.git",
- "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5"
+ "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
- "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
+ "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2",
+ "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2",
"shasum": ""
},
"require": {
@@ -3273,25 +3325,22 @@
},
"require-dev": {
"captainhook/plugin-composer": "^5.3",
- "ergebnis/composer-normalize": "^2.28.3",
- "fakerphp/faker": "^1.21",
+ "ergebnis/composer-normalize": "^2.45",
+ "fakerphp/faker": "^1.24",
"hamcrest/hamcrest-php": "^2.0",
- "jangregor/phpstan-prophecy": "^1.0",
- "mockery/mockery": "^1.5",
+ "jangregor/phpstan-prophecy": "^2.1",
+ "mockery/mockery": "^1.6",
"php-parallel-lint/php-console-highlighter": "^1.0",
- "php-parallel-lint/php-parallel-lint": "^1.3",
- "phpcsstandards/phpcsutils": "^1.0.0-rc1",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpstan/extension-installer": "^1.2",
- "phpstan/phpstan": "^1.9",
- "phpstan/phpstan-mockery": "^1.1",
- "phpstan/phpstan-phpunit": "^1.3",
- "phpunit/phpunit": "^9.5",
- "psalm/plugin-mockery": "^1.1",
- "psalm/plugin-phpunit": "^0.18.4",
- "ramsey/coding-standard": "^2.0.3",
- "ramsey/conventional-commits": "^1.3",
- "vimeo/psalm": "^5.4"
+ "php-parallel-lint/php-parallel-lint": "^1.4",
+ "phpspec/prophecy-phpunit": "^2.3",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-mockery": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^10.5",
+ "ramsey/coding-standard": "^2.3",
+ "ramsey/conventional-commits": "^1.6",
+ "roave/security-advisories": "dev-latest"
},
"type": "library",
"extra": {
@@ -3329,37 +3378,26 @@
],
"support": {
"issues": "https://github.com/ramsey/collection/issues",
- "source": "https://github.com/ramsey/collection/tree/2.0.0"
+ "source": "https://github.com/ramsey/collection/tree/2.1.1"
},
- "funding": [
- {
- "url": "https://github.com/ramsey",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
- "type": "tidelift"
- }
- ],
- "time": "2022-12-31T21:50:55+00:00"
+ "time": "2025-03-22T05:38:12+00:00"
},
{
"name": "ramsey/uuid",
- "version": "4.7.4",
+ "version": "4.9.0",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
- "reference": "60a4c63ab724854332900504274f6150ff26d286"
+ "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286",
- "reference": "60a4c63ab724854332900504274f6150ff26d286",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/4e0e23cc785f0724a0e838279a9eb03f28b092a0",
+ "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0",
"shasum": ""
},
"require": {
- "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11",
- "ext-json": "*",
+ "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13",
"php": "^8.0",
"ramsey/collection": "^1.2 || ^2.0"
},
@@ -3367,26 +3405,23 @@
"rhumsaa/uuid": "self.version"
},
"require-dev": {
- "captainhook/captainhook": "^5.10",
+ "captainhook/captainhook": "^5.25",
"captainhook/plugin-composer": "^5.3",
- "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
- "doctrine/annotations": "^1.8",
- "ergebnis/composer-normalize": "^2.15",
- "mockery/mockery": "^1.3",
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+ "ergebnis/composer-normalize": "^2.47",
+ "mockery/mockery": "^1.6",
"paragonie/random-lib": "^2",
- "php-mock/php-mock": "^2.2",
- "php-mock/php-mock-mockery": "^1.3",
- "php-parallel-lint/php-parallel-lint": "^1.1",
- "phpbench/phpbench": "^1.0",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-mockery": "^1.1",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpunit/phpunit": "^8.5 || ^9",
- "ramsey/composer-repl": "^1.4",
- "slevomat/coding-standard": "^8.4",
- "squizlabs/php_codesniffer": "^3.5",
- "vimeo/psalm": "^4.9"
+ "php-mock/php-mock": "^2.6",
+ "php-mock/php-mock-mockery": "^1.5",
+ "php-parallel-lint/php-parallel-lint": "^1.4.0",
+ "phpbench/phpbench": "^1.2.14",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-mockery": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^9.6",
+ "slevomat/coding-standard": "^8.18",
+ "squizlabs/php_codesniffer": "^3.13"
},
"suggest": {
"ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
@@ -3421,32 +3456,22 @@
],
"support": {
"issues": "https://github.com/ramsey/uuid/issues",
- "source": "https://github.com/ramsey/uuid/tree/4.7.4"
+ "source": "https://github.com/ramsey/uuid/tree/4.9.0"
},
- "funding": [
- {
- "url": "https://github.com/ramsey",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
- "type": "tidelift"
- }
- ],
- "time": "2023-04-15T23:01:58+00:00"
+ "time": "2025-06-25T14:20:11+00:00"
},
{
"name": "symfony/console",
- "version": "v6.3.4",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6"
+ "reference": "59266a5bf6a596e3e0844fd95e6ad7ea3c1d3350"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6",
- "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6",
+ "url": "https://api.github.com/repos/symfony/console/zipball/59266a5bf6a596e3e0844fd95e6ad7ea3c1d3350",
+ "reference": "59266a5bf6a596e3e0844fd95e6ad7ea3c1d3350",
"shasum": ""
},
"require": {
@@ -3454,7 +3479,7 @@
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/string": "^5.4|^6.0"
+ "symfony/string": "^5.4|^6.0|^7.0"
},
"conflict": {
"symfony/dependency-injection": "<5.4",
@@ -3468,12 +3493,16 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^5.4|^6.0",
- "symfony/dependency-injection": "^5.4|^6.0",
- "symfony/event-dispatcher": "^5.4|^6.0",
- "symfony/lock": "^5.4|^6.0",
- "symfony/process": "^5.4|^6.0",
- "symfony/var-dumper": "^5.4|^6.0"
+ "symfony/config": "^5.4|^6.0|^7.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+ "symfony/http-foundation": "^6.4|^7.0",
+ "symfony/http-kernel": "^6.4|^7.0",
+ "symfony/lock": "^5.4|^6.0|^7.0",
+ "symfony/messenger": "^5.4|^6.0|^7.0",
+ "symfony/process": "^5.4|^6.0|^7.0",
+ "symfony/stopwatch": "^5.4|^6.0|^7.0",
+ "symfony/var-dumper": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
@@ -3507,7 +3536,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.3.4"
+ "source": "https://github.com/symfony/console/tree/v6.4.24"
},
"funding": [
{
@@ -3518,25 +3547,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-08-16T10:10:12+00:00"
+ "time": "2025-07-30T10:38:54+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v6.3.2",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "883d961421ab1709877c10ac99451632a3d6fa57"
+ "reference": "9b784413143701aa3c94ac1869a159a9e53e8761"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57",
- "reference": "883d961421ab1709877c10ac99451632a3d6fa57",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/9b784413143701aa3c94ac1869a159a9e53e8761",
+ "reference": "9b784413143701aa3c94ac1869a159a9e53e8761",
"shasum": ""
},
"require": {
@@ -3572,7 +3605,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/css-selector/tree/v6.3.2"
+ "source": "https://github.com/symfony/css-selector/tree/v6.4.24"
},
"funding": [
{
@@ -3583,25 +3616,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-07-12T16:00:22+00:00"
+ "time": "2025-07-10T08:14:14+00:00"
},
{
"name": "symfony/deprecation-contracts",
- "version": "v3.3.0",
+ "version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
+ "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
- "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
+ "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
"shasum": ""
},
"require": {
@@ -3609,12 +3646,12 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "3.4-dev"
- },
"thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
}
},
"autoload": {
@@ -3639,7 +3676,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
},
"funding": [
{
@@ -3655,34 +3692,35 @@
"type": "tidelift"
}
],
- "time": "2023-05-23T14:45:45+00:00"
+ "time": "2024-09-25T14:21:43+00:00"
},
{
"name": "symfony/error-handler",
- "version": "v6.3.2",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a"
+ "reference": "30fd0b3cf0e972e82636038ce4db0e4fe777112c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/85fd65ed295c4078367c784e8a5a6cee30348b7a",
- "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/30fd0b3cf0e972e82636038ce4db0e4fe777112c",
+ "reference": "30fd0b3cf0e972e82636038ce4db0e4fe777112c",
"shasum": ""
},
"require": {
"php": ">=8.1",
"psr/log": "^1|^2|^3",
- "symfony/var-dumper": "^5.4|^6.0"
+ "symfony/var-dumper": "^5.4|^6.0|^7.0"
},
"conflict": {
- "symfony/deprecation-contracts": "<2.5"
+ "symfony/deprecation-contracts": "<2.5",
+ "symfony/http-kernel": "<6.4"
},
"require-dev": {
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/http-kernel": "^5.4|^6.0",
- "symfony/serializer": "^5.4|^6.0"
+ "symfony/http-kernel": "^6.4|^7.0",
+ "symfony/serializer": "^5.4|^6.0|^7.0"
},
"bin": [
"Resources/bin/patch-type-declarations"
@@ -3713,7 +3751,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/error-handler/tree/v6.3.2"
+ "source": "https://github.com/symfony/error-handler/tree/v6.4.24"
},
"funding": [
{
@@ -3724,25 +3762,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-07-16T17:05:46+00:00"
+ "time": "2025-07-24T08:25:04+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v6.3.2",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e"
+ "reference": "307a09d8d7228d14a05e5e05b95fffdacab032b2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e",
- "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/307a09d8d7228d14a05e5e05b95fffdacab032b2",
+ "reference": "307a09d8d7228d14a05e5e05b95fffdacab032b2",
"shasum": ""
},
"require": {
@@ -3759,13 +3801,13 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^5.4|^6.0",
- "symfony/dependency-injection": "^5.4|^6.0",
- "symfony/error-handler": "^5.4|^6.0",
- "symfony/expression-language": "^5.4|^6.0",
- "symfony/http-foundation": "^5.4|^6.0",
+ "symfony/config": "^5.4|^6.0|^7.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/error-handler": "^5.4|^6.0|^7.0",
+ "symfony/expression-language": "^5.4|^6.0|^7.0",
+ "symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/stopwatch": "^5.4|^6.0"
+ "symfony/stopwatch": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
@@ -3793,7 +3835,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.24"
},
"funding": [
{
@@ -3804,25 +3846,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-07-06T06:56:43+00:00"
+ "time": "2025-07-10T08:14:14+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
- "version": "v3.3.0",
+ "version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "a76aed96a42d2b521153fb382d418e30d18b59df"
+ "reference": "59eb412e93815df44f05f342958efa9f46b1e586"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df",
- "reference": "a76aed96a42d2b521153fb382d418e30d18b59df",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586",
+ "reference": "59eb412e93815df44f05f342958efa9f46b1e586",
"shasum": ""
},
"require": {
@@ -3831,12 +3877,12 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "3.4-dev"
- },
"thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
}
},
"autoload": {
@@ -3869,7 +3915,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0"
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0"
},
"funding": [
{
@@ -3885,27 +3931,27 @@
"type": "tidelift"
}
],
- "time": "2023-05-23T14:45:45+00:00"
+ "time": "2024-09-25T14:21:43+00:00"
},
{
"name": "symfony/finder",
- "version": "v6.3.3",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e"
+ "reference": "73089124388c8510efb8d2d1689285d285937b08"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e",
- "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/73089124388c8510efb8d2d1689285d285937b08",
+ "reference": "73089124388c8510efb8d2d1689285d285937b08",
"shasum": ""
},
"require": {
"php": ">=8.1"
},
"require-dev": {
- "symfony/filesystem": "^6.0"
+ "symfony/filesystem": "^6.0|^7.0"
},
"type": "library",
"autoload": {
@@ -3933,7 +3979,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v6.3.3"
+ "source": "https://github.com/symfony/finder/tree/v6.4.24"
},
"funding": [
{
@@ -3944,25 +3990,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-07-31T08:31:44+00:00"
+ "time": "2025-07-15T12:02:45+00:00"
},
{
"name": "symfony/http-foundation",
- "version": "v6.3.4",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "cac1556fdfdf6719668181974104e6fcfa60e844"
+ "reference": "0341e41d8d8830c31a1dff5cbc5bdb3ec872a073"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cac1556fdfdf6719668181974104e6fcfa60e844",
- "reference": "cac1556fdfdf6719668181974104e6fcfa60e844",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/0341e41d8d8830c31a1dff5cbc5bdb3ec872a073",
+ "reference": "0341e41d8d8830c31a1dff5cbc5bdb3ec872a073",
"shasum": ""
},
"require": {
@@ -3972,17 +4022,17 @@
"symfony/polyfill-php83": "^1.27"
},
"conflict": {
- "symfony/cache": "<6.2"
+ "symfony/cache": "<6.4.12|>=7.0,<7.1.5"
},
"require-dev": {
- "doctrine/dbal": "^2.13.1|^3.0",
+ "doctrine/dbal": "^2.13.1|^3|^4",
"predis/predis": "^1.1|^2.0",
- "symfony/cache": "^5.4|^6.0",
- "symfony/dependency-injection": "^5.4|^6.0",
- "symfony/expression-language": "^5.4|^6.0",
- "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4",
- "symfony/mime": "^5.4|^6.0",
- "symfony/rate-limiter": "^5.2|^6.0"
+ "symfony/cache": "^6.4.12|^7.1.5",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/expression-language": "^5.4|^6.0|^7.0",
+ "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0",
+ "symfony/mime": "^5.4|^6.0|^7.0",
+ "symfony/rate-limiter": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
@@ -4010,7 +4060,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v6.3.4"
+ "source": "https://github.com/symfony/http-foundation/tree/v6.4.24"
},
"funding": [
{
@@ -4021,34 +4071,38 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-08-22T08:20:46+00:00"
+ "time": "2025-07-10T08:14:14+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v6.3.4",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb"
+ "reference": "b81dcdbe34b8e8f7b3fc7b2a47fa065d5bf30726"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb",
- "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b81dcdbe34b8e8f7b3fc7b2a47fa065d5bf30726",
+ "reference": "b81dcdbe34b8e8f7b3fc7b2a47fa065d5bf30726",
"shasum": ""
},
"require": {
"php": ">=8.1",
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/error-handler": "^6.3",
- "symfony/event-dispatcher": "^5.4|^6.0",
- "symfony/http-foundation": "^6.3.4",
+ "symfony/error-handler": "^6.4|^7.0",
+ "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+ "symfony/http-foundation": "^6.4|^7.0",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
@@ -4056,7 +4110,7 @@
"symfony/cache": "<5.4",
"symfony/config": "<6.1",
"symfony/console": "<5.4",
- "symfony/dependency-injection": "<6.3.4",
+ "symfony/dependency-injection": "<6.4",
"symfony/doctrine-bridge": "<5.4",
"symfony/form": "<5.4",
"symfony/http-client": "<5.4",
@@ -4066,7 +4120,7 @@
"symfony/translation": "<5.4",
"symfony/translation-contracts": "<2.5",
"symfony/twig-bridge": "<5.4",
- "symfony/validator": "<5.4",
+ "symfony/validator": "<6.4",
"symfony/var-dumper": "<6.3",
"twig/twig": "<2.13"
},
@@ -4075,26 +4129,27 @@
},
"require-dev": {
"psr/cache": "^1.0|^2.0|^3.0",
- "symfony/browser-kit": "^5.4|^6.0",
- "symfony/clock": "^6.2",
- "symfony/config": "^6.1",
- "symfony/console": "^5.4|^6.0",
- "symfony/css-selector": "^5.4|^6.0",
- "symfony/dependency-injection": "^6.3.4",
- "symfony/dom-crawler": "^5.4|^6.0",
- "symfony/expression-language": "^5.4|^6.0",
- "symfony/finder": "^5.4|^6.0",
+ "symfony/browser-kit": "^5.4|^6.0|^7.0",
+ "symfony/clock": "^6.2|^7.0",
+ "symfony/config": "^6.1|^7.0",
+ "symfony/console": "^5.4|^6.0|^7.0",
+ "symfony/css-selector": "^5.4|^6.0|^7.0",
+ "symfony/dependency-injection": "^6.4|^7.0",
+ "symfony/dom-crawler": "^5.4|^6.0|^7.0",
+ "symfony/expression-language": "^5.4|^6.0|^7.0",
+ "symfony/finder": "^5.4|^6.0|^7.0",
"symfony/http-client-contracts": "^2.5|^3",
- "symfony/process": "^5.4|^6.0",
- "symfony/property-access": "^5.4.5|^6.0.5",
- "symfony/routing": "^5.4|^6.0",
- "symfony/serializer": "^6.3",
- "symfony/stopwatch": "^5.4|^6.0",
- "symfony/translation": "^5.4|^6.0",
+ "symfony/process": "^5.4|^6.0|^7.0",
+ "symfony/property-access": "^5.4.5|^6.0.5|^7.0",
+ "symfony/routing": "^5.4|^6.0|^7.0",
+ "symfony/serializer": "^6.4.4|^7.0.4",
+ "symfony/stopwatch": "^5.4|^6.0|^7.0",
+ "symfony/translation": "^5.4|^6.0|^7.0",
"symfony/translation-contracts": "^2.5|^3",
- "symfony/uid": "^5.4|^6.0",
- "symfony/validator": "^6.3",
- "symfony/var-exporter": "^6.2",
+ "symfony/uid": "^5.4|^6.0|^7.0",
+ "symfony/validator": "^6.4|^7.0",
+ "symfony/var-dumper": "^5.4|^6.4|^7.0",
+ "symfony/var-exporter": "^6.2|^7.0",
"twig/twig": "^2.13|^3.0.4"
},
"type": "library",
@@ -4123,7 +4178,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-kernel/tree/v6.3.4"
+ "source": "https://github.com/symfony/http-kernel/tree/v6.4.24"
},
"funding": [
{
@@ -4134,25 +4189,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-08-26T13:54:49+00:00"
+ "time": "2025-07-31T09:23:30+00:00"
},
{
"name": "symfony/mailer",
- "version": "v6.3.0",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "7b03d9be1dea29bfec0a6c7b603f5072a4c97435"
+ "reference": "b4d7fa2c69641109979ed06e98a588d245362062"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/7b03d9be1dea29bfec0a6c7b603f5072a4c97435",
- "reference": "7b03d9be1dea29bfec0a6c7b603f5072a4c97435",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/b4d7fa2c69641109979ed06e98a588d245362062",
+ "reference": "b4d7fa2c69641109979ed06e98a588d245362062",
"shasum": ""
},
"require": {
@@ -4160,8 +4219,8 @@
"php": ">=8.1",
"psr/event-dispatcher": "^1",
"psr/log": "^1|^2|^3",
- "symfony/event-dispatcher": "^5.4|^6.0",
- "symfony/mime": "^6.2",
+ "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+ "symfony/mime": "^6.2|^7.0",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
@@ -4172,10 +4231,10 @@
"symfony/twig-bridge": "<6.2.1"
},
"require-dev": {
- "symfony/console": "^5.4|^6.0",
- "symfony/http-client": "^5.4|^6.0",
- "symfony/messenger": "^6.2",
- "symfony/twig-bridge": "^6.2"
+ "symfony/console": "^5.4|^6.0|^7.0",
+ "symfony/http-client": "^5.4|^6.0|^7.0",
+ "symfony/messenger": "^6.2|^7.0",
+ "symfony/twig-bridge": "^6.2|^7.0"
},
"type": "library",
"autoload": {
@@ -4203,7 +4262,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailer/tree/v6.3.0"
+ "source": "https://github.com/symfony/mailer/tree/v6.4.24"
},
"funding": [
{
@@ -4214,25 +4273,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-05-29T12:49:39+00:00"
+ "time": "2025-07-24T08:25:04+00:00"
},
{
"name": "symfony/mime",
- "version": "v6.3.3",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98"
+ "reference": "664d5e844a2de5e11c8255d0aef6bc15a9660ac7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/9a0cbd52baa5ba5a5b1f0cacc59466f194730f98",
- "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/664d5e844a2de5e11c8255d0aef6bc15a9660ac7",
+ "reference": "664d5e844a2de5e11c8255d0aef6bc15a9660ac7",
"shasum": ""
},
"require": {
@@ -4246,16 +4309,17 @@
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
"symfony/mailer": "<5.4",
- "symfony/serializer": "<6.2.13|>=6.3,<6.3.2"
+ "symfony/serializer": "<6.4.3|>7.0,<7.0.3"
},
"require-dev": {
"egulias/email-validator": "^2.1.10|^3.1|^4",
"league/html-to-markdown": "^5.0",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
- "symfony/dependency-injection": "^5.4|^6.0",
- "symfony/property-access": "^5.4|^6.0",
- "symfony/property-info": "^5.4|^6.0",
- "symfony/serializer": "~6.2.13|^6.3.2"
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/process": "^5.4|^6.4|^7.0",
+ "symfony/property-access": "^5.4|^6.0|^7.0",
+ "symfony/property-info": "^5.4|^6.0|^7.0",
+ "symfony/serializer": "^6.4.3|^7.0.3"
},
"type": "library",
"autoload": {
@@ -4287,7 +4351,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v6.3.3"
+ "source": "https://github.com/symfony/mime/tree/v6.4.24"
},
"funding": [
{
@@ -4298,29 +4362,33 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-07-31T07:08:24+00:00"
+ "time": "2025-07-15T12:02:45+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.28.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb"
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
- "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"provide": {
"ext-ctype": "*"
@@ -4330,12 +4398,9 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -4369,7 +4434,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
},
"funding": [
{
@@ -4380,41 +4445,42 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.28.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "875e90aeea2777b6f135677f618529449334a612"
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612",
- "reference": "875e90aeea2777b6f135677f618529449334a612",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -4450,7 +4516,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
},
"funding": [
{
@@ -4461,43 +4527,43 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2025-06-27T09:58:17+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.28.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "ecaafce9f77234a6a449d29e49267ba10499116d"
+ "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d",
- "reference": "ecaafce9f77234a6a449d29e49267ba10499116d",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3",
+ "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3",
"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"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -4537,7 +4603,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0"
},
"funding": [
{
@@ -4548,41 +4614,42 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-01-26T09:30:37+00:00"
+ "time": "2024-09-10T14:38:51+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.28.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92"
+ "reference": "3833d7255cc303546435cb650316bff708a1c75c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
- "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
+ "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"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -4621,7 +4688,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
},
"funding": [
{
@@ -4632,29 +4699,34 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.28.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "42292d99c55abe617799667f454222c54c60e229"
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229",
- "reference": "42292d99c55abe617799667f454222c54c60e229",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
+ "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "ext-iconv": "*",
+ "php": ">=7.2"
},
"provide": {
"ext-mbstring": "*"
@@ -4664,12 +4736,9 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -4704,7 +4773,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
},
"funding": [
{
@@ -4716,79 +4785,7 @@
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2023-07-28T09:04:16+00:00"
- },
- {
- "name": "symfony/polyfill-php72",
- "version": "v1.28.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179",
- "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
- "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.28.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
@@ -4796,33 +4793,30 @@
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-12-23T08:48:59+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.28.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5"
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
- "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -4863,7 +4857,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
},
"funding": [
{
@@ -4874,39 +4868,39 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2025-01-02T08:10:11+00:00"
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.28.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
- "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11"
+ "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
- "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5",
+ "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5",
"shasum": ""
},
"require": {
- "php": ">=7.1",
- "symfony/polyfill-php80": "^1.14"
+ "php": ">=7.2"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -4943,7 +4937,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0"
},
"funding": [
{
@@ -4954,29 +4948,33 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-08-16T06:22:46+00:00"
+ "time": "2025-07-08T02:45:35+00:00"
},
{
"name": "symfony/polyfill-uuid",
- "version": "v1.28.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-uuid.git",
- "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e"
+ "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/9c44518a5aff8da565c8a55dbe85d2769e6f630e",
- "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e",
+ "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
+ "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"provide": {
"ext-uuid": "*"
@@ -4986,12 +4984,9 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.28-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -5025,7 +5020,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/polyfill-uuid/tree/v1.28.0"
+ "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0"
},
"funding": [
{
@@ -5036,25 +5031,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-01-26T09:26:14+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/process",
- "version": "v6.3.4",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54"
+ "reference": "8eb6dc555bfb49b2703438d5de65cc9f138ff50b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54",
- "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54",
+ "url": "https://api.github.com/repos/symfony/process/zipball/8eb6dc555bfb49b2703438d5de65cc9f138ff50b",
+ "reference": "8eb6dc555bfb49b2703438d5de65cc9f138ff50b",
"shasum": ""
},
"require": {
@@ -5086,7 +5085,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.3.4"
+ "source": "https://github.com/symfony/process/tree/v6.4.24"
},
"funding": [
{
@@ -5097,25 +5096,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-08-07T10:39:22+00:00"
+ "time": "2025-07-10T08:14:14+00:00"
},
{
"name": "symfony/routing",
- "version": "v6.3.3",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a"
+ "reference": "e4f94e625c8e6f910aa004a0042f7b2d398278f5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/e7243039ab663822ff134fbc46099b5fdfa16f6a",
- "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/e4f94e625c8e6f910aa004a0042f7b2d398278f5",
+ "reference": "e4f94e625c8e6f910aa004a0042f7b2d398278f5",
"shasum": ""
},
"require": {
@@ -5131,11 +5134,11 @@
"require-dev": {
"doctrine/annotations": "^1.12|^2",
"psr/log": "^1|^2|^3",
- "symfony/config": "^6.2",
- "symfony/dependency-injection": "^5.4|^6.0",
- "symfony/expression-language": "^5.4|^6.0",
- "symfony/http-foundation": "^5.4|^6.0",
- "symfony/yaml": "^5.4|^6.0"
+ "symfony/config": "^6.2|^7.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/expression-language": "^5.4|^6.0|^7.0",
+ "symfony/http-foundation": "^5.4|^6.0|^7.0",
+ "symfony/yaml": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
@@ -5169,7 +5172,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v6.3.3"
+ "source": "https://github.com/symfony/routing/tree/v6.4.24"
},
"funding": [
{
@@ -5180,42 +5183,47 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-07-31T07:08:24+00:00"
+ "time": "2025-07-15T08:46:37+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v3.3.0",
+ "version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4"
+ "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4",
- "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
+ "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
"shasum": ""
},
"require": {
"php": ">=8.1",
- "psr/container": "^2.0"
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3"
},
"conflict": {
"ext-psr": "<1.1|>=2"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "3.4-dev"
- },
"thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
}
},
"autoload": {
@@ -5251,7 +5259,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.3.0"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.6.0"
},
"funding": [
{
@@ -5267,20 +5275,20 @@
"type": "tidelift"
}
],
- "time": "2023-05-23T14:45:45+00:00"
+ "time": "2025-04-25T09:37:31+00:00"
},
{
"name": "symfony/string",
- "version": "v6.3.2",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "53d1a83225002635bca3482fcbf963001313fb68"
+ "reference": "f0ce0bd36a3accb4a225435be077b4b4875587f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68",
- "reference": "53d1a83225002635bca3482fcbf963001313fb68",
+ "url": "https://api.github.com/repos/symfony/string/zipball/f0ce0bd36a3accb4a225435be077b4b4875587f4",
+ "reference": "f0ce0bd36a3accb4a225435be077b4b4875587f4",
"shasum": ""
},
"require": {
@@ -5294,11 +5302,11 @@
"symfony/translation-contracts": "<2.5"
},
"require-dev": {
- "symfony/error-handler": "^5.4|^6.0",
- "symfony/http-client": "^5.4|^6.0",
- "symfony/intl": "^6.2",
+ "symfony/error-handler": "^5.4|^6.0|^7.0",
+ "symfony/http-client": "^5.4|^6.0|^7.0",
+ "symfony/intl": "^6.2|^7.0",
"symfony/translation-contracts": "^2.5|^3.0",
- "symfony/var-exporter": "^5.4|^6.0"
+ "symfony/var-exporter": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
@@ -5337,7 +5345,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.3.2"
+ "source": "https://github.com/symfony/string/tree/v6.4.24"
},
"funding": [
{
@@ -5348,25 +5356,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-07-05T08:41:27+00:00"
+ "time": "2025-07-10T08:14:14+00:00"
},
{
"name": "symfony/translation",
- "version": "v6.3.3",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd"
+ "reference": "300b72643e89de0734d99a9e3f8494a3ef6936e1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd",
- "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/300b72643e89de0734d99a9e3f8494a3ef6936e1",
+ "reference": "300b72643e89de0734d99a9e3f8494a3ef6936e1",
"shasum": ""
},
"require": {
@@ -5389,19 +5401,19 @@
"symfony/translation-implementation": "2.3|3.0"
},
"require-dev": {
- "nikic/php-parser": "^4.13",
+ "nikic/php-parser": "^4.18|^5.0",
"psr/log": "^1|^2|^3",
- "symfony/config": "^5.4|^6.0",
- "symfony/console": "^5.4|^6.0",
- "symfony/dependency-injection": "^5.4|^6.0",
- "symfony/finder": "^5.4|^6.0",
+ "symfony/config": "^5.4|^6.0|^7.0",
+ "symfony/console": "^5.4|^6.0|^7.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/finder": "^5.4|^6.0|^7.0",
"symfony/http-client-contracts": "^2.5|^3.0",
- "symfony/http-kernel": "^5.4|^6.0",
- "symfony/intl": "^5.4|^6.0",
+ "symfony/http-kernel": "^5.4|^6.0|^7.0",
+ "symfony/intl": "^5.4|^6.0|^7.0",
"symfony/polyfill-intl-icu": "^1.21",
- "symfony/routing": "^5.4|^6.0",
+ "symfony/routing": "^5.4|^6.0|^7.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/yaml": "^5.4|^6.0"
+ "symfony/yaml": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
@@ -5432,7 +5444,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v6.3.3"
+ "source": "https://github.com/symfony/translation/tree/v6.4.24"
},
"funding": [
{
@@ -5443,25 +5455,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-07-31T07:08:24+00:00"
+ "time": "2025-07-30T17:30:48+00:00"
},
{
"name": "symfony/translation-contracts",
- "version": "v3.3.0",
+ "version": "v3.6.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
- "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86"
+ "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86",
- "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d",
+ "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d",
"shasum": ""
},
"require": {
@@ -5469,12 +5485,12 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "3.4-dev"
- },
"thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.6-dev"
}
},
"autoload": {
@@ -5510,7 +5526,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0"
+ "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0"
},
"funding": [
{
@@ -5526,20 +5542,20 @@
"type": "tidelift"
}
],
- "time": "2023-05-30T17:17:10+00:00"
+ "time": "2024-09-27T08:32:26+00:00"
},
{
"name": "symfony/uid",
- "version": "v6.3.0",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/uid.git",
- "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384"
+ "reference": "17da16a750541a42cf2183935e0f6008316c23f7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/uid/zipball/01b0f20b1351d997711c56f1638f7a8c3061e384",
- "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384",
+ "url": "https://api.github.com/repos/symfony/uid/zipball/17da16a750541a42cf2183935e0f6008316c23f7",
+ "reference": "17da16a750541a42cf2183935e0f6008316c23f7",
"shasum": ""
},
"require": {
@@ -5547,7 +5563,7 @@
"symfony/polyfill-uuid": "^1.15"
},
"require-dev": {
- "symfony/console": "^5.4|^6.0"
+ "symfony/console": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
@@ -5584,7 +5600,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/uid/tree/v6.3.0"
+ "source": "https://github.com/symfony/uid/tree/v6.4.24"
},
"funding": [
{
@@ -5595,25 +5611,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-04-08T07:25:02+00:00"
+ "time": "2025-07-10T08:14:14+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v6.3.4",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45"
+ "reference": "aa29484ce0544bd69fa9f0df902e5ed7b7fe5034"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2027be14f8ae8eae999ceadebcda5b4909b81d45",
- "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/aa29484ce0544bd69fa9f0df902e5ed7b7fe5034",
+ "reference": "aa29484ce0544bd69fa9f0df902e5ed7b7fe5034",
"shasum": ""
},
"require": {
@@ -5625,11 +5645,11 @@
"symfony/console": "<5.4"
},
"require-dev": {
- "ext-iconv": "*",
- "symfony/console": "^5.4|^6.0",
- "symfony/http-kernel": "^5.4|^6.0",
- "symfony/process": "^5.4|^6.0",
- "symfony/uid": "^5.4|^6.0",
+ "symfony/console": "^5.4|^6.0|^7.0",
+ "symfony/error-handler": "^6.3|^7.0",
+ "symfony/http-kernel": "^5.4|^6.0|^7.0",
+ "symfony/process": "^5.4|^6.0|^7.0",
+ "symfony/uid": "^5.4|^6.0|^7.0",
"twig/twig": "^2.13|^3.0.4"
},
"bin": [
@@ -5668,7 +5688,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v6.3.4"
+ "source": "https://github.com/symfony/var-dumper/tree/v6.4.24"
},
"funding": [
{
@@ -5679,25 +5699,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-08-24T14:51:05+00:00"
+ "time": "2025-07-29T18:40:01+00:00"
},
{
"name": "tightenco/ziggy",
- "version": "v1.6.2",
+ "version": "v1.8.2",
"source": {
"type": "git",
"url": "https://github.com/tighten/ziggy.git",
- "reference": "41eb6384a9f9ae85cf54d6dc8f98dab282b07890"
+ "reference": "939576ad0f3d3e633a9401c8c377bc7bc873ff35"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tighten/ziggy/zipball/41eb6384a9f9ae85cf54d6dc8f98dab282b07890",
- "reference": "41eb6384a9f9ae85cf54d6dc8f98dab282b07890",
+ "url": "https://api.github.com/repos/tighten/ziggy/zipball/939576ad0f3d3e633a9401c8c377bc7bc873ff35",
+ "reference": "939576ad0f3d3e633a9401c8c377bc7bc873ff35",
"shasum": ""
},
"require": {
@@ -5705,8 +5729,8 @@
"laravel/framework": ">=5.4@dev"
},
"require-dev": {
- "orchestra/testbench": "^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0",
- "phpunit/phpunit": "^6.0 || ^7.0 || ^8.0 || ^9.0"
+ "orchestra/testbench": "^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0",
+ "phpunit/phpunit": "^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0"
},
"type": "library",
"extra": {
@@ -5749,37 +5773,39 @@
],
"support": {
"issues": "https://github.com/tighten/ziggy/issues",
- "source": "https://github.com/tighten/ziggy/tree/v1.6.2"
+ "source": "https://github.com/tighten/ziggy/tree/v1.8.2"
},
- "time": "2023-08-18T20:28:21+00:00"
+ "time": "2024-02-20T19:56:04+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
- "version": "2.2.6",
+ "version": "v2.3.0",
"source": {
"type": "git",
"url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
- "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c"
+ "reference": "0d72ac1c00084279c1816675284073c5a337c20d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c",
- "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c",
+ "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d",
+ "reference": "0d72ac1c00084279c1816675284073c5a337c20d",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
- "php": "^5.5 || ^7.0 || ^8.0",
- "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
+ "php": "^7.4 || ^8.0",
+ "symfony/css-selector": "^5.4 || ^6.0 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10"
+ "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^8.5.21 || ^9.5.10"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.2.x-dev"
+ "dev-master": "2.x-dev"
}
},
"autoload": {
@@ -5802,37 +5828,37 @@
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
"support": {
"issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
- "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6"
+ "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0"
},
- "time": "2023-01-03T09:29:04+00:00"
+ "time": "2024-12-21T16:25:41+00:00"
},
{
"name": "vlucas/phpdotenv",
- "version": "v5.5.0",
+ "version": "v5.6.2",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
- "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7"
+ "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7",
- "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af",
+ "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af",
"shasum": ""
},
"require": {
"ext-pcre": "*",
- "graham-campbell/result-type": "^1.0.2",
- "php": "^7.1.3 || ^8.0",
- "phpoption/phpoption": "^1.8",
- "symfony/polyfill-ctype": "^1.23",
- "symfony/polyfill-mbstring": "^1.23.1",
- "symfony/polyfill-php80": "^1.23.1"
+ "graham-campbell/result-type": "^1.1.3",
+ "php": "^7.2.5 || ^8.0",
+ "phpoption/phpoption": "^1.9.3",
+ "symfony/polyfill-ctype": "^1.24",
+ "symfony/polyfill-mbstring": "^1.24",
+ "symfony/polyfill-php80": "^1.24"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.4.1",
+ "bamarni/composer-bin-plugin": "^1.8.2",
"ext-filter": "*",
- "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25"
+ "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
},
"suggest": {
"ext-filter": "Required to use the boolean validator."
@@ -5841,10 +5867,10 @@
"extra": {
"bamarni-bin": {
"bin-links": true,
- "forward-command": true
+ "forward-command": false
},
"branch-alias": {
- "dev-master": "5.5-dev"
+ "dev-master": "5.6-dev"
}
},
"autoload": {
@@ -5876,7 +5902,7 @@
],
"support": {
"issues": "https://github.com/vlucas/phpdotenv/issues",
- "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0"
+ "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.2"
},
"funding": [
{
@@ -5888,20 +5914,20 @@
"type": "tidelift"
}
],
- "time": "2022-10-16T01:01:54+00:00"
+ "time": "2025-04-30T23:37:27+00:00"
},
{
"name": "voku/portable-ascii",
- "version": "2.0.1",
+ "version": "2.0.3",
"source": {
"type": "git",
"url": "https://github.com/voku/portable-ascii.git",
- "reference": "b56450eed252f6801410d810c8e1727224ae0743"
+ "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743",
- "reference": "b56450eed252f6801410d810c8e1727224ae0743",
+ "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
+ "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d",
"shasum": ""
},
"require": {
@@ -5926,7 +5952,7 @@
"authors": [
{
"name": "Lars Moelleken",
- "homepage": "http://www.moelleken.org/"
+ "homepage": "https://www.moelleken.org/"
}
],
"description": "Portable ASCII library - performance optimized (ascii) string functions for php.",
@@ -5938,7 +5964,7 @@
],
"support": {
"issues": "https://github.com/voku/portable-ascii/issues",
- "source": "https://github.com/voku/portable-ascii/tree/2.0.1"
+ "source": "https://github.com/voku/portable-ascii/tree/2.0.3"
},
"funding": [
{
@@ -5962,7 +5988,7 @@
"type": "tidelift"
}
],
- "time": "2022-03-08T17:03:00+00:00"
+ "time": "2024-11-21T01:49:47+00:00"
},
{
"name": "webmozart/assert",
@@ -6026,44 +6052,44 @@
"packages-dev": [
{
"name": "barryvdh/laravel-debugbar",
- "version": "v3.9.2",
+ "version": "v3.16.0",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
- "reference": "bfd0131c146973cab164e50f5cdd8a67cc60cab1"
+ "reference": "f265cf5e38577d42311f1a90d619bcd3740bea23"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/bfd0131c146973cab164e50f5cdd8a67cc60cab1",
- "reference": "bfd0131c146973cab164e50f5cdd8a67cc60cab1",
+ "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/f265cf5e38577d42311f1a90d619bcd3740bea23",
+ "reference": "f265cf5e38577d42311f1a90d619bcd3740bea23",
"shasum": ""
},
"require": {
- "illuminate/routing": "^9|^10",
- "illuminate/session": "^9|^10",
- "illuminate/support": "^9|^10",
- "maximebf/debugbar": "^1.18.2",
- "php": "^8.0",
- "symfony/finder": "^6"
+ "illuminate/routing": "^9|^10|^11|^12",
+ "illuminate/session": "^9|^10|^11|^12",
+ "illuminate/support": "^9|^10|^11|^12",
+ "php": "^8.1",
+ "php-debugbar/php-debugbar": "~2.2.0",
+ "symfony/finder": "^6|^7"
},
"require-dev": {
"mockery/mockery": "^1.3.3",
- "orchestra/testbench-dusk": "^5|^6|^7|^8",
- "phpunit/phpunit": "^8.5.30|^9.0",
+ "orchestra/testbench-dusk": "^7|^8|^9|^10",
+ "phpunit/phpunit": "^9.5.10|^10|^11",
"squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "3.8-dev"
- },
"laravel": {
- "providers": [
- "Barryvdh\\Debugbar\\ServiceProvider"
- ],
"aliases": {
"Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar"
- }
+ },
+ "providers": [
+ "Barryvdh\\Debugbar\\ServiceProvider"
+ ]
+ },
+ "branch-alias": {
+ "dev-master": "3.16-dev"
}
},
"autoload": {
@@ -6088,13 +6114,14 @@
"keywords": [
"debug",
"debugbar",
+ "dev",
"laravel",
"profiler",
"webprofiler"
],
"support": {
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
- "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.9.2"
+ "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.16.0"
},
"funding": [
{
@@ -6106,20 +6133,20 @@
"type": "github"
}
],
- "time": "2023-08-25T18:43:57+00:00"
+ "time": "2025-07-14T11:56:43+00:00"
},
{
"name": "fakerphp/faker",
- "version": "v1.23.0",
+ "version": "v1.24.1",
"source": {
"type": "git",
"url": "https://github.com/FakerPHP/Faker.git",
- "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01"
+ "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01",
- "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01",
+ "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5",
+ "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5",
"shasum": ""
},
"require": {
@@ -6145,11 +6172,6 @@
"ext-mbstring": "Required for multibyte Unicode string functionality."
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "v1.21-dev"
- }
- },
"autoload": {
"psr-4": {
"Faker\\": "src/Faker/"
@@ -6172,32 +6194,32 @@
],
"support": {
"issues": "https://github.com/FakerPHP/Faker/issues",
- "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0"
+ "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1"
},
- "time": "2023-06-12T08:44:38+00:00"
+ "time": "2024-11-21T13:46:39+00:00"
},
{
"name": "filp/whoops",
- "version": "2.15.3",
+ "version": "2.18.4",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
- "reference": "c83e88a30524f9360b11f585f71e6b17313b7187"
+ "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187",
- "reference": "c83e88a30524f9360b11f585f71e6b17313b7187",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d",
+ "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d",
"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",
@@ -6237,7 +6259,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
- "source": "https://github.com/filp/whoops/tree/2.15.3"
+ "source": "https://github.com/filp/whoops/tree/2.18.4"
},
"funding": [
{
@@ -6245,24 +6267,24 @@
"type": "github"
}
],
- "time": "2023-07-13T12:00:00+00:00"
+ "time": "2025-08-08T12:00:00+00:00"
},
{
"name": "hamcrest/hamcrest-php",
- "version": "v2.0.1",
+ "version": "v2.1.1",
"source": {
"type": "git",
"url": "https://github.com/hamcrest/hamcrest-php.git",
- "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
- "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+ "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
"shasum": ""
},
"require": {
- "php": "^5.3|^7.0|^8.0"
+ "php": "^7.4|^8.0"
},
"replace": {
"cordoval/hamcrest-php": "*",
@@ -6270,8 +6292,8 @@
"kodova/hamcrest-php": "*"
},
"require-dev": {
- "phpunit/php-file-iterator": "^1.4 || ^2.0",
- "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
+ "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"extra": {
@@ -6294,22 +6316,22 @@
],
"support": {
"issues": "https://github.com/hamcrest/hamcrest-php/issues",
- "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
+ "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1"
},
- "time": "2020-07-09T08:09:16+00:00"
+ "time": "2025-04-30T06:54:44+00:00"
},
{
"name": "laravel/breeze",
- "version": "v1.23.1",
+ "version": "v1.29.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/breeze.git",
- "reference": "6d2c37a5d9febe9d7714ecf7c85db847591b3bb5"
+ "reference": "22c53b84b7fff91b01a318d71a10dfc251e92849"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/breeze/zipball/6d2c37a5d9febe9d7714ecf7c85db847591b3bb5",
- "reference": "6d2c37a5d9febe9d7714ecf7c85db847591b3bb5",
+ "url": "https://api.github.com/repos/laravel/breeze/zipball/22c53b84b7fff91b01a318d71a10dfc251e92849",
+ "reference": "22c53b84b7fff91b01a318d71a10dfc251e92849",
"shasum": ""
},
"require": {
@@ -6325,13 +6347,13 @@
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- },
"laravel": {
"providers": [
"Laravel\\Breeze\\BreezeServiceProvider"
]
+ },
+ "branch-alias": {
+ "dev-master": "1.x-dev"
}
},
"autoload": {
@@ -6358,20 +6380,20 @@
"issues": "https://github.com/laravel/breeze/issues",
"source": "https://github.com/laravel/breeze"
},
- "time": "2023-08-27T14:49:38+00:00"
+ "time": "2024-03-04T14:35:21+00:00"
},
{
"name": "laravel/pint",
- "version": "v1.12.0",
+ "version": "v1.20.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "08bcf51e520a5e5aea458fc600ac4869f6934a66"
+ "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/08bcf51e520a5e5aea458fc600ac4869f6934a66",
- "reference": "08bcf51e520a5e5aea458fc600ac4869f6934a66",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/53072e8ea22213a7ed168a8a15b96fbb8b82d44b",
+ "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b",
"shasum": ""
},
"require": {
@@ -6382,13 +6404,13 @@
"php": "^8.1.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.21.1",
- "illuminate/view": "^10.5.1",
- "laravel-zero/framework": "^10.1.2",
- "mockery/mockery": "^1.5.1",
- "nunomaduro/larastan": "^2.5.1",
- "nunomaduro/termwind": "^1.15.1",
- "pestphp/pest": "^2.4.0"
+ "friendsofphp/php-cs-fixer": "^3.66.0",
+ "illuminate/view": "^10.48.25",
+ "larastan/larastan": "^2.9.12",
+ "laravel-zero/framework": "^10.48.25",
+ "mockery/mockery": "^1.6.12",
+ "nunomaduro/termwind": "^1.17.0",
+ "pestphp/pest": "^2.36.0"
},
"bin": [
"builds/pint"
@@ -6424,31 +6446,32 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2023-08-30T07:53:32+00:00"
+ "time": "2025-01-14T16:20:53+00:00"
},
{
"name": "laravel/sail",
- "version": "v1.24.0",
+ "version": "v1.44.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sail.git",
- "reference": "c8a621d7b69ab2e568d97a20f837ca733a224006"
+ "reference": "a09097bd2a8a38e23ac472fa6a6cf5b0d1c1d3fe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sail/zipball/c8a621d7b69ab2e568d97a20f837ca733a224006",
- "reference": "c8a621d7b69ab2e568d97a20f837ca733a224006",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/a09097bd2a8a38e23ac472fa6a6cf5b0d1c1d3fe",
+ "reference": "a09097bd2a8a38e23ac472fa6a6cf5b0d1c1d3fe",
"shasum": ""
},
"require": {
- "illuminate/console": "^8.0|^9.0|^10.0",
- "illuminate/contracts": "^8.0|^9.0|^10.0",
- "illuminate/support": "^8.0|^9.0|^10.0",
+ "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0",
+ "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0",
+ "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0",
"php": "^8.0",
- "symfony/yaml": "^6.0"
+ "symfony/console": "^6.0|^7.0",
+ "symfony/yaml": "^6.0|^7.0"
},
"require-dev": {
- "orchestra/testbench": "^6.0|^7.0|^8.0",
+ "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0",
"phpstan/phpstan": "^1.10"
},
"bin": [
@@ -6456,9 +6479,6 @@
],
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- },
"laravel": {
"providers": [
"Laravel\\Sail\\SailServiceProvider"
@@ -6489,86 +6509,20 @@
"issues": "https://github.com/laravel/sail/issues",
"source": "https://github.com/laravel/sail"
},
- "time": "2023-08-27T14:26:11+00:00"
- },
- {
- "name": "maximebf/debugbar",
- "version": "v1.18.2",
- "source": {
- "type": "git",
- "url": "https://github.com/maximebf/php-debugbar.git",
- "reference": "17dcf3f6ed112bb85a37cf13538fd8de49f5c274"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/17dcf3f6ed112bb85a37cf13538fd8de49f5c274",
- "reference": "17dcf3f6ed112bb85a37cf13538fd8de49f5c274",
- "shasum": ""
- },
- "require": {
- "php": "^7.1|^8",
- "psr/log": "^1|^2|^3",
- "symfony/var-dumper": "^4|^5|^6"
- },
- "require-dev": {
- "phpunit/phpunit": ">=7.5.20 <10.0",
- "twig/twig": "^1.38|^2.7|^3.0"
- },
- "suggest": {
- "kriswallsmith/assetic": "The best way to manage assets",
- "monolog/monolog": "Log using Monolog",
- "predis/predis": "Redis storage"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.18-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "DebugBar\\": "src/DebugBar/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Maxime Bouroumeau-Fuseau",
- "email": "maxime.bouroumeau@gmail.com",
- "homepage": "http://maximebf.com"
- },
- {
- "name": "Barry vd. Heuvel",
- "email": "barryvdh@gmail.com"
- }
- ],
- "description": "Debug bar in the browser for php application",
- "homepage": "https://github.com/maximebf/php-debugbar",
- "keywords": [
- "debug",
- "debugbar"
- ],
- "support": {
- "issues": "https://github.com/maximebf/php-debugbar/issues",
- "source": "https://github.com/maximebf/php-debugbar/tree/v1.18.2"
- },
- "time": "2023-02-04T15:27:00+00:00"
+ "time": "2025-07-04T16:17:06+00:00"
},
{
"name": "mockery/mockery",
- "version": "1.6.6",
+ "version": "1.6.12",
"source": {
"type": "git",
"url": "https://github.com/mockery/mockery.git",
- "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e"
+ "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e",
- "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+ "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699",
"shasum": ""
},
"require": {
@@ -6580,10 +6534,8 @@
"phpunit/phpunit": "<8.0"
},
"require-dev": {
- "phpunit/phpunit": "^8.5 || ^9.6.10",
- "psalm/plugin-phpunit": "^0.18.4",
- "symplify/easy-coding-standard": "^11.5.0",
- "vimeo/psalm": "^4.30"
+ "phpunit/phpunit": "^8.5 || ^9.6.17",
+ "symplify/easy-coding-standard": "^12.1.14"
},
"type": "library",
"autoload": {
@@ -6640,20 +6592,20 @@
"security": "https://github.com/mockery/mockery/security/advisories",
"source": "https://github.com/mockery/mockery"
},
- "time": "2023-08-09T00:03:52+00:00"
+ "time": "2024-05-16T03:13:13+00:00"
},
{
"name": "myclabs/deep-copy",
- "version": "1.11.1",
+ "version": "1.13.4",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
- "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
"shasum": ""
},
"require": {
@@ -6661,11 +6613,12 @@
},
"conflict": {
"doctrine/collections": "<1.6.8",
- "doctrine/common": "<2.13.3 || >=3,<3.2.2"
+ "doctrine/common": "<2.13.3 || >=3 <3.2.2"
},
"require-dev": {
"doctrine/collections": "^1.6.8",
"doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpspec/prophecy": "^1.10",
"phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
},
"type": "library",
@@ -6691,7 +6644,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
},
"funding": [
{
@@ -6699,41 +6652,44 @@
"type": "tidelift"
}
],
- "time": "2023-03-08T13:26:56+00:00"
+ "time": "2025-08-01T08:46:24+00:00"
},
{
"name": "nunomaduro/collision",
- "version": "v7.8.1",
+ "version": "v7.12.0",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
- "reference": "61553ad3260845d7e3e49121b7074619233d361b"
+ "reference": "995245421d3d7593a6960822063bdba4f5d7cf1a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/collision/zipball/61553ad3260845d7e3e49121b7074619233d361b",
- "reference": "61553ad3260845d7e3e49121b7074619233d361b",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/995245421d3d7593a6960822063bdba4f5d7cf1a",
+ "reference": "995245421d3d7593a6960822063bdba4f5d7cf1a",
"shasum": ""
},
"require": {
- "filp/whoops": "^2.15.3",
- "nunomaduro/termwind": "^1.15.1",
+ "filp/whoops": "^2.17.0",
+ "nunomaduro/termwind": "^1.17.0",
"php": "^8.1.0",
- "symfony/console": "^6.3.2"
+ "symfony/console": "^6.4.17"
+ },
+ "conflict": {
+ "laravel/framework": ">=11.0.0"
},
"require-dev": {
- "brianium/paratest": "^7.2.4",
- "laravel/framework": "^10.17.1",
- "laravel/pint": "^1.10.5",
- "laravel/sail": "^1.23.1",
- "laravel/sanctum": "^3.2.5",
- "laravel/tinker": "^2.8.1",
- "nunomaduro/larastan": "^2.6.4",
- "orchestra/testbench-core": "^8.5.9",
- "pestphp/pest": "^2.12.1",
- "phpunit/phpunit": "^10.3.1",
- "sebastian/environment": "^6.0.1",
- "spatie/laravel-ignition": "^2.2.0"
+ "brianium/paratest": "^7.4.8",
+ "laravel/framework": "^10.48.29",
+ "laravel/pint": "^1.21.2",
+ "laravel/sail": "^1.41.0",
+ "laravel/sanctum": "^3.3.3",
+ "laravel/tinker": "^2.10.1",
+ "nunomaduro/larastan": "^2.10.0",
+ "orchestra/testbench-core": "^8.35.0",
+ "pestphp/pest": "^2.36.0",
+ "phpunit/phpunit": "^10.5.36",
+ "sebastian/environment": "^6.1.0",
+ "spatie/laravel-ignition": "^2.9.1"
},
"type": "library",
"extra": {
@@ -6792,24 +6748,25 @@
"type": "patreon"
}
],
- "time": "2023-08-07T08:03:21+00:00"
+ "time": "2025-03-14T22:35:49+00:00"
},
{
"name": "phar-io/manifest",
- "version": "2.0.3",
+ "version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/phar-io/manifest.git",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
"shasum": ""
},
"require": {
"ext-dom": "*",
+ "ext-libxml": "*",
"ext-phar": "*",
"ext-xmlwriter": "*",
"phar-io/version": "^3.0.1",
@@ -6850,9 +6807,15 @@
"description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
"support": {
"issues": "https://github.com/phar-io/manifest/issues",
- "source": "https://github.com/phar-io/manifest/tree/2.0.3"
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
},
- "time": "2021-07-20T11:28:43+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
},
{
"name": "phar-io/version",
@@ -6905,34 +6868,107 @@
},
"time": "2022-02-21T01:04:05+00:00"
},
+ {
+ "name": "php-debugbar/php-debugbar",
+ "version": "v2.2.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-debugbar/php-debugbar.git",
+ "reference": "3146d04671f51f69ffec2a4207ac3bdcf13a9f35"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/3146d04671f51f69ffec2a4207ac3bdcf13a9f35",
+ "reference": "3146d04671f51f69ffec2a4207ac3bdcf13a9f35",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8",
+ "psr/log": "^1|^2|^3",
+ "symfony/var-dumper": "^4|^5|^6|^7"
+ },
+ "replace": {
+ "maximebf/debugbar": "self.version"
+ },
+ "require-dev": {
+ "dbrekelmans/bdi": "^1",
+ "phpunit/phpunit": "^8|^9",
+ "symfony/panther": "^1|^2.1",
+ "twig/twig": "^1.38|^2.7|^3.0"
+ },
+ "suggest": {
+ "kriswallsmith/assetic": "The best way to manage assets",
+ "monolog/monolog": "Log using Monolog",
+ "predis/predis": "Redis storage"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "DebugBar\\": "src/DebugBar/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Maxime Bouroumeau-Fuseau",
+ "email": "maxime.bouroumeau@gmail.com",
+ "homepage": "http://maximebf.com"
+ },
+ {
+ "name": "Barry vd. Heuvel",
+ "email": "barryvdh@gmail.com"
+ }
+ ],
+ "description": "Debug bar in the browser for php application",
+ "homepage": "https://github.com/php-debugbar/php-debugbar",
+ "keywords": [
+ "debug",
+ "debug bar",
+ "debugbar",
+ "dev"
+ ],
+ "support": {
+ "issues": "https://github.com/php-debugbar/php-debugbar/issues",
+ "source": "https://github.com/php-debugbar/php-debugbar/tree/v2.2.4"
+ },
+ "time": "2025-07-22T14:01:30+00:00"
+ },
{
"name": "phpunit/php-code-coverage",
- "version": "10.1.3",
+ "version": "10.1.16",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "be1fe461fdc917de2a29a452ccf2657d325b443d"
+ "reference": "7e308268858ed6baedc8704a304727d20bc07c77"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/be1fe461fdc917de2a29a452ccf2657d325b443d",
- "reference": "be1fe461fdc917de2a29a452ccf2657d325b443d",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77",
+ "reference": "7e308268858ed6baedc8704a304727d20bc07c77",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^4.15",
+ "nikic/php-parser": "^4.19.1 || ^5.1.0",
"php": ">=8.1",
- "phpunit/php-file-iterator": "^4.0",
- "phpunit/php-text-template": "^3.0",
- "sebastian/code-unit-reverse-lookup": "^3.0",
- "sebastian/complexity": "^3.0",
- "sebastian/environment": "^6.0",
- "sebastian/lines-of-code": "^2.0",
- "sebastian/version": "^4.0",
- "theseer/tokenizer": "^1.2.0"
+ "phpunit/php-file-iterator": "^4.1.0",
+ "phpunit/php-text-template": "^3.0.1",
+ "sebastian/code-unit-reverse-lookup": "^3.0.0",
+ "sebastian/complexity": "^3.2.0",
+ "sebastian/environment": "^6.1.0",
+ "sebastian/lines-of-code": "^2.0.2",
+ "sebastian/version": "^4.0.1",
+ "theseer/tokenizer": "^1.2.3"
},
"require-dev": {
"phpunit/phpunit": "^10.1"
@@ -6944,7 +6980,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "10.1-dev"
+ "dev-main": "10.1.x-dev"
}
},
"autoload": {
@@ -6973,7 +7009,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.3"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16"
},
"funding": [
{
@@ -6981,7 +7017,7 @@
"type": "github"
}
],
- "time": "2023-07-26T13:45:28+00:00"
+ "time": "2024-08-22T04:31:57+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -7109,16 +7145,16 @@
},
{
"name": "phpunit/php-text-template",
- "version": "3.0.0",
+ "version": "3.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d"
+ "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/9f3d3709577a527025f55bcf0f7ab8052c8bb37d",
- "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748",
+ "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748",
"shasum": ""
},
"require": {
@@ -7156,7 +7192,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-text-template/issues",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.0"
+ "security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1"
},
"funding": [
{
@@ -7164,7 +7201,7 @@
"type": "github"
}
],
- "time": "2023-02-03T06:56:46+00:00"
+ "time": "2023-08-31T14:07:24+00:00"
},
{
"name": "phpunit/php-timer",
@@ -7227,16 +7264,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.3.2",
+ "version": "10.5.53",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "0dafb1175c366dd274eaa9a625e914451506bcd1"
+ "reference": "32768472ebfb6969e6c7399f1c7b09009723f653"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0dafb1175c366dd274eaa9a625e914451506bcd1",
- "reference": "0dafb1175c366dd274eaa9a625e914451506bcd1",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/32768472ebfb6969e6c7399f1c7b09009723f653",
+ "reference": "32768472ebfb6969e6c7399f1c7b09009723f653",
"shasum": ""
},
"require": {
@@ -7246,26 +7283,26 @@
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.10.1",
- "phar-io/manifest": "^2.0.3",
- "phar-io/version": "^3.0.2",
+ "myclabs/deep-copy": "^1.13.4",
+ "phar-io/manifest": "^2.0.4",
+ "phar-io/version": "^3.2.1",
"php": ">=8.1",
- "phpunit/php-code-coverage": "^10.1.1",
- "phpunit/php-file-iterator": "^4.0",
- "phpunit/php-invoker": "^4.0",
- "phpunit/php-text-template": "^3.0",
- "phpunit/php-timer": "^6.0",
- "sebastian/cli-parser": "^2.0",
- "sebastian/code-unit": "^2.0",
- "sebastian/comparator": "^5.0",
- "sebastian/diff": "^5.0",
- "sebastian/environment": "^6.0",
- "sebastian/exporter": "^5.0",
- "sebastian/global-state": "^6.0.1",
- "sebastian/object-enumerator": "^5.0",
- "sebastian/recursion-context": "^5.0",
- "sebastian/type": "^4.0",
- "sebastian/version": "^4.0"
+ "phpunit/php-code-coverage": "^10.1.16",
+ "phpunit/php-file-iterator": "^4.1.0",
+ "phpunit/php-invoker": "^4.0.0",
+ "phpunit/php-text-template": "^3.0.1",
+ "phpunit/php-timer": "^6.0.0",
+ "sebastian/cli-parser": "^2.0.1",
+ "sebastian/code-unit": "^2.0.0",
+ "sebastian/comparator": "^5.0.3",
+ "sebastian/diff": "^5.1.1",
+ "sebastian/environment": "^6.1.0",
+ "sebastian/exporter": "^5.1.2",
+ "sebastian/global-state": "^6.0.2",
+ "sebastian/object-enumerator": "^5.0.0",
+ "sebastian/recursion-context": "^5.0.1",
+ "sebastian/type": "^4.0.0",
+ "sebastian/version": "^4.0.1"
},
"suggest": {
"ext-soap": "To be able to generate mocks based on WSDL files"
@@ -7276,7 +7313,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "10.3-dev"
+ "dev-main": "10.5-dev"
}
},
"autoload": {
@@ -7308,7 +7345,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.3.2"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.53"
},
"funding": [
{
@@ -7319,25 +7356,33 @@
"url": "https://github.com/sebastianbergmann",
"type": "github"
},
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
"type": "tidelift"
}
],
- "time": "2023-08-15T05:34:23+00:00"
+ "time": "2025-08-20T14:40:06+00:00"
},
{
"name": "sebastian/cli-parser",
- "version": "2.0.0",
+ "version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae"
+ "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae",
- "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084",
+ "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084",
"shasum": ""
},
"require": {
@@ -7372,7 +7417,8 @@
"homepage": "https://github.com/sebastianbergmann/cli-parser",
"support": {
"issues": "https://github.com/sebastianbergmann/cli-parser/issues",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0"
+ "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1"
},
"funding": [
{
@@ -7380,7 +7426,7 @@
"type": "github"
}
],
- "time": "2023-02-03T06:58:15+00:00"
+ "time": "2024-03-02T07:12:49+00:00"
},
{
"name": "sebastian/code-unit",
@@ -7495,16 +7541,16 @@
},
{
"name": "sebastian/comparator",
- "version": "5.0.1",
+ "version": "5.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "2db5010a484d53ebf536087a70b4a5423c102372"
+ "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372",
- "reference": "2db5010a484d53ebf536087a70b4a5423c102372",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e",
+ "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e",
"shasum": ""
},
"require": {
@@ -7515,7 +7561,7 @@
"sebastian/exporter": "^5.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.3"
+ "phpunit/phpunit": "^10.5"
},
"type": "library",
"extra": {
@@ -7560,7 +7606,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3"
},
"funding": [
{
@@ -7568,24 +7614,24 @@
"type": "github"
}
],
- "time": "2023-08-14T13:18:12+00:00"
+ "time": "2024-10-18T14:56:07+00:00"
},
{
"name": "sebastian/complexity",
- "version": "3.0.1",
+ "version": "3.2.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "c70b73893e10757af9c6a48929fa6a333b56a97a"
+ "reference": "68ff824baeae169ec9f2137158ee529584553799"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/c70b73893e10757af9c6a48929fa6a333b56a97a",
- "reference": "c70b73893e10757af9c6a48929fa6a333b56a97a",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799",
+ "reference": "68ff824baeae169ec9f2137158ee529584553799",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.10",
+ "nikic/php-parser": "^4.18 || ^5.0",
"php": ">=8.1"
},
"require-dev": {
@@ -7594,7 +7640,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.0-dev"
+ "dev-main": "3.2-dev"
}
},
"autoload": {
@@ -7618,7 +7664,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/complexity/issues",
"security": "https://github.com/sebastianbergmann/complexity/security/policy",
- "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.1"
+ "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0"
},
"funding": [
{
@@ -7626,20 +7672,20 @@
"type": "github"
}
],
- "time": "2023-08-31T09:55:53+00:00"
+ "time": "2023-12-21T08:37:17+00:00"
},
{
"name": "sebastian/diff",
- "version": "5.0.3",
+ "version": "5.1.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b"
+ "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b",
- "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e",
+ "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e",
"shasum": ""
},
"require": {
@@ -7647,12 +7693,12 @@
},
"require-dev": {
"phpunit/phpunit": "^10.0",
- "symfony/process": "^4.2 || ^5"
+ "symfony/process": "^6.4"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "5.1-dev"
}
},
"autoload": {
@@ -7685,7 +7731,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
"security": "https://github.com/sebastianbergmann/diff/security/policy",
- "source": "https://github.com/sebastianbergmann/diff/tree/5.0.3"
+ "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1"
},
"funding": [
{
@@ -7693,20 +7739,20 @@
"type": "github"
}
],
- "time": "2023-05-01T07:48:21+00:00"
+ "time": "2024-03-02T07:15:17+00:00"
},
{
"name": "sebastian/environment",
- "version": "6.0.1",
+ "version": "6.1.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951"
+ "reference": "8074dbcd93529b357029f5cc5058fd3e43666984"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951",
- "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984",
+ "reference": "8074dbcd93529b357029f5cc5058fd3e43666984",
"shasum": ""
},
"require": {
@@ -7721,7 +7767,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.0-dev"
+ "dev-main": "6.1-dev"
}
},
"autoload": {
@@ -7749,7 +7795,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
"security": "https://github.com/sebastianbergmann/environment/security/policy",
- "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1"
+ "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0"
},
"funding": [
{
@@ -7757,20 +7803,20 @@
"type": "github"
}
],
- "time": "2023-04-11T05:39:26+00:00"
+ "time": "2024-03-23T08:47:14+00:00"
},
{
"name": "sebastian/exporter",
- "version": "5.0.0",
+ "version": "5.1.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0"
+ "reference": "955288482d97c19a372d3f31006ab3f37da47adf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0",
- "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf",
+ "reference": "955288482d97c19a372d3f31006ab3f37da47adf",
"shasum": ""
},
"require": {
@@ -7784,7 +7830,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "5.1-dev"
}
},
"autoload": {
@@ -7826,7 +7872,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/5.0.0"
+ "security": "https://github.com/sebastianbergmann/exporter/security/policy",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2"
},
"funding": [
{
@@ -7834,20 +7881,20 @@
"type": "github"
}
],
- "time": "2023-02-03T07:06:49+00:00"
+ "time": "2024-03-02T07:17:12+00:00"
},
{
"name": "sebastian/global-state",
- "version": "6.0.1",
+ "version": "6.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4"
+ "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/7ea9ead78f6d380d2a667864c132c2f7b83055e4",
- "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
+ "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
"shasum": ""
},
"require": {
@@ -7881,14 +7928,14 @@
}
],
"description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "homepage": "https://www.github.com/sebastianbergmann/global-state",
"keywords": [
"global state"
],
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
"security": "https://github.com/sebastianbergmann/global-state/security/policy",
- "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.1"
+ "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2"
},
"funding": [
{
@@ -7896,24 +7943,24 @@
"type": "github"
}
],
- "time": "2023-07-19T07:19:23+00:00"
+ "time": "2024-03-02T07:19:19+00:00"
},
{
"name": "sebastian/lines-of-code",
- "version": "2.0.1",
+ "version": "2.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d"
+ "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/649e40d279e243d985aa8fb6e74dd5bb28dc185d",
- "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0",
+ "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.10",
+ "nikic/php-parser": "^4.18 || ^5.0",
"php": ">=8.1"
},
"require-dev": {
@@ -7946,7 +7993,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
"security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.1"
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2"
},
"funding": [
{
@@ -7954,7 +8001,7 @@
"type": "github"
}
],
- "time": "2023-08-31T09:25:50+00:00"
+ "time": "2023-12-21T08:38:20+00:00"
},
{
"name": "sebastian/object-enumerator",
@@ -8070,23 +8117,23 @@
},
{
"name": "sebastian/recursion-context",
- "version": "5.0.0",
+ "version": "5.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "05909fb5bc7df4c52992396d0116aed689f93712"
+ "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712",
- "reference": "05909fb5bc7df4c52992396d0116aed689f93712",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a",
+ "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a",
"shasum": ""
},
"require": {
"php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^10.5"
},
"type": "library",
"extra": {
@@ -8121,15 +8168,28 @@
"homepage": "https://github.com/sebastianbergmann/recursion-context",
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0"
+ "security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
+ "type": "tidelift"
}
],
- "time": "2023-02-03T07:05:40+00:00"
+ "time": "2025-08-10T07:50:56+00:00"
},
{
"name": "sebastian/type",
@@ -8242,26 +8302,27 @@
},
{
"name": "spatie/backtrace",
- "version": "1.5.3",
+ "version": "1.7.4",
"source": {
"type": "git",
"url": "https://github.com/spatie/backtrace.git",
- "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab"
+ "reference": "cd37a49fce7137359ac30ecc44ef3e16404cccbe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/backtrace/zipball/483f76a82964a0431aa836b6ed0edde0c248e3ab",
- "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab",
+ "url": "https://api.github.com/repos/spatie/backtrace/zipball/cd37a49fce7137359ac30ecc44ef3e16404cccbe",
+ "reference": "cd37a49fce7137359ac30ecc44ef3e16404cccbe",
"shasum": ""
},
"require": {
- "php": "^7.3|^8.0"
+ "php": "^7.3 || ^8.0"
},
"require-dev": {
"ext-json": "*",
- "phpunit/phpunit": "^9.3",
- "spatie/phpunit-snapshot-assertions": "^4.2",
- "symfony/var-dumper": "^5.1"
+ "laravel/serializable-closure": "^1.3 || ^2.0",
+ "phpunit/phpunit": "^9.3 || ^11.4.3",
+ "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6",
+ "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0"
},
"type": "library",
"autoload": {
@@ -8288,7 +8349,7 @@
"spatie"
],
"support": {
- "source": "https://github.com/spatie/backtrace/tree/1.5.3"
+ "source": "https://github.com/spatie/backtrace/tree/1.7.4"
},
"funding": [
{
@@ -8300,39 +8361,112 @@
"type": "other"
}
],
- "time": "2023-06-28T12:59:17+00:00"
+ "time": "2025-05-08T15:41:09+00:00"
+ },
+ {
+ "name": "spatie/error-solutions",
+ "version": "1.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/error-solutions.git",
+ "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/error-solutions/zipball/e495d7178ca524f2dd0fe6a1d99a1e608e1c9936",
+ "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "illuminate/broadcasting": "^10.0|^11.0|^12.0",
+ "illuminate/cache": "^10.0|^11.0|^12.0",
+ "illuminate/support": "^10.0|^11.0|^12.0",
+ "livewire/livewire": "^2.11|^3.5.20",
+ "openai-php/client": "^0.10.1",
+ "orchestra/testbench": "8.22.3|^9.0|^10.0",
+ "pestphp/pest": "^2.20|^3.0",
+ "phpstan/phpstan": "^2.1",
+ "psr/simple-cache": "^3.0",
+ "psr/simple-cache-implementation": "^3.0",
+ "spatie/ray": "^1.28",
+ "symfony/cache": "^5.4|^6.0|^7.0",
+ "symfony/process": "^5.4|^6.0|^7.0",
+ "vlucas/phpdotenv": "^5.5"
+ },
+ "suggest": {
+ "openai-php/client": "Require get solutions from OpenAI",
+ "simple-cache-implementation": "To cache solutions from OpenAI"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Spatie\\Ignition\\": "legacy/ignition",
+ "Spatie\\ErrorSolutions\\": "src",
+ "Spatie\\LaravelIgnition\\": "legacy/laravel-ignition"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ruben Van Assche",
+ "email": "ruben@spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "This is my package error-solutions",
+ "homepage": "https://github.com/spatie/error-solutions",
+ "keywords": [
+ "error-solutions",
+ "spatie"
+ ],
+ "support": {
+ "issues": "https://github.com/spatie/error-solutions/issues",
+ "source": "https://github.com/spatie/error-solutions/tree/1.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2025-02-14T12:29:50+00:00"
},
{
"name": "spatie/flare-client-php",
- "version": "1.4.2",
+ "version": "1.10.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/flare-client-php.git",
- "reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544"
+ "reference": "bf1716eb98bd689451b071548ae9e70738dce62f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5f2c6a7a0d2c1d90c12559dc7828fd942911a544",
- "reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544",
+ "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/bf1716eb98bd689451b071548ae9e70738dce62f",
+ "reference": "bf1716eb98bd689451b071548ae9e70738dce62f",
"shasum": ""
},
"require": {
- "illuminate/pipeline": "^8.0|^9.0|^10.0",
- "nesbot/carbon": "^2.62.1",
+ "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0",
"php": "^8.0",
- "spatie/backtrace": "^1.5.2",
- "symfony/http-foundation": "^5.0|^6.0",
- "symfony/mime": "^5.2|^6.0",
- "symfony/process": "^5.2|^6.0",
- "symfony/var-dumper": "^5.2|^6.0"
+ "spatie/backtrace": "^1.6.1",
+ "symfony/http-foundation": "^5.2|^6.0|^7.0",
+ "symfony/mime": "^5.2|^6.0|^7.0",
+ "symfony/process": "^5.2|^6.0|^7.0",
+ "symfony/var-dumper": "^5.2|^6.0|^7.0"
},
"require-dev": {
- "dms/phpunit-arraysubset-asserts": "^0.3.0",
- "pestphp/pest": "^1.20",
+ "dms/phpunit-arraysubset-asserts": "^0.5.0",
+ "pestphp/pest": "^1.20|^2.0",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-phpunit": "^1.0",
- "spatie/phpunit-snapshot-assertions": "^4.0"
+ "spatie/pest-plugin-snapshots": "^1.0|^2.0"
},
"type": "library",
"extra": {
@@ -8362,7 +8496,7 @@
],
"support": {
"issues": "https://github.com/spatie/flare-client-php/issues",
- "source": "https://github.com/spatie/flare-client-php/tree/1.4.2"
+ "source": "https://github.com/spatie/flare-client-php/tree/1.10.1"
},
"funding": [
{
@@ -8370,41 +8504,41 @@
"type": "github"
}
],
- "time": "2023-07-28T08:07:24+00:00"
+ "time": "2025-02-14T13:42:06+00:00"
},
{
"name": "spatie/ignition",
- "version": "1.10.1",
+ "version": "1.15.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/ignition.git",
- "reference": "d92b9a081e99261179b63a858c7a4b01541e7dd1"
+ "reference": "31f314153020aee5af3537e507fef892ffbf8c85"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/ignition/zipball/d92b9a081e99261179b63a858c7a4b01541e7dd1",
- "reference": "d92b9a081e99261179b63a858c7a4b01541e7dd1",
+ "url": "https://api.github.com/repos/spatie/ignition/zipball/31f314153020aee5af3537e507fef892ffbf8c85",
+ "reference": "31f314153020aee5af3537e507fef892ffbf8c85",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-mbstring": "*",
"php": "^8.0",
- "spatie/backtrace": "^1.5.3",
- "spatie/flare-client-php": "^1.4.0",
- "symfony/console": "^5.4|^6.0",
- "symfony/var-dumper": "^5.4|^6.0"
+ "spatie/error-solutions": "^1.0",
+ "spatie/flare-client-php": "^1.7",
+ "symfony/console": "^5.4|^6.0|^7.0",
+ "symfony/var-dumper": "^5.4|^6.0|^7.0"
},
"require-dev": {
- "illuminate/cache": "^9.52",
+ "illuminate/cache": "^9.52|^10.0|^11.0|^12.0",
"mockery/mockery": "^1.4",
- "pestphp/pest": "^1.20",
+ "pestphp/pest": "^1.20|^2.0",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-phpunit": "^1.0",
"psr/simple-cache-implementation": "*",
- "symfony/cache": "^6.0",
- "symfony/process": "^5.4|^6.0",
+ "symfony/cache": "^5.4|^6.0|^7.0",
+ "symfony/process": "^5.4|^6.0|^7.0",
"vlucas/phpdotenv": "^5.5"
},
"suggest": {
@@ -8453,42 +8587,41 @@
"type": "github"
}
],
- "time": "2023-08-21T15:06:37+00:00"
+ "time": "2025-02-21T14:31:39+00:00"
},
{
"name": "spatie/laravel-ignition",
- "version": "2.3.0",
+ "version": "2.9.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-ignition.git",
- "reference": "4ed813d16edb5a1ab0d7f4b1d116c37ee8cdf3c0"
+ "reference": "1baee07216d6748ebd3a65ba97381b051838707a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/4ed813d16edb5a1ab0d7f4b1d116c37ee8cdf3c0",
- "reference": "4ed813d16edb5a1ab0d7f4b1d116c37ee8cdf3c0",
+ "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1baee07216d6748ebd3a65ba97381b051838707a",
+ "reference": "1baee07216d6748ebd3a65ba97381b051838707a",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"ext-mbstring": "*",
- "illuminate/support": "^10.0",
+ "illuminate/support": "^10.0|^11.0|^12.0",
"php": "^8.1",
- "spatie/flare-client-php": "^1.3.5",
- "spatie/ignition": "^1.9",
- "symfony/console": "^6.2.3",
- "symfony/var-dumper": "^6.2.3"
+ "spatie/ignition": "^1.15",
+ "symfony/console": "^6.2.3|^7.0",
+ "symfony/var-dumper": "^6.2.3|^7.0"
},
"require-dev": {
- "livewire/livewire": "^2.11",
+ "livewire/livewire": "^2.11|^3.3.5",
"mockery/mockery": "^1.5.1",
- "openai-php/client": "^0.3.4",
- "orchestra/testbench": "^8.0",
- "pestphp/pest": "^1.22.3",
- "phpstan/extension-installer": "^1.2",
- "phpstan/phpstan-deprecation-rules": "^1.1.1",
- "phpstan/phpstan-phpunit": "^1.3.3",
+ "openai-php/client": "^0.8.1|^0.10",
+ "orchestra/testbench": "8.22.3|^9.0|^10.0",
+ "pestphp/pest": "^2.34|^3.7",
+ "phpstan/extension-installer": "^1.3.1",
+ "phpstan/phpstan-deprecation-rules": "^1.1.1|^2.0",
+ "phpstan/phpstan-phpunit": "^1.3.16|^2.0",
"vlucas/phpdotenv": "^5.5"
},
"suggest": {
@@ -8498,12 +8631,12 @@
"type": "library",
"extra": {
"laravel": {
- "providers": [
- "Spatie\\LaravelIgnition\\IgnitionServiceProvider"
- ],
"aliases": {
"Flare": "Spatie\\LaravelIgnition\\Facades\\Flare"
- }
+ },
+ "providers": [
+ "Spatie\\LaravelIgnition\\IgnitionServiceProvider"
+ ]
}
},
"autoload": {
@@ -8545,20 +8678,20 @@
"type": "github"
}
],
- "time": "2023-08-23T06:24:34+00:00"
+ "time": "2025-02-20T13:13:55+00:00"
},
{
"name": "symfony/yaml",
- "version": "v6.3.3",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add"
+ "reference": "742a8efc94027624b36b10ba58e23d402f961f51"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/e23292e8c07c85b971b44c1c4b87af52133e2add",
- "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/742a8efc94027624b36b10ba58e23d402f961f51",
+ "reference": "742a8efc94027624b36b10ba58e23d402f961f51",
"shasum": ""
},
"require": {
@@ -8570,7 +8703,7 @@
"symfony/console": "<5.4"
},
"require-dev": {
- "symfony/console": "^5.4|^6.0"
+ "symfony/console": "^5.4|^6.0|^7.0"
},
"bin": [
"Resources/bin/yaml-lint"
@@ -8601,7 +8734,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v6.3.3"
+ "source": "https://github.com/symfony/yaml/tree/v6.4.24"
},
"funding": [
{
@@ -8612,25 +8745,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2023-07-31T07:08:24+00:00"
+ "time": "2025-07-10T08:14:14+00:00"
},
{
"name": "theseer/tokenizer",
- "version": "1.2.1",
+ "version": "1.2.3",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
- "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
- "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
"shasum": ""
},
"require": {
@@ -8659,7 +8796,7 @@
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
"issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
},
"funding": [
{
@@ -8667,17 +8804,17 @@
"type": "github"
}
],
- "time": "2021-07-28T10:34:58+00:00"
+ "time": "2024-03-03T12:36:25+00:00"
}
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": [],
+ "stability-flags": {},
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
"php": "^8.1"
},
- "platform-dev": [],
- "plugin-api-version": "2.3.0"
+ "platform-dev": {},
+ "plugin-api-version": "2.6.0"
}
diff --git a/coverage.txt b/coverage.txt
new file mode 100644
index 0000000..44eca87
--- /dev/null
+++ b/coverage.txt
@@ -0,0 +1,7 @@
+
+
+[1;37;40mCode Coverage Report Summary:[0m
+[30;43m Classes: 74.29% (26/35) [0m
+[30;43m Methods: 86.57% (58/67) [0m
+[30;42m Lines: 93.15% (340/365) [0m
+
diff --git a/database/factories/ChatFactory.php b/database/factories/ChatFactory.php
new file mode 100644
index 0000000..c684ca1
--- /dev/null
+++ b/database/factories/ChatFactory.php
@@ -0,0 +1,51 @@
+
+ */
+class ChatFactory extends Factory
+{
+ protected $model = Chat::class;
+
+ public function definition(): array
+ {
+ return [
+ 'sender_id' => User::factory(),
+ 'receiver_id' => User::factory(),
+ 'message' => $this->faker->sentence(6),
+ 'reply_id' => null,
+ 'seen_at' => null,
+ 'message_deleted_at' => null,
+ ];
+ }
+
+ public function seen(): static
+ {
+ return $this->state(fn () => [
+ 'seen_at' => now(),
+ ]);
+ }
+
+ public function deleted(): static
+ {
+ return $this->state(fn () => [
+ 'message_deleted_at' => now(),
+ ]);
+ }
+
+ public function reply(Chat $original): static
+ {
+ return $this->state(fn () => [
+ 'reply_id' => $original->id,
+ 'sender_id' => $original->receiver_id,
+ 'receiver_id' => $original->sender_id,
+ ]);
+ }
+}
+
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
index 57ae9aa..85a9ca1 100644
--- a/database/factories/UserFactory.php
+++ b/database/factories/UserFactory.php
@@ -4,6 +4,7 @@
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
+use Illuminate\Support\Facades\Hash;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
@@ -22,7 +23,7 @@ public function definition(): array
'email' => fake()->unique()->safeEmail(),
'username' => str()->slug($name, '_', 'en'),
'email_verified_at' => now(),
- 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
+ 'password' => Hash::make('password'),
'remember_token' => Str::random(10),
'uuid' => str()->uuid(),
'last_seen_at' => now(),
@@ -34,7 +35,7 @@ public function definition(): array
*/
public function unverified(): static
{
- return $this->state(fn (array $attributes) => [
+ return $this->state(fn(array $attributes) => [
'email_verified_at' => null,
]);
}
diff --git a/database/migrations/2025_08_22_205123_add_status_to_users_table.php b/database/migrations/2025_08_22_205123_add_status_to_users_table.php
new file mode 100644
index 0000000..9ae3d6e
--- /dev/null
+++ b/database/migrations/2025_08_22_205123_add_status_to_users_table.php
@@ -0,0 +1,27 @@
+string('status')->default('offline');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::table('users', function (Blueprint $table) {
+ $table->dropColumn('status');
+ });
+ }
+};
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..73d943f
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,51 @@
+version: '3.8'
+
+services:
+ app:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ image: laravel-app
+ container_name: laravel-app
+ restart: unless-stopped
+ working_dir: /var/www
+ ports:
+ - "8000:80"
+ - "5173:5173"
+ depends_on:
+ - mysql
+ - soketi
+
+ mysql:
+ image: mysql:8.0
+ container_name: laravel-mysql
+ restart: unless-stopped
+ environment:
+ MYSQL_DATABASE: laravel_chat_app
+ MYSQL_ROOT_PASSWORD: secret
+ ports:
+ - "3306:3306"
+ volumes:
+ - dbdata:/var/lib/mysql
+
+ soketi:
+ image: quay.io/soketi/soketi:1.6-16-debian
+ container_name: soketi
+ restart: unless-stopped
+ environment:
+ SOKETI_DEBUG: '1'
+ SOKETI_METRICS_SERVER_PORT: 9601
+ SOKETI_DEFAULT_APP_ID: app-id
+ SOKETI_DEFAULT_APP_KEY: app-key
+ SOKETI_DEFAULT_APP_SECRET: app-secret
+ ports:
+ - "6001:6001"
+ - "9601:9601"
+ volumes:
+ - ./soketi.config.json:/app/soketi.config.json
+ command: ["start", "--config=/app/soketi.config.json"]
+
+volumes:
+ dbdata:
+
+
\ No newline at end of file
diff --git a/junit.xml b/junit.xml
new file mode 100644
index 0000000..bc69f42
--- /dev/null
+++ b/junit.xml
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
index 300130b..f66996a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1828,9 +1828,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001525",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz",
- "integrity": "sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==",
+ "version": "1.0.30001737",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz",
+ "integrity": "sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==",
"dev": true,
"funding": [
{
@@ -1845,7 +1845,8 @@
"type": "github",
"url": "https://github.com/sponsors/ai"
}
- ]
+ ],
+ "license": "CC-BY-4.0"
},
"node_modules/chalk": {
"version": "2.4.2",
@@ -3057,8 +3058,7 @@
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"node_modules/jsesc": {
"version": "2.5.2",
@@ -3250,7 +3250,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dev": true,
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
},
@@ -4488,7 +4487,6 @@
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
"integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
- "dev": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
diff --git a/phpunit.xml b/phpunit.xml
index f112c0c..e7b0d59 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -19,13 +19,27 @@
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/Components/MineProfileChat.jsx b/resources/js/Components/MineProfileChat.jsx
index 8cceaf2..91f7fca 100644
--- a/resources/js/Components/MineProfileChat.jsx
+++ b/resources/js/Components/MineProfileChat.jsx
@@ -1,32 +1,84 @@
-import React from 'react';
+import React, { useState } from 'react';
import ProfilePictureOnChat from "@/Components/ProfilePictureOnChat.jsx";
import { Link } from '@inertiajs/react';
+import UserMiniModal from "@/Components/ProfileModel";
export default function MineProfileChat({ auth }) {
+ const [showModal, setShowModal] = useState(false);
return (
<>
-
+
setShowModal(true)}
+ title="View profile"
+ >
+
-
- {auth.user.name}
-
+
+
+ {auth.user.name}
+
+ {auth.user.status === "online" ? (
+
+ ●Online
+
+ ) : (
+
+ ●Offline
+
+ )}
+
@{auth.user.username}
+
+
+ {/* edit profile */}
+
+
+
+
+
+
+
+
+ {showModal && (
+
setShowModal(false)} />
+ )}
>
- )
+ );
}
diff --git a/resources/js/Components/ProfileModel.jsx b/resources/js/Components/ProfileModel.jsx
new file mode 100644
index 0000000..d4ef9a3
--- /dev/null
+++ b/resources/js/Components/ProfileModel.jsx
@@ -0,0 +1,32 @@
+import React from 'react';
+import ProfilePictureOnChat from "@/Components/ProfilePictureOnChat.jsx";
+
+export default function UserMiniModal({ user, onClose }) {
+ if (!user) return null;
+
+ return (
+
+
+
+
+
+
+
+
+
+
{user.name}
+
@{user.username}
+
{user.email}
+
+ last seen at: {user.last_seen_at ? new Date(user.last_seen_at).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) : 'N/A'}
+
+ {/* Add more user info here if needed */}
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/resources/js/Components/RightSideBoxChat.jsx b/resources/js/Components/RightSideBoxChat.jsx
index 084170c..856b66f 100644
--- a/resources/js/Components/RightSideBoxChat.jsx
+++ b/resources/js/Components/RightSideBoxChat.jsx
@@ -1,75 +1,212 @@
-import clsx from 'clsx';
-import React from 'react';
-import { Link, usePage } from "@inertiajs/react";
+import clsx from "clsx";
+import React, { useState } from "react";
+import { Link, usePage, router } from "@inertiajs/react";
-export default function RightSideBoxChat({ message, isFirstMessage, replyHandleState }) {
+export default function RightSideBoxChat({
+ message,
+ isFirstMessage,
+ replyHandleState,
+}) {
const { auth } = usePage().props;
+ const [isEditing, setIsEditing] = useState(false);
+ const [editMessage, setEditMessage] = useState(message.message);
+
+ const handleEditSave = () => {
+ router.put(
+ route("chat.update", message.id),
+ { message: editMessage },
+ { onSuccess: () => setIsEditing(false) }
+ );
+ };
return (
<>
{/* Right Side Box Chat */}
-
-
+
{/* Replied Chat */}
{message.reply && !message.message_deleted_at && (
- {message.reply.sender_id === auth.user.id ? 'You' : message.reply.sender_name}
+ {message.reply.sender_id ===
+ auth.user.id
+ ? "You"
+ : message.reply.sender_name}
{!message.reply.message_deleted_at ? (
-
-
{message.reply.message}
+
+
+ {message.reply.message}
+
) : (
-
{message.reply.message}
+
+ {message.reply.message}
+
)}
)}
{/* Chat Body */}
- {!message.message_deleted_at ?
- (
{message.message}
)
- : (
{message.message}
)
- }
+ {!message.message_deleted_at ? (
+ isEditing ? (
+
+ ) : (
+
+ {message.message}
+ {new Date(message.updated_at).getTime() !==
+ new Date(
+ message.created_at
+ ).getTime() && (
+
+ (edited)
+
+ )}
+
+ )
+ ) : (
+
+ {message.message}
+
+ )}
{/* Chat Timestamp */}
- {!message.message_deleted_at && (
+ {!message.message_deleted_at && !isEditing && (
{message.sent_at}
-
-
+
+
)}
- {!message.message_deleted_at && (
+ {!message.message_deleted_at && !isEditing && (
-
replyHandleState(message)}>
-
-
-
+ replyHandleState(message)}
+ >
+
+
+
+
+
+
+ {/* Edit Button */}
+ setIsEditing(true)}
+ >
+
+
-
-
-
+
+
+
+
)}
- {isFirstMessage &&
}
+ {isFirstMessage && (
+
+ )}
>
- )
+ );
}
diff --git a/resources/views/app.blade.php b/resources/views/app.blade.php
index 0378567..5891b37 100644
--- a/resources/views/app.blade.php
+++ b/resources/views/app.blade.php
@@ -12,8 +12,13 @@
@routes
- @viteReactRefresh
- @vite(['resources/js/app.jsx', "resources/js/Pages/{$page['component']}.jsx"])
+ @env('local')
+
+ @viteReactRefresh
+ @vite(['resources/js/app.jsx', "resources/js/Pages/{$page['component']}.jsx"])
+ @else
+ @vite('resources/js/app.jsx')
+ @endenv
@inertiaHead
diff --git a/routes/web.php b/routes/web.php
index 20d8618..e431466 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -24,6 +24,9 @@
'phpVersion' => PHP_VERSION,
]);
});
+Route::get('/env-check', function () {
+ return env('APP_KEY');
+});
Route::get('/dashboard', function () {
return Inertia::render('Dashboard');
@@ -37,8 +40,9 @@
Route::get('/chat', [\App\Http\Controllers\ChatController::class, 'index'])->name('chat.index');
Route::get('/chat/{user:uuid}', [\App\Http\Controllers\ChatController::class, 'show'])->name('chat.show');
Route::post('/chat/{user:uuid}', [\App\Http\Controllers\ChatController::class, 'chat'])->name('chat.store');
+ Route::put('/chat/{chat}', [\App\Http\Controllers\ChatController::class, 'update'])->name('chat.update');
Route::delete('/chat/delete/{chat}', [\App\Http\Controllers\ChatController::class, 'destroy'])->name('chat.destroy');
});
-require __DIR__.'/auth.php';
+require __DIR__ . '/auth.php';
diff --git a/setup.bat b/setup.bat
new file mode 100644
index 0000000..29ab89b
--- /dev/null
+++ b/setup.bat
@@ -0,0 +1,32 @@
+@echo off
+setlocal
+
+choco -v >nul 2>&1
+IF %ERRORLEVEL% NEQ 0 (
+ echo Chocolatey not found. Installing Chocolatey...
+ powershell -NoProfile -ExecutionPolicy Bypass -Command "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))"
+) ELSE (
+ echo Chocolatey already installed!
+)
+
+where make >nul 2>&1
+IF %ERRORLEVEL% NEQ 0 (
+ echo Installing make...
+ choco install make -y
+) ELSE (
+ echo make already installed!
+)
+
+where zip >nul 2>&1
+IF %ERRORLEVEL% NEQ 0 (
+ echo Installing zip...
+ choco install zip -y
+) ELSE (
+ echo zip already installed!
+)
+
+echo Running make build...
+make build
+
+echo Setup and build completed!
+pause
diff --git a/storage/test-reports/junit.xml b/storage/test-reports/junit.xml
new file mode 100644
index 0000000..52d93b4
--- /dev/null
+++ b/storage/test-reports/junit.xml
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/Feature/Auth/AuthenticatedSessionControllerTest.php b/tests/Feature/Auth/AuthenticatedSessionControllerTest.php
new file mode 100644
index 0000000..bf9c2cf
--- /dev/null
+++ b/tests/Feature/Auth/AuthenticatedSessionControllerTest.php
@@ -0,0 +1,41 @@
+create([
+ 'status' => 'online',
+ 'last_seen_at' => null,
+ ]);
+
+ // Seed a session value to ensure session invalidation occurs
+ $this->withSession(['foo' => 'bar']);
+
+ $response = $this->actingAs($user)
+ ->post(route('logout'));
+
+ $response->assertRedirect('/');
+
+ // User should be logged out
+ $this->assertGuest('web');
+
+ // User record should be updated
+ $user->refresh();
+ $this->assertSame('offline', $user->status);
+ $this->assertNotNull($user->last_seen_at);
+ $this->assertTrue($user->last_seen_at->isSameSecond($now));
+ }
+}
diff --git a/tests/Feature/Auth/EmailVerificationNotificationControllerTest.php b/tests/Feature/Auth/EmailVerificationNotificationControllerTest.php
new file mode 100644
index 0000000..c93f6b9
--- /dev/null
+++ b/tests/Feature/Auth/EmailVerificationNotificationControllerTest.php
@@ -0,0 +1,45 @@
+create([
+ 'email_verified_at' => null,
+ ]);
+
+ $response = $this->actingAs($user)
+ ->post(route('verification.send'));
+
+ $response->assertRedirect();
+ $response->assertSessionHas('status', 'verification-link-sent');
+
+ Notification::assertSentTo($user, VerifyEmail::class);
+ }
+
+ public function test_verified_user_is_redirected_to_home_without_sending(): void
+ {
+ Notification::fake();
+
+ $user = User::factory()->create(); // verified by default in factory
+
+ $response = $this->actingAs($user)
+ ->post(route('verification.send'));
+
+ $response->assertRedirect(RouteServiceProvider::HOME);
+ Notification::assertNothingSent();
+ }
+}
diff --git a/tests/Feature/Auth/NewPasswordControllerTest.php b/tests/Feature/Auth/NewPasswordControllerTest.php
new file mode 100644
index 0000000..ba33ec5
--- /dev/null
+++ b/tests/Feature/Auth/NewPasswordControllerTest.php
@@ -0,0 +1,93 @@
+get(route('password.reset', ['token' => 'token-xyz', 'email' => 'user@example.com']));
+
+ $response->assertOk();
+ $response->assertInertia(fn (Assert $page) => $page
+ ->component('Auth/ResetPassword')
+ ->where('email', 'user@example.com')
+ ->where('token', 'token-xyz')
+ );
+ }
+
+ public function test_store_resets_password_and_redirects_on_success(): void
+ {
+ Event::fake([PasswordReset::class]);
+
+ $user = User::factory()->create([
+ 'email' => 'jane@example.com',
+ 'password' => Hash::make('old-password'),
+ ]);
+
+ $oldRemember = $user->remember_token;
+
+ Password::shouldReceive('reset')
+ ->once()
+ ->andReturnUsing(function ($credentials, $closure) use ($user) {
+ // Ensure controller passes through expected payload
+ \PHPUnit\Framework\Assert::assertSame('jane@example.com', $credentials['email']);
+ \PHPUnit\Framework\Assert::assertSame('new-password', $credentials['password']);
+ \PHPUnit\Framework\Assert::assertSame('new-password', $credentials['password_confirmation']);
+ \PHPUnit\Framework\Assert::assertSame('token-123', $credentials['token']);
+
+ // Simulate broker invoking the closure with our user
+ $closure($user);
+ return Password::PASSWORD_RESET;
+ });
+
+ $response = $this->post(route('password.store'), [
+ 'email' => 'jane@example.com',
+ 'password' => 'new-password',
+ 'password_confirmation' => 'new-password',
+ 'token' => 'token-123',
+ ]);
+
+ $response->assertRedirect(route('login'));
+ $response->assertSessionHas('status', trans(Password::PASSWORD_RESET));
+
+ $user->refresh();
+ $this->assertTrue(Hash::check('new-password', $user->password));
+ $this->assertNotNull($user->remember_token);
+ $this->assertNotSame($oldRemember, $user->remember_token);
+
+ Event::assertDispatched(PasswordReset::class, function ($event) use ($user) {
+ return $event->user->is($user);
+ });
+ }
+
+ public function test_store_returns_validation_error_when_reset_fails(): void
+ {
+ Password::shouldReceive('reset')
+ ->once()
+ ->andReturn(Password::INVALID_TOKEN);
+
+ $response = $this->from('/reset-password/token-123')
+ ->post(route('password.store'), [
+ 'email' => 'john@example.com',
+ 'password' => 'new-password',
+ 'password_confirmation' => 'new-password',
+ 'token' => 'token-123',
+ ]);
+
+ // Redirect back with validation error on email
+ $response->assertRedirect('/reset-password/token-123');
+ $response->assertSessionHasErrors('email');
+ }
+}
diff --git a/tests/Feature/Auth/RegistrationTest.php b/tests/Feature/Auth/RegistrationTest.php
index 30829b1..341c5a6 100644
--- a/tests/Feature/Auth/RegistrationTest.php
+++ b/tests/Feature/Auth/RegistrationTest.php
@@ -5,6 +5,7 @@
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
+use App\Models\User;
class RegistrationTest extends TestCase
{
@@ -21,12 +22,15 @@ public function test_new_users_can_register(): void
{
$response = $this->post('/register', [
'name' => 'Test User',
+ 'username' => 'testuser',
'email' => 'test@example.com',
'password' => 'password',
'password_confirmation' => 'password',
]);
- $this->assertAuthenticated();
+ $user = User::where('email', 'test@example.com')->first();
+
+ $this->assertAuthenticatedAs($user);
$response->assertRedirect(RouteServiceProvider::HOME);
}
}
diff --git a/tests/Feature/ChatControllerTest.php b/tests/Feature/ChatControllerTest.php
new file mode 100644
index 0000000..1c04601
--- /dev/null
+++ b/tests/Feature/ChatControllerTest.php
@@ -0,0 +1,217 @@
+ 'null']);
+ }
+
+ public function test_guests_are_redirected_from_chat_routes(): void
+ {
+ $user = User::factory()->create();
+ $message = Chat::factory()->create();
+
+ $this->get(route('chat.index'))
+ ->assertRedirect(route('login'));
+
+ $this->get(route('chat.show', ['user' => $user->uuid]))
+ ->assertRedirect(route('login'));
+
+ $this->post(route('chat.store', ['user' => $user->uuid]), ['message' => 'hello'])
+ ->assertRedirect(route('login'));
+
+ $this->put(route('chat.update', ['chat' => $message->id]), ['message' => 'updated'])
+ ->assertRedirect(route('login'));
+
+ $this->delete(route('chat.destroy', ['chat' => $message->id]))
+ ->assertRedirect(route('login'));
+ }
+
+ public function test_index_shows_users_list_in_inertia(): void
+ {
+ $me = User::factory()->create();
+ $other = User::factory()->create();
+
+ // Ensure there is conversation context so the user appears in the list
+ Chat::factory()->create(['sender_id' => $me->id, 'receiver_id' => $other->id]);
+ Chat::factory()->create(['sender_id' => $other->id, 'receiver_id' => $me->id]);
+
+ $response = $this->actingAs($me)->get(route('chat.index'));
+
+ $response->assertOk();
+ $response->assertInertia(fn (Assert $page) => $page
+ ->component('Chat/Index')
+ ->has('users')
+ );
+ }
+
+ public function test_show_redirects_when_chat_with_self(): void
+ {
+ $me = User::factory()->create();
+
+ $this->actingAs($me)
+ ->get(route('chat.show', ['user' => $me->uuid]))
+ ->assertRedirect(route('chat.index'));
+ }
+
+ public function test_show_marks_unseen_messages_as_seen_and_dispatches_read_event(): void
+ {
+ Event::fake([ReadMessageEvent::class]);
+
+ $me = User::factory()->create();
+ $other = User::factory()->create();
+
+ // Unseen messages from other -> me
+ $m1 = Chat::factory()->create(['sender_id' => $other->id, 'receiver_id' => $me->id, 'seen_at' => null]);
+ $m2 = Chat::factory()->create(['sender_id' => $other->id, 'receiver_id' => $me->id, 'seen_at' => null]);
+ // Also some messages from me -> other
+ Chat::factory()->create(['sender_id' => $me->id, 'receiver_id' => $other->id, 'seen_at' => null]);
+
+ $response = $this->actingAs($me)->get(route('chat.show', ['user' => $other->uuid]));
+ $response->assertOk();
+
+ $this->assertNotNull($m1->fresh()->seen_at);
+ $this->assertNotNull($m2->fresh()->seen_at);
+
+ Event::assertDispatched(ReadMessageEvent::class);
+
+ $response->assertInertia(fn (Assert $page) => $page
+ ->component('Chat/Show')
+ ->has('users')
+ ->has('chat_with')
+ ->has('messages')
+ );
+ }
+
+ public function test_store_creates_message_and_broadcasts_event(): void
+ {
+ Event::fake([NewMessageEvent::class]);
+
+ $me = User::factory()->create();
+ $other = User::factory()->create();
+
+ $response = $this->actingAs($me)
+ ->post(route('chat.store', ['user' => $other->uuid]), [
+ 'message' => 'Hello from test',
+ ]);
+
+ $response->assertRedirect();
+
+ $this->assertDatabaseHas('chats', [
+ 'sender_id' => $me->id,
+ 'receiver_id' => $other->id,
+ 'message' => 'Hello from test',
+ ]);
+
+ Event::assertDispatched(NewMessageEvent::class);
+ }
+
+ public function test_update_only_sender_can_update_and_broadcasts_event(): void
+ {
+ Event::fake([NewMessageEvent::class]);
+
+ $me = User::factory()->create();
+ $other = User::factory()->create();
+ $chat = Chat::factory()->create(['sender_id' => $me->id, 'receiver_id' => $other->id, 'message' => 'Old']);
+
+ $response = $this->actingAs($me)
+ ->put(route('chat.update', ['chat' => $chat->id]), [
+ 'message' => 'Updated Message',
+ ]);
+
+ $response->assertRedirect();
+ $this->assertSame('Updated Message', $chat->fresh()->message);
+
+ Event::assertDispatched(NewMessageEvent::class);
+ }
+
+ public function test_update_forbidden_for_non_sender(): void
+ {
+ Event::fake([NewMessageEvent::class]);
+
+ $me = User::factory()->create();
+ $other = User::factory()->create();
+ $chat = Chat::factory()->create(['sender_id' => $other->id, 'receiver_id' => $me->id, 'message' => 'Original']);
+
+ $response = $this->actingAs($me)
+ ->put(route('chat.update', ['chat' => $chat->id]), [
+ 'message' => 'Hacked',
+ ]);
+
+ $response->assertStatus(403);
+ $this->assertSame('Original', $chat->fresh()->message);
+ Event::assertNotDispatched(NewMessageEvent::class);
+ }
+
+ public function test_destroy_soft_deletes_and_broadcasts_event(): void
+ {
+ Event::fake([NewMessageEvent::class]);
+
+ $me = User::factory()->create();
+ $other = User::factory()->create();
+ $chat = Chat::factory()->create(['sender_id' => $me->id, 'receiver_id' => $other->id]);
+
+ $response = $this->actingAs($me)
+ ->delete(route('chat.destroy', ['chat' => $chat->id]));
+
+ $response->assertRedirect();
+ $this->assertNotNull($chat->fresh()->message_deleted_at);
+ Event::assertDispatched(NewMessageEvent::class);
+ }
+
+ public function test_destroy_forbidden_for_non_sender(): void
+ {
+ Event::fake([NewMessageEvent::class]);
+
+ $me = User::factory()->create();
+ $other = User::factory()->create();
+ $chat = Chat::factory()->create(['sender_id' => $other->id, 'receiver_id' => $me->id]);
+
+ $response = $this->actingAs($me)
+ ->delete(route('chat.destroy', ['chat' => $chat->id]));
+
+ $response->assertStatus(403);
+ $this->assertNull($chat->fresh()->message_deleted_at);
+ Event::assertNotDispatched(NewMessageEvent::class);
+ }
+
+ public function test_show_inertia_contains_grouped_messages_structure(): void
+ {
+ $me = User::factory()->create();
+ $other = User::factory()->create();
+
+ // Create a few messages to ensure the grouping structure exists
+ Chat::factory()->create(['sender_id' => $me->id, 'receiver_id' => $other->id]);
+ Chat::factory()->create(['sender_id' => $other->id, 'receiver_id' => $me->id]);
+
+ $response = $this->actingAs($me)
+ ->get(route('chat.show', ['user' => $other->uuid]));
+
+ $response->assertOk();
+ $response->assertInertia(fn (Assert $page) => $page
+ ->component('Chat/Show')
+ ->has('messages')
+ ->has('messages.0', fn (Assert $group) => $group
+ ->has('date')
+ ->has('messages')
+ )
+ );
+ }
+}
+
diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php
deleted file mode 100644
index 8364a84..0000000
--- a/tests/Feature/ExampleTest.php
+++ /dev/null
@@ -1,19 +0,0 @@
-get('/');
-
- $response->assertStatus(200);
- }
-}
diff --git a/tests/Feature/ProfileTest.php b/tests/Feature/ProfileTest.php
index 49886c3..e331963 100644
--- a/tests/Feature/ProfileTest.php
+++ b/tests/Feature/ProfileTest.php
@@ -29,7 +29,7 @@ public function test_profile_information_can_be_updated(): void
->actingAs($user)
->patch('/profile', [
'name' => 'Test User',
- 'email' => 'test@example.com',
+ 'email' => 'test123456@example.com',
]);
$response
@@ -39,7 +39,7 @@ public function test_profile_information_can_be_updated(): void
$user->refresh();
$this->assertSame('Test User', $user->name);
- $this->assertSame('test@example.com', $user->email);
+ $this->assertSame('test123456@example.com', $user->email);
$this->assertNull($user->email_verified_at);
}
diff --git a/tests/Feature/UserControllerTest.php b/tests/Feature/UserControllerTest.php
new file mode 100644
index 0000000..e26761f
--- /dev/null
+++ b/tests/Feature/UserControllerTest.php
@@ -0,0 +1,72 @@
+ 'database']);
+ }
+
+ public function test_search_returns_matches_by_name_and_username(): void
+ {
+ // Users
+ $alice = User::factory()->create(['name' => 'Alice Wonder', 'username' => 'alice_wonder']);
+ $bob = User::factory()->create(['name' => 'Bob Builder', 'username' => 'bob_builder']);
+ $carol = User::factory()->create(['name' => 'Carol Danvers', 'username' => 'carol_d']);
+
+ // Search by partial name (case-insensitive)
+ $res1 = $this->getJson('/api/users/search?q=ali')
+ ->assertOk()
+ ->assertJsonPath('query', 'ali')
+ ->json();
+
+ $ids1 = collect($res1['data'])->pluck('id');
+ $this->assertTrue($ids1->contains($alice->id));
+ $this->assertFalse($ids1->contains($bob->id));
+
+ // Search by partial username
+ $res2 = $this->getJson('/api/users/search?q=builder')
+ ->assertOk()
+ ->assertJsonPath('query', 'builder')
+ ->json();
+
+ $ids2 = collect($res2['data'])->pluck('id');
+ $this->assertTrue($ids2->contains($bob->id));
+ $this->assertFalse($ids2->contains($carol->id));
+ }
+
+ public function test_search_returns_empty_when_no_matches(): void
+ {
+ User::factory()->count(3)->create();
+
+ $this->getJson('/api/users/search?q=nomatchkeyword')
+ ->assertOk()
+ ->assertJsonPath('query', 'nomatchkeyword')
+ ->assertJson(fn ($json) => $json->whereType('data', 'array')->etc())
+ ->assertJsonCount(0, 'data');
+ }
+
+ public function test_search_works_with_no_query_parameter(): void
+ {
+ User::factory()->count(2)->create();
+
+ $this->getJson('/api/users/search')
+ ->assertOk()
+ ->assertJson(fn ($json) => $json
+ ->where('query', null)
+ ->whereType('data', 'array')
+ ->etc()
+ );
+ }
+}
+
diff --git a/tests/TestCase.php b/tests/TestCase.php
index 2932d4a..bda6ee4 100644
--- a/tests/TestCase.php
+++ b/tests/TestCase.php
@@ -3,8 +3,17 @@
namespace Tests;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
+use Illuminate\Support\Facades\Notification;
abstract class TestCase extends BaseTestCase
{
use CreatesApplication;
+
+ protected function setUp(): void
+ {
+ parent::setUp();
+
+ // Fake notifications to prevent real email sending
+ Notification::fake();
+ }
}
diff --git a/tests/Unit/ChatModelTest.php b/tests/Unit/ChatModelTest.php
new file mode 100644
index 0000000..ee4b95d
--- /dev/null
+++ b/tests/Unit/ChatModelTest.php
@@ -0,0 +1,58 @@
+assertSame([
+ 'sender_id', 'receiver_id', 'message', 'reply_id', 'seen_at', 'message_deleted_at'
+ ], $chat->getFillable());
+
+ $created = Chat::factory()->create([
+ 'seen_at' => '2024-01-01 10:00:00',
+ 'message_deleted_at' => '2024-01-01 11:00:00',
+ ]);
+ $this->assertInstanceOf(\Carbon\Carbon::class, $created->seen_at);
+ $this->assertInstanceOf(\Carbon\Carbon::class, $created->message_deleted_at);
+ }
+
+ /** @test */
+ public function relationships_sender_receiver_user_and_reply_work()
+ {
+ $sender = User::factory()->create();
+ $receiver = User::factory()->create();
+
+ $chat = Chat::factory()->create([
+ 'sender_id' => $sender->id,
+ 'receiver_id' => $receiver->id,
+ ]);
+
+ $this->assertTrue($chat->sender->is($sender));
+ $this->assertTrue($chat->receiver->is($receiver));
+ $this->assertTrue($chat->user->is($sender));
+
+ $reply = Chat::factory()->reply($chat)->create();
+ $this->assertEquals($chat->id, $reply->reply->id);
+ }
+
+ /** @test */
+ public function factory_states_seen_and_deleted_work()
+ {
+ $seen = Chat::factory()->seen()->create();
+ $this->assertNotNull($seen->seen_at);
+
+ $deleted = Chat::factory()->deleted()->create();
+ $this->assertNotNull($deleted->message_deleted_at);
+ }
+}
diff --git a/tests/Unit/ChatRequestTest.php b/tests/Unit/ChatRequestTest.php
new file mode 100644
index 0000000..00cf346
--- /dev/null
+++ b/tests/Unit/ChatRequestTest.php
@@ -0,0 +1,106 @@
+ ''], $request->rules());
+
+ $this->assertFalse($validator->passes());
+ $this->assertArrayHasKey('message', $validator->errors()->toArray());
+ }
+
+ /** @test */
+ public function message_must_be_string()
+ {
+ $request = new ChatRequest();
+ $validator = Validator::make(['message' => 123], $request->rules());
+
+ $this->assertFalse($validator->passes());
+ $this->assertArrayHasKey('message', $validator->errors()->toArray());
+ }
+
+ /** @test */
+ public function valid_message_passes_validation()
+ {
+ $request = new ChatRequest();
+ $validator = Validator::make(['message' => 'Valid message'], $request->rules());
+
+ $this->assertTrue($validator->passes());
+ }
+
+ /** @test */
+ public function reply_id_is_optional()
+ {
+ $request = new ChatRequest();
+ $validator = Validator::make(['message' => 'Valid message'], $request->rules());
+
+ $this->assertTrue($validator->passes());
+ }
+
+ /** @test */
+ public function reply_id_must_be_integer()
+ {
+ $request = new ChatRequest();
+ $validator = Validator::make([
+ 'message' => 'Valid message',
+ 'reply_id' => 'not-integer'
+ ], $request->rules());
+
+ $this->assertFalse($validator->passes());
+ $this->assertArrayHasKey('reply_id', $validator->errors()->toArray());
+ }
+
+ /** @test */
+ public function reply_id_must_exist_in_chats_table()
+ {
+ $request = new ChatRequest();
+ $validator = Validator::make([
+ 'message' => 'Valid message',
+ 'reply_id' => 99999
+ ], $request->rules());
+
+ $this->assertFalse($validator->passes());
+ $this->assertArrayHasKey('reply_id', $validator->errors()->toArray());
+ }
+
+ /** @test */
+ public function valid_reply_id_passes_validation()
+ {
+ $sender = User::factory()->create();
+ $receiver = User::factory()->create();
+
+ $chat = Chat::factory()->create([
+ 'sender_id' => $sender->id,
+ 'receiver_id' => $receiver->id,
+ ]);
+
+ $request = new ChatRequest();
+ $validator = Validator::make([
+ 'message' => 'Valid message',
+ 'reply_id' => $chat->id
+ ], $request->rules());
+
+ $this->assertTrue($validator->passes());
+ }
+
+ /** @test */
+ public function authorize_returns_true()
+ {
+ $request = new ChatRequest();
+ $this->assertTrue($request->authorize());
+ }
+}
diff --git a/tests/Unit/ExampleTest.php b/tests/Unit/ExampleTest.php
deleted file mode 100644
index 5773b0c..0000000
--- a/tests/Unit/ExampleTest.php
+++ /dev/null
@@ -1,16 +0,0 @@
-assertTrue(true);
- }
-}
diff --git a/tests/Unit/HelperTest.php b/tests/Unit/HelperTest.php
new file mode 100644
index 0000000..45c3e43
--- /dev/null
+++ b/tests/Unit/HelperTest.php
@@ -0,0 +1,119 @@
+subSeconds(3);
+
+ $status = Helper::userLastActivityStatus($timestamp);
+
+ $this->assertEquals('Online', $status);
+ }
+
+ /** @test */
+ public function user_last_activity_status_returns_online_for_current_time()
+ {
+ $timestamp = Carbon::now();
+
+ $status = Helper::userLastActivityStatus($timestamp);
+
+ $this->assertEquals('Online', $status);
+ }
+
+ /** @test */
+ public function user_last_activity_status_returns_today_format_for_today()
+ {
+ $timestamp = Carbon::now()->subHours(2);
+
+ $status = Helper::userLastActivityStatus($timestamp);
+
+ $expected = "Last seen today at {$timestamp->format('H:i')}";
+ $this->assertEquals($expected, $status);
+ }
+
+ /** @test */
+ public function user_last_activity_status_returns_yesterday_format_for_yesterday()
+ {
+ $timestamp = Carbon::yesterday()->setHour(14)->setMinute(30);
+
+ $status = Helper::userLastActivityStatus($timestamp);
+
+ $expected = "Last seen yesterday at {$timestamp->format('H:i')}";
+ $this->assertEquals($expected, $status);
+ }
+
+ /** @test */
+ public function user_last_activity_status_returns_full_date_format_for_older_dates()
+ {
+ $timestamp = Carbon::now()->subDays(5)->setHour(10)->setMinute(15);
+
+ $status = Helper::userLastActivityStatus($timestamp);
+
+ $expected = "Last seen at {$timestamp->format('d/m/Y H:i')}";
+ $this->assertEquals($expected, $status);
+ }
+
+ /** @test */
+ public function user_last_activity_status_returns_null_for_null_timestamp()
+ {
+ $status = Helper::userLastActivityStatus(null);
+
+ // When timestamp is null, the function returns the lastSeenFormat which evaluates to "Last seen at "
+ $this->assertEquals('Last seen at ', $status);
+ }
+
+ /** @test */
+ public function user_last_activity_status_boundary_test_at_five_seconds()
+ {
+ $timestamp = Carbon::now()->subSeconds(5);
+
+ $status = Helper::userLastActivityStatus($timestamp);
+
+ // At exactly 5 seconds, should be "Last seen today at..."
+ $expected = "Last seen today at {$timestamp->format('H:i')}";
+ $this->assertEquals($expected, $status);
+ }
+
+ /** @test */
+ public function user_last_activity_status_boundary_test_at_six_seconds()
+ {
+ $timestamp = Carbon::now()->subSeconds(6);
+
+ $status = Helper::userLastActivityStatus($timestamp);
+
+ // At 6 seconds, should be "Last seen today at..."
+ $expected = "Last seen today at {$timestamp->format('H:i')}";
+ $this->assertEquals($expected, $status);
+ }
+
+ /** @test */
+ public function user_last_activity_status_boundary_test_at_four_seconds()
+ {
+ $timestamp = Carbon::now()->subSeconds(4);
+
+ $status = Helper::userLastActivityStatus($timestamp);
+
+ // At 4 seconds, should be "Online"
+ $this->assertEquals('Online', $status);
+ }
+
+ /** @test */
+ public function user_last_activity_status_handles_specific_date_formats()
+ {
+ // Test specific date format
+ $timestamp = Carbon::createFromFormat('Y-m-d H:i:s', '2023-01-15 14:30:45');
+
+ $status = Helper::userLastActivityStatus($timestamp);
+
+ $expected = "Last seen at 15/01/2023 14:30";
+ $this->assertEquals($expected, $status);
+ }
+}
diff --git a/tests/Unit/NewMessageEventTest.php b/tests/Unit/NewMessageEventTest.php
new file mode 100644
index 0000000..506aabb
--- /dev/null
+++ b/tests/Unit/NewMessageEventTest.php
@@ -0,0 +1,76 @@
+create();
+ $event = new NewMessageEvent($message);
+
+ $this->assertEquals($message, $event->message);
+ }
+
+ /** @test */
+ public function new_message_event_broadcasts_on_private_channel()
+ {
+ $receiver = User::factory()->create(['uuid' => 'test-uuid']);
+ $message = Chat::factory()->create(['receiver_id' => $receiver->id]);
+ $message->load('receiver');
+
+ $event = new NewMessageEvent($message);
+ $channels = $event->broadcastOn();
+
+ $this->assertCount(1, $channels);
+ $this->assertInstanceOf(PrivateChannel::class, $channels[0]);
+ // Private channels are prefixed with "private-" by Laravel
+ $this->assertEquals('private-message.test-uuid', $channels[0]->name);
+ }
+
+ /** @test */
+ public function new_message_event_implements_should_broadcast_now()
+ {
+ $message = Chat::factory()->create();
+ $event = new NewMessageEvent($message);
+
+ $this->assertInstanceOf(\Illuminate\Contracts\Broadcasting\ShouldBroadcastNow::class, $event);
+ }
+
+ /** @test */
+ public function new_message_event_uses_dispatchable_trait()
+ {
+ $reflection = new \ReflectionClass(NewMessageEvent::class);
+ $traits = $reflection->getTraitNames();
+
+ $this->assertContains('Illuminate\Foundation\Events\Dispatchable', $traits);
+ }
+
+ /** @test */
+ public function new_message_event_uses_interacts_with_sockets_trait()
+ {
+ $reflection = new \ReflectionClass(NewMessageEvent::class);
+ $traits = $reflection->getTraitNames();
+
+ $this->assertContains('Illuminate\Broadcasting\InteractsWithSockets', $traits);
+ }
+
+ /** @test */
+ public function new_message_event_uses_serializes_models_trait()
+ {
+ $reflection = new \ReflectionClass(NewMessageEvent::class);
+ $traits = $reflection->getTraitNames();
+
+ $this->assertContains('Illuminate\Queue\SerializesModels', $traits);
+ }
+}
diff --git a/tests/Unit/ReadMessageEventTest.php b/tests/Unit/ReadMessageEventTest.php
new file mode 100644
index 0000000..7f73f8e
--- /dev/null
+++ b/tests/Unit/ReadMessageEventTest.php
@@ -0,0 +1,76 @@
+create();
+ $event = new ReadMessageEvent($message);
+
+ $this->assertEquals($message, $event->message);
+ }
+
+ /** @test */
+ public function read_message_event_broadcasts_on_private_channel()
+ {
+ $sender = User::factory()->create(['uuid' => 'sender-uuid']);
+ $message = Chat::factory()->create(['sender_id' => $sender->id]);
+ $message->load('sender');
+
+ $event = new ReadMessageEvent($message);
+ $channels = $event->broadcastOn();
+
+ $this->assertCount(1, $channels);
+ $this->assertInstanceOf(PrivateChannel::class, $channels[0]);
+ // Private channels are prefixed with "private-" by Laravel
+ $this->assertEquals('private-message.sender-uuid', $channels[0]->name);
+ }
+
+ /** @test */
+ public function read_message_event_implements_should_broadcast_now()
+ {
+ $message = Chat::factory()->create();
+ $event = new ReadMessageEvent($message);
+
+ $this->assertInstanceOf(\Illuminate\Contracts\Broadcasting\ShouldBroadcastNow::class, $event);
+ }
+
+ /** @test */
+ public function read_message_event_uses_dispatchable_trait()
+ {
+ $reflection = new \ReflectionClass(ReadMessageEvent::class);
+ $traits = $reflection->getTraitNames();
+
+ $this->assertContains('Illuminate\Foundation\Events\Dispatchable', $traits);
+ }
+
+ /** @test */
+ public function read_message_event_uses_interacts_with_sockets_trait()
+ {
+ $reflection = new \ReflectionClass(ReadMessageEvent::class);
+ $traits = $reflection->getTraitNames();
+
+ $this->assertContains('Illuminate\Broadcasting\InteractsWithSockets', $traits);
+ }
+
+ /** @test */
+ public function read_message_event_uses_serializes_models_trait()
+ {
+ $reflection = new \ReflectionClass(ReadMessageEvent::class);
+ $traits = $reflection->getTraitNames();
+
+ $this->assertContains('Illuminate\Queue\SerializesModels', $traits);
+ }
+}
diff --git a/tests/Unit/UserModelTest.php b/tests/Unit/UserModelTest.php
new file mode 100644
index 0000000..c34749c
--- /dev/null
+++ b/tests/Unit/UserModelTest.php
@@ -0,0 +1,60 @@
+create();
+ $other = User::factory()->create();
+
+ $recv1 = Chat::factory()->create(['sender_id' => $other->id, 'receiver_id' => $user->id]);
+ $recv2 = Chat::factory()->create(['sender_id' => $other->id, 'receiver_id' => $user->id]);
+
+ $send1 = Chat::factory()->create(['sender_id' => $user->id, 'receiver_id' => $other->id]);
+ $send2 = Chat::factory()->create(['sender_id' => $user->id, 'receiver_id' => $other->id]);
+
+ $this->assertEquals($recv2->id, $user->receiveMessages->first()->id);
+ $this->assertEquals($recv1->id, $user->receiveMessages->last()->id);
+
+ $this->assertEquals($send2->id, $user->sendMessages->first()->id);
+ $this->assertEquals($send1->id, $user->sendMessages->last()->id);
+
+ $this->assertTrue($user->messages->contains('id', $send1->id));
+ }
+
+ /** @test */
+ public function fillable_hidden_casts_hashing_and_searchable_are_correct()
+ {
+ $user = new User();
+ $this->assertSame([
+ 'name','username','email','password','uuid','last_seen_at','status'
+ ], $user->getFillable());
+
+ $this->assertSame(['password','remember_token'], $user->getHidden());
+
+ $created = User::factory()->create([
+ 'email_verified_at' => '2024-01-01 00:00:00',
+ 'last_seen_at' => '2024-01-01 00:10:00',
+ 'password' => 'plain-text',
+ ]);
+ $this->assertInstanceOf(\Carbon\Carbon::class, $created->email_verified_at);
+ $this->assertInstanceOf(\Carbon\Carbon::class, $created->last_seen_at);
+ $this->assertTrue(\Hash::check('plain-text', $created->password));
+
+ $this->assertSame('users_index', $user->searchableAs());
+
+ $created->name = 'John';
+ $created->username = 'johnny';
+ $this->assertSame(['name' => 'John', 'username' => 'johnny'], $created->toSearchableArray());
+ }
+}
diff --git a/xml-coverage/Console/Kernel.php.xml b/xml-coverage/Console/Kernel.php.xml
new file mode 100644
index 0000000..7a90d34
--- /dev/null
+++ b/xml-coverage/Console/Kernel.php.xml
@@ -0,0 +1,314 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Console
+ ;
+
+
+
+ use
+
+ Illuminate\Console\Scheduling\Schedule
+ ;
+
+
+ use
+
+ Illuminate\Foundation\Console\Kernel
+
+ as
+
+ ConsoleKernel
+ ;
+
+
+
+ class
+
+ Kernel
+
+ extends
+
+ ConsoleKernel
+
+
+ {
+
+
+
+ /**
+
+
+ * Define the application's command schedule.
+
+
+ */
+
+
+
+ protected
+
+ function
+
+ schedule
+ (
+ Schedule
+
+ $schedule
+ )
+ :
+
+ void
+
+
+
+ {
+
+
+
+ // $schedule->command('inspire')->hourly();
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Register the commands for the application.
+
+
+ */
+
+
+
+ protected
+
+ function
+
+ commands
+ (
+ )
+ :
+
+ void
+
+
+
+ {
+
+
+
+ $this
+ ->
+ load
+ (
+ __DIR__
+ .
+ '/Commands'
+ )
+ ;
+
+
+
+
+ require
+
+ base_path
+ (
+ 'routes/console.php'
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Events/NewMessageEvent.php.xml b/xml-coverage/Events/NewMessageEvent.php.xml
new file mode 100644
index 0000000..bab1e78
--- /dev/null
+++ b/xml-coverage/Events/NewMessageEvent.php.xml
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Events
+ ;
+
+
+
+ use
+
+ Illuminate\Broadcasting\Channel
+ ;
+
+
+ use
+
+ Illuminate\Broadcasting\InteractsWithSockets
+ ;
+
+
+ use
+
+ Illuminate\Broadcasting\PresenceChannel
+ ;
+
+
+ use
+
+ Illuminate\Broadcasting\PrivateChannel
+ ;
+
+
+ use
+
+ Illuminate\Contracts\Broadcasting\ShouldBroadcast
+ ;
+
+
+ use
+
+ Illuminate\Contracts\Broadcasting\ShouldBroadcastNow
+ ;
+
+
+ use
+
+ Illuminate\Foundation\Events\Dispatchable
+ ;
+
+
+ use
+
+ Illuminate\Queue\SerializesModels
+ ;
+
+
+
+ class
+
+ NewMessageEvent
+
+ implements
+
+ ShouldBroadcastNow
+
+
+ {
+
+
+
+ use
+
+ Dispatchable
+ ,
+
+ InteractsWithSockets
+ ,
+
+ SerializesModels
+ ;
+
+
+
+
+ public
+
+ $message
+ ;
+
+
+
+
+ /**
+
+
+ * Create a new event instance.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ __construct
+ (
+ $message
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ message
+
+ =
+
+ $message
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Get the channels the event should broadcast on.
+
+
+ *
+
+
+ * @return array<int, \Illuminate\Broadcasting\Channel>
+
+
+ */
+
+
+
+ public
+
+ function
+
+ broadcastOn
+ (
+ )
+ :
+
+ array
+
+
+
+ {
+
+
+
+ return
+
+ [
+
+
+
+ new
+
+ PrivateChannel
+ (
+ 'message.'
+
+ .
+
+ $this
+ ->
+ message
+ ->
+ receiver
+ ->
+ uuid
+ )
+ ,
+
+
+
+ ]
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Events/ReadMessageEvent.php.xml b/xml-coverage/Events/ReadMessageEvent.php.xml
new file mode 100644
index 0000000..2de7556
--- /dev/null
+++ b/xml-coverage/Events/ReadMessageEvent.php.xml
@@ -0,0 +1,247 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Events
+ ;
+
+
+
+ use
+
+ Illuminate\Broadcasting\Channel
+ ;
+
+
+ use
+
+ Illuminate\Broadcasting\InteractsWithSockets
+ ;
+
+
+ use
+
+ Illuminate\Broadcasting\PresenceChannel
+ ;
+
+
+ use
+
+ Illuminate\Broadcasting\PrivateChannel
+ ;
+
+
+ use
+
+ Illuminate\Contracts\Broadcasting\ShouldBroadcast
+ ;
+
+
+ use
+
+ Illuminate\Contracts\Broadcasting\ShouldBroadcastNow
+ ;
+
+
+ use
+
+ Illuminate\Foundation\Events\Dispatchable
+ ;
+
+
+ use
+
+ Illuminate\Queue\SerializesModels
+ ;
+
+
+
+ class
+
+ ReadMessageEvent
+
+ implements
+
+ ShouldBroadcastNow
+
+
+ {
+
+
+
+ use
+
+ Dispatchable
+ ,
+
+ InteractsWithSockets
+ ,
+
+ SerializesModels
+ ;
+
+
+
+
+ public
+
+ $message
+ ;
+
+
+
+
+ /**
+
+
+ * Create a new event instance.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ __construct
+ (
+ $message
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ message
+
+ =
+
+ $message
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Get the channels the event should broadcast on.
+
+
+ *
+
+
+ * @return array<int, \Illuminate\Broadcasting\Channel>
+
+
+ */
+
+
+
+ public
+
+ function
+
+ broadcastOn
+ (
+ )
+ :
+
+ array
+
+
+
+ {
+
+
+
+ return
+
+ [
+
+
+
+ new
+
+ PrivateChannel
+ (
+ 'message.'
+
+ .
+
+ $this
+ ->
+ message
+ ->
+ sender
+ ->
+ uuid
+ )
+ ,
+
+
+
+ ]
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Exceptions/Handler.php.xml b/xml-coverage/Exceptions/Handler.php.xml
new file mode 100644
index 0000000..9c626dc
--- /dev/null
+++ b/xml-coverage/Exceptions/Handler.php.xml
@@ -0,0 +1,324 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Exceptions
+ ;
+
+
+
+ use
+
+ Illuminate\Foundation\Exceptions\Handler
+
+ as
+
+ ExceptionHandler
+ ;
+
+
+ use
+
+ Throwable
+ ;
+
+
+
+ class
+
+ Handler
+
+ extends
+
+ ExceptionHandler
+
+
+ {
+
+
+
+ /**
+
+
+ * The list of the inputs that are never flashed to the session on validation exceptions.
+
+
+ *
+
+
+ * @var array<int, string>
+
+
+ */
+
+
+
+ protected
+
+ $dontFlash
+
+ =
+
+ [
+
+
+
+ 'current_password'
+ ,
+
+
+
+ 'password'
+ ,
+
+
+
+ 'password_confirmation'
+ ,
+
+
+
+ ]
+ ;
+
+
+
+
+ /**
+
+
+ * Register the exception handling callbacks for the application.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ register
+ (
+ )
+ :
+
+ void
+
+
+
+ {
+
+
+
+ $this
+ ->
+ reportable
+ (
+ function
+
+ (
+ Throwable
+
+ $e
+ )
+
+ {
+
+
+
+ //
+
+
+
+ }
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Helpers/Helper.php.xml b/xml-coverage/Helpers/Helper.php.xml
new file mode 100644
index 0000000..6ac39f4
--- /dev/null
+++ b/xml-coverage/Helpers/Helper.php.xml
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Helpers
+ ;
+
+
+
+ class
+
+ Helper
+
+
+ {
+
+
+
+ public
+
+ static
+
+ function
+
+ userLastActivityStatus
+ (
+ $timestamp
+ )
+ :
+
+ ?
+ string
+
+
+
+ {
+
+
+
+ $lastSeenFormat
+
+ =
+
+ $timestamp
+ ?->
+ isToday
+ (
+ )
+
+ ?
+
+ "
+ Last seen today at
+ {
+ $timestamp
+ ?->
+ format
+ (
+ 'H:i'
+ )
+ }
+ "
+
+ :
+
+ (
+ $timestamp
+ ?->
+ isYesterday
+ (
+ )
+
+
+
+ ?
+
+ "
+ Last seen yesterday at
+ {
+ $timestamp
+ ?->
+ format
+ (
+ 'H:i'
+ )
+ }
+ "
+
+
+
+ :
+
+ "
+ Last seen at
+ {
+ $timestamp
+ ?->
+ format
+ (
+ 'd/m/Y H:i'
+ )
+ }
+ "
+
+
+
+ )
+ ;
+
+
+
+
+ return
+
+ $timestamp
+ ?->
+ gt
+ (
+ now
+ (
+ )
+ ->
+ subSeconds
+ (
+ 5
+ )
+ )
+
+ ?
+
+ 'Online'
+
+ :
+
+ $lastSeenFormat
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Controllers/Auth/AuthenticatedSessionController.php.xml b/xml-coverage/Http/Controllers/Auth/AuthenticatedSessionController.php.xml
new file mode 100644
index 0000000..1f646d3
--- /dev/null
+++ b/xml-coverage/Http/Controllers/Auth/AuthenticatedSessionController.php.xml
@@ -0,0 +1,497 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Controllers\Auth
+ ;
+
+
+
+ use
+
+ App\Http\Controllers\Controller
+ ;
+
+
+ use
+
+ App\Http\Requests\Auth\LoginRequest
+ ;
+
+
+ use
+
+ App\Providers\RouteServiceProvider
+ ;
+
+
+ use
+
+ Illuminate\Http\RedirectResponse
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Auth
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Route
+ ;
+
+
+ use
+
+ Inertia\Inertia
+ ;
+
+
+ use
+
+ Inertia\Response
+ ;
+
+
+
+ class
+
+ AuthenticatedSessionController
+
+ extends
+
+ Controller
+
+
+ {
+
+
+
+ /**
+
+
+ * Display the login view.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ create
+ (
+ )
+ :
+
+ Response
+
+
+
+ {
+
+
+
+ return
+
+ Inertia
+ ::
+ render
+ (
+ 'Auth/Login'
+ ,
+
+ [
+
+
+
+ 'canResetPassword'
+
+ =>
+
+ Route
+ ::
+ has
+ (
+ 'password.request'
+ )
+ ,
+
+
+
+ 'status'
+
+ =>
+
+ session
+ (
+ 'status'
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Handle an incoming authentication request.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ store
+ (
+ LoginRequest
+
+ $request
+ )
+ :
+
+ RedirectResponse
+
+
+
+ {
+
+
+
+ $request
+ ->
+ authenticate
+ (
+ )
+ ;
+
+
+
+
+ $request
+ ->
+ session
+ (
+ )
+ ->
+ regenerate
+ (
+ )
+ ;
+
+
+
+
+ $user
+
+ =
+
+ $request
+ ->
+ user
+ (
+ )
+ ;
+
+
+
+ $user
+ ->
+ update
+ (
+ [
+
+
+
+ 'status'
+
+ =>
+
+ 'online'
+ ,
+
+
+
+ 'last_seen_at'
+
+ =>
+
+ now
+ (
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+
+
+ return
+
+ redirect
+ (
+ )
+ ->
+ intended
+ (
+ RouteServiceProvider
+ ::
+ HOME
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Destroy an authenticated session.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ destroy
+ (
+ Request
+
+ $request
+ )
+ :
+
+ RedirectResponse
+
+
+
+ {
+
+
+
+ Auth
+ ::
+ guard
+ (
+ 'web'
+ )
+ ->
+ user
+ (
+ )
+ ->
+ update
+ (
+ [
+
+
+
+ 'status'
+
+ =>
+
+ 'offline'
+ ,
+
+
+
+ 'last_seen_at'
+
+ =>
+
+ now
+ (
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+
+ Auth
+ ::
+ guard
+ (
+ 'web'
+ )
+ ->
+ logout
+ (
+ )
+ ;
+
+
+
+
+ $request
+ ->
+ session
+ (
+ )
+ ->
+ invalidate
+ (
+ )
+ ;
+
+
+
+
+ $request
+ ->
+ session
+ (
+ )
+ ->
+ regenerateToken
+ (
+ )
+ ;
+
+
+
+
+ return
+
+ redirect
+ (
+ '/'
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Controllers/Auth/ConfirmablePasswordController.php.xml b/xml-coverage/Http/Controllers/Auth/ConfirmablePasswordController.php.xml
new file mode 100644
index 0000000..d6c23a4
--- /dev/null
+++ b/xml-coverage/Http/Controllers/Auth/ConfirmablePasswordController.php.xml
@@ -0,0 +1,330 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Controllers\Auth
+ ;
+
+
+
+ use
+
+ App\Http\Controllers\Controller
+ ;
+
+
+ use
+
+ App\Providers\RouteServiceProvider
+ ;
+
+
+ use
+
+ Illuminate\Http\RedirectResponse
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Auth
+ ;
+
+
+ use
+
+ Illuminate\Validation\ValidationException
+ ;
+
+
+ use
+
+ Inertia\Inertia
+ ;
+
+
+ use
+
+ Inertia\Response
+ ;
+
+
+
+ class
+
+ ConfirmablePasswordController
+
+ extends
+
+ Controller
+
+
+ {
+
+
+
+ /**
+
+
+ * Show the confirm password view.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ show
+ (
+ )
+ :
+
+ Response
+
+
+
+ {
+
+
+
+ return
+
+ Inertia
+ ::
+ render
+ (
+ 'Auth/ConfirmPassword'
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Confirm the user's password.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ store
+ (
+ Request
+
+ $request
+ )
+ :
+
+ RedirectResponse
+
+
+
+ {
+
+
+
+ if
+
+ (
+ !
+
+ Auth
+ ::
+ guard
+ (
+ 'web'
+ )
+ ->
+ validate
+ (
+ [
+
+
+
+ 'email'
+
+ =>
+
+ $request
+ ->
+ user
+ (
+ )
+ ->
+ email
+ ,
+
+
+
+ 'password'
+
+ =>
+
+ $request
+ ->
+ password
+ ,
+
+
+
+ ]
+ )
+ )
+
+ {
+
+
+
+ throw
+
+ ValidationException
+ ::
+ withMessages
+ (
+ [
+
+
+
+ 'password'
+
+ =>
+
+ __
+ (
+ 'auth.password'
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $request
+ ->
+ session
+ (
+ )
+ ->
+ put
+ (
+ 'auth.password_confirmed_at'
+ ,
+
+ time
+ (
+ )
+ )
+ ;
+
+
+
+
+ return
+
+ redirect
+ (
+ )
+ ->
+ intended
+ (
+ RouteServiceProvider
+ ::
+ HOME
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Controllers/Auth/EmailVerificationNotificationController.php.xml b/xml-coverage/Http/Controllers/Auth/EmailVerificationNotificationController.php.xml
new file mode 100644
index 0000000..ab7f909
--- /dev/null
+++ b/xml-coverage/Http/Controllers/Auth/EmailVerificationNotificationController.php.xml
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Controllers\Auth
+ ;
+
+
+
+ use
+
+ App\Http\Controllers\Controller
+ ;
+
+
+ use
+
+ App\Providers\RouteServiceProvider
+ ;
+
+
+ use
+
+ Illuminate\Http\RedirectResponse
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+
+ class
+
+ EmailVerificationNotificationController
+
+ extends
+
+ Controller
+
+
+ {
+
+
+
+ /**
+
+
+ * Send a new email verification notification.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ store
+ (
+ Request
+
+ $request
+ )
+ :
+
+ RedirectResponse
+
+
+
+ {
+
+
+
+ if
+
+ (
+ $request
+ ->
+ user
+ (
+ )
+ ->
+ hasVerifiedEmail
+ (
+ )
+ )
+
+ {
+
+
+
+ return
+
+ redirect
+ (
+ )
+ ->
+ intended
+ (
+ RouteServiceProvider
+ ::
+ HOME
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $request
+ ->
+ user
+ (
+ )
+ ->
+ sendEmailVerificationNotification
+ (
+ )
+ ;
+
+
+
+
+ return
+
+ back
+ (
+ )
+ ->
+ with
+ (
+ 'status'
+ ,
+
+ 'verification-link-sent'
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Controllers/Auth/EmailVerificationPromptController.php.xml b/xml-coverage/Http/Controllers/Auth/EmailVerificationPromptController.php.xml
new file mode 100644
index 0000000..ec60deb
--- /dev/null
+++ b/xml-coverage/Http/Controllers/Auth/EmailVerificationPromptController.php.xml
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Controllers\Auth
+ ;
+
+
+
+ use
+
+ App\Http\Controllers\Controller
+ ;
+
+
+ use
+
+ App\Providers\RouteServiceProvider
+ ;
+
+
+ use
+
+ Illuminate\Http\RedirectResponse
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Inertia\Inertia
+ ;
+
+
+ use
+
+ Inertia\Response
+ ;
+
+
+
+ class
+
+ EmailVerificationPromptController
+
+ extends
+
+ Controller
+
+
+ {
+
+
+
+ /**
+
+
+ * Display the email verification prompt.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ __invoke
+ (
+ Request
+
+ $request
+ )
+ :
+
+ RedirectResponse
+ |
+ Response
+
+
+
+ {
+
+
+
+ return
+
+ $request
+ ->
+ user
+ (
+ )
+ ->
+ hasVerifiedEmail
+ (
+ )
+
+
+
+ ?
+
+ redirect
+ (
+ )
+ ->
+ intended
+ (
+ RouteServiceProvider
+ ::
+ HOME
+ )
+
+
+
+ :
+
+ Inertia
+ ::
+ render
+ (
+ 'Auth/VerifyEmail'
+ ,
+
+ [
+ 'status'
+
+ =>
+
+ session
+ (
+ 'status'
+ )
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Controllers/Auth/NewPasswordController.php.xml b/xml-coverage/Http/Controllers/Auth/NewPasswordController.php.xml
new file mode 100644
index 0000000..58c6ac2
--- /dev/null
+++ b/xml-coverage/Http/Controllers/Auth/NewPasswordController.php.xml
@@ -0,0 +1,610 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Controllers\Auth
+ ;
+
+
+
+ use
+
+ App\Http\Controllers\Controller
+ ;
+
+
+ use
+
+ Illuminate\Auth\Events\PasswordReset
+ ;
+
+
+ use
+
+ Illuminate\Http\RedirectResponse
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Hash
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Password
+ ;
+
+
+ use
+
+ Illuminate\Support\Str
+ ;
+
+
+ use
+
+ Illuminate\Validation\Rules
+ ;
+
+
+ use
+
+ Illuminate\Validation\ValidationException
+ ;
+
+
+ use
+
+ Inertia\Inertia
+ ;
+
+
+ use
+
+ Inertia\Response
+ ;
+
+
+
+ class
+
+ NewPasswordController
+
+ extends
+
+ Controller
+
+
+ {
+
+
+
+ /**
+
+
+ * Display the password reset view.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ create
+ (
+ Request
+
+ $request
+ )
+ :
+
+ Response
+
+
+
+ {
+
+
+
+ return
+
+ Inertia
+ ::
+ render
+ (
+ 'Auth/ResetPassword'
+ ,
+
+ [
+
+
+
+ 'email'
+
+ =>
+
+ $request
+ ->
+ email
+ ,
+
+
+
+ 'token'
+
+ =>
+
+ $request
+ ->
+ route
+ (
+ 'token'
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Handle an incoming new password request.
+
+
+ *
+
+
+ * @throws \Illuminate\Validation\ValidationException
+
+
+ */
+
+
+
+ public
+
+ function
+
+ store
+ (
+ Request
+
+ $request
+ )
+ :
+
+ RedirectResponse
+
+
+
+ {
+
+
+
+ $request
+ ->
+ validate
+ (
+ [
+
+
+
+ 'token'
+
+ =>
+
+ 'required'
+ ,
+
+
+
+ 'email'
+
+ =>
+
+ 'required|email'
+ ,
+
+
+
+ 'password'
+
+ =>
+
+ [
+ 'required'
+ ,
+
+ 'confirmed'
+ ,
+
+ Rules\Password
+ ::
+ defaults
+ (
+ )
+ ]
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+
+ // Here we will attempt to reset the user's password. If it is successful we
+
+
+
+ // will update the password on an actual user model and persist it to the
+
+
+
+ // database. Otherwise we will parse the error and return the response.
+
+
+
+ $status
+
+ =
+
+ Password
+ ::
+ reset
+ (
+
+
+
+ $request
+ ->
+ only
+ (
+ 'email'
+ ,
+
+ 'password'
+ ,
+
+ 'password_confirmation'
+ ,
+
+ 'token'
+ )
+ ,
+
+
+
+ function
+
+ (
+ $user
+ )
+
+ use
+
+ (
+ $request
+ )
+
+ {
+
+
+
+ $user
+ ->
+ forceFill
+ (
+ [
+
+
+
+ 'password'
+
+ =>
+
+ Hash
+ ::
+ make
+ (
+ $request
+ ->
+ password
+ )
+ ,
+
+
+
+ 'remember_token'
+
+ =>
+
+ Str
+ ::
+ random
+ (
+ 60
+ )
+ ,
+
+
+
+ ]
+ )
+ ->
+ save
+ (
+ )
+ ;
+
+
+
+
+ event
+ (
+ new
+
+ PasswordReset
+ (
+ $user
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+ )
+ ;
+
+
+
+
+ // If the password was successfully reset, we will redirect the user back to
+
+
+
+ // the application's home authenticated view. If there is an error we can
+
+
+
+ // redirect them back to where they came from with their error message.
+
+
+
+ if
+
+ (
+ $status
+
+ ==
+
+ Password
+ ::
+ PASSWORD_RESET
+ )
+
+ {
+
+
+
+ return
+
+ redirect
+ (
+ )
+ ->
+ route
+ (
+ 'login'
+ )
+ ->
+ with
+ (
+ 'status'
+ ,
+
+ __
+ (
+ $status
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ throw
+
+ ValidationException
+ ::
+ withMessages
+ (
+ [
+
+
+
+ 'email'
+
+ =>
+
+ [
+ trans
+ (
+ $status
+ )
+ ]
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Controllers/Auth/PasswordController.php.xml b/xml-coverage/Http/Controllers/Auth/PasswordController.php.xml
new file mode 100644
index 0000000..4903c9f
--- /dev/null
+++ b/xml-coverage/Http/Controllers/Auth/PasswordController.php.xml
@@ -0,0 +1,239 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Controllers\Auth
+ ;
+
+
+
+ use
+
+ App\Http\Controllers\Controller
+ ;
+
+
+ use
+
+ Illuminate\Http\RedirectResponse
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Hash
+ ;
+
+
+ use
+
+ Illuminate\Validation\Rules\Password
+ ;
+
+
+
+ class
+
+ PasswordController
+
+ extends
+
+ Controller
+
+
+ {
+
+
+
+ /**
+
+
+ * Update the user's password.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ update
+ (
+ Request
+
+ $request
+ )
+ :
+
+ RedirectResponse
+
+
+
+ {
+
+
+
+ $validated
+
+ =
+
+ $request
+ ->
+ validate
+ (
+ [
+
+
+
+ 'current_password'
+
+ =>
+
+ [
+ 'required'
+ ,
+
+ 'current_password'
+ ]
+ ,
+
+
+
+ 'password'
+
+ =>
+
+ [
+ 'required'
+ ,
+
+ Password
+ ::
+ defaults
+ (
+ )
+ ,
+
+ 'confirmed'
+ ]
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+
+ $request
+ ->
+ user
+ (
+ )
+ ->
+ update
+ (
+ [
+
+
+
+ 'password'
+
+ =>
+
+ Hash
+ ::
+ make
+ (
+ $validated
+ [
+ 'password'
+ ]
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+
+ return
+
+ back
+ (
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Controllers/Auth/PasswordResetLinkController.php.xml b/xml-coverage/Http/Controllers/Auth/PasswordResetLinkController.php.xml
new file mode 100644
index 0000000..384f209
--- /dev/null
+++ b/xml-coverage/Http/Controllers/Auth/PasswordResetLinkController.php.xml
@@ -0,0 +1,376 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Controllers\Auth
+ ;
+
+
+
+ use
+
+ App\Http\Controllers\Controller
+ ;
+
+
+ use
+
+ Illuminate\Http\RedirectResponse
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Password
+ ;
+
+
+ use
+
+ Illuminate\Validation\ValidationException
+ ;
+
+
+ use
+
+ Inertia\Inertia
+ ;
+
+
+ use
+
+ Inertia\Response
+ ;
+
+
+
+ class
+
+ PasswordResetLinkController
+
+ extends
+
+ Controller
+
+
+ {
+
+
+
+ /**
+
+
+ * Display the password reset link request view.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ create
+ (
+ )
+ :
+
+ Response
+
+
+
+ {
+
+
+
+ return
+
+ Inertia
+ ::
+ render
+ (
+ 'Auth/ForgotPassword'
+ ,
+
+ [
+
+
+
+ 'status'
+
+ =>
+
+ session
+ (
+ 'status'
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Handle an incoming password reset link request.
+
+
+ *
+
+
+ * @throws \Illuminate\Validation\ValidationException
+
+
+ */
+
+
+
+ public
+
+ function
+
+ store
+ (
+ Request
+
+ $request
+ )
+ :
+
+ RedirectResponse
+
+
+
+ {
+
+
+
+ $request
+ ->
+ validate
+ (
+ [
+
+
+
+ 'email'
+
+ =>
+
+ 'required|email'
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+
+ // We will send the password reset link to this user. Once we have attempted
+
+
+
+ // to send the link, we will examine the response then see the message we
+
+
+
+ // need to show to the user. Finally, we'll send out a proper response.
+
+
+
+ $status
+
+ =
+
+ Password
+ ::
+ sendResetLink
+ (
+
+
+
+ $request
+ ->
+ only
+ (
+ 'email'
+ )
+
+
+
+ )
+ ;
+
+
+
+
+ if
+
+ (
+ $status
+
+ ==
+
+ Password
+ ::
+ RESET_LINK_SENT
+ )
+
+ {
+
+
+
+ return
+
+ back
+ (
+ )
+ ->
+ with
+ (
+ 'status'
+ ,
+
+ __
+ (
+ $status
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ throw
+
+ ValidationException
+ ::
+ withMessages
+ (
+ [
+
+
+
+ 'email'
+
+ =>
+
+ [
+ trans
+ (
+ $status
+ )
+ ]
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Controllers/Auth/RegisteredUserController.php.xml b/xml-coverage/Http/Controllers/Auth/RegisteredUserController.php.xml
new file mode 100644
index 0000000..7e3393b
--- /dev/null
+++ b/xml-coverage/Http/Controllers/Auth/RegisteredUserController.php.xml
@@ -0,0 +1,459 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Controllers\Auth
+ ;
+
+
+
+ use
+
+ App\Http\Controllers\Controller
+ ;
+
+
+ use
+
+ App\Models\User
+ ;
+
+
+ use
+
+ App\Providers\RouteServiceProvider
+ ;
+
+
+ use
+
+ Illuminate\Auth\Events\Registered
+ ;
+
+
+ use
+
+ Illuminate\Http\RedirectResponse
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Auth
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Hash
+ ;
+
+
+ use
+
+ Illuminate\Validation\Rules
+ ;
+
+
+ use
+
+ Inertia\Inertia
+ ;
+
+
+ use
+
+ Inertia\Response
+ ;
+
+
+
+ class
+
+ RegisteredUserController
+
+ extends
+
+ Controller
+
+
+ {
+
+
+
+ /**
+
+
+ * Display the registration view.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ create
+ (
+ )
+ :
+
+ Response
+
+
+
+ {
+
+
+
+ return
+
+ Inertia
+ ::
+ render
+ (
+ 'Auth/Register'
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Handle an incoming registration request.
+
+
+ *
+
+
+ * @throws \Illuminate\Validation\ValidationException
+
+
+ */
+
+
+
+ public
+
+ function
+
+ store
+ (
+ Request
+
+ $request
+ )
+ :
+
+ RedirectResponse
+
+
+
+ {
+
+
+
+ $request
+ ->
+ validate
+ (
+ [
+
+
+
+ 'name'
+
+ =>
+
+ 'required|string|max:255'
+ ,
+
+
+
+ 'username'
+
+ =>
+
+ 'required|string|max:255|alpha_num|unique:users,username'
+ ,
+
+
+
+ 'email'
+
+ =>
+
+ 'required|string|email|max:255|unique:users,email'
+ ,
+
+
+
+ 'password'
+
+ =>
+
+ [
+ 'required'
+ ,
+
+ 'confirmed'
+ ,
+
+ Rules\Password
+ ::
+ defaults
+ (
+ )
+ ]
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+
+ $user
+
+ =
+
+ User
+ ::
+ create
+ (
+ [
+
+
+
+ 'name'
+
+ =>
+
+ $request
+ ->
+ name
+ ,
+
+
+
+ 'username'
+
+ =>
+
+ $request
+ ->
+ username
+ ,
+
+
+
+ 'email'
+
+ =>
+
+ $request
+ ->
+ email
+ ,
+
+
+
+ 'password'
+
+ =>
+
+ Hash
+ ::
+ make
+ (
+ $request
+ ->
+ password
+ )
+ ,
+
+
+
+ 'uuid'
+
+ =>
+
+ str
+ (
+ )
+ ->
+ uuid
+ (
+ )
+ ,
+
+
+
+ 'last_seen_at'
+
+ =>
+
+ now
+ (
+ )
+ ,
+
+
+
+ 'status'
+
+ =>
+
+ 'online'
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+
+ event
+ (
+ new
+
+ Registered
+ (
+ $user
+ )
+ )
+ ;
+
+
+
+
+ Auth
+ ::
+ login
+ (
+ $user
+ )
+ ;
+
+
+
+
+ return
+
+ redirect
+ (
+ RouteServiceProvider
+ ::
+ HOME
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Controllers/Auth/VerifyEmailController.php.xml b/xml-coverage/Http/Controllers/Auth/VerifyEmailController.php.xml
new file mode 100644
index 0000000..73675c5
--- /dev/null
+++ b/xml-coverage/Http/Controllers/Auth/VerifyEmailController.php.xml
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Controllers\Auth
+ ;
+
+
+
+ use
+
+ App\Http\Controllers\Controller
+ ;
+
+
+ use
+
+ App\Providers\RouteServiceProvider
+ ;
+
+
+ use
+
+ Illuminate\Auth\Events\Verified
+ ;
+
+
+ use
+
+ Illuminate\Foundation\Auth\EmailVerificationRequest
+ ;
+
+
+ use
+
+ Illuminate\Http\RedirectResponse
+ ;
+
+
+
+ class
+
+ VerifyEmailController
+
+ extends
+
+ Controller
+
+
+ {
+
+
+
+ /**
+
+
+ * Mark the authenticated user's email address as verified.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ __invoke
+ (
+ EmailVerificationRequest
+
+ $request
+ )
+ :
+
+ RedirectResponse
+
+
+
+ {
+
+
+
+ if
+
+ (
+ $request
+ ->
+ user
+ (
+ )
+ ->
+ hasVerifiedEmail
+ (
+ )
+ )
+
+ {
+
+
+
+ return
+
+ redirect
+ (
+ )
+ ->
+ intended
+ (
+ RouteServiceProvider
+ ::
+ HOME
+ .
+ '?verified=1'
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ if
+
+ (
+ $request
+ ->
+ user
+ (
+ )
+ ->
+ markEmailAsVerified
+ (
+ )
+ )
+
+ {
+
+
+
+ event
+ (
+ new
+
+ Verified
+ (
+ $request
+ ->
+ user
+ (
+ )
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ return
+
+ redirect
+ (
+ )
+ ->
+ intended
+ (
+ RouteServiceProvider
+ ::
+ HOME
+ .
+ '?verified=1'
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Controllers/ChatController.php.xml b/xml-coverage/Http/Controllers/ChatController.php.xml
new file mode 100644
index 0000000..90e7a5d
--- /dev/null
+++ b/xml-coverage/Http/Controllers/ChatController.php.xml
@@ -0,0 +1,1849 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Controllers
+ ;
+
+
+
+ use
+
+ App\Events\NewMessageEvent
+ ;
+
+
+ use
+
+ App\Events\ReadMessageEvent
+ ;
+
+
+ use
+
+ App\Http\Requests\ChatRequest
+ ;
+
+
+ use
+
+ App\Http\Resources\MessageResource
+ ;
+
+
+ use
+
+ App\Http\Resources\UserCollection
+ ;
+
+
+ use
+
+ App\Http\Resources\UserResource
+ ;
+
+
+ use
+
+ App\Models\User
+ ;
+
+
+ use
+
+ App\Models\Chat
+ ;
+
+
+
+ class
+
+ ChatController
+
+ extends
+
+ Controller
+
+
+ {
+
+
+
+ public
+
+ function
+
+ index
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ inertia
+ (
+ 'Chat/Index'
+ ,
+
+ [
+
+
+
+ 'users'
+
+ =>
+
+ UserCollection
+ ::
+ make
+ (
+ $this
+ ->
+ getChatWithUser
+ (
+ )
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ public
+
+ function
+
+ show
+ (
+ User
+
+ $user
+ )
+
+
+
+ {
+
+
+
+ if
+
+ (
+ $user
+ ->
+ id
+
+ ===
+
+ auth
+ (
+ )
+ ->
+ id
+ (
+ )
+ )
+
+ {
+
+
+
+ return
+
+ redirect
+ (
+ )
+ ->
+ route
+ (
+ 'chat.index'
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ UserResource
+ ::
+ withoutWrapping
+ (
+ )
+ ;
+
+
+
+
+ $chats
+
+ =
+
+ $user
+ ->
+ messages
+ (
+ )
+ ->
+ where
+ (
+ 'receiver_id'
+ ,
+
+ auth
+ (
+ )
+ ->
+ id
+ (
+ )
+ )
+ ->
+ whereNull
+ (
+ 'seen_at'
+ )
+ ->
+ get
+ (
+ )
+ ;
+
+
+
+ $result
+
+ =
+
+ $chats
+ ->
+ each
+ ->
+ update
+ (
+ [
+ 'seen_at'
+
+ =>
+
+ now
+ (
+ )
+ ]
+ )
+ ;
+
+
+
+ if
+
+ (
+ $result
+ ->
+ count
+ (
+ )
+ )
+
+ {
+
+
+
+ $message
+
+ =
+
+ $result
+ ->
+ last
+ (
+ )
+ ->
+ load
+ (
+ 'sender'
+ )
+ ;
+
+
+
+ broadcast
+ (
+ new
+
+ ReadMessageEvent
+ (
+ $message
+ )
+ )
+ ->
+ toOthers
+ (
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ return
+
+ inertia
+ (
+ 'Chat/Show'
+ ,
+
+ [
+
+
+
+ 'users'
+
+ =>
+
+ UserCollection
+ ::
+ make
+ (
+ $this
+ ->
+ getChatWithUser
+ (
+ )
+ )
+ ,
+
+
+
+ 'chat_with'
+
+ =>
+
+ UserResource
+ ::
+ make
+ (
+ $user
+ )
+ ,
+
+
+
+ 'messages'
+
+ =>
+
+ $this
+ ->
+ loadMessages
+ (
+ $user
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ public
+
+ function
+
+ chat
+ (
+ User
+
+ $user
+ ,
+
+ ChatRequest
+
+ $request
+ )
+
+
+
+ {
+
+
+
+ $message
+
+ =
+
+ \Auth
+ ::
+ user
+ (
+ )
+ ->
+ messages
+ (
+ )
+ ->
+ create
+ (
+ [
+
+
+
+ 'receiver_id'
+
+ =>
+
+ $user
+ ->
+ id
+ ,
+
+
+
+ 'message'
+
+ =>
+
+ $request
+ ->
+ message
+ ,
+
+
+
+ 'reply_id'
+
+ =>
+
+ $request
+ ->
+ reply_id
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+
+ broadcast
+ (
+ new
+
+ NewMessageEvent
+ (
+ $message
+ ->
+ load
+ (
+ 'receiver'
+ )
+ )
+ )
+ ->
+ toOthers
+ (
+ )
+ ;
+
+
+
+
+ return
+
+ redirect
+ (
+ )
+ ->
+ back
+ (
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ public
+
+ function
+
+ destroy
+ (
+ Chat
+
+ $chat
+ )
+
+
+
+ {
+
+
+
+ if
+
+ (
+ $chat
+ ->
+ sender_id
+
+ !==
+
+ auth
+ (
+ )
+ ->
+ id
+ (
+ )
+ )
+
+ {
+
+
+
+ abort
+ (
+ 403
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $message
+
+ =
+
+ tap
+ (
+ $chat
+ )
+ ->
+ update
+ (
+ [
+
+
+
+ 'message_deleted_at'
+
+ =>
+
+ now
+ (
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+
+ broadcast
+ (
+ new
+
+ NewMessageEvent
+ (
+ $message
+ ->
+ load
+ (
+ 'receiver'
+ )
+ )
+ )
+ ->
+ toOthers
+ (
+ )
+ ;
+
+
+
+
+ return
+
+ redirect
+ (
+ )
+ ->
+ back
+ (
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ private
+
+ function
+
+ getChatWithUser
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ User
+ ::
+ query
+ (
+ )
+
+
+
+ ->
+ whereHas
+ (
+ 'receiveMessages'
+ ,
+
+ function
+
+ (
+ $query
+ )
+
+ {
+
+
+
+ $query
+ ->
+ where
+ (
+ 'sender_id'
+ ,
+
+ auth
+ (
+ )
+ ->
+ id
+ (
+ )
+ )
+ ;
+
+
+
+ }
+ )
+
+
+
+ ->
+ orWhereHas
+ (
+ 'sendMessages'
+ ,
+
+ function
+
+ (
+ $query
+ )
+
+ {
+
+
+
+ $query
+ ->
+ where
+ (
+ 'receiver_id'
+ ,
+
+ auth
+ (
+ )
+ ->
+ id
+ (
+ )
+ )
+ ;
+
+
+
+ }
+ )
+
+
+
+ ->
+ withCount
+ (
+ [
+ 'messages'
+
+ =>
+
+ fn
+ (
+ $query
+ )
+
+ =>
+
+ $query
+ ->
+ where
+ (
+ 'receiver_id'
+ ,
+
+ auth
+ (
+ )
+ ->
+ id
+ (
+ )
+ )
+ ->
+ whereNull
+ (
+ 'seen_at'
+ )
+ ]
+ )
+
+
+
+ ->
+ with
+ (
+ [
+
+
+
+ 'sendMessages'
+
+ =>
+
+ function
+
+ (
+ $query
+ )
+
+ {
+
+
+
+ $query
+ ->
+ whereIn
+ (
+ 'id'
+ ,
+
+ function
+
+ (
+ $query
+ )
+
+ {
+
+
+
+ $query
+ ->
+ selectRaw
+ (
+ 'max(id)'
+ )
+
+
+
+ ->
+ from
+ (
+ 'chats'
+ )
+
+
+
+ ->
+ where
+ (
+ 'receiver_id'
+ ,
+
+ auth
+ (
+ )
+ ->
+ id
+ (
+ )
+ )
+
+
+
+ ->
+ groupBy
+ (
+ 'sender_id'
+ )
+ ;
+
+
+
+ }
+ )
+ ;
+
+
+
+ }
+ ,
+
+
+
+ 'receiveMessages'
+
+ =>
+
+ function
+
+ (
+ $query
+ )
+
+ {
+
+
+
+ $query
+ ->
+ whereIn
+ (
+ 'id'
+ ,
+
+ function
+
+ (
+ $query
+ )
+
+ {
+
+
+
+ $query
+ ->
+ selectRaw
+ (
+ 'max(id)'
+ )
+
+
+
+ ->
+ from
+ (
+ 'chats'
+ )
+
+
+
+ ->
+ where
+ (
+ 'sender_id'
+ ,
+
+ auth
+ (
+ )
+ ->
+ id
+ (
+ )
+ )
+
+
+
+ ->
+ groupBy
+ (
+ 'receiver_id'
+ )
+ ;
+
+
+
+ }
+ )
+ ;
+
+
+
+ }
+ ,
+
+
+
+ ]
+ )
+
+
+
+ ->
+ orderByDesc
+ (
+ function
+
+ (
+ $query
+ )
+
+ {
+
+
+
+ $query
+ ->
+ select
+ (
+ 'created_at'
+ )
+
+
+
+ ->
+ from
+ (
+ 'chats'
+ )
+
+
+
+ ->
+ whereColumn
+ (
+ 'sender_id'
+ ,
+
+ 'users.id'
+ )
+
+
+
+ ->
+ orWhereColumn
+ (
+ 'receiver_id'
+ ,
+
+ 'users.id'
+ )
+
+
+
+ ->
+ orderByDesc
+ (
+ 'created_at'
+ )
+
+
+
+ ->
+ limit
+ (
+ 1
+ )
+ ;
+
+
+
+ }
+ )
+
+
+
+ ->
+ get
+ (
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ private
+
+ function
+
+ loadMessages
+ (
+ $user
+ )
+
+
+
+ {
+
+
+
+ return
+
+ Chat
+ ::
+ query
+ (
+ )
+
+
+
+ ->
+ where
+ (
+ fn
+ (
+ $query
+ )
+
+ =>
+
+ $query
+ ->
+ where
+ (
+ 'sender_id'
+ ,
+
+ auth
+ (
+ )
+ ->
+ id
+ (
+ )
+ )
+ ->
+ where
+ (
+ 'receiver_id'
+ ,
+
+ $user
+ ->
+ id
+ )
+ )
+
+
+
+ ->
+ orWhere
+ (
+ fn
+ (
+ $query
+ )
+
+ =>
+
+ $query
+ ->
+ where
+ (
+ 'sender_id'
+ ,
+
+ $user
+ ->
+ id
+ )
+ ->
+ where
+ (
+ 'receiver_id'
+ ,
+
+ auth
+ (
+ )
+ ->
+ id
+ (
+ )
+ )
+ )
+
+
+
+ ->
+ with
+ (
+ [
+ 'receiver'
+ ,
+
+ 'sender'
+ ,
+
+ 'reply'
+
+ =>
+
+ fn
+ (
+ $query
+ )
+
+ =>
+
+ $query
+ ->
+ with
+ (
+ 'sender'
+ )
+ ]
+ )
+
+
+
+ ->
+ orderBy
+ (
+ 'created_at'
+ )
+
+
+
+ ->
+ get
+ (
+ )
+
+
+
+ ->
+ groupBy
+ (
+ function
+
+ (
+ $message
+ )
+
+ {
+
+
+
+ return
+
+ $message
+ ->
+ created_at
+ ->
+ isToday
+ (
+ )
+
+ ?
+
+ 'Today'
+
+ :
+
+ (
+ $message
+ ->
+ created_at
+ ->
+ isYesterday
+ (
+ )
+
+ ?
+
+ 'Yesterday'
+
+ :
+
+
+
+ $message
+ ->
+ created_at
+ ->
+ format
+ (
+ 'F j, Y'
+ )
+ )
+ ;
+
+
+
+ }
+ )
+
+
+
+ ->
+ map
+ (
+ function
+
+ (
+ $messages
+ ,
+
+ $date
+ )
+
+ {
+
+
+
+ return
+
+ [
+
+
+
+ 'date'
+
+ =>
+
+ $date
+ ,
+
+
+
+ 'messages'
+
+ =>
+
+ MessageResource
+ ::
+ collection
+ (
+ $messages
+ )
+ ,
+
+
+
+ ]
+ ;
+
+
+
+ }
+ )
+
+
+
+ ->
+ values
+ (
+ )
+
+
+
+ ->
+ toArray
+ (
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ public
+
+ function
+
+ update
+ (
+ Chat
+
+ $chat
+ ,
+
+ ChatRequest
+
+ $request
+ )
+
+
+
+ {
+
+
+
+ if
+
+ (
+ $chat
+ ->
+ sender_id
+
+ !==
+
+ auth
+ (
+ )
+ ->
+ id
+ (
+ )
+ )
+
+ {
+
+
+
+ abort
+ (
+ 403
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $chat
+ ->
+ update
+ (
+ [
+
+
+
+ 'message'
+
+ =>
+
+ $request
+ ->
+ message
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+
+ broadcast
+ (
+ new
+
+ NewMessageEvent
+ (
+ $chat
+ ->
+ load
+ (
+ 'receiver'
+ )
+ )
+ )
+ ->
+ toOthers
+ (
+ )
+ ;
+
+
+
+
+ return
+
+ back
+ (
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Controllers/Controller.php.xml b/xml-coverage/Http/Controllers/Controller.php.xml
new file mode 100644
index 0000000..0e368ca
--- /dev/null
+++ b/xml-coverage/Http/Controllers/Controller.php.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Controllers
+ ;
+
+
+
+ use
+
+ Illuminate\Foundation\Auth\Access\AuthorizesRequests
+ ;
+
+
+ use
+
+ Illuminate\Foundation\Validation\ValidatesRequests
+ ;
+
+
+ use
+
+ Illuminate\Routing\Controller
+
+ as
+
+ BaseController
+ ;
+
+
+
+ class
+
+ Controller
+
+ extends
+
+ BaseController
+
+
+ {
+
+
+
+ use
+
+ AuthorizesRequests
+ ,
+
+ ValidatesRequests
+ ;
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Controllers/ProfileController.php.xml b/xml-coverage/Http/Controllers/ProfileController.php.xml
new file mode 100644
index 0000000..bfd4a08
--- /dev/null
+++ b/xml-coverage/Http/Controllers/ProfileController.php.xml
@@ -0,0 +1,497 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Controllers
+ ;
+
+
+
+ use
+
+ App\Http\Requests\ProfileUpdateRequest
+ ;
+
+
+ use
+
+ Illuminate\Contracts\Auth\MustVerifyEmail
+ ;
+
+
+ use
+
+ Illuminate\Http\RedirectResponse
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Auth
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Redirect
+ ;
+
+
+ use
+
+ Inertia\Inertia
+ ;
+
+
+ use
+
+ Inertia\Response
+ ;
+
+
+
+ class
+
+ ProfileController
+
+ extends
+
+ Controller
+
+
+ {
+
+
+
+ /**
+
+
+ * Display the user's profile form.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ edit
+ (
+ Request
+
+ $request
+ )
+ :
+
+ Response
+
+
+
+ {
+
+
+
+ return
+
+ Inertia
+ ::
+ render
+ (
+ 'Profile/Edit'
+ ,
+
+ [
+
+
+
+ 'mustVerifyEmail'
+
+ =>
+
+ $request
+ ->
+ user
+ (
+ )
+
+ instanceof
+
+ MustVerifyEmail
+ ,
+
+
+
+ 'status'
+
+ =>
+
+ session
+ (
+ 'status'
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Update the user's profile information.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ update
+ (
+ ProfileUpdateRequest
+
+ $request
+ )
+ :
+
+ RedirectResponse
+
+
+
+ {
+
+
+
+ $request
+ ->
+ user
+ (
+ )
+ ->
+ fill
+ (
+ $request
+ ->
+ validated
+ (
+ )
+ )
+ ;
+
+
+
+
+ if
+
+ (
+ $request
+ ->
+ user
+ (
+ )
+ ->
+ isDirty
+ (
+ 'email'
+ )
+ )
+
+ {
+
+
+
+ $request
+ ->
+ user
+ (
+ )
+ ->
+ email_verified_at
+
+ =
+
+ null
+ ;
+
+
+
+ }
+
+
+
+
+ $request
+ ->
+ user
+ (
+ )
+ ->
+ save
+ (
+ )
+ ;
+
+
+
+
+ return
+
+ Redirect
+ ::
+ route
+ (
+ 'profile.edit'
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Delete the user's account.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ destroy
+ (
+ Request
+
+ $request
+ )
+ :
+
+ RedirectResponse
+
+
+
+ {
+
+
+
+ $request
+ ->
+ validate
+ (
+ [
+
+
+
+ 'password'
+
+ =>
+
+ [
+ 'required'
+ ,
+
+ 'current_password'
+ ]
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+
+ $user
+
+ =
+
+ $request
+ ->
+ user
+ (
+ )
+ ;
+
+
+
+
+ Auth
+ ::
+ logout
+ (
+ )
+ ;
+
+
+
+
+ $user
+ ->
+ delete
+ (
+ )
+ ;
+
+
+
+
+ $request
+ ->
+ session
+ (
+ )
+ ->
+ invalidate
+ (
+ )
+ ;
+
+
+
+ $request
+ ->
+ session
+ (
+ )
+ ->
+ regenerateToken
+ (
+ )
+ ;
+
+
+
+
+ return
+
+ Redirect
+ ::
+ to
+ (
+ '/'
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Controllers/UserController.php.xml b/xml-coverage/Http/Controllers/UserController.php.xml
new file mode 100644
index 0000000..6ba3d4d
--- /dev/null
+++ b/xml-coverage/Http/Controllers/UserController.php.xml
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Controllers
+ ;
+
+
+
+ use
+
+ App\Models\User
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+
+ class
+
+ UserController
+
+ extends
+
+ Controller
+
+
+ {
+
+
+
+ public
+
+ function
+
+ search
+ (
+ Request
+
+ $request
+ )
+
+
+
+ {
+
+
+
+ $users
+
+ =
+
+ User
+ ::
+ search
+ (
+ $request
+ ->
+ query
+ (
+ 'q'
+ )
+ )
+ ->
+ get
+ (
+ )
+ ;
+
+
+
+
+ return
+
+ response
+ (
+ )
+ ->
+ json
+ (
+ [
+
+
+
+ 'query'
+
+ =>
+
+ $request
+ ->
+ query
+ (
+ 'q'
+ )
+ ,
+
+
+
+ 'data'
+
+ =>
+
+ $users
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Kernel.php.xml b/xml-coverage/Http/Kernel.php.xml
new file mode 100644
index 0000000..831fbaa
--- /dev/null
+++ b/xml-coverage/Http/Kernel.php.xml
@@ -0,0 +1,443 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http
+ ;
+
+
+
+ use
+
+ Illuminate\Foundation\Http\Kernel
+
+ as
+
+ HttpKernel
+ ;
+
+
+
+ class
+
+ Kernel
+
+ extends
+
+ HttpKernel
+
+
+ {
+
+
+
+ /**
+
+
+ * The application's global HTTP middleware stack.
+
+
+ *
+
+
+ * These middleware are run during every request to your application.
+
+
+ *
+
+
+ * @var array<int, class-string|string>
+
+
+ */
+
+
+
+ protected
+
+ $middleware
+
+ =
+
+ [
+
+
+
+ // \App\Http\Middleware\TrustHosts::class,
+
+
+
+ \App\Http\Middleware\TrustProxies
+ ::
+ class
+ ,
+
+
+
+ \Illuminate\Http\Middleware\HandleCors
+ ::
+ class
+ ,
+
+
+
+ \App\Http\Middleware\PreventRequestsDuringMaintenance
+ ::
+ class
+ ,
+
+
+
+ \Illuminate\Foundation\Http\Middleware\ValidatePostSize
+ ::
+ class
+ ,
+
+
+
+ \App\Http\Middleware\TrimStrings
+ ::
+ class
+ ,
+
+
+
+ \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull
+ ::
+ class
+ ,
+
+
+
+ ]
+ ;
+
+
+
+
+ /**
+
+
+ * The application's route middleware groups.
+
+
+ *
+
+
+ * @var array<string, array<int, class-string|string>>
+
+
+ */
+
+
+
+ protected
+
+ $middlewareGroups
+
+ =
+
+ [
+
+
+
+ 'web'
+
+ =>
+
+ [
+
+
+
+ \App\Http\Middleware\EncryptCookies
+ ::
+ class
+ ,
+
+
+
+ \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse
+ ::
+ class
+ ,
+
+
+
+ \Illuminate\Session\Middleware\StartSession
+ ::
+ class
+ ,
+
+
+
+ \Illuminate\View\Middleware\ShareErrorsFromSession
+ ::
+ class
+ ,
+
+
+
+ \App\Http\Middleware\VerifyCsrfToken
+ ::
+ class
+ ,
+
+
+
+ \Illuminate\Routing\Middleware\SubstituteBindings
+ ::
+ class
+ ,
+
+
+
+ \App\Http\Middleware\HandleInertiaRequests
+ ::
+ class
+ ,
+
+
+
+ \Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets
+ ::
+ class
+ ,
+
+
+
+ ]
+ ,
+
+
+
+
+ 'api'
+
+ =>
+
+ [
+
+
+
+ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
+
+
+
+ \Illuminate\Routing\Middleware\ThrottleRequests
+ ::
+ class
+ .
+ ':api'
+ ,
+
+
+
+ \Illuminate\Routing\Middleware\SubstituteBindings
+ ::
+ class
+ ,
+
+
+
+ ]
+ ,
+
+
+
+ ]
+ ;
+
+
+
+
+ /**
+
+
+ * The application's middleware aliases.
+
+
+ *
+
+
+ * Aliases may be used instead of class names to conveniently assign middleware to routes and groups.
+
+
+ *
+
+
+ * @var array<string, class-string|string>
+
+
+ */
+
+
+
+ protected
+
+ $middlewareAliases
+
+ =
+
+ [
+
+
+
+ 'auth'
+
+ =>
+
+ \App\Http\Middleware\Authenticate
+ ::
+ class
+ ,
+
+
+
+ 'auth.basic'
+
+ =>
+
+ \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth
+ ::
+ class
+ ,
+
+
+
+ 'auth.session'
+
+ =>
+
+ \Illuminate\Session\Middleware\AuthenticateSession
+ ::
+ class
+ ,
+
+
+
+ 'cache.headers'
+
+ =>
+
+ \Illuminate\Http\Middleware\SetCacheHeaders
+ ::
+ class
+ ,
+
+
+
+ 'can'
+
+ =>
+
+ \Illuminate\Auth\Middleware\Authorize
+ ::
+ class
+ ,
+
+
+
+ 'guest'
+
+ =>
+
+ \App\Http\Middleware\RedirectIfAuthenticated
+ ::
+ class
+ ,
+
+
+
+ 'password.confirm'
+
+ =>
+
+ \Illuminate\Auth\Middleware\RequirePassword
+ ::
+ class
+ ,
+
+
+
+ 'precognitive'
+
+ =>
+
+ \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests
+ ::
+ class
+ ,
+
+
+
+ 'signed'
+
+ =>
+
+ \App\Http\Middleware\ValidateSignature
+ ::
+ class
+ ,
+
+
+
+ 'throttle'
+
+ =>
+
+ \Illuminate\Routing\Middleware\ThrottleRequests
+ ::
+ class
+ ,
+
+
+
+ 'verified'
+
+ =>
+
+ \Illuminate\Auth\Middleware\EnsureEmailIsVerified
+ ::
+ class
+ ,
+
+
+
+ 'user.last.seen.at'
+
+ =>
+
+ \App\Http\Middleware\UserLastSeenAtMiddleware
+ ::
+ class
+ ,
+
+
+
+ ]
+ ;
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Middleware/Authenticate.php.xml b/xml-coverage/Http/Middleware/Authenticate.php.xml
new file mode 100644
index 0000000..4cd0e54
--- /dev/null
+++ b/xml-coverage/Http/Middleware/Authenticate.php.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Middleware
+ ;
+
+
+
+ use
+
+ Illuminate\Auth\Middleware\Authenticate
+
+ as
+
+ Middleware
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+
+ class
+
+ Authenticate
+
+ extends
+
+ Middleware
+
+
+ {
+
+
+
+ /**
+
+
+ * Get the path the user should be redirected to when they are not authenticated.
+
+
+ */
+
+
+
+ protected
+
+ function
+
+ redirectTo
+ (
+ Request
+
+ $request
+ )
+ :
+
+ ?
+ string
+
+
+
+ {
+
+
+
+ return
+
+ $request
+ ->
+ expectsJson
+ (
+ )
+
+ ?
+
+ null
+
+ :
+
+ route
+ (
+ 'login'
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Middleware/EncryptCookies.php.xml b/xml-coverage/Http/Middleware/EncryptCookies.php.xml
new file mode 100644
index 0000000..dbe8d92
--- /dev/null
+++ b/xml-coverage/Http/Middleware/EncryptCookies.php.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Middleware
+ ;
+
+
+
+ use
+
+ Illuminate\Cookie\Middleware\EncryptCookies
+
+ as
+
+ Middleware
+ ;
+
+
+
+ class
+
+ EncryptCookies
+
+ extends
+
+ Middleware
+
+
+ {
+
+
+
+ /**
+
+
+ * The names of the cookies that should not be encrypted.
+
+
+ *
+
+
+ * @var array<int, string>
+
+
+ */
+
+
+
+ protected
+
+ $except
+
+ =
+
+ [
+
+
+
+ //
+
+
+
+ ]
+ ;
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Middleware/HandleInertiaRequests.php.xml b/xml-coverage/Http/Middleware/HandleInertiaRequests.php.xml
new file mode 100644
index 0000000..7828248
--- /dev/null
+++ b/xml-coverage/Http/Middleware/HandleInertiaRequests.php.xml
@@ -0,0 +1,682 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Middleware
+ ;
+
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Inertia\Middleware
+ ;
+
+
+ use
+
+ Tightenco\Ziggy\Ziggy
+ ;
+
+
+
+ class
+
+ HandleInertiaRequests
+
+ extends
+
+ Middleware
+
+
+ {
+
+
+
+ /**
+
+
+ * The root template that is loaded on the first page visit.
+
+
+ *
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $rootView
+
+ =
+
+ 'app'
+ ;
+
+
+
+
+ /**
+
+
+ * Determine the current asset version.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ version
+ (
+ Request
+
+ $request
+ )
+ :
+
+ string
+ |
+ null
+
+
+
+ {
+
+
+
+ return
+
+ parent
+ ::
+ version
+ (
+ $request
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Define the props that are shared by default.
+
+
+ *
+
+
+ * @return array<string, mixed>
+
+
+ */
+
+
+
+ public
+
+ function
+
+ share
+ (
+ Request
+
+ $request
+ )
+ :
+
+ array
+
+
+
+ {
+
+
+
+ return
+
+ [
+
+
+
+ ...
+ parent
+ ::
+ share
+ (
+ $request
+ )
+ ,
+
+
+
+ 'auth'
+
+ =>
+
+ [
+
+
+
+ 'user'
+
+ =>
+
+ $request
+ ->
+ user
+ (
+ )
+ ,
+
+
+
+ ]
+ ,
+
+
+
+ 'ziggy'
+
+ =>
+
+ fn
+
+ (
+ )
+
+ =>
+
+ [
+
+
+
+ ...
+ (
+ new
+
+ Ziggy
+ )
+ ->
+ toArray
+ (
+ )
+ ,
+
+
+
+ 'location'
+
+ =>
+
+ $request
+ ->
+ url
+ (
+ )
+ ,
+
+
+
+ ]
+ ,
+
+
+
+ ]
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Middleware/PreventRequestsDuringMaintenance.php.xml b/xml-coverage/Http/Middleware/PreventRequestsDuringMaintenance.php.xml
new file mode 100644
index 0000000..716feb7
--- /dev/null
+++ b/xml-coverage/Http/Middleware/PreventRequestsDuringMaintenance.php.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Middleware
+ ;
+
+
+
+ use
+
+ Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance
+
+ as
+
+ Middleware
+ ;
+
+
+
+ class
+
+ PreventRequestsDuringMaintenance
+
+ extends
+
+ Middleware
+
+
+ {
+
+
+
+ /**
+
+
+ * The URIs that should be reachable while maintenance mode is enabled.
+
+
+ *
+
+
+ * @var array<int, string>
+
+
+ */
+
+
+
+ protected
+
+ $except
+
+ =
+
+ [
+
+
+
+ //
+
+
+
+ ]
+ ;
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Middleware/RedirectIfAuthenticated.php.xml b/xml-coverage/Http/Middleware/RedirectIfAuthenticated.php.xml
new file mode 100644
index 0000000..f40bf97
--- /dev/null
+++ b/xml-coverage/Http/Middleware/RedirectIfAuthenticated.php.xml
@@ -0,0 +1,268 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Middleware
+ ;
+
+
+
+ use
+
+ App\Providers\RouteServiceProvider
+ ;
+
+
+ use
+
+ Closure
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Auth
+ ;
+
+
+ use
+
+ Symfony\Component\HttpFoundation\Response
+ ;
+
+
+
+ class
+
+ RedirectIfAuthenticated
+
+
+ {
+
+
+
+ /**
+
+
+ * Handle an incoming request.
+
+
+ *
+
+
+ * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
+
+
+ */
+
+
+
+ public
+
+ function
+
+ handle
+ (
+ Request
+
+ $request
+ ,
+
+ Closure
+
+ $next
+ ,
+
+ string
+
+ ...
+ $guards
+ )
+ :
+
+ Response
+
+
+
+ {
+
+
+
+ $guards
+
+ =
+
+ empty
+ (
+ $guards
+ )
+
+ ?
+
+ [
+ null
+ ]
+
+ :
+
+ $guards
+ ;
+
+
+
+
+ foreach
+
+ (
+ $guards
+
+ as
+
+ $guard
+ )
+
+ {
+
+
+
+ if
+
+ (
+ Auth
+ ::
+ guard
+ (
+ $guard
+ )
+ ->
+ check
+ (
+ )
+ )
+
+ {
+
+
+
+ return
+
+ redirect
+ (
+ RouteServiceProvider
+ ::
+ HOME
+ )
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
+
+
+ return
+
+ $next
+ (
+ $request
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Middleware/TrimStrings.php.xml b/xml-coverage/Http/Middleware/TrimStrings.php.xml
new file mode 100644
index 0000000..d427132
--- /dev/null
+++ b/xml-coverage/Http/Middleware/TrimStrings.php.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Middleware
+ ;
+
+
+
+ use
+
+ Illuminate\Foundation\Http\Middleware\TrimStrings
+
+ as
+
+ Middleware
+ ;
+
+
+
+ class
+
+ TrimStrings
+
+ extends
+
+ Middleware
+
+
+ {
+
+
+
+ /**
+
+
+ * The names of the attributes that should not be trimmed.
+
+
+ *
+
+
+ * @var array<int, string>
+
+
+ */
+
+
+
+ protected
+
+ $except
+
+ =
+
+ [
+
+
+
+ 'current_password'
+ ,
+
+
+
+ 'password'
+ ,
+
+
+
+ 'password_confirmation'
+ ,
+
+
+
+ ]
+ ;
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Middleware/TrustHosts.php.xml b/xml-coverage/Http/Middleware/TrustHosts.php.xml
new file mode 100644
index 0000000..3ed665b
--- /dev/null
+++ b/xml-coverage/Http/Middleware/TrustHosts.php.xml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Middleware
+ ;
+
+
+
+ use
+
+ Illuminate\Http\Middleware\TrustHosts
+
+ as
+
+ Middleware
+ ;
+
+
+
+ class
+
+ TrustHosts
+
+ extends
+
+ Middleware
+
+
+ {
+
+
+
+ /**
+
+
+ * Get the host patterns that should be trusted.
+
+
+ *
+
+
+ * @return array<int, string|null>
+
+
+ */
+
+
+
+ public
+
+ function
+
+ hosts
+ (
+ )
+ :
+
+ array
+
+
+
+ {
+
+
+
+ return
+
+ [
+
+
+
+ $this
+ ->
+ allSubdomainsOfApplicationUrl
+ (
+ )
+ ,
+
+
+
+ ]
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Middleware/TrustProxies.php.xml b/xml-coverage/Http/Middleware/TrustProxies.php.xml
new file mode 100644
index 0000000..0c34faa
--- /dev/null
+++ b/xml-coverage/Http/Middleware/TrustProxies.php.xml
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Middleware
+ ;
+
+
+
+ use
+
+ Illuminate\Http\Middleware\TrustProxies
+
+ as
+
+ Middleware
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+
+ class
+
+ TrustProxies
+
+ extends
+
+ Middleware
+
+
+ {
+
+
+
+ /**
+
+
+ * The trusted proxies for this application.
+
+
+ *
+
+
+ * @var array<int, string>|string|null
+
+
+ */
+
+
+
+ protected
+
+ $proxies
+ ;
+
+
+
+
+ /**
+
+
+ * The headers that should be used to detect proxies.
+
+
+ *
+
+
+ * @var int
+
+
+ */
+
+
+
+ protected
+
+ $headers
+
+ =
+
+
+
+ Request
+ ::
+ HEADER_X_FORWARDED_FOR
+
+ |
+
+
+
+ Request
+ ::
+ HEADER_X_FORWARDED_HOST
+
+ |
+
+
+
+ Request
+ ::
+ HEADER_X_FORWARDED_PORT
+
+ |
+
+
+
+ Request
+ ::
+ HEADER_X_FORWARDED_PROTO
+
+ |
+
+
+
+ Request
+ ::
+ HEADER_X_FORWARDED_AWS_ELB
+ ;
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Middleware/UserLastSeenAtMiddleware.php.xml b/xml-coverage/Http/Middleware/UserLastSeenAtMiddleware.php.xml
new file mode 100644
index 0000000..fc11299
--- /dev/null
+++ b/xml-coverage/Http/Middleware/UserLastSeenAtMiddleware.php.xml
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Middleware
+ ;
+
+
+
+ use
+
+ Closure
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Symfony\Component\HttpFoundation\Response
+ ;
+
+
+
+ class
+
+ UserLastSeenAtMiddleware
+
+
+ {
+
+
+
+ /**
+
+
+ * Handle an incoming request.
+
+
+ *
+
+
+ * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
+
+
+ */
+
+
+
+ public
+
+ function
+
+ handle
+ (
+ Request
+
+ $request
+ ,
+
+ Closure
+
+ $next
+ )
+ :
+
+ Response
+
+
+
+ {
+
+
+
+ if
+ (
+ auth
+ (
+ )
+ ->
+ check
+ (
+ )
+ )
+
+ {
+
+
+
+ auth
+ (
+ )
+ ->
+ user
+ (
+ )
+ ->
+ update
+ (
+ [
+
+
+
+ 'last_seen_at'
+
+ =>
+
+ now
+ (
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ return
+
+ $next
+ (
+ $request
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Middleware/ValidateSignature.php.xml b/xml-coverage/Http/Middleware/ValidateSignature.php.xml
new file mode 100644
index 0000000..3093340
--- /dev/null
+++ b/xml-coverage/Http/Middleware/ValidateSignature.php.xml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Middleware
+ ;
+
+
+
+ use
+
+ Illuminate\Routing\Middleware\ValidateSignature
+
+ as
+
+ Middleware
+ ;
+
+
+
+ class
+
+ ValidateSignature
+
+ extends
+
+ Middleware
+
+
+ {
+
+
+
+ /**
+
+
+ * The names of the query string parameters that should be ignored.
+
+
+ *
+
+
+ * @var array<int, string>
+
+
+ */
+
+
+
+ protected
+
+ $except
+
+ =
+
+ [
+
+
+
+ // 'fbclid',
+
+
+
+ // 'utm_campaign',
+
+
+
+ // 'utm_content',
+
+
+
+ // 'utm_medium',
+
+
+
+ // 'utm_source',
+
+
+
+ // 'utm_term',
+
+
+
+ ]
+ ;
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Middleware/VerifyCsrfToken.php.xml b/xml-coverage/Http/Middleware/VerifyCsrfToken.php.xml
new file mode 100644
index 0000000..5439ee7
--- /dev/null
+++ b/xml-coverage/Http/Middleware/VerifyCsrfToken.php.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Middleware
+ ;
+
+
+
+ use
+
+ Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
+
+ as
+
+ Middleware
+ ;
+
+
+
+ class
+
+ VerifyCsrfToken
+
+ extends
+
+ Middleware
+
+
+ {
+
+
+
+ /**
+
+
+ * The URIs that should be excluded from CSRF verification.
+
+
+ *
+
+
+ * @var array<int, string>
+
+
+ */
+
+
+
+ protected
+
+ $except
+
+ =
+
+ [
+
+
+
+ //
+
+
+
+ ]
+ ;
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Requests/Auth/LoginRequest.php.xml b/xml-coverage/Http/Requests/Auth/LoginRequest.php.xml
new file mode 100644
index 0000000..a43cbf6
--- /dev/null
+++ b/xml-coverage/Http/Requests/Auth/LoginRequest.php.xml
@@ -0,0 +1,631 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Requests\Auth
+ ;
+
+
+
+ use
+
+ Illuminate\Auth\Events\Lockout
+ ;
+
+
+ use
+
+ Illuminate\Foundation\Http\FormRequest
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Auth
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\RateLimiter
+ ;
+
+
+ use
+
+ Illuminate\Support\Str
+ ;
+
+
+ use
+
+ Illuminate\Validation\ValidationException
+ ;
+
+
+
+ class
+
+ LoginRequest
+
+ extends
+
+ FormRequest
+
+
+ {
+
+
+
+ /**
+
+
+ * Determine if the user is authorized to make this request.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ authorize
+ (
+ )
+ :
+
+ bool
+
+
+
+ {
+
+
+
+ return
+
+ true
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Get the validation rules that apply to the request.
+
+
+ *
+
+
+ * @return array<string, \Illuminate\Contracts\Validation\Rule|array|string>
+
+
+ */
+
+
+
+ public
+
+ function
+
+ rules
+ (
+ )
+ :
+
+ array
+
+
+
+ {
+
+
+
+ return
+
+ [
+
+
+
+ 'email'
+
+ =>
+
+ [
+ 'required'
+ ,
+
+ 'string'
+ ,
+
+ 'email'
+ ]
+ ,
+
+
+
+ 'password'
+
+ =>
+
+ [
+ 'required'
+ ,
+
+ 'string'
+ ]
+ ,
+
+
+
+ ]
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Attempt to authenticate the request's credentials.
+
+
+ *
+
+
+ * @throws \Illuminate\Validation\ValidationException
+
+
+ */
+
+
+
+ public
+
+ function
+
+ authenticate
+ (
+ )
+ :
+
+ void
+
+
+
+ {
+
+
+
+ $this
+ ->
+ ensureIsNotRateLimited
+ (
+ )
+ ;
+
+
+
+
+ if
+
+ (
+ !
+
+ Auth
+ ::
+ attempt
+ (
+ $this
+ ->
+ only
+ (
+ 'email'
+ ,
+
+ 'password'
+ )
+ ,
+
+ $this
+ ->
+ boolean
+ (
+ 'remember'
+ )
+ )
+ )
+
+ {
+
+
+
+ RateLimiter
+ ::
+ hit
+ (
+ $this
+ ->
+ throttleKey
+ (
+ )
+ )
+ ;
+
+
+
+
+ throw
+
+ ValidationException
+ ::
+ withMessages
+ (
+ [
+
+
+
+ 'email'
+
+ =>
+
+ trans
+ (
+ 'auth.failed'
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ RateLimiter
+ ::
+ clear
+ (
+ $this
+ ->
+ throttleKey
+ (
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Ensure the login request is not rate limited.
+
+
+ *
+
+
+ * @throws \Illuminate\Validation\ValidationException
+
+
+ */
+
+
+
+ public
+
+ function
+
+ ensureIsNotRateLimited
+ (
+ )
+ :
+
+ void
+
+
+
+ {
+
+
+
+ if
+
+ (
+ !
+
+ RateLimiter
+ ::
+ tooManyAttempts
+ (
+ $this
+ ->
+ throttleKey
+ (
+ )
+ ,
+
+ 5
+ )
+ )
+
+ {
+
+
+
+ return
+ ;
+
+
+
+ }
+
+
+
+
+ event
+ (
+ new
+
+ Lockout
+ (
+ $this
+ )
+ )
+ ;
+
+
+
+
+ $seconds
+
+ =
+
+ RateLimiter
+ ::
+ availableIn
+ (
+ $this
+ ->
+ throttleKey
+ (
+ )
+ )
+ ;
+
+
+
+
+ throw
+
+ ValidationException
+ ::
+ withMessages
+ (
+ [
+
+
+
+ 'email'
+
+ =>
+
+ trans
+ (
+ 'auth.throttle'
+ ,
+
+ [
+
+
+
+ 'seconds'
+
+ =>
+
+ $seconds
+ ,
+
+
+
+ 'minutes'
+
+ =>
+
+ ceil
+ (
+ $seconds
+
+ /
+
+ 60
+ )
+ ,
+
+
+
+ ]
+ )
+ ,
+
+
+
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Get the rate limiting throttle key for the request.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ throttleKey
+ (
+ )
+ :
+
+ string
+
+
+
+ {
+
+
+
+ return
+
+ Str
+ ::
+ transliterate
+ (
+ Str
+ ::
+ lower
+ (
+ $this
+ ->
+ input
+ (
+ 'email'
+ )
+ )
+ .
+ '|'
+ .
+ $this
+ ->
+ ip
+ (
+ )
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Requests/ChatRequest.php.xml b/xml-coverage/Http/Requests/ChatRequest.php.xml
new file mode 100644
index 0000000..7af4f13
--- /dev/null
+++ b/xml-coverage/Http/Requests/ChatRequest.php.xml
@@ -0,0 +1,227 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Requests
+ ;
+
+
+
+ use
+
+ Illuminate\Foundation\Http\FormRequest
+ ;
+
+
+
+ class
+
+ ChatRequest
+
+ extends
+
+ FormRequest
+
+
+ {
+
+
+
+ /**
+
+
+ * Determine if the user is authorized to make this request.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ authorize
+ (
+ )
+ :
+
+ bool
+
+
+
+ {
+
+
+
+ return
+
+ true
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Get the validation rules that apply to the request.
+
+
+ *
+
+
+ * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array|string>
+
+
+ */
+
+
+
+ public
+
+ function
+
+ rules
+ (
+ )
+ :
+
+ array
+
+
+
+ {
+
+
+
+ return
+
+ [
+
+
+
+ 'message'
+
+ =>
+
+ [
+ 'required'
+ ,
+
+ 'string'
+ ]
+ ,
+
+
+
+ 'reply_id'
+
+ =>
+
+ [
+ 'nullable'
+ ,
+
+ 'integer'
+ ,
+
+ 'exists:chats,id'
+ ]
+ ,
+
+
+
+ ]
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Requests/ProfileUpdateRequest.php.xml b/xml-coverage/Http/Requests/ProfileUpdateRequest.php.xml
new file mode 100644
index 0000000..443b8d8
--- /dev/null
+++ b/xml-coverage/Http/Requests/ProfileUpdateRequest.php.xml
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Requests
+ ;
+
+
+
+ use
+
+ App\Models\User
+ ;
+
+
+ use
+
+ Illuminate\Foundation\Http\FormRequest
+ ;
+
+
+ use
+
+ Illuminate\Validation\Rule
+ ;
+
+
+
+ class
+
+ ProfileUpdateRequest
+
+ extends
+
+ FormRequest
+
+
+ {
+
+
+
+ /**
+
+
+ * Get the validation rules that apply to the request.
+
+
+ *
+
+
+ * @return array<string, \Illuminate\Contracts\Validation\Rule|array|string>
+
+
+ */
+
+
+
+ public
+
+ function
+
+ rules
+ (
+ )
+ :
+
+ array
+
+
+
+ {
+
+
+
+ return
+
+ [
+
+
+
+ 'name'
+
+ =>
+
+ [
+ 'string'
+ ,
+
+ 'max:255'
+ ]
+ ,
+
+
+
+ 'email'
+
+ =>
+
+ [
+ 'email'
+ ,
+
+ 'max:255'
+ ,
+
+ Rule
+ ::
+ unique
+ (
+ User
+ ::
+ class
+ )
+ ->
+ ignore
+ (
+ $this
+ ->
+ user
+ (
+ )
+ ->
+ id
+ )
+ ]
+ ,
+
+
+
+ ]
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Resources/MessageResource.php.xml b/xml-coverage/Http/Resources/MessageResource.php.xml
new file mode 100644
index 0000000..28b9658
--- /dev/null
+++ b/xml-coverage/Http/Resources/MessageResource.php.xml
@@ -0,0 +1,410 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Resources
+ ;
+
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Illuminate\Http\Resources\Json\JsonResource
+ ;
+
+
+
+ class
+
+ MessageResource
+
+ extends
+
+ JsonResource
+
+
+ {
+
+
+
+ /**
+
+
+ * Transform the resource into an array.
+
+
+ *
+
+
+ * @return array<string, mixed>
+
+
+ */
+
+
+
+ public
+
+ function
+
+ toArray
+ (
+ Request
+
+ $request
+ )
+ :
+
+ array
+
+
+
+ {
+
+
+
+ return
+
+ [
+
+
+
+ 'id'
+
+ =>
+
+ $this
+ ->
+ id
+ ,
+
+
+
+ 'sender_id'
+
+ =>
+
+ $this
+ ->
+ sender_id
+ ,
+
+
+
+ 'sender_name'
+
+ =>
+
+ $this
+ ->
+ whenLoaded
+ (
+ 'sender'
+ ,
+
+ function
+
+ (
+ )
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ sender
+ ->
+ name
+ ;
+
+
+
+ }
+ )
+ ,
+
+
+
+ 'receiver_id'
+
+ =>
+
+ $this
+ ->
+ receiver_id
+ ,
+
+
+
+ 'receiver_name'
+
+ =>
+
+ $this
+ ->
+ whenLoaded
+ (
+ 'receiver'
+ ,
+
+ function
+
+ (
+ )
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ receiver
+ ->
+ name
+ ;
+
+
+
+ }
+ )
+ ,
+
+
+
+ 'reply'
+
+ =>
+
+ $this
+ ->
+ whenLoaded
+ (
+ 'reply'
+ ,
+
+ function
+
+ (
+ )
+
+ {
+
+
+
+ return
+
+ new
+
+ MessageResource
+ (
+ $this
+ ->
+ reply
+ )
+ ;
+
+
+
+ }
+ )
+ ,
+
+
+
+ 'message'
+
+ =>
+
+ $this
+ ->
+ message_deleted_at
+
+ ?
+
+ 'This message was deleted'
+
+ :
+
+ $this
+ ->
+ message
+ ,
+
+
+
+ 'seen_at'
+
+ =>
+
+ $this
+ ->
+ seen_at
+ ?->
+ format
+ (
+ 'Y-m-d H:i:s'
+ )
+ ,
+
+
+
+ 'message_deleted_at'
+
+ =>
+
+ $this
+ ->
+ message_deleted_at
+ ?->
+ format
+ (
+ 'Y-m-d H:i:s'
+ )
+ ,
+
+
+
+ 'sent_at'
+
+ =>
+
+ $this
+ ->
+ created_at
+ ?->
+ format
+ (
+ 'H:i'
+ )
+ ,
+
+
+
+ ]
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Resources/UserCollection.php.xml b/xml-coverage/Http/Resources/UserCollection.php.xml
new file mode 100644
index 0000000..7d69d01
--- /dev/null
+++ b/xml-coverage/Http/Resources/UserCollection.php.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Resources
+ ;
+
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Illuminate\Http\Resources\Json\ResourceCollection
+ ;
+
+
+
+ /** @see \App\Models\User */
+
+
+ class
+
+ UserCollection
+
+ extends
+
+ ResourceCollection
+
+
+ {
+
+
+
+ public
+
+ function
+
+ toArray
+ (
+ Request
+
+ $request
+ )
+ :
+
+ array
+
+
+
+ {
+
+
+
+ return
+
+ [
+
+
+
+ 'data'
+
+ =>
+
+ $this
+ ->
+ collection
+ ,
+
+
+
+ ]
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Http/Resources/UserResource.php.xml b/xml-coverage/Http/Resources/UserResource.php.xml
new file mode 100644
index 0000000..08b5fa3
--- /dev/null
+++ b/xml-coverage/Http/Resources/UserResource.php.xml
@@ -0,0 +1,324 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Http\Resources
+ ;
+
+
+
+ use
+
+ App\Helpers\Helper
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Illuminate\Http\Resources\Json\JsonResource
+ ;
+
+
+
+ class
+
+ UserResource
+
+ extends
+
+ JsonResource
+
+
+ {
+
+
+
+ /**
+
+
+ * Transform the resource into an array.
+
+
+ *
+
+
+ * @return array<string, mixed>
+
+
+ */
+
+
+
+ public
+
+ function
+
+ toArray
+ (
+ Request
+
+ $request
+ )
+ :
+
+ array
+
+
+
+ {
+
+
+
+ return
+
+ [
+
+
+
+ 'id'
+
+ =>
+
+ $this
+ ->
+ id
+ ,
+
+
+
+ 'uuid'
+
+ =>
+
+ $this
+ ->
+ uuid
+ ,
+
+
+
+ 'username'
+
+ =>
+
+ $this
+ ->
+ username
+ ,
+
+
+
+ 'name'
+
+ =>
+
+ $this
+ ->
+ name
+ ,
+
+
+
+ 'email'
+
+ =>
+
+ $this
+ ->
+ email
+ ,
+
+
+
+ 'last_seen_at'
+
+ =>
+
+ Helper
+ ::
+ userLastActivityStatus
+ (
+ $this
+ ->
+ last_seen_at
+ )
+ ,
+
+
+
+ 'messages'
+
+ =>
+
+ MessageResource
+ ::
+ collection
+ (
+ $this
+ ->
+ whenLoaded
+ (
+ 'messages'
+ )
+ )
+ ,
+
+
+
+ 'messages_count'
+
+ =>
+
+ $this
+ ->
+ whenCounted
+ (
+ 'messages'
+ ,
+
+ $this
+ ->
+ messages_count
+ )
+ ,
+
+
+
+ 'receive_messages'
+
+ =>
+
+ MessageResource
+ ::
+ collection
+ (
+ $this
+ ->
+ whenLoaded
+ (
+ 'receiveMessages'
+ )
+ )
+ ,
+
+
+
+ 'send_messages'
+
+ =>
+
+ MessageResource
+ ::
+ collection
+ (
+ $this
+ ->
+ whenLoaded
+ (
+ 'sendMessages'
+ )
+ )
+ ,
+
+
+
+ ]
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Models/Chat.php.xml b/xml-coverage/Models/Chat.php.xml
new file mode 100644
index 0000000..ecb6a39
--- /dev/null
+++ b/xml-coverage/Models/Chat.php.xml
@@ -0,0 +1,324 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Models
+ ;
+
+
+
+ use
+
+ Illuminate\Database\Eloquent\Factories\HasFactory
+ ;
+
+
+ use
+
+ Illuminate\Database\Eloquent\Model
+ ;
+
+
+
+ class
+
+ Chat
+
+ extends
+
+ Model
+
+
+ {
+
+
+
+ use
+
+ HasFactory
+ ;
+
+
+
+
+ protected
+
+ $fillable
+
+ =
+
+ [
+ 'sender_id'
+ ,
+
+ 'receiver_id'
+ ,
+
+ 'message'
+ ,
+
+ 'reply_id'
+ ,
+
+ 'seen_at'
+ ,
+
+ 'message_deleted_at'
+ ]
+ ;
+
+
+
+
+ protected
+
+ $casts
+
+ =
+
+ [
+
+
+
+ 'seen_at'
+
+ =>
+
+ 'datetime'
+ ,
+
+
+
+ 'message_deleted_at'
+
+ =>
+
+ 'datetime'
+ ,
+
+
+
+ ]
+ ;
+
+
+
+
+ public
+
+ function
+
+ user
+ (
+ )
+ :
+
+ \Illuminate\Database\Eloquent\Relations\BelongsTo
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ belongsTo
+ (
+ User
+ ::
+ class
+ ,
+
+ 'sender_id'
+ ,
+
+ 'id'
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ public
+
+ function
+
+ reply
+ (
+ )
+ :
+
+ \Illuminate\Database\Eloquent\Relations\BelongsTo
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ belongsTo
+ (
+ Chat
+ ::
+ class
+ ,
+
+ 'reply_id'
+ ,
+
+ 'id'
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ public
+
+ function
+
+ receiver
+ (
+ )
+ :
+
+ \Illuminate\Database\Eloquent\Relations\BelongsTo
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ belongsTo
+ (
+ User
+ ::
+ class
+ ,
+
+ 'receiver_id'
+ ,
+
+ 'id'
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ public
+
+ function
+
+ sender
+ (
+ )
+ :
+
+ \Illuminate\Database\Eloquent\Relations\BelongsTo
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ belongsTo
+ (
+ User
+ ::
+ class
+ ,
+
+ 'sender_id'
+ ,
+
+ 'id'
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Models/User.php.xml b/xml-coverage/Models/User.php.xml
new file mode 100644
index 0000000..63b3e52
--- /dev/null
+++ b/xml-coverage/Models/User.php.xml
@@ -0,0 +1,538 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Models
+ ;
+
+
+
+ // use Illuminate\Contracts\Auth\MustVerifyEmail;
+
+
+ use
+
+ Illuminate\Database\Eloquent\Factories\HasFactory
+ ;
+
+
+ use
+
+ Illuminate\Foundation\Auth\User
+
+ as
+
+ Authenticatable
+ ;
+
+
+ use
+
+ Illuminate\Notifications\Notifiable
+ ;
+
+
+ use
+
+ Laravel\Sanctum\HasApiTokens
+ ;
+
+
+ use
+
+ Laravel\Scout\Searchable
+ ;
+
+
+
+ class
+
+ User
+
+ extends
+
+ Authenticatable
+
+
+ {
+
+
+
+ use
+
+ HasApiTokens
+ ,
+
+ HasFactory
+ ,
+
+ Notifiable
+ ,
+
+ Searchable
+ ;
+
+
+
+
+ /**
+
+
+ * The attributes that are mass assignable.
+
+
+ *
+
+
+ * @var array<int, string>
+
+
+ */
+
+
+
+ protected
+
+ $fillable
+
+ =
+
+ [
+
+
+
+ 'name'
+ ,
+
+
+
+ 'username'
+ ,
+
+
+
+ 'email'
+ ,
+
+
+
+ 'password'
+ ,
+
+
+
+ 'uuid'
+ ,
+
+
+
+ 'last_seen_at'
+ ,
+
+
+
+ 'status'
+
+
+
+ ]
+ ;
+
+
+
+
+ /**
+
+
+ * The attributes that should be hidden for serialization.
+
+
+ *
+
+
+ * @var array<int, string>
+
+
+ */
+
+
+
+ protected
+
+ $hidden
+
+ =
+
+ [
+
+
+
+ 'password'
+ ,
+
+
+
+ 'remember_token'
+ ,
+
+
+
+ ]
+ ;
+
+
+
+
+ /**
+
+
+ * The attributes that should be cast.
+
+
+ *
+
+
+ * @var array<string, string>
+
+
+ */
+
+
+
+ protected
+
+ $casts
+
+ =
+
+ [
+
+
+
+ 'email_verified_at'
+
+ =>
+
+ 'datetime'
+ ,
+
+
+
+ 'password'
+
+ =>
+
+ 'hashed'
+ ,
+
+
+
+ 'last_seen_at'
+
+ =>
+
+ 'datetime'
+ ,
+
+
+
+ ]
+ ;
+
+
+
+
+ public
+
+ function
+
+ searchableAs
+ (
+ )
+ :
+
+ string
+
+
+
+ {
+
+
+
+ return
+
+ 'users_index'
+ ;
+
+
+
+ }
+
+
+
+
+ public
+
+ function
+
+ toSearchableArray
+ (
+ )
+ :
+
+ array
+
+
+
+ {
+
+
+
+ return
+
+ [
+
+
+
+ 'name'
+
+ =>
+
+ $this
+ ->
+ name
+ ,
+
+
+
+ 'username'
+
+ =>
+
+ $this
+ ->
+ username
+ ,
+
+
+
+ ]
+ ;
+
+
+
+ }
+
+
+
+
+ public
+
+ function
+
+ receiveMessages
+ (
+ )
+ :
+
+ \Illuminate\Database\Eloquent\Relations\HasMany
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ hasMany
+ (
+ Chat
+ ::
+ class
+ ,
+
+ 'receiver_id'
+ ,
+
+ 'id'
+ )
+ ->
+ orderByDesc
+ (
+ 'id'
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ public
+
+ function
+
+ sendMessages
+ (
+ )
+ :
+
+ \Illuminate\Database\Eloquent\Relations\HasMany
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ hasMany
+ (
+ Chat
+ ::
+ class
+ ,
+
+ 'sender_id'
+ ,
+
+ 'id'
+ )
+ ->
+ orderByDesc
+ (
+ 'id'
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ public
+
+ function
+
+ messages
+ (
+ )
+ :
+
+ \Illuminate\Database\Eloquent\Relations\HasMany
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ hasMany
+ (
+ Chat
+ ::
+ class
+ ,
+
+ 'sender_id'
+ ,
+
+ 'id'
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Providers/AppServiceProvider.php.xml b/xml-coverage/Providers/AppServiceProvider.php.xml
new file mode 100644
index 0000000..02413f9
--- /dev/null
+++ b/xml-coverage/Providers/AppServiceProvider.php.xml
@@ -0,0 +1,628 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Providers
+ ;
+
+
+
+ use
+
+ App\Helpers\Helper
+ ;
+
+
+ use
+
+ Illuminate\Support\ServiceProvider
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Schema
+ ;
+
+
+
+ class
+
+ AppServiceProvider
+
+ extends
+
+ ServiceProvider
+
+
+ {
+
+
+
+ /**
+
+
+ * Register any application services.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ register
+ (
+ )
+ :
+
+ void
+
+
+
+ {
+
+
+
+ //
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Bootstrap any application services.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ boot
+ (
+ )
+ :
+
+ void
+
+
+
+ {
+
+
+
+ Schema
+ ::
+ defaultStringLength
+ (
+ 191
+ )
+ ;
+
+
+
+
+ \Broadcast
+ ::
+ channel
+ (
+ 'online-users'
+ ,
+
+ function
+
+ (
+ $user
+ )
+
+ {
+
+
+
+ return
+
+ [
+
+
+
+ 'id'
+
+ =>
+
+ $user
+ ->
+ id
+ ,
+
+
+
+ 'name'
+
+ =>
+
+ $user
+ ->
+ name
+ ,
+
+
+
+ 'uuid'
+
+ =>
+
+ $user
+ ->
+ uuid
+ ,
+
+
+
+ 'last_seen_at'
+
+ =>
+
+ Helper
+ ::
+ userLastActivityStatus
+ (
+ $user
+ ->
+ last_seen_at
+ )
+ ,
+
+
+
+ ]
+ ;
+
+
+
+ }
+ )
+ ;
+
+
+
+ Schema
+ ::
+ defaultStringLength
+ (
+ 191
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Providers/AuthServiceProvider.php.xml b/xml-coverage/Providers/AuthServiceProvider.php.xml
new file mode 100644
index 0000000..997faa0
--- /dev/null
+++ b/xml-coverage/Providers/AuthServiceProvider.php.xml
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Providers
+ ;
+
+
+
+ // use Illuminate\Support\Facades\Gate;
+
+
+ use
+
+ Illuminate\Foundation\Support\Providers\AuthServiceProvider
+
+ as
+
+ ServiceProvider
+ ;
+
+
+
+ class
+
+ AuthServiceProvider
+
+ extends
+
+ ServiceProvider
+
+
+ {
+
+
+
+ /**
+
+
+ * The model to policy mappings for the application.
+
+
+ *
+
+
+ * @var array<class-string, class-string>
+
+
+ */
+
+
+
+ protected
+
+ $policies
+
+ =
+
+ [
+
+
+
+ //
+
+
+
+ ]
+ ;
+
+
+
+
+ /**
+
+
+ * Register any authentication / authorization services.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ boot
+ (
+ )
+ :
+
+ void
+
+
+
+ {
+
+
+
+ //
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Providers/BroadcastServiceProvider.php.xml b/xml-coverage/Providers/BroadcastServiceProvider.php.xml
new file mode 100644
index 0000000..7965b26
--- /dev/null
+++ b/xml-coverage/Providers/BroadcastServiceProvider.php.xml
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Providers
+ ;
+
+
+
+ use
+
+ Illuminate\Support\Facades\Broadcast
+ ;
+
+
+ use
+
+ Illuminate\Support\ServiceProvider
+ ;
+
+
+
+ class
+
+ BroadcastServiceProvider
+
+ extends
+
+ ServiceProvider
+
+
+ {
+
+
+
+ /**
+
+
+ * Bootstrap any application services.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ boot
+ (
+ )
+ :
+
+ void
+
+
+
+ {
+
+
+
+ Broadcast
+ ::
+ routes
+ (
+ )
+ ;
+
+
+
+
+ require
+
+ base_path
+ (
+ 'routes/channels.php'
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Providers/EventServiceProvider.php.xml b/xml-coverage/Providers/EventServiceProvider.php.xml
new file mode 100644
index 0000000..bc509a1
--- /dev/null
+++ b/xml-coverage/Providers/EventServiceProvider.php.xml
@@ -0,0 +1,361 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Providers
+ ;
+
+
+
+ use
+
+ Illuminate\Auth\Events\Registered
+ ;
+
+
+ use
+
+ Illuminate\Auth\Listeners\SendEmailVerificationNotification
+ ;
+
+
+ use
+
+ Illuminate\Foundation\Support\Providers\EventServiceProvider
+
+ as
+
+ ServiceProvider
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Event
+ ;
+
+
+
+ class
+
+ EventServiceProvider
+
+ extends
+
+ ServiceProvider
+
+
+ {
+
+
+
+ /**
+
+
+ * The event to listener mappings for the application.
+
+
+ *
+
+
+ * @var array<class-string, array<int, class-string>>
+
+
+ */
+
+
+
+ protected
+
+ $listen
+
+ =
+
+ [
+
+
+
+ Registered
+ ::
+ class
+
+ =>
+
+ [
+
+
+
+ SendEmailVerificationNotification
+ ::
+ class
+ ,
+
+
+
+ ]
+ ,
+
+
+
+ ]
+ ;
+
+
+
+
+ /**
+
+
+ * Register any events for your application.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ boot
+ (
+ )
+ :
+
+ void
+
+
+
+ {
+
+
+
+ //
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Determine if events and listeners should be automatically discovered.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ shouldDiscoverEvents
+ (
+ )
+ :
+
+ bool
+
+
+
+ {
+
+
+
+ return
+
+ false
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/Providers/RouteServiceProvider.php.xml b/xml-coverage/Providers/RouteServiceProvider.php.xml
new file mode 100644
index 0000000..a9cde5e
--- /dev/null
+++ b/xml-coverage/Providers/RouteServiceProvider.php.xml
@@ -0,0 +1,984 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ App\Providers
+ ;
+
+
+
+ use
+
+ Illuminate\Cache\RateLimiting\Limit
+ ;
+
+
+ use
+
+ Illuminate\Foundation\Support\Providers\RouteServiceProvider
+
+ as
+
+ ServiceProvider
+ ;
+
+
+ use
+
+ Illuminate\Http\Request
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\RateLimiter
+ ;
+
+
+ use
+
+ Illuminate\Support\Facades\Route
+ ;
+
+
+
+ class
+
+ RouteServiceProvider
+
+ extends
+
+ ServiceProvider
+
+
+ {
+
+
+
+ /**
+
+
+ * The path to your application's "home" route.
+
+
+ *
+
+
+ * Typically, users are redirected here after authentication.
+
+
+ *
+
+
+ * @var string
+
+
+ */
+
+
+
+ public
+
+ const
+
+ HOME
+
+ =
+
+ '/chat'
+ ;
+
+
+
+
+ /**
+
+
+ * Define your route model bindings, pattern filters, and other route configuration.
+
+
+ */
+
+
+
+ public
+
+ function
+
+ boot
+ (
+ )
+ :
+
+ void
+
+
+
+ {
+
+
+
+ RateLimiter
+ ::
+ for
+ (
+ 'api'
+ ,
+
+ function
+
+ (
+ Request
+
+ $request
+ )
+
+ {
+
+
+
+ return
+
+ Limit
+ ::
+ perMinute
+ (
+ 60
+ )
+ ->
+ by
+ (
+ $request
+ ->
+ user
+ (
+ )
+ ?->
+ id
+
+ ?
+ :
+
+ $request
+ ->
+ ip
+ (
+ )
+ )
+ ;
+
+
+
+ }
+ )
+ ;
+
+
+
+
+ $this
+ ->
+ routes
+ (
+ function
+
+ (
+ )
+
+ {
+
+
+
+ Route
+ ::
+ middleware
+ (
+ 'api'
+ )
+
+
+
+ ->
+ prefix
+ (
+ 'api'
+ )
+
+
+
+ ->
+ group
+ (
+ base_path
+ (
+ 'routes/api.php'
+ )
+ )
+ ;
+
+
+
+
+ Route
+ ::
+ middleware
+ (
+ 'web'
+ )
+
+
+
+ ->
+ group
+ (
+ base_path
+ (
+ 'routes/web.php'
+ )
+ )
+ ;
+
+
+
+ }
+ )
+ ;
+
+
+
+ }
+
+
+ }
+
+
+
+
+
diff --git a/xml-coverage/index.xml b/xml-coverage/index.xml
new file mode 100644
index 0000000..1a4ddf5
--- /dev/null
+++ b/xml-coverage/index.xml
@@ -0,0 +1,600 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+