From fe8ecb9d6783c975c99928a23c28d5e9d203f0e4 Mon Sep 17 00:00:00 2001 From: rbruhn Date: Sun, 1 Nov 2026 11:57:28 -0500 Subject: [PATCH] Upgrade to Laravel 13 and move from Laravel Mix to Vite [major] Laravel 13 - laravel/framework ^13.0 (13.39.0), with minor package updates - Filament panel uses PreventRequestForgery, the new name of VerifyCsrfToken - Providers move to bootstrap/providers.php; api and broadcast channel routes load from bootstrap/app.php - Remove the pre-Laravel 11 Auth, Broadcast, Event and Route service providers and the unused app/Http/Middleware classes; the Super Admin gate moves to AppServiceProvider and Fortify's home is '/admin' - Fixes duplicate verification emails: SendEmailVerificationNotification was registered on Registered twice (the old EventServiceProvider and the framework's) Vite - vite.config.js replaces webpack.mix.js; yarn dev / yarn build - Blade loads assets with @vite and Vite::asset(); images are versioned in public/build - Isotope and imagesLoaded come from npm as jQuery plugins instead of vendored bundles; lodash and the separate postcss dependency are removed - The reCAPTCHA script waits for DOMContentLoaded, since the module script is deferred - Removes laravel-mix/webpack and with them every open npm security alert (webpack-dev-server, webpack-dev-middleware, uuid, elliptic); yarn audit is clean Deploy - CI builds with yarn build and checks for the Vite manifest - public/build ships with each release; public/css, js, fonts, images, svg and mix-manifest.json are no longer shared (the database has no links to them) Supersedes Dependabot #130 (laravel/framework 13.39.0) and #131 (axios 1.21.0, postcss). --- .github/workflows/deploy-environment.yml | 5 +- .gitignore | 4 +- app/Http/Middleware/Authenticate.php | 38 - .../PreventRequestsDuringMaintenance.php | 34 - .../Middleware/RedirectIfAuthenticated.php | 49 - app/Http/Middleware/TrimStrings.php | 36 - app/Http/Middleware/TrustHosts.php | 37 - app/Http/Middleware/TrustProxies.php | 45 - app/Http/Middleware/ValidateSignature.php | 39 - app/Providers/AppServiceProvider.php | 7 + app/Providers/AuthServiceProvider.php | 52 - app/Providers/BroadcastServiceProvider.php | 38 - app/Providers/EventServiceProvider.php | 59 - app/Providers/Filament/AdminPanelProvider.php | 7 +- app/Providers/RouteServiceProvider.php | 69 - bootstrap/app.php | 2 + .../providers.php | 27 +- composer.json | 2 +- composer.lock | 1143 ++-- config/app.php | 61 +- config/fortify.php | 3 +- deploy.php | 10 +- package.json | 20 +- resources/js/app.js | 6 +- resources/js/bootstrap.js | 21 +- resources/js/vendor/imagesloaded.pkgd.min.js | 7 - resources/js/vendor/isotope.pkgd.min.js | 12 - resources/views/auth/login.blade.php | 2 +- resources/views/calendar.blade.php | 6 +- resources/views/catalog.blade.php | 6 +- resources/views/components/footer.blade.php | 8 +- .../views/components/header-navbar.blade.php | 4 +- resources/views/contact.blade.php | 6 +- resources/views/course.blade.php | 2 +- resources/views/home.blade.php | 16 +- resources/views/layouts/app.blade.php | 5 +- resources/views/partials/recaptcha.blade.php | 3 +- resources/views/team.blade.php | 6 +- routes/api.php | 3 +- routes/web.php | 2 +- tests/Feature/EmailVerificationTest.php | 9 +- tests/Feature/LoginTest.php | 3 +- tests/Feature/RegistrationTest.php | 6 +- tests/TestCase.php | 4 +- .../EncryptCookies.php => vite.config.js | 25 +- webpack.mix.js | 36 - yarn.lock | 5826 ++--------------- 47 files changed, 1196 insertions(+), 6615 deletions(-) delete mode 100644 app/Http/Middleware/Authenticate.php delete mode 100644 app/Http/Middleware/PreventRequestsDuringMaintenance.php delete mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php delete mode 100644 app/Http/Middleware/TrimStrings.php delete mode 100644 app/Http/Middleware/TrustHosts.php delete mode 100644 app/Http/Middleware/TrustProxies.php delete mode 100644 app/Http/Middleware/ValidateSignature.php delete mode 100644 app/Providers/AuthServiceProvider.php delete mode 100644 app/Providers/BroadcastServiceProvider.php delete mode 100644 app/Providers/EventServiceProvider.php delete mode 100644 app/Providers/RouteServiceProvider.php rename app/Http/Middleware/VerifyCsrfToken.php => bootstrap/providers.php (70%) delete mode 100644 resources/js/vendor/imagesloaded.pkgd.min.js delete mode 100644 resources/js/vendor/isotope.pkgd.min.js rename app/Http/Middleware/EncryptCookies.php => vite.config.js (70%) delete mode 100644 webpack.mix.js diff --git a/.github/workflows/deploy-environment.yml b/.github/workflows/deploy-environment.yml index 0e03c75..90d36ac 100644 --- a/.github/workflows/deploy-environment.yml +++ b/.github/workflows/deploy-environment.yml @@ -83,12 +83,13 @@ jobs: run: yarn install --frozen-lockfile --ignore-engines - name: Build assets - run: npm run production + run: yarn build - name: Create deployment package run: | rm -rf deployment-package || true TEMP_DIR=$(mktemp -d) + # Includes Vite's public/build rsync -av \ --exclude=node_modules \ --exclude=.git \ @@ -97,7 +98,7 @@ jobs: --exclude=storage/logs \ --exclude=vendor \ . "$TEMP_DIR/" - cp -r public/css public/js public/fonts public/images public/svg public/mix-manifest.json "$TEMP_DIR/public/" || true + test -f "$TEMP_DIR/public/build/manifest.json" mv "$TEMP_DIR" deployment-package - name: Upload deployment artifact diff --git a/.gitignore b/.gitignore index 1bf3d2e..cad3fb2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,10 @@ /node_modules +/public/build +/public/hot /public/storage /public/css /public/fonts -/public/images /public/js -/public/mix-manifest.json /storage/*.key /vendor .env diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php deleted file mode 100644 index 217bcde..0000000 --- a/app/Http/Middleware/Authenticate.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -namespace App\Http\Middleware; - -use Illuminate\Auth\Middleware\Authenticate as Middleware; - -class Authenticate extends Middleware -{ - /** - * Get the path the user should be redirected to when they are not authenticated. - * - * @param \Illuminate\Http\Request $request - * @return string|null - */ - protected function redirectTo($request) - { - if (! $request->expectsJson()) { - return route('login'); - } - } -} diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php deleted file mode 100644 index 1625e7b..0000000 --- a/app/Http/Middleware/PreventRequestsDuringMaintenance.php +++ /dev/null @@ -1,34 +0,0 @@ -. - */ - -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 - */ - protected $except = [ - // - ]; -} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php deleted file mode 100644 index 792405e..0000000 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ /dev/null @@ -1,49 +0,0 @@ -. - */ - -namespace App\Http\Middleware; - -use App\Providers\RouteServiceProvider; -use Closure; -use Illuminate\Http\Request; -use Illuminate\Support\Facades\Auth; - -class RedirectIfAuthenticated -{ - /** - * Handle an incoming request. - * - * @param \Illuminate\Http\Request $request - * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next - * @param string|null ...$guards - * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse - */ - public function handle(Request $request, Closure $next, ...$guards) - { - $guards = empty($guards) ? [null] : $guards; - - foreach ($guards as $guard) { - if (Auth::guard($guard)->check()) { - return redirect(RouteServiceProvider::HOME); - } - } - - return $next($request); - } -} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php deleted file mode 100644 index 956fa9b..0000000 --- a/app/Http/Middleware/TrimStrings.php +++ /dev/null @@ -1,36 +0,0 @@ -. - */ - -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 - */ - protected $except = [ - 'current_password', - 'password', - 'password_confirmation', - ]; -} diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php deleted file mode 100644 index c68432a..0000000 --- a/app/Http/Middleware/TrustHosts.php +++ /dev/null @@ -1,37 +0,0 @@ -. - */ - -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 - */ - public function hosts() - { - return [ - $this->allSubdomainsOfApplicationUrl(), - ]; - } -} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php deleted file mode 100644 index 88b33b9..0000000 --- a/app/Http/Middleware/TrustProxies.php +++ /dev/null @@ -1,45 +0,0 @@ -. - */ - -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|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/app/Http/Middleware/ValidateSignature.php b/app/Http/Middleware/ValidateSignature.php deleted file mode 100644 index e6c909f..0000000 --- a/app/Http/Middleware/ValidateSignature.php +++ /dev/null @@ -1,39 +0,0 @@ -. - */ - -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 - */ - protected $except = [ - // 'fbclid', - // 'utm_campaign', - // 'utm_content', - // 'utm_medium', - // 'utm_source', - // 'utm_term', - ]; -} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index f134854..41d09be 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -22,6 +22,7 @@ use App\View\Composers\CourseComposer; use App\View\Composers\NoticesComposer; +use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Schema; use Illuminate\Support\ServiceProvider; @@ -44,6 +45,12 @@ public function boot(): void { Schema::defaultStringLength(191); + // Implicitly grant "Super Admin" role all permissions + // This works in the app by using gate-related functions like auth()->user->can() and @can() + Gate::before(function ($user, $ability) { + return $user->hasRole('Super Admin') ? true : null; + }); + \View::composer( 'partials.notices', NoticesComposer::class ); diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php deleted file mode 100644 index 4d8805c..0000000 --- a/app/Providers/AuthServiceProvider.php +++ /dev/null @@ -1,52 +0,0 @@ -. - */ - -namespace App\Providers; - -// use Illuminate\Support\Facades\Gate; -use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; -use Illuminate\Support\Facades\Gate; - -class AuthServiceProvider extends ServiceProvider -{ - /** - * The model to policy mappings for the application. - * - * @var array - */ - protected $policies = [ - // 'App\Models\Model' => 'App\Policies\ModelPolicy', - ]; - - /** - * Register any authentication / authorization services. - * - * @return void - */ - public function boot() - { - $this->registerPolicies(); - - // Implicitly grant "Super Admin" role all permissions - // This works in the app by using gate-related functions like auth()->user->can() and @can() - Gate::before(function ($user, $ability) { - return $user->hasRole('Super Admin') ? true : null; - }); - } -} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php deleted file mode 100644 index 6aa141e..0000000 --- a/app/Providers/BroadcastServiceProvider.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -namespace App\Providers; - -use Illuminate\Support\Facades\Broadcast; -use Illuminate\Support\ServiceProvider; - -class BroadcastServiceProvider extends ServiceProvider -{ - /** - * Bootstrap any application services. - * - * @return void - */ - public function boot() - { - Broadcast::routes(); - - require base_path('routes/channels.php'); - } -} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php deleted file mode 100644 index e6fef98..0000000 --- a/app/Providers/EventServiceProvider.php +++ /dev/null @@ -1,59 +0,0 @@ -. - */ - -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> - */ - protected $listen = [ - Registered::class => [ - SendEmailVerificationNotification::class, - ], - ]; - - /** - * Register any events for your application. - * - * @return void - */ - public function boot() - { - // - } - - /** - * Determine if events and listeners should be automatically discovered. - * - * @return bool - */ - public function shouldDiscoverEvents() - { - return false; - } -} diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index b11bb41..fd1f702 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -20,6 +20,7 @@ namespace App\Providers\Filament; +use App\Filament\Admin\Widgets\UpcomingEventsWidget; use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\AuthenticateSession; use Filament\Http\Middleware\DisableBladeIconComponents; @@ -31,7 +32,7 @@ use Illuminate\Auth\Middleware\EnsureEmailIsVerified; use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse; use Illuminate\Cookie\Middleware\EncryptCookies; -use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken; +use Illuminate\Foundation\Http\Middleware\PreventRequestForgery; use Illuminate\Routing\Middleware\SubstituteBindings; use Illuminate\Session\Middleware\StartSession; use Illuminate\View\Middleware\ShareErrorsFromSession; @@ -81,7 +82,7 @@ public function panel(Panel $panel): Panel ]) ->discoverWidgets(in: app_path('Filament/Admin/Widgets'), for: 'App\Filament\Admin\Widgets') ->widgets([ - \App\Filament\Admin\Widgets\UpcomingEventsWidget::class, + UpcomingEventsWidget::class, ]) ->navigationItems([ NavigationItem::make('Website') @@ -100,7 +101,7 @@ public function panel(Panel $panel): Panel StartSession::class, AuthenticateSession::class, ShareErrorsFromSession::class, - VerifyCsrfToken::class, + PreventRequestForgery::class, SubstituteBindings::class, DisableBladeIconComponents::class, DispatchServingFilamentEvent::class, diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php deleted file mode 100644 index 1325076..0000000 --- a/app/Providers/RouteServiceProvider.php +++ /dev/null @@ -1,69 +0,0 @@ -. - */ - -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 the "home" route for your application. - * - * Typically, users are redirected here after authentication. - * - * @var string - */ - public const HOME = '/admin'; - - /** - * Define your route model bindings, pattern filters, and other route configuration. - * - * @return void - */ - public function boot() - { - $this->configureRateLimiting(); - - $this->routes(function () { - Route::middleware('api') - ->prefix('api') - ->group(base_path('routes/api.php')); - - Route::middleware('web') - ->group(base_path('routes/web.php')); - }); - } - - /** - * Configure the rate limiters for the application. - * - * @return void - */ - protected function configureRateLimiting() - { - RateLimiter::for('api', function (Request $request) { - return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); - }); - } -} diff --git a/bootstrap/app.php b/bootstrap/app.php index aba7142..cd8b79b 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -10,7 +10,9 @@ return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', + api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', + channels: __DIR__.'/../routes/channels.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/bootstrap/providers.php similarity index 70% rename from app/Http/Middleware/VerifyCsrfToken.php rename to bootstrap/providers.php index a954df6..a6d850c 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/bootstrap/providers.php @@ -1,4 +1,10 @@ . */ -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 - */ - protected $except = [ - // - ]; -} +return [ + AppServiceProvider::class, + FortifyServiceProvider::class, + HorizonServiceProvider::class, + AdminPanelProvider::class, +]; diff --git a/composer.json b/composer.json index f717897..a436ba6 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,7 @@ "filament/filament": "^5.0", "google/apiclient": "^2.18", "laravel/fortify": "^1.13", - "laravel/framework": "^12.0", + "laravel/framework": "^13.0", "laravel/horizon": "^5.48", "laravel/sanctum": "^v4.0.0", "laravel/tinker": "^3.0", diff --git a/composer.lock b/composer.lock index 2ebbc81..c456350 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4746205b64fc9957f3e6a110e6e5fedd", + "content-hash": "1994053bca54aacd1e17c8eee926269c", "packages": [ { "name": "anourvalar/eloquent-serialize", @@ -278,24 +278,24 @@ }, { "name": "brick/math", - "version": "0.14.8", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629" + "reference": "2effe05d2177c451b86c6a073196a4034c02f211" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/63422359a44b7f06cae63c3b429b59e8efcc0629", - "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629", + "url": "https://api.github.com/repos/brick/math/zipball/2effe05d2177c451b86c6a073196a4034c02f211", + "reference": "2effe05d2177c451b86c6a073196a4034c02f211", "shasum": "" }, "require": { "php": "^8.2" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpstan/phpstan": "2.1.22", + "phpstan/phpstan": "2.2.13", + "phpstan/phpstan-phpunit": "2.0.18", "phpunit/phpunit": "^11.5" }, "type": "library", @@ -326,7 +326,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.14.8" + "source": "https://github.com/brick/math/tree/1.0.0" }, "funding": [ { @@ -334,7 +334,7 @@ "type": "github" } ], - "time": "2026-02-10T14:33:43+00:00" + "time": "2026-09-12T10:28:18+00:00" }, { "name": "carbonphp/carbon-doctrine-types", @@ -997,23 +997,23 @@ }, { "name": "doctrine/inflector", - "version": "2.1.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + "reference": "46351b6812b7b6d52b82c3efa5dfb786a198ec88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", - "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/46351b6812b7b6d52b82c3efa5dfb786a198ec88", + "reference": "46351b6812b7b6d52b82c3efa5dfb786a198ec88", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^12.0 || ^13.0", + "doctrine/coding-standard": "^12.0 || ^14.0", "phpstan/phpstan": "^1.12 || ^2.0", "phpstan/phpstan-phpunit": "^1.4 || ^2.0", "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", @@ -1067,7 +1067,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.1.0" + "source": "https://github.com/doctrine/inflector/tree/2.1.1" }, "funding": [ { @@ -1083,7 +1083,7 @@ "type": "tidelift" } ], - "time": "2025-08-10T19:31:58+00:00" + "time": "2026-10-26T08:14:14+00:00" }, { "name": "doctrine/lexer", @@ -2002,16 +2002,16 @@ }, { "name": "google/apiclient-services", - "version": "v0.462.0", + "version": "v0.465.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "da59366999d50aea47215c0834d88dce4ba5323a" + "reference": "f35b67ab75c8ec4760782c03c047ce89ab8d265e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/da59366999d50aea47215c0834d88dce4ba5323a", - "reference": "da59366999d50aea47215c0834d88dce4ba5323a", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/f35b67ab75c8ec4760782c03c047ce89ab8d265e", + "reference": "f35b67ab75c8ec4760782c03c047ce89ab8d265e", "shasum": "" }, "require": { @@ -2040,22 +2040,22 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client-services/issues", - "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.462.0" + "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.465.0" }, - "time": "2026-10-05T01:38:19+00:00" + "time": "2026-10-26T01:14:21+00:00" }, { "name": "google/auth", - "version": "v1.55.1", + "version": "v1.55.3", "source": { "type": "git", "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "ef1b92cb42470b09b3caaf23bb9b4bb9a2dc787e" + "reference": "81d6d2bd311ba5fb579e52f6c8aa2d660379de75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/ef1b92cb42470b09b3caaf23bb9b4bb9a2dc787e", - "reference": "ef1b92cb42470b09b3caaf23bb9b4bb9a2dc787e", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/81d6d2bd311ba5fb579e52f6c8aa2d660379de75", + "reference": "81d6d2bd311ba5fb579e52f6c8aa2d660379de75", "shasum": "" }, "require": { @@ -2077,8 +2077,7 @@ "sebastian/comparator": ">=1.2.3", "squizlabs/php_codesniffer": "^4.0", "symfony/filesystem": "^6.4.39||^7.3", - "symfony/process": "^6.4.41||^7.0", - "webmozart/assert": "^1.11||^2.0" + "symfony/process": "^6.4.41||^7.0" }, "suggest": { "phpseclib/phpseclib": "May be used in place of OpenSSL for signing strings or for token management. Please require version ^2." @@ -2111,9 +2110,9 @@ "support": { "docs": "https://cloud.google.com/php/docs/reference/auth/latest", "issues": "https://github.com/googleapis/google-auth-library-php/issues", - "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.55.1" + "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.55.3" }, - "time": "2026-09-28T17:51:46+00:00" + "time": "2026-10-28T23:00:54+00:00" }, { "name": "graham-campbell/result-type", @@ -2179,26 +2178,27 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.16.1", + "version": "8.3.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "81755d989b3007ca7f88a069857553cd08e7dc2e" + "reference": "7d9b1f430bb65ac664e120af227bf9a795ad6333" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/81755d989b3007ca7f88a069857553cd08e7dc2e", - "reference": "81755d989b3007ca7f88a069857553cd08e7dc2e", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7d9b1f430bb65ac664e120af227bf9a795ad6333", + "reference": "7d9b1f430bb65ac664e120af227bf9a795ad6333", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^2.6", - "guzzlehttp/psr7": "^2.13.2", - "php": "^7.2.5 || ^8.0", + "guzzlehttp/promises": "^3.1", + "guzzlehttp/psr7": "^3.2", + "php": "^7.4 || ^8.0", "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.5 || ^3.0", - "symfony/polyfill-php80": "^1.25" + "psr/http-factory": "^1.0", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php82": "^1.27" }, "provide": { "psr/http-client-implementation": "1.0" @@ -2206,10 +2206,10 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "guzzle/client-integration-tests": "3.0.3", - "guzzlehttp/test-server": "^0.7", + "guzzle/client-integration-tests": "4.0.1", + "guzzlehttp/test-server": "^1.1", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.52 || ^9.6.34", + "phpunit/phpunit": "^9.6.34", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -2225,9 +2225,6 @@ } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\": "src/" } @@ -2287,7 +2284,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.16.1" + "source": "https://github.com/guzzle/guzzle/tree/8.3.1" }, "funding": [ { @@ -2303,29 +2300,29 @@ "type": "tidelift" } ], - "time": "2026-10-25T21:35:21+00:00" + "time": "2026-10-25T21:35:34+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.6.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "3d88c829bd5f13d13847b39067dbf09a60af2154" + "reference": "094d0ec418eb3b1411ea271a180ec95cae6ae933" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/3d88c829bd5f13d13847b39067dbf09a60af2154", - "reference": "3d88c829bd5f13d13847b39067dbf09a60af2154", + "url": "https://api.github.com/repos/guzzle/promises/zipball/094d0ec418eb3b1411ea271a180ec95cae6ae933", + "reference": "094d0ec418eb3b1411ea271a180ec95cae6ae933", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0", + "php": "^7.4 || ^8.0", "symfony/deprecation-contracts": "^2.5 || ^3.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.52 || ^9.6.34" + "phpunit/phpunit": "^9.6.34" }, "type": "library", "extra": { @@ -2371,7 +2368,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.6.0" + "source": "https://github.com/guzzle/promises/tree/3.1.0" }, "funding": [ { @@ -2387,39 +2384,39 @@ "type": "tidelift" } ], - "time": "2026-10-18T12:46:59+00:00" + "time": "2026-10-18T12:48:16+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.13.2", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "adee536f95101929f262b8c59e8a61472f347d58" + "reference": "cdc139396207a5eba10c242d241fb014cb098390" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/adee536f95101929f262b8c59e8a61472f347d58", - "reference": "adee536f95101929f262b8c59e8a61472f347d58", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/cdc139396207a5eba10c242d241fb014cb098390", + "reference": "cdc139396207a5eba10c242d241fb014cb098390", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.1 || ^2.0", - "ralouphie/getallheaders": "^3.0", - "symfony/deprecation-contracts": "^2.5 || ^3.0", - "symfony/polyfill-php80": "^1.25" + "php": "^7.4 || ^8.0", + "psr/http-factory": "^1.1", + "psr/http-message": "^2.0", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php82": "^1.27" }, "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" + "psr/http-factory-implementation": "1.1", + "psr/http-message-implementation": "2.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "1.1.0", "jshttp/mime-db": "1.54.0.1", - "phpunit/phpunit": "^8.5.52 || ^9.6.34" + "php-http/psr7-integration-tests": "^1.5.1", + "phpunit/phpunit": "^9.6.34" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -2490,7 +2487,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.13.2" + "source": "https://github.com/guzzle/psr7/tree/3.2.0" }, "funding": [ { @@ -2506,30 +2503,30 @@ "type": "tidelift" } ], - "time": "2026-10-17T23:49:46+00:00" + "time": "2026-10-17T23:57:19+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.11", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "d0058dccf4299d70c3d9da3378b8908b32780368" + "reference": "7a466ad606491eb6528c717482f7cca77f1851f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/d0058dccf4299d70c3d9da3378b8908b32780368", - "reference": "d0058dccf4299d70c3d9da3378b8908b32780368", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/7a466ad606491eb6528c717482f7cca77f1851f3", + "reference": "7a466ad606491eb6528c717482f7cca77f1851f3", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0", + "php": "^7.4 || ^8.0", "symfony/polyfill-php80": "^1.25" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.52 || ^9.6.34", - "uri-template/tests": "1.0.0" + "phpunit/phpunit": "^9.6.34", + "uri-template/tests": "1.0.2" }, "type": "library", "extra": { @@ -2576,7 +2573,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.11" + "source": "https://github.com/guzzle/uri-template/tree/v2.0.1" }, "funding": [ { @@ -2592,7 +2589,7 @@ "type": "tidelift" } ], - "time": "2026-08-24T09:15:32+00:00" + "time": "2026-08-24T17:13:02+00:00" }, { "name": "kirschbaum-development/eloquent-power-joins", @@ -2724,24 +2721,24 @@ }, { "name": "laravel/framework", - "version": "v12.70.1", + "version": "v13.39.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "e09fc54263d1a56cfe1709958fcbb22a4159b1e3" + "reference": "d52c3b3129e4c8e213c97cdc68f94b0b7d27f181" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/e09fc54263d1a56cfe1709958fcbb22a4159b1e3", - "reference": "e09fc54263d1a56cfe1709958fcbb22a4159b1e3", + "url": "https://api.github.com/repos/laravel/framework/zipball/d52c3b3129e4c8e213c97cdc68f94b0b7d27f181", + "reference": "d52c3b3129e4c8e213c97cdc68f94b0b7d27f181", "shasum": "" }, "require": { - "brick/math": "^0.11|^0.12|^0.13|^0.14", + "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17 || ^0.18 || ^0.19 || ^0.20 || ^1.0", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.4", - "egulias/email-validator": "^3.2.1|^4.0", + "egulias/email-validator": "^4.0", "ext-ctype": "*", "ext-filter": "*", "ext-hash": "*", @@ -2750,36 +2747,39 @@ "ext-session": "*", "ext-tokenizer": "*", "fruitcake/php-cors": "^1.3", - "guzzlehttp/guzzle": "^7.8.2", - "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.3.0", - "laravel/serializable-closure": "^1.3|^2.0", + "guzzlehttp/guzzle": "^7.8.2 || ^8.0", + "guzzlehttp/promises": "^2.0.3 || ^3.0", + "guzzlehttp/psr7": "^2.9 || ^3.0", + "guzzlehttp/uri-template": "^1.0 || ^2.0", + "laravel/prompts": "^0.3.25", + "laravel/serializable-closure": "^2.0.10", "league/commonmark": "^2.8.1", "league/flysystem": "^3.25.1", "league/flysystem-local": "^3.25.1", "league/uri": "^7.5.1", - "monolog/monolog": "^3.0", + "monolog/monolog": "^3.10", "nesbot/carbon": "^3.8.4", "nunomaduro/termwind": "^2.0", - "php": "^8.2", - "psr/container": "^1.1.1|^2.0.1", - "psr/log": "^1.0|^2.0|^3.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", + "php": "^8.3", + "psr/container": "^1.1.1 || ^2.0.1", + "psr/http-message": "^1.0 || ^2.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^7.2.0", - "symfony/error-handler": "^7.2.0", - "symfony/finder": "^7.2.0", - "symfony/http-foundation": "^7.2.0", - "symfony/http-kernel": "^7.2.0", - "symfony/mailer": "^7.2.0", - "symfony/mime": "^7.2.0", - "symfony/polyfill-php83": "^1.33", - "symfony/polyfill-php84": "^1.34", - "symfony/polyfill-php85": "^1.34", - "symfony/process": "^7.2.0", - "symfony/routing": "^7.2.0", - "symfony/uid": "^7.2.0", - "symfony/var-dumper": "^7.2.0", + "symfony/console": "^7.4.0 || ^8.0.0", + "symfony/error-handler": "^7.4.0 || ^8.0.0", + "symfony/finder": "^7.4.0 || ^8.0.0", + "symfony/http-foundation": "^7.4.0 || ^8.0.0", + "symfony/http-kernel": "^7.4.0 || ^8.0.0", + "symfony/mailer": "^7.4.0 || ^8.0.0", + "symfony/mime": "^7.4.0 || ^8.0.0", + "symfony/polyfill-php84": "^1.36", + "symfony/polyfill-php85": "^1.36", + "symfony/polyfill-php86": "^1.36", + "symfony/process": "^7.4.5 || ^8.0.5", + "symfony/routing": "^7.4.0 || ^8.0.0", + "symfony/uid": "^7.4.0 || ^8.0.0", + "symfony/var-dumper": "^7.4.0 || ^8.0.0", "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.6.1", "voku/portable-ascii": "^2.0.2" @@ -2788,9 +2788,9 @@ "tightenco/collect": "<5.5.33" }, "provide": { - "psr/container-implementation": "1.1|2.0", - "psr/log-implementation": "1.0|2.0|3.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0" + "psr/container-implementation": "1.1 || 2.0", + "psr/log-implementation": "1.0 || 2.0 || 3.0", + "psr/simple-cache-implementation": "1.0 || 2.0 || 3.0" }, "replace": { "illuminate/auth": "self.version", @@ -2811,6 +2811,7 @@ "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", + "illuminate/image": "self.version", "illuminate/json-schema": "self.version", "illuminate/log": "self.version", "illuminate/macroable": "self.version", @@ -2836,8 +2837,7 @@ "aws/aws-sdk-php": "^3.322.9", "ext-gmp": "*", "fakerphp/faker": "^1.24", - "guzzlehttp/promises": "^2.0.3", - "guzzlehttp/psr7": "^2.4", + "intervention/image": "^4.2", "laravel/pint": "^1.18", "league/flysystem-aws-s3-v3": "^3.25.1", "league/flysystem-ftp": "^3.25.1", @@ -2846,22 +2846,25 @@ "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", "opis/json-schema": "^2.4.1", - "orchestra/testbench-core": "^10.15.0", - "pda/pheanstalk": "^5.0.6|^7.0.0", + "orchestra/testbench-core": "^11.6.0", + "pda/pheanstalk": "^7.0.0 || ^8.0.0", "php-http/discovery": "^1.15", - "phpstan/phpstan": "2.2.13", - "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1", - "predis/predis": "^2.3|^3.0", - "resend/resend-php": "^0.10.0|^1.0", - "symfony/cache": "^7.2.0", - "symfony/http-client": "^7.2.0", - "symfony/psr-http-message-bridge": "^7.2.0", - "symfony/translation": "^7.2.0" + "phpstan/phpstan": "2.3.1", + "phpunit/phpunit": "^11.5.50 || ^12.5.8 || ^13.0.3", + "predis/predis": "^2.3 || ^3.0", + "rector/rector": "2.6.3", + "resend/resend-php": "^1.0", + "symfony/cache": "^7.4.0 || ^8.0.0", + "symfony/http-client": "^7.4.0 || ^8.0.0", + "symfony/mercure": "^0.8.0", + "symfony/psr-http-message-bridge": "^7.4.0 || ^8.0.0", + "symfony/translation": "^7.4.0 || ^8.0.0", + "web-token/jwt-library": "^4.1" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", - "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", + "brianium/paratest": "Required to run tests in parallel (^7.0 || ^8.0).", "ext-apcu": "Required to use the APC cache driver.", "ext-fileinfo": "Required to use the Filesystem class.", "ext-ftp": "Required to use the Flysystem FTP driver.", @@ -2870,9 +2873,10 @@ "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", "ext-pdo": "Required to use all database features.", "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0 || ^5.0 || ^6.0).", "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "intervention/image": "Required to use the image processing features (^4.2).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", @@ -2880,24 +2884,26 @@ "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", "mockery/mockery": "Required to use mocking (^1.6).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^7.0 || ^8.0).", "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", - "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).", - "predis/predis": "Required to use the predis connector (^2.3|^3.0).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0|^1.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^7.2).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.2).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.2)." + "phpunit/phpunit": "Required to use assertions and run tests (^11.5.50 || ^12.5.8 || ^13.0.3).", + "predis/predis": "Required to use the predis connector (^2.3 || ^3.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0 || ^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0 || ^1.0).", + "spatie/fork": "Required to use the 'fork' concurrency driver (^1.2).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.4 || ^8.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.4 || ^8.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.4 || ^8.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.4 || ^8.0).", + "symfony/mercure": "Required to use the Mercure broadcast driver (^0.8).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.4 || ^8.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.4 || ^8.0).", + "web-token/jwt-library": "Required to sign Mercure JWTs and use end-to-end encrypted channels (^4.1)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "12.x-dev" + "dev-master": "13.0.x-dev" } }, "autoload": { @@ -2942,7 +2948,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-10-21T12:55:36+00:00" + "time": "2026-10-27T14:04:39+00:00" }, { "name": "laravel/horizon", @@ -3401,16 +3407,16 @@ }, { "name": "league/commonmark", - "version": "2.10.4", + "version": "2.10.7", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "40821b7606d8d946bac57dbd2290076c722e3a65" + "reference": "8eb53e906fd60c67038d22f1f1cab420ed58b8be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/40821b7606d8d946bac57dbd2290076c722e3a65", - "reference": "40821b7606d8d946bac57dbd2290076c722e3a65", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/8eb53e906fd60c67038d22f1f1cab420ed58b8be", + "reference": "8eb53e906fd60c67038d22f1f1cab420ed58b8be", "shasum": "" }, "require": { @@ -3504,7 +3510,7 @@ "type": "tidelift" } ], - "time": "2026-10-17T19:59:50+00:00" + "time": "2026-10-31T13:35:37+00:00" }, { "name": "league/config", @@ -3590,32 +3596,33 @@ }, { "name": "league/csv", - "version": "9.28.0", + "version": "9.29.0", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "6582ace29ae09ba5b07049d40ea13eb19c8b5073" + "reference": "13d5600d2c935c8785707e7d1d44ca1f2a22d6f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/6582ace29ae09ba5b07049d40ea13eb19c8b5073", - "reference": "6582ace29ae09ba5b07049d40ea13eb19c8b5073", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/13d5600d2c935c8785707e7d1d44ca1f2a22d6f4", + "reference": "13d5600d2c935c8785707e7d1d44ca1f2a22d6f4", "shasum": "" }, "require": { "ext-filter": "*", - "php": "^8.1.2" + "php": "^8.2.0" }, "require-dev": { "ext-dom": "*", "ext-xdebug": "*", "friendsofphp/php-cs-fixer": "^3.92.3", "phpbench/phpbench": "^1.4.3", - "phpstan/phpstan": "^1.12.32", - "phpstan/phpstan-deprecation-rules": "^1.2.1", - "phpstan/phpstan-phpunit": "^1.4.2", - "phpstan/phpstan-strict-rules": "^1.6.2", - "phpunit/phpunit": "^10.5.16 || ^11.5.22 || ^12.5.4", + "phpstan/phpstan": "^2.2.8", + "phpstan/phpstan-deprecation-rules": "^2.0.5", + "phpstan/phpstan-phpunit": "^2.0.18", + "phpstan/phpstan-strict-rules": "^2.0.12", + "phpunit/phpunit": "^11.5.22 || ^12.5.4 || ^13.3.1", + "rector/rector": "^2.6.3", "symfony/var-dumper": "^6.4.8 || ^7.4.0 || ^8.0" }, "suggest": { @@ -3639,7 +3646,10 @@ ], "psr-4": { "League\\Csv\\": "src" - } + }, + "classmap": [ + "polyfill" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3677,7 +3687,7 @@ "type": "github" } ], - "time": "2025-12-27T15:18:42+00:00" + "time": "2026-10-28T08:56:24+00:00" }, { "name": "league/flysystem", @@ -3869,21 +3879,21 @@ }, { "name": "league/uri", - "version": "7.9.0", + "version": "7.9.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "fcc872a3d872aa13f935e0cd1887b9abb06da07f" + "reference": "40403f5c3141457a61f7f1aba6706e8fa4a0ece5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/fcc872a3d872aa13f935e0cd1887b9abb06da07f", - "reference": "fcc872a3d872aa13f935e0cd1887b9abb06da07f", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/40403f5c3141457a61f7f1aba6706e8fa4a0ece5", + "reference": "40403f5c3141457a61f7f1aba6706e8fa4a0ece5", "shasum": "" }, "require": { "ext-mbstring": "*", - "league/uri-interfaces": "^7.9.0", + "league/uri-interfaces": "^7.9.1", "php": "^8.1", "psr/http-factory": "^1" }, @@ -3956,7 +3966,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.9.0" + "source": "https://github.com/thephpleague/uri/tree/7.9.1" }, "funding": [ { @@ -3964,24 +3974,24 @@ "type": "github" } ], - "time": "2026-10-16T15:19:33+00:00" + "time": "2026-10-27T07:14:23+00:00" }, { "name": "league/uri-components", - "version": "7.9.0", + "version": "7.9.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-components.git", - "reference": "4e37c1663f7d0daebbab6b3d947631b0835b3943" + "reference": "d831eb3ca07f43b771d7208e13421761efcdf724" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/4e37c1663f7d0daebbab6b3d947631b0835b3943", - "reference": "4e37c1663f7d0daebbab6b3d947631b0835b3943", + "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/d831eb3ca07f43b771d7208e13421761efcdf724", + "reference": "d831eb3ca07f43b771d7208e13421761efcdf724", "shasum": "" }, "require": { - "league/uri": "^7.9.0", + "league/uri": "^7.9.1", "php": "^8.1" }, "suggest": { @@ -4040,7 +4050,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-components/tree/7.9.0" + "source": "https://github.com/thephpleague/uri-components/tree/7.9.1" }, "funding": [ { @@ -4048,20 +4058,20 @@ "type": "github" } ], - "time": "2026-10-16T15:19:33+00:00" + "time": "2026-10-27T07:14:23+00:00" }, { "name": "league/uri-interfaces", - "version": "7.9.0", + "version": "7.9.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "eb5f6d24e6a4fe0a8e9c78ded4eb1dfff1404f58" + "reference": "994300a79e17f179112dc259f8df0c4de982f736" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/eb5f6d24e6a4fe0a8e9c78ded4eb1dfff1404f58", - "reference": "eb5f6d24e6a4fe0a8e9c78ded4eb1dfff1404f58", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/994300a79e17f179112dc259f8df0c4de982f736", + "reference": "994300a79e17f179112dc259f8df0c4de982f736", "shasum": "" }, "require": { @@ -4124,7 +4134,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.9.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.9.1" }, "funding": [ { @@ -4132,7 +4142,7 @@ "type": "github" } ], - "time": "2026-10-16T15:19:33+00:00" + "time": "2026-10-27T07:14:23+00:00" }, { "name": "livewire/livewire", @@ -4423,16 +4433,16 @@ }, { "name": "nette/php-generator", - "version": "v4.2.3", + "version": "v4.2.4", "source": { "type": "git", "url": "https://github.com/nette/php-generator.git", - "reference": "abdfd4c22f9077af10daa7391d14e83fc36ba809" + "reference": "19818e4924f9620d016b874e5b7518e78dbb3b24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/php-generator/zipball/abdfd4c22f9077af10daa7391d14e83fc36ba809", - "reference": "abdfd4c22f9077af10daa7391d14e83fc36ba809", + "url": "https://api.github.com/repos/nette/php-generator/zipball/19818e4924f9620d016b874e5b7518e78dbb3b24", + "reference": "19818e4924f9620d016b874e5b7518e78dbb3b24", "shasum": "" }, "require": { @@ -4488,9 +4498,9 @@ ], "support": { "issues": "https://github.com/nette/php-generator/issues", - "source": "https://github.com/nette/php-generator/tree/v4.2.3" + "source": "https://github.com/nette/php-generator/tree/v4.2.4" }, - "time": "2026-10-22T01:12:52+00:00" + "time": "2026-10-26T22:16:39+00:00" }, { "name": "nette/schema", @@ -5214,16 +5224,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.3.7", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "3fcdcf021e840f1ec9383152e3603fc790c7c15b" + "reference": "af8e840551031d254cfdb3a18a62c3470a309c10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/3fcdcf021e840f1ec9383152e3603fc790c7c15b", - "reference": "3fcdcf021e840f1ec9383152e3603fc790c7c15b", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/af8e840551031d254cfdb3a18a62c3470a309c10", + "reference": "af8e840551031d254cfdb3a18a62c3470a309c10", "shasum": "" }, "require": { @@ -5255,9 +5265,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.7" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.4.1" }, - "time": "2026-10-26T17:24:37+00:00" + "time": "2026-10-30T19:36:28+00:00" }, { "name": "pragmarx/google2fa", @@ -5931,50 +5941,6 @@ }, "time": "2026-06-29T15:41:09+00:00" }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, { "name": "ramsey/collection", "version": "2.1.1", @@ -7155,47 +7121,49 @@ }, { "name": "symfony/console", - "version": "v7.4.21", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "21f1bc2296f7ff6043241a8dcbc09559b3732820" + "reference": "5b6d9b127ec27bc6db59bf65e2e37b6fe5b00083" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/21f1bc2296f7ff6043241a8dcbc09559b3732820", - "reference": "21f1bc2296f7ff6043241a8dcbc09559b3732820", + "url": "https://api.github.com/repos/symfony/console/zipball/5b6d9b127ec27bc6db59bf65e2e37b6fe5b00083", + "reference": "5b6d9b127ec27bc6db59bf65e2e37b6fe5b00083", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php85": "^1.32", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.2|^8.0" + "symfony/string": "^7.4.6|^8.0.6" }, "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" + "symfony/dependency-injection": "<8.1", + "symfony/event-dispatcher": "<8.1" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/event-dispatcher": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/lock": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/event-dispatcher": "^8.1", + "symfony/filesystem": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -7229,7 +7197,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.21" + "source": "https://github.com/symfony/console/tree/v8.1.10" }, "funding": [ { @@ -7249,20 +7217,20 @@ "type": "tidelift" } ], - "time": "2026-10-12T18:45:38+00:00" + "time": "2026-10-28T11:16:19+00:00" }, { "name": "symfony/css-selector", - "version": "v8.1.6", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "08e2905152a39cf3fd1745d83f8c483e258887d9" + "reference": "9cfd588b8b07cf83e3426b030dbafd2291c132d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/08e2905152a39cf3fd1745d83f8c483e258887d9", - "reference": "08e2905152a39cf3fd1745d83f8c483e258887d9", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/9cfd588b8b07cf83e3426b030dbafd2291c132d9", + "reference": "9cfd588b8b07cf83e3426b030dbafd2291c132d9", "shasum": "" }, "require": { @@ -7298,7 +7266,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v8.1.6" + "source": "https://github.com/symfony/css-selector/tree/v8.1.10" }, "funding": [ { @@ -7318,7 +7286,7 @@ "type": "tidelift" } ], - "time": "2026-08-23T10:06:25+00:00" + "time": "2026-10-18T14:56:39+00:00" }, { "name": "symfony/deprecation-contracts", @@ -7393,33 +7361,32 @@ }, { "name": "symfony/error-handler", - "version": "v7.4.20", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "82239fe00f7cdc9f17c4166fff4ebdc22bd26ec0" + "reference": "84c6d73f990ae22dbd45625c056d7ff99ca6810d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/82239fe00f7cdc9f17c4166fff4ebdc22bd26ec0", - "reference": "82239fe00f7cdc9f17c4166fff4ebdc22bd26ec0", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/84c6d73f990ae22dbd45625c056d7ff99ca6810d", + "reference": "84c6d73f990ae22dbd45625c056d7ff99ca6810d", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "psr/log": "^1|^2|^3", "symfony/polyfill-php85": "^1.32", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/var-dumper": "^7.4|^8.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5", - "symfony/http-kernel": "<6.4" + "symfony/deprecation-contracts": "<2.5" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0", + "symfony/console": "^7.4|^8.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", "symfony/webpack-encore-bundle": "^1.0|^2.0" }, "bin": [ @@ -7451,7 +7418,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.4.20" + "source": "https://github.com/symfony/error-handler/tree/v8.1.10" }, "funding": [ { @@ -7471,7 +7438,7 @@ "type": "tidelift" } ], - "time": "2026-09-22T18:56:40+00:00" + "time": "2026-10-25T14:40:25+00:00" }, { "name": "symfony/event-dispatcher", @@ -7641,23 +7608,23 @@ }, { "name": "symfony/finder", - "version": "v7.4.20", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "2dd31e5208db7a0fda7bfc998ad727b79c2e4d1e" + "reference": "2f4c0f26106520d82e1b71759d2fb8d32d8b7a43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/2dd31e5208db7a0fda7bfc998ad727b79c2e4d1e", - "reference": "2dd31e5208db7a0fda7bfc998ad727b79c2e4d1e", + "url": "https://api.github.com/repos/symfony/finder/zipball/2f4c0f26106520d82e1b71759d2fb8d32d8b7a43", + "reference": "2f4c0f26106520d82e1b71759d2fb8d32d8b7a43", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4.1" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0|^8.0" + "symfony/filesystem": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -7685,7 +7652,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.4.20" + "source": "https://github.com/symfony/finder/tree/v8.1.10" }, "funding": [ { @@ -7705,20 +7672,20 @@ "type": "tidelift" } ], - "time": "2026-09-26T06:31:10+00:00" + "time": "2026-10-19T17:00:07+00:00" }, { "name": "symfony/html-sanitizer", - "version": "v8.1.8", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/html-sanitizer.git", - "reference": "c67061a71d3f8b55f899faee3167422efa4db027" + "reference": "04db2207946727a8793a9bcb8dcfaea6391b5c2a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/c67061a71d3f8b55f899faee3167422efa4db027", - "reference": "c67061a71d3f8b55f899faee3167422efa4db027", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/04db2207946727a8793a9bcb8dcfaea6391b5c2a", + "reference": "04db2207946727a8793a9bcb8dcfaea6391b5c2a", "shasum": "" }, "require": { @@ -7757,7 +7724,7 @@ "sanitizer" ], "support": { - "source": "https://github.com/symfony/html-sanitizer/tree/v8.1.8" + "source": "https://github.com/symfony/html-sanitizer/tree/v8.1.10" }, "funding": [ { @@ -7777,41 +7744,40 @@ "type": "tidelift" } ], - "time": "2026-09-28T08:00:04+00:00" + "time": "2026-10-20T19:26:02+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.4.21", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "58c89144c7a36dd89c3d01917e9fa3a72d8aaf31" + "reference": "79325f87c3a2acc7564ddce9f457046e980e7255" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/58c89144c7a36dd89c3d01917e9fa3a72d8aaf31", - "reference": "58c89144c7a36dd89c3d01917e9fa3a72d8aaf31", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/79325f87c3a2acc7564ddce9f457046e980e7255", + "reference": "79325f87c3a2acc7564ddce9f457046e980e7255", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "^1.1" }, "conflict": { - "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + "doctrine/dbal": "<4.3" }, "require-dev": { - "doctrine/dbal": "^3.6|^4", + "doctrine/dbal": "^4.3", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4.12|^7.1.5|^8.0", - "symfony/clock": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/mime": "^6.4|^7.0|^8.0", - "symfony/rate-limiter": "^6.4|^7.0|^8.0" + "symfony/cache": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -7839,7 +7805,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.4.21" + "source": "https://github.com/symfony/http-foundation/tree/v8.1.10" }, "funding": [ { @@ -7859,78 +7825,69 @@ "type": "tidelift" } ], - "time": "2026-10-08T16:56:12+00:00" + "time": "2026-10-27T12:24:10+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.4.21", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "4779fce7dedacb8801b2b61c703ef99159502331" + "reference": "924974dbdcdf4cc40d7bb2c65ae83bb6dc67cff1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4779fce7dedacb8801b2b61c703ef99159502331", - "reference": "4779fce7dedacb8801b2b61c703ef99159502331", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/924974dbdcdf4cc40d7bb2c65ae83bb6dc67cff1", + "reference": "924974dbdcdf4cc40d7bb2c65ae83bb6dc67cff1", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0|^8.0", - "symfony/event-dispatcher": "^7.3|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", "symfony/http-foundation": "^7.4|^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<6.4", - "symfony/cache": "<6.4", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<6.4", + "symfony/dependency-injection": "<8.1", "symfony/flex": "<2.10", - "symfony/form": "<6.4", - "symfony/http-client": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", - "symfony/translation": "<6.4", + "symfony/serializer": "<7.4.15|>=8.0,<8.0.15|>=8.1,<8.1.2", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.4", - "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.4", - "twig/twig": "<3.12" + "symfony/var-dumper": "<8.1", + "symfony/web-profiler-bundle": "<8.1", + "twig/twig": "<3.21" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^6.4|^7.0|^8.0", - "symfony/clock": "^6.4|^7.0|^8.0", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/css-selector": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4.1|^7.0.1|^8.0", - "symfony/dom-crawler": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/browser-kit": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/css-selector": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/dom-crawler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/property-access": "^7.1|^8.0", - "symfony/routing": "^6.4|^7.0|^8.0", - "symfony/serializer": "^7.1|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^6.4|^7.0|^8.0", - "symfony/validator": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0", - "symfony/var-exporter": "^6.4|^7.0|^8.0", - "twig/twig": "^3.12|^4.0" + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^8.1", + "symfony/var-exporter": "^7.4|^8.0", + "twig/twig": "^3.21|^4.0" }, "type": "library", "autoload": { @@ -7958,7 +7915,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.4.21" + "source": "https://github.com/symfony/http-kernel/tree/v8.1.10" }, "funding": [ { @@ -7978,43 +7935,39 @@ "type": "tidelift" } ], - "time": "2026-10-14T06:44:08+00:00" + "time": "2026-10-28T18:22:19+00:00" }, { "name": "symfony/mailer", - "version": "v7.4.19", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "6f6f2441bef07a42d2617b9b3aadf04a321aa514" + "reference": "4ba81a8f04fbf0bb1691f7bff760b301f1956fd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/6f6f2441bef07a42d2617b9b3aadf04a321aa514", - "reference": "6f6f2441bef07a42d2617b9b3aadf04a321aa514", + "url": "https://api.github.com/repos/symfony/mailer/zipball/4ba81a8f04fbf0bb1691f7bff760b301f1956fd7", + "reference": "4ba81a8f04fbf0bb1691f7bff760b301f1956fd7", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.2", + "php": ">=8.4.1", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^6.4|^7.0|^8.0", - "symfony/mime": "^7.2|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/messenger": "<6.4", - "symfony/mime": "<6.4", - "symfony/twig-bridge": "<6.4" + "symfony/http-client-contracts": "<2.5" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/twig-bridge": "^6.4|^7.0|^8.0" + "symfony/console": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/twig-bridge": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -8042,7 +7995,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.4.19" + "source": "https://github.com/symfony/mailer/tree/v8.1.10" }, "funding": [ { @@ -8062,44 +8015,41 @@ "type": "tidelift" } ], - "time": "2026-09-15T06:01:15+00:00" + "time": "2026-10-23T17:06:53+00:00" }, { "name": "symfony/mime", - "version": "v7.4.22", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "94a4c017435bc515f5ac80421a2c555fb9ca3676" + "reference": "8d1232052c9cdef170ed9608b3147bca4f61ff69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/94a4c017435bc515f5ac80421a2c555fb9ca3676", - "reference": "94a4c017435bc515f5ac80421a2c555fb9ca3676", + "url": "https://api.github.com/repos/symfony/mime/zipball/8d1232052c9cdef170ed9608b3147bca4f61ff69", + "reference": "8d1232052c9cdef170ed9608b3147bca4f61ff69", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.4.1", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<5.2|>=7", - "phpdocumentor/type-resolver": "<1.5.1", - "symfony/mailer": "<6.4", - "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + "phpdocumentor/type-resolver": "<1.5.1" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^5.2|^6.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/property-access": "^6.4|^7.0|^8.0", - "symfony/property-info": "^6.4|^7.0|^8.0", - "symfony/serializer": "^6.4.44|^7.4.17|^8.1.5" + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/property-info": "^7.4|^8.0", + "symfony/serializer": "^7.4.17|^8.1.5" }, "type": "library", "autoload": { @@ -8131,7 +8081,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.4.22" + "source": "https://github.com/symfony/mime/tree/v8.1.10" }, "funding": [ { @@ -8151,7 +8101,7 @@ "type": "tidelift" } ], - "time": "2026-10-28T17:57:58+00:00" + "time": "2026-10-28T17:58:38+00:00" }, { "name": "symfony/polyfill-ctype", @@ -8238,16 +8188,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.43.0", + "version": "v1.43.3", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "5cac8f4db97208823aa353f59a01faad2da52c75" + "reference": "5a8f33c87aeecffce24e721b5064fab05f4becf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5cac8f4db97208823aa353f59a01faad2da52c75", - "reference": "5cac8f4db97208823aa353f59a01faad2da52c75", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5a8f33c87aeecffce24e721b5064fab05f4becf8", + "reference": "5a8f33c87aeecffce24e721b5064fab05f4becf8", "shasum": "" }, "require": { @@ -8296,7 +8246,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.43.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.43.3" }, "funding": [ { @@ -8316,7 +8266,7 @@ "type": "tidelift" } ], - "time": "2026-09-25T15:46:47+00:00" + "time": "2026-10-15T09:18:53+00:00" }, { "name": "symfony/polyfill-intl-idn", @@ -8492,16 +8442,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.43.0", + "version": "v1.43.3", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72" + "reference": "122889ed24dc000165bcbfd77ec412f15cbdfc6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", - "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/122889ed24dc000165bcbfd77ec412f15cbdfc6a", + "reference": "122889ed24dc000165bcbfd77ec412f15cbdfc6a", "shasum": "" }, "require": { @@ -8553,7 +8503,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.43.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.43.3" }, "funding": [ { @@ -8573,7 +8523,7 @@ "type": "tidelift" } ], - "time": "2026-09-24T15:19:04+00:00" + "time": "2026-10-28T09:35:49+00:00" }, { "name": "symfony/polyfill-php80", @@ -8739,6 +8689,86 @@ ], "time": "2026-05-26T12:45:58+00:00" }, + { + "name": "symfony/polyfill-php82", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php82.git", + "reference": "843bbe8b2a7934307b749751eede0f111f5d1cfc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/843bbe8b2a7934307b749751eede0f111f5d1cfc", + "reference": "843bbe8b2a7934307b749751eede0f111f5d1cfc", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php82\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php82/tree/v1.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-25T15:50:05+00:00" + }, { "name": "symfony/polyfill-php83", "version": "v1.43.0", @@ -8979,6 +9009,86 @@ ], "time": "2026-09-25T15:46:47+00:00" }, + { + "name": "symfony/polyfill-php86", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php86.git", + "reference": "8840df45b24f33a49dc419fa18dc0057231ae1d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/8840df45b24f33a49dc419fa18dc0057231ae1d8", + "reference": "8840df45b24f33a49dc419fa18dc0057231ae1d8", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php86\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php86/tree/v1.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-25T15:46:47+00:00" + }, { "name": "symfony/polyfill-time", "version": "v1.42.0", @@ -9147,20 +9257,20 @@ }, { "name": "symfony/process", - "version": "v7.4.21", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "e5247f4a5e0797d232ad8e8e6803aeb341843c83" + "reference": "08aa69fa0998bb65a089f9e148a2c0f8b391398e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/e5247f4a5e0797d232ad8e8e6803aeb341843c83", - "reference": "e5247f4a5e0797d232ad8e8e6803aeb341843c83", + "url": "https://api.github.com/repos/symfony/process/zipball/08aa69fa0998bb65a089f9e148a2c0f8b391398e", + "reference": "08aa69fa0998bb65a089f9e148a2c0f8b391398e", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4.1" }, "type": "library", "autoload": { @@ -9188,7 +9298,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.4.21" + "source": "https://github.com/symfony/process/tree/v8.1.10" }, "funding": [ { @@ -9208,20 +9318,20 @@ "type": "tidelift" } ], - "time": "2026-10-08T16:56:12+00:00" + "time": "2026-10-25T14:40:25+00:00" }, { "name": "symfony/property-access", - "version": "v8.1.4", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "1a41232c678972b93ce499a504e19ea09dfcd0b2" + "reference": "38ce2d539230c1d0e3c42198289c4bae5e931727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/1a41232c678972b93ce499a504e19ea09dfcd0b2", - "reference": "1a41232c678972b93ce499a504e19ea09dfcd0b2", + "url": "https://api.github.com/repos/symfony/property-access/zipball/38ce2d539230c1d0e3c42198289c4bae5e931727", + "reference": "38ce2d539230c1d0e3c42198289c4bae5e931727", "shasum": "" }, "require": { @@ -9269,7 +9379,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v8.1.4" + "source": "https://github.com/symfony/property-access/tree/v8.1.10" }, "funding": [ { @@ -9289,20 +9399,20 @@ "type": "tidelift" } ], - "time": "2026-07-30T12:40:56+00:00" + "time": "2026-10-26T21:55:04+00:00" }, { "name": "symfony/property-info", - "version": "v8.1.8", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "fe727d4888a92ac9200a2c1b8e0a995b6022afa7" + "reference": "cb5bfc9fbc9da75fdb1b8860a29d9c4fefb2b924" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/fe727d4888a92ac9200a2c1b8e0a995b6022afa7", - "reference": "fe727d4888a92ac9200a2c1b8e0a995b6022afa7", + "url": "https://api.github.com/repos/symfony/property-info/zipball/cb5bfc9fbc9da75fdb1b8860a29d9c4fefb2b924", + "reference": "cb5bfc9fbc9da75fdb1b8860a29d9c4fefb2b924", "shasum": "" }, "require": { @@ -9355,7 +9465,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v8.1.8" + "source": "https://github.com/symfony/property-info/tree/v8.1.10" }, "funding": [ { @@ -9375,38 +9485,33 @@ "type": "tidelift" } ], - "time": "2026-09-28T19:13:15+00:00" + "time": "2026-10-25T14:40:25+00:00" }, { "name": "symfony/routing", - "version": "v7.4.21", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "7a344cf871532d081875bfdd18f3dff8dca36c5b" + "reference": "41b32d2c5d907abe2c3ffaa7a112dd7492353822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/7a344cf871532d081875bfdd18f3dff8dca36c5b", - "reference": "7a344cf871532d081875bfdd18f3dff8dca36c5b", + "url": "https://api.github.com/repos/symfony/routing/zipball/41b32d2c5d907abe2c3ffaa7a112dd7492353822", + "reference": "41b32d2c5d907abe2c3ffaa7a112dd7492353822", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/deprecation-contracts": "^2.5|^3" }, - "conflict": { - "symfony/config": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/yaml": "<6.4" - }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/yaml": "^6.4|^7.0|^8.0" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -9440,7 +9545,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.4.21" + "source": "https://github.com/symfony/routing/tree/v8.1.10" }, "funding": [ { @@ -9460,20 +9565,20 @@ "type": "tidelift" } ], - "time": "2026-10-11T18:40:59+00:00" + "time": "2026-10-26T21:55:04+00:00" }, { "name": "symfony/serializer", - "version": "v8.1.9", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "bc6f84d67225d7a25d56af6d4bd52e9e34997a96" + "reference": "b9b8831cd84a5304e43f2bb92cb0e88290ba2082" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/bc6f84d67225d7a25d56af6d4bd52e9e34997a96", - "reference": "bc6f84d67225d7a25d56af6d4bd52e9e34997a96", + "url": "https://api.github.com/repos/symfony/serializer/zipball/b9b8831cd84a5304e43f2bb92cb0e88290ba2082", + "reference": "b9b8831cd84a5304e43f2bb92cb0e88290ba2082", "shasum": "" }, "require": { @@ -9539,7 +9644,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v8.1.9" + "source": "https://github.com/symfony/serializer/tree/v8.1.10" }, "funding": [ { @@ -9559,7 +9664,7 @@ "type": "tidelift" } ], - "time": "2026-10-12T19:11:16+00:00" + "time": "2026-10-25T14:40:25+00:00" }, { "name": "symfony/service-contracts", @@ -9650,16 +9755,16 @@ }, { "name": "symfony/string", - "version": "v8.1.9", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "07fb208558f941eab50ec49c89c2a6a93fb11f01" + "reference": "6c6110979c0150393bbb336170e286d51ab4d76c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/07fb208558f941eab50ec49c89c2a6a93fb11f01", - "reference": "07fb208558f941eab50ec49c89c2a6a93fb11f01", + "url": "https://api.github.com/repos/symfony/string/zipball/6c6110979c0150393bbb336170e286d51ab4d76c", + "reference": "6c6110979c0150393bbb336170e286d51ab4d76c", "shasum": "" }, "require": { @@ -9716,7 +9821,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.1.9" + "source": "https://github.com/symfony/string/tree/v8.1.10" }, "funding": [ { @@ -9736,20 +9841,20 @@ "type": "tidelift" } ], - "time": "2026-10-03T15:16:03+00:00" + "time": "2026-10-23T17:06:53+00:00" }, { "name": "symfony/translation", - "version": "v8.1.5", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "d9e1caba0d6b6f9a26710af8a2f88d37f001215a" + "reference": "8fbbb32f4bbbece5079acb01ab648fd20583fc93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/d9e1caba0d6b6f9a26710af8a2f88d37f001215a", - "reference": "d9e1caba0d6b6f9a26710af8a2f88d37f001215a", + "url": "https://api.github.com/repos/symfony/translation/zipball/8fbbb32f4bbbece5079acb01ab648fd20583fc93", + "reference": "8fbbb32f4bbbece5079acb01ab648fd20583fc93", "shasum": "" }, "require": { @@ -9809,7 +9914,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v8.1.5" + "source": "https://github.com/symfony/translation/tree/v8.1.10" }, "funding": [ { @@ -9829,7 +9934,7 @@ "type": "tidelift" } ], - "time": "2026-08-21T17:47:34+00:00" + "time": "2026-10-25T14:40:25+00:00" }, { "name": "symfony/translation-contracts", @@ -9915,16 +10020,16 @@ }, { "name": "symfony/type-info", - "version": "v8.1.8", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "18e1d891f0b8776141f281f7b6f5e67e4df9d9cd" + "reference": "2083d4516f9041b8ac550d9029afb08fcf09d0ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/18e1d891f0b8776141f281f7b6f5e67e4df9d9cd", - "reference": "18e1d891f0b8776141f281f7b6f5e67e4df9d9cd", + "url": "https://api.github.com/repos/symfony/type-info/zipball/2083d4516f9041b8ac550d9029afb08fcf09d0ad", + "reference": "2083d4516f9041b8ac550d9029afb08fcf09d0ad", "shasum": "" }, "require": { @@ -9973,7 +10078,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v8.1.8" + "source": "https://github.com/symfony/type-info/tree/v8.1.10" }, "funding": [ { @@ -9993,28 +10098,28 @@ "type": "tidelift" } ], - "time": "2026-09-28T19:13:15+00:00" + "time": "2026-10-25T14:40:25+00:00" }, { "name": "symfony/uid", - "version": "v7.4.21", + "version": "v8.1.9", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "3e706a245b5343ea93be9cafe84525bfb54e60fc" + "reference": "cb487cf30380f0b0b090973bb9c0588193c06685" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/3e706a245b5343ea93be9cafe84525bfb54e60fc", - "reference": "3e706a245b5343ea93be9cafe84525bfb54e60fc", + "url": "https://api.github.com/repos/symfony/uid/zipball/cb487cf30380f0b0b090973bb9c0588193c06685", + "reference": "cb487cf30380f0b0b090973bb9c0588193c06685", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0" + "symfony/console": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -10051,7 +10156,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.4.21" + "source": "https://github.com/symfony/uid/tree/v8.1.9" }, "funding": [ { @@ -10071,35 +10176,35 @@ "type": "tidelift" } ], - "time": "2026-10-12T14:31:36+00:00" + "time": "2026-10-12T14:32:04+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.4.21", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "55d06b02f49eca9bff61828548988e6f8763e8a6" + "reference": "3412a5af7d34a19515a77890fc804fe8e50d1a4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/55d06b02f49eca9bff61828548988e6f8763e8a6", - "reference": "55d06b02f49eca9bff61828548988e6f8763e8a6", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3412a5af7d34a19515a77890fc804fe8e50d1a4f", + "reference": "3412a5af7d34a19515a77890fc804fe8e50d1a4f", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4.1", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { - "symfony/console": "<6.4" + "symfony/console": "<7.4", + "symfony/error-handler": "<7.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", "twig/twig": "^3.12|^4.0" }, "bin": [ @@ -10138,7 +10243,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.4.21" + "source": "https://github.com/symfony/var-dumper/tree/v8.1.10" }, "funding": [ { @@ -10158,7 +10263,7 @@ "type": "tidelift" } ], - "time": "2026-10-13T05:48:33+00:00" + "time": "2026-10-26T21:55:04+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -10519,16 +10624,16 @@ }, { "name": "web-auth/webauthn-lib", - "version": "5.3.9", + "version": "5.3.10", "source": { "type": "git", "url": "https://github.com/web-auth/webauthn-lib.git", - "reference": "727e378fb7a36c26be5c911e4a0120c146741ce7" + "reference": "894f6be8c8a47354a4dfd134a5979246e26d8639" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/727e378fb7a36c26be5c911e4a0120c146741ce7", - "reference": "727e378fb7a36c26be5c911e4a0120c146741ce7", + "url": "https://api.github.com/repos/web-auth/webauthn-lib/zipball/894f6be8c8a47354a4dfd134a5979246e26d8639", + "reference": "894f6be8c8a47354a4dfd134a5979246e26d8639", "shasum": "" }, "require": { @@ -10589,7 +10694,7 @@ "webauthn" ], "support": { - "source": "https://github.com/web-auth/webauthn-lib/tree/5.3.9" + "source": "https://github.com/web-auth/webauthn-lib/tree/5.3.10" }, "funding": [ { @@ -10601,7 +10706,7 @@ "type": "patreon" } ], - "time": "2026-09-10T21:10:45+00:00" + "time": "2026-10-31T12:44:21+00:00" }, { "name": "webmozart/assert", @@ -11043,16 +11148,16 @@ }, { "name": "composer/semver", - "version": "3.5.1", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "528948210cc46f967a4b98e83b19e76f2b504993" + "reference": "d92543b7ede9c4ec6b59853cefb061e39866d2cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/528948210cc46f967a4b98e83b19e76f2b504993", - "reference": "528948210cc46f967a4b98e83b19e76f2b504993", + "url": "https://api.github.com/repos/composer/semver/zipball/d92543b7ede9c4ec6b59853cefb061e39866d2cf", + "reference": "d92543b7ede9c4ec6b59853cefb061e39866d2cf", "shasum": "" }, "require": { @@ -11104,7 +11209,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.5.1" + "source": "https://github.com/composer/semver/tree/3.6.0" }, "funding": [ { @@ -11116,7 +11221,7 @@ "type": "github" } ], - "time": "2026-10-05T13:12:12+00:00" + "time": "2026-10-29T09:13:34+00:00" }, { "name": "composer/xdebug-handler", @@ -11376,16 +11481,16 @@ }, { "name": "filp/whoops", - "version": "2.18.6", + "version": "2.18.7", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "7d0a2cde892089bb09372f4366e9b960eb3001a9" + "reference": "50670ba239926c50f2073e868f6672f775cd57ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/7d0a2cde892089bb09372f4366e9b960eb3001a9", - "reference": "7d0a2cde892089bb09372f4366e9b960eb3001a9", + "url": "https://api.github.com/repos/filp/whoops/zipball/50670ba239926c50f2073e868f6672f775cd57ec", + "reference": "50670ba239926c50f2073e868f6672f775cd57ec", "shasum": "" }, "require": { @@ -11435,7 +11540,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.18.6" + "source": "https://github.com/filp/whoops/tree/2.18.7" }, "funding": [ { @@ -11443,7 +11548,7 @@ "type": "github" } ], - "time": "2026-10-03T17:03:57+00:00" + "time": "2026-10-18T13:17:38+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -11640,16 +11745,16 @@ }, { "name": "laravel/boost", - "version": "v2.10.3", + "version": "v2.10.4", "source": { "type": "git", "url": "https://github.com/laravel/boost.git", - "reference": "75c269a8a53e931c7252e7cd562e1a209356a7c6" + "reference": "9cd5e7d81300b5dee4c8b1619ec4b36f4a6367fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/boost/zipball/75c269a8a53e931c7252e7cd562e1a209356a7c6", - "reference": "75c269a8a53e931c7252e7cd562e1a209356a7c6", + "url": "https://api.github.com/repos/laravel/boost/zipball/9cd5e7d81300b5dee4c8b1619ec4b36f4a6367fd", + "reference": "9cd5e7d81300b5dee4c8b1619ec4b36f4a6367fd", "shasum": "" }, "require": { @@ -11668,7 +11773,7 @@ "laravel/pint": "^1.27.0", "mockery/mockery": "^1.6.12", "orchestra/testbench": "^9.15.0|^10.6|^11.0", - "pestphp/pest": "^2.36.0|^3.8.4|^4.1.5", + "pestphp/pest": "^2.36.0|^3.8.4|^4.1.5|^5.3.3", "phpstan/phpstan": "^2.1.27", "rector/rector": "^2.1" }, @@ -11703,20 +11808,20 @@ "issues": "https://github.com/laravel/boost/issues", "source": "https://github.com/laravel/boost" }, - "time": "2026-10-07T19:07:19+00:00" + "time": "2026-10-29T18:31:16+00:00" }, { "name": "laravel/mcp", - "version": "v1.0.2", + "version": "v1.1.2", "source": { "type": "git", "url": "https://github.com/laravel/mcp.git", - "reference": "26c7803551028653beab49af0e672ae38607b772" + "reference": "ab9238ce6c89095679651dd3d19d67641d73a436" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/mcp/zipball/26c7803551028653beab49af0e672ae38607b772", - "reference": "26c7803551028653beab49af0e672ae38607b772", + "url": "https://api.github.com/repos/laravel/mcp/zipball/ab9238ce6c89095679651dd3d19d67641d73a436", + "reference": "ab9238ce6c89095679651dd3d19d67641d73a436", "shasum": "" }, "require": { @@ -11778,7 +11883,7 @@ "issues": "https://github.com/laravel/mcp/issues", "source": "https://github.com/laravel/mcp" }, - "time": "2026-10-11T20:52:46+00:00" + "time": "2026-10-26T17:48:48+00:00" }, { "name": "laravel/pail", @@ -12868,16 +12973,16 @@ }, { "name": "php-debugbar/php-debugbar", - "version": "v3.8.0", + "version": "v3.8.1", "source": { "type": "git", "url": "https://github.com/php-debugbar/php-debugbar.git", - "reference": "18ced90d4b882ed449b2278fea8692f8f7d1c13c" + "reference": "d04a382b80e320c7abdbe9fc66e83b34e80edef4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/18ced90d4b882ed449b2278fea8692f8f7d1c13c", - "reference": "18ced90d4b882ed449b2278fea8692f8f7d1c13c", + "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/d04a382b80e320c7abdbe9fc66e83b34e80edef4", + "reference": "d04a382b80e320c7abdbe9fc66e83b34e80edef4", "shasum": "" }, "require": { @@ -12954,7 +13059,7 @@ ], "support": { "issues": "https://github.com/php-debugbar/php-debugbar/issues", - "source": "https://github.com/php-debugbar/php-debugbar/tree/v3.8.0" + "source": "https://github.com/php-debugbar/php-debugbar/tree/v3.8.1" }, "funding": [ { @@ -12966,7 +13071,7 @@ "type": "github" } ], - "time": "2026-07-02T12:38:20+00:00" + "time": "2026-10-25T20:20:41+00:00" }, { "name": "php-debugbar/symfony-bridge", @@ -14853,16 +14958,16 @@ }, { "name": "symfony/yaml", - "version": "v8.1.9", + "version": "v8.1.10", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "6107ee26a25215c3df3af0a3315e56bb4fd0b7db" + "reference": "9de4ff9874dd18b738b9f248398c3e36ef15a1d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/6107ee26a25215c3df3af0a3315e56bb4fd0b7db", - "reference": "6107ee26a25215c3df3af0a3315e56bb4fd0b7db", + "url": "https://api.github.com/repos/symfony/yaml/zipball/9de4ff9874dd18b738b9f248398c3e36ef15a1d2", + "reference": "9de4ff9874dd18b738b9f248398c3e36ef15a1d2", "shasum": "" }, "require": { @@ -14905,7 +15010,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v8.1.9" + "source": "https://github.com/symfony/yaml/tree/v8.1.10" }, "funding": [ { @@ -14925,7 +15030,7 @@ "type": "tidelift" } ], - "time": "2026-10-12T12:37:13+00:00" + "time": "2026-10-18T14:56:39+00:00" }, { "name": "ta-tikoma/phpunit-architecture-test", diff --git a/config/app.php b/config/app.php index cb5782d..d12ac8d 100644 --- a/config/app.php +++ b/config/app.php @@ -19,6 +19,7 @@ */ use Illuminate\Support\Facades\Facade; +use RealRashid\SweetAlert\Facades\Alert; return [ @@ -170,64 +171,6 @@ // 'store' => 'redis', ], - /* - |-------------------------------------------------------------------------- - | Autoloaded Service Providers - |-------------------------------------------------------------------------- - | - | The service providers listed here will be automatically loaded on the - | request to your application. Feel free to add your own services to - | this array to grant expanded functionality to your applications. - | - */ - - 'providers' => [ - - Illuminate\Concurrency\ConcurrencyServiceProvider::class, - /* - * Laravel Framework Service Providers... - */ - Illuminate\Auth\AuthServiceProvider::class, - Illuminate\Broadcasting\BroadcastServiceProvider::class, - Illuminate\Bus\BusServiceProvider::class, - Illuminate\Cache\CacheServiceProvider::class, - Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, - Illuminate\Cookie\CookieServiceProvider::class, - Illuminate\Database\DatabaseServiceProvider::class, - Illuminate\Encryption\EncryptionServiceProvider::class, - Illuminate\Filesystem\FilesystemServiceProvider::class, - Illuminate\Foundation\Providers\FoundationServiceProvider::class, - Illuminate\Hashing\HashServiceProvider::class, - Illuminate\Mail\MailServiceProvider::class, - Illuminate\Notifications\NotificationServiceProvider::class, - Illuminate\Pagination\PaginationServiceProvider::class, - Illuminate\Pipeline\PipelineServiceProvider::class, - Illuminate\Queue\QueueServiceProvider::class, - Illuminate\Redis\RedisServiceProvider::class, - Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, - Illuminate\Session\SessionServiceProvider::class, - Illuminate\Translation\TranslationServiceProvider::class, - Illuminate\Validation\ValidationServiceProvider::class, - Illuminate\View\ViewServiceProvider::class, - - /* - * Package Service Providers... - */ - - /* - * Application Service Providers... - */ - App\Providers\AppServiceProvider::class, - App\Providers\AuthServiceProvider::class, - App\Providers\BroadcastServiceProvider::class, - App\Providers\EventServiceProvider::class, - App\Providers\HorizonServiceProvider::class, - App\Providers\Filament\AdminPanelProvider::class, - App\Providers\RouteServiceProvider::class, - App\Providers\FortifyServiceProvider::class, - - ], - /* |-------------------------------------------------------------------------- | Class Aliases @@ -240,7 +183,7 @@ */ 'aliases' => Facade::defaultAliases()->merge([ - 'Alert' => RealRashid\SweetAlert\Facades\Alert::class, + 'Alert' => Alert::class, ])->toArray(), ]; diff --git a/config/fortify.php b/config/fortify.php index 8f0c835..a9357ac 100644 --- a/config/fortify.php +++ b/config/fortify.php @@ -18,7 +18,6 @@ * along with this program. If not, see . */ -use App\Providers\RouteServiceProvider; use Laravel\Fortify\Features; use Spatie\Honeypot\ProtectAgainstSpam; @@ -80,7 +79,7 @@ | */ - 'home' => RouteServiceProvider::HOME, + 'home' => '/admin', /* |-------------------------------------------------------------------------- diff --git a/deploy.php b/deploy.php index c39a4a5..81e92c1 100644 --- a/deploy.php +++ b/deploy.php @@ -58,18 +58,14 @@ // Shared Files (persisted across deployments) set('shared_files', [ '.env', // Environment configuration - 'public/mix-manifest.json', // Laravel Mix manifest for asset versioning ]); // Shared Directories (persisted across deployments) +// Vite's public/build (with the site's images) comes with each release's CI artifact, so it isn't +// shared, and Filament republishes public/css, public/js and public/fonts on every deploy. set('shared_dirs', [ 'storage', // Laravel storage (logs, cache, uploads) - 'public/css', // Compiled CSS files - 'public/js', // Compiled JavaScript files - 'public/fonts', // Web fonts - 'public/images', // Static images - 'public/svg', // SVG assets - 'public/vendor', // Vendor assets (Filament, etc.) + 'public/vendor', // Vendor assets (Horizon, Sweet Alert) ]); // Files/Directories to Remove After Deployment diff --git a/package.json b/package.json index f0c8501..21a28d3 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,19 @@ { "private": true, + "type": "module", "scripts": { - "dev": "npm run development", - "development": "mix", - "watch": "mix watch", - "watch-poll": "mix watch -- --watch-options-poll=1000", - "hot": "mix watch --hot", - "prod": "npm run production", - "production": "mix --production", + "dev": "vite", + "build": "vite build", "postinstall": "yarn cache clean" }, "devDependencies": { - "axios": "1.20.0", + "axios": "1.21.0", + "imagesloaded": "^5.0.0", + "isotope-layout": "^3.0.6", "jquery": "^4.0.0", - "laravel-mix": "^6.0.49", - "lodash": "^4.18.1", - "postcss": "^8.5.31" + "jquery-bridget": "^3.0.1", + "laravel-vite-plugin": "^3.2.0", + "vite": "^8.3.5" }, "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610" } diff --git a/resources/js/app.js b/resources/js/app.js index b117300..9b7029f 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -18,10 +18,12 @@ import './bootstrap'; import './vendor/bootstrap.bundle.min'; -import './vendor/imagesloaded.pkgd.min'; -import './vendor/isotope.pkgd.min.js'; import './vendor/jquery.nav'; import './vendor/jquery-appear'; import './vendor/tilt'; import './main'; import './google-translate'; + +// Let Vite version the images Blade references with Vite::asset(). +// Eager ?url imports, because Vite 8 drops an unused lazy glob from the build. +import.meta.glob('../images/**', { eager: true, query: '?url', import: 'default' }); diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js index f2fc861..d15c507 100644 --- a/resources/js/bootstrap.js +++ b/resources/js/bootstrap.js @@ -17,13 +17,18 @@ * along with this program. If not, see . */ -import _ from 'lodash'; -window._ = _; - // Make sure jQuery is available globally import $ from 'jquery'; window.$ = window.jQuery = $; +// Isotope and imagesLoaded as jQuery plugins: $(...).isotope() and $(...).imagesLoaded() +import jQueryBridget from 'jquery-bridget'; +import Isotope from 'isotope-layout'; +import imagesLoaded from 'imagesloaded'; + +jQueryBridget('isotope', Isotope, $); +imagesLoaded.makeJQueryPlugin($); + /** * We'll load the axios HTTP library which allows us to easily issue requests * to our Laravel back-end. This library automatically handles sending the @@ -51,10 +56,10 @@ window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; // window.Echo = new Echo({ // broadcaster: 'pusher', -// key: import.meta.env.MIX_PUSHER_APP_KEY, -// wsHost: import.meta.env.MIX_PUSHER_HOST ?? `ws-${import.meta.env.MIX_PUSHER_APP_CLUSTER}.pusher.com`, -// wsPort: import.meta.env.MIX_PUSHER_PORT ?? 80, -// wssPort: import.meta.env.MIX_PUSHER_PORT ?? 443, -// forceTLS: (import.meta.env.MIX_PUSHER_SCHEME ?? 'https') === 'https', +// key: import.meta.env.VITE_PUSHER_APP_KEY, +// wsHost: import.meta.env.VITE_PUSHER_HOST ?? `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`, +// wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80, +// wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443, +// forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https', // enabledTransports: ['ws', 'wss'], // }); diff --git a/resources/js/vendor/imagesloaded.pkgd.min.js b/resources/js/vendor/imagesloaded.pkgd.min.js deleted file mode 100644 index e443a77..0000000 --- a/resources/js/vendor/imagesloaded.pkgd.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * imagesLoaded PACKAGED v4.1.4 - * JavaScript is all like "You images are done yet or what?" - * MIT License - */ - -!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0,this}},t.off=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){var n=i.indexOf(t);return n!=-1&&i.splice(n,1),this}},t.emitEvent=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){i=i.slice(0),t=t||[];for(var n=this._onceEvents&&this._onceEvents[e],o=0;o